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/cda2fhirLabReport | Version: 0.1.0 | |||
| Draft as of 2025-10-01 | Computable Name: cda2fhirLabReport | |||
map "http://hl7.it/fhir/cda2fhir/StructureMap/cda2fhirLabReport" = "cda2fhirLabReport"
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/Practitioner" alias Practitioner as produced
uses "http://hl7.org/fhir/StructureDefinition/Specimen" alias Specimen as produced
uses "http://hl7.org/fhir/StructureDefinition/Procedure" alias Procedure 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
uses "http://hl7.org/fhir/cda/StructureDefinition/Organizer" alias Organizer as source
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 e6, e6.request = create('BackboneElement') as request, request.method = 'POST', e6.resource = create('DocumentReference') as DocumentReference, DocumentReference.id = uuid() as uuid6, e6.fullUrl = append('https://example/DocumentReference/', uuid6), 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";
} "record";
} "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.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, documentreference);
};
};
} "body";
};
}
group ClinicalDocumentSection(source cda : ClinicalDocument, source src : Section, target patient : Patient, target tgt, target bundle : Bundle, target enc : Encounter, target documentreference : DocumentReference) {
src.title as t -> tgt.title = (t.dataString);
src.code -> tgt.code;
src.text as cdaText -> tgt.text as fhirText then {
cdaText -> fhirText.status = 'generated' "narrativeStatus";
cdaText as t -> fhirText.div = t "narrativeText";
} "cdaText";
src.entry as entry1 -> bundle.entry as e1, e1.request = create('BackboneElement') as request, request.method = 'POST', e1.resource = create('DiagnosticReport') as DiagnosticReport, DiagnosticReport.id = uuid() as uuid1, e1.fullUrl = append('https://example/DiagnosticReport/', uuid1), request.url = 'DiagnosticReport', tgt.entry = create('Reference') as reference, reference.reference = ('https://example/DiagnosticReport/' + %DiagnosticReport.id) then {
entry1.act as act1 then Act(act1, patient, DiagnosticReport, enc, bundle);
};
src.component as component then {
component.section as sec -> tgt.section as tgtSection then ClinicalDocumentSection(cda, sec, patient, tgtSection, bundle, enc, documentreference);
};
}
group Observation(source obs : Observation, target patient : Patient, target encounter : Encounter, target ob : Observation, target bundle : Bundle) {
obs -> ob.subject = create('Reference') as reference, reference.reference = ('https://example/Patient/' + %patient.id) "reference";
obs -> ob.encounter = create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %encounter.id) "reference";
obs.code -> ob.code;
obs.statusCode as statusc where (code = 'completed') -> ob.status = 'final';
obs.statusCode as statusc where (code = 'active') -> ob.status = 'registered';
obs.statusCode as statusc where (code = 'aborted') -> ob.status = 'cancelled';
obs.statusCode as statusc where (code = 'suspended') -> ob.status = 'partial';
obs.effectiveTime as effectiveTime -> ob.effective = create('dateTime') as value then TSDateTime(effectiveTime, value) "value2";
obs where effectiveTime.low.exists() or effectiveTime.high.exists() then {
obs.effectiveTime as eff -> ob.effective = create('Period') as period then IVLTSPeriod(eff, period);
} "where";
obs.interpretationCode -> ob.interpretation;
obs.methodCode -> ob.method;
obs.value : INT as int -> ob.value = (int.value);
obs.value : BL as boolean -> ob.value = (boolean.value) "boolean";
obs.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;
} "originltext";
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');
val.codeSystemVersion as version -> coding.version = cast(version, '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.codeSystemVersion as version -> coding.version = cast(version, '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');
value.codeSystemVersion as version -> coding.version = cast(version, 'string');
};
};
};
} "coding";
} "val";
obs.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;
} "originltext";
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');
val.codeSystemVersion as version -> coding.version = cast(version, '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.codeSystemVersion as version -> coding.version = cast(version, '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');
value.codeSystemVersion as version -> coding.version = cast(version, 'string');
};
};
};
} "coding";
} "val";
obs.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";
obs.value : ST as value -> ob.value = create('string'), ob.value = (value.dataString);
// Note e commenti
obs.entryRelationship as entryRelationship then {
entryRelationship.act as act then {
act.text as text then {
text.reference as reference -> ob.note as note then {
reference -> note.text = (reference.value) "reference";
};
};
} "Act";
};
// subject
obs.subject as sbj then {
sbj.relatedSubject as relatedSubj -> patient.extension as extension2 then ExtSubjectAnimal(relatedSubj, extension2);
};
// performer
obs.performer as performer -> 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' then {
performer -> ob.performer = create('Reference') as reference, reference.reference = ('https://example/PractitionerRole/' + %practitionerRole.id) then {
performer.assignedEntity as entity then {
entity.code -> practitionerRole.code;
entity -> bundle.entry as e2, e2.request = create('BackboneElement') as request, request.method = 'PUT', e2.resource = create('Practitioner') as practitioner then {
entity -> practitioner.meta as meta then {
entity -> meta.tag = create('Coding') as coding then {
entity -> coding.system = 'http://algoritmodiscoring' "system";
entity -> coding.code = 'ClinicalDocument/body/observation/performer' "code";
} "coding";
} "meta";
entity.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 {
entity -> 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";
entity.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";
entity.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";
entity.addr -> practitioner.address;
entity.telecom -> practitioner.telecom;
entity.assignedPerson as person then {
person.name -> practitioner.name;
person.birthTime as birthTime then {
birthTime.value as date -> practitioner.birthDate = truncate(date, 10);
} "birth";
} "name";
// organization
entity.representedOrganization as representedOrganization -> bundle.entry as e3, e3.request = create('BackboneElement') as request, request.method = 'PUT', e3.resource = create('Organization') as organization then {
representedOrganization -> organization.meta as meta then {
representedOrganization -> meta.tag = create('Coding') as coding then {
representedOrganization -> coding.system = 'http://algoritmodiscoring' "system";
representedOrganization -> coding.code = 'ClinicalDocument/body/observation/performer/representedOrganization' "code";
} "coding";
} "meta";
representedOrganization.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 {
representedOrganization -> 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 uuid3, e3.fullUrl = append('https://example/Organization/', uuid3), practitionerRole.organization = create('Reference') as referenceOrg, referenceOrg.reference = append('https://example/Organization/', uuid3) "aut";
} "r";
} "identifier";
representedOrganization.name as v -> organization.name = (v.other);
representedOrganization.telecom -> organization.telecom;
representedOrganization.addr -> organization.address;
representedOrganization.asOrganizationPartOf as OrgPartOf -> bundle.entry as e4, e4.request = create('BackboneElement') as request, e4.resource = create('Organization') as organization1, request.method = 'PUT' then {
OrgPartOf -> organization1.meta as meta then {
OrgPartOf -> meta.tag = create('Coding') as coding then {
OrgPartOf -> coding.system = 'http://algoritmodiscoring' "system";
OrgPartOf -> coding.code = 'ClinicalDocument/body/observation/performer/representedOrganization/asOrganizationPartOf' "code";
} "coding";
} "meta";
OrgPartOf.id as id -> organization1.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 {
OrgPartOf -> 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 -> organization1.id = (r + '-' + ext) as uuid4, e4.fullUrl = append('https://example/Organization/', uuid4), organization.partOf = create('Reference') as reference, reference.reference = ('https://example/Organization/' + %organization1.id) "org";
} "r";
} "identifier";
OrgPartOf.code -> organization1.type;
OrgPartOf.statusCode as status where (value = 'active') -> organization1.active = create('boolean'), organization1.active = 'true';
OrgPartOf.wholeOrganization as wholeOrgan -> bundle.entry as e5, e5.request = create('BackboneElement') as request, request.method = 'PUT', e5.resource = create('Organization') as organization2 then {
wholeOrgan -> organization2.meta as meta then {
wholeOrgan -> meta.tag = create('Coding') as coding then {
wholeOrgan -> coding.system = 'http://algoritmodiscoring' "system";
wholeOrgan -> coding.code = 'ClinicalDocument/body/observation/performer/representedOrganization/wholeOrganization' "code";
} "coding";
} "meta";
wholeOrgan.id as id -> organization2.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 {
wholeOrgan -> 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 -> organization2.id = (r + '-' + ext) as uuid5, e5.fullUrl = append('https://example/Organization/', uuid5), organization1.partOf = create('Reference') as reference, reference.reference = ('https://example/Organization/' + %organization2.id) "org";
} "r";
} "identifier";
wholeOrgan.name as v -> organization2.name = (v.other);
wholeOrgan.telecom -> organization2.telecom;
wholeOrgan.addr -> organization2.address;
};
} "OrgPartOf";
};
} "practitioner";
} "entity";
} "practitionerRole";
};
// author
obs.author as srcAuthor -> bundle.entry as e6, e6.request = create('BackboneElement') as request, request.method = 'POST', e6.resource = create('PractitionerRole') as practitionerRole, practitionerRole.id = uuid() as uuid6, e6.fullUrl = append('https://example/PractitionerRole/', uuid6), request.url = 'PractitionerRole', ob.performer = create('Reference') as referenceaut, referenceaut.reference = ('https://example/PractitionerRole/' + %practitionerRole.id) then {
srcAuthor.assignedAuthor as assignedAuthor then {
assignedAuthor.code as codice -> practitionerRole.code as code2 then CECodeableConcept(codice, code2);
assignedAuthor -> bundle.entry as e7, e7.request = create('BackboneElement') as request, request.method = 'PUT', e7.resource = create('Practitioner') as practitioner, practitioner.id = uuid() as uuid7 then {
srcAuthor.functionCode -> practitionerRole.code;
assignedAuthor -> practitioner.meta as meta then {
assignedAuthor -> meta.tag = create('Coding') as coding then {
assignedAuthor -> coding.system = 'http://algoritmodiscoring' "system";
assignedAuthor -> coding.code = 'ClinicalDocument/body/observation/author' "code";
} "coding";
} "meta";
assignedAuthor.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 {
assignedAuthor -> 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, e7.fullUrl = append('https://example/Practitioner/', uuid2), practitionerRole.practitioner = create('Reference') as reference, reference.reference = ('https://example/Practitioner/' + %practitioner.id) "aut";
} "r";
assignedAuthor.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";
assignedAuthor.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";
} "identifier";
assignedAuthor.addr -> practitioner.address;
assignedAuthor.telecom -> practitioner.telecom;
// person
assignedAuthor.assignedPerson as person then {
person.name -> practitioner.name;
person.birthTime as birthTime then {
birthTime.value as date -> practitioner.birthDate = truncate(date, 10);
} "birth";
} "name";
} "ASSAUth";
// organization
assignedAuthor.representedOrganization as representedOrganization -> bundle.entry as e8, e8.request = create('BackboneElement') as request, request.method = 'PUT', e8.resource = create('Organization') as organization then {
representedOrganization -> organization.meta as meta then {
representedOrganization -> meta.tag = create('Coding') as coding then {
representedOrganization -> coding.system = 'http://algoritmodiscoring' "system";
representedOrganization -> coding.code = 'ClinicalDocument/body/observation/author/representedOrganization' "code";
} "coding";
} "meta";
representedOrganization.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 {
representedOrganization -> 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 uuid3, e8.fullUrl = append('https://example/Organization/', uuid3), practitionerRole.organization = create('Reference') as referenceOrg, referenceOrg.reference = append('https://example/Organization/', uuid3) "org";
} "r";
} "identifier";
representedOrganization.name as v -> organization.name = (v.other);
representedOrganization.telecom -> organization.telecom;
representedOrganization.addr -> organization.address;
representedOrganization.asOrganizationPartOf as OrgPartOf -> bundle.entry as e9, e9.request = create('BackboneElement') as request, request.method = 'PUT', e9.resource = create('Organization') as organization1 then {
OrgPartOf -> organization1.meta as meta then {
OrgPartOf -> meta.tag = create('Coding') as coding then {
OrgPartOf -> coding.system = 'http://algoritmodiscoring' "system";
OrgPartOf -> coding.code = 'ClinicalDocument/body/observation/author/representedOrganization/asOrganizationPartOf' "code";
} "coding";
} "meta";
OrgPartOf.id as id -> organization1.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 {
OrgPartOf -> 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 -> organization1.id = (r + '-' + ext) as uuid4, e9.fullUrl = append('https://example/Organization/', uuid4), organization.partOf = create('Reference') as reference, reference.reference = ('https://example/Organization/' + %organization1.id) "org";
} "r";
} "identifier";
OrgPartOf.code -> organization1.type;
OrgPartOf.statusCode as status where (value = 'active') -> organization1.active = create('boolean'), organization1.active = 'true';
OrgPartOf.wholeOrganization as wholeOrgan -> bundle.entry as e10, e10.request = create('BackboneElement') as request, request.method = 'PUT', e10.resource = create('Organization') as organization2 then {
wholeOrgan -> organization2.meta as meta then {
wholeOrgan -> meta.tag = create('Coding') as coding then {
wholeOrgan -> coding.system = 'http://algoritmodiscoring' "system";
wholeOrgan -> coding.code = 'ClinicalDocument/body/observation/author/representedOrganization/asOrganizationPartOf/wholeOrganization' "code";
} "coding";
} "meta";
wholeOrgan.id as id -> organization2.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 {
wholeOrgan -> 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 -> organization2.id = (r + '-' + ext) as uuid4, e10.fullUrl = append('https://example/Organization/', uuid4), organization1.partOf = create('Reference') as reference, reference.reference = ('https://example/Organization/' + %organization2.id) "org";
} "r";
} "identifier";
wholeOrgan.name as v -> organization2.name = (v.other);
wholeOrgan.telecom -> organization2.telecom;
wholeOrgan.addr -> organization2.address;
};
} "OrgPartOf";
};
// device
assignedAuthor.assignedAuthoringDevice as assignedAuthoringDevice -> bundle.entry as e11, e11.request = create('BackboneElement') as request, request.method = 'POST', e11.resource = create('Device') as device, device.id = uuid() as uuid11, e11.fullUrl = append('https://example/Device/', uuid11), request.url = 'Device', tgt.author = create('Reference') as reference, reference.reference = ('https://example/Device/' + %device.id) then {
assignedAuthoringDevice.templateId -> device.identifier;
assignedAuthoringDevice.code -> device.type;
assignedAuthoringDevice.manufacturerModelName as manufacturerModelName then {
manufacturerModelName as m -> device.manufacturer = (m.displayName) "displayRule";
} "manufacturer";
assignedAuthoringDevice.softwareName as softwareName -> device.deviceName as deviceName then {
softwareName -> deviceName.type = 'other' "typeName";
softwareName as s -> deviceName.name = (s.displayName) "name";
} "deviceName";
} "Device";
};
};
// participant person
obs.participant as participant where (typeCode != 'DEV') -> ob.encounter = create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %encounter.id) then {
participant -> encounter.participant as FhirParticipant then {
participant as p -> FhirParticipant.type as type then {
p -> type.coding as coding then {
p -> coding.code = (p.typeCode) "codice";
p -> coding.system = 'http://terminology.hl7.org/CodeSystem/v3-ParticipationType' "system";
} "codeType";
} "type";
} "fhirParticipant";
participant.participantRole as participantRole -> bundle.entry as e12, e12.request = create('BackboneElement') as request, request.method = 'POST', e12.resource = create('PractitionerRole') as practitionerRole, practitionerRole.id = uuid() as uuid12, e12.fullUrl = append('https://example/PractitionerRole/', uuid12), request.url = 'PractitionerRole', encounter.participant = create('BackboneElement') as participant1, participant1.individual = create('Reference') as referencepart, referencepart.reference = ('https://example/Practitioner/' + %practitionerRole.id) then {
// participant.time -> participant1.period;
participant.time as time1 -> participant1.period = create('Period') as period then {
time1 -> period.start = create('dateTime') as start then TSDateTime(time1, start) "val";
};
participant.time as time1 -> participant1.period = create('Period') as period then IVLTSPeriod(time1, period);
participant.functionCode -> practitionerRole.code;
// non mappa i 2 precedenti
participantRole -> bundle.entry as e13, e13.request = create('BackboneElement') as request, request.method = 'PUT', e13.resource = create('Practitioner') as practitioner then {
participantRole -> practitioner.meta as meta then {
participantRole -> meta.tag = create('Coding') as coding then {
participantRole -> coding.system = 'http://algoritmodiscoring' "system";
participantRole -> coding.code = 'ClinicalDocument/body/observation/participant' "code";
} "coding";
} "meta";
participantRole.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 {
participantRole -> 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 uuid4, e13.fullUrl = append('https://example/Practitioner/', uuid4), practitionerRole.practitioner = create('Reference') as reference, reference.reference = ('https://example/Practitioner/' + %practitioner.id) "org";
} "r";
} "identifier";
participantRole.code -> practitionerRole.code;
participantRole.addr -> practitioner.address;
participantRole.telecom -> practitioner.telecom;
participantRole.playingEntity as playingEntity then {
playingEntity.name -> practitioner.name;
playingEntity.birthTime as birthTime then {
birthTime.value as date -> practitioner.birthDate = truncate(date, 10);
} "birth";
} "name";
} "practitioner";
} "partRole";
} "participantEncounter";
// participant device
obs.participant as devParticipant where (typeCode = 'DEV') -> bundle.entry as e14, e14.request = create('BackboneElement') as request, request.method = 'POST', e14.resource = create('Device') as device, device.id = uuid() as uuid14, e14.fullUrl = append('https://example/Device/', uuid14), request.url = 'Device', ob.device = create('Reference') as reference, reference.reference = ('https://example/Device/' + %device.id) then {
devParticipant.participantRole as participantRoleDev then {
participantRoleDev.playingDevice as playingDevice then {
playingDevice.code -> device.type;
playingDevice.manufacturerModelName as manufacturerModelName then {
manufacturerModelName as m -> device.manufacturer = (m.displayName) "displayRule";
} "manufacturer";
playingDevice.softwareName as softwareName -> device.deviceName as deviceName then {
softwareName -> deviceName.type = 'other' "typeName";
softwareName as s -> deviceName.name = (s.displayName) "name";
} "deviceName";
};
} "participantRoleDev";
} "devParticipant";
// observationMedia
obs.entryRelationship as er then {
er.observationMedia as obsMedia -> bundle.entry as e15, e15.request = create('BackboneElement') as request, request.method = 'POST', e15.resource = create('Media') as media1, media1.id = uuid() as uuid15, e15.fullUrl = append('https://example/Media/', uuid15), request.url = 'Media', ob.derivedFrom = create('Reference') as reference, reference.reference = ('https://example/Media/' + %media1.id) then {
obsMedia -> media1.content = create('Attachment') as Attachment then {
obsMedia -> media1.status = 'unknown' "status";
obsMedia.value as valueMedia then {
valueMedia.mediaType as type -> Attachment.contentType = type "type";
valueMedia -> Attachment.data = (valueMedia.dataBase64Binary) "data";
} "valuemedia";
} "Attachment";
} "media";
} "observationMedia";
// referenceRange
obs.referenceRange as refRange -> ob.referenceRange = create('BackboneElement') as ref then {
refRange.observationRange as obsRange then {
obsRange.value : ST as value -> ref.text = create('string'), ref.text = (value.dataString);
obsRange -> ref.low = create('Quantity') as Low then {
obsRange.value : IVL_PQ as v then {
v.low as l1 then {
l1.value as decValue -> Low.value = decValue;
l1.unit as Unit -> Low.unit = Unit;
} "decValue";
v -> ref.high = create('Quantity') as high then {
v.high as h1 then {
h1.value as decValue1 -> high.value = decValue1;
h1.unit as Unit1 -> high.unit = Unit1;
} "decValue";
} "high";
} "IVL-PQ";
obsRange.interpretationCode -> ref.type;
obsRange.precondition as precondition then {
precondition.criterion as criterion then {
criterion.code -> ref.appliesTo "appliesTo";
criterion.value : IVL_PQ as v then {
v.high as l1 then {
l1 -> ref.age = create('Quantity') as age then {
l1 -> age.high as high then {
l1.value as decValue -> high.value = decValue;
l1.unit as Unit1 -> high.unit = Unit1;
} "high";
} "age";
} "low";
} "v";
};
};
} "obsRange";
} "refRange";
} "ref";
}
group Observation2(source obs : Observation, target patient : Patient, target encounter : Encounter, target ob : Observation, target bundle : Bundle, source cda : Act, target specimenp : Specimen) {
obs -> ob.subject = create('Reference') as reference, reference.reference = ('https://example/Patient/' + %patient.id) "reference";
obs -> ob.encounter = create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %encounter.id) "reference";
obs.code -> ob.code;
obs.statusCode as statusc where (code = 'completed') -> ob.status = 'final';
obs.statusCode as statusc where (code = 'active') -> ob.status = 'registered';
obs.statusCode as statusc where (code = 'aborted') -> ob.status = 'cancelled';
obs.statusCode as statusc where (code = 'suspended') -> ob.status = 'partial';
obs.effectiveTime as effectiveTime -> ob.effective = create('dateTime') as value then TSDateTime(effectiveTime, value) "value2";
obs where effectiveTime.low.exists() or effectiveTime.high.exists() then {
obs.effectiveTime as eff -> ob.effective = create('Period') as period then IVLTSPeriod(eff, period);
} "where";
obs.interpretationCode -> ob.interpretation;
obs.methodCode -> ob.method;
obs.value : INT as int -> ob.value = (int.value);
obs.value : BL as boolean -> ob.value = (boolean.value) "boolean";
obs.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;
} "originltext";
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');
val.codeSystemVersion as version -> coding.version = cast(version, '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.codeSystemVersion as version -> coding.version = cast(version, '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');
value.codeSystemVersion as version -> coding.version = cast(version, 'string');
};
};
};
} "coding";
} "val";
obs.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";
obs.value : ST as value -> ob.value = create('string'), ob.value = (value.dataString);
// Note e commenti
obs.entryRelationship as entryRelationship then {
entryRelationship.act as act then {
act.text as text then {
text.reference as reference -> ob.note as note then {
reference -> note.text = (reference.value) "reference";
};
};
} "Act";
};
// subject
obs.subject as sbj then {
sbj.relatedSubject as relatedSubj -> patient.extension as extension2 then ExtSubjectAnimal(relatedSubj, extension2);
};
cda where cda.entryRelationship.act.exists() then {
// specimen
obs.specimen as spmn then {
spmn.specimenRole as specimenRole then {
specimenRole.id as id then {
id.extension as extobs then {
cda.entryRelationship as entryRelationship then {
entryRelationship.act as a then {
a.specimen as sp then {
sp.specimenRole as spr then {
spr.id where (extension = extobs) -> bundle.entry as e4o, e4o.request = create('BackboneElement') as request, request.method = 'POST', e4o.resource = create('Specimen') as specimen, specimen.id = uuid() as uuid4o, e4o.fullUrl = append('https://example/Specimen/', uuid4o), request.url = 'Specimen', ob.specimen = create('Reference') as reference, reference.reference = ('https://example/Specimen/' + %specimen.id) then {
spr -> specimen.parent = create('Reference') as reference, reference.reference = ('https://example/Specimen/' + %specimenp.id) "reference";
spr.id -> specimen.identifier;
specimenRole.specimenPlayingEntity as spent then {
spent.code -> specimen.type;
} "ent";
spr.specimenPlayingEntity as specimenPlayingEntity then {
specimenPlayingEntity.code -> specimen.type;
};
a -> specimen.collection = create('BackboneElement') as collection then {
a.effectiveTime as effectivetime -> collection.collected = create('dateTime') as value then TSDateTime(effectivetime, value) "value";
a where effectiveTime.low.exists() or effectiveTime.high.exists() then {
a.effectiveTime as eff -> collection.collected = create('Period') as period then IVLTSPeriod(eff, period);
} "where";
a.participant as participant -> bundle.entry as e10, e10.request = create('BackboneElement') as request, request.method = 'PUT', e10.resource = create('Practitioner') as practitioner, practitioner.id = uuid() as uuid11, e10.fullUrl = append('https://example/Practitioner/', uuid11), collection.collector = create('Reference') as reference, reference.reference = ('https://example/Practitioner/' + %practitioner.id) then {
participant.participantRole as participantRole then {
participantRole -> practitioner.meta as meta then {
participantRole -> meta.tag = create('Coding') as coding then {
participantRole -> coding.system = 'http://algoritmodiscoring' "system";
participantRole -> coding.code = 'ClinicalDocument/body/act/participant' "code";
} "coding";
} "meta";
participantRole.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 {
participantRole -> request.url = append('Practitioner?identifier=', ext) "UUID";
} "ext";
id.assigningAuthorityName as s -> identifier.assigner as a, a.display = s;
} "identifier";
participantRole.addr -> practitioner.address;
participantRole.playingEntity as playingEntity then {
playingEntity.name -> practitioner.name;
};
};
};
} "collection";
} "cont";
} "spr";
} "sp";
} "a";
} "en";
} "extobs";
};
};
};
} "conditionactexists";
cda where cda.entryRelationship.act.exists().not() and (obs.specimen.specimenRole.specimenPlayingEntity.code.code != specimenp.type.coding.code) then {
obs.specimen as spmn -> bundle.entry as e4o, e4o.request = create('BackboneElement') as request, request.method = 'POST', e4o.resource = create('Specimen') as specimen, specimen.id = uuid() as uuid4o, e4o.fullUrl = append('https://example/Specimen/', uuid4o), request.url = 'Specimen', ob.specimen = create('Reference') as reference, reference.reference = ('https://example/Specimen/' + %specimen.id) then {
spmn.specimenRole as specimenRole then {
specimenRole.id -> specimen.identifier;
specimenRole.specimenPlayingEntity as specimenPlayingEntity then {
specimenPlayingEntity.code -> specimen.type;
};
};
};
} "wherenotexists";
// performer
obs.performer as performer -> 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' then {
performer -> ob.performer = create('Reference') as reference, reference.reference = ('https://example/PractitionerRole/' + %practitionerRole.id) then {
performer.assignedEntity as entity then {
entity.code -> practitionerRole.code;
entity -> bundle.entry as e2, e2.request = create('BackboneElement') as request, request.method = 'PUT', e2.resource = create('Practitioner') as practitioner then {
entity -> practitioner.meta as meta then {
entity -> meta.tag = create('Coding') as coding then {
entity -> coding.system = 'http://algoritmodiscoring' "system";
entity -> coding.code = 'ClinicalDocument/body/observation/performer' "code";
} "coding";
} "meta";
entity.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 {
entity -> 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";
entity.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";
entity.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";
entity.addr -> practitioner.address;
entity.telecom -> practitioner.telecom;
entity.assignedPerson as person then {
person.name -> practitioner.name;
person.birthTime as birthTime then {
birthTime.value as date -> practitioner.birthDate = truncate(date, 10);
} "birth";
} "name";
// organization
entity.representedOrganization as representedOrganization -> bundle.entry as e3, e3.request = create('BackboneElement') as request, request.method = 'PUT', e3.resource = create('Organization') as organization then {
representedOrganization -> organization.meta as meta then {
representedOrganization -> meta.tag = create('Coding') as coding then {
representedOrganization -> coding.system = 'http://algoritmodiscoring' "system";
representedOrganization -> coding.code = 'ClinicalDocument/body/observation/performer/representedOrganization' "code";
} "coding";
} "meta";
representedOrganization.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 {
representedOrganization -> 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 uuid3, e3.fullUrl = append('https://example/Organization/', uuid3), practitionerRole.organization = create('Reference') as referenceOrg, referenceOrg.reference = append('https://example/Organization/', uuid3) "aut";
} "r";
} "identifier";
representedOrganization.name as v -> organization.name = (v.other);
representedOrganization.telecom -> organization.telecom;
representedOrganization.addr -> organization.address;
representedOrganization.asOrganizationPartOf as OrgPartOf -> bundle.entry as e4, e4.request = create('BackboneElement') as request, e4.resource = create('Organization') as organization1, request.method = 'PUT' then {
OrgPartOf -> organization1.meta as meta then {
OrgPartOf -> meta.tag = create('Coding') as coding then {
OrgPartOf -> coding.system = 'http://algoritmodiscoring' "system";
OrgPartOf -> coding.code = 'ClinicalDocument/body/observation/performer/representedOrganization/asOrganizationPartOf' "code";
} "coding";
} "meta";
OrgPartOf.id as id -> organization1.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 {
OrgPartOf -> 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 -> organization1.id = (r + '-' + ext) as uuid4, e4.fullUrl = append('https://example/Organization/', uuid4), organization.partOf = create('Reference') as reference, reference.reference = ('https://example/Organization/' + %organization1.id) "org";
} "r";
} "identifier";
OrgPartOf.code -> organization1.type;
OrgPartOf.statusCode as status where (value = 'active') -> organization1.active = create('boolean'), organization1.active = 'true';
OrgPartOf.wholeOrganization as wholeOrgan -> bundle.entry as e5, e5.request = create('BackboneElement') as request, request.method = 'PUT', e5.resource = create('Organization') as organization2 then {
wholeOrgan -> organization2.meta as meta then {
wholeOrgan -> meta.tag = create('Coding') as coding then {
wholeOrgan -> coding.system = 'http://algoritmodiscoring' "system";
wholeOrgan -> coding.code = 'ClinicalDocument/body/observation/performer/representedOrganization/wholeOrganization' "code";
} "coding";
} "meta";
wholeOrgan.id as id -> organization2.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 {
wholeOrgan -> 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 -> organization2.id = (r + '-' + ext) as uuid5, e5.fullUrl = append('https://example/Organization/', uuid5), organization1.partOf = create('Reference') as reference, reference.reference = ('https://example/Organization/' + %organization2.id) "org";
} "r";
} "identifier";
wholeOrgan.name as v -> organization2.name = (v.other);
wholeOrgan.telecom -> organization2.telecom;
wholeOrgan.addr -> organization2.address;
};
} "OrgPartOf";
};
} "practitioner";
} "entity";
} "practitionerRole";
};
// author
obs.author as srcAuthor -> bundle.entry as e6, e6.request = create('BackboneElement') as request, request.method = 'POST', e6.resource = create('PractitionerRole') as practitionerRole, practitionerRole.id = uuid() as uuid6, e6.fullUrl = append('https://example/PractitionerRole/', uuid6), request.url = 'PractitionerRole', ob.performer = create('Reference') as referenceaut, referenceaut.reference = ('https://example/PractitionerRole/' + %practitionerRole.id) then {
srcAuthor.assignedAuthor as assignedAuthor then {
assignedAuthor.code as codice -> practitionerRole.code as code2 then CECodeableConcept(codice, code2);
assignedAuthor -> bundle.entry as e7, e7.request = create('BackboneElement') as request, request.method = 'PUT', e7.resource = create('Practitioner') as practitioner, practitioner.id = uuid() as uuid7 then {
srcAuthor.functionCode -> practitionerRole.code;
assignedAuthor -> practitioner.meta as meta then {
assignedAuthor -> meta.tag = create('Coding') as coding then {
assignedAuthor -> coding.system = 'http://algoritmodiscoring' "system";
assignedAuthor -> coding.code = 'ClinicalDocument/body/observation/author' "code";
} "coding";
} "meta";
assignedAuthor.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 {
assignedAuthor -> 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, e7.fullUrl = append('https://example/Practitioner/', uuid2), practitionerRole.practitioner = create('Reference') as reference, reference.reference = ('https://example/Practitioner/' + %practitioner.id) "aut";
} "r";
assignedAuthor.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";
assignedAuthor.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";
} "identifier";
assignedAuthor.addr -> practitioner.address;
assignedAuthor.telecom -> practitioner.telecom;
// person
assignedAuthor.assignedPerson as person then {
person.name -> practitioner.name;
person.birthTime as birthTime then {
birthTime.value as date -> practitioner.birthDate = truncate(date, 10);
} "birth";
} "name";
} "ASSAUth";
// organization
assignedAuthor.representedOrganization as representedOrganization -> bundle.entry as e8, e8.request = create('BackboneElement') as request, request.method = 'PUT', e8.resource = create('Organization') as organization then {
representedOrganization -> organization.meta as meta then {
representedOrganization -> meta.tag = create('Coding') as coding then {
representedOrganization -> coding.system = 'http://algoritmodiscoring' "system";
representedOrganization -> coding.code = 'ClinicalDocument/body/observation/author/representedOrganization' "code";
} "coding";
} "meta";
representedOrganization.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 {
representedOrganization -> 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 uuid3, e8.fullUrl = append('https://example/Organization/', uuid3), practitionerRole.organization = create('Reference') as referenceOrg, referenceOrg.reference = append('https://example/Organization/', uuid3) "org";
} "r";
} "identifier";
representedOrganization.name as v -> organization.name = (v.other);
representedOrganization.telecom -> organization.telecom;
representedOrganization.addr -> organization.address;
representedOrganization.asOrganizationPartOf as OrgPartOf -> bundle.entry as e9, e9.request = create('BackboneElement') as request, request.method = 'PUT', e9.resource = create('Organization') as organization1 then {
OrgPartOf -> organization1.meta as meta then {
OrgPartOf -> meta.tag = create('Coding') as coding then {
OrgPartOf -> coding.system = 'http://algoritmodiscoring' "system";
OrgPartOf -> coding.code = 'ClinicalDocument/body/observation/author/representedOrganization/asOrganizationPartOf' "code";
} "coding";
} "meta";
OrgPartOf.id as id -> organization1.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 {
OrgPartOf -> 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 -> organization1.id = (r + '-' + ext) as uuid4, e9.fullUrl = append('https://example/Organization/', uuid4), organization.partOf = create('Reference') as reference, reference.reference = ('https://example/Organization/' + %organization1.id) "org";
} "r";
} "identifier";
OrgPartOf.code -> organization1.type;
OrgPartOf.statusCode as status where (value = 'active') -> organization1.active = create('boolean'), organization1.active = 'true';
OrgPartOf.wholeOrganization as wholeOrgan -> bundle.entry as e10, e10.request = create('BackboneElement') as request, request.method = 'PUT', e10.resource = create('Organization') as organization2 then {
wholeOrgan -> organization2.meta as meta then {
wholeOrgan -> meta.tag = create('Coding') as coding then {
wholeOrgan -> coding.system = 'http://algoritmodiscoring' "system";
wholeOrgan -> coding.code = 'ClinicalDocument/body/observation/author/representedOrganization/asOrganizationPartOf/wholeOrganization' "code";
} "coding";
} "meta";
wholeOrgan.id as id -> organization2.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 {
wholeOrgan -> 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 -> organization2.id = (r + '-' + ext) as uuid4, e10.fullUrl = append('https://example/Organization/', uuid4), organization1.partOf = create('Reference') as reference, reference.reference = ('https://example/Organization/' + %organization2.id) "org";
} "r";
} "identifier";
wholeOrgan.name as v -> organization2.name = (v.other);
wholeOrgan.telecom -> organization2.telecom;
wholeOrgan.addr -> organization2.address;
};
} "OrgPartOf";
};
// device
assignedAuthor.assignedAuthoringDevice as assignedAuthoringDevice -> bundle.entry as e11, e11.request = create('BackboneElement') as request, request.method = 'POST', e11.resource = create('Device') as device, device.id = uuid() as uuid11, e11.fullUrl = append('https://example/Device/', uuid11), request.url = 'Device', tgt.author = create('Reference') as reference, reference.reference = ('https://example/Device/' + %device.id) then {
assignedAuthoringDevice.templateId -> device.identifier;
assignedAuthoringDevice.code -> device.type;
assignedAuthoringDevice.manufacturerModelName as manufacturerModelName then {
manufacturerModelName as m -> device.manufacturer = (m.displayName) "displayRule";
} "manufacturer";
assignedAuthoringDevice.softwareName as softwareName -> device.deviceName as deviceName then {
softwareName -> deviceName.type = 'other' "typeName";
softwareName as s -> deviceName.name = (s.displayName) "name";
} "deviceName";
} "Device";
};
};
// participant person
obs.participant as participant where (typeCode != 'DEV') -> ob.encounter = create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %encounter.id) then {
participant -> encounter.participant as FhirParticipant then {
participant as p -> FhirParticipant.type as type then {
p -> type.coding as coding then {
p -> coding.code = (p.typeCode) "codice";
p -> coding.system = 'http://terminology.hl7.org/CodeSystem/v3-ParticipationType' "system";
} "codeType";
} "type";
} "fhirParticipant";
participant.participantRole as participantRole -> bundle.entry as e12, e12.request = create('BackboneElement') as request, request.method = 'POST', e12.resource = create('PractitionerRole') as practitionerRole, practitionerRole.id = uuid() as uuid12, e12.fullUrl = append('https://example/PractitionerRole/', uuid12), request.url = 'PractitionerRole', encounter.participant = create('BackboneElement') as participant1, participant1.individual = create('Reference') as referencepart, referencepart.reference = ('https://example/Practitioner/' + %practitionerRole.id) then {
// participant.time -> participant1.period;
participant.time as time1 -> participant1.period = create('Period') as period then {
time1 -> period.start = create('dateTime') as start then TSDateTime(time1, start) "val";
};
participant.time as time1 -> participant1.period = create('Period') as period then IVLTSPeriod(time1, period);
participant.functionCode -> practitionerRole.code;
// non mappa i 2 precedenti
participantRole -> bundle.entry as e13, e13.request = create('BackboneElement') as request, request.method = 'PUT', e13.resource = create('Practitioner') as practitioner then {
participantRole -> practitioner.meta as meta then {
participantRole -> meta.tag = create('Coding') as coding then {
participantRole -> coding.system = 'http://algoritmodiscoring' "system";
participantRole -> coding.code = 'ClinicalDocument/body/observation/participant' "code";
} "coding";
} "meta";
participantRole.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 {
participantRole -> 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 uuid4, e13.fullUrl = append('https://example/Practitioner/', uuid4), practitionerRole.practitioner = create('Reference') as reference, reference.reference = ('https://example/Practitioner/' + %practitioner.id) "org";
} "r";
} "identifier";
participantRole.code -> practitionerRole.code;
participantRole.addr -> practitioner.address;
participantRole.telecom -> practitioner.telecom;
participantRole.playingEntity as playingEntity then {
playingEntity.name -> practitioner.name;
playingEntity.birthTime as birthTime then {
birthTime.value as date -> practitioner.birthDate = truncate(date, 10);
} "birth";
} "name";
} "practitioner";
} "partRole";
} "participantEncounter";
// participant device
obs.participant as devParticipant where (typeCode = 'DEV') -> bundle.entry as e14, e14.request = create('BackboneElement') as request, request.method = 'POST', e14.resource = create('Device') as device, device.id = uuid() as uuid14, e14.fullUrl = append('https://example/Device/', uuid14), request.url = 'Device', ob.device = create('Reference') as reference, reference.reference = ('https://example/Device/' + %device.id) then {
devParticipant.participantRole as participantRoleDev then {
participantRoleDev.playingDevice as playingDevice then {
playingDevice.code -> device.type;
playingDevice.manufacturerModelName as manufacturerModelName then {
manufacturerModelName as m -> device.manufacturer = (m.displayName) "displayRule";
} "manufacturer";
playingDevice.softwareName as softwareName -> device.deviceName as deviceName then {
softwareName -> deviceName.type = 'other' "typeName";
softwareName as s -> deviceName.name = (s.displayName) "name";
} "deviceName";
};
} "participantRoleDev";
} "devParticipant";
// observationMedia
obs.entryRelationship as er then {
er.observationMedia as obsMedia -> bundle.entry as e15, e15.request = create('BackboneElement') as request, request.method = 'POST', e15.resource = create('Media') as media1, media1.id = uuid() as uuid15, e15.fullUrl = append('https://example/Media/', uuid15), request.url = 'Media', ob.derivedFrom = create('Reference') as reference, reference.reference = ('https://example/Media/' + %media1.id) then {
obsMedia -> media1.content = create('Attachment') as Attachment then {
obsMedia -> media1.status = 'unknown' "status";
obsMedia.value as valueMedia then {
valueMedia.mediaType as type -> Attachment.contentType = type "type";
valueMedia -> Attachment.data = (valueMedia.dataBase64Binary) "data";
} "valuemedia";
} "Attachment";
} "media";
} "observationMedia";
// referenceRange
obs.referenceRange as refRange -> ob.referenceRange = create('BackboneElement') as ref then {
refRange.observationRange as obsRange then {
obsRange.value : ST as value -> ref.text = create('string'), ref.text = (value.dataString);
obsRange -> ref.low = create('Quantity') as Low then {
obsRange.value : IVL_PQ as v then {
v.low as l1 then {
l1.value as decValue -> Low.value = decValue;
l1.unit as Unit -> Low.unit = Unit;
} "decValue";
v -> ref.high = create('Quantity') as high then {
v.high as h1 then {
h1.value as decValue1 -> high.value = decValue1;
h1.unit as Unit1 -> high.unit = Unit1;
} "decValue";
} "high";
} "IVL-PQ";
obsRange.interpretationCode -> ref.type;
obsRange.precondition as precondition then {
precondition.criterion as criterion then {
criterion.code -> ref.appliesTo "appliesTo";
criterion.value : IVL_PQ as v then {
v.high as l1 then {
l1 -> ref.age = create('Quantity') as age then {
l1 -> age.high as high then {
l1.value as decValue -> high.value = decValue;
l1.unit as Unit1 -> high.unit = Unit1;
} "high";
} "age";
} "low";
} "v";
};
};
} "obsRange";
} "refRange";
} "ref";
}
group Observation3(source obs : Observation, target patient : Patient, target encounter : Encounter, target ob : Observation, target bundle : Bundle, source cda : Act) {
obs -> ob.subject = create('Reference') as reference, reference.reference = ('https://example/Patient/' + %patient.id) "reference";
obs -> ob.encounter = create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %encounter.id) "reference";
obs.code -> ob.code;
obs.statusCode as statusc where (code = 'completed') -> ob.status = 'final';
obs.statusCode as statusc where (code = 'active') -> ob.status = 'registered';
obs.statusCode as statusc where (code = 'aborted') -> ob.status = 'cancelled';
obs.statusCode as statusc where (code = 'suspended') -> ob.status = 'partial';
obs.effectiveTime as effectiveTime -> ob.effective = create('dateTime') as value then TSDateTime(effectiveTime, value) "value2";
obs where effectiveTime.low.exists() or effectiveTime.high.exists() then {
obs.effectiveTime as eff -> ob.effective = create('Period') as period then IVLTSPeriod(eff, period);
} "where";
obs.interpretationCode -> ob.interpretation;
obs.methodCode -> ob.method;
obs.value : INT as int -> ob.value = (int.value);
obs.value : BL as boolean -> ob.value = (boolean.value) "boolean";
obs.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;
} "originltext";
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');
val.codeSystemVersion as version -> coding.version = cast(version, '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.codeSystemVersion as version -> coding.version = cast(version, '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');
value.codeSystemVersion as version -> coding.version = cast(version, 'string');
};
};
};
} "coding";
} "val";
obs.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";
obs.value : ST as value -> ob.value = create('string'), ob.value = (value.dataString);
// Note e commenti
obs.entryRelationship as entryRelationship then {
entryRelationship.act as act then {
act.text as text then {
text.reference as reference -> ob.note as note then {
reference -> note.text = (reference.value) "reference";
};
};
} "Act";
};
// subject
obs.subject as sbj then {
sbj.relatedSubject as relatedSubj -> patient.extension as extension2 then ExtSubjectAnimal(relatedSubj, extension2);
};
// specimen
obs.specimen as spmn -> bundle.entry as e4o, e4o.request = create('BackboneElement') as request, request.method = 'POST', e4o.resource = create('Specimen') as specimen, specimen.id = uuid() as uuid4o, e4o.fullUrl = append('https://example/Specimen/', uuid4o), request.url = 'Specimen', ob.specimen = create('Reference') as reference, reference.reference = ('https://example/Specimen/' + %specimen.id) then {
spmn.specimenRole as specimenRole then {
specimenRole.id as id -> specimen.identifier;
specimenRole.specimenPlayingEntity as specimenPlayingEntity then {
specimenPlayingEntity.code -> specimen.type;
};
};
};
// performer
obs.performer as performer -> 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' then {
performer -> ob.performer = create('Reference') as reference, reference.reference = ('https://example/PractitionerRole/' + %practitionerRole.id) then {
performer.assignedEntity as entity then {
entity.code -> practitionerRole.code;
entity -> bundle.entry as e2, e2.request = create('BackboneElement') as request, request.method = 'PUT', e2.resource = create('Practitioner') as practitioner then {
entity -> practitioner.meta as meta then {
entity -> meta.tag = create('Coding') as coding then {
entity -> coding.system = 'http://algoritmodiscoring' "system";
entity -> coding.code = 'ClinicalDocument/body/observation/performer' "code";
} "coding";
} "meta";
entity.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 {
entity -> 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";
entity.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";
entity.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";
entity.addr -> practitioner.address;
entity.telecom -> practitioner.telecom;
entity.assignedPerson as person then {
person.name -> practitioner.name;
person.birthTime as birthTime then {
birthTime.value as date -> practitioner.birthDate = truncate(date, 10);
} "birth";
} "name";
// organization
entity.representedOrganization as representedOrganization -> bundle.entry as e3, e3.request = create('BackboneElement') as request, request.method = 'PUT', e3.resource = create('Organization') as organization then {
representedOrganization -> organization.meta as meta then {
representedOrganization -> meta.tag = create('Coding') as coding then {
representedOrganization -> coding.system = 'http://algoritmodiscoring' "system";
representedOrganization -> coding.code = 'ClinicalDocument/body/observation/performer/representedOrganization' "code";
} "coding";
} "meta";
representedOrganization.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 {
representedOrganization -> 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 uuid3, e3.fullUrl = append('https://example/Organization/', uuid3), practitionerRole.organization = create('Reference') as referenceOrg, referenceOrg.reference = append('https://example/Organization/', uuid3) "aut";
} "r";
} "identifier";
representedOrganization.name as v -> organization.name = (v.other);
representedOrganization.telecom -> organization.telecom;
representedOrganization.addr -> organization.address;
representedOrganization.asOrganizationPartOf as OrgPartOf -> bundle.entry as e4, e4.request = create('BackboneElement') as request, e4.resource = create('Organization') as organization1, request.method = 'PUT' then {
OrgPartOf -> organization1.meta as meta then {
OrgPartOf -> meta.tag = create('Coding') as coding then {
OrgPartOf -> coding.system = 'http://algoritmodiscoring' "system";
OrgPartOf -> coding.code = 'ClinicalDocument/body/observation/performer/representedOrganization/asOrganizationPartOf' "code";
} "coding";
} "meta";
OrgPartOf.id as id -> organization1.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 {
OrgPartOf -> 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 -> organization1.id = (r + '-' + ext) as uuid4, e4.fullUrl = append('https://example/Organization/', uuid4), organization.partOf = create('Reference') as reference, reference.reference = ('https://example/Organization/' + %organization1.id) "org";
} "r";
} "identifier";
OrgPartOf.code -> organization1.type;
OrgPartOf.statusCode as status where (value = 'active') -> organization1.active = create('boolean'), organization1.active = 'true';
OrgPartOf.wholeOrganization as wholeOrgan -> bundle.entry as e5, e5.request = create('BackboneElement') as request, request.method = 'PUT', e5.resource = create('Organization') as organization2 then {
wholeOrgan -> organization2.meta as meta then {
wholeOrgan -> meta.tag = create('Coding') as coding then {
wholeOrgan -> coding.system = 'http://algoritmodiscoring' "system";
wholeOrgan -> coding.code = 'ClinicalDocument/body/observation/performer/representedOrganization/wholeOrganization' "code";
} "coding";
} "meta";
wholeOrgan.id as id -> organization2.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 {
wholeOrgan -> 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 -> organization2.id = (r + '-' + ext) as uuid5, e5.fullUrl = append('https://example/Organization/', uuid5), organization1.partOf = create('Reference') as reference, reference.reference = ('https://example/Organization/' + %organization2.id) "org";
} "r";
} "identifier";
wholeOrgan.name as v -> organization2.name = (v.other);
wholeOrgan.telecom -> organization2.telecom;
wholeOrgan.addr -> organization2.address;
};
} "OrgPartOf";
};
} "practitioner";
} "entity";
} "practitionerRole";
};
// author
obs.author as srcAuthor -> bundle.entry as e6, e6.request = create('BackboneElement') as request, request.method = 'POST', e6.resource = create('PractitionerRole') as practitionerRole, practitionerRole.id = uuid() as uuid6, e6.fullUrl = append('https://example/PractitionerRole/', uuid6), request.url = 'PractitionerRole', ob.performer = create('Reference') as referenceaut, referenceaut.reference = ('https://example/PractitionerRole/' + %practitionerRole.id) then {
srcAuthor.assignedAuthor as assignedAuthor then {
assignedAuthor.code as codice -> practitionerRole.code as code2 then CECodeableConcept(codice, code2);
assignedAuthor -> bundle.entry as e7, e7.request = create('BackboneElement') as request, request.method = 'PUT', e7.resource = create('Practitioner') as practitioner, practitioner.id = uuid() as uuid7 then {
srcAuthor.functionCode -> practitionerRole.code;
assignedAuthor -> practitioner.meta as meta then {
assignedAuthor -> meta.tag = create('Coding') as coding then {
assignedAuthor -> coding.system = 'http://algoritmodiscoring' "system";
assignedAuthor -> coding.code = 'ClinicalDocument/body/observation/author' "code";
} "coding";
} "meta";
assignedAuthor.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 {
assignedAuthor -> 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, e7.fullUrl = append('https://example/Practitioner/', uuid2), practitionerRole.practitioner = create('Reference') as reference, reference.reference = ('https://example/Practitioner/' + %practitioner.id) "aut";
} "r";
assignedAuthor.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";
assignedAuthor.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";
} "identifier";
assignedAuthor.addr -> practitioner.address;
assignedAuthor.telecom -> practitioner.telecom;
// person
assignedAuthor.assignedPerson as person then {
person.name -> practitioner.name;
person.birthTime as birthTime then {
birthTime.value as date -> practitioner.birthDate = truncate(date, 10);
} "birth";
} "name";
} "ASSAUth";
// organization
assignedAuthor.representedOrganization as representedOrganization -> bundle.entry as e8, e8.request = create('BackboneElement') as request, request.method = 'PUT', e8.resource = create('Organization') as organization then {
representedOrganization -> organization.meta as meta then {
representedOrganization -> meta.tag = create('Coding') as coding then {
representedOrganization -> coding.system = 'http://algoritmodiscoring' "system";
representedOrganization -> coding.code = 'ClinicalDocument/body/observation/author/representedOrganization' "code";
} "coding";
} "meta";
representedOrganization.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 {
representedOrganization -> 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 uuid3, e8.fullUrl = append('https://example/Organization/', uuid3), practitionerRole.organization = create('Reference') as referenceOrg, referenceOrg.reference = append('https://example/Organization/', uuid3) "org";
} "r";
} "identifier";
representedOrganization.name as v -> organization.name = (v.other);
representedOrganization.telecom -> organization.telecom;
representedOrganization.addr -> organization.address;
representedOrganization.asOrganizationPartOf as OrgPartOf -> bundle.entry as e9, e9.request = create('BackboneElement') as request, request.method = 'PUT', e9.resource = create('Organization') as organization1 then {
OrgPartOf -> organization1.meta as meta then {
OrgPartOf -> meta.tag = create('Coding') as coding then {
OrgPartOf -> coding.system = 'http://algoritmodiscoring' "system";
OrgPartOf -> coding.code = 'ClinicalDocument/body/observation/author/representedOrganization/asOrganizationPartOf' "code";
} "coding";
} "meta";
OrgPartOf.id as id -> organization1.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 {
OrgPartOf -> 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 -> organization1.id = (r + '-' + ext) as uuid4, e9.fullUrl = append('https://example/Organization/', uuid4), organization.partOf = create('Reference') as reference, reference.reference = ('https://example/Organization/' + %organization1.id) "org";
} "r";
} "identifier";
OrgPartOf.code -> organization1.type;
OrgPartOf.statusCode as status where (value = 'active') -> organization1.active = create('boolean'), organization1.active = 'true';
OrgPartOf.wholeOrganization as wholeOrgan -> bundle.entry as e10, e10.request = create('BackboneElement') as request, request.method = 'PUT', e10.resource = create('Organization') as organization2 then {
wholeOrgan -> organization2.meta as meta then {
wholeOrgan -> meta.tag = create('Coding') as coding then {
wholeOrgan -> coding.system = 'http://algoritmodiscoring' "system";
wholeOrgan -> coding.code = 'ClinicalDocument/body/observation/author/representedOrganization/asOrganizationPartOf/wholeOrganization' "code";
} "coding";
} "meta";
wholeOrgan.id as id -> organization2.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 {
wholeOrgan -> 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 -> organization2.id = (r + '-' + ext) as uuid4, e10.fullUrl = append('https://example/Organization/', uuid4), organization1.partOf = create('Reference') as reference, reference.reference = ('https://example/Organization/' + %organization2.id) "org";
} "r";
} "identifier";
wholeOrgan.name as v -> organization2.name = (v.other);
wholeOrgan.telecom -> organization2.telecom;
wholeOrgan.addr -> organization2.address;
};
} "OrgPartOf";
};
// device
assignedAuthor.assignedAuthoringDevice as assignedAuthoringDevice -> bundle.entry as e11, e11.request = create('BackboneElement') as request, request.method = 'POST', e11.resource = create('Device') as device, device.id = uuid() as uuid11, e11.fullUrl = append('https://example/Device/', uuid11), request.url = 'Device', tgt.author = create('Reference') as reference, reference.reference = ('https://example/Device/' + %device.id) then {
assignedAuthoringDevice.templateId -> device.identifier;
assignedAuthoringDevice.code -> device.type;
assignedAuthoringDevice.manufacturerModelName as manufacturerModelName then {
manufacturerModelName as m -> device.manufacturer = (m.displayName) "displayRule";
} "manufacturer";
assignedAuthoringDevice.softwareName as softwareName -> device.deviceName as deviceName then {
softwareName -> deviceName.type = 'other' "typeName";
softwareName as s -> deviceName.name = (s.displayName) "name";
} "deviceName";
} "Device";
};
};
// participant person
obs.participant as participant where (typeCode != 'DEV') -> ob.encounter = create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %encounter.id) then {
participant -> encounter.participant as FhirParticipant then {
participant as p -> FhirParticipant.type as type then {
p -> type.coding as coding then {
p -> coding.code = (p.typeCode) "codice";
p -> coding.system = 'http://terminology.hl7.org/CodeSystem/v3-ParticipationType' "system";
} "codeType";
} "type";
} "fhirParticipant";
participant.participantRole as participantRole -> bundle.entry as e12, e12.request = create('BackboneElement') as request, request.method = 'POST', e12.resource = create('PractitionerRole') as practitionerRole, practitionerRole.id = uuid() as uuid12, e12.fullUrl = append('https://example/PractitionerRole/', uuid12), request.url = 'PractitionerRole', encounter.participant = create('BackboneElement') as participant1, participant1.individual = create('Reference') as referencepart, referencepart.reference = ('https://example/Practitioner/' + %practitionerRole.id) then {
// participant.time -> participant1.period;
participant.time as time1 -> participant1.period = create('Period') as period then {
time1 -> period.start = create('dateTime') as start then TSDateTime(time1, start) "val";
};
participant.time as time1 -> participant1.period = create('Period') as period then IVLTSPeriod(time1, period);
participant.functionCode -> practitionerRole.code;
// non mappa i 2 precedenti
participantRole -> bundle.entry as e13, e13.request = create('BackboneElement') as request, request.method = 'PUT', e13.resource = create('Practitioner') as practitioner then {
participantRole -> practitioner.meta as meta then {
participantRole -> meta.tag = create('Coding') as coding then {
participantRole -> coding.system = 'http://algoritmodiscoring' "system";
participantRole -> coding.code = 'ClinicalDocument/body/observation/participant' "code";
} "coding";
} "meta";
participantRole.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 {
participantRole -> 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 uuid4, e13.fullUrl = append('https://example/Practitioner/', uuid4), practitionerRole.practitioner = create('Reference') as reference, reference.reference = ('https://example/Practitioner/' + %practitioner.id) "org";
} "r";
} "identifier";
participantRole.code -> practitionerRole.code;
participantRole.addr -> practitioner.address;
participantRole.telecom -> practitioner.telecom;
participantRole.playingEntity as playingEntity then {
playingEntity.name -> practitioner.name;
playingEntity.birthTime as birthTime then {
birthTime.value as date -> practitioner.birthDate = truncate(date, 10);
} "birth";
} "name";
} "practitioner";
} "partRole";
} "participantEncounter";
// participant device
obs.participant as devParticipant where (typeCode = 'DEV') -> bundle.entry as e14, e14.request = create('BackboneElement') as request, request.method = 'POST', e14.resource = create('Device') as device, device.id = uuid() as uuid14, e14.fullUrl = append('https://example/Device/', uuid14), request.url = 'Device', ob.device = create('Reference') as reference, reference.reference = ('https://example/Device/' + %device.id) then {
devParticipant.participantRole as participantRoleDev then {
participantRoleDev.playingDevice as playingDevice then {
playingDevice.code -> device.type;
playingDevice.manufacturerModelName as manufacturerModelName then {
manufacturerModelName as m -> device.manufacturer = (m.displayName) "displayRule";
} "manufacturer";
playingDevice.softwareName as softwareName -> device.deviceName as deviceName then {
softwareName -> deviceName.type = 'other' "typeName";
softwareName as s -> deviceName.name = (s.displayName) "name";
} "deviceName";
};
} "participantRoleDev";
} "devParticipant";
// observationMedia
obs.entryRelationship as er then {
er.observationMedia as obsMedia -> bundle.entry as e15, e15.request = create('BackboneElement') as request, request.method = 'POST', e15.resource = create('Media') as media1, media1.id = uuid() as uuid15, e15.fullUrl = append('https://example/Media/', uuid15), request.url = 'Media', ob.derivedFrom = create('Reference') as reference, reference.reference = ('https://example/Media/' + %media1.id) then {
obsMedia -> media1.content = create('Attachment') as Attachment then {
obsMedia -> media1.status = 'unknown' "status";
obsMedia.value as valueMedia then {
valueMedia.mediaType as type -> Attachment.contentType = type "type";
valueMedia -> Attachment.data = (valueMedia.dataBase64Binary) "data";
} "valuemedia";
} "Attachment";
} "media";
} "observationMedia";
// referenceRange
obs.referenceRange as refRange -> ob.referenceRange = create('BackboneElement') as ref then {
refRange.observationRange as obsRange then {
obsRange.value : ST as value -> ref.text = create('string'), ref.text = (value.dataString);
obsRange -> ref.low = create('Quantity') as Low then {
obsRange.value : IVL_PQ as v then {
v.low as l1 then {
l1.value as decValue -> Low.value = decValue;
l1.unit as Unit -> Low.unit = Unit;
} "decValue";
v -> ref.high = create('Quantity') as high then {
v.high as h1 then {
h1.value as decValue1 -> high.value = decValue1;
h1.unit as Unit1 -> high.unit = Unit1;
} "decValue";
} "high";
} "IVLPQ";
obsRange.interpretationCode -> ref.type;
obsRange.precondition as precondition then {
precondition.criterion as criterion then {
criterion.code -> ref.appliesTo "appliesTo";
criterion.value : IVL_PQ as v then {
v.high as l1 then {
l1 -> ref.age = create('Quantity') as age then {
l1 -> age.high as high then {
l1.value as decValue -> high.value = decValue;
l1.unit as Unit1 -> high.unit = Unit1;
} "high";
} "age";
} "low";
} "v";
};
};
} "obsRange";
} "refRange";
} "ref";
}
group Act(source cda : Act, target pat : Patient, target ac : DiagnosticReport, target enc : Encounter, target bundle : Bundle) {
cda.code -> ac.code;
cda where cda.statusCode.exists().not() then {
cda -> ac.status = 'final' "statuscode";
} "status";
cda.statusCode as statusc where (code = 'completed') -> ac.status = 'final';
cda.statusCode as statusc where (code = 'active') -> ac.status = 'registered';
cda.statusCode as statusc where (code = 'aborted') -> ac.status = 'cancelled';
cda.statusCode as statusc where (code = 'suspended') -> ac.status = 'partial';
cda.effectiveTime as effectiveTime -> ac.effective = create('dateTime') as value then TSDateTime(effectiveTime, value) "value3";
cda where effectiveTime.low.exists() or effectiveTime.high.exists() then {
cda.effectiveTime as eff -> ac.effective = create('Period') as period then IVLTSPeriod(eff, period);
} "where";
cda -> ac.subject = create('Reference') as reference, reference.reference = ('https://example/Patient/' + %pat.id) "reference";
cda -> ac.encounter = create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %enc.id) "reference";
// specimen
cda where cda.specimen.exists() then {
cda.specimen as src -> bundle.entry as e4, e4.request = create('BackboneElement') as request, request.method = 'POST', e4.resource = create('Specimen') as specimen, specimen.id = uuid() as uuid4, e4.fullUrl = append('https://example/Specimen/', uuid4), request.url = 'Specimen', ac.specimen = create('Reference') as reference, reference.reference = ('https://example/Specimen/' + %specimen.id) then {
src.specimenRole as specimenRole then {
specimenRole.id -> specimen.identifier;
specimenRole.specimenPlayingEntity as specimenPlayingEntity then {
specimenPlayingEntity.code -> specimen.type;
};
} "SpecimenRole";
src -> specimen.subject = create('Reference') as reference, reference.reference = ('https://example/Patient/' + %patient.id) "reference";
cda.entryRelationship as entryRelationship then {
entryRelationship.observation as observation then {
observation -> bundle.entry as e12, e12.request = create('BackboneElement') as request, request.method = 'POST', e12.resource = create('Observation') as obs, obs.id = uuid() as uuid13, e12.fullUrl = append('https://example/Observation/', uuid13), request.url = 'Observation', ac.result = create('Reference') as reference, reference.reference = ('https://example/Observation/' + %obs.id) then {
observation then Observation2(observation, pat, enc, obs, bundle, cda, specimen) "ORG";
// procedure
cda.entryRelationship as entryRelationship1 then {
entryRelationship1.procedure as proc -> bundle.entry as e5, e5.request = create('BackboneElement') as request, request.method = 'POST', e5.resource = create('Procedure') as procedure, procedure.id = uuid() as uuid5, e5.fullUrl = append('https://example/Procedure/', uuid5), request.url = 'Procedure', obs.partOf = create('Reference') as reference, reference.reference = ('https://example/Procedure/' + %procedure.id) then {
proc -> procedure.subject = create('Reference') as reference, reference.reference = ('https://example/Patient/' + %patient.id) "reference";
proc -> procedure.encounter = create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %encounter.id) "reference";
proc where proc.statusCode.exists().not() then {
proc -> procedure.status = 'unknown' "statuscode";
} "status";
proc.statusCode as statusc where (code = 'completed') -> procedure.status = 'completed';
proc.statusCode as statusc where (code = 'active') -> procedure.status = 'in-progress';
proc.statusCode as statusc where (code = 'aborted') -> procedure.status = 'stopped';
proc.statusCode as statusc where (code = 'suspended') -> procedure.status = 'on-hold';
proc.statusCode as statusc where (code = 'cancelled') -> procedure.status = 'not-done';
proc.statusCode as statusc where (code = 'held') -> procedure.status = 'on-hold';
proc.statusCode as statusc where (code = 'new') -> procedure.status = 'preparation';
proc.statusCode as statusc where (code = 'obsolete') -> procedure.status = 'entered-in-error';
proc.statusCode as statusc where (code = 'nullified') -> procedure.status = 'unknown';
proc.effectiveTime as effectiveTime -> procedure.performed = create('dateTime') as value then TSDateTime(effectiveTime, value) "datetime";
proc where effectiveTime.low.exists() or effectiveTime.high.exists() then {
proc.effectiveTime as eff -> procedure.performed = create('Period') as period then IVLTSPeriod(eff, period);
} "where";
proc.targetSiteCode -> procedure.bodySite;
};
} "entryRelationshipprocedure";
} "obs";
};
entryRelationship.organizer as organizer then {
organizer -> bundle.entry as e12, e12.request = create('BackboneElement') as request, request.method = 'POST', e12.resource = create('Observation') as obs, obs.id = uuid() as uuid13, e12.fullUrl = append('https://example/Observation/', uuid13), request.url = 'Observation', ac.result = create('Reference') as reference, reference.reference = ('https://example/Observation/' + %obs.id) then {
organizer then Organizer(cda, organizer, pat, enc, obs, bundle) "ORG";
// procedure
cda.entryRelationship as entryRelationship1 then {
entryRelationship1.procedure as proc -> bundle.entry as e5, e5.request = create('BackboneElement') as request, request.method = 'POST', e5.resource = create('Procedure') as procedure, procedure.id = uuid() as uuid5, e5.fullUrl = append('https://example/Procedure/', uuid5), request.url = 'Procedure', obs.partOf = create('Reference') as reference, reference.reference = ('https://example/Procedure/' + %procedure.id) then {
proc -> procedure.subject = create('Reference') as reference, reference.reference = ('https://example/Patient/' + %patient.id) "reference";
proc -> procedure.encounter = create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %encounter.id) "reference";
proc where proc.statusCode.exists().not() then {
proc -> procedure.status = 'unknown' "statuscode";
} "status";
proc.statusCode as statusc where (code = 'completed') -> procedure.status = 'completed';
proc.statusCode as statusc where (code = 'active') -> procedure.status = 'in-progress';
proc.statusCode as statusc where (code = 'aborted') -> procedure.status = 'stopped';
proc.statusCode as statusc where (code = 'suspended') -> procedure.status = 'on-hold';
proc.statusCode as statusc where (code = 'cancelled') -> procedure.status = 'not-done';
proc.statusCode as statusc where (code = 'held') -> procedure.status = 'on-hold';
proc.statusCode as statusc where (code = 'new') -> procedure.status = 'preparation';
proc.statusCode as statusc where (code = 'obsolete') -> procedure.status = 'entered-in-error';
proc.statusCode as statusc where (code = 'nullified') -> procedure.status = 'unknown';
proc.effectiveTime as effectiveTime -> procedure.performed = create('dateTime') as value then TSDateTime(effectiveTime, value) "datetime";
proc where effectiveTime.low.exists() or effectiveTime.high.exists() then {
proc.effectiveTime as eff -> procedure.performed = create('Period') as period then IVLTSPeriod(eff, period);
} "where";
proc.targetSiteCode -> procedure.bodySite;
} "pbservation";
} "entryRelationshiprocedure";
} "Organizer";
};
} "entryRelationshipobservation";
};
} "exist";
cda where cda.specimen.exists().not() then {
// cda -> bundle.entry as e4, e4.request = create('BackboneElement') as request, request.method = 'POST', e4.resource = create('Specimen') as specimen, specimen.id = uuid() as uuid4, e4.fullUrl = append('https://example/Specimen/', uuid4), request.url = 'Specimen' then {
cda.entryRelationship as entryRelationship then {
entryRelationship.observation as observation then {
observation -> bundle.entry as e12, e12.request = create('BackboneElement') as request, request.method = 'POST', e12.resource = create('Observation') as obs, obs.id = uuid() as uuid13, e12.fullUrl = append('https://example/Observation/', uuid13), request.url = 'Observation', ac.result = create('Reference') as reference, reference.reference = ('https://example/Observation/' + %obs.id) then {
observation then Observation3(observation, pat, enc, obs, bundle, cda) "ORG";
// procedure
cda.entryRelationship as entryRelationship1 then {
entryRelationship1.procedure as proc -> bundle.entry as e5, e5.request = create('BackboneElement') as request, request.method = 'POST', e5.resource = create('Procedure') as procedure, procedure.id = uuid() as uuid5, e5.fullUrl = append('https://example/Procedure/', uuid5), request.url = 'Procedure', obs.partOf = create('Reference') as reference, reference.reference = ('https://example/Procedure/' + %procedure.id) then {
proc -> procedure.subject = create('Reference') as reference, reference.reference = ('https://example/Patient/' + %patient.id) "reference";
proc -> procedure.encounter = create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %encounter.id) "reference";
proc where proc.statusCode.exists().not() then {
proc -> procedure.status = 'unknown' "statuscode";
} "status";
proc.statusCode as statusc where (code = 'completed') -> procedure.status = 'completed';
proc.statusCode as statusc where (code = 'active') -> procedure.status = 'in-progress';
proc.statusCode as statusc where (code = 'aborted') -> procedure.status = 'stopped';
proc.statusCode as statusc where (code = 'suspended') -> procedure.status = 'on-hold';
proc.statusCode as statusc where (code = 'cancelled') -> procedure.status = 'not-done';
proc.statusCode as statusc where (code = 'held') -> procedure.status = 'on-hold';
proc.statusCode as statusc where (code = 'new') -> procedure.status = 'preparation';
proc.statusCode as statusc where (code = 'obsolete') -> procedure.status = 'entered-in-error';
proc.statusCode as statusc where (code = 'nullified') -> procedure.status = 'unknown';
proc.effectiveTime as effectiveTime -> procedure.performed = create('dateTime') as value then TSDateTime(effectiveTime, value) "datetime";
proc where effectiveTime.low.exists() or effectiveTime.high.exists() then {
proc.effectiveTime as eff -> procedure.performed = create('Period') as period then IVLTSPeriod(eff, period);
} "where";
proc.targetSiteCode -> procedure.bodySite;
};
} "entryRelationshipprocedure";
} "obs";
};
entryRelationship.organizer as organizer then {
organizer -> bundle.entry as e12, e12.request = create('BackboneElement') as request, request.method = 'POST', e12.resource = create('Observation') as obs, obs.id = uuid() as uuid13, e12.fullUrl = append('https://example/Observation/', uuid13), request.url = 'Observation', ac.result = create('Reference') as reference, reference.reference = ('https://example/Observation/' + %obs.id) then {
organizer then Organizer(cda, organizer, pat, enc, obs, bundle) "ORG";
// procedure
cda.entryRelationship as entryRelationship1 then {
entryRelationship1.procedure as proc -> bundle.entry as e5, e5.request = create('BackboneElement') as request, request.method = 'POST', e5.resource = create('Procedure') as procedure, procedure.id = uuid() as uuid5, e5.fullUrl = append('https://example/Procedure/', uuid5), request.url = 'Procedure', obs.partOf = create('Reference') as reference, reference.reference = ('https://example/Procedure/' + %procedure.id) then {
proc -> procedure.subject = create('Reference') as reference, reference.reference = ('https://example/Patient/' + %patient.id) "reference";
proc -> procedure.encounter = create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %encounter.id) "reference";
proc where proc.statusCode.exists().not() then {
proc -> procedure.status = 'unknown' "statuscode";
} "status";
proc.statusCode as statusc where (code = 'completed') -> procedure.status = 'completed';
proc.statusCode as statusc where (code = 'active') -> procedure.status = 'in-progress';
proc.statusCode as statusc where (code = 'aborted') -> procedure.status = 'stopped';
proc.statusCode as statusc where (code = 'suspended') -> procedure.status = 'on-hold';
proc.statusCode as statusc where (code = 'cancelled') -> procedure.status = 'not-done';
proc.statusCode as statusc where (code = 'held') -> procedure.status = 'on-hold';
proc.statusCode as statusc where (code = 'new') -> procedure.status = 'preparation';
proc.statusCode as statusc where (code = 'obsolete') -> procedure.status = 'entered-in-error';
proc.statusCode as statusc where (code = 'nullified') -> procedure.status = 'unknown';
proc.effectiveTime as effectiveTime -> procedure.performed = create('dateTime') as value then TSDateTime(effectiveTime, value) "datetime";
proc where effectiveTime.low.exists() or effectiveTime.high.exists() then {
proc.effectiveTime as eff -> procedure.performed = create('Period') as period then IVLTSPeriod(eff, period);
} "where";
proc.targetSiteCode -> procedure.bodySite;
} "pbservation";
} "entryRelationshiprocedure";
} "Organizer";
};
} "entryRelationshipobservation";
} "existnot";
// PARTICIPANT
cda.participant as part where (typeCode != 'DEV') -> enc.participant as participant then {
part -> participant.type as type then {
part -> type.coding as coding then {
part -> coding.code = (part.typeCode) "codice";
part -> coding.system = 'http://terminology.hl7.org/CodeSystem/v3-ParticipationType' "system";
} "codeType";
} "type";
part.participantRole as participantRole -> participant.individual = create('Reference') as reference then {
participantRole -> bundle.entry as e, e.request = create('BackboneElement') as request, request.method = 'PUT', e.resource = create('Practitioner') as practitioner then {
part.time as time1 -> participant.period = create('Period') as period then {
time1 -> period.start = create('dateTime') as start then TSDateTime(time1, start) "val";
};
part.time as time1 -> participant.period = create('Period') as period then IVLTSPeriod(time1, period);
participantRole -> practitioner.meta as meta then {
participantRole -> meta.tag = create('Coding') as coding then {
participantRole -> coding.system = 'http://algoritmodiscoring' "system";
participantRole -> coding.code = 'ClinicalDocument/body/act/participant' "code";
} "coding";
} "meta";
participantRole.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 {
participantRole -> 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 uuid4, e.fullUrl = append('https://example/Practitioner/', uuid4), reference.reference = ('https://example/Practitioner/' + %practitioner.id) "org";
} "r";
} "identifier";
participantRole.addr -> practitioner.address;
participantRole.playingEntity as playingEntity then {
playingEntity.name -> practitioner.name;
};
} "participanRoleBund";
};
};
// PERFORMER
cda.performer as performer -> 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', ac.performer = create('Reference') as reference, reference.reference = ('https://example/PractitionerRole/' + %practitionerRole.id) then {
performer.assignedEntity as assignedEntity then {
assignedEntity.code as codice -> practitionerRole.code;
assignedEntity -> bundle.entry as e2, e2.request = create('BackboneElement') as request, request.method = 'PUT', e2.resource = create('Practitioner') as practitioner then {
assignedEntity.code -> practitionerRole.code;
assignedEntity -> practitioner.meta as meta then {
assignedEntity -> meta.tag = create('Coding') as coding then {
assignedEntity -> coding.system = 'http://algoritmodiscoring' "system";
assignedEntity -> coding.code = 'ClinicalDocument/body/act/performer' "code";
} "coding";
} "meta";
assignedEntity.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 {
assignedEntity -> 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 uuid4, e2.fullUrl = append('https://example/Practitioner/', uuid4), practitionerRole.practitioner = create('Reference') as reference, reference.reference = ('https://example/Practitioner/' + %practitioner.id) "pra";
} "r";
} "identifier";
assignedEntity.addr -> practitioner.address;
assignedEntity.telecom -> practitioner.telecom;
assignedEntity.assignedPerson as person then {
person.name -> practitioner.name;
person.birthTime as birthTime then {
birthTime.value as date -> practitioner.birthDate = truncate(date, 10);
} "birth";
} "name";
} "ASSAUth";
assignedEntity.representedOrganization as representedOrganization -> bundle.entry as e3, e3.request = create('BackboneElement') as request, request.method = 'PUT', e3.resource = create('Organization') as organization then {
representedOrganization -> organization.meta as meta then {
representedOrganization -> meta.tag = create('Coding') as coding then {
representedOrganization -> coding.system = 'http://algoritmodiscoring' "system";
representedOrganization -> coding.code = 'ClinicalDocument/body/act/representedOrganization' "code";
} "coding";
} "meta";
representedOrganization.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 {
representedOrganization -> 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 uuid2, e3.fullUrl = append('https://example/Organization/', uuid2), practitionerRole.organization = create('Reference') as referenceOrg, referenceOrg.reference = append('https://example/Organization/', uuid2) "org";
} "r";
} "identifier";
representedOrganization.name as v -> organization.name = (v.other);
representedOrganization.telecom -> organization.telecom;
representedOrganization.addr -> organization.address;
representedOrganization.asOrganizationPartOf as OrgPartOf -> bundle.entry as e4, e4.request = create('BackboneElement') as request, request.method = 'PUT', e4.resource = create('Organization') as organization1 then {
OrgPartOf -> organization1.meta as meta then {
OrgPartOf -> meta.tag = create('Coding') as coding then {
OrgPartOf -> coding.system = 'http://algoritmodiscoring' "system";
OrgPartOf -> coding.code = 'ClinicalDocument/body/act/representedOrganization/asOrganizationPartOf' "code";
} "coding";
} "meta";
OrgPartOf.id as id -> organization1.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 {
OrgPartOf -> 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 -> organization1.id = (r + '-' + ext) as uuid3, organization1.id = uuid() as uuid3, e4.fullUrl = append('https://example/Organization/', uuid3), organization.partOf = create('Reference') as reference, reference.reference = ('https://example/Organization/' + %organization1.id) "org";
} "r";
} "identifier";
OrgPartOf.code -> organization1.type;
OrgPartOf.statusCode as status where (value = 'active') -> organization1.active = create('boolean'), organization1.active = 'true';
OrgPartOf.wholeOrganization as wholeOrgan -> bundle.entry as e10bis, e10bis.request = create('BackboneElement') as request, request.method = 'PUT', e10bis.resource = create('Organization') as organization2 then {
OrgPartOf -> organization2.meta as meta then {
OrgPartOf -> meta.tag = create('Coding') as coding then {
OrgPartOf -> coding.system = 'http://algoritmodiscoring' "system";
OrgPartOf -> coding.code = 'ClinicalDocument/body/act/representedOrganization/asOrganizationPartOf/wholeOrganization' "code";
} "coding";
} "meta";
wholeOrgan.id as id -> organization2.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 {
wholeOrgan -> 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 -> organization2.id = (r + '-' + ext) as uuid5, e10bis.fullUrl = append('https://example/Organization/', uuid5), organization1.partOf = create('Reference') as reference, reference.reference = ('https://example/Organization/' + %organization2.id) "org";
} "r";
} "identifier";
wholeOrgan.name as v -> organization2.name = (v.other);
wholeOrgan.telecom -> organization2.telecom;
wholeOrgan.addr -> organization2.address;
};
} "OrgPartOf";
};
} "performer";
};
// AUTHOR
cda.author as srcAuthor -> bundle.entry as e5, e5.request = create('BackboneElement') as request, request.method = 'POST', e5.resource = create('PractitionerRole') as practitionerRole, practitionerRole.id = uuid() as uuid6, e5.fullUrl = append('https://example/PractitionerRole/', uuid6), request.url = 'PractitionerRole', ac.performer = create('Reference') as reference, reference.reference = ('https://example/PractitionerRole/' + %practitionerRole.id) then {
srcAuthor.assignedAuthor as assignedAuthor then {
assignedAuthor.code as codice -> practitionerRole.code;
assignedAuthor -> bundle.entry as e7, e7.request = create('BackboneElement') as request, request.method = 'PUT', e7.resource = create('Practitioner') as practitioner then {
srcAuthor.functionCode -> practitionerRole.code;
assignedAuthor.code -> practitionerRole.code;
assignedAuthor -> practitioner.meta as meta then {
assignedAuthor -> meta.tag = create('Coding') as coding then {
assignedAuthor -> coding.system = 'http://algoritmodiscoring' "system";
assignedAuthor -> coding.code = 'ClinicalDocument/body/act/author' "code";
} "coding";
} "meta";
assignedAuthor.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 {
assignedAuthor -> 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, e7.fullUrl = append('https://example/Practitioner/', uuid2), practitionerRole.practitioner = create('Reference') as reference, reference.reference = ('https://example/Practitioner/' + %practitioner.id) "aut";
} "r";
} "identifier";
assignedAuthor.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";
assignedAuthor.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";
assignedAuthor.addr -> practitioner.address;
assignedAuthor.telecom -> practitioner.telecom;
// person
assignedAuthor.assignedPerson as person then {
person.name -> practitioner.name;
person.birthTime as birthTime then {
birthTime.value as date -> practitioner.birthDate = truncate(date, 10);
} "birth";
} "name";
} "ASSAUth";
// organization
assignedAuthor.representedOrganization as representedOrganization -> bundle.entry as e8, e8.request = create('BackboneElement') as request, request.method = 'PUT', e8.resource = create('Organization') as organization then {
representedOrganization -> organization.meta as meta then {
representedOrganization -> meta.tag = create('Coding') as coding then {
representedOrganization -> coding.system = 'http://algoritmodiscoring' "system";
representedOrganization -> coding.code = 'ClinicalDocument/body/act/author/representedOrganization' "code";
} "coding";
} "meta";
representedOrganization.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 {
representedOrganization -> 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 uuid8, e8.fullUrl = append('https://example/Organization/', uuid8), practitionerRole.organization = create('Reference') as referenceOrg, referenceOrg.reference = append('https://example/Organization/', uuid8) "org";
} "r";
} "identifier";
representedOrganization.name as v -> organization.name = (v.other);
representedOrganization.telecom -> organization.telecom;
representedOrganization.addr -> organization.address;
representedOrganization.asOrganizationPartOf as OrgPartOf -> bundle.entry as e9, e9.request = create('BackboneElement') as request, request.method = 'PUT', e9.resource = create('Organization') as organization1 then {
OrgPartOf -> organization1.meta as meta then {
OrgPartOf -> meta.tag = create('Coding') as coding then {
OrgPartOf -> coding.system = 'http://algoritmodiscoring' "system";
OrgPartOf -> coding.code = 'ClinicalDocument/body/act/author/representedOrganization/asOrganizationPartOf' "code";
} "coding";
} "meta";
OrgPartOf.id as id -> organization1.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 {
OrgPartOf -> 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 -> organization1.id = (r + '-' + ext) as uuid9, e9.fullUrl = append('https://example/Organization/', uuid9), organization.partOf = create('Reference') as reference, reference.reference = ('https://example/Organization/' + %organization1.id) "org";
} "r";
} "identifier";
OrgPartOf.code -> organization1.type;
OrgPartOf.statusCode as status where (value = 'active') -> organization1.active = create('boolean'), organization1.active = 'true';
OrgPartOf.wholeOrganization as wholeOrgan -> bundle.entry as e10, e10.request = create('BackboneElement') as request, request.method = 'PUT', e10.resource = create('Organization') as organization2 then {
wholeOrgan -> organization2.meta as meta then {
wholeOrgan -> meta.tag = create('Coding') as coding then {
wholeOrgan -> coding.system = 'http://algoritmodiscoring' "system";
wholeOrgan -> coding.code = 'ClinicalDocument/body/act/author/representedOrganization/asOrganizationPartOf/wholeOrganization' "code";
} "coding";
} "meta";
wholeOrgan.id as id -> organization2.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 {
wholeOrgan -> 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 -> organization2.id = (r + '-' + ext) as uuid10, e10.fullUrl = append('https://example/Organization/', uuid10), organization1.partOf = create('Reference') as reference, reference.reference = ('https://example/Organization/' + %organization2.id) "org";
} "r";
} "identifier";
wholeOrgan.name as v -> organization2.name = (v.other);
wholeOrgan.telecom -> organization2.telecom;
wholeOrgan.addr -> organization2.address;
};
} "OrgPartOf";
};
} "author";
};
// <!--entryRelationship per la gestione delle note e commenti-->
cda.entryRelationship as entryRelationship then {
entryRelationship.act as act then {
act.text as text then {
text.reference as reference -> ac.conclusion = (reference.value);
};
} "Act";
};
}
group Organizer(source cda : Act, source org : Organizer, target patient : Patient, target encounter : Encounter, target observation : Observation, target bundle : Bundle) {
org -> observation.subject = create('Reference') as reference, reference.reference = ('https://example/Patient/' + %patient.id) "reference";
org -> observation.encounter = create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %encounter.id) "reference";
org.code -> observation.code;
org where org.code.exists().not() then {
cda.code -> observation.code;
} "act";
org.statusCode as statusc where (code = 'completed') -> observation.status = 'final';
org.statusCode as statusc where (code = 'active') -> observation.status = 'registered';
org.statusCode as statusc where (code = 'aborted') -> observation.status = 'cancelled';
org.statusCode as statusc where (code = 'suspended') -> observation.status = 'partial';
org.effectiveTime as effectiveTime -> observation.effective = create('dateTime') as value then TSDateTime(effectiveTime, value) "value2";
org where effectiveTime.low.exists() or effectiveTime.high.exists() then {
org.effectiveTime as eff -> observation.effective = create('Period') as period then IVLTSPeriod(eff, period);
} "where";
// specimen
org.specimen as spmn -> bundle.entry as e4o, e4o.request = create('BackboneElement') as request, request.method = 'POST', e4o.resource = create('Specimen') as specimen, specimen.id = uuid() as uuid4o, e4o.fullUrl = append('https://example/Specimen/', uuid4o), request.url = 'Specimen', observation.specimen = create('Reference') as reference, reference.reference = ('https://example/Specimen/' + %specimen.id) then {
spmn.specimenRole as specimenRole then {
specimenRole.id as id -> specimen.identifier;
specimenRole.specimenPlayingEntity as specimenPlayingEntity then {
specimenPlayingEntity.code -> specimen.type;
};
};
};
// subject
org.subject as sbj then {
sbj.relatedSubject as relatedSubj -> patient.extension as extension2 then ExtSubjectAnimal(relatedSubj, extension2);
};
// performer
org.performer as performer -> 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' then {
performer -> observation.performer = create('Reference') as reference, reference.reference = ('https://example/PractitionerRole/' + %practitionerRole.id) then {
performer.assignedEntity as entity then {
entity.code -> practitionerRole.code;
entity -> bundle.entry as e2, e2.request = create('BackboneElement') as request, request.method = 'PUT', e2.resource = create('Practitioner') as practitioner then {
entity -> practitioner.meta as meta then {
entity -> meta.tag = create('Coding') as coding then {
entity -> coding.system = 'http://algoritmodiscoring' "system";
entity -> coding.code = 'ClinicalDocument/body/organizer/performer' "code";
} "coding";
} "meta";
entity.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 {
entity -> 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) "aut";
} "r";
} "identifier";
entity.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";
entity.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";
entity.addr -> practitioner.address;
entity.telecom -> practitioner.telecom;
entity.assignedPerson as person then {
person.name -> practitioner.name;
person.birthTime as birthTime then {
birthTime.value as date -> practitioner.birthDate = truncate(date, 10);
} "birth";
} "name";
entity.representedOrganization as representedOrganization -> bundle.entry as e3, e3.request = create('BackboneElement') as request, request.method = 'PUT', e3.resource = create('Organization') as organization then {
representedOrganization -> organization.meta as meta then {
representedOrganization -> meta.tag = create('Coding') as coding then {
representedOrganization -> coding.system = 'http://algoritmodiscoring' "system";
representedOrganization -> coding.code = 'ClinicalDocument/body/organizer/performer/representedOrganization' "code";
} "coding";
} "meta";
representedOrganization.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 {
representedOrganization -> 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 uuid3, e3.fullUrl = append('https://example/Organization/', uuid3), practitionerRole.organization = create('Reference') as referenceOrg, referenceOrg.reference = append('https://example/Organization/', uuid3) "aut";
} "r";
} "identifier";
representedOrganization.name as v -> organization.name = (v.other);
representedOrganization.telecom -> organization.telecom;
representedOrganization.addr -> organization.address;
representedOrganization.asOrganizationPartOf as OrgPartOf -> bundle.entry as e4, e4.request = create('BackboneElement') as request, request.method = 'PUT', e4.resource = create('Organization') as organization1 then {
OrgPartOf -> organization1.meta as meta then {
OrgPartOf -> meta.tag = create('Coding') as coding then {
OrgPartOf -> coding.system = 'http://algoritmodiscoring' "system";
OrgPartOf -> coding.code = 'ClinicalDocument/body/organizer/performer/representedOrganization/asOrganizationPartOf' "code";
} "coding";
} "meta";
OrgPartOf.id as id -> organization1.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 {
OrgPartOf -> 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 -> organization1.id = (r + '-' + ext) as uuid4, e4.fullUrl = append('https://example/Organization/', uuid4), organization.partOf = create('Reference') as reference, reference.reference = ('https://example/Organization/' + %organization1.id) "org";
} "r";
} "identifier";
OrgPartOf.code -> organization1.type;
OrgPartOf.statusCode as status where (value = 'active') -> organization1.active = create('boolean'), organization1.active = 'true';
OrgPartOf.wholeOrganization as wholeOrgan -> bundle.entry as e5, e5.request = create('BackboneElement') as request, request.method = 'PUT', e5.resource = create('Organization') as organization2 then {
wholeOrgan -> organization2.meta as meta then {
wholeOrgan -> meta.tag = create('Coding') as coding then {
wholeOrgan -> coding.system = 'http://algoritmodiscoring' "system";
wholeOrgan -> coding.code = 'ClinicalDocument/body/organizer/performer/representedOrganization/asOrganizationPartOf/wholeOrganization' "code";
} "coding";
} "meta";
wholeOrgan.id as id -> organization2.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 {
wholeOrgan -> 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 -> organization2.id = (r + '-' + ext) as uuid4, e5.fullUrl = append('https://example/Organization/', uuid4), organization1.partOf = create('Reference') as reference, reference.reference = ('https://example/Organization/' + %organization2.id) "org";
} "r";
} "identifier";
wholeOrgan.name as v -> organization2.name = (v.other);
wholeOrgan.telecom -> organization2.telecom;
wholeOrgan.addr -> organization2.address;
};
} "OrgPartOf";
};
} "practitioner";
} "entity";
} "practitionerRole";
};
// author
org.author as srcAuthor -> bundle.entry as e6, e6.request = create('BackboneElement') as request, request.method = 'POST', e6.resource = create('PractitionerRole') as practitionerRole, practitionerRole.id = uuid() as uuid6, e6.fullUrl = append('https://example/PractitionerRole/', uuid6), request.url = 'PractitionerRole', observation.performer = create('Reference') as referenceaut, referenceaut.reference = ('https://example/PractitionerRole/' + %practitionerRole.id) then {
// srcAuthor.time as time -> tgt.date;
srcAuthor.assignedAuthor as assignedAuthor then {
assignedAuthor.code as codice -> practitionerRole.code as code2 then CECodeableConcept(codice, code2);
assignedAuthor -> bundle.entry as e7, e7.request = create('BackboneElement') as request, request.method = 'PUT', e7.resource = create('Practitioner') as practitioner then {
srcAuthor.functionCode -> practitionerRole.code;
// assignedAuthor.code -> practitionerRole.code;
assignedAuthor -> practitioner.meta as meta then {
assignedAuthor -> meta.tag = create('Coding') as coding then {
assignedAuthor -> coding.system = 'http://algoritmodiscoring' "system";
assignedAuthor -> coding.code = 'ClinicalDocument/body/organizer/author' "code";
} "coding";
} "meta";
assignedAuthor.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 {
assignedAuthor -> 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 uuid7, e7.fullUrl = append('https://example/Practitioner/', uuid7), practitionerRole.practitioner = create('Reference') as reference, reference.reference = ('https://example/Practitioner/' + %practitioner.id) "aut";
} "r";
} "identifier";
assignedAuthor.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";
assignedAuthor.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";
assignedAuthor.addr -> practitioner.address;
assignedAuthor.telecom -> practitioner.telecom;
// person
assignedAuthor.assignedPerson as person then {
person.name -> practitioner.name;
person.birthTime as birthTime then {
birthTime.value as date -> practitioner.birthDate = truncate(date, 10);
} "birth";
} "name";
} "ASSAUth";
// organization
assignedAuthor.representedOrganization as representedOrganization -> bundle.entry as e8, e8.request = create('BackboneElement') as request, request.method = 'PUT', e8.resource = create('Organization') as organization then {
representedOrganization -> organization.meta as meta then {
representedOrganization -> meta.tag = create('Coding') as coding then {
representedOrganization -> coding.system = 'http://algoritmodiscoring' "system";
representedOrganization -> coding.code = 'ClinicalDocument/body/organizer/author/representedOrganization' "code";
} "coding";
} "meta";
representedOrganization.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 {
representedOrganization -> 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 uuid8, e8.fullUrl = append('https://example/Organization/', uuid8), practitionerRole.organization = create('Reference') as referenceOrg, referenceOrg.reference = append('https://example/Organization/', uuid8) "aut";
} "r";
} "identifier";
representedOrganization.name as v -> organization.name = (v.other);
representedOrganization.telecom -> organization.telecom;
representedOrganization.addr -> organization.address;
representedOrganization.asOrganizationPartOf as OrgPartOf -> bundle.entry as e9, e9.request = create('BackboneElement') as request, request.method = 'PUT', e9.resource = create('Organization') as organization1 then {
OrgPartOf -> organization1.meta as meta then {
OrgPartOf -> meta.tag = create('Coding') as coding then {
OrgPartOf -> coding.system = 'http://algoritmodiscoring' "system";
OrgPartOf -> coding.code = 'ClinicalDocument/body/organizer/author/representedOrganization/asOrganizationPartOf' "code";
} "coding";
} "meta";
OrgPartOf.id as id -> organization1.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 {
OrgPartOf -> 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 -> organization1.id = (r + '-' + ext) as uuid9, e9.fullUrl = append('https://example/Organization/', uuid9), organization.partOf = create('Reference') as reference, reference.reference = ('https://example/Organization/' + %organization1.id) "aut";
} "r";
} "identifier";
OrgPartOf.code -> organization1.type;
OrgPartOf.statusCode as status where (value = 'active') -> organization1.active = create('boolean'), organization1.active = 'true';
OrgPartOf.wholeOrganization as wholeOrgan -> bundle.entry as e10, e10.request = create('BackboneElement') as request, request.method = 'PUT', e10.resource = create('Organization') as organization2 then {
OrgPartOf -> organization2.meta as meta then {
OrgPartOf -> meta.tag = create('Coding') as coding then {
OrgPartOf -> coding.system = 'http://algoritmodiscoring' "system";
OrgPartOf -> coding.code = 'ClinicalDocument/body/organizer/author/representedOrganization/asOrganizationPartOf/wholeOrganization' "code";
} "coding";
} "meta";
wholeOrgan.id as id -> organization2.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 {
wholeOrgan -> 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 -> organization2.id = (r + '-' + ext) as uuid10, e10.fullUrl = append('https://example/Organization/', uuid10), organization1.partOf = create('Reference') as reference, reference.reference = ('https://example/Organization/' + %organization2.id) "aut";
} "r";
} "identifier";
wholeOrgan.name as v -> organization2.name = (v.other);
wholeOrgan.telecom -> organization2.telecom;
wholeOrgan.addr -> organization2.address;
};
} "OrgPartOf";
};
// device
assignedAuthor.assignedAuthoringDevice as assignedAuthoringDevice -> bundle.entry as e11, e11.request = create('BackboneElement') as request, request.method = 'POST', e11.resource = create('Device') as device, device.id = uuid() as uuid11, e11.fullUrl = append('https://example/Device/', uuid11), request.url = 'Device', tgt.author = create('Reference') as reference, reference.reference = ('https://example/Device/' + %device.id) then {
assignedAuthoringDevice.templateId -> device.identifier;
assignedAuthoringDevice.code -> device.type;
assignedAuthoringDevice.manufacturerModelName as manufacturerModelName then {
manufacturerModelName as m -> device.manufacturer = (m.displayName) "displayRule";
} "manufacturer";
assignedAuthoringDevice.softwareName as softwareName -> device.deviceName as deviceName then {
softwareName -> deviceName.type = 'other' "typeName";
softwareName as s -> deviceName.name = (s.displayName) "name";
} "deviceName";
} "Device";
};
};
// participant person
org.participant as participant where (typeCode != 'DEV') -> observation.encounter = create('Reference') as reference, reference.reference = ('https://example/Encounter/' + %encounter.id) then {
participant -> encounter.participant as FhirParticipant then {
participant as p -> FhirParticipant.type as type then {
p -> type.coding as coding then {
p -> coding.code = (p.typeCode) "codice";
p -> coding.system = 'http://terminology.hl7.org/CodeSystem/v3-ParticipationType' "system";
} "codeType";
} "type";
} "fhirParticipant";
participant.participantRole as participantRole -> bundle.entry as e12, e12.request = create('BackboneElement') as request, request.method = 'POST', e12.resource = create('PractitionerRole') as practitionerRole, practitionerRole.id = uuid() as uuid12, e12.fullUrl = append('https://example/PractitionerRole/', uuid12), request.url = 'PractitionerRole', encounter.participant = create('BackboneElement') as participant1 then {
// participant.time -> participant1.period;
participant.time as time1 -> participant1.period = create('Period') as period then {
time1 -> period.start = create('dateTime') as start then TSDateTime(time1, start) "val";
};
participant.time as time1 -> participant1.period = create('Period') as period then IVLTSPeriod(time1, period);
participant.functionCode -> practitionerRole.code;
// non mappa i 2 precedenti
participantRole -> bundle.entry as e13, e13.request = create('BackboneElement') as request, request.method = 'PUT', e13.resource = create('Practitioner') as practitioner then {
participantRole -> participant1.individual = create('Reference') as referencepart, referencepart.reference = ('https://example/PractitionerRole/' + %practitionerRole.id) "par";
participantRole -> practitioner.meta as meta then {
participantRole -> meta.tag = create('Coding') as coding then {
participantRole -> coding.system = 'http://algoritmodiscoring' "system";
participantRole -> coding.code = 'ClinicalDocument/body/organizer/participant' "code";
} "coding";
} "meta";
participantRole.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 {
participantRole -> 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, e13.fullUrl = append('https://example/Practitioner/', uuid2), practitionerRole.practitioner = create('Reference') as reference, reference.reference = ('https://example/Practitioner/' + %practitioner.id) "part";
} "r";
} "identifier";
participantRole.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";
participantRole.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";
participantRole.code -> practitionerRole.code;
participantRole.addr -> practitioner.address;
participantRole.telecom -> practitioner.telecom;
participantRole.playingEntity as playingEntity then {
playingEntity.name -> practitioner.name;
playingEntity.birthTime as birthTime then {
birthTime.value as date -> practitioner.birthDate = truncate(date, 10);
} "birth";
} "name";
} "practitioner";
} "partRole";
} "participantEncounter";
// participant device
org.participant as devParticipant where (typeCode = 'DEV') -> bundle.entry as e14, e14.request = create('BackboneElement') as request, request.method = 'POST', e14.resource = create('Device') as device, device.id = uuid() as uuid14, e14.fullUrl = append('https://example/Device/', uuid14), request.url = 'Device', observation.device = create('Reference') as reference, reference.reference = ('https://example/Device/' + %device.id) then {
devParticipant.participantRole as participantRoleDev then {
participantRoleDev.playingDevice as playingDevice then {
playingDevice.code -> device.type;
playingDevice.manufacturerModelName as manufacturerModelName then {
manufacturerModelName as m -> device.manufacturer = (m.displayName) "displayRule";
} "manufacturer";
playingDevice.softwareName as softwareName -> device.deviceName as deviceName then {
softwareName -> deviceName.type = 'other' "typeName";
softwareName as s -> deviceName.name = (s.displayName) "name";
} "deviceName";
};
} "participantRoleDev";
} "devParticipant";
org.component as component then {
component.observation as observation -> bundle.entry as e, e.request = create('BackboneElement') as request, request.method = 'POST', e.resource = create('Observation') as observationhasmember, observationhasmember.id = uuid() as uuid2, e.fullUrl = append('https://example/Observation/', uuid2), request.url = 'Observation', observation.hasMember = create('Reference') as reference, reference.reference = ('https://example/Observation/' + %observationhasmember.id) then Observation(observation, patient, encounter, observationhasmember, bundle) "OBS";
} "componentobservation";
org.component as component then {
component.organizer as organizer -> bundle.entry as e1, e1.request = create('BackboneElement') as request, request.method = 'POST', e1.resource = create('Observation') as observationorganizer, observationorganizer.id = uuid() as uuid3, e1.fullUrl = append('https://example/Observation/', uuid3), request.url = 'Observation', observation.hasMember = create('Reference') as reference, reference.reference = ('https://example/Observation/' + %observationorganizer.id) then {
organizer then Organizer(cda, organizer, patient, encounter, observationorganizer, bundle) "ORG";
};
} "componentorganizer";
// observationMedia
org.component as component then {
component.observationMedia as obsMedia -> bundle.entry as e15, e15.request = create('BackboneElement') as request, request.method = 'POST', e15.resource = create('Media') as media1, media1.id = uuid() as uuid15, e15.fullUrl = append('https://example/Media/', uuid15), request.url = 'Media', observation.derivedFrom = create('Reference') as reference, reference.reference = ('https://example/Media/' + %media1.id) then {
obsMedia -> media1.content = create('Attachment') as Attachment then {
obsMedia -> media1.status = 'unknown' "status";
obsMedia.value as valueMedia then {
valueMedia.mediaType as type -> Attachment.contentType = type "type";
valueMedia -> Attachment.data = (valueMedia.dataBase64Binary) "data";
} "valuemedia";
} "Attachment";
} "obsmedia";
};
// note
org.component as component then {
component.act as act then {
act.text as text then {
text.reference as reference -> observation.note as note then {
reference -> note.text = (reference.value) "reference";
} "note";
};
} "componentact";
};
}
group ExtSubjectAnimal(source src : relatedSubject, target ext : Extension) {
src -> ext.url = 'http://hl7.org/fhir/StructureDefinition/patient-animal' "url";
src.code as code -> ext.extension as ext, ext.url = 'species', ext.value = create('CodeableConcept') as code1 then CECodeableConcept(code, code1);
}