greenpass/
values.rs

1// Value Sets for the Digital COVID Certificates according to https://ec.europa.eu/health/system/files/2022-01/digital-green-value-sets_en.pdf
2
3// 2.1 Disease or agent targeted / Disease or agent the citizen has recovered from
4// Fully described in the Implementing Decision.
5
6// 2.2 COVID-19 vaccine or prophylaxis
7
8#[derive(Debug, Clone, Copy)]
9pub enum VaccineProphylaxis {
10    Antigen,
11    MRNA,
12    Vaccine,
13}
14
15impl VaccineProphylaxis {
16    pub fn values(&self) -> (&str, &str, &str, &str, &str, &str) {
17        match *self {
18            VaccineProphylaxis::Antigen => (
19                "1119305005",                 // Code
20                "SARS-CoV-2 antigen vaccine", // Display
21                "SNOMED CT",                  // Code System name
22                "http://snomed.info/sct",     // Code System URL
23                "2.16.840.1.113883.6.96",     // Code System OID
24                "2021-01-31",                 // Code System version
25            ),
26            VaccineProphylaxis::MRNA => (
27                "1119349007",              // Code
28                "SARS-CoV-2 mRNA vaccine", // Display
29                "SNOMED CT",               // Code System name
30                "http://snomed.info/sct",  // Code System URL
31                "2.16.840.1.113883.6.96",  // Code System OID
32                "2021-01-31",              // Code System version
33            ),
34            VaccineProphylaxis::Vaccine => (
35                "J07BX03",                                               // Code
36                "covid-19 vaccines",                                     // Display
37                "Anatomical Therapeutic Chemical Classification System", // Code System name
38                "http://www.whocc.no/atc",                               // Code System URL
39                "2.16.840.1.113883.6.73",                                // Code System OID
40                "2021-01",                                               // Code System version
41            ),
42        }
43    }
44}
45
46// 2.3 Vaccine medicinal product
47#[derive(Debug, Clone, Copy)]
48pub enum VaccineMedicinalProduct {
49    Comirnaty,
50    Spikevax,
51    Vaxzevria,
52    COVID19VaccineJanssen,
53    CVnCoV,
54    NVXCoV2373,
55    SputnikV,
56    Convidecia,
57    EpiVacCorona,
58    BBIBPCorV,
59    InactivatedSARSCoV2,
60    VeroCell,
61    CoronaVac,
62    Covaxin,
63    BBV152ABC,
64    Covishield,
65    ChAdOx1nCoV19,
66    Covid19Recombinant,
67    RCOVI,
68    CoviVac,
69    SputnikLight,
70    HayatVax,
71    Abdala,
72    WIBPCorV,
73    MVCCOVID19Vaccine,
74    Nuvaxovid,
75}
76
77#[derive(Debug, Clone, Copy)]
78pub enum VaccineAuthorizationStatus {
79    // Union Register of medicinal products (https://ec.europa.eu/health/documents/community-register/html/)
80    CentrallyAuthorized,
81    // Vaccine medicinal products not centrally authorized in the EU in rolling review by EMA
82    InRollingReview,
83    // Vaccine medicinal products not centrally authorized in the EU
84    NotAuthorized,
85}
86
87#[derive(Debug, Clone, Copy)]
88pub enum CodeSystemVersion {
89    V1_0,
90    V1_1,
91    V1_2,
92    V1_3,
93    V1_4,
94    V1_5,
95    V1_6,
96}
97
98impl VaccineMedicinalProduct {
99    pub fn values(
100        &self,
101    ) -> (
102        &str,
103        &str,
104        VaccineAuthorizationStatus,
105        Option<CodeSystemVersion>,
106    ) {
107        match *self {
108            VaccineMedicinalProduct::Comirnaty => (
109                "EU/1/20/1528",
110                "Comirnaty",
111                VaccineAuthorizationStatus::CentrallyAuthorized,
112                None,
113            ),
114            VaccineMedicinalProduct::Spikevax => (
115                "EU/1/20/1507",
116                "Spikevax",
117                VaccineAuthorizationStatus::CentrallyAuthorized,
118                None,
119            ),
120            VaccineMedicinalProduct::Vaxzevria => (
121                "EU/1/21/1529",
122                "Vaxzevria",
123                VaccineAuthorizationStatus::CentrallyAuthorized,
124                None,
125            ),
126            VaccineMedicinalProduct::COVID19VaccineJanssen => (
127                "EU/1/20/1525",
128                "COVID-19 Vaccine Janssen",
129                VaccineAuthorizationStatus::CentrallyAuthorized,
130                None,
131            ),
132            VaccineMedicinalProduct::CVnCoV => (
133                "CVnCoV",
134                "CVnCoV",
135                VaccineAuthorizationStatus::InRollingReview,
136                Some(CodeSystemVersion::V1_0),
137            ),
138            VaccineMedicinalProduct::NVXCoV2373 => (
139                "NVX-CoV2373 (deprecated,see Annex A for more instructions",
140                "NVX-CoV2373",
141                VaccineAuthorizationStatus::InRollingReview,
142                Some(CodeSystemVersion::V1_0),
143            ),
144            VaccineMedicinalProduct::SputnikV => (
145                "
146                Sputnik-V",
147                "Sputnik V",
148                VaccineAuthorizationStatus::InRollingReview,
149                Some(CodeSystemVersion::V1_0),
150            ),
151            VaccineMedicinalProduct::Convidecia => (
152                "Convidecia",
153                "Convidecia",
154                VaccineAuthorizationStatus::NotAuthorized,
155                Some(CodeSystemVersion::V1_0),
156            ),
157            VaccineMedicinalProduct::EpiVacCorona => (
158                "EpiVacCorona",
159                "EpiVacCorona",
160                VaccineAuthorizationStatus::NotAuthorized,
161                Some(CodeSystemVersion::V1_0),
162            ),
163            VaccineMedicinalProduct::BBIBPCorV => (
164                "BBIBP-CorV",
165                "BBIBP-CorV",
166                VaccineAuthorizationStatus::NotAuthorized,
167                Some(CodeSystemVersion::V1_0),
168            ),
169            VaccineMedicinalProduct::InactivatedSARSCoV2 | VaccineMedicinalProduct::VeroCell => (
170                "Inactivated-SARS-CoV-2-Vero-Cell (deprecated, see Annex A for more instructions)",
171                "Inactivated SARS-CoV-2 (Vero Cell)",
172                VaccineAuthorizationStatus::NotAuthorized,
173                Some(CodeSystemVersion::V1_0),
174            ),
175            VaccineMedicinalProduct::CoronaVac => (
176                "CoronaVac",
177                "CoronaVac",
178                VaccineAuthorizationStatus::NotAuthorized,
179                Some(CodeSystemVersion::V1_0),
180            ),
181            VaccineMedicinalProduct::Covaxin | VaccineMedicinalProduct::BBV152ABC => (
182                "Covaxin",
183                "Covaxin (also known as BBV152 A, B, C)",
184                VaccineAuthorizationStatus::NotAuthorized,
185                Some(CodeSystemVersion::V1_0),
186            ),
187            VaccineMedicinalProduct::Covishield | VaccineMedicinalProduct::ChAdOx1nCoV19 => (
188                "Covishield",
189                "Covishield (ChAdOx1_n CoV-19)",
190                VaccineAuthorizationStatus::NotAuthorized,
191                Some(CodeSystemVersion::V1_2),
192            ),
193            VaccineMedicinalProduct::Covid19Recombinant => (
194                "Covid-19-recombinant",
195                "Covid-19 (recombinant)",
196                VaccineAuthorizationStatus::NotAuthorized,
197                Some(CodeSystemVersion::V1_3),
198            ),
199            VaccineMedicinalProduct::RCOVI => (
200                "R-COVI",
201                "R-COVI",
202                VaccineAuthorizationStatus::NotAuthorized,
203                Some(CodeSystemVersion::V1_3),
204            ),
205            VaccineMedicinalProduct::CoviVac => (
206                "CoviVac",
207                "CoviVac",
208                VaccineAuthorizationStatus::NotAuthorized,
209                Some(CodeSystemVersion::V1_4),
210            ),
211            VaccineMedicinalProduct::SputnikLight => (
212                "Sputnik-Light",
213                "Sputnik Light",
214                VaccineAuthorizationStatus::NotAuthorized,
215                Some(CodeSystemVersion::V1_4),
216            ),
217            VaccineMedicinalProduct::HayatVax => (
218                "Hayat-Vax",
219                "Hayat-Vax",
220                VaccineAuthorizationStatus::NotAuthorized,
221                Some(CodeSystemVersion::V1_4),
222            ),
223            VaccineMedicinalProduct::Abdala => (
224                "Abdala",
225                "Abdala",
226                VaccineAuthorizationStatus::NotAuthorized,
227                Some(CodeSystemVersion::V1_5),
228            ),
229            VaccineMedicinalProduct::WIBPCorV => (
230                "WIBP-CorV",
231                "WIBP-CorV",
232                VaccineAuthorizationStatus::NotAuthorized,
233                Some(CodeSystemVersion::V1_5),
234            ),
235            VaccineMedicinalProduct::MVCCOVID19Vaccine => (
236                "MVC-COV1901",
237                "MVC COVID-19 vaccine",
238                VaccineAuthorizationStatus::NotAuthorized,
239                Some(CodeSystemVersion::V1_6),
240            ),
241            VaccineMedicinalProduct::Nuvaxovid => (
242                "EU/1/21/1618",
243                "Nuvaxovid",
244                VaccineAuthorizationStatus::CentrallyAuthorized,
245                None,
246            ),
247        }
248    }
249}
250
251// 2.4 COVID-19 vaccine marketing authorization holder or manufacturer
252#[derive(Debug, Clone, Copy)]
253pub enum ManufacturerInOMS {
254    Yes,
255    No,
256}
257
258#[derive(Debug, Clone, Copy)]
259pub enum Manufacturer {
260    AstraZeneca,
261    BiontechManufacturing,
262    JanssenCilagInternational,
263    ModernaBiotechSpain,
264    Curevac,
265    CanSinoBiologics,
266    ChinaSinopharm,
267    SinopharmWeiqidaPrague,
268    SinopharmZhijun,
269    Novavax,
270    GamaleyaResearchInstitute,
271    VectorInstitute,
272    SinovacBiotech,
273    BharatBiotech,
274    SerumInstituteOfIndia,
275    Fiocruz,
276    RPharmCJSC,
277    Chumakov,
278    GulfPharmaceutical,
279    CIGB,
280    SinopharmWuhan,
281    Medigen,
282}
283
284impl Manufacturer {
285    pub fn values(&self) -> (&str, &str, ManufacturerInOMS, Option<CodeSystemVersion>) {
286        match *self {
287            Manufacturer::AstraZeneca => (
288                "ORG-100001699",
289                "AstraZeneca AB",
290                ManufacturerInOMS::Yes,
291                None,
292            ),
293            Manufacturer::BiontechManufacturing => (
294                "ORG-100030215",
295                "Biontech Manufacturing GmbH",
296                ManufacturerInOMS::Yes,
297                None,
298            ),
299            Manufacturer::JanssenCilagInternational => (
300                "ORG-100001417",
301                "Janssen-Cilag International",
302                ManufacturerInOMS::Yes,
303                None,
304            ),
305            Manufacturer::ModernaBiotechSpain => (
306                "ORG-100031184",
307                "Moderna Biotech Spain S.L.",
308                ManufacturerInOMS::Yes,
309                None,
310            ),
311            Manufacturer::Curevac => (
312                "ORG-100006270",
313                "Curevac AG",
314                ManufacturerInOMS::Yes,
315                None,
316            ),
317            Manufacturer::CanSinoBiologics => (
318                "ORG-100013793",
319                "CanSino Biologics",
320                ManufacturerInOMS::Yes,
321                None,
322            ),
323            Manufacturer::ChinaSinopharm => (
324                "ORG-100020693",
325                "China Sinopharm International Corp. - Beijing location",
326                ManufacturerInOMS::Yes,
327                None,
328            ),
329            Manufacturer::SinopharmWeiqidaPrague => (
330                "ORG-100010771",
331                "Sinopharm Weiqida Europe Pharmaceutical s.r.o. - Prague location",
332                ManufacturerInOMS::Yes,
333                None,
334            ),
335            Manufacturer::SinopharmZhijun => (
336                "ORG-100024420",
337                "Sinopharm Zhijun (Shenzhen) Pharmaceutical Co. Ltd. - Shenzhen location",
338                ManufacturerInOMS::Yes,
339                None,
340            ),
341            Manufacturer::Novavax => (
342                "ORG-100032020",
343                "Novavax CZ a.s.",
344                ManufacturerInOMS::Yes,
345                None,
346            ),
347            Manufacturer::GamaleyaResearchInstitute => (
348                "Gamaleya-Research-Institute",
349                "Gamaleya Research Institute",
350                ManufacturerInOMS::No,
351                Some(CodeSystemVersion::V1_0),
352            ),
353            Manufacturer::VectorInstitute => (
354                "Vector-Institute",
355                "Vector Institute",
356                ManufacturerInOMS::No,
357                Some(CodeSystemVersion::V1_0),
358            ),
359            Manufacturer::SinovacBiotech => (
360                "Sinovac-Biotech",
361                "Sinovac Biotech",
362                ManufacturerInOMS::No,
363                Some(CodeSystemVersion::V1_0),
364            ),
365            Manufacturer::BharatBiotech => (
366                "Bharat-Biotech",
367                "Bharat Biotech",
368                ManufacturerInOMS::No,
369                Some(CodeSystemVersion::V1_0),
370            ),
371            Manufacturer::SerumInstituteOfIndia => (
372                "ORG-100001981",
373                "Serum Institute Of India Private Limited",
374                ManufacturerInOMS::Yes,
375                None,
376            ),
377            Manufacturer::Fiocruz => (
378                "Fiocruz",
379                "Fiocruz",
380                ManufacturerInOMS::No,
381                Some(CodeSystemVersion::V1_3),
382            ),
383            Manufacturer::RPharmCJSC => (
384                "ORG-100007893",
385                "R-Pharm CJSC",
386                ManufacturerInOMS::Yes,
387                None,
388            ),
389            Manufacturer::Chumakov => (
390                "Chumakov-Federal-Scientific-Center",
391                "Chumakov Federal Scientific Center for Research and Development of Immune-and-Biological Products",
392                ManufacturerInOMS::No,
393                Some(CodeSystemVersion::V1_4),
394            ),
395            Manufacturer::GulfPharmaceutical => (
396                "ORG-100023050",
397                "Gulf Pharmaceutical Industries",
398                ManufacturerInOMS::Yes,
399                None,
400            ),
401            Manufacturer::CIGB => (
402                "CIGB",
403                "Center for Genetic Engineering and Biotechnology (CIGB)",
404                ManufacturerInOMS::No,
405                Some(CodeSystemVersion::V1_5),
406            ),
407            Manufacturer::SinopharmWuhan => (
408                "Sinopharm-WIBP",
409                "Sinopharm - Wuhan Institute of Biological Products",
410                ManufacturerInOMS::No,
411                Some(CodeSystemVersion::V1_5),
412            ),
413            Manufacturer::Medigen => (
414                "ORG-100033914",
415                "Medigen Vaccine Biologics Corporation",
416                ManufacturerInOMS::Yes,
417                None,
418            ),
419        }
420    }
421}
422
423/// Identifies the recognized test types
424#[derive(Debug, PartialEq)]
425pub enum TestName {
426    /// A Nucleic Acid Amplification Test, with the name of the specific test
427    NAAT { name: String }, // nm
428
429    /// A Rapid Antigen Test, with a string identifying the device from the JRC database
430    RAT { device_id: String }, // ma
431}