May 3, 2021

Wie man (k)einen Impftermin bekommt


2021-06-07 Update

Der unten beschriebene Alterstest ist nun wegefallen, der Websitecode wurde geupdated. Eine archivierte Version des Codes welche vor Juni die Impfvergabe regelte kann bei web.archive.org abgerufen werend.


2021-05-30 Update

Mit Hinblick auf das Wegfallen der Impfpriorisierung am 7. Juni steht auf github.com/rksm/impftermin-finder ein Open-Source Programm zur Verfügung welches das automatisierte Abfragen von freien Kapazitäten via impfterminservice.de erlaubt. Dies kann helfen einen Code zu erhalten der dann für eine Terminvereinbarung gebraucht wird. Im Moment ist das so gebaut nur Impfzentren in Brandenburg zu berücksichtigen, es sollte aber leicht seine das Programm so zu erweitern, dass es auch mit anderen Bundesländern funktioniert welche impfterminservice.de nutzen.


Zusammenfassung

Die Webseite impfterminservice.de ist Teil der Maßnahmen im Zuge der Coronavirus-Impfverordnung die Personen in einigen Bundesländern Termine zur Coronaschutz-Impfung ermöglichen soll. Diese unterliegt der Impfpriorisierung des Bundes und der Bundesländer. Die Zuteilung von Impfterminen über die Webseite passiert aber nach Regeln die für einen normalen Anwender nicht ersichtlich sind und nicht kommuniziert werden. Menschen bestimmter Altersgruppen werden über diese Webseite keine Zuteilung zu Impfterminen mit mRNA Impfstoffe erhalten, auch wenn diese im System als verfügbar markiert wurden.

Hintergrund

Die Webseite impfterminservice.de ist ein von der Kassenärztlichen Bundesvereinigung seit Anfang März betriebenes Internetangebot zur Terminvergabe von Corona-Schutzimpfungen. Die Seite ist Teil der Maßnahmen der Coronavirus-Impfverordnung vom 10. März 2021 die ein “standardisiertes Modul zur telefonischen und digitalen Vereinbarung von Terminen in den Impfzentren” vorschreibt.

Die Seite dient also für eine Reihe von Bundesländern als offizieller Weg um einen Termin in dem vom Bund betriebenen Impfzentren zu machen. Aufgrund der immer noch sehr knappen Abgabe von Impfstoffen an die Hausärzte ist es darüberhinaus in einigen Regionen auch die im Moment einzige realistische Möglichkeit für Menschen der Gruppe 3 an eine Coronaschutzimpfung zu gelangen.

Impfzentren werden mit allen vier in der EU zugelassenen SARS-CoV-2-Impfstoffen beliefert: BioNTech, Moderna, AstraZeneca und Johnson & Johnson. Aufgrund der sich verändernden Erkenntnislage hinsichtlich Wirksamkeit und Nebenwirkungen gab es in den vergangenen Wochen eine breit diskutierte Veränderung der Impfempfehlung vor allem hinsichtlich des Alters der zu impfenden Personen. Die momentan geltenden Empfehlung priorisiert AstraZeneca für Menschen älter als 60. Zu bemerken ist hier, dass dies eine Empfehlung ist, auch für Menschen älter als 60 sind die mRNA Impfstoffe zugelassen und wirksam. Darüber hinaus kann es auch in dieser Altersgruppe medizinisch indizierte Gründe geben warum von einem Vektorimpfstoff wie AstraZeneca oder Johnson & Johnson abgeraten wird.

Man sollte deshalb annehmen, dass die offizielle Impfvergabe dies berücksichtigt und allen Impfberechtigten gleichrangig ein Impfangebot machen würde. Wie sich nach der Analyse des (offiziell verfügbaren wenn auch maschinell schwer leserlich gemachten) Quellcodes von impfterminservice.de aber herausstellt ist dem nicht so.

Wie funktioniert die Logik zur Terminvergabe von Impfungen?

Impftermine werden in drei Schritten vergeben. Im ersten Schritt wird ein Bundesland und ein Impfzentrum ausgewählt.

Schritt 1a: Auswahl des Impfzentrums

Dann erfolgt die Abfrage ob ein schon vorhandener Impftermin eingesehen / verändert werden oder nach der Verfügbarkeit eines neuen Termins gesucht werden soll.

Schritt 1b: Abfrage neuer Impftermin bei Auswahl "Nein"

Bei dem Klick auf “Nein” erfolgt eine Abfrage mittels eines HTTP-Requests nach Terminen für alle vier Impfstoffe, z.B.

https://097-iz.impfterminservice.de/rest/suche/termincheck?plz=16225&leistungsmerkmale=L920,L921,L922,L923

Die Kürzel L920 - L923 kodieren dabei die Impfstoffe. Im Quellcode der Webseite findet sich diese Aufschlüsselung:

{
  qualification: "L920",
  name: "Comirnaty (BioNTech)",
  tssname: "BioNTech",
  interval: 40,
  age: "16-17",
},
{
  qualification: "L921",
  name: "mRNA-1273 (Moderna)",
  tssname: "Moderna, BioNTech",
  interval: 40,
  age: "18-59",
},
{
  qualification: "L922",
  name: "COVID-1912 (AstraZeneca)",
  tssname: "Moderna, BioNTech, AstraZeneca",
  interval: 40,
  age: "60+",
},
{
  qualification: "L923",
  name: "COVID-19 Vaccine Janssen (Johnson & Johnson)",
  tssname: "Johnson&Johnson",
  age: "18+",
},

