CDA to FHIR Maps, published by HL7 Italy. This guide is not an authorized publication; it is the continuous build for version 0.1.0 built by the FHIR (HL7® FHIR® Standard) CI Build. This version is based on the current content of https://github.com/hl7-it/cda2fhir/ and changes regularly. See the Directory of published versions
Official URL: http://hl7.it/fhir/cda2fhir/StructureMap/cda2fhirAmbReport | Version: 0.1.0 | |||
Draft as of 2024-09-15 | Computable Name: cda2fhirAmbReport |
map "http://hl7.it/fhir/cda2fhir/StructureMap/cda2fhirAmbReport" = "cda2fhirAmbReport" uses "http://hl7.org/fhir/cda/StructureDefinition/ClinicalDocument" alias ClinicalDocument as source uses "http://hl7.org/fhir/cda/StructureDefinition/AssignedAuthor" alias AssignedAuthor as queried uses "http://hl7.org/fhir/cda/StructureDefinition/AssignedEntity" alias AssignedEntity as queried uses "http://hl7.org/fhir/cda/StructureDefinition/AssociatedEntity" alias AssociatedEntity as queried uses "http://hl7.org/fhir/cda/StructureDefinition/CustodianOrganization" alias CustodianOrganization as queried uses "http://hl7.org/fhir/cda/StructureDefinition/OrganizationPartOf" alias OrganizationPartOf as queried uses "http://hl7.org/fhir/cda/StructureDefinition/Organization" alias rapresentedOrganization as queried uses "http://hl7.org/fhir/cda/StructureDefinition/Section" alias Section as queried uses "http://hl7.org/fhir/cda/StructureDefinition/PatientRole" alias PatientRole as queried uses "http://hl7.org/fhir/cda/StructureDefinition/AD" alias AD as source uses "http://hl7.org/fhir/StructureDefinition/Bundle" alias Bundle as target uses "http://hl7.org/fhir/StructureDefinition/Composition" alias Composition as produced uses "http://hl7.org/fhir/StructureDefinition/Patient" alias Patient as produced uses "http://hl7.org/fhir/StructureDefinition/Encounter" alias Encounter as produced uses "http://hl7.org/fhir/StructureDefinition/Person" alias Patient as produced uses "http://hl7.org/fhir/StructureDefinition/List" alias List as produced uses "http://hl7.org/fhir/StructureDefinition/Practitioner" alias Practitioner as produced uses "http://hl7.org/fhir/StructureDefinition/Organization" alias Organization as produced uses "http://hl7.org/fhir/cda/StructureDefinition/Act" alias Act as produced uses "http://hl7.org/fhir/cda/StructureDefinition/IVL-PQ" alias IVL_PQ as source uses "http://hl7.org/fhir/cda/StructureDefinition/PQ" alias PQ as source uses "http://hl7.org/fhir/StructureDefinition/SimpleQuantity" alias SimpleQuantity as target imports "http://hl7.it/fhir/cda2fhir/StructureMap/cda2fhirDataTypes" imports "http://hl7.it/fhir/cda2fhir/StructureMap/cda2fhirHeader" group CdaToBundle(source cda : ClinicalDocument, target bundle : Bundle) { cda -> bundle.entry as e, e.request = create('BackboneElement') as request, request.method = 'POST', e.resource = create('Composition') as composition, composition.id = uuid() as uuid1, e.fullUrl = append('https://example/Composition/', uuid1), request.url = 'Composition', bundle.entry as e2, e2.request = create('BackboneElement') as requestPAT, requestPAT.method = 'PUT', e2.resource = create('Patient') as patient, patient.id = uuid() as uuid2, e2.fullUrl = append('https://example/Patient/', uuid2), bundle.entry as e3, e3.request = create('BackboneElement') as request, request.method = 'POST', e3.resource = create('Encounter') as encounter, encounter.id = uuid() as uuid3, e3.fullUrl = append('https://example/Encounter/', uuid3), request.url = 'Encounter', bundle.entry as e4, e4.request = create('BackboneElement') as request, request.method = 'POST', e4.resource = create('DocumentReference') as DocumentReference, DocumentReference.id = uuid() as uuid4, e4.fullUrl = append('https://example/DocumentReference/', uuid4), request.url = 'DocumentReference' then { cda then ClinicalDocumentToBundle(cda, patient, composition, encounter, bundle, DocumentReference) "cdatobundle"; cda.recordTarget as recordTarget then { recordTarget.patientRole as patient then { patient.id as id -> patient.identifier as identifier then { id.root as r -> identifier.system = translate(r, 'http://hl7.org/fhir/ConceptMap/special-oid2uri', 'uri') "root1"; id.extension as ext1 -> identifier.value = ext1 "value"; id.assigningAuthorityName as s -> identifier.assigner as a, a.display = s; } "idfr"; patient.id as id where (root = '2.16.840.1.113883.2.9.4.3.2') or (root = '2.16.840.1.113883.2.9.4.3.7') or (root = '2.16.840.1.113883.2.9.4.3.3') or (root = '2.16.840.1.113883.2.9.4.3.17') or (root = '2.16.840.1.113883.2.9.4.3.18') or (root = '2.16.840.1.113883.2.9.2.10.4.1.1') or (root = '2.16.840.1.113883.2.9.2.20.4.1.1') or (root = '2.16.840.1.113883.2.9.2.30.4.1.1') or (root = '2.16.840.1.113883.2.9.2.41.4.1.1') or (root = '2.16.840.1.113883.2.9.2.42.4.1.1') or (root = '2.16.840.1.113883.2.9.2.50.4.1.1') or (root = '2.16.840.1.113883.2.9.2.60.4.1.1') or (root = '2.16.840.1.113883.2.9.2.70.4.1.1') or (root = '2.16.840.1.113883.2.9.2.80.4.1.1') or (root = '2.16.840.1.113883.2.9.2.90.4.1.1') or (root = '2.16.840.1.113883.2.9.2.100.4.1.1') or (root = '2.16.840.1.113883.2.9.2.110.4.1.1') or (root = '2.16.840.1.113883.2.9.2.120.4.1.1') or (root = '2.16.840.1.113883.2.9.2.130.4.1.1') or (root = '2.16.840.1.113883.2.9.2.140.4.1.1') or (root = '2.16.840.1.113883.2.9.2.150.4.1.1') or (root = '2.16.840.1.113883.2.9.2.160.4.1.1') or (root = '2.16.840.1.113883.2.9.2.170.4.1.1') or (root = '2.16.840.1.113883.2.9.2.180.4.1.1') or (root = '2.16.840.1.113883.2.9.2.190.4.1.1') or (root = '2.16.840.1.113883.2.9.2.200.4.1.1') or (root = '2.16.840.1.113883.2.9.2.10.4.1') or (root = '2.16.840.1.113883.2.9.2.20.4.1') or (root = '2.16.840.1.113883.2.9.2.30.4.1') or (root = '2.16.840.1.113883.2.9.2.41.4.1') or (root = '2.16.840.1.113883.2.9.2.42.4.1') or (root = '2.16.840.1.113883.2.9.2.50.4.1') or (root = '2.16.840.1.113883.2.9.2.60.4.1') or (root = '2.16.840.1.113883.2.9.2.70.4.1') or (root = '2.16.840.1.113883.2.9.2.80.4.1') or (root = '2.16.840.1.113883.2.9.2.90.4.1') or (root = '2.16.840.1.113883.2.9.2.100.4.1') or (root = '2.16.840.1.113883.2.9.2.110.4.1') or (root = '2.16.840.1.113883.2.9.2.120.4.1') or (root = '2.16.840.1.113883.2.9.2.130.4.1') or (root = '2.16.840.1.113883.2.9.2.140.4.1') or (root = '2.16.840.1.113883.2.9.2.150.4.1') or (root = '2.16.840.1.113883.2.9.2.160.4.1') or (root = '2.16.840.1.113883.2.9.2.170.4.1') or (root = '2.16.840.1.113883.2.9.2.180.4.1') or (root = '2.16.840.1.113883.2.9.2.190.4.1') or (root = '2.16.840.1.113883.2.9.2.200.4.1') or (root = '2.16.840.1.113883.2.9.4.3.15') then { id.extension as ext -> requestPAT.url = append('Patient?identifier=', ext) "UUID"; } "record"; } "recPat"; } "patient"; } "ClinicalDocumentToBody"; } group ClinicalDocumentToBundle(source cda : ClinicalDocument, target patient : Patient, target composition : Composition, target encounter : Encounter, target bundle : Bundle, target DocumentReference : DocumentReference) { cda -> bundle.id = uuid() "id"; cda.id -> bundle.identifier "identifier"; cda -> bundle.type = 'transaction' "type"; cda -> bundle.timestamp = (timestamp.now()) "date"; cda then ClinicalDocumentComposition(cda, composition, patient, encounter, bundle, DocumentReference) "composition"; cda -> bundle.entry as e, e.request = create('BackboneElement') as request, request.method = 'POST', e.resource = create('DiagnosticReport') as diagnosticReport, diagnosticReport.id = uuid() as uuid1, e.fullUrl = append('https://example/DiagnosticReport/', uuid1), request.url = 'DiagnosticReport' then { cda.code -> diagnosticReport.code "diagnosticCode"; cda -> diagnosticReport.status = 'registered' "stats"; cda.component as component then { component.structuredBody as body then { body.component as component then { component.section as srcSection then { srcSection.code -> composition.section as tgtSection then ClinicalDocumentSection(cda, srcSection, patient, tgtSection, bundle, encounter, diagnosticReport); }; }; } "body"; }; } "diagnostic"; } group ClinicalDocumentSection(source cda : ClinicalDocument, source src : Section, target patient : Patient, target tgt, target bundle : Bundle, target enc : Encounter, target dReport : DiagnosticReport) { src.title as t -> tgt.title = (t.dataString); src.code -> tgt.code; src -> tgt.entry = create('Reference') as reference, reference.reference = ('https://example/DiagnosticReport/' + %dReport.id) "reference"; src.entry as entry then { src.text as cdaText -> tgt.text as fhirText then { cdaText -> fhirText.status = 'generated' "narrativeStatus"; cdaText as t -> fhirText.div = t "narrativeText"; } "cdaText"; entry then DiagnosticReportFunction(src, entry, dReport, bundle, enc, patient) "dreport"; }; src where src.entry.exists().not() then DiagnosticReportFunction(src, cda, dReport, bundle, enc, patient) "narrative"; src.component as component then { component.section as sec -> tgt.section as tgtSection then ClinicalDocumentSection(cda, sec, patient, tgtSection, bundle, enc, dReport); }; } group DiagnosticReportFunction(source section : section, source src : entry, target dReport : DiagnosticReport, target bundle : Bundle, target encounter : Encounter, target patient : Patient) { src.observation as observation then { section where code.code = '29299-5' -> bundle.entry as e1, e1.request = create('BackboneElement') as request, request.method = 'POST', e1.resource = create('Observation') as obs1, obs1.id = uuid() as uuid1, e1.fullUrl = append('https://example/Observation/', uuid1), request.url = 'Observation', dReport.result = create('Reference') as reference, reference.reference = ('https://example/Observation/' + %obs1.id) then Observation(observation, patient, encounter, obs1, bundle) "QuesitoDiagnostico"; section where code.code = '11329-0' -> bundle.entry as e2, e2.request = create('BackboneElement') as request, request.method = 'POST', e2.resource = create('Observation') as obs2, obs2.id = uuid() as uuid2, e2.fullUrl = append('https://example/Observation/', uuid2), request.url = 'Observation', dReport.result = create('Reference') as reference, reference.reference = ('https://example/Observation/' + %obs2.id) then { section -> obs2.subject = create('Reference') as reference, reference.reference = ('https://example/Patient/' + %patient.id) "reference"; section -> obs2.encounter = create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %encounter.id) "reference"; section -> obs2.status = 'final' "STatusobse"; section.code -> obs2.code; observation.statusCode as s then { s.code as cos -> obs2.status = translate(cos, '#OBSstatus', 'code') "codeS"; } "status"; section.component as component then { component.section as section then { section.code where code = '10160-0' then { section.entry as entry then { entry.substanceAdministration as subAdmin -> bundle.entry as e11, e11.request = create('BackboneElement') as request, request.method = 'POST', e11.resource = create('MedicationStatement') as medicationstatement, medicationstatement.id = uuid() as uuid11, e11.fullUrl = append('https://example/MedicationStatement/', uuid11), request.url = 'MedicationStatement', obs2.partOf = create('Reference') as reference, reference.reference = ('https://example/MedicationStatement/' + %medicationstatement.id) then MedicationStatement(subAdmin, medicationstatement, patient, encounter, bundle) "creat"; }; } "sectionCode"; section.code where code = '48765-2' then { section -> bundle.entry as e4, e4.request = create('BackboneElement') as request, request.method = 'POST', e4.resource = create('List') as list1, list1.id = uuid() as uuid4, e4.fullUrl = append('https://example/List/', uuid4), request.url = 'List', obs2.focus = create('Reference') as reference, reference.reference = ('https://example/List/' + %list1.id) then { section -> list1.subject = create('Reference') as reference, reference.reference = ('https://example/Patient/' + %patient.id) "reference"; section -> list1.status = 'current' "listatus"; section -> list1.mode = 'working' "lstmod"; section -> list1.encounter = create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %encounter.id) "reference"; section -> list1.entry as entryList1 then { section.entry as entry then { entry.act as act1 -> bundle.entry as e5, e5.request = create('BackboneElement') as request, request.method = 'POST', e5.resource = create('AllergyIntolerance') as allergy, allergy.id = uuid() as uuid5, e5.fullUrl = append('https://example/AllergyIntolerance/', uuid5), request.url = 'AllergyIntolerance', entryList1.item = create('Reference') as reference, reference.reference = ('https://example/AllergyIntolerance/' + %allergy.id) then allergyFunction(act1, allergy, patient, encounter) "allergy"; } "entryAll"; } "entryList"; } "section"; } "conditionAllergie"; }; } "subSection"; section.entry as entry then { entry.observation -> bundle.entry as e3, e3.request = create('BackboneElement') as request, request.method = 'POST', e3.resource = create('Condition') as condition, condition.id = uuid() as uuid3, e3.fullUrl = append('https://example/Condition/', uuid3), request.url = 'Condition', obs2.focus = create('Reference') as reference, reference.reference = ('https://example/Condition/' + %condition.id) then ConditionFunction(observation, condition, patient, encounter, bundle) "condition"; entry.organizer as organizer then { section -> bundle.entry as e11, e11.request = create('BackboneElement') as request, request.method = 'POST', e11.resource = create('List') as list11, list11.id = uuid() as uuid11, e11.fullUrl = append('https://example/List/', uuid11), request.url = 'List', obs2.focus = create('Reference') as reference, reference.reference = ('https://example/List/' + %list11.id) then { section -> list11.subject = create('Reference') as reference, reference.reference = ('https://example/Patient/' + %patient.id) "reference"; section -> list11.status = 'current' "liststat"; section -> list11.mode = 'working' "listmd"; section -> list11.encounter = create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %encounter.id) "reference"; organizer -> list11.entry as entryList2 then { organizer -> bundle.entry as e12, e12.request = create('BackboneElement') as request, request.method = 'POST', e12.resource = create('FamilyMemberHistory') as familyMember, familyMember.id = uuid() as uuid12, e12.fullUrl = append('https://example/FamilyMemberHistory/', uuid12), request.url = 'FamilyMemberHistory', entryList2.item = create('Reference') as reference, reference.reference = ('https://example/FamilyMemberHistory/' + %familyMember.id) then FamilyMemberFunction(organizer, familyMember, patient) "family"; } "org"; } "List"; }; }; } "StoriaClinica1"; section where code.code = '30954-2' -> bundle.entry as e4, e4.request = create('BackboneElement') as request, request.method = 'POST', e4.resource = create('Observation') as obs4, obs4.id = uuid() as uuid4, e4.fullUrl = append('https://example/Observation/', uuid4), request.url = 'Observation', dReport.result = create('Reference') as reference, reference.reference = ('https://example/Observation/' + %obs4.id) then Observation(observation, patient, encounter, obs4, bundle) "PrecedentiEsamiEseguiti"; section where code.code = '29548-5' -> bundle.entry as e5, e5.request = create('BackboneElement') as request, request.method = 'POST', e5.resource = create('Observation') as obs5, obs5.id = uuid() as uuid5, e5.fullUrl = append('https://example/Observation/', uuid5), request.url = 'Observation', dReport.result = create('Reference') as reference, reference.reference = ('https://example/Observation/' + %obs5.id) then Observation(observation, patient, encounter, obs5, bundle) "Diagnosi"; } "entryObs"; src.act as act then { section where code.code = '62387-6' -> dReport.encounter = create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %encounter.id) then { act.code -> encounter.type "type"; act.effectiveTime as effectiveTime -> encounter.period as period then { effectiveTime -> period.start = create('dateTime') as start then TSDateTime(effectiveTime, start) "val"; } "period"; act -> bundle.entry as e10, e10.request = create('BackboneElement') as request, request.method = 'POST', e10.resource = create('Procedure') as procedureRes, procedureRes.id = uuid() as uuid10, e10.fullUrl = append('https://example/Procedure/', uuid10), request.url = 'Procedure', encounter.reasonReference = create('Reference') as reference, reference.reference = ('https://example/Procedure/' + %procedureRes.id) then { act -> procedureRes.subject = create('Reference') as reference, reference.reference = ('https://example/Patient/' + %patient.id) "reference"; act -> procedureRes.encounter = create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %encounter.id) "reference"; act.statusCode -> procedureRes.status "status1"; act where statusCode.exists().not() -> procedureRes.status = 'unknown' "status2"; act.entryRelationship as entryRel then { entryRel.procedure as proc -> bundle.entry as e9, e9.request = create('BackboneElement') as request, request.method = 'POST', e9.resource = create('Procedure') as procedure2, procedure2.id = uuid() as uuid9, e9.fullUrl = append('https://example/Procedure/', uuid9), request.url = 'Procedure', procedureRes.partOf = create('Reference') as reference, reference.reference = ('https://example/Procedure/' + %procedure2.id) then Procedure(proc, patient, encounter, procedure2, bundle) "procedurePrestazioni"; entryRel.substanceAdministration as subAdmin -> bundle.entry as e8, e8.request = create('BackboneElement') as request, request.method = 'POST', e8.resource = create('MedicationAdministration') as medAdmin, medAdmin.id = uuid() as uuid8, e8.fullUrl = append('https://example/MedicationAdministration/', uuid8), request.url = 'MedicationAdministration', procedureRes.partOf = create('Reference') as reference, reference.reference = ('https://example/MedicationAdministration/' + %medAdmin.id) then MedicationAdministration(subAdmin, patient, encounter, medAdmin, bundle) "farmacPrestazioni"; entryRel.observation as entryRobs -> bundle.entry as e7, e7.request = create('BackboneElement') as request, request.method = 'POST', e7.resource = create('Observation') as obs7, obs7.id = uuid() as uuid7, e7.fullUrl = append('https://example/Observation/', uuid7), request.url = 'Observation', procedureRes.partOf = create('Reference') as reference, reference.reference = ('https://example/Observation/' + %obs7.id) then ObservationPrest(entryRobs, patient, encounter, obs7, bundle) "osservazioniPrestazioni"; entryRel.act as act2 -> bundle.entry as e6, e6.request = create('BackboneElement') as request, request.method = 'POST', e6.resource = create('Procedure') as procedure3, procedure3.id = uuid() as uuid6, e6.fullUrl = append('https://example/Procedure/', uuid6), request.url = 'Procedure', procedureRes.partOf = create('Reference') as reference, reference.reference = ('https://example/Procedure/' + %procedure3.id) then Procedure(act2, patient, encounter, procedure3, bundle) "procedureGenerichePrestazioni"; } "Relationship"; } "proceduraMadre"; } "Prestazioni"; section where code.code = '80615-8' -> bundle.entry as e12, e12.request = create('BackboneElement') as request, request.method = 'POST', e12.resource = create('Observation') as obs12, obs12.id = uuid() as uuid12, e12.fullUrl = append('https://example/Observation/', uuid12), request.url = 'Observation', dReport.result = create('Reference') as reference, reference.reference = ('https://example/Observation/' + %obs12.id) then Observation(act, patient, encounter, obs12, bundle) "Followup"; } "entryAct"; // src.substanceAdministration src.substanceAdministration as substanceadmin then { section where code.code = '93341-6' -> bundle.entry as e6, e6.request = create('BackboneElement') as request, request.method = 'POST', e6.resource = create('MedicationRequest') as medre1, medre1.id = uuid() as uuid6, e6.fullUrl = append('https://example/MedicationRequest/', uuid6), request.url = 'MedicationRequest', dReport.basedOn = create('Reference') as reference, reference.reference = ('https://example/MedicationRequest/' + %medre1.id) then MedicationRequest(substanceadmin, patient, encounter, medre1, bundle) "TerapiaFarmacologicaConsigliata"; } "substanceadmin"; section where section.entry.exists().not() then { section where (code.code = '48765-2') -> bundle.entry as e2, e2.request = create('BackboneElement') as request, request.method = 'POST', e2.resource = create('Observation') as obs1, obs1.id = uuid() as uuid2, e2.fullUrl = append('https://example/Observation/', uuid2), request.url = 'Observation', dReport.result = create('Reference') as reference, reference.reference = ('https://example/Observation/' + %obs1.id) then { section -> obs1.subject = create('Reference') as reference, reference.reference = ('https://example/Patient/' + %patient.id) "reference"; section -> obs1.encounter = create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %encounter.id) "reference"; section -> obs1.status = 'final' "STatusobse"; section.code -> obs1.code; section.statusCode as s then { s.code as cos -> obs1.status = translate(cos, '#OBSstatus', 'code') "codeS"; } "status"; section.text as text -> bundle.entry as e5, e5.request = create('BackboneElement') as request, request.method = 'POST', e5.resource = create('AllergyIntolerance') as allergy, allergy.id = uuid() as uuid5, e5.fullUrl = append('https://example/AllergyIntolerance/', uuid5), request.url = 'AllergyIntolerance', obs1.focus = create('Reference') as reference, reference.reference = ('https://example/AllergyIntolerance/' + %allergy.id) then { section -> allergy.patient = create('Reference') as reference, reference.reference = ('https://example/Patient/' + %patient.id) "reference"; section -> allergy.encounter = create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %encounter.id) "reference"; section -> allergy.clinicalStatus as clinicalStatus then { section -> clinicalStatus.coding = create('Coding') as coding then { section -> coding.code = 'active' "code"; section -> coding.system = 'http://terminology.hl7.org/CodeSystem/allergyintolerance-clinical' "system"; } "coding"; } "status"; text -> allergy.note as note then { text as t -> note.text = create('string') as textNote then EDstring(t, textNote) "note"; } "narrative"; } "allergytext"; } "allergyAct"; section where (code.code = '93341-6') then { section.text as text -> bundle.entry as e13, e13.request = create('BackboneElement') as request, request.method = 'POST', e13.resource = create('MedicationRequest') as obs13, obs13.id = uuid() as uuid13, e13.fullUrl = append('https://example/MedicationRequest/', uuid13), request.url = 'MedicationRequest', dReport.basedOn = create('Reference') as reference, reference.reference = ('https://example/MedicationRequest/' + %obs13.id) then { section -> obs13.subject = create('Reference') as reference, reference.reference = ('https://example/Patient/' + %patient.id) "reference"; section -> obs13.encounter = create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %encounter.id) "reference"; section -> obs13.intent = 'order' "intent"; section where statusCode.exists().not() -> obs13.status = 'unknown' "st"; text -> obs13.note as note then { text as t -> note.text = create('string') as textNote then EDstring(t, textNote) "note"; } "note"; section -> obs13.medication = create('CodeableConcept') as code then { section -> code.text = 'string' "string"; } "code"; } "txtsec"; } "MedicationRequest"; section where (code.code = '55110-1').not() and (code.code = '93341-6').not() and (code.code = '48765-2').not() then { section.text as text -> bundle.entry as e13, e13.request = create('BackboneElement') as request, request.method = 'POST', e13.resource = create('Observation') as obs13, obs13.id = uuid() as uuid13, e13.fullUrl = append('https://example/Observation/', uuid13), request.url = 'Observation', dReport.result = create('Reference') as reference, reference.reference = ('https://example/Observation/' + %obs13.id) then { section -> obs13.subject = create('Reference') as reference, reference.reference = ('https://example/Patient/' + %patient.id) "reference"; section -> obs13.encounter = create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %encounter.id) "reference"; section -> obs13.status = 'preliminary' "obsst"; section.code -> obs13.code "obscde"; section -> obs13.status = 'final' "statusS"; text -> obs13.note as note then { text as t -> note.text = create('string') as textNote then EDstring(t, textNote) "note"; } "narrative"; } "txtsec"; } "NonConclusion"; section where (code.code = '55110-1') then { section.text as t -> dReport.conclusion = create('string') as textConclusion then EDstring(t, textConclusion) "conc"; } "conclusion"; } "whereCond"; } group Observation(source cda : observation, target patient : Patient, target encounter : Encounter, target ob : Observation, target bundle : Bundle) { cda -> ob.subject = create('Reference') as reference, reference.reference = ('https://example/Patient/' + %patient.id) "reference"; cda -> ob.encounter = create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %encounter.id) "reference"; cda.code -> ob.code; cda -> ob.status = 'final' "Stats"; // value datatype cda.value : INT as int -> ob.value = (int.value); cda.value : ST as st -> ob.value = create('string'), ob.value = (st.dataString); cda.value : BL as boolean -> ob.value = (boolean.value) "boolean"; cda.value : CE as val then { val -> ob.value = create('CodeableConcept') as ce then { val.originalText as originalText then { originalText.reference as reference -> ce.text = (reference.value); }; val -> ce.coding as coding then { val.code as code -> coding.code = cast(code, 'string'); val.codeSystem as system -> coding.system = translate(system, 'http://hl7.org/fhir/ConceptMap/special-oid2uri', 'uri'); val.displayName as display -> coding.display = cast(display, 'string'); } "code"; val.translation as translation -> ce.coding as coding then { translation.code as code -> coding.code = cast(code, 'string'); translation.codeSystem as system -> coding.system = translate(system, 'http://hl7.org/fhir/ConceptMap/special-oid2uri', 'uri'); translation.displayName as display -> coding.display = cast(display, 'string'); translation.qualifier as qualifier then { qualifier.value as value -> ce.coding as coding then { value.code as code -> coding.code = cast(code, 'string'); value.codeSystem as system -> coding.system = translate(system, 'http://hl7.org/fhir/ConceptMap/special-oid2uri', 'uri'); value.displayName as display -> coding.display = cast(display, 'string'); }; }; }; } "coding"; } "val"; cda.value : CD as val then { val -> ob.value = create('CodeableConcept') as ce then { val.originalText as originalText then { originalText.reference as reference -> ce.text = (reference.value); }; val -> ce.coding as coding then { val.code as code -> coding.code = cast(code, 'string'); val.codeSystem as system -> coding.system = translate(system, 'http://hl7.org/fhir/ConceptMap/special-oid2uri', 'uri'); val.displayName as display -> coding.display = cast(display, 'string'); } "code"; val.translation as translation -> ce.coding as coding then { translation.code as code -> coding.code = cast(code, 'string'); translation.codeSystem as system -> coding.system = translate(system, 'http://hl7.org/fhir/ConceptMap/special-oid2uri', 'uri'); translation.displayName as display -> coding.display = cast(display, 'string'); translation.qualifier as qualifier then { qualifier.value as value -> ce.coding as coding then { value.code as code -> coding.code = cast(code, 'string'); value.codeSystem as system -> coding.system = translate(system, 'http://hl7.org/fhir/ConceptMap/special-oid2uri', 'uri'); value.displayName as display -> coding.display = cast(display, 'string'); }; }; }; } "coding"; } "val"; cda.value : PQ as val then { val -> ob.value = create('Quantity') as quantity then { val.value as value -> quantity.value = value; val.unit as unit -> quantity.unit = unit; } "quantity"; } "valueQuantity"; cda.effectiveTime as effectiveTime where (value.exists()) -> ob.effective = create('dateTime') as value then TSDateTime(effectiveTime, value) "value1"; cda.effectiveTime as effectiveTime where (low.exists()) -> ob.effective = create('Period') as value then IVLTSPeriod(effectiveTime, value) "valuePeriod"; cda.text as text -> ob.note as note then { text.reference as reference -> note.text = (reference.value) "text"; } "note"; cda.statusCode as s then { s.code as cos -> ob.status = translate(cos, '#OBSstatus', 'code') "codeS"; } "status"; } group ConditionFunction(source src : cdaElement, target tgt : Condition, target patient : patient, target encounter : encounter, target bundle : Bundle) { src.code -> tgt.category; src -> tgt.subject = create('Reference') as reference, reference.reference = ('https://example/Patient/' + %patient.id) "reference"; src -> tgt.encounter = create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %encounter.id) "reference"; src.statusCode as stscode -> tgt.verificationStatus as verifstatus then { stscode as codeS -> verifstatus.coding = create('Coding') as coding then { codeS.code -> coding.code = 'confirmed'; codeS -> coding.system = 'http://terminology.hl7.org/CodeSystem/condition-ver-status' "system"; codeS -> coding.display = cast('Confirmed', 'string') "display"; } "coding"; } "verifstatus"; src.effectiveTime as effectiveTime -> tgt.onset = create('Period') as value then IVLTSPeriod(effectiveTime, value) "valuePeriod"; src.value -> tgt.code; src.entryRelationship as entryRelationship then { entryRelationship.observation as obsentry then { obsentry.code where code = '89261-2' then { obsentry -> tgt.evidence as evidence, bundle.entry as e1, e1.request = create('BackboneElement') as request, request.method = 'POST', e1.resource = create('Observation') as obsy, obsy.id = uuid() as uuid1, e1.fullUrl = append('https://example/Observation/', uuid1), request.url = 'Observation', evidence.detail = create('Reference') as reference, reference.reference = ('https://example/Observation/' + %obsy.id) then Observation(obsentry, patient, encounter, obsy, bundle) "observation"; } "observation"; obsentry.code where code = '33999-4' then { obsentry.value as value -> tgt.clinicalStatus as clinicalstatus then { value as val -> clinicalstatus.coding = create('Coding') as coding then { val where (code = 'LA9041-0') -> coding.code = 'resolved' "code"; val where (code = 'LA18632-2') -> coding.code = 'inactive' "code"; val where (code = 'LA16666-2') -> coding.code = 'active' "code"; val -> coding.system = 'http://terminology.hl7.org/CodeSystem/condition-clinical' "system"; val.displayName as display -> coding.display = cast(display, 'string') "display"; } "coding"; obsentry.text as text then { text.reference as reference -> clinicalstatus.text = (reference.value) "text"; }; } "clinicalstatus"; } "clinicalStatus2"; } "EntryRelObsevation"; } "entryR"; } group Procedure(source src : procedure, target patient : Patient, target encounter : Encounter, target tgt : Procedure, target bundle : Bundle) { src -> tgt.subject = create('Reference') as reference, reference.reference = ('https://example/Patient/' + %patient.id) "reference"; src -> tgt.encounter = create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %encounter.id) "reference"; src.statusCode -> tgt.status "status1"; src where statusCode.exists().not() -> tgt.status = 'unknown' "status2"; src.id -> tgt.identifier; src.code -> tgt.code; src.effectiveTime as effectiveTime where (value.exists()) -> tgt.performed = create('dateTime') as value then TSDateTime(effectiveTime, value) "value1"; src.effectiveTime as effectiveTime where (low.exists()) -> tgt.performed = create('Period') as value then IVLTSPeriod(effectiveTime, value) "valuePeriod"; src.methodCode as methodCode -> tgt.extension as ext1 then ITMethodExt(methodCode, ext1); src.participant as participant then { participant.participantRole as participantRole -> tgt.performer as performer then { participantRole.playingDevice as device -> bundle.entry as e2, e2.request = create('BackboneElement') as request, request.method = 'POST', e2.resource = create('Device') as deviceRes, deviceRes.id = uuid() as uuid2, e2.fullUrl = append('https://example/Device/', uuid2), request.url = 'Device', performer.actor = create('Reference') as reference, reference.reference = ('https://example/Device/' + %deviceRes.id) then { device.manufacturerModelName as manufacturerModelName then { manufacturerModelName.displayName as displayName -> deviceRes.manufacturer = cast(displayName, 'string') "manuf"; } "manufacturer"; device.code -> deviceRes.type; } "device"; }; }; src.entryRelationship as entryR then { entryR.observation as observation -> bundle.entry as e3, e3.request = create('BackboneElement') as request, request.method = 'POST', e3.resource = create('Observation') as obs1, obs1.id = uuid() as uuid3, e3.fullUrl = append('https://example/Observation/', uuid3), request.url = 'Observation', tgt.partOf = create('Reference') as reference, reference.reference = ('https://example/Observation/' + %obs1.id) then Observation(observation, patient, encounter, obs1, bundle) "Parametri"; entryR.act as act then { act.text as text -> tgt.note as note then { text.reference as reference -> note.text = (reference.value) "text"; } "note"; }; } "entryRelProcedure"; } group ITMethodExt(source src, target ext) { src -> ext.url = 'http://hl7.org/fhir/StructureDefinition/procedure-method' "url"; src -> ext.value = create('CodeableConcept') as value then CECodeableConcept(src, value) "value"; } group MedicationAdministration(source src : substanceAdministration, target patient : Patient, target encounter : Encounter, target tgt : MedicationAdministration, target bundle : Bundle) { src -> tgt.subject = create('Reference') as reference, reference.reference = ('https://example/Patient/' + %patient.id) "reference"; src -> tgt.context = create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %encounter.id) "reference"; src.statusCode -> tgt.status "status1"; src where statusCode.exists().not() -> tgt.status = 'unknown' "status2"; src.id -> tgt.identifier; src.effectiveTime as effectiveTime where (value.exists()) -> tgt.effective = create('dateTime') as value then TSDateTime(effectiveTime, value) "value1"; src.effectiveTime as effectiveTime where (low.exists()) -> tgt.effective = create('Period') as value then IVLTSPeriod(effectiveTime, value) "valuePeriod"; src -> tgt.dosage as dosage then { src.routeCode -> dosage.route "route"; src.repeatNumber as repeatNumber -> dosage.rate = create('SimpleQuantity') as value then PQQuantity(repeatNumber, value) "repQ"; src.approachSiteCode -> dosage.site "site"; src.targetSiteCode -> dosage.site "site"; } "dosage"; src.consumable as consumable -> bundle.entry as e1, e1.request = create('BackboneElement') as request, request.method = 'POST', e1.resource = create('Medication') as medication, medication.id = uuid() as uuid1, e1.fullUrl = append('https://example/Medication/', uuid1), request.url = 'Medication', tgt.medication = create('Reference') as medref, medref.reference = ('https://example/Medication/' + %medication.id) then Medication(src, medication, patient, bundle) "medication"; src.participant as participant then { participant.participantRole as participantRole -> tgt.performer as performer then { participantRole.device as device -> bundle.entry as e2, e2.request = create('BackboneElement') as request, request.method = 'POST', e2.resource = create('Device') as deviceRes, deviceRes.id = uuid() as uuid2, e2.fullUrl = append('https://example/Device/', uuid2), request.url = 'Device', performer.actor = create('Reference') as reference, reference.reference = ('https://example/Device/' + %deviceRes.id) then { device.ManufacturerModelName as ManufacturerModelName then { ManufacturerModelName.code -> deviceRes.manufacturer "manuf"; } "manufacturer"; }; }; }; src.entryRelationship as entryR then { entryR.observation as observation -> bundle.entry as e3, e3.request = create('BackboneElement') as request, request.method = 'POST', e3.resource = create('Observation') as obs1, obs1.id = uuid() as uuid3, e3.fullUrl = append('https://example/Observation/', uuid3), request.url = 'Observation', tgt.partOf = create('Reference') as reference, reference.reference = ('https://example/Observation/' + %obs1.id) then Observation(observation, patient, encounter, obs1, bundle) "Parametri"; entryR.act as act then { act.text as text -> tgt.note as note then { text.reference as reference -> note.text = (reference.value) "text"; } "note"; }; } "entryRelMedication"; src where (src.doseQuantity.exists() or src.rateQuantity.exists()) -> bundle.entry as e1, e1.request = create('BackboneElement') as request, request.method = 'POST', e1.resource = create('MedicationRequest') as medicationRq, medicationRq.id = uuid() as uuid1, e1.fullUrl = append('https://example/MedicationRequest/', uuid1), request.url = 'MedicationRequest', tgt.request = create('Reference') as reference, reference.reference = ('https://example/MedicationRequest/' + %medicationRq.id) then MedicationRequest(src, patient, encounter, medicationRq, bundle) "medRequ"; src.text as text -> tgt.note as note then { text -> note.text "text"; } "note"; } group ObservationPrest(source src : observation, target patient : Patient, target encounter : Encounter, target tgt : Observation, target bundle : Bundle) { src -> tgt.subject = create('Reference') as reference, reference.reference = ('https://example/Patient/' + %patient.id) "reference"; src -> tgt.encounter = create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %encounter.id) "reference"; src.statusCode as s then { s.code as cos -> tgt.status = translate(cos, '#OBSstatus', 'code') "codeS"; } "status"; src.id -> tgt.identifier; src.code -> tgt.code; src.effectiveTime as effectiveTime where (value.exists()) -> tgt.perfomed = create('dateTime') as value then TSDateTime(effectiveTime, value) "value1"; src.effectiveTime as effectiveTime where (low.exists()) -> tgt.perfomed = create('Period') as value then IVLTSPeriod(effectiveTime, value) "valuePeriod"; src.methodCode -> tgt.method; src.participant as participant then { participant.participantRole as participantRole then { participantRole.device as device -> bundle.entry as e2, e2.request = create('BackboneElement') as request, request.method = 'POST', e2.resource = create('Device') as deviceRes, deviceRes.id = uuid() as uuid2, e2.fullUrl = append('https://example/Device/', uuid2), request.url = 'Device', tgt.device = create('Reference') as reference, reference.reference = ('https://example/Device/' + %deviceRes.id) then { device.ManufacturerModelName as ManufacturerModelName then { ManufacturerModelName.code -> deviceRes.manufacturer "manuf"; } "manufacturer"; }; }; }; src.entryRelationship as entryR then { entryR.observation as observation -> bundle.entry as e3, e3.request = create('BackboneElement') as request, request.method = 'POST', e3.resource = create('Observation') as obs1, obs1.id = uuid() as uuid3, e3.fullUrl = append('https://example/Observation/', uuid3), request.url = 'Observation', tgt.hasMember = create('Reference') as reference, reference.reference = ('https://example/Observation/' + %obs1.id) then Observation(observation, patient, encounter, obs1, bundle) "Parametri"; entryR.act as act then { act.text as text -> tgt.note as note then { text.reference as reference -> note.text = (reference.value) "text"; } "note"; }; } "entryRelOsservazioni"; } group MedicationRequest(source src : substanceAdministration, target patient : Patient, target encounter : Encounter, target tgt : MedicationRequest, target bundle : Bundle) { // default + mandatory src -> tgt.subject = create('Reference') as reference, reference.reference = ('https://example/Patient/' + %patient.id) "reference"; src -> tgt.encounter = create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %encounter.id) "reference"; src -> tgt.intent = 'order' "intent"; src where statusCode.exists().not() -> tgt.status = 'unknown' "st"; src.statusCode as sc then { sc.code as cos -> tgt.status = translate(cos, '#MedicationStatusMap', 'code') "codeS"; } "status"; src.text as txt -> tgt.note as note then { txt.reference as reference -> note.text = (reference.value) "text"; } "note"; src.effectiveTime : IVL_TS as eff -> tgt.dosageInstruction = create('Dosage') as dosage then { eff -> dosage.timing = create('Timing') as timing then { eff -> timing.repeat as rep then { eff as eff where (value.exists()) -> rep.bounds = create('dateTime') as value then TSDateTime(eff, value) "value1"; eff as eff where (low.exists()) -> rep.bounds = create('Period') as value then IVLTSPeriod(eff, value) "valuePeriod"; } "rep"; } "timing"; } "period"; src.effectiveTime : EIVL_TS as effe -> tgt.dosageInstruction = create('Dosage') as dosage then { effe -> dosage.timing = create('Timing') as timing then { effe -> timing.repeat as rep then { effe.eventCode as ev -> rep.when = (ev.code); } "rep"; } "timing"; } "period"; src.effectiveTime : IVL_TS as eff -> tgt.dosageInstruction = create('Dosage') as dosage, dosage.timing = create('Timing') as timing, timing.event = (eff.value) "tim"; src.effectiveTime : PIVL_TS as eff -> tgt.dosageInstruction = create('Dosage') as dosage then { eff -> dosage.timing = create('Timing') as timing then periodTiming(eff, timing) "cod"; } "eff"; src where (src.doseQuantity.exists() or src.rateQuantity.exists()) then { src -> tgt.dosageInstruction = create('Dosage') as dosageInstruction then { src.doseQuantity as doseQuant then { doseQuant.originalText as ot then { ot.reference -> dosageInstruction.text; } "ot"; doseQuant -> dosageInstruction.doseAndRate as dosageRate then { doseQuant -> dosageRate.dose = create('Range') as d then { doseQuant -> d.low = create('SimpleQuantity') as l then { doseQuant.low as lo -> l.value = (lo.value); doseQuant.low as lo -> l.unit = (lo.unit); } "low"; doseQuant -> d.high = create('SimpleQuantity') as h then { doseQuant.high as hi -> h.value = (hi.value); doseQuant.high as hi -> h.unit = (hi.unit); } "low"; } "d"; } "dosageRate"; }; src.rateQuantity as rateQuantity then { rateQuantity.originalText as ot then { ot.reference -> dosageInstruction.text; } "ot"; rateQuantity -> dosageInstruction.doseAndRate as dosageRate then { rateQuantity -> dosageRate.rate = create('Range') as d then { rateQuantity -> d.low = create('SimpleQuantity') as l then { rateQuantity.low as lo -> l.value = (lo.value); rateQuantity.low as lo -> l.unit = (lo.unit); } "low"; rateQuantity -> d.high = create('SimpleQuantity') as h then { rateQuantity.high as hi -> h.value = (hi.value); rateQuantity.high as hi -> h.unit = (hi.unit); } "high"; } "r"; } "dosageRate"; } "rate"; src.routeCode -> dosageInstruction.route "route"; src.approachSiteCode -> dosageInstruction.site "site"; src.targetSiteCode -> dosageInstruction.site "site"; } "dosageIn"; } "condition"; src.consumable as consumable -> bundle.entry as e1, e1.request = create('BackboneElement') as request, request.method = 'POST', e1.resource = create('Medication') as medication, medication.id = uuid() as uuid1, e1.fullUrl = append('https://example/Medication/', uuid1), request.url = 'Medication', tgt.medication = create('Reference') as medref, medref.reference = ('https://example/Medication/' + %medication.id) then Medication(src, medication, patient, bundle) "medication"; src.entryRelationship as entryRelationship then { entryRelationship.supply as supply -> tgt.dispenseRequest as dispenseRequest then { supply.quantity as quantityCDA -> dispenseRequest.quantity as quantityFHIR then { quantityCDA -> quantityFHIR.value = (quantityCDA.value) "value"; }; }; } "entryR"; src.participant as participant then { participant then Practitioner(participant, tgt, bundle) "function"; participant.effectiveTime -> tgt.authoredOn "autor"; } "Partecipant"; } group periodTiming(source effectiveTime : PIVL_TS, target timing : Timing) { effectiveTime -> timing.repeat as r then { effectiveTime.period as p -> r.period = (p.value); effectiveTime.period as p -> r.periodUnit = (p.unit); } "repeat"; } group Medication(source src : cda, target tgt : Medication, target patient : Patient, target bundle : Bundle) { src.consumable as consumable then { consumable.manufacturedProduct as manufacturedProduct then { manufacturedProduct.manufacturedMaterial as manufacturedMaterial then { manufacturedMaterial.code -> tgt.code "CE"; src.administrationUnitCode -> tgt.form "form"; } "material"; } "product"; }; src.entryRelationship as entryR then { entryR.observation as observation then { observation.code where displayName = 'Grammatura' -> tgt.ingredient as ingredient then { src.consumable as consumable then { consumable.manufacturedProduct as manufacturedProduct then { manufacturedProduct.manufacturedMaterial as manufacturedMaterial then { manufacturedMaterial.code as code -> ingredient.item = create('CodeableConcept') as value then CECodeableConcept(code, value) "CE"; } "material"; } "product"; }; observation.value as value -> ingredient.strength as strength then { value -> strength.numerator as numerator then { value -> numerator.value = (value.value) "valueN"; } "numerator"; value -> strength.denominator as denominator then { value -> denominator.value = 1 "valueD"; } "denominator"; } "strenght"; } "ingredient"; observation.code where displayName = 'Quantità nella Confezione' then { observation.value as value -> tgt.amount as amount then { value -> amount.numerator as numerator then { value -> numerator.value = (value.value) "valueN"; } "numerator"; value -> amount.denominator as denominator then { value -> denominator.value = 1 "valueD"; } "denominator"; } "amount"; } "quantita"; } "obs"; } "entryR"; } group MedicationStatement(source src : subAdmin, target tgt : MedicationStatement, target patient : Patient, target encounter : Encounter, target bundle : Bundle) { src -> tgt.subject = create('Reference') as reference, reference.reference = ('https://example/Patient/' + %patient.id) "reference"; src.statusCode -> tgt.status; src where statusCode.exists().not() -> tgt.status = 'unknown' "notpresent"; src.consumable as consumable then { consumable.manufacturedProduct as manufacturedProduct then { manufacturedProduct.manufacturedMaterial as manufacturedMaterial then { manufacturedMaterial.code as code -> tgt.medication = create('CodeableConcept') as ce then CECodeableConcept(code, ce) "CE"; } "material"; } "product"; }; } group FamilyMemberFunction(source src : organizer, target tgt : FamilyMemberHistory, target patient : patient) { src -> tgt.patient = create('Reference') as reference, reference.reference = ('https://example/Patient/' + %patient.id) "patReference"; src.statusCode -> tgt.status; src.effectiveTime as effectiveTime -> tgt.date = create('date') as value then TSDateTime(effectiveTime, value) "date"; src.subject as subject then { subject.relatedSubject as relatedSubject then { relatedSubject.code -> tgt.relationship "relationshipCode"; relatedSubject.subject as subject -> tgt.sex as sex then { subject.administrativeGenderCode as administrativeGenderCode -> sex.coding as coding then { administrativeGenderCode.code as sexCode -> coding.code = translate(sexCode, '#cm-v3-administrative-gender', 'code') "gender"; administrativeGenderCode -> coding.system = 'http://hl7.org/fhir/administrative-gender' "system"; } "coding"; }; } "relatedSub"; } "relationship"; src.component as component -> tgt.condition as condition then { component.observation as observation then { observation.code -> condition.code; observation.text as text -> tgt.note as note then { text.reference as reference -> note.text = (reference.value) "value"; } "reference"; observation.statusCode -> tgt.status; // observation.effectiveTime as effectiveTime -> condition.onset = create('Period') as value then IVLTSPeriod(effectiveTime, value) "valuePeriod"; observation where observation.effectiveTime.exists() then { observation.effectiveTime as effectiveTime -> tgt.condition = create('BackboneElement') as condition then { observation.code -> condition.code; observation.value -> condition.outcome "codeable"; effectiveTime -> condition.onset = create('Period') as period then { effectiveTime -> period.start = create('dateTime') as start then TSDateTime(effectiveTime, start) "val"; } "efft"; } "effttemp"; } "cont"; observation.value -> condition.outcome "codeable"; observation.entryRelationship as entryR then { entryR.observation as obs then { obs where (code.code = '35267-4') then { obs.value as value -> condition.onset = create('Age') as Age then { value.value as valueAge -> Age.value = valueAge "age"; value.unit as unit -> Age.code = unit; value.unit as unit -> Age.unit = unit; value -> Age.system = 'http://unitsofmeasure.org' "system"; }; } "insorgenza"; obs where (code.code = '39016-1') then { obs.value as value -> tgt.deceased = create('Age') as Age then { value.value as valueAge -> Age.value = valueAge "age"; value.unit as unit -> Age.code = unit; value.unit as unit -> Age.unit = unit; value -> Age.system = 'http://unitsofmeasure.org' "system"; }; } "death"; } "obser"; } "EntryRel"; }; }; } group allergyFunction(source src : cdaElement, target tgt : AllergyIntolerance, target patient : patient, target encounter : encounter) { src -> tgt.patient = create('Reference') as reference, reference.reference = ('https://example/Patient/' + %patient.id) "reference"; src -> tgt.encounter = create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %encounter.id) "reference"; src.entryRelationship as entryRelationship1 then { entryRelationship1.observation as observation1 then { observation1.effectiveTime as effectiveTime -> tgt.onset = create('Period') as value then IVLTSPeriod(effectiveTime, value) "valuePeriod"; observation1.value as code then { code.code as code1 -> tgt.type = translate(code1, '#AllergyTypeMap', 'code') "type"; code.code as code1 -> tgt.category = translate(code1, '#AllergyCategoryMap', 'code') "category"; } "code"; observation1.participant as participant -> tgt.reaction as reaction then { observation1.entryRelationship as entryRelationship2 where (typeCode = 'MFST') then { entryRelationship2.observation as observation2 then { observation2.value -> reaction.manifestation "manifestation"; observation2.effectiveTime as effectiveTime then { effectiveTime.low as low -> reaction.onset = create('dateTime') as value then TSDateTime(low, value) "valuePeriodLow"; } "low"; } "observ2"; } "entryR2"; participant.participantRole as participantRole then { participantRole.playingEntity as playingEntity then { playingEntity.code -> reaction.substance "reaction"; }; }; }; observation1.entryRelationship as entryRelationship2 where (typeCode = 'MFST') then { entryRelationship2.observation as observation2 where observation1.participant.exists().not() -> tgt.reaction as reaction then { observation2.value -> reaction.manifestation "manifestation"; observation2.effectiveTime as effectiveTime then { effectiveTime.low as low -> reaction.onset = create('dateTime') as value then TSDateTime(low, value) "valuePeriodLow"; } "low"; } "observ2"; } "entryR2"; observation1.entryRelationship as entryRelationship3 where (typeCode = 'SUBJ') then { entryRelationship3.observation as observation3 then { observation3.value as value then { value.code as c -> tgt.criticality = translate(c, '#CricalityMap', 'code') "value"; } "criticality"; } "observ3"; entryRelationship3.act as act -> tgt.note as note then { act.text as text then { text.reference as reference -> note.text = (reference.value); } "note"; }; } "entryR3"; observation1.entryRelationship as entryRelationship4 where (typeCode = 'REFR') then { entryRelationship4.observation as observation4 then { observation4.value as value -> tgt.clinicalStatus as clinicalStatus then { value as valu -> clinicalStatus.coding = create('Coding') as coding then { valu where (code = 'LA9041-0') -> coding.code = 'resolved' "code"; valu where (code = 'LA18632-2') -> coding.code = 'inactive' "code"; valu where (code = 'LA16666-2') -> coding.code = 'active' "code"; valu -> coding.system = 'http://terminology.hl7.org/CodeSystem/allergyintolerance-clinical' "system"; valu.displayName as display -> coding.display = cast(display, 'string') "display"; } "coding"; } "clinicalStatus"; } "observ4"; } "entryR4"; }; } "entryrelationship"; } group Practitioner(source src : participant, target tgt : MedicationRequest, target bundle : Bundle) { src -> bundle.entry as e22, e22.request = create('BackboneElement') as request, request.method = 'PUT', e22.resource = create('Practitioner') as practitioner1 then { src.participantRole as practr then { practr.id as id -> practitioner1.identifier as identifier then { id.root as r -> identifier.system = translate(r, 'http://hl7.org/fhir/ConceptMap/special-oid2uri', 'uri') "root1"; id.extension as ext -> identifier.value = ext "ext"; id.assigningAuthorityName as s -> identifier.assigner as a, a.display = s; id.root as r then { id.extension as ext -> practitioner1.id = (r + '-' + ext) as uuid22, e22.fullUrl = append('https://example/Practitioner/', uuid22), tgt.requester = create('Reference') as reference, reference.reference = ('https://example/Practitioner/' + %practitioner1.id) "id"; } "r"; } "identifier"; practr.id as id where (root = '2.16.840.1.113883.2.9.4.3.2') then { id.extension as ext -> request.url = append('Practitioner?identifier=', ext) "UUID"; } "2"; practr.id as id where (root != '2.16.840.1.113883.2.9.4.3.2') then { id.extension as ext -> request.url = append('Practitioner?identifier=', ext) "UUID"; } "diverso"; practr -> practitioner1.meta as meta then { practr -> meta.tag = create('Coding') as coding then { practr -> coding.system = 'http://algoritmodiscoring' "system"; practr -> coding.code = 'ClinicalDocument/body/TerapiaFarmacologicaConsigliata/participant' "code"; } "coding"; } "meta"; practr.addr -> practitioner1.address; practr.telecom -> practitioner1.telecom; practr.playingEntity as plentity then { plentity.name -> practitioner1.name; plentity.birthTime as birthTime then { birthTime.value as date -> practitioner1.birthDate = truncate(date, 10); } "birth"; } "partname"; } "resurceCreation"; } "practitionerCreate"; }