Source | hl7.fhir.it.cda2fhir#current:CDA to FHIR Maps (v4.0.1) |
resourceType | StructureMap |
id | cda2fhirPs |
canonical | http://hl7.it/fhir/cda2fhir/StructureMap/cda2fhirPs |
version | 0.1.0 |
status | draft |
publisher | HL7 Italy |
name | cda2fhirPs |
date | 2023-06-12T14:05:19+00:00 |
jurisdictions | it |
Usages | (none) |
/// url = 'http://hl7.it/fhir/cda2fhir/StructureMap/cda2fhirPs' /// name = 'cda2fhirPs' /// status = 'draft' 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" ; } "ext" ; } "recPat" ; } "patient" ; } "ClinicalDocumentToBody" ; } group ClinicalDocumentToBundle ( source cda : ClinicalDocument, target patient : Patient, target composition : Composition, target encounter : Encounter, target bundle : Bundle, target DocumentReference : DocumentReference ) { cda -> encounter.status = 'finished' "finished" ; cda -> encounter.class = create ( 'Coding' ) as coding then { cda -> coding.code = 'summary' "code" ; } "coding" ; cda -> bundle.id = uuid ( ) "id" ; cda.id -> bundle.identifier "identifier" ; cda -> bundle.type = 'transaction' "type" ; cda -> bundle.timestamp = ( timestamp.now() ) "date" ; // cda.effectiveTime -> bundle.timestamp; cda then ClinicalDocumentComposition ( cda , composition , patient , encounter , bundle , DocumentReference ) "composition" ; 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 , composition ) ; } ; } ; } "body" ; } "diagnostic" ; } group ClinicalDocumentSection ( source cda : ClinicalDocument, source src : Section, target patient : Patient, target tgt , target bundle : Bundle, target enc : Encounter, target composition : Composition ) { src.title as t -> tgt.title = ( t.dataString ) ; src.code -> tgt.code ; 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" ; src.code where (code = '30954-2') then { entry.organizer as organizer -> bundle.entry as e0 , e0.request = create ( 'BackboneElement' ) as request , request.method = 'POST' , e0.resource = create ( 'DiagnosticReport' ) as dia , dia.id = uuid ( ) as uuid0 , e0.fullUrl = append ( 'https://example/DiagnosticReport/' , uuid0 ) , request.url = 'DiagnosticReport' , tgt.entry = create ( 'Reference' ) as reference , reference.reference = ( 'https://example/DiagnosticReport/' + %dia.id ) then DiagnosticReportFunction ( organizer , patient , enc , dia , bundle ) "diagnostic" ; } "entryObs" ; // sezioni che sono strutturate src.code where (code = '29762-2') or (code = '10162-6') then { entry.observation as observation -> 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' , tgt.entry = create ( 'Reference' ) as reference , reference.reference = ( 'https://example/Observation/' + %obs1.id ) then Observation ( observation , patient , enc , obs1 , bundle ) "obs1" ; } "entryObs" ; src.code where (code = '8716-3') or (code = '47420-5') then { entry.organizer as organizer -> 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' , tgt.entry = create ( 'Reference' ) as reference , reference.reference = ( 'https://example/Observation/' + %obs2.id ) then ObservationOrganizer ( src , organizer , patient , enc , obs2 , bundle ) "obs2" ; entry.observation as organizer -> 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' , tgt.entry = create ( 'Reference' ) as reference , reference.reference = ( 'https://example/Observation/' + %obs2.id ) then ObservationOrganizer ( src , organizer , patient , enc , obs2 , bundle ) "obs2" ; } "organizer" ; src.code where code = '11450-4' then { entry.act as act -> 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' , tgt.entry = create ( 'Reference' ) as reference , reference.reference = ( 'https://example/Condition/' + %condition.id ) then ConditionFunction ( act , condition , patient , enc , bundle ) "condition" ; } "listaDeiProblemi" ; src.code where (code = '48765-2') then { entry.act as act -> 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' , tgt.entry = create ( 'Reference' ) as reference , reference.reference = ( 'https://example/AllergyIntolerance/' + %allergy.id ) then allergyFunction ( act , allergy , patient , enc ) "allergy" ; } "entryAct" ; src.code where code = '10160-0' then { entry.substanceAdministration as subAdmin -> bundle.entry as e6 , e6.request = create ( 'BackboneElement' ) as request , request.method = 'POST' , e6.resource = create ( 'MedicationStatement' ) as medicationstatement , medicationstatement.id = uuid ( ) as uuid6 , e6.fullUrl = append ( 'https://example/MedicationStatement/' , uuid6 ) , request.url = 'MedicationStatement' , tgt.entry = create ( 'Reference' ) as reference , reference.reference = ( 'https://example/MedicationStatement/' + %medicationstatement.id ) then MedicationStatement ( subAdmin , medicationstatement , patient , enc , bundle ) "TerapiaFarmacologica" ; } "terapia" ; src.code where code = '11369-6' then { entry.substanceAdministration as subVACC -> bundle.entry as e7 , e7.request = create ( 'BackboneElement' ) as request , request.method = 'POST' , e7.resource = create ( 'Immunization' ) as immunization , immunization.id = uuid ( ) as uuid7 , e7.fullUrl = append ( 'https://example/Immunization/' , uuid7 ) , request.url = 'Immunization' , tgt.entry = create ( 'Reference' ) as reference , reference.reference = ( 'https://example/Immunization/' + %immunization.id ) then Immunization ( subVACC , patient , enc , immunization , bundle ) "immunization" ; } "vacc" ; src.code where code = '10157-6' then { entry.organizer as 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' , tgt.entry = create ( 'Reference' ) as reference , reference.reference = ( 'https://example/FamilyMemberHistory/' + %familyMember.id ) then FamilyMemberFunction ( organizer , familyMember , patient ) "family" ; } "family" ; src.code where code = '46264-8' then { entry.supply as supply -> bundle.entry as e8 , e8.request = create ( 'BackboneElement' ) as request , request.method = 'POST' , e8.resource = create ( 'Procedure' ) as procedure , procedure.id = uuid ( ) as uuid8 , e8.fullUrl = append ( 'https://example/Procedure/' , uuid8 ) , request.url = 'Procedure' , tgt.entry = create ( 'Reference' ) as reference , reference.reference = ( 'https://example/Procedure/' + %procedure.id ) then Procedure ( supply , patient , enc , procedure , bundle ) "protesi" ; } "impianti" ; src.code where code = '47519-4' then { entry.procedure as procedure -> 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' , tgt.entry = create ( 'Reference' ) as reference , reference.reference = ( 'https://example/Procedure/' + %procedure2.id ) then Procedure ( procedure , patient , enc , procedure2 , bundle ) "tratt" ; } "trattamentiProcedure" ; src.code where code = '46240-8' then { entry.encounter as encounter -> bundle.entry as e9 , e9.request = create ( 'BackboneElement' ) as request , request.method = 'POST' , e9.resource = create ( 'Encounter' ) as encounterF , encounterF.id = uuid ( ) as uuid9 , e9.fullUrl = append ( 'https://example/Encounter/' , uuid9 ) , request.url = 'Encounter' , tgt.entry = create ( 'Reference' ) as reference , reference.reference = ( 'https://example/Encounter/' + %encounterF.id ) then EncounterFunction ( encounter , patient , enc , encounterF , bundle ) ; // entry.encounter as encounter -> enc then{ } "visiteRicoveri" ; src.code where code = '57827-8' then { entry.act as act -> bundle.entry as e13 , e13.request = create ( 'BackboneElement' ) as request , request.method = 'POST' , e13.resource = create ( 'Coverage' ) as coverage , coverage.id = uuid ( ) as uuid13 , e13.fullUrl = append ( 'https://example/Coverage/' , uuid13 ) , request.url = 'Coverage' , tgt.entry = create ( 'Reference' ) as reference , reference.reference = ( 'https://example/Coverage/' + %coverage.id ) then Coverage ( act , patient , enc , coverage , bundle ) "esen" ; } "esenzioni" ; src.code where code = 'PSSIT99' then { entry.act as act -> bundle.entry as e14 , e14.request = create ( 'BackboneElement' ) as request , request.method = 'POST' , e14.resource = create ( 'OrganizationAffiliation' ) as affiliation , affiliation.id = uuid ( ) as uuid14 , e14.fullUrl = append ( 'https://example/OrganizationAffiliation/' , uuid14 ) , request.url = 'OrganizationAffiliation' , tgt.entry = create ( 'Reference' ) as reference , reference.reference = ( 'https://example/OrganizationAffiliation/' + %affiliation.id ) then OrganizationAffiliation ( act , patient , enc , affiliation , bundle ) "OrgAffiliation" ; } "retiPatologia" ; } ; src where src.entry.exists() then { src.code where code = '18776-5' then { src -> bundle.entry as e11 , e11.request = create ( 'BackboneElement' ) as request , request.method = 'POST' , e11.resource = create ( 'CarePlan' ) as careplan , careplan.id = uuid ( ) as uuid11 , e11.fullUrl = append ( 'https://example/CarePlan/' , uuid11 ) , request.url = 'CarePlan' , tgt.entry = create ( 'Reference' ) as reference , reference.reference = ( 'https://example/CarePlan/' + %careplan.id ) then { src.entry as entry then CarePlanFunction ( entry , careplan , patient , enc , bundle ) "prestazioni" ; } "pianiCura" ; } "raccoglitore" ; } "esiste" ; src where src.entry.exists().not() then { src.code where code = '10157-6' then { src.text as text -> 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' , tgt.entry = create ( 'Reference' ) as reference , reference.reference = ( 'https://example/FamilyMemberHistory/' + %familyMember.id ) then { src -> familyMember.patient = create ( 'Reference' ) as reference , reference.reference = ( 'https://example/Patient/' + %patient.id ) "reference" ; src -> familyMember.status = 'health-unknown' "statusS" ; text -> familyMember.note as note then { text as t -> note.text = t "reference" ; } "reference" ; text -> familyMember.relationship = create ( 'CodeableConcept' ) as relation then { text as txt -> relation.text = txt "text" ; } "medication" ; } "family" ; } "familyraccoglitore" ; // Anmanesi Familiare narrativa src.code where code = '18776-5' then { src.text as text -> bundle.entry as e11 , e11.request = create ( 'BackboneElement' ) as request , request.method = 'POST' , e11.resource = create ( 'CarePlan' ) as careplan , careplan.id = uuid ( ) as uuid11 , e11.fullUrl = append ( 'https://example/CarePlan/' , uuid11 ) , request.url = 'CarePlan' , tgt.entry = create ( 'Reference' ) as reference , reference.reference = ( 'https://example/CarePlan/' + %careplan.id ) then { src -> careplan.subject = create ( 'Reference' ) as reference , reference.reference = ( 'https://example/Patient/' + %patient.id ) "reference" ; src -> careplan.status = 'active' "status" ; // src-> careplan.encounter=create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %enc.id) "reference"; src -> careplan.intent = 'order' "intent" ; text -> careplan.note as note then { text as t -> note.text = t "reference" ; } "reference" ; } "pianiCura" ; } "raccoglitore" ; // Piano di cura narrativa src.code where (code = '30954-2') or (code = '29762-2') or (code = '8716-3') or (code = '47420-5') or (code = '42348-3') then { src.text as text -> bundle.entry as e13 , e13.request = create ( 'BackboneElement' ) as request , request.method = 'POST' , e13.resource = create ( 'Observation' ) as obs1 , obs1.id = uuid ( ) as uuid13 , e13.fullUrl = append ( 'https://example/Observation/' , uuid13 ) , request.url = 'Observation' , tgt.entry = create ( 'Reference' ) as reference , reference.reference = ( 'https://example/Observation/' + %obs1.id ) then { src -> obs1.subject = create ( 'Reference' ) as reference , reference.reference = ( 'https://example/Patient/' + %patient.id ) "reference" ; src -> obs1.status = 'preliminary' "obsst" ; // src -> obs1.encounter=create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %enc.id) "reference"; src.code -> obs1.code "obscde" ; src -> obs1.status = 'final' "statusS" ; text -> obs1.note as note then { text as t -> note.text = create ( 'string' ) as textNote then EDstring ( t , textNote ) "note" ; } "narrative" ; } "txtsec" ; } "narrative" ; // sezioni che sono narrative } "code" ; src.component as component then { component.section as sec -> tgt.section as tgtSection then ClinicalDocumentSection ( cda , sec , patient , tgtSection , bundle , enc , dReport ) ; } ; } group Procedure ( source src : cdaElement, target patient : Patient, target encounter : Encounter, target tgt : Procedure, target bundle : Bundle ) { src.text as tx -> tgt.note as note then { tx.reference as reff -> note.text = ( reff.value ) "r" ; } "tx" ; // toASK src.templateId where root = '2.16.840.1.113883.2.9.10.1.4.3.10.3' then { src.effectiveTime as effectiveTime -> tgt.performed = ( effectiveTime.value ) ; src.code -> tgt.code ; } "ref" ; src -> tgt.subject = create ( 'Reference' ) as reference , reference.reference = ( 'https://example/Patient/' + %patient.id ) "reference" ; src.statusCode as s then { s.code as cos -> tgt.status = translate ( cos , '#EventStatus' , 'code' ) "codeS" ; } "status" ; // src -> tgt.encounter=create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %encounter.id) "reference"; src where statusCode.exists().not() -> tgt.status = 'unknown' "status2" ; src.templateId where root = '2.16.840.1.113883.2.9.10.1.4.3.9.1' then { src -> bundle.entry as e1 , e1.request = create ( 'BackboneElement' ) as request , request.method = 'POST' , e1.resource = create ( 'Device' ) as deviceRes , deviceRes.id = uuid ( ) as uuid1 , e1.fullUrl = append ( 'https://example/Device/' , uuid1 ) , request.url = 'Device' , tgt.usedReference = create ( 'Reference' ) as reference , reference.reference = ( 'https://example/Device/' + %deviceRes.id ) then { src -> deviceRes.patient = create ( 'Reference' ) as reference , reference.reference = ( 'https://example/Patient/' + %patient.id ) "reference" ; src.code -> deviceRes.type ; } "device" ; 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" ; } "presenzaProtesiImpianto" ; src.templateId where root = '2.16.840.1.113883.2.9.10.1.4.3.9.2' then { src.code as code -> tgt.note as note then { code.displayName as displayName -> note.text = ( displayName ) "text" ; } "note" ; } "assenza" ; src.templateId where root = '2.16.840.1.113883.2.9.10.1.4.3.11.1' then { 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.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.reasonReference = create ( 'Reference' ) as reference , reference.reference = ( 'https://example/Observation/' + %obs1.id ) then Observation ( observation , patient , encounter , obs1 , bundle ) ; } "entryRelProcedure" ; } "procedureTrattamenti" ; } group Observation ( source cda , 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.id -> ob.identifier ; // cda-> ob.encounter=create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %encounter.id) "reference"; cda.code -> ob.code ; cda -> ob.status = 'final' "Stats" ; cda.value : ST as st -> ob.value = create ( 'string' ) , ob.value = ( st.dataString ) ; // value datatype cda.value : BL as boolean -> ob.value = ( boolean.value ) "boolean" ; cda.value : INT as int -> ob.value = ( int.value ) "intval" ; 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" ; cda.methodCode -> ob.method ; // toASK è giusto siano invertiti? cda.interpretationCode -> ob.interpretation ; cda.targetSiteCode -> ob.bodySite ; cda.referenceRange as refrange then { refrange.observationRange as obsrange then { obsrange.value as val -> ob.referenceRange = create ( 'BackboneElement' ) as refrangeFH then { val -> refrangeFH.low = create ( 'SimpleQuantity' ) as lowfhir then { val.low as l -> lowfhir.value = ( l.value ) "val" ; val.low as l -> lowfhir.unit = ( l.unit ) "val" ; } "de" ; val -> refrangeFH.high = create ( 'SimpleQuantity' ) as highfhir then { val.high as h -> highfhir.value = ( h.value ) "val" ; val.high as h -> highfhir.unit = ( h.unit ) "val" ; } "de" ; } "refFhir" ; } "obsrange" ; } "regrange" ; // added } group ObservationOrganizer ( source section : section, source cda : organizer, 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.id -> ob.identifier ; // cda-> ob.encounter=create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %encounter.id) "reference"; section.code -> ob.code ; cda -> ob.status = 'final' "Stats" ; 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" ; cda.component as component then { component.observation as observation -> bundle.entry as ei , ei.request = create ( 'BackboneElement' ) as request , request.method = 'POST' , ei.resource = create ( 'Observation' ) as obsi , obsi.id = uuid ( ) as uuidi , ei.fullUrl = append ( 'https://example/Observation/' , uuidi ) , request.url = 'Observation' , ob.hasMember = create ( 'Reference' ) as reference , reference.reference = ( 'https://example/Observation/' + %obsi.id ) then Observation ( observation , patient , encounter , obsi , bundle ) "hasMember" ; } ; } group Coverage ( source src : act, target patient : Patient, target encounter : Encounter, target tgt : Coverage, target bundle : Bundle ) { src -> tgt.beneficiary = create ( 'Reference' ) as reference , reference.reference = ( 'https://example/Patient/' + %patient.id ) "reference" ; src -> tgt.payor = create ( 'Reference' ) as reference , reference.reference = ( 'https://example/Patient/' + %patient.id ) "reference" ; src.id as id -> tgt.identifier as idf then { id -> idf.value = ( id.root ) "ID" ; } ; src.code -> tgt.type ; src.statusCode as statusCode then { statusCode.code as s -> tgt.status = translate ( s , '#FinancialStatus' , 'code' ) "status" ; } "sc" ; src where statusCode.exists().not() -> tgt.status = 'active' "statusAbsent" ; src.effectiveTime as effectiveTime where (value.exists()) -> tgt.period = create ( 'dateTime' ) as value then TSDateTime ( effectiveTime , value ) "value1" ; // src.effectiveTime as effectiveTime -> tgt.period as period then{ src.effectiveTime as effectiveTime where (low.exists()) -> tgt.period = create ( 'Period' ) as value then IVLTSPeriod ( effectiveTime , value ) "valuePeriod" ; src.entryRelationship as entryRelationship then { entryRelationship.act as ac -> tgt.class as class then { ac.text as text -> class.type as type then { text.reference as reference -> type.text = ( reference.value ) "value" ; } "ref" ; ac -> class.value = 'commenti' "note" ; } "QUI" ; } "entryr" ; } 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.effectiveTime as effTime then { effTime.low as l -> tgt.recordedDate as r then TSDateTime ( l , r ) "value" ; } "efftime" ; // 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.id -> tgt.identifier ; observation1.templateId where root = '2.16.840.1.113883.2.9.10.1.4.3.1.4' -> tgt.code as code then { observation1 -> code.coding as coding then { observation1 -> coding.code = 'No known allergy' "code" ; } "code" ; src.effectiveTime as effectiveTime where (value.exists()) -> tgt.onset = create ( 'dateTime' ) as value then TSDateTime ( effectiveTime , value ) "value1" ; src.effectiveTime as effectiveTime -> tgt.onset = create ( 'Period' ) as value then IVLTSPeriod ( effectiveTime , value ) "valuePeriod" ; } "Noallergy" ; observation1.effectiveTime as effectiveTime where (value.exists()) -> tgt.onset = create ( 'dateTime' ) as value then TSDateTime ( effectiveTime , value ) "value1" ; 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.value -> tgt.code ; // toASK qui dovrei fare un controllo sul 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.code -> reaction.manifestation "manifestation" ; observation2.text as tx then { tx.reference as reff -> reaction.description = ( reff.value ) "tx" ; } "tx" ; observation2.effectiveTime as effectiveTime then { effectiveTime.low as low -> reaction.onset = create ( 'dateTime' ) as value then TSDateTime ( low , value ) "valuePeriodLow" ; effectiveTime.high as high -> tgt.lastOccurrence = create ( 'dateTime' ) as value then TSDateTime ( high , value ) "valuePeriodHigh" ; } "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.text as tx then { tx.reference as reff -> reaction.description = ( reff.value ) "tx" ; } "tx" ; 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 -> tgt.clinicalStatus as clinicalStatus then { observation4.value as value 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" ; } ; observation4.text as tx then { tx.reference as ref -> clinicalStatus.text = ( ref.value ) ; } "tx" ; } "clinicalStatus" ; } "observ4" ; } "entryR4" ; } ; } "entryrelationship" ; } group MedicationStatement ( source src : substanceAdministration, 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 "status" ; // src -> tgt.context = create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %encounter.id) "reference"; src.id -> tgt.identifier ; src.text as text -> tgt.note as note then { text.reference as reference -> note.text = ( reference.value ) "text" ; } "note" ; src.effectiveTime as eff where (value.exists()) -> tgt.effective = create ( 'dateTime' ) as value then TSDateTime ( eff , value ) "value1" ; src.effectiveTime : IVL_TS as eff -> tgt.effective = create ( 'Period' ) as value then IVLTSPeriod ( eff , value ) "valuePeriod" ; src -> tgt.dosage = create ( 'Dosage' ) as dosage then { src.effectiveTime : PIVL_TS as eff then { eff -> dosage.timing = create ( 'Timing' ) as timing then periodTiming ( eff , timing ) "cod" ; } "eff" ; src where (src.doseQuantity.exists() or src.rateQuantity.exists() or src.routeCode.exists() or src.approachSiteCode.exists()) then { src.doseQuantity as doseQuant then { doseQuant.originalText as ot then { ot.reference -> dosage.text ; } "ot" ; doseQuant -> dosage.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 -> dosage.text ; } "ot" ; rateQuantity -> dosage.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 -> dosage.route "route" ; src.approachSiteCode -> dosage.site "site" ; src.targetSiteCode -> dosage.site "site" ; } "route" ; } "dos" ; src.consumable as consumable then { consumable.manufacturedProduct as manufacturedProduct -> 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" ; } ; } 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 : substanceAdministration, 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 Immunization ( source substance : substanceAdministration, target patient : Patient, target encounter : Encounter, target tgt : Immunization, target bundle : Bundle ) { substance -> tgt.patient = create ( 'Reference' ) as reference , reference.reference = ( 'https://example/Patient/' + %patient.id ) "patientRef" ; substance.id as id -> tgt.identifier as idf then { id.root as r -> idf.system = translate ( r , 'http://hl7.org/fhir/ConceptMap/special-oid2uri' , 'uri' ) "root1" ; } ; // substance -> tgt.encounter = create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %encounter.id) "encounterRef"; substance.text as text -> tgt.note as note then { text.reference as reference -> note.text = ( reference.value ) "text" ; } "note" ; substance.statusCode as statusc where (code = 'completed') -> tgt.status = 'completed' ; substance.statusCode as statusc where (code = 'aborted') -> tgt.status = 'final' ; substance.statusCode as statusc where (code = 'suspended') -> tgt.status = 'enterer-in-error' ; substance.statusCode as statusc where (code = 'cancelled') -> tgt.status = 'not-done' ; substance.effectiveTime as time -> tgt.occurrence = create ( 'dateTime' ) as value then TSDateTime ( time , value ) "efftime" ; substance.routeCode -> tgt.route ; substance.approachSiteCode -> tgt.site ; substance -> tgt.doseQuantity = create ( 'SimpleQuantity' ) as quantity then { substance.doseQuantity as q then { q -> quantity.value = ( q.value ) "val" ; q -> quantity.unit = ( q.unit ) "uni" ; } "qua" ; } "q" ; substance.consumable as cons then { cons.manufacturedProduct as manufact then { manufact.manufacturedMaterial as manufactmat then { manufactmat.code -> tgt.vaccineCode ; manufactmat.lotNumberText as t -> tgt.lotNumber = ( t.dataString ) ; } "manufactmat" ; manufact.manufacturerOrganization as manufactOrg -> bundle.entry as e1 , e1.request = create ( 'BackboneElement' ) as request , request.method = 'PUT' , e1.resource = create ( 'Organization' ) as organization then { manufactOrg.id as id -> organization.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 then { manufactOrg -> request.url = append ( 'Organization?identifier=' , ext ) "UUID" ; } "ext" ; id.assigningAuthorityName as s -> identifier.assigner as a , a.display = s ; id.root as r then { id.extension as ext -> organization.id = ( r + '-' + ext ) as uuid , e1.fullUrl = append ( 'https://example/' , uuid ) , tgt.manufacturer = create ( 'Reference' ) as reference , reference.reference = ( 'https://example/' + %organization.id ) "idasi" ; } "r" ; } "identifier" ; manufactOrg.name as n -> organization.name = ( n.other ) ; manufactOrg -> organization.meta as meta then { manufactOrg -> meta.tag = create ( 'Coding' ) as coding then { manufactOrg -> coding.system = 'http://algoritmodiscoring' "system" ; manufactOrg -> coding.code = 'ClinicalDocument/body/Vaccinazioni/manufacturerOrganization' "code" ; } "coding" ; } "meta" ; } "manufactOrg" ; } "manufact" ; } "cons" ; substance.participant as part -> bundle.entry as e1 , e1.request = create ( 'BackboneElement' ) as request , request.method = 'PUT' , e1.resource = create ( 'Location' ) as location , location.id = uuid ( ) as uuid1 then { part -> location.meta as meta then { part -> meta.tag = create ( 'Coding' ) as coding then { part -> coding.system = 'http://algoritmodiscoring' "system" ; part -> coding.code = 'ClinicalDocument/body/Vaccinazione/participant' "code" ; } "coding" ; } "meta" ; part.participantRole as partRole then { partRole.id as id -> location.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 then { partRole -> request.url = append ( 'Location?identifier=' , ext ) "UUID" ; } "ext" ; id.assigningAuthorityName as s -> identifier.assigner as a , a.display = s ; id.root as r then { id.extension as ext -> location.id = ( r + '-' + ext ) as uuid , e1.fullUrl = append ( 'https://example/Location' , uuid ) , tgt.location = create ( 'Reference' ) as reference , reference.reference = ( 'https://example/' + %location.id ) "idasi" ; } "r" ; } "identifier" ; } "role" ; } "part" ; substance.entryRelationship as entrirel1 then { entrirel1.observation as obs then { obs.code where (code = '30973-2') then { obs -> tgt.protocolApplied = create ( 'BackboneElement' ) as prot then { obs.value as v then { v.value as int -> prot.doseNumber = ( int.toString() ) ; } ; } "val" ; } "codecontrol" ; } "obs" ; } "entrirel1" ; substance.entryRelationship as entrirel2 then { entrirel2.observation as obs then { obs.code where (code = '59781-5') then { obs.value as value then { value.high as h then { h.value as value -> tgt.expirationDate = truncate ( value , 10 ) ; } "val" ; } ; } "codecontrol" ; } "obs" ; } "entrirel2" ; substance.entryRelationship as entrirel4 then { entrirel4.observation as obs then { obs.code where (code = '59785-6') -> bundle.entry as e1 , e1.request = create ( 'BackboneElement' ) as request , request.method = 'POST' , e1.resource = create ( 'Observation' ) as observation , observation.id = uuid ( ) as uuid1 , e1.fullUrl = append ( 'https://example/Observation/' , uuid1 ) , request.url = 'Observation' , tgt.reasonReference = create ( 'Reference' ) as reference , reference.reference = ( 'https://example/Observation/' + %observation.id ) then { obs then Observation1 ( entrirel4 , patient , tgt , bundle , enc , observation ) "observation" ; } "codecontrol" ; } "obs" ; } "entrirel4" ; substance.entryRelationship as entrirel5 then { entrirel5.observation as obs then { obs.code where (code = '75321-0') or (code = '5321-0') -> tgt.reaction as reaction then { obs -> bundle.entry as e1 , e1.request = create ( 'BackboneElement' ) as request , request.method = 'POST' , e1.resource = create ( 'Observation' ) as observation , observation.id = uuid ( ) as uuid1 , e1.fullUrl = append ( 'https://example/Observation/' , uuid1 ) , request.url = 'Observation' , reaction.detail = create ( 'Reference' ) as reference , reference.reference = ( 'https://example/Observation/' + %observation.id ) then Observation ( obs , patient , encounter , observation , bundle ) "observation" ; } "codecontrol" ; } "obs" ; } "entrirel5" ; substance.entryRelationship as entrirel5 then { entrirel5.act as act then { act.text as tx -> tgt.note as note then { tx.reference as reference -> note.text = ( reference.value ) "text" ; } "note" ; } "obs" ; } "entrirel5" ; } group ConditionFunction ( source src : cdaElement, target tgt : Condition, target patient : patient, target encounter : encounter, target bundle : Bundle ) { src.id -> tgt.identifier ; src -> tgt.subject = create ( 'Reference' ) as reference , reference.reference = ( 'https://example/Patient/' + %patient.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 -> tgt.encounter=create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %encounter.id) "reference"; src where entryRelationship.exists().not() then { src.effectiveTime as effectiveTime where (value.exists()) -> tgt.onset = create ( 'dateTime' ) as value then TSDateTime ( effectiveTime , value ) "value1" ; src.effectiveTime as effectiveTime -> tgt.onset = create ( 'Period' ) as value then IVLTSPeriod ( effectiveTime , value ) "valuePeriod" ; } "onset" ; src.entryRelationship as entryRelationship then { entryRelationship.observation as obsentry then { obsentry.value -> tgt.code ; // toASK obsentry.code -> tgt.category ; obsentry.effectiveTime as effectiveTime where (value.exists()) -> tgt.onset = create ( 'dateTime' ) as value then TSDateTime ( effectiveTime , value ) "value1" ; obsentry.effectiveTime as effectiveTime -> tgt.onset = create ( 'Period' ) as value then IVLTSPeriod ( effectiveTime , value ) "valuePeriod" ; obsentry.text as text -> tgt.note as note then { text.reference as reference -> note.text = ( reference.value ) "text" ; } "note" ; obsentry.entryRelationship as entryR2 then { entryR2.observation as obsentry2 then { obsentry2.code where code = '89261-2' then { obsentry2 -> 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 ( obsentry2 , patient , encounter , obsy , bundle ) "observation" ; } "observation" ; obsentry2.code where code = '33999-4' then { obsentry2.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" ; obsentry2.text as text then { text.reference as reference -> clinicalstatus.text = ( reference.value ) "text" ; } ; } "clinicalstatus" ; } "clinicalStatus2" ; obsentry2.code where code = 'SEV' then { obsentry2.value -> tgt.severity ; } "severity" ; } ; entryR2.act as act then { act.text as text -> tgt.note as note then { text.reference as reference -> note.text = ( reference.value ) "text" ; } "note" ; } ; } "entryR" ; } "EntryRelObsevation" ; } "entryR" ; } 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.id -> tgt.identifier ; src.statusCode -> tgt.status ; src.effectiveTime as effectiveTime -> tgt.date = create ( 'date' ) as value then TSDate ( 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" ; administrativeGenderCode.displayName as dn -> coding.display = dn ; } "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.value -> condition.outcome "codeable" ; // observation.effectiveTime as effectiveTime -> condition.onset = create('Period') as value then IVLTSPeriod(effectiveTime, value) "valuePeriod"; 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 Practitioner ( source src : performer, target tgt : Encounter, 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.assignedEntity as assignedEntity -> tgt.participant as participant then { src.time as time where (value.exists()) -> participant.period = create ( 'dateTime' ) as value then TSDateTime ( time , value ) "value1" ; src.time as time where (low.exists()) -> participant.period = create ( 'Period' ) as value then IVLTSPeriod ( time , value ) "valuePeriod" ; assignedEntity.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 ) , participant.individual = create ( 'Reference' ) as reference , reference.reference = ( 'https://example/Practitioner/' + %practitioner1.id ) "id" ; } "r" ; } "identifier" ; // src.time as time -> participant.period as period then{ assignedEntity.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" ; assignedEntity.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" ; assignedEntity -> practitioner1.meta as meta then { src -> meta.tag = create ( 'Coding' ) as coding then { src -> coding.system = 'http://algoritmodiscoring' "system" ; src -> coding.code = 'ClinicalDocument/body/VisiteRicoveri/performer/' "code" ; } "coding" ; } "meta" ; assignedEntity.addr -> practitioner1.address ; assignedEntity.telecom -> practitioner1.telecom ; assignedEntity.assignedPerson as person then { person.name -> practitioner1.name ; person.birthTime -> practitioner1.birthDate ; } "partname" ; } "participant" ; } "resurceCreation" ; } group CarePlanFunction ( source src : entry, target tgt : CarePlan, 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 -> tgt.status = 'unknown' "status" ; src -> tgt.intent = 'plan' "intent" ; src -> tgt.activity as activity then { src -> activity.detail as detail then { src.observation as observation then { observation then { observation -> detail.status = 'unknown' "status" ; observation -> 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' , detail.reasonReference = create ( 'Reference' ) as reference , reference.reference = ( 'https://example/Observation/' + %obs1.id ) then Observation ( observation , patient , encounter , obs1 , bundle ) "obs1" ; } "activity" ; } "entryObs" ; src.substanceAdministration as substanceAdministration -> tgt.activity as activity then { substanceAdministration -> bundle.entry as e2 , e2.request = create ( 'BackboneElement' ) as request , request.method = 'POST' , e2.resource = create ( 'MedicationRequest' ) as medre1 , medre1.id = uuid ( ) as uuid2 , e2.fullUrl = append ( 'https://example/MedicationRequest/' , uuid2 ) , request.url = 'MedicationRequest' , activity.reference = create ( 'Reference' ) as reference , reference.reference = ( 'https://example/MedicationRequest/' + %medre1.id ) then MedicationRequest ( substanceAdministration , patient , encounter , medre1 , bundle ) "Terapie" ; } "entrySub" ; src.procedure as procedureC -> bundle.entry as e8 , e8.request = create ( 'BackboneElement' ) as request , request.method = 'POST' , e8.resource = create ( 'Procedure' ) as procedure , procedure.id = uuid ( ) as uuid8 , e8.fullUrl = append ( 'https://example/Procedure/' , uuid8 ) , request.url = 'Procedure' , activity.outcomeReference = create ( 'Reference' ) as reference , reference.reference = ( 'https://example/Procedure/' + %procedure.id ) then Procedure ( procedureC , patient , encounter , procedure , bundle ) "proc" ; src.encounter as encounterCDA -> bundle.entry as e3 , e3.request = create ( 'BackboneElement' ) as request , request.method = 'POST' , e3.resource = create ( 'Encounter' ) as encounterFHIR , encounterFHIR.id = uuid ( ) as uuid3 , e3.fullUrl = append ( 'https://example/Encounter/' , uuid3 ) , request.url = 'Encounter' , tgt.encounter = create ( 'Reference' ) as reference , reference.reference = ( 'https://example/Encounter/' + %encounterFHIR.id ) then { encounterCDA -> encounterFHIR.subject = create ( 'Reference' ) as reference , reference.reference = ( 'https://example/Patient/' + %patient.id ) "refPatient" ; // encounterCDA -> encounterFHIR.partOf = create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %encounter.id) "encounterHeader"; encounterCDA.id -> encounterFHIR.identifier ; encounterCDA.statusCode -> encounterFHIR.status ; encounterCDA where statusCode.exists().not() -> encounterFHIR.status = 'unknown' "status" ; encounterCDA.code as code -> encounterFHIR.class as class then { code.code as code -> class.code = cast ( code , 'string' ) ; code.codeSystem as system -> class.system = translate ( system , 'http://hl7.org/fhir/ConceptMap/special-oid2uri' , 'uri' ) ; code.displayName as display -> class.display = cast ( display , 'string' ) ; } "class" ; encounterCDA.text as text -> encounterFHIR.type as type then { text.reference as reference -> type.text = ( reference.value ) "value" ; } ; encounterCDA.effectiveTime as effectiveTime -> encounterFHIR.period = create ( 'Period' ) as period then { effectiveTime -> period.start = create ( 'dateTime' ) as start then TSDateTime ( effectiveTime , start ) "val" ; } "efft" ; } "viste" ; src.act as act then { act.id -> tgt.identifier ; act.code -> activity.outcomeCodeableConcept ; act.text as text -> activity.progress = create ( 'Annotation' ) as progress then { text.reference as reference -> progress.text = ( reference.value ) "value" ; } ; act.effectiveTime as effectiveTime -> detail.scheduled = create ( 'Period' ) as period then { effectiveTime -> period.start = create ( 'dateTime' ) as start then TSDateTime ( effectiveTime , start ) "val" ; } "efft" ; act -> detail.status = 'completed' "status" ; } ; } "detail" ; } "activityIni" ; } group MedicationRequest ( source src : substanceAdministration, target patient : Patient, target encounter : Encounter, target tgt : MedicationRequest, target bundle : Bundle ) { src -> tgt.subject = create ( 'Reference' ) as reference , reference.reference = ( 'https://example/Patient/' + %patient.id ) "reference" ; // default + mandatory src -> tgt.intent = 'order' "intent" ; // src -> tgt.encounter = create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %encounter.id) "reference"; 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.id -> tgt.identifier ; 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 -> 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 OrganizationAffiliation ( source src : act, target patient : Patient, target enc : Encounter, target tgt : OrganizationAffiliation, target bundle : Bundle ) { src.id -> tgt.identifier ; src.statusCode where code = 'active' -> tgt.active = true ; // src.code -> tgt.specialty as specialty then{ src.statusCode where (code = 'active').not() -> tgt.active = false ; src.effectiveTime as eff -> tgt.period ; src -> tgt.specialty = create ( 'CodeableConcept' ) as spec then { src.code as code then { code -> spec.coding = create ( 'Coding' ) as cd then { code -> cd.code = ( code.code ) "code" ; code -> cd.display = ( code.displayName ) "code" ; code.codeSystem as r -> cd.system = translate ( r , 'http://hl7.org/fhir/ConceptMap/special-oid2uri' , 'uri' ) "root1" ; } "cd" ; } "spec" ; src.entryRelationship as entry then { entry.act as a then { a.text as tx then { tx.reference as reff -> spec.text = ( reff.value ) ; } "ref" ; } ; } "entry" ; } "a" ; // src.code -> tgt.specialty; } group DiagnosticReportFunction ( source src : organizer, target patient : Patient, target enc : Encounter, target tgt : DiagnosticReport, target bundle : Bundle ) { src -> tgt.subject = create ( 'Reference' ) as reference , reference.reference = ( 'https://example/Patient/' + %patient.id ) "reference" ; src.code -> tgt.code ; // src -> tgt.encounter=create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %enc.id) "reference"; src.statusCode where code = 'completed' -> tgt.status = 'final' ; src.effectiveTime as eff where (value.exists()) -> tgt.effective = create ( 'dateTime' ) as value then TSDateTime ( eff , value ) "value1" ; src.effectiveTime as eff where (low.exists()) -> tgt.effective = create ( 'Period' ) as value then IVLTSPeriod ( effectiveTime , value ) "valuePeriod" ; src.component as component then { component.observation as observation -> bundle.entry as ei , ei.request = create ( 'BackboneElement' ) as request , request.method = 'POST' , ei.resource = create ( 'Observation' ) as obsi , obsi.id = uuid ( ) as uuidi , ei.fullUrl = append ( 'https://example/Observation/' , uuidi ) , request.url = 'Observation' , tgt.result = create ( 'Reference' ) as reference , reference.reference = ( 'https://example/Observation/' + %obsi.id ) then Observation ( observation , patient , enc , obsi , bundle ) "hasMember" ; } ; } group EncounterFunction ( source src : cdaElement, target patient : Patient, target encounter : Encounter, target tgt : Encounter, target bundle : Bundle ) { src.id -> tgt.identifier ; src.statusCode -> tgt.status ; src where statusCode.exists().not() -> tgt.status = 'unknown' "status" ; src.code as code -> tgt.class as class then { code -> class.code = ( code.code ) "code" ; code -> class.display = ( code.displayName ) "display" ; code.codeSystem as r -> class.system = translate ( r , 'http://hl7.org/fhir/ConceptMap/special-oid2uri' , 'uri' ) "root1" ; } "co" ; src where effectiveTime.low.exists() or effectiveTime.high.exists() then { src.effectiveTime as eff -> tgt.period = create ( 'Period' ) as period then IVLTSPeriod ( eff , period ) ; } "where" ; // src.effectiveTime as effective -> tgt.period as period then{ src where effectiveTime.low.exists().not() or effectiveTime.high.exists().not() then { src.effectiveTime as effectivetime1 -> tgt.period = create ( 'Period' ) as period then { effectivetime1 -> period.start = create ( 'dateTime' ) as start then TSDateTime ( effectivetime1 , start ) "val" ; } "efft" ; } "where" ; // effectiveTime = time-stamp src.text as tx -> tgt.type as ty then { tx.reference as reff -> ty.text = ( reff.value ) "textType" ; } ; // src.effectiveTime as eff where (value.exists()) -> tgt.period = create('dateTime') as value then TSDateTime(eff, value) "value1"; src.performer as performer -> tgt.participant as part then { performer -> part.period as period then { performer.time as time -> period.start as start then TSDateTime ( time , start ) "val" ; } "period" ; performer.assignedEntity as assentity -> bundle.entry as e1 , e1.request = create ( 'BackboneElement' ) as request , request.method = 'POST' , e1.resource = create ( 'PractitionerRole' ) as practitionerRole , practitionerRole.id = uuid ( ) as uuid1 , e1.fullUrl = append ( 'https://example/PractitionerRole/' , uuid1 ) , request.url = 'PractitionerRole' , tgt.participant = create ( 'BackboneElement' ) as participant1 , participant1.individual = create ( 'Reference' ) as referencepart , referencepart.reference = ( 'https://example/PractitionerRole/' + %practitionerRole.id ) then { assentity.code -> practitionerRole.code ; assentity -> bundle.entry as e2 , e2.request = create ( 'BackboneElement' ) as request , request.method = 'PUT' , e2.resource = create ( 'Practitioner' ) as practitioner then { assentity -> practitioner.meta as meta then { assentity -> meta.tag = create ( 'Coding' ) as coding then { assentity -> coding.system = 'http://algoritmodiscoring' "system" ; assentity -> coding.code = 'ClinicalDocument/body/encounter/performer' "code" ; } "coding" ; } "meta" ; assentity.id as id -> practitioner.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 then { assentity -> request.url = append ( 'Practitioner?identifier=' , ext ) "UUID" ; } "ext" ; id.assigningAuthorityName as s -> identifier.assigner as a , a.display = s ; id.root as r then { id.extension as ext -> practitioner.id = ( r + '-' + ext ) as uuid2 , e2.fullUrl = append ( 'https://example/Practitioner/' , uuid2 ) , practitionerRole.practitioner = create ( 'Reference' ) as reference , reference.reference = ( 'https://example/Practitioner/' + %practitioner.id ) "performer" ; } "r" ; } "identifier" ; assentity.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" ; assentity.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" ; assentity.addr -> practitioner.address ; assentity.telecom -> practitioner.telecom ; assentity.assignedPerson as person then { person.name -> practitioner.name ; person.birthTime as birthTime then { birthTime.value as date -> practitioner.birthDate = truncate ( date , 10 ) ; } "birth" ; } "name" ; } "assignedEntity" ; } "performer" ; } "01" ; }
Produced 08 Sep 2023