Sollte ein Termin für einen (oder mehreren) dieser Impfstoffe erhältlich sein, gibt die /rest/such/termincheck Abfrage eine Datenstruktur wie z.B. {"termineVorhanden":true,"vorhandeneLeistungsmerkmale":["L920"]} zurück. In diesem Fall wäre also ein Termin mit BioNTech verfügbar.

Ist dies nicht der Fall erscheint eine Mitteilung und die Terminabfrage endet. Ist dies der Fall, geht es weiter zum Schritt 2.

Hier wird nun das Alter der Person abgefragt.

Schritt 2: Alterseingabe

Sobald nun auf “Schnellprüfung durchführen” geklickt wird, filtert die Webseite die Liste der zuvor als verfügbar angegebenen Termine herunter, basierend auf Alter und Impfstoff:

vaccineForAge = function(e) {
    if (e >= 16 && e < 18)
        return this.vaccineAvailable(bx.BioNTech) ? [bx.BioNTech] : null;
    if (e >= 18 && e < 60) {
        if (this.vaccineAvailable(bx.JohnsonAndJohnson))
            return [bx.JohnsonAndJohnson];
        if (this.vaccineAvailable(bx.Moderna) || this.vaccineAvailable(bx.BioNTech))
            return [bx.Moderna]
    }
    if (e >= 60) {
        if (this.vaccineAvailable(bx.JohnsonAndJohnson))
            return [bx.JohnsonAndJohnson];
        if (this.vaccineAvailable(bx.AstraZeneca) || this.vaccineAvailable(bx.Moderna) || this.vaccineAvailable(bx.BioNTech))
            return [bx.AstraZeneca]
    }
    return null
}

Der obige Qellcode ist eine formatierter Auszug des oben verlinkten Webseitenquellcodes. Die Variable e steht dabei für das eingegebene Alter. In Kurzform:

  • Wurde ein Alter von 16 oder 17 Jahren angegeben und BioNTech ist verfügbar wird ein Terminangebot gemacht.
  • Wurde ein Alter von 18 bis 60 Jahren angegeben und Johnson & Johnson (Priorität 1) oder Moderna (Priorität 2) ist verfügbar, wird ein Terminangebot gemacht (auch wenn BioNTech vefügbar ist!).
  • Wurde ein Alter von 60 oder mehr Jahren angegeben wird ein Angebot für Johnson & Johnson (Priorität 1) oder AstraZeneca (Priorität 2) bei Verfügbarkeit gemacht. (Auch wenn BioNTech oder Moderna vefügbar sind!).

Das bedeutet, dass hier eine Vorfilterung stattfindet die an keiner Stelle kommuniziert wird und potentiell die Erwartungen der Nutzer nicht entspricht. Insbesondere, sollten nur Moderna / BioNTech Termine für Menschen 60 Jahre oder älter verfügbar sein, so werden diese Angebote nicht gemacht.

Im dritten Schritt wird nun via Text Nachricht und Email ein Vermittlungscode mitgeteilt. Dieser stellt die Voraussetzung für einen Termin dar und an diesen werden persönliche Daten wie Name und Telefonnummer der Person gebunden — und der Impfstoff. Mit dem Vermittlungscode kann nun der eigentlich Termin vereinbart werden. Der Code wird zusammen mit der PLZ des Impfzentrums und einem Cookie der den Vermittlungscode zu kodieren scheint an den Server von impfterminservice.de geschickt und eine Liste von Terminen kommt zurück. Diese Liste kann leer sein falls gerade kein Termin vorhanden ist. Der Vermittlungscode von Schritt 2 dient also nur einer voraussichtlichen Terminvergabe. Man muss immer wieder probieren um letztendlich einen Termin zu erhalten.

Ich möchte und kann keine Beurteilung hinsichtlich des medizinischen Sinnes dieser Regelung abgeben. Was aber auffällt ist, dass diese Regel an keiner Stelle kommuniziert wird. Menschen über 18 die impfberechtigt sind und für die aus medizinischen Gründen nur eine mRNA Impfung empfehlenswert ist, werden im Glauben gelassen sie könnten einen Impftermin erhalten. Dies aber ist mit der im Moment programmierten Version von impfterminservice.de ausgeschlossen.

Anmerkung zur Analyse

Die Analyse basiert auf der Durchsicht des frei verfügbaren HTML und JavaScript Qellcodes der Webseite impfterminservice.de vom 3 Mai 2021. Diese ist für jeden Besucher der Webseite (z.B. via Chrome devtools) ersichtlich.

Quellenangabe Bilder: Das im meta-tag verlinkte Bild ist CC-BY-NC 3.0 lizensiert, unverändert, Fotograf ist Tim Reckmann.
Die Screenshots im Artikel sind vom Autor von der Webseite impfterminservice.de angefertigt.

© Robert Krahn 2009-2023