Skip to content
This repository was archived by the owner on Jul 26, 2023. It is now read-only.

Commit fb8103a

Browse files
committedNov 16, 2021
Added issuer guide + small updates to main readme.
1 parent 5a0f263 commit fb8103a

File tree

3 files changed

+272
-12
lines changed

3 files changed

+272
-12
lines changed
 

‎.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
.DS_Store

‎issuing/readme.md

+259
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,259 @@
1+
# DCC Issuance Guide
2+
3+
4+
The EU DCC encodes a sequence of test and vaccination events into a single record. Depending on the sequence a DCC can be issued for:
5+
6+
* Vaccination
7+
* Recovery (after positive test)
8+
* Test (after negative test)
9+
10+
## General structure
11+
12+
The DCC is encoded as a JSON. It includes a section linking the identity of the holder to the DCC, and a section which includes a medical statement made about the holder - for example their vaccination status.
13+
14+
This is schema 1.3.0:
15+
16+
{
17+
"ver": "1.3.0",
18+
"nam": {
19+
"fn": "Smith-Jones",
20+
"fnt": "SMITH<JONES",
21+
"gn": "Charles Edward",
22+
"gnt": "CHARLES<EDWARD"
23+
},
24+
"dob": "1964-01-01",
25+
"v": [
26+
{
27+
"tg": "840539006",
28+
"vp": "1119349007",
29+
"mp": "EU/1/20/1528",
30+
"ma": "ORG-100031184",
31+
"dn": 1,
32+
"sd": 2,
33+
"dt": "2021-06-11",
34+
"co": "NL",
35+
"is": "Ministry of Health Welfare and Sport",
36+
"ci": "URN:UVCI:01:NL:DADFCC47C7334E45A906DB12FD859FB7#1"
37+
}
38+
]
39+
}
40+
41+
The version number is stored in `ver` and it represents the version of the schema encoding used for the DCC.
42+
43+
"ver": "1.3.0"
44+
45+
The holder's name is stored in the element `nam`, `fn` contains the family name and `gn` contains the given name of the holder encoded in any UTF-8 alphabet character. The fields `fnt` and `gnt` contain the family name and given name respectively transliterated according to the [ICAO 9303 MRTD transliteration rules](https://www.icao.int/publications/Documents/9303_p3_cons_en.pdf).
46+
47+
"nam": {
48+
"fn": "Smith-Jones",
49+
"fnt": "SMITH<JONES",
50+
"gn": "Charles Edward",
51+
"gnt": "CHARLES<EDWARD"
52+
}
53+
54+
The holder's date of birth is included in the `dob` element. It is date formatted according to ISO-8601 UTC and may contain either: `YYYY`, `YYYY-MM` or `YYYY-MM-DD`. This date must match the date the holder's identity document.
55+
56+
"dob": "1964-01-01"
57+
58+
In case the identity document contains `YYYY-XX-XX`, `YYYY-00-00` or other such partial dates, then only the known portion of the date should be encoded,
59+
60+
The medical data is stored in an array containing a single element. The name of the array differs depending on the type of medical data. For vaccinations the array is `v`, for test it is `t` and for recovery it is `r`.
61+
62+
There are a number elements that are shared by all of the medical data types:
63+
64+
| Field | Name | Description |
65+
| ----- | ----------------------- | ---------------------------------------------------------- |
66+
| `tg` | Targeted agent/disease | Always `840539006`, SNOMED CT (GPS) code for COVID-19 |
67+
| `co` | Country of event | ISO-3166-2 code of country where event happened |
68+
| `is` | Issuer | Name of the institution under whose name the DCC is issued |
69+
| `ci` | Certificate id | Unique ID, `UCVI:{version}:{country}:{random}:{checksum}` |
70+
71+
The full certificate identifier specification can be found [here](https://ec.europa.eu/health/sites/default/files/ehealth/docs/vaccination-proof_interoperability-guidelines_en.pdf) and the official technical specifications for the EU-DCC schema is published [here](https://ec.europa.eu/health/sites/default/files/ehealth/docs/covid-certificate_json_specification_en.pdf).
72+
73+
## Test (PCR)
74+
75+
The test data is stored under the `t` element.
76+
77+
"t": [
78+
{
79+
"tg": "840539006",
80+
"tt": "LP6464-4",
81+
"nm": "ELITechGroup, SARS-CoV-2 ELITe MGB® Kit",
82+
"sc": "2021-06-11T17:30:00Z",
83+
"tr": "260415000",
84+
"tc": "Example Test Corp, Big City",
85+
"co": "NL",
86+
"is": "Ministry of Health Welfare and Sport",
87+
"ci": "URN:UVCI:01:NL:DADFCC47C7334E45A906DB12FD859FB7#1"
88+
}
89+
]
90+
91+
The fields which are unique to PCR tests are:
92+
93+
| Field | Name | Description |
94+
| ----- | ------------ | --------------------------------------------------- |
95+
| `tt` | Test type | Value from the PCR TT valuset found on the gateway |
96+
| `nm` | Test name | Optional, when included must not be empty or `` |
97+
| `sc` | Sample date | ISO-8601 date/time formats (see below) |
98+
| `tr` | Test result | Value from the PCR TT valuset found on the gateway |
99+
| `tc` | Test center | Actor who did the test, max 80 UTF-8 characters |
100+
101+
The follow are valid date/time formats: `YYYY-MM-DDThh:mm:ssZ`, `YYYY-MM-DDThh:mm:ss[+-]hh`, `YYYY-MM-DDThh:mm:ss[+-]hhmm`, `YYYY-MM-DDThh:mm:ss[+-]hh:mm`.
102+
103+
## Test (Rapid Antigen/RAT)
104+
105+
The test data is stored under the `t` element.
106+
107+
"t": [
108+
{
109+
"tg": "840539006",
110+
"tt": "LP217198-3",
111+
"ma": "532",
112+
"sc": "2021-06-11T17:30:00Z",
113+
"tr": "260415000",
114+
"tc": "Example Test Corp, Big City",
115+
"co": "NL",
116+
"is": "Ministry of Health Welfare and Sport",
117+
"ci": "URN:UVCI:01:NL:DADFCC47C7334E45A906DB12FD859FB7#1"
118+
}
119+
]
120+
121+
The fields which are unique to RAT tests are:
122+
123+
| Field | Name | Description |
124+
| ----- | -------------- | ------------------------------------------------------- |
125+
| `tt` | Test type | Value from the RAT TT valuset found on the gateway |
126+
| `ma` | Test device ID | RAT device id from the JRC DB, HSC common list valueset |
127+
| `sc` | Sample date | ISO-8601 date/time formats (see below) |
128+
| `tr` | Test result | Value from the PCR TT valuset found on the gateway |
129+
| `tc` | Test center | Actor who did the test, max 80 UTF-8 characters |
130+
131+
Extra information over the test device id:
132+
133+
In EU/EEA countries, issuers MUST only issue certificates for tests belonging to the currently valid value set. The value set MUST be updated every 24 hours.
134+
135+
Values outside of the value set MAY be used in certificates issued by third countries, however the identifiers MUST still be from the JRC database. The use of other identifiers such as those provided directly by test manufacturers is not permitted.
136+
137+
## Recovery
138+
139+
The recovery data is stored under the `r` element.
140+
141+
"r": [
142+
{
143+
"tg": "840539006",
144+
"fr": "2021-06-01",
145+
"df": "2021-06-12",
146+
"du": "2021-11-28",
147+
"co": "NL",
148+
"is": "Ministry of Health Welfare and Sport",
149+
"ci": "URN:UVCI:01:NL:DADFCC47C7334E45A906DB12FD859FB7#1"
150+
}
151+
]
152+
153+
The fields which are unique to recovery are:
154+
155+
| Field | Name | Description |
156+
| ----- | ------------------------------ | --------------------------------------------- |
157+
| `fr` | Date of first positive result | ISO-8601, `YYYY-MM-DD` |
158+
| `df` | Date Valid From | ISO-8601, `YYYY-MM-DD`, > 11 days afer `fr` |
159+
| `du` | Date Valid To | ISO-8601, `YYYY-MM-DD`, <= 180 days afer `fr` |
160+
161+
The recovery certificate can be issued for a person who has recovered from COVID-19, as proven by a positief NAAT/PCR test. To quote the legislation:
162+
163+
"A certificate confirming that, following a positive result of a NAAT test carried out by health professionals or by skilled testing personnel the holder has recovered from a SARS-CoV-2 infection (certificate of recovery)."
164+
165+
## Vaccination
166+
167+
The vaccination data is stored under the `v` element.
168+
169+
"v": [
170+
{
171+
"tg": "840539006",
172+
"vp": "1119349007",
173+
"mp": "EU/1/20/1528",
174+
"ma": "ORG-100031184",
175+
"dn": 1,
176+
"sd": 2,
177+
"dt": "2021-06-11",
178+
"co": "NL",
179+
"is": "Ministry of Health Welfare and Sport",
180+
"ci": "URN:UVCI:01:NL:DADFCC47C7334E45A906DB12FD859FB7#1"
181+
}
182+
]
183+
184+
The fields which are unique to a vaccination are:
185+
186+
| Field | Name | Description |
187+
| ----- | ----------------------- | --------------------------------------------------- |
188+
| `vp` | Vaccination/prophylaxis | Value from the v/p valuset found on the gateway |
189+
| `mp` | Medical product | Value from the v/p valuset found on the gateway |
190+
| `ma` | Manufactorer/MAH | Value from the v/p valuset found on the gateway |
191+
| `dn` | Dose number | Number of doses holder has received |
192+
| `sd` | Total series | Number of doses in the full series, always >= `dn` |
193+
| `dt` | Date of event | ISO-8601 UTC, `YYYY-MM-DD` |
194+
195+
For vaccinations the record contains the details of the last vaccination event along with a sequence counter. The sequence counter identifies the vaccination count over the number of doses required for the vaccination.
196+
197+
For example, the sequence of Pfizer 1/2 will be encoded like this:
198+
199+
{
200+
"tg": "840539006",
201+
"vp": "1119349007",
202+
"mp": "EU/1/20/1528",
203+
"ma": "ORG-100031184",
204+
"dn": 1,
205+
"sd": 2,
206+
"dt": "2021-06-11",
207+
"co": "NL",
208+
"is": "Ministry of Health Welfare and Sport",
209+
"ci": "URN:UVCI:01:NL:DADFCC47C7334E45A906DB12FD859FB7#1"
210+
}
211+
212+
And the sequence Pfizer 2/2 is encoded like this:
213+
214+
{
215+
"tg": "840539006",
216+
"vp": "1119349007",
217+
"mp": "EU/1/20/1528",
218+
"ma": "ORG-100031184",
219+
"dn": 2,
220+
"sd": 2,
221+
"dt": "2021-08-11",
222+
"co": "NL",
223+
"is": "Ministry of Health Welfare and Sport",
224+
"ci": "URN:UVCI:01:NL:DADFCC47C7334E45A906DB12FD859FB7#1"
225+
}
226+
227+
In the cases that a person has received more than the standard sequence of doses, then the actual number of doses given will be provided, and `dn` will be equal to `sd`.
228+
229+
## Vaccine Boosters
230+
231+
Booster vaccinations MUST be encoded as an additional dose in the sequence. For Pfizer this results in a sequence of 3/3, which is encoded like this:
232+
233+
{
234+
"tg": "840539006",
235+
"vp": "1119349007",
236+
"mp": "EU/1/20/1528",
237+
"ma": "ORG-100031184",
238+
"dn": 2,
239+
"sd": 2,
240+
"dt": "2021-11-11",
241+
"co": "NL",
242+
"is": "Ministry of Health Welfare and Sport",
243+
"ci": "URN:UVCI:01:NL:DADFCC47C7334E45A906DB12FD859FB7#1"
244+
}
245+
246+
### Wait times
247+
248+
There is an issue regards wait time after last dose. Many countries consider a person "fully vaccinated" only 14 days after their last vaccination. For people who have received a booster dose, this will mean that there is a wait time before their booster DCC is accepted.
249+
250+
There are ? ways to handle this situation:
251+
252+
* Issue multiple DCC, then the original complete vaccination can be used during the wait time.
253+
* Educate citizens so that they know about the wait time.
254+
* ?? SUGGESTIONS
255+
256+
## Further reading
257+
258+
The official technical specifications for the EU-DCC schema is published [here](https://ec.europa.eu/health/sites/default/files/ehealth/docs/covid-certificate_json_specification_en.pdf). That document leading, the single point of truth. If you find any inconsistencies between that document and any other documentation in this repository then please create an issue in the repository. Then it will be fixed.
259+

‎readme.md

+12-12
Original file line numberDiff line numberDiff line change
@@ -14,18 +14,18 @@ In addition we gratefully host example implementations of various components of
1414

1515
[PIC to show the relationship]
1616

17-
-------------------
18-
| |
19-
| eHealth Network |
20-
| |
21-
-------------------
22-
/ \
23-
/ \
24-
----------------- -----------------
25-
| | | |
26-
| Member States | | TSi |
27-
| | | |
28-
----------------- -----------------
17+
-------------------
18+
| |
19+
| eHealth Network |
20+
| |
21+
-------------------
22+
/ \
23+
/ \
24+
----------------- -----------------
25+
| | | |
26+
| Member States | | TSi |
27+
| | | |
28+
----------------- -----------------
2929

3030
eHN defines, specifies, manages and provides sample implementations of the HCERT (the specification) and DCC (the EU implementation).
3131
Member states implement the specifications.

0 commit comments

Comments
 (0)
This repository has been archived.