not-a-feature / impfWidget

iOS Widget, welches anzeigt ob im lokalen Impfzentrum Vermittlungscodes verfügbar sind. (für die scriptable.app)
GNU General Public License v3.0
16 stars 4 forks source link

Fehler bei Prüfung #4

Open Kolbi opened 3 years ago

Kolbi commented 3 years ago

Die aktuelle Version zeigt mir verfügbare Termine an, obwohl keine Verfügbar sind.

Kolbi commented 3 years ago

Okay Fehler gefunden: https://005-iz.impfterminservice.de/rest/suche/termincheck?plz=[PLZ]&leistungsmerkmale=L920 {"termineVorhanden":false} https://005-iz.impfterminservice.de/rest/suche/termincheck?plz=[PLZ]&leistungsmerkmale=L921 {"termineVorhanden":false} https://005-iz.impfterminservice.de/rest/suche/termincheck?plz=[PLZ]&leistungsmerkmale=L922 => {"termineVorhanden":true}

Aber die Prüfung mit dem zugeschickten Link per E-Mail ergibt keine freien Termine... hast du eine Idee warum?

not-a-feature commented 3 years ago

Liegt daran, dass die die Impfstoffe nach Alter vergeben werden. Im JS der Seite impfterminservice.de ist zu finden:

e.prototype.qualificationsForAge = function (e) {
        var t = null;
        return e >= 65 && (t = 'Moderna'),
        e >= 18 && e < 65 && (t = 'AstraZeneca'),
        e >= 16 && e < 18 && (t = 'BioNTech'),
        t ? this.vaccineList.filter((function (e) {
          return - 1 !== e.name.indexOf(t)
        })).map((function (e) {
          return e.qualification
        })) : null
      },

==> 16-17 BioNTech, 18-64 AstraZenenca, 65+ Moderna (Bzw Moderna und BioNTech)

Genau dafür gibt es die "Advaced Settings":

const VACCINES = [{"name": "BioNTech",    "ID": "L920", "allowed": true},
                  {"name": "Moderna",     "ID": "L921", "allowed": true},
                  {"name": "AstraZeneca", "ID": "L922", "allowed": true}]

Hier kannst du die Einzelnen Impfstoffe auf false setzten falls dieser Status nicht überprüft werden soll.

Kolbi commented 3 years ago

Danke für die Erklärung, ich frage mich aber wieso ich keinen Termin angezeigt bekommen habe, obwohl mein Impfstoff auf true war laut API.... muss wohl doch buggy sein deren System.

Edit: Biontech nur 16-18? Macht das Sinn oder auch Bug auf deren Seite?

not-a-feature commented 3 years ago

Ok das ist Komisch. Die Vermittlungscodes werden aber auch sehr schnell vergeben.

Edit: Biontech nur 16-18? Macht das Sinn oder auch Bug auf deren Seite?

Ne, das ist kein Bug. Moderna ist erst ab 18 zugelassen, BioNTech ab 16 und das Leistungsmerkmal L921 (Moderna) schließt L920 (BioNTech) auch ein.

Kolbi commented 3 years ago

Komisch, laut API sind nämlich sehr oft Termine frei, aber via Webseite nicht... Auch wenn ich "gleichzeitig" beides ausführe...

Die Frage ist, was zeigt die API an, wenn Termine frei sind, aber von anderen bereits zeitlich reserviert sind? True oder False?

not-a-feature commented 3 years ago

Sicher dass die selbe PLZ ausgewählt ist? Ich kann das nämlich nicht reproduzieren.

Außerdem muss zwischen freien Vermittlungscodes und freien Terminen unterschieden werden.

Kolbi commented 3 years ago

PLZ war korrekt ja.

Kannst du mir den Unterschied erklären?

Die URL gibt was genau aus?

Edit: Hatten nun auch schon zwei mal einen Termin für 10min "reserviert" aber beim Buchen steht dann nicht mehr zu Verfügung.

Edit2: Vermittlungscodes haben wir zwei pro Person einen.

not-a-feature commented 3 years ago

Es gibt zwei, teilweise gekoppelte, Systeme: Allgemein: Vermittlungscodes werden gebraucht um Termine buchen zu können.

Vermittlungscodes
Desc Hat es im lokalen Impfzentrum Vermittlungscodes frei?
Rem Loadbalancer Cookie (LT=ca. 100 req)
URL /termincheck
Req ?plz= + PLZ + &leistungsmerkmale= + LID,LID
Resp {"termineVorhanden":false}
EResp {"error":"Postleitzahl ungueltig"}
Termine
Desc Hat es im lokalen Impfzentrum Termine für den Vermittlungscode frei?
Rem Benötigt Cookies durch vorherige Request mit VCode. Antwort an Zentrum und Impfstoff des VCodes gebunden. Response reserviert 2x5 Termine .
URL /terminpaare
Req ?plz= + PLZ
Resp see below
EResp 401 Unauthorized

Resp

{
    "gesuchteLeistungsmerkmale": [
        "LID",
        "LID2"
    ],
    "terminpaare": [
        [...],
        [...],
        ...
    ],
    "praxen": {
        "ID-INT": {...},
        "ID-INT": {...},
    }
}

Achtung

Da die Resquest der Terminverfügbarkeit gleich 10 Termine (für 10 Minuten) reserviert, ist es fahrlässig diese Request zu machen. Dies würde tatsächlich die Impfterminvergabe unnötig verzögern, besonders wenn ein Crawler/Widget genutzt wird der alle n Minuten diese Request macht

Flohlaus commented 3 years ago

Selbes Verhalten hier. Widget sagt AstraZeneca und Moderna verfügbar, Website sagt: "Derzeit stehen leider keine freien Termine zur Verfügung." Tag und Nacht. (Vermittlungscode mit Alter 34)

not-a-feature commented 3 years ago

Hi,

Danke für das Feedback!

ich lasse zurzeit ein System laufen welches alle paar Sekunden den Status überprüft. (Mittel der API (verschiedene loadbalancer) und mittels Virtuellem Browser) Ich melde mich in einem / zwei Tagen wieder.

Bis jetzt scheint es so zu sein, dass die Vermittlungscodes i.d.R nur wenige Minuten online sind und die refresh Rate des Widgets zu niedrig ist. Leider kann die Refreh Rate nicht eingestellt werden.

Flohlaus commented 3 years ago

Ist es ein Problem, einen Vermittlungscode zu bekommen? Ich dachte den bekommt jeder der sich zur Prioritätsgruppe zählt? Aber Terminfenster habe ich bisher noch keines gesehen (seit ca. 1 Woche, mehrmals täglich).

not-a-feature commented 3 years ago

Der unterschied zwischen Terminen und Vermittlungscodes wurde oben beschrieben. Dieses Widget ist nur für letzteres und hat nichts mit der Terminvergabe zu tun

Flohlaus commented 3 years ago

Aber in welchem Fall werden denn Vermittlungscodes limitiert? Das Widget sagt "Freie Termine", müsste dann aber sagen "Freie Vermittlungscodes".

not-a-feature commented 3 years ago

Wontfix due to EOL of project