italia / verificac19-sdk

✅ Official VerificaC19 Node.js SDK
MIT License
49 stars 17 forks source link

Regole per validità GreenPass 540 giorni errata #42

Closed steve6 closed 2 years ago

steve6 commented 2 years ago

Describe the bug Sto cercando di validare un greenPass terza dose che dovrebbe, credo, avere validità 540 gironi. Invece viene applicata la regola 180 giorni.

Come di può vedere qua:

  person: 'xxx',
  date_of_birth: '1974-01-24',
  result: true,
  code: 'VALID',
  message: 'Doses 3/2 - Vaccination is valid [ 2021-09-18T00:00:00.000Z - 2022-03-17T00:00:00.000Z ] '

Guardando sul codice e sulle regole in effetti cade su questa regola: { "name": "vaccine_end_day_complete", "type": "EU/1/20/1528", "value": "180" },

e non su questa: { "name": "vaccine_end_day_booster_IT", "type": "GENERIC", "value": "540" },

dove sta l'errore?

Grazie

astagi commented 2 years ago

@steve6 sto indagando sul codice, l'ultima dose che tipo di vaccino è?

astagi commented 2 years ago

ok @steve6 PFIZER non avevo visto il payload

astagi commented 2 years ago

ho provato con un test ad hoc e mi risulta

{
  result: true,
  code: 'VALID',
  message: 'Doses 3/2 - Vaccination is valid [ 2021-09-18T00:00:00.000Z - 2023-03-12T00:00:00.000Z ] '
}
steve6 commented 2 years ago

@astagi ma su quale regola ti va a finire?

astagi commented 2 years ago

@steve6 sulla regola che aggiunge i 540 giorni, come vedi dalla data di fine che mi esce fuori (qui la riprova).

Ho scritto questo test per fare una prova e capire se riesco a riprodurre il tuo errore ma non esce niente. In test/verification.test.js ho modificato un pass di vaccinazione inserendo la dose booster e modificando la data di vaccinazione così che viene correttamente presa come booster e calcolata la sua end date sommando 540 giorni. Stai usando l'ultima versione della libreria giusto? Di seguito il codice

  it.only('checks bug #42', async () => {
    const dcc = await Certificate.fromImage(path.join('test', 'data', 'eu_test_certificates', 'SK_4.png'))
    mockdate.set('2022-03-14T12:34:56.000Z');
    dcc.vaccinations[dcc.vaccinations.length - 1].doseNumber = 3;
    dcc.vaccinations[dcc.vaccinations.length - 1].dateOfVaccination = '2021-09-18';
    const result = await verifyRulesFromCertificate(
      dcc, true, Validator.codes.VALID,
    );
    console.log(result);
    mockdate.reset();
  });
steve6 commented 2 years ago

Sto usando la versione "verificac19-sdk": "^0.8.0" installata tramite npm.

await Service.updateAll(); const myDCCfromRaw = await Certificate.fromRaw('GPASSRAW'); const validationResult = await Validator.validate(myDCCfromRaw, Validator.mode.SUPER_DGP); console.log(validationResult)

Questo il codice del mio test senza il GP vero.

E il risultato che ottengo è sempre questo:

person: 'xxx', date_of_birth: '1974-01-24', result: false, code: 'NOT_VALID', message: 'Doses 3/2 - Vaccination is expired at : 2022-03-17T00:00:00.000Z'

steve6 commented 2 years ago

Appena dopo aver scritto il commento ho visto che non si era aggiornato il pacchetto alla 0.9.4...

Scusa risolto grazie!

astagi commented 2 years ago

Ma figurati @steve6 felice che il problema sia risolto :) buon lavoro!