WHO Digital Documentation of COVID-19 Certificates (DDCC)
1.0.0 - CI Build
WHO Digital Documentation of COVID-19 Certificates (DDCC), published by WHO. This guide is not an authorized publication; it is the continuous build for version 1.0.0 built by the FHIR (HL7® FHIR® Standard) CI Build. This version is based on the current content of https://github.com/WorldHealthOrganization/ddcc/tree/main and changes regularly. See the Directory of published versions
Official URL: http://smart.who.int/ddcc/StructureMap/CertDCCtoCoreDataSet | Version: 1.0.0 | |||
Draft as of 2024-10-17 | Computable Name: CertDCCtoCoreDataSet |
Structure map transforming CertDCC logical model to bundle of Core Data Set logical model
Generated Narrative: StructureMap CertDCCtoCoreDataSet
map "http://smart.who.int/ddcc/StructureMap/CertDCCtoCoreDataSet" = "CertDCCtoCoreDataSet" // Structure map transforming CertDCC logical model to bundle of Core Data Set logical model uses "http://smart.who.int/ddcc/StructureDefinition/CertDCC" alias CWTPayload as source uses "http://hl7.org/fhir/StructureDefinition/Bundle" alias DDCCBundle as target uses "http://smart.who.int/ddcc/StructureDefinition/DDCCCoreDataSet" alias DDCC as target uses "http://smart.who.int/ddcc/StructureDefinition/DDCCCoreDataSetVS" alias DDCCVS as target uses "http://smart.who.int/ddcc/StructureDefinition/DDCCCoreDataSetTR" alias DDCCTR as target group CertDCCtoCoreDataSet(source src : CWTPayload, target ddccBundle : DDCCBundle) { src.-260 as hcert then { hcert.1 as dcc then { dcc.v as v -> ddccBundle.entry as outentry, create('http://smart.who.int/ddcc/StructureDefinition/DDCCCoreDataSetVS') as ddcc then { v then DCCtoCoreDataSet(dcc, ddcc) "set DDCC"; v -> ddcc.certificate as certificate then CertDCCtoCoreDataSetCertificate(src, dcc, v, certificate) "set certificate"; v -> ddcc.vaccination as vaccination then VtoCoreDataSetVS(v, vaccination) "set vaccination"; v -> outentry.resource = ddcc "set outentry"; }; dcc.t as t -> ddccBundle.entry as outentry, create('http://smart.who.int/ddcc/StructureDefinition/DDCCCoreDataSetTR') as ddcc then { t then DCCtoCoreDataSet(dcc, ddcc) "set DDCC"; t -> ddcc.certificate as certificate then CertDCCtoCoreDataSetCertificate(src, dcc, t, certificate) "set certificate"; t -> ddcc.test as test then TtoCoreDataSetTR(t, test) "set test"; t -> outentry.resource = ddcc "set outentry"; }; } "eu_DCC_v1"; } "hcert"; } group DCCtoCoreDataSet(source dcc, target ddcc : DDCC) { dcc.dob as birthDate -> ddcc.birthDate = birthDate "set birthDate"; dcc.nam as nam then { nam.gn as given -> ddcc.name = (given.replaceMatches('$', ' ')) "set given name"; nam.fn as family -> ddcc.name as tName, ddcc.name = append(tName, family) "add family name"; }; } group CertDCCtoCoreDataSetCertificate(source src : CWTPayload, source dcc, source g, target certificate) { src -> certificate.period = create('Period') as period then CwtToPeriod(src, period) "set period"; dcc.ver as ver -> certificate.version = ver "set version"; g.ci as ci -> certificate.hcid as hcid, hcid.value = ci "set hcid"; g.is as is -> certificate.issuer = create('Reference') as issuer, issuer.display = is "set issuer"; } group CwtToPeriod(source src : CWTPayload, target tgt : Period) { src.6 as iat -> append(iat, ' seconds') as epoch, tgt.start = (@1970-01-01T00:00:00.000+00:00 + epoch.toQuantity()) "set period start"; src.4 as exp -> append(exp, ' seconds') as epoch, tgt.end = (@1970-01-01T00:00:00.000+00:00 + epoch.toQuantity()) "set period end"; } group VtoCoreDataSetVS(source v, target vaccination) { v.tg as tg -> vaccination.disease as coding, coding.system = 'http://snomed.info/sct', coding.code = tg "set target disease"; v.vp as vp -> vaccination.vaccine as coding, coding.system = 'https://ec.europa.eu/health/documents/community-register/html/', coding.code = vp "set vaccine"; v.mp as mp then { mp -> vaccination.brand as coding, coding.system = 'https://id.uvci.eu/valuesets/vaccine-medicinal-product.json', coding.code = mp "set default brand"; mp -> c('https://ec.europa.eu/health/documents/community-register/html/', mp) as coded then { mp where coded.memberOf('http://smart.who.int/ddcc/ValueSet/vaccine-covid19-euur') -> vaccination.brand = translate(coded, 'http://smart.who.int/ddcc/ConceptMap/vaccine-covid19-euur-to-icd11', 'Coding') "translate COVID19 brand"; } "coding"; }; v.ma as ma -> vaccination.maholder as coding, coding.system = 'https://id.uvci.eu/valuesets/vaccine-mah-manf.json', coding.code = ma "set maholder"; v.dt as date -> vaccination.date = date "set date"; v.dn as dose -> vaccination.dose = dose "set dose"; v.sd as totalDoses -> vaccination.totalDoses = totalDoses "set totalDoses"; v.co as co -> vaccination.country as coding, coding.code = co, coding.system = 'urn:iso:std:iso:3166' "set country"; } group TtoCoreDataSetTR(source t, target test) { t.tg as tg then { tg -> test.pathogen as coding, coding.system = 'http://snomed.info/sct', coding.code = tg "set default pathogen"; tg -> c('http://snomed.info/sct', tg) as coded then { tg where coded.memberOf('http://smart.who.int/ddcc/ValueSet/lab-test-pathogen-covid19-snomed') -> test.pathogen = translate(coded, 'http://smart.who.int/ddcc/ConceptMap/lab-test-pathogen-snomed-to-icd11', 'Coding') "translate COVID19 pathogen"; } "coding"; }; t.tt as tt then { tt -> test.type as coding, coding.system = 'http://loinc.org', coding.code = tt "set default type"; tt -> c('http://loinc.org', tt) as coded then { tt where coded.memberOf('http://smart.who.int/ddcc/ValueSet/lab-test-type-covid19-loinc') -> test.type = translate(coded, 'http://smart.who.int/ddcc/ConceptMap/lab-test-type-covid19-loinc-to-icd11', 'Coding') "translate COVID19 type"; } "coding"; }; t.nm as nm -> test.brand as coding, coding.system = 'https://id.uvci.eu/valuesets/test-manf.json', coding.code = nm "set brand"; t.ma as ma -> test.manufacturer as coding, coding.system = 'https://covid-19-diagnostics.jrc.ec.europa.eu/devices', coding.code = ma "set manufacturer"; t.sc as date -> test.date = date "set date"; t.tr as tr then { tr -> test.result as coding, coding.system = 'http://snomed.info/sct', coding.code = tr "set default result"; tr -> c('http://snomed.info/sct', tr) as coded then { tr where coded.memberOf('http://smart.who.int/ddcc/ValueSet/lab-test-qual-result-snomed') -> test.result = translate(coded, 'http://smart.who.int/ddcc/ConceptMap/lab-test-qual-result-snomed-to-icd11', 'Coding') "translate COVID19 result"; } "coding"; }; t.tc as tc -> test.centre as coding, coding.code = tc "set centre"; t.co as co -> test.country as coding, coding.code = co, coding.system = 'urn:iso:std:iso:3166' "set country"; }