diff --git a/data/SampleData/Ccda/170.314B2_Amb_CCD.ccda b/data/SampleData/Ccda/170.314B2_Amb_CCD.ccda index fa451b68d..754020dab 100644 --- a/data/SampleData/Ccda/170.314B2_Amb_CCD.ccda +++ b/data/SampleData/Ccda/170.314B2_Amb_CCD.ccda @@ -1027,7 +1027,7 @@ - + Codeine diff --git a/data/SampleData/Ccda/C-CDA_R2-1_CCD.xml.ccda b/data/SampleData/Ccda/C-CDA_R2-1_CCD.xml.ccda index 695964565..58e9364f5 100644 --- a/data/SampleData/Ccda/C-CDA_R2-1_CCD.xml.ccda +++ b/data/SampleData/Ccda/C-CDA_R2-1_CCD.xml.ccda @@ -692,7 +692,7 @@ - + @@ -2626,7 +2626,7 @@ - + diff --git a/data/SampleData/Ccda/Consultation_Note.ccda b/data/SampleData/Ccda/Consultation_Note.ccda index 11ecf27e4..f657df350 100644 --- a/data/SampleData/Ccda/Consultation_Note.ccda +++ b/data/SampleData/Ccda/Consultation_Note.ccda @@ -398,7 +398,7 @@ ALLERGIES AND INTOLERANCES SECTION (ENTRIES REQUIRED) V2 - + diff --git a/data/SampleData/Ccda/Discharge_Summary.ccda b/data/SampleData/Ccda/Discharge_Summary.ccda index 8294d341a..409a7515b 100644 --- a/data/SampleData/Ccda/Discharge_Summary.ccda +++ b/data/SampleData/Ccda/Discharge_Summary.ccda @@ -737,7 +737,7 @@
- + DISCHARGE DIAGNOSIS Appendicitis diff --git a/data/SampleData/Ccda/Progress_Note.ccda b/data/SampleData/Ccda/Progress_Note.ccda index 531e6cf35..4448ec308 100644 --- a/data/SampleData/Ccda/Progress_Note.ccda +++ b/data/SampleData/Ccda/Progress_Note.ccda @@ -475,7 +475,7 @@ Allergies, Adverse Reactions, Alerts - + diff --git a/data/SampleData/Ccda/Referral_Note.ccda b/data/SampleData/Ccda/Referral_Note.ccda index e7d147842..5a2a8e6fe 100644 --- a/data/SampleData/Ccda/Referral_Note.ccda +++ b/data/SampleData/Ccda/Referral_Note.ccda @@ -27,7 +27,7 @@ - + Referral Note @@ -560,7 +560,7 @@ ALLERGIES AND INTOLERANCES SECTION V2 - + diff --git a/data/SampleData/Ccda/Transfer_Summary.ccda b/data/SampleData/Ccda/Transfer_Summary.ccda index bd18df90f..98724fbc8 100644 --- a/data/SampleData/Ccda/Transfer_Summary.ccda +++ b/data/SampleData/Ccda/Transfer_Summary.ccda @@ -532,7 +532,7 @@ ALLERGIES AND INTOLERANCES SECTION (ENTRIES REQUIRED) V2 - @@ -1321,7 +1321,7 @@ HOSPITAL DISCHARGE DIAGNOSIS SECTION V2
- Hospital Discharge Diagnosis .Kidney Malrotation. Discharged August 1, 2013 diff --git a/data/Templates/Ccda/Entry/HospitalDischargeMedication/_entry_act_entryRelationship.liquid b/data/Templates/Ccda/Entry/HospitalDischargeMedication/_entry_act_entryRelationship.liquid index ba10ee2d1..34ba6aa49 100644 --- a/data/Templates/Ccda/Entry/HospitalDischargeMedication/_entry_act_entryRelationship.liquid +++ b/data/Templates/Ccda/Entry/HospitalDischargeMedication/_entry_act_entryRelationship.liquid @@ -2,8 +2,10 @@ {% include 'Resource/MedicationAdministration' medicationAdministration: relationship.substanceAdministration, ID: substanceAdministrationId -%} {% assign manufacturedMaterialId = relationship.substanceAdministration.consumable.manufacturedProduct.manufacturedMaterial | to_json_string | generate_uuid -%} {% include 'Resource/Medication' medication: relationship.substanceAdministration.consumable.manufacturedProduct.manufacturedMaterial, ID: manufacturedMaterialId -%} -{% assign organizationId = relationship.substanceAdministration.performer.assignedEntity.representedOrganization | to_json_string | generate_uuid -%} -{% include 'Resource/Organization' organization: relationship.substanceAdministration.performer.assignedEntity.representedOrganization, ID: organizationId -%} +{% if relationship.substanceAdministration.performer.assignedEntity.representedOrganization -%} + {% assign organizationId = relationship.substanceAdministration.performer.assignedEntity.representedOrganization | to_json_string | generate_uuid -%} + {% include 'Resource/Organization' organization: relationship.substanceAdministration.performer.assignedEntity.representedOrganization, ID: organizationId -%} +{% endif -%} {% include 'Reference/MedicationAdministration/Subject' ID: substanceAdministrationId, REF: fullPatientId -%} {% assign fullManufacturedMaterialId = manufacturedMaterialId | prepend: 'Medication/' -%} {% include 'Reference/MedicationAdministration/MedicationReference' ID: substanceAdministrationId, REF: fullManufacturedMaterialId -%} diff --git a/data/Templates/Ccda/Header.liquid b/data/Templates/Ccda/Header.liquid index 1ef34159a..db3d12918 100644 --- a/data/Templates/Ccda/Header.liquid +++ b/data/Templates/Ccda/Header.liquid @@ -12,13 +12,12 @@ {% include 'Resource/Encounter' encounter: msg.ClinicalDocument.componentOf.encompassingEncounter ID: encounterId -%} {% assign fullEncounterId = encounterId | prepend: 'Encounter/' -%} {% include 'Reference/Composition/Encounter' ID: compositionId, REF: fullEncounterId -%} -{% endif -%} - -{% if msg.ClinicalDocument.componentOf.encompassingEncounter.location -%} - {% assign locationId = msg.ClinicalDocument.componentOf.encompassingEncounter.location | to_json_string | generate_uuid -%} - {% include 'Resource/Location' location: msg.ClinicalDocument.componentOf.encompassingEncounter.location ID: locationId -%} - {% assign fullLocationId = locationId | prepend: 'Location/' -%} - {% include 'Reference/Encounter/Location_Location' ID: encounterId, REF: fullLocationId -%} + {% if msg.ClinicalDocument.componentOf.encompassingEncounter.location -%} + {% assign locationId = msg.ClinicalDocument.componentOf.encompassingEncounter.location | to_json_string | generate_uuid -%} + {% include 'Resource/Location' location: msg.ClinicalDocument.componentOf.encompassingEncounter.location ID: locationId -%} + {% assign fullLocationId = locationId | prepend: 'Location/' -%} + {% include 'Reference/Encounter/Location_Location' ID: encounterId, REF: fullLocationId -%} + {% endif -%} {% endif -%} {% if msg.ClinicalDocument.custodian.assignedCustodian.representedCustodianOrganization.name._ -%} @@ -46,7 +45,7 @@ {% endif -%} {% endif -%} - {% if author.assignedAuthor -%} + {% if author.assignedAuthor.assignedPerson -%} {% evaluate practitionerId using 'Utils/GenerateId' obj: author.assignedAuthor -%} {% include 'Resource/Practitioner' practitioner: author.assignedAuthor ID: practitionerId -%} {% assign fullPractitionerId = practitionerId | prepend: 'Practitioner/' -%} diff --git a/data/Templates/Ccda/Resource/_AllergyIntolerance.liquid b/data/Templates/Ccda/Resource/_AllergyIntolerance.liquid index aacf5c3b7..506885437 100644 --- a/data/Templates/Ccda/Resource/_AllergyIntolerance.liquid +++ b/data/Templates/Ccda/Resource/_AllergyIntolerance.liquid @@ -16,7 +16,7 @@ [ { "system": "http://terminology.hl7.org/CodeSystem/allergyintolerance-clinical", - "code":{% include 'ValueSet/AllergyStatus' code: allergyStatus.code -%}, + "code":"{{ allergyStatus.code | get_property: 'ValueSet/AllergyStatus' }}", } ] }, @@ -31,7 +31,6 @@ "substance":{ {% include 'DataType/CodeableConcept' CodeableConcept: allergyEntry.participant.participantRole.playingEntity.code -%} }, {% endif -%} - {% if r.observation.templateId | to_json_string | contains: '"2.16.840.1.113883.10.20.22.4.9"' -%} "manifestation": [ @@ -43,14 +42,15 @@ ], "onset": "{{ r.observation.effectiveTime.low.value | format_as_date_time }}", {% endif -%} - - {% if r.observation.templateId | to_json_string | contains: '"2.16.840.1.113883.10.20.22.4.8"' -%} - {% if r.observation.value.translation -%} - "severity":{% include 'ValueSet/AllergySeverity' code: r.observation.value.translation.displayName -%}, - {% else -%} - "severity":{% include 'ValueSet/AllergySeverity' code: r.observation.value.displayName -%}, + {% for templateId in r.observation.templateId -%} + {% if templateId.root == "2.16.840.1.113883.10.20.22.4.8" -%} + {% if r.observation.value.translation -%} + "severity":"{{ r.observation.value.translation.displayName | downcase | get_property: 'ValueSet/AllergySeverity' }}", + {% else -%} + "severity":"{{ r.observation.value.displayName | downcase | get_property: 'ValueSet/AllergySeverity' }}", + {% endif -%} {% endif -%} - {% endif -%} + {% endfor -%} }, {% endfor -%} diff --git a/data/Templates/Ccda/Resource/_Composition.liquid b/data/Templates/Ccda/Resource/_Composition.liquid index 3164c37a8..b36de11e9 100644 --- a/data/Templates/Ccda/Resource/_Composition.liquid +++ b/data/Templates/Ccda/Resource/_Composition.liquid @@ -40,6 +40,7 @@ "period": { "start":"{{ composition.documentationOf.serviceEvent.effectiveTime.low.value | format_as_date_time }}", + "end":"{{ composition.documentationOf.serviceEvent.effectiveTime.high.value | format_as_date_time }}", }, }, ], @@ -47,28 +48,29 @@ [ {% assign components = composition.component.structuredBody.component | to_array -%} {% for component in components -%} - { - {% if component.section.title._ -%} - "title":"{{ component.section.title._ }}", - {% endif -%} - {% if component.section.title._ == null -%} - "title":"{{ component.section.code.displayName }}", - {% endif -%} - "text": - { - "status":"generated", + { + {% if component.section -%} {% if component.section.title._ -%} - "div":"
{{ component.section.title._ }}
", + "title":"{{ component.section.title._ }}", {% endif -%} {% if component.section.title._ == null -%} - "div":"
{{ component.section.code.displayName }}
", + "title":"{{ component.section.code.displayName }}", {% endif -%} - }, - "code": - { - {% include 'DataType/CodeableConcept' CodeableConcept: component.section.code -%} - }, - "mode":"snapshot", + "text": + { + "status":"generated", + {% if component.section.title._ -%} + "div":"
{{ component.section.title._ | escape }}
", + {% else -%} + "div":"
{{ component.section.code.displayName | escape }}
", + {% endif -%} + }, + "code": + { + {% include 'DataType/CodeableConcept' CodeableConcept: component.section.code -%} + }, + "mode":"snapshot", + {% endif -%} }, {% endfor -%} ], diff --git a/data/Templates/Ccda/Resource/_Encounter.liquid b/data/Templates/Ccda/Resource/_Encounter.liquid index eb7993132..f6be8de8b 100644 --- a/data/Templates/Ccda/Resource/_Encounter.liquid +++ b/data/Templates/Ccda/Resource/_Encounter.liquid @@ -19,10 +19,6 @@ {% include 'DataType/Coding' Coding: encounter.code -%} {% endif -%} }, - "type": - [ - { {% include 'DataType/CodeableConcept' CodeableConcept: encounter.code -%} }, - ], "identifier": [ {% assign ids = encounter.id | to_array -%} diff --git a/data/Templates/Ccda/Resource/_Immunization.liquid b/data/Templates/Ccda/Resource/_Immunization.liquid index 872de48fb..ad27a394d 100644 --- a/data/Templates/Ccda/Resource/_Immunization.liquid +++ b/data/Templates/Ccda/Resource/_Immunization.liquid @@ -29,13 +29,17 @@ {% assign manufacturedProducts = consumable.manufacturedProduct | to_array -%} {% for manufacturedProduct in manufacturedProducts -%} {% if manufacturedProduct.templateId | to_json_string | contains '"2.16.840.1.113883.10.20.22.4.54"' -%} - "vaccineCode":{ {% include 'DataType/CodeableConcept' CodeableConcept: manufacturedProduct.manufacturedMaterial.code -%} }, + {% if manufacturedProduct.manufacturedMaterial.code.translation -%} + "vaccineCode":{ {% include 'DataType/CodeableConcept' CodeableConcept: manufacturedProduct.manufacturedMaterial.code.translation -%} }, + {% else -%} + "vaccineCode":{ {% include 'DataType/CodeableConcept' CodeableConcept: manufacturedProduct.manufacturedMaterial.code -%} }, + {% endif -%} "lotNumber":"{{ manufacturedProduct.manufacturedMaterial.IotNumberText._ }}", {% endif -%} {% endfor -%} {% endfor -%} - "status":"{{immunization.statusCode.code}}", + "status":"{{immunization.statusCode.code | get_property: 'ValueSet/ImmunizationStatus' }}", "route":{ {% include 'DataType/CodeableConcept' CodeableConcept: immunization.routeCode -%}}, "site":{ {% include 'DataType/CodeableConcept' CodeableConcept: immunization.approachSiteCode -%} }, }, diff --git a/data/Templates/Ccda/Resource/_MedicationAdministration.liquid b/data/Templates/Ccda/Resource/_MedicationAdministration.liquid index 1cdfa29a9..3df98bf71 100644 --- a/data/Templates/Ccda/Resource/_MedicationAdministration.liquid +++ b/data/Templates/Ccda/Resource/_MedicationAdministration.liquid @@ -10,11 +10,12 @@ { {% include 'DataType/Identifier' Identifier: id -%} }, {% endfor -%} ], - "status":"{{ medicationAdministration.statusCode.code }}", + "status":"{{ medicationAdministration.statusCode.code | get_property: 'ValueSet/MedicationAdministrationStatus' }}", "effectivePeriod": { - "start":"{{ medicationAdministration.effectiveTime.low.value | format_as_date_time }}", - "end":"{{ medicationAdministration.effectiveTime.high.value | format_as_date_time }}", + {% assign effectiveTimes = medicationAdministration.effectiveTime | to_array -%} + "start":"{{ effectiveTimes.first.low.value | format_as_date_time }}", + "end":"{{ effectiveTimes.first.high.value | format_as_date_time }}", }, "dosage": { diff --git a/data/Templates/Ccda/Resource/_Patient.liquid b/data/Templates/Ccda/Resource/_Patient.liquid index c250f0d12..bc06fa8cf 100644 --- a/data/Templates/Ccda/Resource/_Patient.liquid +++ b/data/Templates/Ccda/Resource/_Patient.liquid @@ -25,7 +25,7 @@ {% endfor -%} ], "birthDate":"{{ patientRole.patient.birthTime.value | add_hyphens_date }}", - "gender":"{{ patientRole.patient.administrativeGenderCode.displayName | downcase }}", + "gender":"{{ patientRole.patient.administrativeGenderCode.code | get_property: 'ValueSet/Gender' }}", "extension": [ { {% include 'Extension/Race' Race: patientRole.patient -%} }, @@ -56,8 +56,8 @@ [ { "system":"urn:ietf:bcp:47", - "code":"{{ languageCommunication.languageCode.code }}", - "display":"{{ languageCommunication.languageCode.code | downcase | get_property: 'ValueSet/Language' }}", + "code":"{{ languageCommunication.languageCode.code | downcase | get_property: 'ValueSet/Language', , 'code' }}", + "display":"{{ languageCommunication.languageCode.code | downcase | get_property: 'ValueSet/Language', , 'display' }}", }, ], }, diff --git a/data/Templates/Ccda/Resource/_Procedure.liquid b/data/Templates/Ccda/Resource/_Procedure.liquid index e3a442749..b8129ca0c 100644 --- a/data/Templates/Ccda/Resource/_Procedure.liquid +++ b/data/Templates/Ccda/Resource/_Procedure.liquid @@ -17,14 +17,17 @@ "status":"{{ procedureEntry.statusCode.code }}", "code": { - {% if procedureEntry.code.translation -%} - {% include 'DataType/CodeableConcept' CodeableConcept: procedureEntry.code.translation -%} - {% endif -%} - {% if procedureEntry.code.translation == null -%} {% include 'DataType/CodeableConcept' CodeableConcept: procedureEntry.code -%} - {% endif -%} }, - "performedDateTime":"{{ procedureEntry.effectiveTime.value | format_as_date_time }}", + {% if procedureEntry.effectiveTime.value -%} + "performedDateTime":"{{ procedureEntry.effectiveTime.value | format_as_date_time }}", + {% else -%} + "performedPeriod": + { + "start":"{{ procedureEntry.effectiveTime.low.value | format_as_date_time }}", + "end":"{{ procedureEntry.effectiveTime.high.value | format_as_date_time }}", + }, + {% endif -%} "bodySite": [ { {% include 'DataType/CodeableConcept' CodeableConcept: procedureEntry.targetSiteCode -%} }, diff --git a/data/Templates/Ccda/Resource/_ServiceRequest.liquid b/data/Templates/Ccda/Resource/_ServiceRequest.liquid index c5c4061d3..d503c5c0c 100644 --- a/data/Templates/Ccda/Resource/_ServiceRequest.liquid +++ b/data/Templates/Ccda/Resource/_ServiceRequest.liquid @@ -20,8 +20,8 @@ {% include 'DataType/CodeableConcept' CodeableConcept: serviceEntry.code -%} {% endif -%} }, - "priority":"{{ serviceEntry.priorityCode.displayName }}", - "occuranceDateTime":"{{serviceEntry.effectiveTime.value | format_as_date_time }}", + "priority":"{{ serviceEntry.priorityCode.code | get_property: 'ValueSet/ServiceRequestPriority' }}", + "occurrenceDateTime":"{{serviceEntry.effectiveTime.value | format_as_date_time }}", }, "request":{ "method":"PUT", diff --git a/data/Templates/Ccda/Section/_HospitalAdmissionDiagnosis.liquid b/data/Templates/Ccda/Section/_HospitalAdmissionDiagnosis.liquid index 9523fc4a6..965a133ef 100644 --- a/data/Templates/Ccda/Section/_HospitalAdmissionDiagnosis.liquid +++ b/data/Templates/Ccda/Section/_HospitalAdmissionDiagnosis.liquid @@ -1,2 +1,2 @@ {% assign firstSections = msg | get_first_ccda_sections_by_template_id: '2.16.840.1.113883.10.20.22.4.34' -%} -{{ firstSections.2_16_840_1_113883_10_20_22_4_34.entry | to_array | batch_render: 'Entry/_HospitalAdmissionDiagnosis/entry', 'entry' }} \ No newline at end of file +{{ firstSections.2_16_840_1_113883_10_20_22_4_34.entry | to_array | batch_render: 'Entry/HospitalAdmissionDiagnosis/entry', 'entry' }} \ No newline at end of file diff --git a/data/Templates/Ccda/ValueSet/ValueSet.json b/data/Templates/Ccda/ValueSet/ValueSet.json index 65d23d5e5..b6ffdceef 100644 --- a/data/Templates/Ccda/ValueSet/ValueSet.json +++ b/data/Templates/Ccda/ValueSet/ValueSet.json @@ -15,6 +15,9 @@ }, "BAD": { "code": "old" + }, + "__default__": { + "code": "" } }, "ValueSet/AllergyCategory": { @@ -41,6 +44,9 @@ }, "419199007": { "code": "other" + }, + "__default__": { + "code": "" } }, "ValueSet/AllergySeverity": { @@ -55,6 +61,9 @@ }, "mild": { "code": "mild" + }, + "__default__": { + "code": "" } }, "ValueSet/AllergyStatus": { @@ -69,6 +78,9 @@ }, "suspended": { "code": "inactive" + }, + "__default__": { + "code": "" } }, "ValueSet/CompositionStatus": { @@ -95,47 +107,20 @@ }, "error": { "code": "entered-in-error" + }, + "__default__": { + "code": "" } }, "ValueSet/DiagnosticReportStatus": { - "registered": { - "code": "registered" - }, - "received": { - "code": "registered" - }, - "preliminary": { - "code": "preliminary" - }, - "final": { - "code": "final" - }, "completed": { "code": "final" }, - "amended": { - "code": "amended" - }, - "corrected": { - "code": "corrected" - }, - "appended": { - "code": "appended" - }, "cancelled": { "code": "cancelled" }, - "abandoned": { - "code": "cancelled" - }, - "entered-in-error": { - "code": "entered-in-error" - }, - "error": { - "code": "entered-in-error" - }, - "unknown": { - "code": "unknown" + "__default__": { + "code": "" } }, "ValueSet/EncounterStatus": { @@ -183,6 +168,9 @@ }, "unknown": { "code": "unknown" + }, + "__default__": { + "code": "" } }, "ValueSet/EventStatus": { @@ -230,6 +218,9 @@ }, "unknown": { "code": "unknown" + }, + "__default__": { + "code": "" } }, "ValueSet/FMStatus": { @@ -250,49 +241,129 @@ }, "draft": { "code": "draft" + }, + "__default__": { + "code": "" + } + }, + "ValueSet/Gender": { + "F": { + "code": "female" + }, + "M": { + "code": "male" + }, + "UN": { + "code": "unknown" + }, + "__default__": { + "code": "" + } + }, + "ValueSet/ImmunizationStatus": { + "cancelled": { + "code": "not-done" + }, + "completed": { + "code": "completed" + }, + "__default__": { + "code": "" } }, "ValueSet/Language": { "en": { - "code": "English" + "code": "en", + "display": "English" + }, + "eng": { + "code": "en", + "display": "English" }, "en-au": { - "code": "English (Australia)" + "code": "en-au", + "display": "English (Australia)" }, "en-ca": { - "code": "English (Canada)" + "code": "en-ca", + "display": "English (Canada)" }, "en-in": { - "code": "English (India)" + "code": "en-in", + "display": "English (India)" }, "en-gb": { - "code": "English (Great Britain)" + "code": "en-gb", + "display": "English (Great Britain)" }, "en-nz": { - "code": "English (New Zeland)" + "code": "en-nz", + "display": "English (New Zeland)" }, "en-sg": { - "code": "English (Singapore)" + "code": "en-sg", + "display": "English (Singapore)" }, "en-us": { - "code": "English (United States)" + "code": "en-us", + "display": "English (United States)" }, "es": { - "code": "Spanish" + "code": "es", + "display": "Spanish" }, "de": { - "code": "German" + "code": "de", + "display": "German" }, "da": { - "code": "Danish" + "code": "da", + "display": "Danish" }, "fr": { - "code": "French" + "code": "fr", + "display": "French" + }, + "it": { + "code": "it", + "display": "Italian" + }, + "ita": { + "code": "it", + "display": "Italian" + }, + "spa": { + "code": "es", + "display": "Spanish" + }, + "__default__": { + "code": "", + "display": "" + } + }, + "ValueSet/MedicationAdministrationStatus": { + "aborted": { + "code": "stopped" + }, + "active": { + "code": "in-progress" + }, + "completed": { + "code": "completed" + }, + "suspended": { + "code": "on-hold" + }, + "__default__": { + "code": "" } }, "ValueSet/MedicationStatementStatus": { "aborted": { "code": "stopped" + }, + "__default__": { + "code": "" } }, "ValueSet/NameUse": { @@ -304,6 +375,9 @@ }, "P": { "code": "nickname" + }, + "__default__": { + "code": "" } }, "ValueSet/ObservationStatus": { @@ -342,6 +416,9 @@ }, "unknown": { "code": "unknown" + }, + "__default__": { + "code": "" } }, "ValueSet/RequestStatus": { @@ -374,6 +451,23 @@ }, "unknown": { "code": "unknown" + }, + "__default__": { + "code": "" + } + }, + "ValueSet/ServiceRequestPriority": { + "A": { + "code": "asap" + }, + "EM": { + "code": "stat" + }, + "R": { + "code": "routine" + }, + "__default__": { + "code": "" } }, "ValueSet/TelecomUse": { @@ -394,6 +488,9 @@ }, "MC": { "code": "mobile" + }, + "__default__": { + "code": "" } } } diff --git a/data/Templates/Ccda/ValueSet/_AddressUse.liquid b/data/Templates/Ccda/ValueSet/_AddressUse.liquid index 60ee69d9c..5901269da 100644 --- a/data/Templates/Ccda/ValueSet/_AddressUse.liquid +++ b/data/Templates/Ccda/ValueSet/_AddressUse.liquid @@ -10,5 +10,5 @@ {% when "BAD" -%} "old", {% else -%} - "{{ code }}", -{% endcase %} \ No newline at end of file + "", +{% endcase -%} \ No newline at end of file diff --git a/data/Templates/Ccda/ValueSet/_AllergyCategory.liquid b/data/Templates/Ccda/ValueSet/_AllergyCategory.liquid index 917dd64db..846311849 100644 --- a/data/Templates/Ccda/ValueSet/_AllergyCategory.liquid +++ b/data/Templates/Ccda/ValueSet/_AllergyCategory.liquid @@ -16,7 +16,7 @@ {% when "419199007" -%} "other", {% else -%} - "{{ code }}", + "", {% endcase %} diff --git a/data/Templates/Ccda/ValueSet/_AllergySeverity.liquid b/data/Templates/Ccda/ValueSet/_AllergySeverity.liquid index 0df933778..86b80d085 100644 --- a/data/Templates/Ccda/ValueSet/_AllergySeverity.liquid +++ b/data/Templates/Ccda/ValueSet/_AllergySeverity.liquid @@ -9,5 +9,5 @@ {% when "mild" -%} "mild", {% else -%} - "{{ code }}", -{% endcase %} \ No newline at end of file + "", +{% endcase -%} \ No newline at end of file diff --git a/data/Templates/Ccda/ValueSet/_AllergyStatus.liquid b/data/Templates/Ccda/ValueSet/_AllergyStatus.liquid index df649ef70..cadc0fc0b 100644 --- a/data/Templates/Ccda/ValueSet/_AllergyStatus.liquid +++ b/data/Templates/Ccda/ValueSet/_AllergyStatus.liquid @@ -8,5 +8,5 @@ {% when "suspended" -%} "inactive", {% else -%} - "{{ code }}", + "", {% endcase -%} \ No newline at end of file diff --git a/data/Templates/Ccda/ValueSet/_CompositionStatus.liquid b/data/Templates/Ccda/ValueSet/_CompositionStatus.liquid index 576f7a46a..5619a7052 100644 --- a/data/Templates/Ccda/ValueSet/_CompositionStatus.liquid +++ b/data/Templates/Ccda/ValueSet/_CompositionStatus.liquid @@ -16,5 +16,5 @@ {% when "error" -%} "entered-in-error", {% else -%} - "{{ code }}", + "", {% endcase -%} \ No newline at end of file diff --git a/data/Templates/Ccda/ValueSet/_DiagnosticReportStatus.liquid b/data/Templates/Ccda/ValueSet/_DiagnosticReportStatus.liquid index fe1dc9ea3..80e7ee251 100644 --- a/data/Templates/Ccda/ValueSet/_DiagnosticReportStatus.liquid +++ b/data/Templates/Ccda/ValueSet/_DiagnosticReportStatus.liquid @@ -1,30 +1,8 @@ {% case code -%} - {% when "registered" -%} - "registered", - {% when "received" -%} - "registered", - {% when "preliminary" -%} - "preliminary", - {% when "final" -%} + {% when "completed " -%} "final", - {% when "completed" -%} - "final", - {% when "amended" -%} - "amended", - {% when "corrected" -%} - "corrected", - {% when "appended" -%} - "appended", {% when "cancelled" -%} "cancelled", - {% when "abandoned" -%} - "cancelled", - {% when "entered-in-error" -%} - "entered-in-error", - {% when "error" -%} - "entered-in-error", - {% when "unknown" -%} - "unknown", {% else -%} - "{{ code }}", + "", {% endcase -%} \ No newline at end of file diff --git a/data/Templates/Ccda/ValueSet/_EncounterStatus.liquid b/data/Templates/Ccda/ValueSet/_EncounterStatus.liquid index f321b20e8..cf8da5b62 100644 --- a/data/Templates/Ccda/ValueSet/_EncounterStatus.liquid +++ b/data/Templates/Ccda/ValueSet/_EncounterStatus.liquid @@ -30,5 +30,5 @@ {% when "unknown" -%} "unknown", {% else -%} - "{{ code }}", + "", {% endcase -%} \ No newline at end of file diff --git a/data/Templates/Ccda/ValueSet/_EventStatus.liquid b/data/Templates/Ccda/ValueSet/_EventStatus.liquid index 2cc79b8bd..7204710a8 100644 --- a/data/Templates/Ccda/ValueSet/_EventStatus.liquid +++ b/data/Templates/Ccda/ValueSet/_EventStatus.liquid @@ -30,5 +30,5 @@ {% when "unknown" -%} "unknown", {% else -%} - "{{ code }}", + "", {% endcase -%} \ No newline at end of file diff --git a/data/Templates/Ccda/ValueSet/_FMStatus.liquid b/data/Templates/Ccda/ValueSet/_FMStatus.liquid index b7dc8968d..11b30a274 100644 --- a/data/Templates/Ccda/ValueSet/_FMStatus.liquid +++ b/data/Templates/Ccda/ValueSet/_FMStatus.liquid @@ -12,5 +12,5 @@ {% when "draft" -%} "draft", {% else -%} - "{{ code }}", + "", {% endcase -%} \ No newline at end of file diff --git a/data/Templates/Ccda/ValueSet/_Gender.liquid b/data/Templates/Ccda/ValueSet/_Gender.liquid new file mode 100644 index 000000000..a4363acff --- /dev/null +++ b/data/Templates/Ccda/ValueSet/_Gender.liquid @@ -0,0 +1,10 @@ +{% case code -%} + {% when "F" -%} + "female", + {% when "M" -%} + "male", + {% when "UN" -%} + "unknown", + {% else -%} + "", +{% endcase -%} \ No newline at end of file diff --git a/data/Templates/Ccda/ValueSet/_ImmunizationStatus.liquid b/data/Templates/Ccda/ValueSet/_ImmunizationStatus.liquid new file mode 100644 index 000000000..450816c0d --- /dev/null +++ b/data/Templates/Ccda/ValueSet/_ImmunizationStatus.liquid @@ -0,0 +1,8 @@ +{% case code -%} + {% when "cancelled" -%} + "not-done", + {% when "completed " -%} + "completed", + {% else -%} + "", +{% endcase -%} \ No newline at end of file diff --git a/data/Templates/Ccda/ValueSet/_Language.liquid b/data/Templates/Ccda/ValueSet/_Language.liquid index b7a8578da..bd4f3cfde 100644 --- a/data/Templates/Ccda/ValueSet/_Language.liquid +++ b/data/Templates/Ccda/ValueSet/_Language.liquid @@ -25,5 +25,5 @@ {% when "fr" -%} "French", {% else -%} - "{{ code }}", + "", {% endcase -%} \ No newline at end of file diff --git a/data/Templates/Ccda/ValueSet/_MedicationAdministrationStatus.liquid b/data/Templates/Ccda/ValueSet/_MedicationAdministrationStatus.liquid new file mode 100644 index 000000000..9ac42f7a5 --- /dev/null +++ b/data/Templates/Ccda/ValueSet/_MedicationAdministrationStatus.liquid @@ -0,0 +1,12 @@ +{% case code -%} + {% when "aborted " -%} + "stopped", + {% when "active" -%} + "in-progress", + {% when "completed" -%} + "completed", + {% when "suspended" -%} + "on-hold", + {% else -%} + "", +{% endcase -%} \ No newline at end of file diff --git a/data/Templates/Ccda/ValueSet/_MedicationStatementStatus.liquid b/data/Templates/Ccda/ValueSet/_MedicationStatementStatus.liquid index d26763326..d71b47ab7 100644 --- a/data/Templates/Ccda/ValueSet/_MedicationStatementStatus.liquid +++ b/data/Templates/Ccda/ValueSet/_MedicationStatementStatus.liquid @@ -3,5 +3,5 @@ {% when "aborted" -%} "stopped", {% else -%} - "{{ code }}", + "", {% endcase -%} \ No newline at end of file diff --git a/data/Templates/Ccda/ValueSet/_NameUse.liquid b/data/Templates/Ccda/ValueSet/_NameUse.liquid index a364c7151..4aba3ad5d 100644 --- a/data/Templates/Ccda/ValueSet/_NameUse.liquid +++ b/data/Templates/Ccda/ValueSet/_NameUse.liquid @@ -6,5 +6,5 @@ {% when "P" -%} "nickname", {% else -%} - "{{ code }}", + "", {% endcase -%} \ No newline at end of file diff --git a/data/Templates/Ccda/ValueSet/_ObservationStatus.liquid b/data/Templates/Ccda/ValueSet/_ObservationStatus.liquid index d9ba57019..66b513750 100644 --- a/data/Templates/Ccda/ValueSet/_ObservationStatus.liquid +++ b/data/Templates/Ccda/ValueSet/_ObservationStatus.liquid @@ -24,5 +24,5 @@ {% when "unknown" -%} "unknown", {% else -%} - "{{ code }}", + "", {% endcase -%} \ No newline at end of file diff --git a/data/Templates/Ccda/ValueSet/_RequestStatus.liquid b/data/Templates/Ccda/ValueSet/_RequestStatus.liquid index ca6c914b0..8fb1d412c 100644 --- a/data/Templates/Ccda/ValueSet/_RequestStatus.liquid +++ b/data/Templates/Ccda/ValueSet/_RequestStatus.liquid @@ -20,5 +20,5 @@ {% when "unknown" -%} "unknown", {% else -%} - "{{ code }}", + "", {% endcase -%} \ No newline at end of file diff --git a/data/Templates/Ccda/ValueSet/_ServiceRequestPriority.liquid b/data/Templates/Ccda/ValueSet/_ServiceRequestPriority.liquid new file mode 100644 index 000000000..9d53655ee --- /dev/null +++ b/data/Templates/Ccda/ValueSet/_ServiceRequestPriority.liquid @@ -0,0 +1,10 @@ +{% case code -%} + {% when "A " -%} + "asap", + {% when "EM" -%} + "stat", + {% when "R" -%} + "routine", + {% else -%} + "", +{% endcase -%} \ No newline at end of file diff --git a/data/Templates/Ccda/ValueSet/_SystemReference.liquid b/data/Templates/Ccda/ValueSet/_SystemReference.liquid index d7d94ec2d..2bf8b6d91 100644 --- a/data/Templates/Ccda/ValueSet/_SystemReference.liquid +++ b/data/Templates/Ccda/ValueSet/_SystemReference.liquid @@ -22,7 +22,11 @@ {% when "2.16.840.1.113883.6.59" -%} "http://hl7.org/fhir/sid/cvx" {% when "2.16.840.1.113883.6.101" -%} - "http://nucc.org/provider-taxonomy" + "http://nucc.org/provider-taxonomy" + {% when "2.16.840.1.113883.6.238" -%} + "" + {% when "2.16.840.1.113883.6.12" -%} + "http://www.ama-assn.org/go/cpt" {% else -%} {% if s == 1%} "urn:oid:{{ code }}" diff --git a/data/Templates/Ccda/ValueSet/_TelecomUse.liquid b/data/Templates/Ccda/ValueSet/_TelecomUse.liquid index 779a0be11..014801296 100644 --- a/data/Templates/Ccda/ValueSet/_TelecomUse.liquid +++ b/data/Templates/Ccda/ValueSet/_TelecomUse.liquid @@ -12,5 +12,5 @@ {% when "MC" -%} "mobile", {% else -%} - "{{ code }}", + "", {% endcase -%} \ No newline at end of file diff --git a/release.yml b/release.yml index 1e326ce8c..b434de30e 100644 --- a/release.yml +++ b/release.yml @@ -16,7 +16,7 @@ variables: functionalTests: "**/*FunctionalTests/*.csproj" buildConfiguration: 'Release' major: 4 - minor: 0 + minor: 1 bulidnum: $[counter(format('{0}.{1}',variables['major'],variables['minor']), 100)] revision: $[counter(format('{0:yyyyMMdd}', pipeline.startTime), 1)] version: $(major).$(minor).$(bulidnum).$(revision) diff --git a/src/Microsoft.Health.Fhir.Liquid.Converter.FunctionalTests/RuleBasedTests.cs b/src/Microsoft.Health.Fhir.Liquid.Converter.FunctionalTests/RuleBasedTests.cs index aece3114c..c1f389e70 100644 --- a/src/Microsoft.Health.Fhir.Liquid.Converter.FunctionalTests/RuleBasedTests.cs +++ b/src/Microsoft.Health.Fhir.Liquid.Converter.FunctionalTests/RuleBasedTests.cs @@ -13,7 +13,9 @@ using System.Text.RegularExpressions; using System.Threading.Tasks; using Hl7.Fhir.Serialization; +using Microsoft.Health.Fhir.Liquid.Converter.Ccda; using Microsoft.Health.Fhir.Liquid.Converter.Hl7v2; +using Microsoft.Health.Fhir.Liquid.Converter.Models; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using Xunit; @@ -25,8 +27,12 @@ public class RuleBasedTests { private static readonly string _hl7TemplateFolder = Path.Combine(Constants.TemplateDirectory, "Hl7v2"); private static readonly string _hl7DataFolder = Path.Combine(Constants.SampleDataDirectory, "Hl7v2"); + private static readonly string _ccdaTemplateFolder = Path.Combine(Constants.TemplateDirectory, "Ccda"); + private static readonly string _ccdaDataFolder = Path.Combine(Constants.SampleDataDirectory, "Ccda"); private static readonly Hl7v2TemplateProvider _hl7TemplateProvider = new Hl7v2TemplateProvider(_hl7TemplateFolder); + private static readonly CcdaTemplateProvider _ccdaTemplateProvider = new CcdaTemplateProvider(_ccdaTemplateFolder); + private static readonly FhirJsonParser _fhirParser = new FhirJsonParser(); private static readonly int _maxRevealDepth = 1 << 7; @@ -57,30 +63,104 @@ public static IEnumerable GetHL7V2Cases() { Convert.ToString(item[0]), Path.Combine(_hl7DataFolder, Convert.ToString(item[1])), + DataType.Hl7v2, }); } public static IEnumerable GetCcdaCases() { - return new List(); + var cases = new List + { + new object[] { "CCD", "170.314B2_Amb_CCD.ccda" }, + new object[] { "CCD", "Care_Plan.ccda" }, + new object[] { "CCD", "CCD.ccda" }, + new object[] { "CCD", "C-CDA_R2-1_CCD.xml.ccda" }, + new object[] { "CCD", "CCD-Parent-Document-Replace-C-CDAR2.1.ccda" }, + new object[] { "CCD", "CDA_with_Embedded_PDF.ccda" }, + new object[] { "CCD", "Consultation_Note.ccda" }, + new object[] { "CCD", "Consult-Document-Closing-Referral-C-CDAR2.1.ccda" }, + new object[] { "CCD", "Diagnostic_Imaging_Report.ccda" }, + new object[] { "CCD", "Discharge_Summary.ccda" }, + new object[] { "CCD", "History_and_Physical.ccda" }, + new object[] { "CCD", "Operative_Note.ccda" }, + new object[] { "CCD", "Patient-1.ccda" }, + new object[] { "CCD", "Patient-and-Provider-Organization-Direct-Address-C-CDAR2.1.ccda" }, + new object[] { "CCD", "PROBLEMS_in_Empty_C-CDA_2.1-C-CDAR2.1.ccda" }, + new object[] { "CCD", "Procedure_Note.ccda" }, + new object[] { "CCD", "Progress_Note.ccda" }, + new object[] { "CCD", "Referral_Note.ccda" }, + new object[] { "CCD", "sample.ccda" }, + new object[] { "CCD", "Transfer_Summary.ccda" }, + new object[] { "CCD", "Unstructured_Document_embed.ccda" }, + new object[] { "CCD", "Unstructured_Document_reference.ccda" }, + new object[] { @"ConsultationNote", @"Care_Plan.ccda" }, + new object[] { @"ConsultationNote", @"CDA_with_Embedded_PDF.ccda" }, + new object[] { @"ConsultationNote", @"Consultation_Note.ccda" }, + new object[] { @"ConsultationNote", @"Unstructured_Document_embed.ccda" }, + new object[] { @"DischargeSummary", @"Discharge_Summary.ccda" }, + new object[] { @"DischargeSummary", @"Consult-Document-Closing-Referral-C-CDAR2.1.ccda" }, + new object[] { @"HistoryandPhysical", @"History_and_Physical.ccda" }, + new object[] { @"HistoryandPhysical", @"Diagnostic_Imaging_Report.ccda" }, + new object[] { @"OperativeNote", @"Operative_Note.ccda" }, + new object[] { @"OperativeNote", @"Patient-1.ccda" }, + new object[] { @"ProcedureNote", @"Procedure_Note.ccda" }, + new object[] { @"ProcedureNote", @"Patient-and-Provider-Organization-Direct-Address-C-CDAR2.1.ccda" }, + new object[] { @"ProgressNote", @"Progress_Note.ccda" }, + new object[] { @"ProgressNote", @"PROBLEMS_in_Empty_C-CDA_2.1-C-CDAR2.1.ccda" }, + new object[] { @"ReferralNote", @"Referral_Note.ccda" }, + new object[] { @"ReferralNote", @"sample.ccda" }, + new object[] { @"TransferSummary", @"Transfer_Summary.ccda" }, + new object[] { @"TransferSummary", @"Unstructured_Document_reference.ccda" }, + }; + return cases.Select(item => new object[] + { + Convert.ToString(item[0]), + Path.Combine(_ccdaDataFolder, Convert.ToString(item[1])), + DataType.Ccda, + }); } [Theory] [MemberData(nameof(GetHL7V2Cases))] [MemberData(nameof(GetCcdaCases))] - public async Task CheckOnePatient(string templateName, string samplePath) + public async Task CheckOnePatient(string templateName, string samplePath, DataType dataType) { - var result = await ConvertData(templateName, samplePath); + var result = await ConvertData(templateName, samplePath, dataType); var patients = result.SelectTokens("$.entry[?(@.resource.resourceType == 'Patient')].resource.id"); Assert.Equal(1, patients?.Count()); } + [Theory] + [MemberData(nameof(GetCcdaCases))] + public async Task CheckReferenceResourceId(string templateName, string samplePath, DataType dataType) + { + HashSet referenceResources = new HashSet(); + var result = await ConvertData(templateName, samplePath, dataType); + var resources = result.SelectTokens("$.entry..resource"); + + // Check resource id uniqueness + foreach (var resource in resources) + { + var resourceId = resource.SelectTokens("$.id").First().ToString(); + var resouceType = resource.SelectTokens("$.resourceType").First().ToString(); + var referenceStr = $"{resouceType}/{resourceId}"; + Assert.DoesNotContain(referenceStr, referenceResources); + referenceResources.Add(referenceStr); + } + + // check reference resouce id exists + foreach (var resource in resources) + { + RevealReferences(resource, 0, referenceResources); + } + } + [Theory] [MemberData(nameof(GetHL7V2Cases))] [MemberData(nameof(GetCcdaCases))] - public async Task CheckNonemptyResource(string templateName, string samplePath) + public async Task CheckNonemptyResource(string templateName, string samplePath, DataType dataType) { - var result = await ConvertData(templateName, samplePath); + var result = await ConvertData(templateName, samplePath, dataType); var resources = result.SelectTokens("$.entry..resource"); foreach (var resource in resources) { @@ -93,9 +173,9 @@ public async Task CheckNonemptyResource(string templateName, string samplePath) [Theory] [MemberData(nameof(GetHL7V2Cases))] [MemberData(nameof(GetCcdaCases))] - public async Task CheckNonidenticalResources(string templateName, string samplePath) + public async Task CheckNonidenticalResources(string templateName, string samplePath, DataType dataType) { - var result = await ConvertData(templateName, samplePath); + var result = await ConvertData(templateName, samplePath, dataType); var resourceIds = result.SelectTokens("$.entry..resource.id"); var uniqueResourceIds = resourceIds.Select(Convert.ToString).Distinct(); Assert.Equal(uniqueResourceIds.Count(), resourceIds.Count()); @@ -103,23 +183,24 @@ public async Task CheckNonidenticalResources(string templateName, string sampleP [Theory] [MemberData(nameof(GetHL7V2Cases))] - [MemberData(nameof(GetCcdaCases))] - public async Task CheckValuesRevealInOrigin(string templateName, string samplePath) + public async Task CheckValuesRevealInOrigin(string templateName, string samplePath, DataType dataType) { var sampleContent = await File.ReadAllTextAsync(samplePath, Encoding.UTF8); - var result = await ConvertData(templateName, samplePath); + var result = await ConvertData(templateName, samplePath, dataType); RevealObjectValues(sampleContent, result, 0); } [Theory] [MemberData(nameof(GetHL7V2Cases))] - [MemberData(nameof(GetCcdaCases))] - public async Task CheckPassOfficialValidator(string templateName, string samplePath) + + // comment out the fhir validator for ccda since it takes too much time + // [MemberData(nameof(GetCcdaCases))] + public async Task CheckPassOfficialValidator(string templateName, string samplePath, DataType dataType) { (bool javaStatus, string javaMessage) = await ExecuteCommand("-version"); Assert.True(javaStatus, javaMessage); - var result = await ConvertData(templateName, samplePath); + var result = await ConvertData(templateName, samplePath, dataType); var resultFolder = Path.GetFullPath(Path.Combine(@"AppData", "Temp")); var resultPath = Path.Combine(resultFolder, $"{Guid.NewGuid().ToString("N")}.json"); if (!Directory.Exists(resultFolder)) @@ -133,11 +214,15 @@ public async Task CheckPassOfficialValidator(string templateName, string sampleP var specPath = Path.GetFullPath(Path.Combine(@"ValidatorLib", "hl7.fhir.r4.core-4.0.1.tgz")); var command = $"-jar {validatorPath} {resultPath} -version 4.0.1 -ig {specPath} -tx n/a"; (bool status, string message) = await ExecuteCommand(command); - Assert.False(status, "Currently the templates are still under development. By default we turn off this validator."); if (!status) { + Assert.False(status, "Currently the templates are still under development. By default we turn off this validator."); _output.WriteLine(message); } + else + { + Assert.True(status); + } Directory.Delete(resultFolder, true); } @@ -171,9 +256,9 @@ public async Task CheckParserFunctionality() [Theory] [MemberData(nameof(GetHL7V2Cases))] [MemberData(nameof(GetCcdaCases))] - public async Task CheckPassFhirParser(string templateName, string samplePath) + public async Task CheckPassFhirParser(string templateName, string samplePath, DataType dataType) { - var result = await ConvertData(templateName, samplePath); + var result = await ConvertData(templateName, samplePath, dataType); var jsonResult = JsonConvert.SerializeObject(result, Formatting.Indented); try { @@ -186,9 +271,52 @@ public async Task CheckPassFhirParser(string templateName, string samplePath) } } - private async Task ConvertData(string templateName, string samplePath) - => JObject.Parse(new Hl7v2Processor() + private void RevealReferences(JToken resource, int level, HashSet referenceResources) + { + Assert.True(level < _maxRevealDepth, "Reveal depth shouldn't exceed limit."); + switch (resource) + { + case JArray array: + array.ToList().ForEach(sub => RevealReferences(sub, level + 1, referenceResources)); + break; + case JObject container: + var properties = container.Properties(); + foreach (var property in properties) + { + if (property.Value.Children().Count() > 0) + { + RevealReferences(property.Value, level + 1, referenceResources); + } + else if (property.Name == "reference") + { + var s = property.Value.ToString(); + Assert.Contains(s, referenceResources); + } + } + + break; + case JValue value: + break; + default: + Assert.True(false, $"Unexpected token {resource}, type {resource.Type}"); + break; + } + } + + private async Task ConvertData(string templateName, string samplePath, DataType dataType) + { + switch (dataType) + { + case DataType.Hl7v2: + return JObject.Parse(new Hl7v2Processor() .Convert(await File.ReadAllTextAsync(samplePath, Encoding.UTF8), templateName, _hl7TemplateProvider)); + case DataType.Ccda: + return JObject.Parse(new CcdaProcessor() + .Convert(await File.ReadAllTextAsync(samplePath, Encoding.UTF8), templateName, _ccdaTemplateProvider)); + default: + return null; + } + } private void RevealObjectValues(string origin, JToken resource, int level) { diff --git a/src/Microsoft.Health.Fhir.Liquid.Converter.FunctionalTests/TestData/Expected/Ccda/CCD/170.314B2_Amb_CCD-expected.json b/src/Microsoft.Health.Fhir.Liquid.Converter.FunctionalTests/TestData/Expected/Ccda/CCD/170.314B2_Amb_CCD-expected.json index 6e1fde54c..18f99366f 100644 --- a/src/Microsoft.Health.Fhir.Liquid.Converter.FunctionalTests/TestData/Expected/Ccda/CCD/170.314B2_Amb_CCD-expected.json +++ b/src/Microsoft.Health.Fhir.Liquid.Converter.FunctionalTests/TestData/Expected/Ccda/CCD/170.314B2_Amb_CCD-expected.json @@ -3,10 +3,10 @@ "type": "batch", "entry": [ { - "fullUrl": "urn:uuid:51f8c324-6b9a-bbf6-2242-055efba67d38", + "fullUrl": "urn:uuid:55ae51bf-be65-0fc9-8a12-e6449e33d7db", "resource": { "resourceType": "Composition", - "id": "51f8c324-6b9a-bbf6-2242-055efba67d38", + "id": "55ae51bf-be65-0fc9-8a12-e6449e33d7db", "identifier": { "use": "official", "value": "1.3.6.1.4.1.22812.3.99930.3.1" @@ -36,7 +36,8 @@ "event": [ { "period": { - "start": "2012-08-15T09:00:51" + "start": "2012-08-15T09:00:51", + "end": "2013-01-30T21:00:51+08:00" } } ], @@ -261,15 +262,12 @@ }, { "reference": "Device/20249d1d-01be-7214-0e99-0950cbdbdbbd" - }, - { - "reference": "Practitioner/a6349d55-b0a5-aed7-6b87-caebfa815789" } ] }, "request": { "method": "PUT", - "url": "Composition/51f8c324-6b9a-bbf6-2242-055efba67d38" + "url": "Composition/55ae51bf-be65-0fc9-8a12-e6449e33d7db" } }, { @@ -418,46 +416,6 @@ "url": "Device/20249d1d-01be-7214-0e99-0950cbdbdbbd" } }, - { - "fullUrl": "urn:uuid:a6349d55-b0a5-aed7-6b87-caebfa815789", - "resource": { - "resourceType": "Practitioner", - "id": "a6349d55-b0a5-aed7-6b87-caebfa815789", - "meta": { - "profile": [ - "http://hl7.org/fhir/us/core/StructureDefinition/us-core-practitioner" - ] - }, - "identifier": [ - { - "system": "urn:oid:1.3.6.1.4.1.22812.3.99930.3.3.3", - "value": "3" - } - ], - "address": [ - { - "line": [ - "Get Well Clinic", - "1004 Healthcare Dr." - ], - "city": "Portland", - "state": "OR", - "country": "US", - "postalCode": "97005" - } - ], - "telecom": [ - { - "system": "phone", - "value": "+1-(555)555-1004" - } - ] - }, - "request": { - "method": "PUT", - "url": "Practitioner/a6349d55-b0a5-aed7-6b87-caebfa815789" - } - }, { "fullUrl": "urn:uuid:a656b459-dec5-7b46-77eb-41c20c9a5901", "resource": { @@ -483,6 +441,7 @@ } ], "birthDate": "1962-10-22", + "gender": "male", "extension": [ { "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race", @@ -491,8 +450,7 @@ "url": "ombCategory", "valueCoding": { "code": "2106-3", - "display": "White", - "system": "urn:oid:2.16.840.1.113883.6.238" + "display": "White" } }, { @@ -508,8 +466,7 @@ "url": "ombCategory", "valueCoding": { "code": "2186-5", - "display": "Not Hispanic or Latino", - "system": "urn:oid:2.16.840.1.113883.6.238" + "display": "Not Hispanic or Latino" } }, { @@ -544,8 +501,8 @@ "coding": [ { "system": "urn:ietf:bcp:47", - "code": "eng", - "display": "eng" + "code": "en", + "display": "English" } ] }, @@ -602,8 +559,7 @@ } ] } - ], - "severity": "Active" + ] }, { "substance": { @@ -625,8 +581,7 @@ } ] } - ], - "severity": "Hives" + ] } ], "onsetDateTime": "1998-01-10", @@ -640,10 +595,10 @@ } }, { - "fullUrl": "urn:uuid:68536ec6-7b36-0170-cd60-3cdb7b70cf45", + "fullUrl": "urn:uuid:0823560f-afcc-d264-5c62-2a4ad7dc11cf", "resource": { "resourceType": "AllergyIntolerance", - "id": "68536ec6-7b36-0170-cd60-3cdb7b70cf45", + "id": "0823560f-afcc-d264-5c62-2a4ad7dc11cf", "identifier": [ { "system": "urn:oid:1.3.6.1.4.1.22812.3.99930.3.4.10.2", @@ -667,8 +622,8 @@ "substance": { "coding": [ { - "code": "2670", - "display": "Codeine", + "code": "261000", + "display": "Codeine phosphate", "system": "http://snomed.info/sct" } ] @@ -683,15 +638,14 @@ } ] } - ], - "severity": "Active" + ] }, { "substance": { "coding": [ { - "code": "2670", - "display": "Codeine", + "code": "261000", + "display": "Codeine phosphate", "system": "http://snomed.info/sct" } ] @@ -706,8 +660,7 @@ } ] } - ], - "severity": "Nausea" + ] } ], "onsetDateTime": "2001-01-10T00:00:00", @@ -717,7 +670,7 @@ }, "request": { "method": "PUT", - "url": "AllergyIntolerance/68536ec6-7b36-0170-cd60-3cdb7b70cf45" + "url": "AllergyIntolerance/0823560f-afcc-d264-5c62-2a4ad7dc11cf" } }, { @@ -735,7 +688,6 @@ "value": "659122500007" } ], - "status": "completed", "dosage": [ { "doseAndRate": [ @@ -883,7 +835,7 @@ { "code": "82374", "display": "CO2", - "system": "urn:oid:2.16.840.1.113883.6.12" + "system": "http://www.ama-assn.org/go/cpt" } ] }, @@ -1168,10 +1120,10 @@ } }, { - "fullUrl": "urn:uuid:663b2cfe-5d57-4748-bbc9-48a96c35a7f7", + "fullUrl": "urn:uuid:453a2c11-25b2-6ed5-d292-d0a1abbbc622", "resource": { "resourceType": "DocumentReference", - "id": "663b2cfe-5d57-4748-bbc9-48a96c35a7f7", + "id": "453a2c11-25b2-6ed5-d292-d0a1abbbc622", "type": { "coding": [ { @@ -1181,21 +1133,21 @@ } ] }, - "date": "2021-05-21T05:21:29.32Z", + "date": "2021-07-02T05:38:35.873Z", "status": "current", "content": [ { "attachment": { "contentType": "text/plain", - "data": "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", - "hash": "YjJjYmM0NDkzOTE4NTA3MzFjOGJmZjM4OGNhYTA3MThjZmI2MmQwOA==" + "data": "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", + "hash": "ODE1ZmZkODYwYmRmMmMyMWU1YmEwM2ZhNDY2ODEyZjBkYWEyY2Q5MQ==" } } ] }, "request": { "method": "PUT", - "url": "DocumentReference/663b2cfe-5d57-4748-bbc9-48a96c35a7f7" + "url": "DocumentReference/453a2c11-25b2-6ed5-d292-d0a1abbbc622" } } ] diff --git a/src/Microsoft.Health.Fhir.Liquid.Converter.FunctionalTests/TestData/Expected/Ccda/CCD/C-CDA_R2-1_CCD.xml-expected.json b/src/Microsoft.Health.Fhir.Liquid.Converter.FunctionalTests/TestData/Expected/Ccda/CCD/C-CDA_R2-1_CCD.xml-expected.json index 5aeeb1e68..7a7da9193 100644 --- a/src/Microsoft.Health.Fhir.Liquid.Converter.FunctionalTests/TestData/Expected/Ccda/CCD/C-CDA_R2-1_CCD.xml-expected.json +++ b/src/Microsoft.Health.Fhir.Liquid.Converter.FunctionalTests/TestData/Expected/Ccda/CCD/C-CDA_R2-1_CCD.xml-expected.json @@ -3,10 +3,10 @@ "type": "batch", "entry": [ { - "fullUrl": "urn:uuid:bd76febe-cc5e-47b4-46a8-7048efa8b753", + "fullUrl": "urn:uuid:644cd376-562c-cec0-7960-4c812071966d", "resource": { "resourceType": "Composition", - "id": "bd76febe-cc5e-47b4-46a8-7048efa8b753", + "id": "644cd376-562c-cec0-7960-4c812071966d", "identifier": { "use": "official", "value": "2.16.840.1.113883.19.5.99999.1" @@ -36,7 +36,8 @@ "event": [ { "period": { - "start": "1975-05-01" + "start": "1975-05-01", + "end": "2013-08-15" } } ], @@ -307,7 +308,7 @@ }, "request": { "method": "PUT", - "url": "Composition/bd76febe-cc5e-47b4-46a8-7048efa8b753" + "url": "Composition/644cd376-562c-cec0-7960-4c812071966d" } }, { @@ -447,16 +448,14 @@ "url": "ombCategory", "valueCoding": { "code": "2106-3", - "display": "White", - "system": "urn:oid:2.16.840.1.113883.6.238" + "display": "White" } }, { "url": "ombCategory", "valueCoding": { "code": "2076-8", - "display": "Hawaiian or Other Pacific Islander", - "system": "urn:oid:2.16.840.1.113883.6.238" + "display": "Hawaiian or Other Pacific Islander" } }, { @@ -472,8 +471,7 @@ "url": "ombCategory", "valueCoding": { "code": "2186-5", - "display": "Not Hispanic or Latino", - "system": "urn:oid:2.16.840.1.113883.6.238" + "display": "Not Hispanic or Latino" } }, { @@ -576,10 +574,10 @@ } }, { - "fullUrl": "urn:uuid:a956135e-a0d9-7ffa-39fa-e8116640b0d0", + "fullUrl": "urn:uuid:0c0e7db0-3b2d-307b-7224-dd9ae5e1a5bf", "resource": { "resourceType": "AllergyIntolerance", - "id": "a956135e-a0d9-7ffa-39fa-e8116640b0d0", + "id": "0c0e7db0-3b2d-307b-7224-dd9ae5e1a5bf", "identifier": [ { "system": "urn:ietf:rfc:3986", @@ -599,7 +597,7 @@ "substance": { "coding": [ { - "code": "70618", + "code": "7980", "display": "Penicillin", "system": "http://www.nlm.nih.gov/research/umls/rxnorm" } @@ -622,7 +620,7 @@ "substance": { "coding": [ { - "code": "70618", + "code": "7980", "display": "Penicillin", "system": "http://www.nlm.nih.gov/research/umls/rxnorm" } @@ -639,8 +637,7 @@ ] } ], - "onset": "2008-02-27T00:05:00+08:00", - "severity": "Nausea" + "onset": "2008-02-27T00:05:00+08:00" } ], "onsetDateTime": "1998-05-01", @@ -650,7 +647,7 @@ }, "request": { "method": "PUT", - "url": "AllergyIntolerance/a956135e-a0d9-7ffa-39fa-e8116640b0d0" + "url": "AllergyIntolerance/0c0e7db0-3b2d-307b-7224-dd9ae5e1a5bf" } }, { @@ -693,8 +690,7 @@ } ] } - ], - "severity": "Wheezing" + ] }, { "substance": { @@ -740,7 +736,6 @@ "value": "urn:uuid:cdbd33f0-6cde-11db-9fe1-0800200c9a66" } ], - "status": "active", "dosage": [ { "doseAndRate": [ @@ -842,7 +837,6 @@ "value": "urn:uuid:6c844c75-aa34-411c-b7bd-5e4a9f206e29" } ], - "status": "active", "dosage": [ { "doseAndRate": [ @@ -1488,7 +1482,6 @@ "value": "urn:uuid:122ed3ae-6d9e-43d0-bfa2-434ea34b1426" } ], - "status": "active", "code": { "coding": [ { @@ -1542,7 +1535,6 @@ ] } ], - "status": "active", "code": { "coding": [ { @@ -2207,10 +2199,10 @@ } }, { - "fullUrl": "urn:uuid:8b5ca81e-2e07-f683-5540-b02214070847", + "fullUrl": "urn:uuid:1ecd40a7-abeb-e682-a650-4e24c2ea18c0", "resource": { "resourceType": "Procedure", - "id": "8b5ca81e-2e07-f683-5540-b02214070847", + "id": "1ecd40a7-abeb-e682-a650-4e24c2ea18c0", "meta": { "profile": [ "http://hl7.org/fhir/us/core/StructureDefinition/us-core-procedure" @@ -2237,7 +2229,7 @@ { "coding": [ { - "code": "appropriate_code", + "code": "485005", "display": "colon", "system": "http://snomed.info/sct" } @@ -2257,7 +2249,7 @@ }, "request": { "method": "PUT", - "url": "Procedure/8b5ca81e-2e07-f683-5540-b02214070847" + "url": "Procedure/1ecd40a7-abeb-e682-a650-4e24c2ea18c0" } }, { @@ -2315,7 +2307,6 @@ ] } ], - "status": "aborted", "code": { "coding": [ { @@ -2353,19 +2344,8 @@ "class": { "code": "99213", "display": "Office outpatient visit 15 minutes", - "system": "urn:oid:2.16.840.1.113883.6.12" + "system": "http://www.ama-assn.org/go/cpt" }, - "type": [ - { - "coding": [ - { - "code": "99213", - "display": "Office outpatient visit 15 minutes", - "system": "urn:oid:2.16.840.1.113883.6.12" - } - ] - } - ], "identifier": [ { "system": "urn:ietf:rfc:3986", @@ -3089,8 +3069,7 @@ "system": "urn:ietf:rfc:3986", "value": "urn:uuid:3e676a50-7aac-11db-9fe1-0800200c9a66" } - ], - "status": "completed" + ] }, "request": { "method": "PUT", @@ -3128,10 +3107,10 @@ } }, { - "fullUrl": "urn:uuid:dea4254d-9e3d-cc2b-5008-447871e3f2eb", + "fullUrl": "urn:uuid:963f3838-0961-0382-dc5c-e4853e984ad6", "resource": { "resourceType": "DocumentReference", - "id": "dea4254d-9e3d-cc2b-5008-447871e3f2eb", + "id": "963f3838-0961-0382-dc5c-e4853e984ad6", "type": { "coding": [ { @@ -3141,21 +3120,21 @@ } ] }, - "date": "2021-05-21T05:21:29.584Z", + "date": "2021-07-02T05:38:36.096Z", "status": "current", "content": [ { "attachment": { "contentType": "text/plain", - "data": "H4sIAAAAAAAACu19eXfbSJLn3/UtsJqZXXvGoHAfHpXm0ZRsaUYHS5RcXTtvXj8cCQlrkmDzsK3+9BuROJiJiwAJXdVUdVVLJJBIZEbG8Yvr6D9+TsbCdzJfhNH01wO5Jx0IZOpFfji9//Xg7vazaB38x/ERXiUulo9jsnggZCksH2fk14Ml+bk8/LkYHwgPcxL8ejA46ffwT7jhf4micBsux+SjkPwMoukynK7C5aMQBcLAmRPhJPJWEzJdCu8Gg5P3wudwTKbOJLllIMJwf71RevJf4dseTlMYzImzJL7gPuI1F8506UwdHHmxGsPg98KXebSafRAuLgbC3czHaz/GAwk4kED8kF62JM4EBvjnC2exHDw403vin8DFHwVFknXREmVZkOWPiv5RsgVR0iRJePc78T/Ah0J/dU+vei/8M4zwr1v+CCfhwhs74YTMPwq3D+FCWDiT2ZgIAayB4MFSOeF0IczJbE4WsELOMvxOBHghRyBjgmu2EJbR+nvB2by+PQGelDzBJ7PQgzEc+NNbwtY7Y8F7cOaOtyTz/7MQHogzXj7QB/aE/vQRnrQgE3fsTD2CD3bgA7hlBnQTTQWYvheFUy/0capjfFAkhOPxarGcw7IKzkKYODAIP3/4dBYtFqE7Jh+EJczMG4fT0INhFx7QwTyM4K5HYRotBZcIs7Gzotcmr0HHCqdwY27x4E+8JZwuydQHWuGWKZ41rCbO4APMP8L7ovn62eQ7fkUfsh4YfvPJIryfxuPBdFYL+BUeD1v1/1ZTuoTCjxCWDF8kprhBOuRVtCQL4RxHwjd36MVfVrBave0JSBSPj9InZPsMh2S6+PVgNZ9+fBibYjS///hdPYg//vhzEf568LBczj4eHv748aP3Q+3BBYeKJMmHf7m8GHkPZOKIQHZwqDyS3vU98vIDHsJn6dcLf5n7Hj85OP7lCJd6Moh8JGcfmMXd6OAQPkbOce4LwDnINOY5w+vByV/PTiT40YD7zKNo+esBnFajZ2lST+7JsmpZKvyi0gGQswA5wxmGBUXqOj+BtYCBk79h8MohpJ4C/4MvesoBOwV67CVLlOR4ji2HSqf1ZRy5znj8KKym4d9WQDZ4HsIgJHMhABpD0vDTrcIN/OUo5Fbi9ta2rJoVsHt6z8afXjxPb726qiarqmgfCH64gLk/XgEf/fVgtJpM4CD9PSY5YAuns3CBNyFJHtBbR48LeN2yxxnwFOaSeMSL6/OrQfbClMPjuPQUZu8W7wd+dzyMz5oAXHa+FOL5PB4dxl/+ckSCgMDh+U5ugRUK353xitDdUCVL1mVJlWBXJCl52WkQL6gzBibHUNZV7q2n0XzijDe9nt5T9OL7Dfin0CcD17tfOfeEeSSZigk9L8iSJ+dFi120s5X8GkvgirVM5PPVauICLSXLFNPAnHjR3L915vdkefzLL0cJc7uJcH1/yVOYpmkK/amenxYT1y/xvE5/xhxwFHmwIsKIeKs5iphkKsCSUZwCYYPkWOEFoyvh+vykR+cNYzi+j1fBdM+GwBXSYc+GyFMPZvMQ6UF4iCZAjsE8mjAbIpTtmSzLdjI2rP1yDspIHx5BFouLcEqO8dWEMxhNGNHvjg6L19BbPXiJ40/EgZVdRtOjQ/p3Miic/OPrG7wVf6MfgqACwYYEcGyblmEeHTKfxANGq+ly/nh8N4LBkt+z170b0de9m4aovYxw3EXyvueja0GVDUOUQYLT2+D/Qdh8FEAX6+E3oLcki3mIq0l/W4IU9eDuhBTgz4//Jr/Tdf09/CsCSweun676ejOrV/3swhSSNbpbkE0rnxJZ/IKossUPu4h3+JejezjR0+PT7+ToMP41/piyDKCVg9HwgM5kNIvgRmYO9Igl238Kh3BJj/QQeMdvQF0xKy2bnKamRPHLUeBMQuDBf0tvADYIpPeJLEG1eXDGwdFhfEU8+0Ocfvyr409AnlKdBSb9BdWHOXPmP+fYzGcQl+ONXBQWrshl+iVPivcpXiRURpEVuOEcVIopAaKJpvBOqAfBgQ9hi0ANofIENKT0ONCrWUYq26Yu6bFQwwtQFgDRIv2tFsybXebe7NKZz0PiN+CgxVe7zD8jfficjMP7EPa7H4CeFlKRxMxBBqafm8bgYQ5rFDpT4d00mooDZ/kQjUPvA+h3U3Exg3UA5fV9gw2QTKM4USS3m3ROAjMpdiMGJwPhxgGd15n6wunyAdQt5H5U8ALnX2vquBcB6ui4sZPVRJind5HsLkqeHmztfQTLiyplAPwIrRnh+vITsoWp78z9RbahOAazRIosGWJ+kX5/CJuIckW1iktA3+x/A4P/d+bd6Euza4AnNptJJkvw/FKajDXhYH0JfEHpz1/zaVAJP+ZfBjYFbEv+Zc6cH06IGw7a0jUs6VwYOnSXhfMFSGE8JU/1pvE2UfuRW3LLEPXcLEF5Es7gAwduwJleANlMoyebGegecx8WJWFvjNI3vP69f3ubm90w+gHrBsyjv1xG8yl53DQx/AVUEUuVSmZHFjOwrtHuQiZM9aFfyuX6TvK4TiJXyOQmUrlGLjPStIk8hZ2jb3uZbst6X4bUCE6fl4mTtRz8BMd9wUnC9CtWSA1Aen6K8pcloqpCenHyC34vmdL6Q0ZIALV46U3M7/G2Zs8ubhWoj1qz7azdz6oNbbSjNVvK7+nh+s2ODnOvzej0kwlYa8CVgaclN5bq+9m2I0vEv5HPofJmqDbobs549uCISiwZ0Ng7OJ3ej8PFw8FaMZnAd8yYp6gFcUf39CfiFMhP4dR9w2dsEm1GyZm9SKbfd0GiLR8v1zIY1nceATcF3c17vACkY8xM50tuMl+iqIEGYMgbJzBcP5NbxMQ0BLQJ3jog8zm8d7r060WLv4ObyTkI0/R8zleZXnFYuZVAAWs9FV/9O1h28+v5PTDu2CSOR+BNJEW2P/2lzjwy0ifTk4fSEfAXYLWL2whsMCq0Hh4X8MYgx6g8YXXMlNFQZvI7EADDcQSG5eiAhqTPYWi6eNxkSTKFsxiuO5kD76g8k/GJHEbzJYpS9kCWH0fuMNqyohYPY7XVszZVDisWPtud2FQ9OuQt2Uz1cFag9s3XGF6sayXI44+HSEjGjz9HhQzNZooMkpwZHQ+Fz15ughvg4kUM+PXTm/KEAtuU/DSgFlZsg+rzWx/0cv0vuSPX9wHGFi4BpfZg1xrgM6DaF/VaSgse4r/DZOWFW+dnNI0mj8K7s/Nhv/8+mVNGWOV0Bax+PRalLaHeni6hrc3mdCllVRFWiQlcdpKYg4Tvkb5usqOsdGSkZyx4gSvN8ezylmuptIZLl4/8dYlsHsYWNi+rjxYrMDJ+sqP0BwfHl72THiwO/S5nksLb5qe8/iilS/gk/S09MoiNg/UMbBNAx7kzXSTclT0gXuZKieGb+JQBah6VHBxmQPZoxBZ6ydFQVdWkP01OxgYqNAtU+BaJUJfaEOHpGDxhpZRFd6ECwagll3Svjg65zcxoJpyC1gJemiXLadFps4hWcw+4K1gUyTUUTEYdJyOSlKhiTDsdqRGpWOnPnlRSfqW2IZUzZx6N/VJaOQtns8hDD9ziCTgRIjoJoRC/qFTllaP+DB0AlZoRiv+q0cqImCGylgRH4W9gUOruvEnRG2ler5kvgQ+kBbHdOJMFKRd5NwQ8ALDAe0pjpSAazJq2O6XJ5punNNlsQ2m/Q/hA6EwaaGGf4MpSigTs4VsbWdmEoaFRnO7EheNGwFwj1PNehLg2e/IaEpfx9onLaENco9XCKVevRt48nC0bScsheLQnnUvMIY1IAUyEDu94L0JbVEB2w7iUt8+4FLO9/fit3CxcTWb/OJoYOPzQwoyvhAAruBX3BzwUNyPqMqC2R/a5QD/nrI8M5cHAqvh3CDGg48J8Fg/hbB1zlYBJqYeagVtGw1E+LGZ4fTc6begX0Q21CLIM08ncsJNBJEu4hQAn4SvSEkRLLBPSSdailnKKboJGToINLgJ+Y/lZZJ+U72ZqGnoQxwcBoUAqORAuYqiDhg9CHGW8IxNwiqJjNI0OgVe7D3G9YmsyBy9kD2C504D5kKPw7ItNSK6qyIMWSC4r28/OT5uitjzWRCN6UraYXZ8e9jJ8w26Osr0YhNtg9desgdk4GJH5Iwc14I034MSf0XObI60sfHOeXUFDo/KkUzYWzia9n/2w8upSHQGCYctVBAw8gAP5d7I7K6+aD0Z1EXh0N9y8dCh8eGGJqmaUbd2Y3DtjRB4xQg48LUVgPpz6IYDOGAuG4Dw4yeZrH3IxDJJuYnHUKoweFBODhmqmKD2SHESazFnHGg3Ma6Dm7AH8t6GA/UkB/LXQLaN/zv/V5LTBuxCIlkKBG0P4jgexmmBB5JHbnGss84w1OHyyru0P39579qc6fE7FuUO5Cq8CUV6ccrJYAag+p+cM7wKjI47XO2KvxySH2NY5vzpB7Y+Omn4q0E95Pwt7kqkJg8wOY65LLair6/8qtaDw84KnPAuzmILsQ2bwLZxWR2e/gZjqNnHQ+bgtZllf2BgrmQj74ZpAGcJKyPM0JTw0aZESJ5j+hmH64AuCj9GSiKMp4iSl7GtmqEZUW0eDp4Prq1IipF/kqJtMCBiHEAEUR8x6mZ2+p8A3R4Gp4kC1ieuAauFk/j30yCnmznFIz2B4s6YR5Kp8wg/EdsH5TRkVRqukSTDUGl4k6UsxFbNKS48GU5+n6X9JvuCHBuPEz4IFJFTFSQ2SHHzETTNeuHH0oyquPrOO0ktY6v8B0oU+gplFcYouqIDT+K2qXivj4z6XHZAGWT+E9w95jS0/wfU128wwlnnAUyrnSUdCIGiZjPUo/HAWWaxJmsZSWN0jAPdQQcV4lYwJDW8+JzIpSDIsGRsPKGtzcCIGFRSQu5SWccDPycD5EOokQWbABlGlIE4KZd2CND0uvfLokLsmPnbsOyQIUcE+3c1CfZ1BZqyHoINAszoMrFGceDkK1jZOvLHNWm61cvy+Xnlurj5vUKCbq9CslChVoze5HOpjauVeLRFvFVe7XWQtT5sbiHNDdG0tYTYLeK8gzeYB77VuoILpg59lfJfKflaM00ixvKSngmTrlHVMiv8U+Y87Jb3jakwAT0xwXtiNlYf4n48jZ6oGf1v/5Gv/anAqnJzfnA5uz7+ejvJTWLuN1mNTvYby7GR9k4GFvv+d1kE4CeexGAMRGF8YOz/gdprfNSd/W8ElPr0pC2hvk1wO/8g1ierbjVciLDRF1SxMLdslIzyeDU3sLi54lvKdzDmRi/i7g8AwhFKADMGkZlhDf/mACYHSv6SZRXDVA3H89C/4Mzu09LvjbCvgOQ+5r8iCOvVpbFL+y69kjullTvm3o7Wtn5ZYeLd4z10Hf6z5xyE3y6Olm5Bk2Zx9iJharBbAJGJUDtnCCvR9+IK9Sjg/AS59Ih8cn0S0rsU8u4sULj4+mfeEVIoIiRT4IHwmriDbH7BsiVy8J/sDVNxw+u1sORkn5VwSOs/WtufqkmvaQE0zPzg4To+Bv177dADmCezzcovFLA/8hWSQMrI1fRzhYcquqjyBQsLvQEi8+6q8XxeHSI8d6m3pFYyBMri4G92e3hwIE3D+JXbt19isbX24NPjV2nBatxpyfW+Y3uMEBnH9QBF92zZEWSaK6OiuJQaK6tmyQzxJz5J+ckdd10xVNHY46rw66eSpQBDBuvqOZ+YHRGYxk4gpnNHhkdmOCQgr5qIsRWO71YorKmQ3F0BsOAGKykDY6VMLuR75BVckL5C1wBVdQ/dEzbM8WHDNF13J8xxL1TzZ8pgRuSWXDfV3rG4i5VXxG3IfwuqiiJiu5ovnUMarNdKCVko/iPXLK5xdTtmkXycK5hXYlcgmnXHOKZpufaxc3lzl9Mz4tPMPLdc36TcV+g17oK9vvmSnl9/A0kIc7LKUhQFEixlmsxfnWK/+sm/B09Q6WyOjE1bjYLhcGZNzUUOL3/ndV/U9XpUxOGRxzPfsmnwaVTG41idM28zhthmTvTnbMtvVNQ/4mSgbwLI02zNFhwQ2nDnVJL6pED8NzcrWcl0PR9IUHVSIfIY5J3SLR2l0dX15eiIObjcfRdvgCI3m2cSxQMkUTF1VJFEpmN85frm70hXTFV7C/N2E25YCXckXDNyFeoMEJhx/WCiWNF2Nx5/HzvcIVLerPj+hiqGPYvzp5yL8GFeRG4AvhNk0VZKM3JoVVZ9G28OxvBxn302ytJAtNdJlF/nyuiVMnYwpkTIb5UxjSbNB1hSlTZ282UritJQ5baROE7lTLXmKsueXKvfP1xR5bXtU5J5u1R4T4CNS/iQxc0irVnV9Pl4PGJq+c+y4Y6FfjhzYT+IceKBjsO4wm5r+zl+Q4n4ZgFh6MhKUMQUHi6esjOCqZsp5hfh9yzmMNhDbYHTLEVtuWPao9b9ccdfy8F0XGN5GIK8WzWsO6W3C9ZJ1zL/eNvjzPzLFZbUjGHq7Of0c+yTTixYEUFCH4g9MiYnAGYO45BgV6r1z8OqkWFA5p0pBEtEMgF1pgeaJrks0UTZBaTUsz3WDJMGT2VUIzJgAE3IweBxs6tlsnIBShxRq4ZZs/VLJVOtxGv5RDLSSfFD9Vihtkkcxdg1jZKyNmrwVgy6wBG5JMZ01kINAc4ar5u4tR5iF/sXF6c2X812B2/EYwhAQmsXCXOfTJRARqO2Y3TxKANx3efD2fWppbQ3hUgW+SwwXBywDcS3TgJiX7kDcbM37VyeIoZ/ejE6Fm9M+ILrXV0+N6I5WblyItgjLrlNNOwFiKcS6SB8HSOuQYBmuMYCZ5XDsPHk+XHrlACd2KkHODc9SDo6RJ4H8qX8QXPf7AyF/B67YDZ7KsMOTm/OvWQEvDMxh5S3awRXIaApS0COFNSvhfeZToQ8jFKGJlsYWViLbBKPC8wdziILCAstxCe9dHlcCsaoGUYmtAh93ZeDesu+KdkBkat9BYJlnOwZjYrIHEeKfBg0qJ/EvQ+MzGKM9F8VHa0BCYK8XV/kGgQahvd+y4qvJLjBLEA8J0RlYpy8Qoul9hFd7yT4lMcJpbR72zgJy4MQ4xXq65ZZ9wzCYdK4YGBKE88WSC1XjI13iUBIW4qJFGZN3wBFSFyWtkClcOo+C/AGcHbbF3cXF7tgWxu7IMhvKnJyT0hdLsAPmzPTvGDV0N4ga32eEBVThXdL34mZxiHNn34W1qGpeph7ULosxaRRi8qotq8agK2WCXOreenNHd5/+82BHTDXHHNkxqHuKx23bkpCZ546aKBlilnq23ZClCKzm+B6a7M14IE8Z/dHo9AY1hc2skLNVWFWiXN/9p4SF4J7xuHNOu6X7wILm1fw1/ibNMUM5iEyT3opsk9utXaHVMj7JxEGm4X1AmSTLeity+HSkTw4WDISXS0MYF4+T2TKaYHsDREzBrkiGAklQwSDLWSRv/ZTGECbTLmXu36bRDypoXLxyEY2/w0zeoeaNjkEBwoFB+cZq+fC9Ays9Xb7n13kLBFmTbZi9JJl5bpTMC2aTaV+NMOQKD4EAmlERXq4SETsKiRZMv4bt71QIp4L1/1cf2cBfyhf7udC0DgDPweiyKQZ12b+64zEoDq/gLr3s83AVt3ymZMh579Ta8ti8eGXBrTc/ryCaK2/ydwiobBScoMMlzQoAS0kKdbKP3EacrgXqiMDguMosU6ciNSdRk1t+T/lS6Y3AD9fR7olDDtgRjeGCGMOUl4XLdWscADRiJp182Uu7GxV+2jw6fqKQ2rX8lfmnr6/r5V+5HZOxGqgRWwxayS9Gp1/zdRhKlqaJtlCsp+8tmVLzFYpEnSqxSGYib4DLmgr/WiGlmrKtaFgrIFd2H76l/ZJQSuGEuhRR5chdBsyxZ7rheb/8DMj905730hNRpkG3plP7KYg/f3cbPTqP13egSTc8Ams4qzPar1J9eT0T0/MkRTHgvyWKTCGlhV5syUrpxZXKYr26qCi6ZVJ1sclB47sAUOgv/+I7ysetT0yJjGQHKhyX5xOQ3EN/eQm5+ESScVfZ+LLSscVxrj1Ciq4b2CExH+d0GY79LsVXpQDbIMK2kXsVTq6qG8DM8JZFN9eTYe0phosjvHmYHYL5gP27vqgQ1xA1B4KYHTsIRIhS9gxDV21TZpjsHmbfw+x7mH0Ps5fyxRqF59Ui7LYExoAUWKKtQtyOZtqaaMmeLwa+rcskkCCMw3xZhJ22N/2HRdhxBDbI+e7qv/aw+KuExeGU4j+yZLMF4tZT2cPibwIWVwxTyveBjGNk3iAk/pwQWa25/6rRMdXyDNUnjig7mgoRk5YmOq4pi3IQ+JIWGI7s+y+OjinPho7ViZstcS4w0WXgiFqhd2gcVNapnb7HwOowsJf2Ee2xsHIsrMAKaplB6i7KMYUyttAVzmaYqlGMa0hdRm8VaXs9HuV68fnsWPnekfy2Hckdqgsvj72/GITePlMkTQs5vRpc313dnt4UMka2yhw5ndL8LOBDWamfJ8gUgf90Xe5HqcgVMSAAAduvd1QF5CxcYCMkxFJItlS5fJL1ljxx6ki2WcXUkWFa76r41UVUVQboJK6101muSTY/+eAYnCrE+7aaCac/nUk4jWVJsUhPNm8B17v4fdL7GDjgHdZZXcYFCQcYGD8vXj0iM9hNF0ZTTFoWSBGcpSB/lKTZ5GkTTDLi4CrJIjnVu76yJcMEk/A7vujOWSaa3XWxHhixxMOlOAaOrYu2L8uiptpEtBVXFXXftmQ9CDSfsDV+mFNq24qs5k7adRCEIHai1TKN98U6nbB7ugD0s1qSRfHEDoa3otbgrCts3Hu+hGWV4GOomY3EL72fbudl/w/6L60EHE6Fv5N5JABKCExY+G+p15P/R2CLabwbXF99/gjQnyWqCvzzPpsMIrzslRMIbiY/gRNhANXEmSX9bmE5gS1l08QUSyp13xXXQAUICZahZ0k9FYKM6CsiRJxkyxTGEoZjZwqBp2VjyTLShd3TmYF6NeVC+pefGqksfKjtxF3BKMB6SwJpL0w8Ldlkc4oNc2642iE8PMGgq4pkK6asStK/QfQx68tliwgmH5XVNs0IIAvrvRqeC0mXRJp/wvkACu3u0qu2yFLRbUkH/EPeVSniF/9LHMG+LktZmorCLwFfcrEOfL24HjDHsQZ6HZ1wl7Z2y/MOHpqQFNeBFE7IGMgAuHkqG0vqquVWWpYNSWywzopul1PsOvw7mUX67NziF+Uc73ngM+frW0s3KQuwoShATUmApgUB6ssB5IsBNK53im3tuaWpBOaHFywZlRQmYda8WBGrHFKvBNRL4fRaNOBmlBScXxMqiH8ABcLvXmVk6HPUxAKvVOfuYt7TtVYmfNdUNUMzxcCzbVFTNE90LEMTTaJ6vmMpxJRUbjaaDlE0hRNOT2y4tl3+nUpkF7y0SFWIYARzoC3axm4EAhBYNmh7k7i53TtqAbwXVvPpxyj0P1bLUVVR5J7ZU4TRbf/2fCDES2OLkpKKdQnFuqwodi73h7VVJM2A0fG9OA7wGVtm8OD1rkW8cGlowfMICxHF1c2ThUl82cLGkl8Q1duZWTUYh1MaehUk78pa5Xyu1JOW/0LRr8Pk86K/xh9RB1uoAGVqRTBzOCWrSTQNnZbVvVpjDZkV0iXi8Ll/eX7xh3B2Prq9vvmjE9ThM62pIjwkxnWGPOwIM8h6tyBD1meA1wRgWHOnQqM8fMCvbzWEAGLFuZ87s4fjzw6tGv7OJx7BJMn3VOYkX3Zbfdi5n0YLbNeRxw7690ToL4VrjDTpqnDw5SOoRHM/BL5wPg2ceUIVHgakI/cCV+ry4X3R7NfN5oUq8J1cYBfFisTHmvS0GMG6UC8vn8vq9uZxgtyJWQ+1O1qw6dBsM2IJWuBrEAgbmJKoe5Ydp4q4kk/gWbpeUnaiUVHdxcr9f8A71luWtH0dxZ+X9eb9pXCeP9+e5QUwPV/F0xtvAst5UfFD1WGzgSvLMvN8uq+1Ete2NbNY5fNTGI2j+1hyVkwyVhLa1pHcIHRz64wf+Uvv44aCgD0bf3oKR2D0M/jJRTH5APIAcYPPDyQuGKDAtpjNv2zW0zjvLnDGuUpXtLMMa/7LtpyLp6J9qACzxLZSCd/Bd12/wgIcd954hXU9XILqBEA9QJxYrCPuPcWPFa9UyqqZQlzU4Xd4nLuAn5yBMZK55PEC0R/yVH9cdWVZSd5dqkDkeVJ9Ed/WXMRoUpC3Lox/m0eW2yaVrGtztQhD0024Rt5Vm89HjoHaTMGDPLk5PYAPQbunUxid9S8uMjwSoPAx0NgyBiTlXu9fOUASuxyF3gPcdH13cdLSZtpoPXRZmn399pxDkSI64/AbAaJcPsDbIrQZRGM4oxiIC4uS2DofBHe1TA83fQBWqVk8YFkHx42+E+FHtBrj8Yb/Ybex3LFm35ArFHzOWxAdmC45VtDICgGjEwjT2IKsGAUszBQwfnI1OMagfzfqMIIhx16o8tdpMKDGrSh74A3LtgKH0APvNDjwnQXudeA712Rbwkoh9hb7fwLK+tPmVj9D5AtaJl2SiZrPH2YhHEDuMQDR6haAZ42rrihk+FuGpOoAUKBT9dcD54nCIQqaxjPqHn8atUN3A6ISj3Ihd6927NWOl1A7dB4VrZE7mqRr26kdKSQjTMh4HGIyFQ4u8P67vVR55VJFk55bqnRdjPnz3RUtAdy/oH6du7Yhdjhq2nkVBMMoTgzMKjCDEy/tacvD4i1RaW2DV679eGWBdKamgOTpzGYrrEseBc+v/RPH0jHzGcBS3YMWUQS5T1OeKGCoXAkKjl13xgD7YOwMHoNioN2OIXW4LAAcMrPtLxbgxEe0qYhgX4LJ9iDIMo19U4vfg7pNZoitgb/vd2eMZXZbIOf9k4vDc/jPR+ETmGL5e/kJbHx+t/3ztuqBV35ccw33tsbVwULc5DxvP2IJru6YridLhiKCtxwd5w6Ev6qqLxLiG7rrS7LpsY9kjrivF6LNx4GIQRBNwlxKgszPB5/bIvhPWYK40MkIKxPuCwrv2sVta7Ot5Kzlqp/tYEQBPNZ5rEoOcluXdjFUiE1RDdELsKCLZsgAD8mWqEmuo1uuY7m52DM2Yk/TFTir1dIxPjYdNU/bXBAhFjB1lRB2sR/osVPB9dXMhpANXdH0YkSMwAquH7HgeqtVbus4UZt0/vblzV9xgfNqjlTkSZtQ6OvLYcErchVNxeSNkPusZjMAj5iIe07QU6KPL2GjUYcXf9TCj+1oBOzqJ0hF5611lmcpmqyapuqJimoqoCZAkJ3rEkPUXSkwJMOAIOQ8sWyX980c7POvF3+95VwChdqHRfZQnwr+txVEVeKepSPkbi0POR7enORm0abiQ3vEOOdYSIgQDoK/gqiEcBrX6S4POua3DawwhxBVEhXZg5BXmYCoCTylxhOBLxdHrJ4QDDPmv+NYgGUCZtN59LjnTMkHcNfQSOt3MxpDDocuor7oXL843Oya2R4tvGhW3tyLXSTi2hB4h52pXNksq0Lq8pGi8XOrx64plpH7kmNgMc94xbh5pt+nrA+z/N6BRRe3jYJfcsGqLcWeUtHv1jNc3ZE0V1TcQBM125fRRDFEUKEc1ZJVP5A4yIhP6APvimgL+UCY2ALtSE3aTcVpp+OopiyX9YJlVJw/gWoDHpO9atNetXkZ4BMRzfPLy7ur8//bpy3QhN1DfM9p3mbcxHVDFzplt9ziYmrxbnhoRWYxXGjYHQaxMJnFIbtWOVyU25dqTBRjfNA4QsyQDocrnp3UbiDTr46HFkGDPGL6aWzjl3xOKAVMV5io21XocPZHYSlC3E2MJwYWNf278wGimpwFWtofgOZLMpKvou/YRsYuzUWOhULJTYf9FkBqzWSVdpM9IR7tefMyk8V2n0Kc3OBFHip5s2j8uAAyeXDmYPKBXKAU8yonj14P4ZaAJg5AFOo/fjh7wJDa0BGW0c8o9BcV84Y5m8VPb0gAEWU7z/iMYPrzEoLVPhWH6q/usctRObhes2jq3H/a0Pas91CfiePl1dPRp/4JhPHmQt+n5J5eSQOB4ta0x/lEOIY7dpglrytdx73DiCX4PDEC2cX6b55EfFFzbTROZEUMNFX3Lce3Apu9j654BQPgoblmAHuFW9+2WYX1aB6tloQZaaBYsrHRLlR7Coi7MoF35WS+NSzpDRxtAUQNzxDeXQ3O32MN04WzmiPOmVOCgXImq4W3GjtzMJTRZORCEI/8aEF+y4EAeuZ5XjGZZHjiF6vJmpzxswkc98DxlivQPVJ7vNr2LyVBiiPFv8I+RfNJZ/3v0KfSNYYNY7I3s+9/CYMAtxsfV6ADDYLaMNk5t4EJ5QrfQ9jeVAKUlG74+hfekBhHyyuqEtDCCvLRIf/B+sLD+ndgX3GeOPPy9b7iDOAk+fdiJIjxDkewoV6vmAG8cUR+Tgldsep7nhBblRZokmXR0/Scv9G2ZEvhN3+fO16ZO54u/hDiUktIpdj7/cyZR2O/pPV72kH+LJzNIg9r2C1KmsgXiaxqBuCzScLWiV9Fzo0oRFZtPty4mAcfp+UWetdvnZJfILkO6hVsKlhQV7GgccmCDTULikULDjftUpu6GW1D3Xi9aVMHjvMrFgBalxuARQeu1ZEoU5q4N9qPWQESyqYsQfwh+g27RLJZu1wgwNPjeh3tHKysNS4MIyACNMVBSoqYqpI1NRWABoTlA9C94DuPi56wnR+WqTdXnypeobG37vbSjebPpQD8Ayv+m+iIvaFDY8CSlXWu+94c2JsDL2IOcPIXeUDI5jKWVVabRPO4tFp5JmN96ZcEzkyUHrBVT+YAr5TXfjEN+BvdH+Bl7FnCyR9X/cvzAV/rRdfU91kdNPwJn3b+oxnxwiD0tn8RWSp/E8uSuTcpSemUNcWUFLNyu/v8hn8Q+uB4HIcg5KahI5oieM1siAORr+T3sRyML5d6kipcfjm8vBAOhdrRvoYewOcwlgrRV8DDZRhNvVKajPYpP9on8dM8XLjgtxYN8LSjw3GrUS6BcTjeA2jJy+VCVHBaSsVI5xTaoKj8aLWYxcKotMnD9c1lowYRnH+bD2bJZYTsbe29rf2Sddr2tvbe1n6ztjafrLw3tfem9hsztfdOtoa2Nnq3M8axt7X3rrfnc72p6ha2doNAjH8Mu/tPbXhbugZwXenWf3d+CooqvOMIIdl5ShDA3kDAvOeMz2i8yjeV2Zueezfvn7RE+N703Juer8T0fG12wd4F18wsYJS6vVmAi7CPyHsuswDE2RZ2QX2MM8S+UY5Gc06+Q2ACRCDszYQ3byZgOyNVzjccP3FmS8cjMINbZyi8O1lTAxJHSii3CWXgZ324ekyDcSEuDQIMFmBVpe/T9xfR3MUcnr03ax85+o/adWhvUoyfLHK0rmX887mBcv2ZdilbyoW00YwhEAc7Jg0wOHW77ow+n65NFQ0eVkoaMV7T1P0MJYIv+rfX6Bqr6Mx3FbHveUMzWDbXQuZn0zDasWWDnNdlcv0pXTE+kSXTlgJR1mxD1EzZFq2AGCIEQ1qmayiyHZhtq4RV1xaypLeZxrTPTdrJEsKmNa0NISa18vnzkvYpQntFL6OFfYoQc8D2KUId66u0Alp92NKC/A2iWD0SM7JUorKa5IbIprLqQqlOJKRKEcCniCAsdyoqJFcUFVID27YcxRBBr3BFzXMD0SK2LMpG4LqmY4JqEFQWFQKtANs2aN3mC7FNrHJ5Qi+UvLNt10cB3u980L8QTn+7Ox9enl7dVvaHbFMYJk6dHgunf1uFMyxhzBXH3roCjNpxAZjsHPCFqBRDw8Kdu1acSgq7FFZ4c3GXxfJxnJzxT9HYPzgurCfNNcZr01vHQBxrHR0mdHyOS4E2sxBXXFt8xL7Hfuh4whCwwUvnGzCE/1yNHwU1rTRB79s0yN0MuJTw5RzL3C0AVQSk8IPwn6ASOfPaoUC1Jh+Ez8Sd0ysVvFLirwSda/0aXCGP07/NlvLB8adwHOLNI/zig3DpPAp6+kRuQaorSNMOuUX6XFeDznjYdsWmW3I9tbSHoko0WQPOJkrEAJve1yzRsgxV1CzNUXzNVB2JtclY6pXgEZ0nSCZkwIIj8/Aea2xS3Tj5eoHlqpiPS9MStjEEqytN8m1+JRPQdE640SKUleBSRQHKslp8aXHRSVZcNKkc6qSG+1dlXeeR55fbVRp9ijqjO1UZZcjTdnUw8zXRsQiQp+ObQJ6aLUo+cVxZ8mzTlXevu1dXX7RYXRTbhjdq65yvLMrPtFFd0VZVRXesKdqqoihbBta21UBVRUNRFFGTPSKC/m2IqunYvuo7huO5+ZKqlfU5Od+kJksG7TqWKwYai5YZiJYJipaayqA7siZuajlOxEo4Oo1yllSeLlVXo7SmQulO9UmPfLLwuNoMJ6s5jdgrkfn0Wm6+VbOqqWxaXtc0X9W0YYnSt8/Udmbsr5wv8gJxzxefii+qkqohY8yXtAdiAgXy3gHbLQpBQwVgGYlslinPz8sgS7T3PYvsikXWlmvN2SHtOGf3fHMHrrkzz2QqRgemHuguEWXfkURN0Q3RUkxDtDXXDDwTsJ+AnXO3tgPPK8ExrXBWVYVxUKM/NtEeW+iOO2mOLfTG7bXGSt5YXn2+UD6+S063PZ8rdFKsUgMrlcAdVMAdFMAq9a9S+SvjazxXq2FYILE84oPPi6XY4c31oLbv1jC7K/Nwrz/6qmzt5d7YHG+bEcu83LpryJrrg/8cDgPYPr5omQBGEznwJdn3PFNhStrngjhNObaUuoRiKPQlDMdo4JBqSOaXmvBm3ABWD30q2IZVQ3WZq4HkzO/JcgTQHzOgApwfohnzsYxuCGcBuVhn1fKPFhixCavHpoAPB6zbJLkgz6BHw1PmMrY5m+Gbrq2YouKaIMdUzxRdP1ABvzM9TVZVyVA8XvNPnjCMOU2Ro7CtpExFtzsnpHtnPHbHwN6BT+Ia81ZC/fzW3/PsJf20+/KX3GmHYMAtCl5qWfVD7IzROHaxP4XonLkbzauCFy/P64MXJUU1rOcLXhQxzA7kLb9CuxeXLCkpOYhoCBPw9GRlMZL4LFrMQnjTRbsgwdzs9W18x2rbHd64xXV73HiTXzb7KJPb3XkNc97DmlYSW7WUWBdeftKGEjQSrNMGuxUNJSRQA0Spu4YS56Pb65s/hOvPzPoLd6PTUsfjhn4SnTSMWG9YSc8I2Cy6hWUdIkAPWArtukpAlENKHMUvP4fjMVvhdNFV2wnsbQcUGI6xtpeNtb0gTuKufwuW1YODvi9hkSRYF4vyK8JsFQQL4W+G8BCt5gtheHMl/Hgg5O+lrXXBlZq4UeWSxgBUuyr5HGyciVP8/AuZQniaF8dsQEhcHGs6Bq9Zrn3Aho7AcEiicTQWFB3eHZylYJbcIuWU9CaWBQIBKY+CrCSvi1ePH0t7CAuyRd9Uaf6mZ6CyzZMzW/xWnAJ3EV9nDwTOLuLYXK5D4S7Rv3Ln3YhhxBK7yPNdX1UDSTQ8n5TZuVy/uqL1QJEisrPHV5a78fhWPX2YPJ4iKBgRDKua5HuRNNpKiIAinSU+q8/iPHDwwKhPpmqknQseNk+mEN2sWgru69bRzYPzygjmm9PR8PymTwXKu/Ors/4FlRjvN+R9ssYcHw11B2/JzH149/lzvogFcMMGWQJc5G98J5VSeGQxse4zqDlPEmjNnMuQ6fuwY53sTbFL2425XUYIIda2Adm6qRpKoSxJY+nYqMJlWYkSbrO7bA7B7PZnuB47db3W5hBlTYGbdwXenGjVPIerc+My61ygPrGZyb4HmJkvmotW7i0YjC638xYk7IsmHX8nD6EHl+/ItLTqwFoFQ24KYSA+8/BaKKoBklXiZ4jXlFuEyz7f5pJ1ySqapOVn2CfgEIjGXTGihESTUYtcg5v4dgj98yUtZqZVF50hcphdJxKPb0rKoPSuqWqGZoqBZ9vgRtQ8CMGAKF6TqJ7vWArB6DB2Nppu8H4YPoZSM2AGBVf+5xAWiO9Fy9K12JCucwvPlC2rzfQ3dVWRO4QRsioFQfJazGpw2573jm0TtMIemHoFviZCpbrXrmzrtgHsKK+YxGZxS27TMtl0w/E8/XzDOhY2ev3Lu7YwWkoyBNWFOzmn5hOcUzN/TlmhenX+xEFQ9UHBG43EOhoE+U+cJC+wPII0Hx9g8nxmxuuF7c2UjYZKGU08jb2yo8Wyi82y2Wopt1uaSP1tbRvu4c9RYTNj4VlKFj+DohBRZFuz1J2W4exzv5FiBD88BZYG3G7axCaGXEtTrpExt8Gco5pa4aNn7sGuSHA0QBHH/P6CJVPRibwLS5I/WYpk/taHAB/9L3nh66/Gy5hJ5TKwK/QWFN+FShPU4oPocoJxI99DFHq3zs9oGk0ALT07H/b7DFZV6ivc4A72Ml+hsMFZuLEjXW1LuuY96Tb5CwsOww02b43pXtcRMT1W7CdpV8ShA944L3RK+iKm1wggCMeIk4J4HVwc4C3Lx/LrkzTp4TycOPPHki6KdGkBNgx/sqP2IRbjsncCBzz+Lsdsiqe+uoTPYdV5gW/yn+zWSaBl276Kxn3fuxDxTYLrtxm1klVoki1hiI/ZbSRLuF6ZwtTBpSOMHZeMYVOEBVjV4eKh0HKvsRLKZ+7WWgUl4cLPZEGUG/eMcMTFg10npWTUVkZZT2A9VGSCy+BjR2GkG6YFYCH3YG8zAqDtbnXkZa+mSwXZ+xZMhL118PzWweGfWPEtOjJqXBkFFVRVVQg3h582GmgzLU822nQc/lMoeKy/fnsFb7RaONNabW3kzcPZspWyNnxw5pNOFLYmPqf09YYkAsb+fyDuBh/veI9lT2rgwqrw7NATUXTktZD+8GSABfw4OIdNGxmwyD4sN3IJdk4plx+yA2B/4SxEReCd8510fNafwJNdicX3R6PTG4xI2BwxwMv3arBYN6QWNWE4dv97ErXFocWFjUEOud6QV1OT8LhaN8jytt5C6JHhWZrmmbroOKomarLsia7p+qJONMcOFMkgiv0coUeKpHKa6msNPZKVHWOPNncE3i726Pqmf7EhzohNrttH+DxLhI9sm6qVT8KpDgB9poie9sE1z+80fzv+cmKosmF4pmholiJqjqaJlurIomp6GNhJTEV3X9w7nrnHX41bvBO/eLViolqqhlks+Xh/JuL5aV3Zz1Fwbtj/4/SmKlukVZrI0HkEs4CpLKfulg5ibaib3H68kmQQzTINSzQ6I1e6CLnEj/Or0d1N/2pwKgxvrr+en8B6P3ECCJ2FgFZVMSdjGI1DL1ZmhUNhAHjJ3Lkn9O/Ki89Pil/RO8EFigFS5VckN59FY3iXrjI/2MxsgOBXwIC8krSEU6QcH6b3sHYqHQIag7Zx8eoBeIHn6AaIUcKSJAogA1XTi18kpdrBmr2MsKXH06Y6NK8NmorDbH+dzgqaG1LXBc1hxBK7Qg6I4vm+JJqO429OaXjaQ02LEi6i1dwji9YFMDbVjN1UH1bZqT4ssub4JGY0UEIE7TdN3kgG8QQGYI9TCT54cKb3ZLdHlqpPKjFMw9EppXgbKSVZFr33y+isf3GRhYCQn7A+GMk1hQgQudeT/4fuaRr6MTq7vrs4qYn+yDMl4RZZLPe6uXgLOg+HDUnhZ+QshTFxFstsSuVBKRtnFouD0sZHmpKENvRU3ZbTdkcytjtSLF153xPqu6LmI/xgBoE4cx5L1E56eIQoENLjBOsDNsw9sKTh2clo8L6BVavIucRnzuPKTbAmwm1LTRF3a727A7jGmSKyv/bjcJudgZAchvh5hwAUi69FuAHRr0ner/QIgzZ4fbMZ2oMo0fImJBg7jW9a4hzIkHIeEi46ALC0wp/NS1DhHNBlAG/TdTncEk+v0IgKroTtJ1O3gZ3s4OYtrN/DNptY3KTOnQ0xq/iycmArAAxkWUSv10P8TZhRD4oAjwXDahGizo+OAlAh0dAFYemG43HvyRmKVQxo45YGEdaauNyNICtdoNyojdiWqtiB5wco0gFH2yzSeTb25a7/pFzsbDMXQ/8pmD4AIY/od82Y2CfigL6+xFTqHbiYaRlmZe2L1kyKlgBKX7sDV+anaI7Fv2pcmZ/IEuBGcNgHpe7MLUPJmp3ciiSw68wIy853agAPqQE8ZO7LKSXtjqT9EkeyJq1tyCd0xe+eMHcsMw6mP2Vd2OMHWCjPszh7TvM1R1eoll6Zos6VFYqN7upjPjq9+NzkmOeV1BEoqf8gZ7s8363qgNJCkvCxAPbIlBDET8IA1i6gJcvgQIAFlyAq8d7jGPkdf8qDDgvlL72PbjhfPrARYOAkgYhn3vakJ7yqnFfbesxJ9TwW0coJ51K+cXbBFypvxwvsXBB55ZzjY1ZydJobAX/OA7DFPjeP/WwJxqzhmDioOW01WO7sb0cucnFDM74baL5HTFsCl5JitVClOAO6n7tiY9B1bgObFKsc3lxyeWPZTBLPkmoaoIzI3QYrDwCCmEZYuPMxb/TkS3VtjjFuFZAckwMaA44LqoRQXNLrm9ggiLBAELCxnlCy7utn5+lU2ECeJ6dgOwitCUWoI5RY1RBil0aiJQxRUuBqF2tfDuF1bqP4OrwMrzqfJi4krH6Ze16MlAs1QSRCvANC2cpz/T+a9nzKLtvV3SYML/pXWCXs9ua0f1vT26mx143eHy8vwGq3cwhzLjZ3YkZsKYDgq00pCe3HKyvIZpmmIeqdwfXrhUAdJeeMWy8+bscWvZ+EM0AoxCgIhKQORhxt8LHQAir982o1XxDh8ziilP9BuLkSlpFweYL/vQKs5lG4AoV9CefbGdOvCyO585Qzsb924ymEFQLbiFZobFcQLm1SnKWB3cAHtIBa/sL0gsZXVj9sBEGcABId4nRRr+zMrZgVQf4oMBKhpBrcCqB4OWtyVfATLrANFgTyrSbFL9W5X/nlYc4hmb7fx01+xeKrrOMIP4KdBkoOeBLg/OnCBNscEDEAZAl2fPEIX9yXuE5pDzJZqXjF3EQ/h/O6VwbPRs1Lt3jNVu7TY1ZlTwh8XeWaa3nHqiZryXjz2/VBQVM53k6J1zZVtdxmxBJ3KUhnX3bR/2X6KoRh2rpo2Z4GclyRXc+SbFevqIz9jIpV6+hPtma1ITPp6ri5KaHE+vQagqHC7zZZ0/Sic4jlpn42ZwFcFvWqJD0YPsO/Fmj3OgvBEVhTzhmDMPEf00Gw4Ps8dNEuxuEIGsPAsHrp92fRD6y2yI0PnoKxj945h7GkZykvFMGrPCHo4CNjEBPJsOl48fAfMDPdAYv8x/q+abSkd/yAUwOTTwNR05kw3v36LOidcqDzGdB0j8CpWMiArsx/TnRg2AMg5Bl2ZFkIQMTfUDjyO8EteKFfQlkGdfNSXK81fboqDzafBdsmxIBlill0CKsYt0mHbUs9bCQ4y7wkNdCJLLmiCQaIqAE7Em1DMURfsS0tCGTJ4yrkP0u0xygf7dGEfbXai5aLvbYYgVHAjYdAPgBsYT4PsC0gKVBGIXxEYD9mbv4ldTDNYhQLMdt5dD93JglXAXWAfu8lVFEN5WpgC6oumIZ6IOF2+b5oWcQUZc2ziGfICtG48vo5fb8AyMYqC7zB2eX1c0UONNrMdgnGjSzKVtnFW0dCD+chIEy0u0dmc+8SDK1V1LYs1TocVuvQ/EpWq+hm0mFit8p0aO3nQjrqtIh8dm+8UmznC11XsFVIxxoR1ZWbxh7bmqWBDNW3yIrCUH7a0ix+Me6Jz1wShS53mUJQoxIkFEyVNaAzDPsGc4bEWlr6UmjJpHQN1zm8YoSaQ2wwll1f5Go7aQ+vWH+o1iCKOsST1lnbmo+VMbI3wcd2Zxdrim1UAaHI2fbcpVXBpf2Brz/wHbcuwWSITxenl8LF+agKCW8HhSNLBFRoUt+kZLesFAgn6DYtBQcsw8RpLROtO6OGWewcIp58VZOTAma4A3bC7CHpAgF2I3ClObbzWH+VXDsOF2slOIQ5Hae78k8y92X29ZSsJtE0dIR3QG4QrUzxx7jjhvrvGCGXVOwAt+m9IGvxF++F/47FF1ix7Of/c3RIR10LNW5C3Je56Sml0xuAtQVqBIZjJ/Prz+bJ4ySTmwbzeX4ayWD9KbZ14wYyKwZKPm/xPtxXzJ7d4Ap+p9b+Nrumbtg1UbggAQSqA/I1h/8CzpW8Hu0nIn0QZNu2uH2kXxjxF+x7p5+X/OClWy7FU2bXpIuUrCz2Ddk9v0btOr2GRU3XKaee5RhBYInE11xRC0wiWoqnisS2iG65mu4TJtqcZU2Da+Qum6Ku8kZJskQ8gEu934wZngXixso+hiAhEIjusHAKlhImaX1LYYpZsvjMQq/BxAXCBdH0HhDFe7yfbg8MldyYYK/itrg0D6fhW2S1CNiXAHB2ys31BwDMAZqBcJWHnrsMSJ5liWTeAzrdWEQujjaM3wFH8CNvhTgI3A3HifJLI2Z/3G18eQSsD2+UmGJVlQeeEjbGFxoleHv6YtwsDnHu7LsU7Mryl6kBmvcgcfOYnZ0y8FOmyI5BueJu+WZak3SztkOW2oKOK5u27Eqi7plyHAfjSj6pTidjmKOh6SZckwc4B2n1ma7T8Z8jeyzZT5rO9o4ql+83lgBQOwTk14vXeeZXqQwKcBkSpyD9HGUJ/sVSdLjEVDeeoHetxF8mS5jJ+NgonIo1VK/498dbP4Fnk0qEFPxaPE5my2iy+IDo1wJEhp/cCwTDatm5sYpyI1euPZ3numH7eqKlIu/bNPpBxS9Q2TxVR2teAFn4graVWb+CM5sRBzwauVFydkFu1FxLeUuy2LbSlcKvFjxRVNWQtMZVU3kzLFWbXxCUjVdBllSpkzrVe9hkqwjCbm2RlEenmi7e/vptEMNSAgPdiJJpA+iqBJpoS2CNEDD3iEEsAsL0zdkgmy2J7a2UF7RB8j08NGAhulzUv+ttFRYjYV/sBWyQHFOsf6N2xsreBnmNNshbMT/A4JAsy7FE19ZNUZNkT7QIkUTV9RXJMU0l8PgC13vzY29+vLD5USIdiiZDV/YJjtWHg42+fJgPz4upxj8hYA0msUxpHV5MaYTQgFLzYyszwLb0uONiaytg7VN4STOgUuLtzYBnD5fYi744rtC2AW3TwPHpaQFEYRBLtGXNEHXJkxXflA2tugXqHnnbI2+vQ/TlqjS9DnGFjeYUq3GQEh+6Rt3WLy2rzF1llaIAdKfBzx6yegWQFWOlsahVsSPCq4SuXKBF29dgYM1xRM1WTNFVdXiU5Mu+5wKtWt6bg65YYGoaATOc3gP+tKMjvbQi5mv1pbMxK1XwF34nqbRPcgFBb+QageBdfPJ6hZ1sq+gOVWxPce7eOEosqkvnUdBKps36P+i8dWCkf4YYgGQTjNJN2ONvrxF/66DXzTOCcHBSDIj5Fj1VAv6uKJJoucQTbdMNAls3rMCvTEjbWyJ7S+RNxABUSbtyeff0MQAFaQUM/nV469lZZk3UOFMDK5WluVuGasDk8ZFlHTkgumGZLy0Zzz/JZ5UVBSacn0w+yhaIYLzK9cM4OiyZ3NEhHf2FjLc6Qb0HGp8AaOymYhFmZwxOT+5uTkt6gzTOysiKbizqczKYghwt0yfMYj7GbiWKzPJ8DM3UZbvDfIyz89Ht9c0fWA5qvdLFxIzki6duF5JuU7HwTqH2z/Y1doTzE9qg1ZMPjmlxkNDDVHRgQh4IqJJaO8g6di4Ig2R4+tNBGZzF8dFSH+u6L5hNuXhA6QT2I1eiI7kgJdmMRmtxkEa17irgkHRGaUnA9Vg7dQLUOu8EyKjNa6XZNyzXJKoimpYMGH6gu6LteYroeL6uuVLgW7r/UiVoGLtmHiKcOcbycgzBFWrT/VNMq2w1jrJb+ZjSLfAProWhLjPNPo4mBCQBpZiaPoZLZ35PliNQKtigoxmQzmwewo7+FT/JrYyHK7O5aoJl9WSlp2LxBKvHeTrjYT7BCRTwyXG0MDB5Jr/9iBalAWyFNTGH6zpK6wvyJYdHw1PmMobAPIUQG/4nOkSVRc1QLNGxgS/Dasqe6+qWYfH5vekThlV1YBkaVCVbUYzGKfdNidBjWR2yHqAGXqmtn+T6e7Z+6frT7JOSpreVpa9r20MA/GjDT0/Tcx1EbUu2FH6B8/VWy5o+S7LwNRyPsc5M/zsBILK+XOyGXgA1lWKbdgGob+SQLyJb2eqZKZKuo2OFXZeKlgIckHLzhVO6G+2JrNq5YGxaIjkpRQgSI6m5ibHTZ9FiFsLbLwp1lLd5pWKL7y42e2Pnh7rCwI27Pmzo3FHY8Y0dIaqqypfUlK+oDH1yylSUr6u/ftm/uitH2LDlJu1GS/vR7IasqZzTck2LpqY4hIDppsieLsoyBOu6AYj0ylyYpOL2CfkeeqSC00KQL4g6tHCfRtrn+GvFlI7w0lKhsE6SdG1AD0CXMV3ZLKuI6xp8yYXD8jEry1CXFaGuzbPPVThsj9HWKJv1YG1bDVHtXOfMOeLYcueKCsLKtOxmBc+54h2mJin6doV2SqyYOnJ9MRXUAfuwmQIqA1mzy1xSHGnQoLMKB7YlMQTeMi3lkl9FZzymJf8Qnxwv2fZ6JbBeF8qxJhu2ZkuS1S0D6rt+hOouyt4ZGX8P2VfpUDs7yJP+XiNjWtcIW6hlLdSwJ1S+Ns1+r4F1qoFdMDV9azWw0Ql3aSZCRyAtQaMQfDLGGsaPgMt30nlcZft95isnQkTkZq6l6HZ5Z6t1/bBk8hfJlHOs7IsDSnuE52QeF1qM23C3ZzRt+sC9GcOv5KDydU25tjMcDHjBElKBf1Qse56FVPW1aalmFtwKNYpm+3zEvHaZBXdtr1IqnauULNi29v2DGwCr/EEUFrgD+DbkiabZiS7ZyrDJqZlvAs58ZdpkZyrYXgHbVoXZK2B7CGyvgO0VsA4VMPENa2Cd9Zb6VwGiBO4ubkuCNdrGbNzEcnNjEc0tAzbUrgtoquUBG+DN0zVR6SxgI1nfXIhG8umG+IymcRjx0tNCS8VIjORL6mgt+3ZMvqN9e5PpfTdO3N4nd+U50jagIKDYwQY8fcRHrIdBzMcZmUT3ELoWTguhHsyF9ITD1bLaU4T7Q/+i6uLkNef4lnB9UvSc/kn70f6gWBxEOYIHW8K4Q1nv6QK2O1hg922w2r1wDLjgvBh4Eo9V/FxSD2X7ECvoNG/HxLyacnB8QVbfIu9xSRYb1wCuBvMD4jP/1T5stAhKtgg/HtAl746xMbxHxmNsQQOkEa8NaNQiHB+ddhinfgO4YlHyiKdaBvUAu44ha19uXgW4GEyuFqugdr0KF9GPzpdAo6fBWUYeWDAb1wCuVvWeKvxLk/fXsvd/yJ7AnIoAPhyTj4Kq9SCcDWxcPAsesPhn23794Ph0/rh8mDc8B3C91lNkJAFZaUYD+podQIxxJQXYkqj3JFUA8fYyJ8E4OL6bE0cAzWMe3ZPpB4QUy/qkDQmNHO7iC4j59h4EBaK+a6fdqt9aVSRcFEPswGwZBexT//b29OaPTf7JRNyth9i5ru4mvWOLAUvAI9PXHUlxJdEwafsALB7py2qFw5zVWHRTUmTRyuMZnwbC79gxOBJO0tDEELt7OFMyxoDFT0jeO6g5h52k7vFZ0BjxbUtWSWpWoSBf+YVVCWm89rpzmlJKZJzjO09mrelC6T5LSanKUjI9xfcosekbiY0nNxNcCfkMhbWK1gVBNSSpagCxmo6KruHhb5l1iKrjATbDghVCDZJfO079ZWZ2tRmIzAUXPnvZxqrFaJEDr8YZ8NvnwGvGb4DpSVK+vc0t8R7AUA4dkGJDB2aB1vMr7HLDIOPUQGJHYfhA/rsiwZ1/vfgrEB17DZ82BWZHFRUWkp3ANKm+tpDAw/tuclPF4LXSF6zIIymw1Gdgsm+FvzqG7aq+AdFvQeCDuqxJoq1brmgqLhwkPQjg38osUAP0S6WQxJXaf2+ZwYJdmlJrbJgdVJRi5qiY8zahaZuaXmiNJ5Z4uTOLaqYlgxYz2/bcfc/dn4W70zoj3BGoY+8SepGrr94z+Jdi8CTQPQhstkTNMHRR03VDdCxiiQYxFcm3lEA3K4NxTNMU1XzGcApsdcTeGSi5wqufYmpcFDJ/2wtp4UrNCalm1BegWO718L0e3p0erkvNObVaf/GeUb8UozY9rAHnYkIploeUXR1+M31RMVzF120CYVmVmrima1qBU6/x92dm1drrY9XoXUjJ/l/2bHoPl7wAXIIOqVIazLNodFpVXLhnzxvYcyFetiv27HqebwSeLUqeGaAeTUTLkA3RVlTiS76k+bmnsnq0ZRe8HqyH8C0jJei5ZBQKdGDu0eg9Gv0C7BW83TWEmGey6Bevvfx5WS0Cg4kfuHVZ2k6d0K/f/ywrCvFVh4iGbxNRU31JdANHgd804qiaK2tKhf9ZNgwV07LzTkHqYBY8CCcJF3SdyWK5a4LD4e6NVwseZ/iv3cjjXHrhy3mc34wzhAAgJjuBCK4PNMFUS7TNQBKJpfkB0QPVU/lkeD4aE3SPHGGVxb48lbDPU1W9pC8npXJJX9ltsgvetk0ssDC6Hpz3L4S0xNhu4cA00TECv+5YOIPzHwEDyCKDc6ESLQN3ZbPbQOB13X3OYW2bhtJhHDC/FrlwYH7ln7hqW25XrtfEVhLUSxYAdcyqI34Xyf3E7yj293iwmtMyaqNJRGuOj+iRLAakfaYpWcICLiuLxR2RGeyHS+JKpVgjq3mo3fFt5DqeFwl3C1ISCQe7Pcdyql54D6EGS/gtnsQHeJQIcX2+U1KU7jNx5ytn/kjj52xBFNgPZLnF5PpjL4IwidAT/Hk4/ZZEJZc9M/fO8bqECC1xD1eeOJpv61ojPAnAml0SYHjT+2A1xq3ZvdiIaXWdGQojPkGxEVMBJatDZpTSN9ItrSwbL/AVMKC2cX1pPV9eKhZL+nrJsc49Eiv8xgRC/F5ly0qu1J3NlhTOnl+o+88X9M89NpnN+LH84dVlgS1dNos1djle1EjHPXyBXpXx2pWU8d9Xvmcq3fOBX82y3btnfekJXXXB5iy9azYHI5bYkJpOAteQNBFcLraoOQoRHV9VRV+1wEPu2YZqVDQ3gScYJir6XZXJTZQbLNy6XsmOYpY3lFqHoefLrOB6rv97DH8I7yapEhHzDLa6Qd5EtSG8m3X+1JZQx8eRqb/T43nLF7PxZX2zwVvTQsqQaCl1LbdJTRSpPTOtsIwVyfytL+mSng+o7fsIFFwSH4Jqp+R5ImlfOTNNLJ6HlCnUhu23Lbpjdd43KqdCxreoZmAani6LhibLokZkX7Qc1YS4UjPwNdtXPBJUKI+aJKsdliCvsj+eIiMEVJatmA8XT7RXtv4c/KEdqCV8Pb8FTGV0/uWqkN3eGMXCYbAamzCC2W/Obd8e1NoM828xYAmsZZngXVU74wXMGucgLeabp8WzBGcMe/PrAUSAPywPKCglHArIHT4KRcwKYSEWESr9OoNkOgC0svmNSQDTOyM4zfyD4+TO7yGmu8umKXjFXM70CqX0ijrEKDeD3+tnoB4cW4bwrZgBml6gwQVW/oIWz4/dQkMsaFPSOSJ7jI6p/MqhxaeaslcYmOJtHVrSCySjDi7uRuAI3KR4xLwDOd+iy4xU8MR1rHNwvr21ziG7puqCJ9ALAg+iM2xbBGOEiL5LdM31wKRzGcOEC50zDOwZ23FBM2Y5GYSE9skVvtOimcwqe9EUq3bR2o0R8Bigw4E4OOkL8HBaaTP+C+Yk/IhWY5+2u3SSTpDJDOgbvUtf5r0QzKOJcIMDJNfhOsVX4YiOQHlk/EFyBZOAwjclZD5P9TRToamVXfFmZrUOOyvTVq2ocbhcwYrM43bP4zZdr0HXLQUV8wmCpCqKqRPf1i078MXAd9CDGpiigw5639NVU9e1QPcqsw0g8qhLN1YsvzoMkCoQTr0yb2YZZN7kzxERVY3K1uCyBeeCnv7se1Q/U3pqBWt5O1wl0Iip2EQRHQjHALTWhNhLoqiiZyuB7RqurnuVofGqrMlNCgo35CrDpOkk7QsUK6ixtw9VRP/FuI1lpMzmG9cvcc9s9szmeXPh3zyzcSSi2p4pibZhaqLmKo5oWwBfen5gauDk8C2/MgjM0ixJNDpjNudg7TnfnYW3GjtzAa9GMPPlVBo1Kzoymfz32f3/7DnNXq0pxUL3nKYJp5E9xdQs1xSJFmf8OaLrSbLo+8Q2fUtzJLWytpGlQcxfd56ST0PhJHRemL9Y1p+SvcjgF4d/KfK1t5palzN6qQSKnYDTt4CZKlpgOL5sieCrBV4iAXBqKa4vykRWZcexia64e8x0j5lmPKwGM819/7KY6duxNSTdkzTT80XF8iDwQYbfXGJ4om4EludJnhoowZuFS/M08w8Hl+4F/051DPd2xZZcRZFdKVB9XTR9yRS1QAsguBUwU09VfU/xHNWqSWN7q3BpK26ztjT+NHDpntnsmc1LqDCupBmeqjuiDqCpqEEMpOgQCcIvHBjJdlTJVeRngksBxHgKjLSdHqPsQQyGSe1dv3tdZif2okHIiEYMQwxczYVgcoJV0YiPweQaCVTJdBT1jWOk7TSXrMbJHiPds5dfkp8nLsRAmxqvvCXq7KjJH3PfHx3GHeSc8UnkraAl1fL4/wPkrEoRI08CAA==", - "hash": "ODJmODdmNjVjZDIwMDhmZGJiMzVjYmY5NGQ5ZWRmNzQ0ZWJiOTY0Ng==" + "data": "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", + "hash": "OGYzZDJmMGM2MmE2NGY0ZWU2ZmU0ZWQ4ZjczNGQxNjdkMTQ1NDIwOA==" } } ] }, "request": { "method": "PUT", - "url": "DocumentReference/dea4254d-9e3d-cc2b-5008-447871e3f2eb" + "url": "DocumentReference/963f3838-0961-0382-dc5c-e4853e984ad6" } } ] diff --git a/src/Microsoft.Health.Fhir.Liquid.Converter.FunctionalTests/TestData/Expected/Ccda/CCD/CCD-Parent-Document-Replace-C-CDAR2.1-expected.json b/src/Microsoft.Health.Fhir.Liquid.Converter.FunctionalTests/TestData/Expected/Ccda/CCD/CCD-Parent-Document-Replace-C-CDAR2.1-expected.json index ed6a00adc..a61fa9c8e 100644 --- a/src/Microsoft.Health.Fhir.Liquid.Converter.FunctionalTests/TestData/Expected/Ccda/CCD/CCD-Parent-Document-Replace-C-CDAR2.1-expected.json +++ b/src/Microsoft.Health.Fhir.Liquid.Converter.FunctionalTests/TestData/Expected/Ccda/CCD/CCD-Parent-Document-Replace-C-CDAR2.1-expected.json @@ -36,7 +36,8 @@ "event": [ { "period": { - "start": "2015-07-23T07:00:00+08:00" + "start": "2015-07-23T07:00:00+08:00", + "end": "2015-07-23T12:00:00+08:00" } } ], @@ -730,7 +731,6 @@ "value": "urn:uuid:cdbd33f0-6cde-11db-9fe1-0833200c9a66" } ], - "status": "active", "subject": { "reference": "Patient/89236d99-8509-7d3a-9dfb-a82c6b81d268" }, @@ -908,7 +908,15 @@ "value": "urn:uuid:de10790f-1496-4729-8fe6-f1b87b6219f7" } ], - "status": "active", + "vaccineCode": { + "coding": [ + { + "code": "71181003", + "display": "vaccine", + "system": "http://snomed.info/sct" + } + ] + }, "patient": { "reference": "Patient/89236d99-8509-7d3a-9dfb-a82c6b81d268" } @@ -967,7 +975,7 @@ } ] }, - "date": "2021-04-29T03:37:46.724Z", + "date": "2021-07-02T05:38:36.183Z", "status": "current", "content": [ { diff --git a/src/Microsoft.Health.Fhir.Liquid.Converter.FunctionalTests/TestData/Expected/Ccda/CCD/CCD-expected.json b/src/Microsoft.Health.Fhir.Liquid.Converter.FunctionalTests/TestData/Expected/Ccda/CCD/CCD-expected.json index b9c0dce3c..1b502f880 100644 --- a/src/Microsoft.Health.Fhir.Liquid.Converter.FunctionalTests/TestData/Expected/Ccda/CCD/CCD-expected.json +++ b/src/Microsoft.Health.Fhir.Liquid.Converter.FunctionalTests/TestData/Expected/Ccda/CCD/CCD-expected.json @@ -36,7 +36,8 @@ "event": [ { "period": { - "start": "2014-10-01" + "start": "2014-10-01", + "end": "2014-10-15T23:30:26+08:00" } } ], @@ -172,9 +173,6 @@ }, { "reference": "Device/d51e0d43-a5bb-d53e-b265-6a569b79e5ec" - }, - { - "reference": "Practitioner/[nullFlavor, NI]" } ] }, @@ -347,40 +345,6 @@ "url": "Organization/8be20678-75c3-0677-9d89-54eb10e09bc4" } }, - { - "fullUrl": "urn:uuid:[nullFlavor, NI]", - "resource": { - "resourceType": "Practitioner", - "id": "[nullFlavor, NI]", - "meta": { - "profile": [ - "http://hl7.org/fhir/us/core/StructureDefinition/us-core-practitioner" - ] - }, - "address": [ - { - "line": [ - "1004 Healthcare Drive " - ], - "city": "Portland", - "state": "OR", - "country": "US", - "postalCode": "99123" - } - ], - "telecom": [ - { - "system": "phone", - "value": "+1(555)555-1004", - "use": "work" - } - ] - }, - "request": { - "method": "PUT", - "url": "Practitioner/[nullFlavor, NI]" - } - }, { "fullUrl": "urn:uuid:03a91833-bc93-2b74-b2a0-7851c2c34ebc", "resource": { @@ -420,16 +384,14 @@ "url": "ombCategory", "valueCoding": { "code": "2106-3", - "display": "White", - "system": "urn:oid:2.16.840.1.113883.6.238" + "display": "White" } }, { "url": "detailed", "valueCoding": { "code": "2114-7", - "display": "Italian", - "system": "urn:oid:2.16.840.1.113883.6.238" + "display": "Italian" } }, { @@ -445,8 +407,7 @@ "url": "ombCategory", "valueCoding": { "code": "2186-5", - "display": "Not Hispanic or Latino", - "system": "urn:oid:2.16.840.1.113883.6.238" + "display": "Not Hispanic or Latino" } }, { @@ -485,8 +446,8 @@ "coding": [ { "system": "urn:ietf:bcp:47", - "code": "ita", - "display": "ita" + "code": "it", + "display": "Italian" } ] }, @@ -497,8 +458,8 @@ "coding": [ { "system": "urn:ietf:bcp:47", - "code": "eng", - "display": "eng" + "code": "en", + "display": "English" } ] }, @@ -603,7 +564,6 @@ "value": "urn:uuid:7d5a02b0-67a4-11db-bd13-0800200c9a66" } ], - "status": "active", "code": { "coding": [ { @@ -653,7 +613,6 @@ ] } ], - "status": "active", "code": { "coding": [ { @@ -1195,6 +1154,19 @@ } ], "status": "completed", + "code": { + "coding": [ + { + "code": "6025007", + "display": "Laparoscopic appendectomy", + "system": "http://snomed.info/sct" + } + ] + }, + "performedPeriod": { + "start": "2014-10-02T23:30:26+08:00", + "end": "2014-10-03T01:42:45+08:00" + }, "bodySite": [ { "coding": [ @@ -1329,7 +1301,7 @@ } ] }, - "date": "2021-04-29T03:37:46.758Z", + "date": "2021-07-02T05:38:36.225Z", "status": "current", "content": [ { diff --git a/src/Microsoft.Health.Fhir.Liquid.Converter.FunctionalTests/TestData/Expected/Ccda/ConsultationNote/CDA_with_Embedded_PDF-expected.json b/src/Microsoft.Health.Fhir.Liquid.Converter.FunctionalTests/TestData/Expected/Ccda/ConsultationNote/CDA_with_Embedded_PDF-expected.json index f21b322da..8600331bb 100644 --- a/src/Microsoft.Health.Fhir.Liquid.Converter.FunctionalTests/TestData/Expected/Ccda/ConsultationNote/CDA_with_Embedded_PDF-expected.json +++ b/src/Microsoft.Health.Fhir.Liquid.Converter.FunctionalTests/TestData/Expected/Ccda/ConsultationNote/CDA_with_Embedded_PDF-expected.json @@ -36,9 +36,6 @@ }, { "reference": "Device/ce77e7d1-5b1b-2009-1f47-760c5df20c50" - }, - { - "reference": "Practitioner/70c15f61-97e5-a6df-6af7-2a959e230fd4" } ] }, @@ -226,47 +223,6 @@ "url": "Organization/c0da242a-0989-19d3-3bbd-75eb113418f2" } }, - { - "fullUrl": "urn:uuid:70c15f61-97e5-a6df-6af7-2a959e230fd4", - "resource": { - "resourceType": "Practitioner", - "id": "70c15f61-97e5-a6df-6af7-2a959e230fd4", - "meta": { - "profile": [ - "http://hl7.org/fhir/us/core/StructureDefinition/us-core-practitioner" - ] - }, - "identifier": [ - { - "system": "http://hl7.org/fhir/sid/us-npi", - "value": "66660" - } - ], - "address": [ - { - "use": "work", - "line": [ - "P.O. Box 832624" - ], - "city": "Richardson", - "state": "TX", - "country": "US", - "postalCode": "75083" - } - ], - "telecom": [ - { - "system": "phone", - "value": "+1(202)776-7700", - "use": "work" - } - ] - }, - "request": { - "method": "PUT", - "url": "Practitioner/70c15f61-97e5-a6df-6af7-2a959e230fd4" - } - }, { "fullUrl": "urn:uuid:007bb6b5-fac8-7a95-8d44-ecebd8320f23", "resource": { @@ -307,8 +263,7 @@ "url": "ombCategory", "valueCoding": { "code": "2106-3", - "display": "White", - "system": "urn:oid:2.16.840.1.113883.6.238" + "display": "White" } }, { @@ -324,8 +279,7 @@ "url": "ombCategory", "valueCoding": { "code": "2186-5", - "display": "Not Hispanic or Latino", - "system": "urn:oid:2.16.840.1.113883.6.238" + "display": "Not Hispanic or Latino" } }, { @@ -364,8 +318,8 @@ "coding": [ { "system": "urn:ietf:bcp:47", - "code": "eng", - "display": "eng" + "code": "en", + "display": "English" } ] } @@ -391,7 +345,7 @@ } ] }, - "date": "2021-05-06T07:59:47.575Z", + "date": "2021-07-02T05:38:38.901Z", "status": "current", "content": [ { diff --git a/src/Microsoft.Health.Fhir.Liquid.Converter.FunctionalTests/TestData/Expected/Ccda/ConsultationNote/Care_Plan-expected.json b/src/Microsoft.Health.Fhir.Liquid.Converter.FunctionalTests/TestData/Expected/Ccda/ConsultationNote/Care_Plan-expected.json index 65eb1dfbe..5e9b7128f 100644 --- a/src/Microsoft.Health.Fhir.Liquid.Converter.FunctionalTests/TestData/Expected/Ccda/ConsultationNote/Care_Plan-expected.json +++ b/src/Microsoft.Health.Fhir.Liquid.Converter.FunctionalTests/TestData/Expected/Ccda/ConsultationNote/Care_Plan-expected.json @@ -1,4 +1,4 @@ - { +{ "resourceType": "Bundle", "type": "batch", "entry": [ @@ -36,7 +36,8 @@ "event": [ { "period": { - "start": "2013-07-20" + "start": "2013-07-20", + "end": "2013-08-15" } } ], @@ -205,17 +206,6 @@ "display": "Inpatient", "system": "urn:oid:2.16.840.1.113883.5.4" }, - "type": [ - { - "coding": [ - { - "code": "IMP", - "display": "Inpatient", - "system": "urn:oid:2.16.840.1.113883.5.4" - } - ] - } - ], "identifier": [ { "system": "urn:oid:2.16.840.1.113883.19", @@ -311,7 +301,6 @@ ] }, { - "use": "SRCH", "family": "Everywoman", "given": [ "Eve" @@ -328,16 +317,14 @@ "url": "ombCategory", "valueCoding": { "code": "2106-3", - "display": "White", - "system": "urn:oid:2.16.840.1.113883.6.238" + "display": "White" } }, { "url": "ombCategory", "valueCoding": { "code": "2076-8", - "display": "Hawaiian or Other Pacific Islander", - "system": "urn:oid:2.16.840.1.113883.6.238" + "display": "Hawaiian or Other Pacific Islander" } }, { @@ -353,8 +340,7 @@ "url": "ombCategory", "valueCoding": { "code": "2186-5", - "display": "Not Hispanic or Latino", - "system": "urn:oid:2.16.840.1.113883.6.238" + "display": "Not Hispanic or Latino" } }, { @@ -389,8 +375,8 @@ "coding": [ { "system": "urn:ietf:bcp:47", - "code": "eng", - "display": "eng" + "code": "en", + "display": "English" } ] }, @@ -470,7 +456,7 @@ } ] }, - "date": "2021-05-06T07:59:47.463Z", + "date": "2021-07-02T05:38:38.755Z", "status": "current", "content": [ { diff --git a/src/Microsoft.Health.Fhir.Liquid.Converter.FunctionalTests/TestData/Expected/Ccda/ConsultationNote/Consultation_Note-expected.json b/src/Microsoft.Health.Fhir.Liquid.Converter.FunctionalTests/TestData/Expected/Ccda/ConsultationNote/Consultation_Note-expected.json index 7e8c137a6..97b3529cc 100644 --- a/src/Microsoft.Health.Fhir.Liquid.Converter.FunctionalTests/TestData/Expected/Ccda/ConsultationNote/Consultation_Note-expected.json +++ b/src/Microsoft.Health.Fhir.Liquid.Converter.FunctionalTests/TestData/Expected/Ccda/ConsultationNote/Consultation_Note-expected.json @@ -3,10 +3,10 @@ "type": "batch", "entry": [ { - "fullUrl": "urn:uuid:6e2e608e-4c9d-1f62-d940-c48de2cb77ad", + "fullUrl": "urn:uuid:1d8cb7e0-2960-f2b6-f3d4-f4746c901983", "resource": { "resourceType": "Composition", - "id": "6e2e608e-4c9d-1f62-d940-c48de2cb77ad", + "id": "1d8cb7e0-2960-f2b6-f3d4-f4746c901983", "identifier": { "use": "official", "value": "2.16.840.1.113883.19.5.99999.1" @@ -272,7 +272,7 @@ }, "request": { "method": "PUT", - "url": "Composition/6e2e608e-4c9d-1f62-d940-c48de2cb77ad" + "url": "Composition/1d8cb7e0-2960-f2b6-f3d4-f4746c901983" } }, { @@ -349,19 +349,8 @@ "class": { "code": "99213", "display": "Evaluation and Management", - "system": "urn:oid:2.16.840.1.113883.6.12" + "system": "http://www.ama-assn.org/go/cpt" }, - "type": [ - { - "coding": [ - { - "code": "99213", - "display": "Evaluation and Management", - "system": "urn:oid:2.16.840.1.113883.6.12" - } - ] - } - ], "identifier": [ { "system": "urn:oid:2.16.840.1.113883.19", @@ -458,7 +447,6 @@ ] }, { - "use": "SRCH", "family": "Everywoman", "given": [ "Eve" @@ -475,16 +463,14 @@ "url": "ombCategory", "valueCoding": { "code": "2106-3", - "display": "White", - "system": "urn:oid:2.16.840.1.113883.6.238" + "display": "White" } }, { "url": "ombCategory", "valueCoding": { "code": "2076-8", - "display": "Hawaiian or Other Pacific Islander", - "system": "urn:oid:2.16.840.1.113883.6.238" + "display": "Hawaiian or Other Pacific Islander" } }, { @@ -500,8 +486,7 @@ "url": "ombCategory", "valueCoding": { "code": "2186-5", - "display": "Not Hispanic or Latino", - "system": "urn:oid:2.16.840.1.113883.6.238" + "display": "Not Hispanic or Latino" } }, { @@ -536,8 +521,8 @@ "coding": [ { "system": "urn:ietf:bcp:47", - "code": "eng", - "display": "eng" + "code": "en", + "display": "English" } ] }, @@ -604,10 +589,10 @@ } }, { - "fullUrl": "urn:uuid:055ddf40-8945-8113-5454-eb0070939c37", + "fullUrl": "urn:uuid:4f4be2e3-e836-5ee4-bee6-93b4c1eb8982", "resource": { "resourceType": "AllergyIntolerance", - "id": "055ddf40-8945-8113-5454-eb0070939c37", + "id": "4f4be2e3-e836-5ee4-bee6-93b4c1eb8982", "identifier": [ { "system": "urn:ietf:rfc:3986", @@ -627,7 +612,7 @@ "substance": { "coding": [ { - "code": "70618", + "code": "7980", "display": "Penicillin", "system": "http://www.nlm.nih.gov/research/umls/rxnorm" } @@ -644,8 +629,7 @@ ] } ], - "onset": "2008-02-27T00:05:00+08:00", - "severity": "Nausea" + "onset": "2008-02-27T00:05:00+08:00" } ], "onsetDateTime": "1998-05-01", @@ -655,7 +639,7 @@ }, "request": { "method": "PUT", - "url": "AllergyIntolerance/055ddf40-8945-8113-5454-eb0070939c37" + "url": "AllergyIntolerance/4f4be2e3-e836-5ee4-bee6-93b4c1eb8982" } }, { @@ -720,8 +704,7 @@ } ] } - ], - "severity": "Wheezing" + ] }, { "substance": { @@ -743,8 +726,7 @@ } ] } - ], - "severity": "mild" + ] } ], "patient": { @@ -896,7 +878,6 @@ "value": "urn:uuid:cdbd33f0-6cde-11db-9fe1-0800200c9a66" } ], - "status": "active", "dosage": [ { "doseAndRate": [ @@ -951,7 +932,6 @@ "value": "urn:uuid:6c844c75-aa34-411c-b7bd-5e4a9f206e29" } ], - "status": "active", "dosage": [ { "doseAndRate": [ @@ -1477,7 +1457,6 @@ "value": "urn:uuid:122ed3ae-6d9e-43d0-bfa2-434ea34b1426" } ], - "status": "active", "code": { "coding": [ { @@ -1531,7 +1510,6 @@ ] } ], - "status": "active", "code": { "coding": [ { @@ -2425,10 +2403,10 @@ } }, { - "fullUrl": "urn:uuid:ec57a6db-452b-8243-3f53-596ed5c4ca15", + "fullUrl": "urn:uuid:3e7f34a2-a64f-12ff-e036-d439cf52f5d9", "resource": { "resourceType": "DocumentReference", - "id": "ec57a6db-452b-8243-3f53-596ed5c4ca15", + "id": "3e7f34a2-a64f-12ff-e036-d439cf52f5d9", "type": { "coding": [ { @@ -2438,21 +2416,21 @@ } ] }, - "date": "2021-05-21T05:21:37.191Z", + "date": "2021-07-02T05:38:39.018Z", "status": "current", "content": [ { "attachment": { "contentType": "text/plain", - "data": "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", - "hash": "MTg5OGRkNDg3ODlmNjMwZTIwNjhhMzQzYTkyNmE3OGJjZDIwYTgxOA==" + "data": "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", + "hash": "YTFiM2ViZTE3ODY4ZDc2OTg1Nzc2MzFjYTJjMmVlOGRkNzRmYjE4YQ==" } } ] }, "request": { "method": "PUT", - "url": "DocumentReference/ec57a6db-452b-8243-3f53-596ed5c4ca15" + "url": "DocumentReference/3e7f34a2-a64f-12ff-e036-d439cf52f5d9" } } ] diff --git a/src/Microsoft.Health.Fhir.Liquid.Converter.FunctionalTests/TestData/Expected/Ccda/ConsultationNote/Unstructured_Document_embed-expected.json b/src/Microsoft.Health.Fhir.Liquid.Converter.FunctionalTests/TestData/Expected/Ccda/ConsultationNote/Unstructured_Document_embed-expected.json index 74250a61d..528ba6c1c 100644 --- a/src/Microsoft.Health.Fhir.Liquid.Converter.FunctionalTests/TestData/Expected/Ccda/ConsultationNote/Unstructured_Document_embed-expected.json +++ b/src/Microsoft.Health.Fhir.Liquid.Converter.FunctionalTests/TestData/Expected/Ccda/ConsultationNote/Unstructured_Document_embed-expected.json @@ -232,8 +232,7 @@ "url": "detailed", "valueCoding": { "code": "1966-1", - "display": "Aleut", - "system": "urn:oid:2.16.840.1.113883.6.238" + "display": "Aleut" } }, { @@ -249,8 +248,7 @@ "url": "ombCategory", "valueCoding": { "code": "2186-5", - "display": "Not Hispanic or Latino", - "system": "urn:oid:2.16.840.1.113883.6.238" + "display": "Not Hispanic or Latino" } }, { @@ -365,7 +363,7 @@ } ] }, - "date": "2021-05-06T07:59:48.388Z", + "date": "2021-07-02T05:38:39.827Z", "status": "current", "content": [ { diff --git a/src/Microsoft.Health.Fhir.Liquid.Converter.FunctionalTests/TestData/Expected/Ccda/DischargeSummary/Consult-Document-Closing-Referral-C-CDAR2.1-expected.json b/src/Microsoft.Health.Fhir.Liquid.Converter.FunctionalTests/TestData/Expected/Ccda/DischargeSummary/Consult-Document-Closing-Referral-C-CDAR2.1-expected.json index 54c954f3a..be198b582 100644 --- a/src/Microsoft.Health.Fhir.Liquid.Converter.FunctionalTests/TestData/Expected/Ccda/DischargeSummary/Consult-Document-Closing-Referral-C-CDAR2.1-expected.json +++ b/src/Microsoft.Health.Fhir.Liquid.Converter.FunctionalTests/TestData/Expected/Ccda/DischargeSummary/Consult-Document-Closing-Referral-C-CDAR2.1-expected.json @@ -24,15 +24,6 @@ "date": "2018-06-24T01:00:00+08:00", "title": "Community Health Consult Note", "confidentiality": "N", - "section": [ - { - "text": { - "status": "generated", - "div": "
" - }, - "mode": "snapshot" - } - ], "subject": { "reference": "Patient/75d72dd1-7f86-8a14-d4db-94b59ddc3627" }, @@ -62,19 +53,8 @@ "class": { "code": "99213", "display": "Evaluation and Management", - "system": "urn:oid:2.16.840.1.113883.6.12" + "system": "http://www.ama-assn.org/go/cpt" }, - "type": [ - { - "coding": [ - { - "code": "99213", - "display": "Evaluation and Management", - "system": "urn:oid:2.16.840.1.113883.6.12" - } - ] - } - ], "identifier": [ { "system": "urn:oid:2.16.840.1.113883.19", @@ -232,7 +212,6 @@ ] }, { - "use": "SRCH", "family": "Everywoman", "given": [ "Eve" @@ -249,16 +228,14 @@ "url": "ombCategory", "valueCoding": { "code": "2106-3", - "display": "White", - "system": "urn:oid:2.16.840.1.113883.6.238" + "display": "White" } }, { "url": "ombCategory", "valueCoding": { "code": "2076-8", - "display": "Hawaiian or Other Pacific Islander", - "system": "urn:oid:2.16.840.1.113883.6.238" + "display": "Hawaiian or Other Pacific Islander" } }, { @@ -274,8 +251,7 @@ "url": "ombCategory", "valueCoding": { "code": "2186-5", - "display": "Not Hispanic or Latino", - "system": "urn:oid:2.16.840.1.113883.6.238" + "display": "Not Hispanic or Latino" } }, { @@ -310,8 +286,8 @@ "coding": [ { "system": "urn:ietf:bcp:47", - "code": "eng", - "display": "eng" + "code": "en", + "display": "English" } ] }, @@ -391,7 +367,7 @@ } ] }, - "date": "2021-05-08T06:19:47.222Z", + "date": "2021-07-02T05:38:40.839Z", "status": "current", "content": [ { diff --git a/src/Microsoft.Health.Fhir.Liquid.Converter.FunctionalTests/TestData/Expected/Ccda/DischargeSummary/Discharge_Summary-expected.json b/src/Microsoft.Health.Fhir.Liquid.Converter.FunctionalTests/TestData/Expected/Ccda/DischargeSummary/Discharge_Summary-expected.json index 5cbc3e60c..7499981d9 100644 --- a/src/Microsoft.Health.Fhir.Liquid.Converter.FunctionalTests/TestData/Expected/Ccda/DischargeSummary/Discharge_Summary-expected.json +++ b/src/Microsoft.Health.Fhir.Liquid.Converter.FunctionalTests/TestData/Expected/Ccda/DischargeSummary/Discharge_Summary-expected.json @@ -3,10 +3,10 @@ "type": "batch", "entry": [ { - "fullUrl": "urn:uuid:6a78f985-8e73-1b3b-7d3f-4ee5bd9db309", + "fullUrl": "urn:uuid:b508d136-3051-f38b-a005-aa8e23875b04", "resource": { "resourceType": "Composition", - "id": "6a78f985-8e73-1b3b-7d3f-4ee5bd9db309", + "id": "b508d136-3051-f38b-a005-aa8e23875b04", "identifier": { "use": "official", "value": "2.16.840.1.113883.19.5.99999.1" @@ -36,7 +36,8 @@ "event": [ { "period": { - "start": "2014-09-10T08:04:00+08:00" + "start": "2014-09-10T08:04:00+08:00", + "end": "2014-09-17T08:04:00+08:00" } } ], @@ -100,7 +101,7 @@ "code": { "coding": [ { - "code": "C-CDAV2-DDN", + "code": "11535-2", "display": "Hospital Discharge Diagnosis", "system": "http://loinc.org" } @@ -411,15 +412,12 @@ }, { "reference": "Device/5b6663f4-ea97-2504-6413-270cdd613021" - }, - { - "reference": "Practitioner/[nullFlavor, NI]" } ] }, "request": { "method": "PUT", - "url": "Composition/6a78f985-8e73-1b3b-7d3f-4ee5bd9db309" + "url": "Composition/b508d136-3051-f38b-a005-aa8e23875b04" } }, { @@ -682,40 +680,6 @@ "url": "Organization/a1e0faee-3133-28bb-96b3-ad1d0467bc5e" } }, - { - "fullUrl": "urn:uuid:[nullFlavor, NI]", - "resource": { - "resourceType": "Practitioner", - "id": "[nullFlavor, NI]", - "meta": { - "profile": [ - "http://hl7.org/fhir/us/core/StructureDefinition/us-core-practitioner" - ] - }, - "address": [ - { - "line": [ - "1001 Village Avenue" - ], - "city": "Portland", - "state": "OR", - "country": "US", - "postalCode": "99123" - } - ], - "telecom": [ - { - "system": "phone", - "value": "+1(555)555-1004", - "use": "work" - } - ] - }, - "request": { - "method": "PUT", - "url": "Practitioner/[nullFlavor, NI]" - } - }, { "fullUrl": "urn:uuid:5510eaa6-2ad2-b82b-248b-aba749e28fa1", "resource": { @@ -755,8 +719,7 @@ "url": "ombCategory", "valueCoding": { "code": "2028-9", - "display": "Asian", - "system": "urn:oid:2.16.840.1.113883.6.238" + "display": "Asian" } }, { @@ -772,8 +735,7 @@ "url": "ombCategory", "valueCoding": { "code": "2186-5", - "display": "Not Hispanic or Latino", - "system": "urn:oid:2.16.840.1.113883.6.238" + "display": "Not Hispanic or Latino" } }, { @@ -808,8 +770,8 @@ "coding": [ { "system": "urn:ietf:bcp:47", - "code": "eng", - "display": "eng" + "code": "en", + "display": "English" } ] }, @@ -915,8 +877,7 @@ ] } ], - "onset": "2007-05-01", - "severity": "Nausea" + "onset": "2007-05-01" } ], "onsetDateTime": "2007-05-01", @@ -970,8 +931,7 @@ ] } ], - "onset": "2006-05-01", - "severity": "Wheezing" + "onset": "2006-05-01" } ], "onsetDateTime": "2006-05-01", @@ -1025,8 +985,7 @@ ] } ], - "onset": "1998", - "severity": "Hives" + "onset": "1998" } ], "onsetDateTime": "1998", @@ -1146,6 +1105,19 @@ } ], "status": "completed", + "code": { + "coding": [ + { + "code": "6025007", + "display": "Laparoscopic appendectomy", + "system": "http://snomed.info/sct" + } + ] + }, + "performedPeriod": { + "start": "2014-09-10T22:22:05+08:00", + "end": "2014-09-11T00:15:14+08:00" + }, "bodySite": [ { "coding": [ @@ -1530,7 +1502,7 @@ } ] }, - "status": "cancelled", + "status": "not-done", "route": { "coding": [ { @@ -1636,7 +1608,10 @@ "value": "urn:uuid:47d3e719-f688-459d-bcdc-47c6de0767a9" } ], - "status": "active", + "status": "in-progress", + "effectivePeriod": { + "start": "2014-09-17T02:00:00+08:00" + }, "dosage": { "route": { "coding": [ @@ -1684,20 +1659,10 @@ } }, { - "fullUrl": "urn:uuid:", - "resource": { - "resourceType": "Organization" - }, - "request": { - "method": "PUT", - "url": "Organization/" - } - }, - { - "fullUrl": "urn:uuid:67e1b7e5-5efe-9950-7ff2-c8488af34c91", + "fullUrl": "urn:uuid:da9bd794-1f36-b4c0-6338-a2e322cf7a6a", "resource": { "resourceType": "DocumentReference", - "id": "67e1b7e5-5efe-9950-7ff2-c8488af34c91", + "id": "da9bd794-1f36-b4c0-6338-a2e322cf7a6a", "type": { "coding": [ { @@ -1707,21 +1672,21 @@ } ] }, - "date": "2021-05-21T05:21:43.072Z", + "date": "2021-07-02T05:38:41.132Z", "status": "current", "content": [ { "attachment": { "contentType": "text/plain", - "data": "H4sIAAAAAAAACu19e3faSrbn3/kWNZ57byfTBkvi7XF8FwE7oa8fNOCcPj1r1llCKozuEcgtQRL3p5/fLpWkkhAgMHbcZ0znuEGPeu7a78fZf/6Yuewb9wPHm3880svaEeNzy7Od+f3Ho7vRZal5xIKFObdN15vzj0ePPDj6z/Mzeq0ULB5dHkw5X7DF4wNuLviPxcmPwD1iU59PPh51uu0y/cQL/6NUYiNn4fJTJj9dJ7Cmpn/P2XA5m5n+I7t0XD43Z/KRTgmv/zYwfosf/E0+WKYxd3xuLrjNxo/0+JU5xyBN1vHmwdJdYPTss+8tH47Z1VWHsX+7MoNFZ2rO77ndxWunzND0aknXS7rBjMqpUTvVWqyk1TSNvf+F28cM12+8b+KxD+zf0MP/2vMj5umazoz7p2w0dQIWmLMHl7MJZsssD+N25gHz+YPPA45fC+cbZ7a5MBl3+QxXArbwkvvMXF25MkPLskWbPzgW3jHx01pgV02X0dOmteD+nwI25aa7mIoOyqw9f0TLAZ+NXXNucerIxAW88gCQ8OYMw7U8Z245Ng3NpY485rjuMlj4WEdmBmxmopH0eHH1wQsCZ+zyY7bAyCzXmTsWmg0s7LDveHjrkc29BRtz9uCaS/GsnIZoy5njxcxi4Se94swXfG5j61PLEo4aq0cjOMb4PXrP85O++Te6JTpJGsY3mwfO/TxsD8NZBviK7rE1/72ciyVk3x0sGU1EACXrRE3eeAsesB61RDM3xcOfl1it8v4AUyqdn0U9dD1rSS0zgPw8OP0ROB+PpovFw+nJyffv38vfK2XPvz8xNE0/+dv11dCa8plZAjzhMFj8KHzr49HSn59O3UYJz55+q8jLp5ZtrrsV2AsrfY+uHJ2/E+cYY6RV+MJNm/ssHPG7M9qAWcezCahtIIO74dEJLhNm6NnM97zFxyOjrNfLzapW1su6Xmk2K/iCToE2+DzEQP3bTve3L10Nn6omGqAe74bsM59zH0suex1xLDpBoOh7IX9t6kgrG/iHG2U91aPABFq9pLXi7mgXaGvpwHI2x8Ms6eFYzI8BJbIFITQAh+sy25lMMCycPsAmoR+CmqkZYkbmTZgd7SQgbszpCQJbASb7zKG5aQ6Ord4cjVpNPL620Va5Vm7RBwtDb4vp0Z/hY4BB5b1TpzVMHrkB0v54dHXbu+mEl0FJms2qUaodYWECTOsxfCTBXIHAXM4/wyODY81DaKEVPe94s9ly7iweabcJW9Fif/GCBwc4KDhdRYBnJ+GL7844tgFn9hsfAeOyb6a75OHyaC29obe0qkDycp7zicBrjumiLwV0b462zL9WNmqiDaDN+6V5z5WX+bwkQT/gi15qJ4IdtiLcSUmZb5azMaBLTifcJp9bnm+PaBkW5+/enUncN/BoHd5lgaDVarZaeqGuDWr+XXgSLs3fOet1gRQJYr9cNdBmiDhve92yANyVrnSQVU0rGZWKtr6/aghsajdDz8JOsCG3lj7tvZx02DUhX5CwJT0wvEn1bto2PYWF+dIHiora/NKno3b04DuCuZh6MyDEie/NlL1leVuL8bdk29jDhQ/+po0ueBBcOXN+rldqDdYWQ+v6ALSzk9VnxKsWJnH+iZvYw4U3PzsRv2WjOOfntwN6lb6Ji6CYgG4CpPNWo1lvnJ0oV8IGveV84T+e3w3RmPweTxcokqZ7h2MD+jWkdgM5397wllX0er2kgz8Sr+H/QfVOGfi9Mt0p69FintBqim8LkHMLb0ugw8/T9029/sFo1Ev1FjBNvObJPq5fcwIduUJ3Ad+27hEwh9MjnjDs7Crc37CzK9HXFb83XaWTC5znhUA36/qp1qLdfXd2jw2cn/cCc8xd1zw7CX+H9ybmzHEfz/8Cvjc4O5G/xJ0TGlH41bRnoNSCG8KrIFIgTgoyuNyOSfQMjrwECXcFNqT2x46/mKZxGRBYTZOn590ZYVFACW34MlB6vs40e236vsPtAphtFbNfZ/uIOve569w73jJoT8ChOQKZK2PQNb2SGUZn6mO1HHPO3s+9ealjLqae61jHIAHzUvDALQds64fVIdDWDqLemNJdgQXWGvV4wKal4mpDM5qlVmaI7QDD29ZsvWxUmqvDHKB99h/AkP+bXSymYOEIkZXALnWiEXBxWQgn6kD0Zn2FWoIFYV9wwcQLxMleYcJz79lGBkLm25i6BP+YDfh49HnQH9xkBvfZB1F+MH2c0gJboOtrthTUStyQg8jD5ofE50/C6Jtw+hqsXgSvb8DsB8XtKnbfHb8rANIXsmE0wBgXJvh0YLoP0xQy3YROUwgV33O6SS4qWBGwaEUvKd9DEIq73bBj67as0J5t3DR1nU+SsZ2dZAau8I+C47UESpMv5vKW9/FuzHBFuXUx7GdO6MUPko1Jmg0evN95AUxZ13K4ejmK9hgYd/F4rZ7VB98Dtgahth6vIF2L5YlQRhZdeF4B2lPXtw6gn/SpjIND+MIl3oOgEAG0v4zp1Mnadcb2JKwGTegbRAL/1r8H0g2Fk7AFsLhbWeeyXmlVoi4FRG8WZFQ+IjqN4sz9gq1UjiWr1Wol8R+k4qh9BcJyMBoUAuwr5FJMmbVxCpfrkVp4Qvqev8Ai2eoByT8eqcPR0o3K6uFYz6km7OXJmrWONyQUZM5O0nLOmbkEx0BNQFbcIuHh4SBU7bSjl1bFovCzSVCRzINKEMGEhZ+/bafGYIKyDIbrepjkFFQ9JMi3eDu60p8+BoBvcx7IbuONzt9nQ4KWBVIcki+2WSLJ2entAknuPq/b5hwhIg+sI6imSURzlfulon6FNIQE5Qufk8Sfw6oPScW3hlXHoLKNJ5ci+MCV6NsB4Gy+dN1L1/zm+eDlesW2s+ixfWV7+Wf9Pbbyg9zOamY7w2WBGN/l35yI9EFvvJyQSO9zn6iKS4fjXKj5cAwuvgwSNWvM3GnR/85O8l8PV8CbLL7jOKw2KLS3l3jLA5+kNEeMsLg3AlcbTDxf6QzrqLaXAqWciZ3FKmluv5GR5ycj65d74/EmIwNUBeAaxBmPngy1B9EB3kQTcqhItWLUjD/0MX9FKDvaqbOT1FaeOXM6vjAHrt9WZef+qw8irjc260XftvSlt1TZxPSGQuFEVt/wSZj28CrBNuxGg6HQFgh5Ob7OcDmxEZJRVNo1hUEv/A76IloFPART5yG8JT+kdZbsaKxuVtjAYX+YYe2G/du74cU2ppC+ALJq9cqquNOPBjVQByX0JCMyJX2l0wgl+UJCpVyRjcfvElTt952Vm4Rb023HV/J3yoJV2JNCenz0OsrFFHGMb+RSyf149L3FrjxpSyC5GA0qYld87V9a/iqwFcnRVHYRLSo/5P7TCwMobx+kKH0WGenVi2ufPiR+WdcF2cs4GsthynaCGSGQ5jVEXa/Med14zlwyWxBfQvZHqCMKixq0H1DD+6ruR5gbC1C71i7i7hsH82LkLg8YhAD6Bhxv7G0GDmAa9fHDgVUodC4J+Z/eTfcoxiBwEzoNPfJ6X69+G0nOyPW+xx4E8AbQSDEVHvWpcz/NoJ0QC5BfhYBkwi1kns/lvW5u/+soyxpdj74UMwsVQDYN1jW/B2xgl3+6rX2LfRyoNdSBGHqWdVBWcA2vRlps58f5tR9gnvKHioJghV1Md7dRC4ST7Vm9mOAhBbRIRJYeS4J23U4UYOvedgSwBdwntccFOdalmPFOf7ACEXXNABFrbFeYtuqrXPHw5vb6oss6owy/fWVizF5geXB6ZOYDOV/B/cebSdtA2h0oXBjlGISwDmhPkdg1ByLz0NnJSttnECiI2MOOmKxVf3ApnVIm0ptQIdz9rM2mL62bHdLm9qWGfKs4YZSr1TxRQr4vpIeIWYW66t6BfDECX3Ce293ZSeqZEJrUwUvWOVrRQktaaE0TfJPLzazwM/2AL23vulvSi8gGazX465TzxAGuUc2vX2thfS1mFVBN3uHXp8oSG4SJQvbpfHFig6lzm0X5z3opZbzKiFO56qMUVkzwYtfPoMUNvNkm7kzFjbkc2jYl7h7WwJ0F0/1WM2P6fiIsbQKmYqbzNeBU3HS+UZe+wkjTtRgFr0fI+2HkftTUGzbeho0re2DjxuAzGNIVbPzZBHR6BAC+53r3cB17Q71PQr1fDo16Sfm3BvdegOIv/ti4N1nON9ybwr0gC4pwIMw0aXFCOODPHiC4zBf0C7z6nC4QSMzvL+aCLEg0ntViVRoayVfrwUBxSQ4/BYMacnxfO/1RqRpFNbRaxopH6wUBSRjGQBB1bc5BXGmiGETYuTQc5MgiIiqOopHwT3i4w5sY80dTMGqJsBG6OpVAGkVLRL7pRSSZbA92HDpRpIc95aC4ky4WygucDI0lh5itEo1Om5Fa6IG3hP8rnFyi1vNdSpPgEKV3OVbXUzzszsJQOJJ94BIgnMsSuqbAVi2DYqTlEzPPbwD6vKQbLE8+WBPjo4B/FHe0X8gYuS588uzHJwWdKQdSCPdwoBPuFTa1HJ+nvXtod697w2Hv9oZ1e+3PN7fD3pDZhcf2Lj06oXwQvFtMAItHT0FcrmwIn8oyJ1WjUm2Qc/b+MVFpCTM+5F3HvJ8DQqWrlxCqKYwpZ6niCCc5WymYi5GS2WHBel3RdPfH0XlbKELIxdsBYZMPRDQ3eRcYV2G84RWj6nDapGuZwWsz/Hnx9Sbyxg7hIGcWcZBc4m2928ZUy5Xqlo1RT2fNbDSrRl0r1Zu1eqk6qTRLrTr+NDWrUdPNycSYjJX31C2tG1W9VD/YlkZsRN6qKCMIskEapsCbyhOrNKIops9Hxck2p8zJiTQ0vPv0lyPmzGWgGfxnPx5NwA9F+iJ63xsTLQ8pgwIht5+G6yBEwgiUImMXjltqAzkwsjOUbAcSFUzMsd5o6WOtVLMaeknX7XFprNm8pDVh4NU0q2XWY6EkCyhGq6I1I/q/BVAykY4r258+t+J37Lcc7e7/DE+w+o5yYPOBiPCiy8Etp17Lh6RcWGqm+1vz5pl4SbEtdLoRW9SoVkmV1iym200jQwVVKcOADjKBGQW+s5CcaA2sGMElWI2Y0JhIKAT3AMTs6upi8Ll3MTwGXft6MRhesMEFUCZwNl3CzVFB6vZCFK++jeDt2NzGIOoYAbRd2GMCJge+evZTOLnZqNdKRpGjlqGWBfZiPflcmEBRbAwXcw43Xczqu2MvphS7pv17QvHAJJt2Ap2LWMkm7p0Pl+Mw5B79TNO3BpyQPNmksndINUmBrjl3xBFPXcePRLF3khrO2WIsGbRocIIXMF0s/v2jriLlha3c4nPc63MKBXPhaYtW7dSjKtJQmQxfzghv35iQgs0MiyGHWKyxQC4CGiMvXpFUYuExcZkXargtcFXqurpY2fUwNqwH7hFehZCx82Lg1V+mnP8TTP4hlsNIluM5FqGyYRFw7+L+Pth5BfDeF4whOMT0K4edPr4rRwS/6Myv44dVO+eg9/VoD/54R55X287zyrQb7XD72INkrGhMMblIcz2VOq9wcC+lxlhkugHX05pwfQ3XoyLizm2UxmFjqNZz8LUVrQKfgIPxtQdgYeWBOTgL29iJha2atqVj24ptZno728MhKCCI4fY9lXEbhZnVmMS8GL+qNZTY97351Sp8b3UQ+KwqD/IKuFFojB5FJiSbhCLOIgQn8jDZ/vL+qS4M5+zsRAxOGWy+V09neK0AZOqpMHI6AeXr9s2d+qyIiX0UOqesv871dXuUejQFL41WU8uuS8wksM/bJ9/Miz7/cQPNcLrTjC9C6tZ6aCOuRdn+EATWNkTUI7E7hldS66Kurur/EqVRybmlAu0GDHR9ORxlJWsRk6p2uQ9e2hnXtArgGonuIm51O77bET2lUMthENQqisoFm4RdTb+bwVOFMdUGXLUdW23AV5sl7Eqz0SrsPZXOIiF49OwMdlQJZQF3b9DdGXg3JbpKNStZpEiqyofgFLO0CorDi6/ZgI6oudukuSJwuoIBwaIqmVM2gHAuECdi0gruW22gMCBvBLkKPM8N6HWy6VFWxbSn0sP0mHJVP5vVPxte2/TSYZRMb2LDm9jwJjbsITZEdtSXEBvqb2LDM4sNRr2RFRukLu3nSwwpSJOY/01ieJMY1oBNotN9eYmhfiiJoVbXdIhf1T0khkiR/SYz/CFkBuPlZIZ6o1IXUmquxPAmJxzGvFDYGHB4O0Ss8tEmk8m4Up2ULJ1rpWrDMkotw8TPql41K3C90bn1cuaFrJejiILEa7MHBo9U9n3K56F/pVyy72bAJo4fLOK03NymrPUmZX23uD9XFnEHlxyjUqMFezNePAFUXtp4kbiJP0EK2QJ/dGnsiAAGSmcFrQJfRK63chhRehGlwb8sAZ/0yCM3fWo5mHrf5wx+pJiFyaJkucASc+nNLlx6CbapTILPHzyf4DrVcBF5SW+1CroExfOWg+E0fUp6r5w1WhIqKzEBMpN1FRa+SVPzmIcHffkkvfyezCsf0iPeZMapGk0ctpUMytRT1P173BLOHR8OqKb62eYakRT2ptejxTXhd25Z/CF0ZPkG1+Px0qWIJaw1uSd7S/hwy1nQ426A3XCx3VGZC8C2rNyR5XPSnnB6v1q7bK5wi3AW2LaywgSRXVga/2HEu9QR/rninUhmL048llqmyj9m3zmbmt84Dr5L22K5SypfEkFoxKeFxyQ+1pEUQnTJWy5gfAs3jHzc+2FOojBulwJbnMWCczbD+fcd7HD6yP8kI1XKnnRbwJ70LFatmAzZzZbFqxW9xLWJDm/hpl0ym/qkVG22xnVut/TJyrsvb6SqvLTImcX1+4qbRrVRbRiF5c2i8f3Co+gVyaEE03ni3TqYfj5zV1YC/WniZeUniJeHBLFZJJ3+a5uhns/XufOld3HJOrfX/at272bETsi9dnh7wy5vB+xrb9gb7RbHQ4Oh6kohq8htJ2QCmTV1+ATbRseFeBcwtECLlK2PeOhvDvxyYk9iXDBZR7zQkS9AfAYrJAt4HbPxchEWGAOPyd5D6LxkutZqlipard76UMjDOj3Q9PAgOVKGX3RgibJyRJnDFLIDo6yFufkBkOVjBnbLc22qWEMM/BJfoyJjsRf0br7XenziDlOqqVo3Kq1SVnm/ssd/zgJCxg07+8JJ5vH1Lthgpcx733yYnndN/3fITZ7nihw48fUsXnk+YO/2hp0v7cHnCyVK7RW58RvbQl/2jZXN6GgIkr8apW73Zl2kkxpmGYW67A+KaVDK2YRi8W9djOmlAuByFoCKD0Hw2l8Dty0s8TDRb7peqxSMtCgW/XY77PdG7au8w/Ms0W968181+u39V+PDWwjcRsWcPMNvIXCvnC1MDjvY6l6nLeKtXhOtpBzLRYLUrsGChvH6VHswPKa0gKSQ9Pk/lo7P7UQnmXKVrlWohPDBEGlCUpIxZWPDc5f9mcPbktGsxqr15mGiABrq6t2uF5j3OVFxFxGqZlSOGYpfEAcf+kdi/h4+PFNEXDKN37R0AJSKkFR+InmDNghvramoe94bL6kYEsxMEFBn9+yWStWOaO0XT4mHSvofOvcbul9Q/Uydic1esL9C1OgPbg7TcbiDG/rGhNn150KdDflDSa+X6Bxiq/9oYVy17cybyoTBPaNSkAlbgyRm8SZt4rJyFC27RE4FUWhrW6l0mWaFhp/a3Wt1FUk4zLMSJQMmARjyOv6QSUK9ERbhjspqgjWwy6w3YZD9p1CEjzmOmOlCL2A/ph4SDUYjYB+Z2EnxJpQCAvvhGbIukW1qvvL04K+3R6sWuK6o5gzmhEgB/4GuMIDFdxpD9DLk+2TBSWWRLkD8lBAxfVvMdiYIo2FXOHy2S5N6s1mq1lp2aWzZFhlc6zbXGvWG2dpoIo23KWHJxDdhv1N2SMloTlqP5TzJFMPI5Cj0M5NIVZPSh+aoEVNIeSemLys+qFMIjfvpvSDzqbRPqrMJUgXlBR1abzHNT628XlCp6xVNywgqcWKlvPpQxS2uHAg3C25KqQsiAkILpcw1cO5z7MxEwZ3FkoiMtOLadCSE2hxvm3O5aE6sYRPZ3lhVmLkDKqMBy/NjqHHjeFmo3WBU/IEdgsGLnhJrSwrjR1Zn0IL5QdFhhOIY+y40ZzQaaWF2cPbvRX9BDs6IOwfOSMBzpc9bjJ3SarOjdmqqwnwnu0iBOwELOoLOUuIqrPc3UZI2vRHqS7LQnV0IqvoSrNCCWI6Fuh7SlsE8OWyQr7S9GQp5mL4lCAJ9UL67j0fTYqDlw8qoVhXoVJpG2jM3D2FVygZoVB6He9PpAVR5YC79ZZAhYsQf5Z/csMJIgMd9HoKPJ9wJBOkUalPSBidAXWZD4RDhLP5ElCRkgY5DLC/srZFrgi2AJbSh2l5IefQfAnrVIs5pjHVGT/51CSMvGXzU+uvxEziGwXKWsCLhVaU8mQ1FgA0I3Gz+l05dijCiwtCKD+KOtMTYrlnKZD4z63ioViu1bIg41UqLw2lnXCnV7FZTr00mVc6zdkN1ytfSEq0+kJW2AkUfnmwSTp/JXKomii33gc0gDtqiArw4bIHlOw9iSYRT14MXBA6WHmR4acEJJpD8t0f8t2SHRaHpMZUrhhy3wcNBbzWaWta7YQNj//P82lfEkqf5P2zZuPQDEphVhJJ3Aih1KBEoiSiVdOidlFH1DPtJPSYqjhhSAPN9tRE69zE3mjmzTz8g27n3A7oECHoH1pQgOpngd2yzchKAp9K0+5g9ektJCaUXSYgWYT/j4HXlpQxbER4UyINK00Sqqc4VMH5qCJklzLPErmdaCBJWN1Mkjo07UOS6NYLFK9R0Xbave1e/si+94eh28OurSuukbwPb1MzZpUjFy0BnRQXMlbxMmZGuSKy1RrGkeWmVVXr9itgBL01hE35vcwsWYKDtFWPggTRbselmVeXUphTpC3ZLzpr7K57SCo7rR7jnUR1zF6d1YvpS22hRiDbJTDbHxD+sKkZqjY2pfdIPY06QUikRT7aZ+vOqVrwwWzM2Lq1QURmfztXdcHQRVgfZJ/NfASVLzMPwcdM2m6ZZmlhao1Stm/VSqzYmB+2J0ahZdlMzFB5m40lJprb+rBRVvgDx/TcOXrIPsqjeMLyeV9Xw3cphvKT6OmmvV3Fm8nPihrO55rPx9vz1YVkeFa0DM8+DEA3HeZCrDZHvLzWCT4mL82TNYEInnEIOPCmZJc20rCwh6fUUKvKNfyaB3lc24rrAtLNhK6abdgo6Gzv+YioEtth7Ts8oLVY29yS9u+frnsxQhf1NjzseqEJKJuHWGp6IL/JEbHV+UzwvqwYfTxqUgLPZ2jEBZ71aI7fC7N50IoZio5/XjlC2T8hxAgn1RuqpDa6ShtHCzAsQ0hVfa4V+ODH9SA9ug2a3074bvnz2mWpqXbbgWUEA16XuWMG3aTCrN1vNickFmJkFwOxg3Hxhl9yNGam0Vksk29gZKLpgQDJ8+M4+iE/3qn0ZYKrom4CJWLadYEfZ/2q1VqOA2b2S2Cqs4qFgo//XuPJ2rRFp8tJpfA7na7pCe149NVrLqBXefsWTajzhFW4JxDH+w9InWdKxAC6q1yu1PVGRFD2guHBdaK+hRKea1WmF6RumebWYpv7SiIY0lVKyelGNzt2NyA8Nn8XhqD26e+5c3YJ/lsXGwLuFWxWrX/b1A9/qC6ySt0bVAILbQ3mTDDt2wnlOX6OV/tilIwwAqxoaVQQhN6LVJ2I0zA7iQISxdbz7sKlMXu3z7mPwMKdc2FmlyyUf+0uKx6R8gD/H52V3yh0p4KG4JSOUMLHm+bM+Jd9AgVIfchSrR+fhwGOpb4+7UgLam9weN8AvGLqwjU2MEvlil1pmbWJPTLPemKh+ycoprFVrhlHaB/GvHAulg5SjRI65KA22isO0+mJBx6ECHtpaQzO2u2VvkI/rDW2HOK/UMtnhKYy7zyFDL0NhImPB7SXrt4cj1ru6urkY/ryKR8a25B6HiSXCg9XmSizRmsXIUBpxK3RqvdrFWDDkPNZKQYfeDz1gWM915zz4WXFE6pQHF8OLmx1B4HBgocNFgzw04FBW1luVBn2v4Rpdr74MUGh6vUqujmuBIr1CGbhY/2AR6BBOJQ8yXp5yYwinEJgk8Rtf4lJ1oV+JSXeWcDvAw597eA9G2DI+LMcApUAg/FPimpWRw8rFAN/IL8o6obh+Ow5tY4+cnJQilykT/lJw83DZ2BfpPcQj4s0y+HyRREAWMZSfAI3HyT0oj4PP/rE0bSjp0djY9qAHR2vJ0JM/GycR5RQgN8vIq0mslOwpKpaLtl14RoV1HAORxgSeQ4Lzg1smPKfgq4HONvZ1ZY7J0SNe/FP22V1a5JSj68Yx+3R3w/T6MbOoQWj157he1o8pTYWFztxHEjHDVSuzL2X28OjC4QHulwuHmKX0colIsDkc35LaXFMOtxqPjNXo5t+PlaKIyh2j9e9l9sunDmvAhe+YiUNF7iSigh8zavVjTdPK7M6n5X6k6K/UJxoe3ccRWrrkPXHKbjx2j31eTGGvvxmE0+qPRgwnasv2+J7FbdFGW6lzz6KimzYAe80uvwzCi4LAOrc3w7urkYwH+WkV/owdhCO92azqpcbhy8FB/giw8/KoyOiSLHrLXbgtUtZ6QSUtXWTqJz/uYEbukKFh15e6Dse4HSoJ/CSB5kXg9I5KRb0ialzbAWSbdfBZWQNsZm4Hi8fNtJsDm3FGmoQMkn+RQvUoUZEdUqWQZrl8skgIF8iIoF0cDp3tCcBVED6g1jAFDl5VPs7MhHcb/KFUum6HrhxRz6YFb1ZmKoHAohUgemBRV5J7PhMJhPAPpFPBqhhD+OIPtVvqxecz71vch3QExkkXPnAu/K6pWSs+OqLP+dKnQyGs5yK7HAa7BFm4Z9PAgzNjXHe3HC+j8iGfa3NGOZ0ouRd1+x3K1RJ88kziWmhFQacc103IGNGAlzxKSUxa72Y4GtyFtdfYz0L9ev6BqVWKSN77xzyrc193gPKfXo/sXYo5oT8jISTLQJZETQN3u9n5iKK/TAAADhE8BP20n6ziQ2hGbtUUVHN2Il5OtXQtWsKDDw+eM1+InGAC5ESztofD4Utv+4CiYBbfPUAj/z0IQw1EgWlZVloORDIt+d39CnfGGdjgCYe3b+BSuXhwnGPXI4cJZgo0QG3GzaDj2FfKdOgmuEg6lhis8EulIJ/waNF7mY+CUfLHwzq0iuHIp2DpLBAy5oi5UFCDY4H5Ohv7J+fskwtfcuoG6zF2TSvOWiHvt1N8eHQ187mkgAhqwZri+MbvhgU76Po3tLEQvKtsdf4I/fwyWEb8PZ6RmrDokb68DCgh6TfbpczNF2C65BeKFaWftHrmNz6nOAZykgcvT4sKaMeCypZj8r26bF1PhHzYWPffAYeWN4UEQ3jQqIaxHkCn8iolRIvyBHIZMxFlQgTqFr47QRhfkr9FSV+UT82XoRCU+gyLOKf4klTHqSbOTugk/QxeIzn2/S+/DoWC4/WwHUZsGMzGJ4L/2I72ohkdnttY7SOP8/h8cXMxaF+dsmGEQLwxeBAgFchfkmLCWcZFf8ApkqxHx+XLRXswOoUzJlCNSKJH+RwBSo+hm03sJK18Zksf/yD4+uye8ig+xAe3f3d1DZvS4NdT1uUkuxIzEgrFLIDUaAdRWiJo4bnpl8CiMB+DFI3hOPJ/8rgx5XPxt9Hg4ro36l0MT9mlD3UXTgy3Mb+fR+iHo7suxsOGd9fXmPGrivuvH1qnWW1VqAb0tpOQWZPtYJ154Zkta1C6eCJs7JGcj6PQohyjGZQg5EhJWFpklaWoWRGR8wT7WVpM7HsLM3CWs1VzWLWs7SBu3rTZe71SK+nV2oz/48TNcZ3Wq9o+sug7hegdZvlvhUv7CLq/HGfzARfSw6HWN2E/OqPVJekQ8mHQ8FFoc8hLKWJS+dWK7r3r67ub3t930Sy9EMrBzSJxGJQeik7VQGYVSSz/KZem3mwGL4xQJMwpnp2ZR4Zs65V6q1iQRjE5JzGsOOqwMsgttTXFcnWJ5kgldnTYc/bVtKywgnM2F0mui4B0MjgRmf4OdgDjHzlzJvGUMDDsn/N/muyb46P/b+GojwHkLDdxBoOimMAq5zhHdlpwA6udURyxfwSMGwZKMnRbch2IecHj7AG6jlBjsZgSWwGbAx3/zZk8NmPkTRMnv1kgwIUJESakLM7DlLAiGK2F98NziEHC/N/f3I5Yu3vdu4Hl52Jw0f2w44pEWpQBn1DE8PM6V+yTIENExcz5vXgyJ+vYjt4LtW3K7k0YhupGON9E/ulNoS1JVE19oo/NaqVkadwuVcctKvapG6VJtVKzm6bdnLSMHZwT4iNxKK+ETFUGtemVCHejqdf1J0S4iwUkKkv7Dx8hGbPPAcKd3oe10e8QN3xztgxgFaLM/nOKA0k58ueGnde0yDtvqZTmyYs/3zH6fFdo2+64sxHelBB3hQ9d46S7LTZZJX1Q/GXXWSLZY1BRyiRrusdyuWm9Vje08/Vv26BBB7UHgJ+vjd5eg9nXxmSvRGTDm2Zxs6RQLfEkLKKVar1Wbbehv0jdUZrYvEzqKvq3ocNlNq/x2RwrcP6FU8kAdjVkpXDTPAorBk0Qd/M7zG9xY9R4Xsz4E/2CtyR2yqQk2jE4XCsO8UxNiAZql194NgW3DV2rVkU18p39nVSeDCqBZTYdVBYBb0DBIaPw5LSLSnT25iDujfHfOxRYTWdpJkWiQlhF2RQY7aGzlrlTwvIpIsFLavFC447gF9h7pwyNNekZ1ZwySe6IA9H8FAD//0byqzuQfFppFza7N5IfIY83ki+V1JWC9DqNNjcLIaB9wowt3EZhZphANsrnFdZzAbv3wPblENIpOdppFP5HZwwGw1sl3uwlYtRq6YphIpWLiluF0AmZID/WbGteJdtO194SjEIKeCPp9lbEj8cxZrjRHt0Sm5SXAaBtLW48dZwDwRBvD3ZNj6YgC7Bj5uLCrMDz6Rb7V+0b8jCFpaU9uiYf09dk0djqvB3NnfVdync5CStD5aoO89WGzUajXiw8qJDacERWL+E+gGtZj7dorTvtQZ4v0SGVgbQcVDerLRmeVf1f9MSKdvAJ2r8OfH/gimR5D2nfOXHzFnIKObmuqK5+UtgPpT7dkwmtFgzhSQFltBXbMkgkOLNl1m3wn1ZJb9gwxOmtWqnZMqslSMb62GpqrXFViVdMRecarVprnyS7yg4eooIBOZtDP6RopmBe3xok89OCV/qD209XF9fsCvrX14QHRY6W4l69sApqZLfddfOjQLcrUKIs6lJuFXbR3YyiqM98Y0WOnfAgYYxyEisRjImvZpE84eciCBluF/xhweoSnRVIAr4l4DE7SlXVJl5PlXbZcZjNgw1zJwT9/LnHd4he1DXDMg3eKjWbVatUrRmVkmmMgU3HdQuKxpZVaTUOVblZlMtTFC6yWqmQeaTjmkjVGjnGRuGd9KB4Sk1XLFr7Ba5yVEgVbCJ55wXCPRb8IjzwIFB5LvnmypZhTIJjL9zDXMoDnOo0ADMBTz9RlFPeyYwgrD4mG4zddsVbcH6Mud6Nyb+KUoc49y3MwiL3rYwgElWE1dUhHZW5hEcS2Y7h5yd8I0Np4E9YCfj+Lsoy0zp5VVLxijDKibIjz9nFl0GYspkKEyviSX4t62qt8lpqWR86rjg8DspDOBNVHVrYShUewqsecwbsRCIju66XtfBKEiefPiUFeGdRN8Sol1r5ZGdH5W2MzJ+zYI6SnTlOMK46+2aLW6ezjOcBWH3HdOeiTIBMnSIWG0chdA12ZhRcr9Q9Jnt2FB9ODp/pVOPr446peDvU8LXDlpdUqOpTROTclKdv5OWNvLyRlzfy8vzkxfgXIy/N10deGmTjLZz1qSh5UcWhg9OXZ9UwdC66dwM4P78i/UJjJ/1CtVHTWwX1C4VcLdU8B9HyrOofwkio4EDah24SKZavhBCSkPCrej+gQsfPVZwtnllGLZG+ScPFA1fmg+kL9ZxjpQI3V+X497pGsr8Q/JnWOjUMc1Zi6kVdP9Vr5uzDBs/K59XTymKhcmOzVaJlQKn0b4jLooRlp4OMDBiGrck8SbyceCwkIXTrc3MT1O2rgdiajExVQdSr5sSo21DjNvkECl14LI9NvV6y6nyi1029aVQnaxS6mgGJtJE5OWvB4Sm4tgRcq8ituabZfIKpgmoKJee1sZJdeyMmSamypaq6LzNJUg7TVkPbtDZq5gh1aLuMIYXwpJ9dp1vStVK/M4xGonVHf6n+/e/ZmuI8rt8+iSOsj1mf+9YS9j9O8YcXc1sZre+Zllq+aLfV0taMtVXqyHzghMXLK9k718OTogpRbfJbXV4U7PYkT1cRRRDXzgzrb8miXNwRASZwOxQsCLAG1TUDC+CW2WXIs0QYRsTEhRU3RUz8wnsI2zomNVH0mqw0gqZnUDjROvge+KGMlaZoebSc4mia1jIMrZYtjxYWR8s8CtVLjVBKIX0UrdKMQ08W1vej/IFwjMPEpxhDOqBYxLlGKVTKrCdqnJHnF2W+cx0obMVirVagiptQ1kLpU+Z70yt6fb9UqikYjDvbhKzSUILdveeLoSMdnpM1oKmILDkiCNi0bUCECFR8VJaFwAIOyqKOmwjtDoGKXOnyHKSbTfKzqRiGXm6WW2oWvvQoImOzbtSwkdoey3IBl2gyIkrkUWQ9qAKNnNdLsriDi6+9i1+Imxv+OhxdXD9nPoRN4b168+DZvJqNUiWL2rOzzTCuK/eL5O6KPF1sPg+LMZMdNUn1PGGTKIJ+ZrqmE8Bc0PcA1sKlikJqufm7iIIXWA5q84X4RRKliMotp4Pjf2L2pOFtp5dkvXtNMpHe2EEkMlqNulHQ3l5EJBp6MPK4UXa/DEilb27OoZHwkqaQdc6HM+93yt8QyS7R9eg5NfNAYku8EfAW4F2SCbJWxPgxNEop007Zxmc84DD7dMMjA26R94sd2i51LfQZgfPIaa36MFt5sUiug4zGeI/EsLuJBY1d8qrWm9y0KFWgpVd4qdpqWiVzzCslDuekSo1PahNd5YUUuGsYer1eDO5ODhZaRC4ctRWWZJ0C6AkKnygtar2lt4R9InVGQpgkeOaK+/5ZaCdUGOdi48eLQeDcwyOqnW5A9WFcmUIVVl91n1vys+IpOUADstDqTb8Hz1VyYs3UpFXxCWnM6LM1LIe4/Swb36bsDJSR0BIE4BbvRr/7UXoXVWlGwO3izM2Iy/t49Es/zouO66d/1t/XarUP+A+yjprhVlkzSDJwqlRVk2n3WFwQuU3gTjsnlBX+UG9PRDmD8yE2FQoZ+Uu5v+Jvu6br5EZ6H3Fd/f3TXIy+ilQIw97ngnmiXojagYHaJQlbA0qLysGonbImGVKn3Hleh0lmugCaj0fQVEwXR6EC8ESo/4iYrSj+BF2qS7rUPK1CjXYYH8p4IJQl7gjHhcaTHcDaaGO4F0JJqDcazFolkzuEM2dG8cvOo6genTfr7Pf7Aw7ikwu6LJIcBxBodhlMDYPRsJu12mz2f77c/99dBnUYf9S4iF5OQcDD8BvG9gIyAm99Fek5A6xrkFfbL88L1apP0JmhleoN05ZVYmy9sqZKTIo7qTaM5p7pRSUbQPJsBlkkMzgkT1PXmtWsRuYnFQMytkkemd0cYi12KUsnN1QvtqEZzF/RDinnhPhtR9OswHKHNssWAIfNJWSAdaMwdSttbBZ6Rdh3w3S4yrAKlFxrqkE3r7yI1WuG2wo8z8kz4EBwGyloPpE+MSSPjEq8m0Sb7N3hufr64LkZ10T6Xcm68AbOrwKcm9Um6PHBwFnk5fhmyrwc9LQHE8AfA4zj5CEh81cMlLcmdXzDzIcDZWhOq88Eyl3H3BeWa68PlmtQgb0aWN63gh1uiTQhRCiJfJ6n7p+ddESIg+l2PWtJgZTn/w84L/rZqwsBAA==", - "hash": "M2QzYmZmMDUyNzk4OTZjODQ1YmMyZDZlZDE5YjExMjk2ODVhYjAwZg==" + "data": "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", + "hash": "ZjE3NzIwNWU1MWEzYTQzMWM2ZmVjMzRhNjIxOGFmOGE4Mjk3MThjZg==" } } ] }, "request": { "method": "PUT", - "url": "DocumentReference/67e1b7e5-5efe-9950-7ff2-c8488af34c91" + "url": "DocumentReference/da9bd794-1f36-b4c0-6338-a2e322cf7a6a" } } ] diff --git a/src/Microsoft.Health.Fhir.Liquid.Converter.FunctionalTests/TestData/Expected/Ccda/HistoryandPhysical/Diagnostic_Imaging_Report-expected.json b/src/Microsoft.Health.Fhir.Liquid.Converter.FunctionalTests/TestData/Expected/Ccda/HistoryandPhysical/Diagnostic_Imaging_Report-expected.json index 6c01ef060..b62597b0a 100644 --- a/src/Microsoft.Health.Fhir.Liquid.Converter.FunctionalTests/TestData/Expected/Ccda/HistoryandPhysical/Diagnostic_Imaging_Report-expected.json +++ b/src/Microsoft.Health.Fhir.Liquid.Converter.FunctionalTests/TestData/Expected/Ccda/HistoryandPhysical/Diagnostic_Imaging_Report-expected.json @@ -1,4 +1,4 @@ - { +{ "resourceType": "Bundle", "type": "batch", "entry": [ @@ -337,6 +337,7 @@ } ], "birthDate": "1954-11-25", + "gender": "male", "extension": [ { "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race", @@ -345,8 +346,7 @@ "url": "ombCategory", "valueCoding": { "code": "2106-3", - "display": "White", - "system": "urn:oid:2.16.840.1.113883.6.238" + "display": "White" } }, { @@ -362,8 +362,7 @@ "url": "ombCategory", "valueCoding": { "code": "2186-5", - "display": "Not Hispanic or Latino", - "system": "urn:oid:2.16.840.1.113883.6.238" + "display": "Not Hispanic or Latino" } }, { @@ -397,9 +396,7 @@ "language": { "coding": [ { - "system": "urn:ietf:bcp:47", - "code": "fr-CN", - "display": "fr-cn" + "system": "urn:ietf:bcp:47" } ] }, @@ -478,7 +475,7 @@ } ] }, - "date": "2021-05-08T08:17:16.691Z", + "date": "2021-07-02T05:38:42.848Z", "status": "current", "content": [ { diff --git a/src/Microsoft.Health.Fhir.Liquid.Converter.FunctionalTests/TestData/Expected/Ccda/HistoryandPhysical/History_and_Physical-expected.json b/src/Microsoft.Health.Fhir.Liquid.Converter.FunctionalTests/TestData/Expected/Ccda/HistoryandPhysical/History_and_Physical-expected.json index c3216f437..75df8267a 100644 --- a/src/Microsoft.Health.Fhir.Liquid.Converter.FunctionalTests/TestData/Expected/Ccda/HistoryandPhysical/History_and_Physical-expected.json +++ b/src/Microsoft.Health.Fhir.Liquid.Converter.FunctionalTests/TestData/Expected/Ccda/HistoryandPhysical/History_and_Physical-expected.json @@ -399,19 +399,8 @@ "class": { "code": "99213", "display": "Evaluation and Management", - "system": "urn:oid:2.16.840.1.113883.6.12" + "system": "http://www.ama-assn.org/go/cpt" }, - "type": [ - { - "coding": [ - { - "code": "99213", - "display": "Evaluation and Management", - "system": "urn:oid:2.16.840.1.113883.6.12" - } - ] - } - ], "identifier": [ { "system": "urn:oid:2.16.840.1.113883.19", @@ -584,8 +573,7 @@ "url": "detailed", "valueCoding": { "code": "1966-1", - "display": "Aleut", - "system": "urn:oid:2.16.840.1.113883.6.238" + "display": "Aleut" } }, { @@ -601,8 +589,7 @@ "url": "ombCategory", "valueCoding": { "code": "2186-5", - "display": "Not Hispanic or Latino", - "system": "urn:oid:2.16.840.1.113883.6.238" + "display": "Not Hispanic or Latino" } }, { @@ -790,7 +777,6 @@ "value": "urn:uuid:cdbd33f0-6cde-11db-9fe1-0800200c9a66" } ], - "status": "completed", "dosage": [ { "doseAndRate": [ @@ -1784,8 +1770,8 @@ "vaccineCode": { "coding": [ { - "code": "88", - "display": "Influenza virus vaccine", + "code": "111", + "display": "influenza, live, intranasal", "system": "urn:oid:2.16.840.1.113883.12.292" } ] @@ -1824,8 +1810,8 @@ "vaccineCode": { "coding": [ { - "code": "88", - "display": "Influenza virus vaccine", + "code": "111", + "display": "influenza, live, intranasal", "system": "urn:oid:2.16.840.1.113883.12.292" } ] @@ -1864,8 +1850,8 @@ "vaccineCode": { "coding": [ { - "code": "33", - "display": "Pneumococcal polysaccharide vaccine", + "code": "109", + "display": "Pneumococcal NOS", "system": "urn:oid:2.16.840.1.113883.12.292" } ] @@ -1913,7 +1899,7 @@ "vaccineCode": { "coding": [ { - "code": "103", + "code": "09", "display": "Tetanus and diphtheria toxoids - preservative free", "system": "urn:oid:2.16.840.1.113883.12.292" } @@ -2030,7 +2016,7 @@ } ] }, - "date": "2021-05-21T05:21:48.09Z", + "date": "2021-07-02T05:38:42.98Z", "status": "current", "content": [ { diff --git a/src/Microsoft.Health.Fhir.Liquid.Converter.FunctionalTests/TestData/Expected/Ccda/OperativeNote/Operative_Note-expected.json b/src/Microsoft.Health.Fhir.Liquid.Converter.FunctionalTests/TestData/Expected/Ccda/OperativeNote/Operative_Note-expected.json index f1c2fa91e..e72d41531 100644 --- a/src/Microsoft.Health.Fhir.Liquid.Converter.FunctionalTests/TestData/Expected/Ccda/OperativeNote/Operative_Note-expected.json +++ b/src/Microsoft.Health.Fhir.Liquid.Converter.FunctionalTests/TestData/Expected/Ccda/OperativeNote/Operative_Note-expected.json @@ -36,7 +36,8 @@ "event": [ { "period": { - "start": "2012-09-10T07:10:00+08:00" + "start": "2012-09-10T07:10:00+08:00", + "end": "2012-09-17T07:10:00+08:00" } } ], @@ -517,8 +518,7 @@ "url": "detailed", "valueCoding": { "code": "1966-1", - "display": "Aleut", - "system": "urn:oid:2.16.840.1.113883.6.238" + "display": "Aleut" } }, { @@ -534,8 +534,7 @@ "url": "ombCategory", "valueCoding": { "code": "2186-5", - "display": "Not Hispanic or Latino", - "system": "urn:oid:2.16.840.1.113883.6.238" + "display": "Not Hispanic or Latino" } }, { @@ -720,6 +719,10 @@ } ], "status": "completed", + "effectivePeriod": { + "start": "2012-05-12", + "end": "2012-05-12" + }, "dosage": { "route": { "coding": [ @@ -944,7 +947,7 @@ } ] }, - "date": "2021-05-13T08:08:32.445Z", + "date": "2021-07-02T05:38:44.437Z", "status": "current", "content": [ { diff --git a/src/Microsoft.Health.Fhir.Liquid.Converter.FunctionalTests/TestData/Expected/Ccda/OperativeNote/Patient-1-expected.json b/src/Microsoft.Health.Fhir.Liquid.Converter.FunctionalTests/TestData/Expected/Ccda/OperativeNote/Patient-1-expected.json index 9a2d095cc..075a9f1ea 100644 --- a/src/Microsoft.Health.Fhir.Liquid.Converter.FunctionalTests/TestData/Expected/Ccda/OperativeNote/Patient-1-expected.json +++ b/src/Microsoft.Health.Fhir.Liquid.Converter.FunctionalTests/TestData/Expected/Ccda/OperativeNote/Patient-1-expected.json @@ -36,7 +36,8 @@ "event": [ { "period": { - "start": "2010-03-31T10:00:00" + "start": "2010-03-31T10:00:00", + "end": "2010-10-24T10:00:00" } } ], @@ -45,7 +46,7 @@ "title": "Allergies, Adverse Reactions & Alerts", "text": { "status": "generated", - "div": "
Allergies, Adverse Reactions & Alerts
" + "div": "
Allergies, Adverse Reactions & Alerts
" }, "code": { "coding": [ @@ -399,8 +400,7 @@ "url": "ombCategory", "valueCoding": { "code": "2054-5", - "display": "Black or African American", - "system": "urn:oid:2.16.840.1.113883.6.238" + "display": "Black or African American" } }, { @@ -416,8 +416,7 @@ "url": "ombCategory", "valueCoding": { "code": "2186-5", - "display": "Not Hispanic or Latino", - "system": "urn:oid:2.16.840.1.113883.6.238" + "display": "Not Hispanic or Latino" } }, { @@ -452,8 +451,8 @@ "coding": [ { "system": "urn:ietf:bcp:47", - "code": "spa", - "display": "spa" + "code": "es", + "display": "Spanish" } ] }, @@ -538,6 +537,15 @@ } ], "status": "completed", + "code": { + "coding": [ + { + "code": "97802", + "display": "Medical nutrition, indiv, in", + "system": "http://www.ama-assn.org/go/cpt" + } + ] + }, "performedDateTime": "2010-03-31T10:00:00", "subject": { "reference": "Patient/5510eaa6-2ad2-b82b-248b-aba749e28fa1" @@ -565,6 +573,15 @@ } ], "status": "completed", + "code": { + "coding": [ + { + "code": "S9451", + "display": "Exercise class", + "system": "urn:oid:2.16.840.1.113883.6.13" + } + ] + }, "performedDateTime": "2010-03-31T10:00:00", "subject": { "reference": "Patient/5510eaa6-2ad2-b82b-248b-aba749e28fa1" @@ -595,9 +612,9 @@ "code": { "coding": [ { - "code": "363680008", - "display": "Radiographic imaging procedure (procedure)", - "system": "http://snomed.info/sct" + "code": "76499", + "display": "Radiographic procedure", + "system": "http://www.ama-assn.org/go/cpt" } ] }, @@ -633,7 +650,7 @@ { "code": "93543", "display": "Injection for heart x-rays", - "system": "urn:oid:2.16.840.1.113883.6.12" + "system": "http://www.ama-assn.org/go/cpt" } ] }, @@ -772,6 +789,15 @@ } ], "status": "completed", + "code": { + "coding": [ + { + "code": "92012", + "display": "Eye exam established pat", + "system": "http://www.ama-assn.org/go/cpt" + } + ] + }, "performedDateTime": "2010-07-30T10:00:00", "subject": { "reference": "Patient/5510eaa6-2ad2-b82b-248b-aba749e28fa1" @@ -832,7 +858,7 @@ } ] }, - "date": "2021-05-13T08:08:32.491Z", + "date": "2021-07-02T05:38:44.498Z", "status": "current", "content": [ { diff --git a/src/Microsoft.Health.Fhir.Liquid.Converter.FunctionalTests/TestData/Expected/Ccda/ProcedureNote/Patient-and-Provider-Organization-Direct-Address-C-CDAR2.1-expected.json b/src/Microsoft.Health.Fhir.Liquid.Converter.FunctionalTests/TestData/Expected/Ccda/ProcedureNote/Patient-and-Provider-Organization-Direct-Address-C-CDAR2.1-expected.json index 1ced2a791..2b7bbdffc 100644 --- a/src/Microsoft.Health.Fhir.Liquid.Converter.FunctionalTests/TestData/Expected/Ccda/ProcedureNote/Patient-and-Provider-Organization-Direct-Address-C-CDAR2.1-expected.json +++ b/src/Microsoft.Health.Fhir.Liquid.Converter.FunctionalTests/TestData/Expected/Ccda/ProcedureNote/Patient-and-Provider-Organization-Direct-Address-C-CDAR2.1-expected.json @@ -75,8 +75,7 @@ "url": "ombCategory", "valueCoding": { "code": "2106-3", - "display": "White", - "system": "urn:oid:2.16.840.1.113883.6.238" + "display": "White" } }, { @@ -92,8 +91,7 @@ "url": "ombCategory", "valueCoding": { "code": "2186-5", - "display": "Not Hispanic or Latino", - "system": "urn:oid:2.16.840.1.113883.6.238" + "display": "Not Hispanic or Latino" } }, { @@ -139,8 +137,8 @@ "coding": [ { "system": "urn:ietf:bcp:47", - "code": "eng", - "display": "eng" + "code": "en", + "display": "English" } ] }, @@ -167,7 +165,7 @@ } ] }, - "date": "2021-05-13T08:13:06.09Z", + "date": "2021-07-02T05:38:45.919Z", "status": "current", "content": [ { diff --git a/src/Microsoft.Health.Fhir.Liquid.Converter.FunctionalTests/TestData/Expected/Ccda/ProcedureNote/Procedure_Note-expected.json b/src/Microsoft.Health.Fhir.Liquid.Converter.FunctionalTests/TestData/Expected/Ccda/ProcedureNote/Procedure_Note-expected.json index 2788288c6..626216dc3 100644 --- a/src/Microsoft.Health.Fhir.Liquid.Converter.FunctionalTests/TestData/Expected/Ccda/ProcedureNote/Procedure_Note-expected.json +++ b/src/Microsoft.Health.Fhir.Liquid.Converter.FunctionalTests/TestData/Expected/Ccda/ProcedureNote/Procedure_Note-expected.json @@ -36,7 +36,8 @@ "event": [ { "period": { - "start": "2012-09-10T07:11:00+08:00" + "start": "2012-09-10T07:11:00+08:00", + "end": "2012-09-17T07:11:00+08:00" } } ], @@ -391,19 +392,8 @@ "class": { "code": "99213", "display": "Evaluation and Management", - "system": "urn:oid:2.16.840.1.113883.6.12" + "system": "http://www.ama-assn.org/go/cpt" }, - "type": [ - { - "coding": [ - { - "code": "99213", - "display": "Evaluation and Management", - "system": "urn:oid:2.16.840.1.113883.6.12" - } - ] - } - ], "identifier": [ { "system": "urn:oid:2.16.840.1.113883.19", @@ -575,8 +565,7 @@ "url": "detailed", "valueCoding": { "code": "1966-1", - "display": "Aleut", - "system": "urn:oid:2.16.840.1.113883.6.238" + "display": "Aleut" } }, { @@ -592,8 +581,7 @@ "url": "ombCategory", "valueCoding": { "code": "2186-5", - "display": "Not Hispanic or Latino", - "system": "urn:oid:2.16.840.1.113883.6.238" + "display": "Not Hispanic or Latino" } }, { @@ -963,6 +951,10 @@ } ], "status": "completed", + "effectivePeriod": { + "start": "2012-05-12", + "end": "2012-05-12" + }, "dosage": { "route": { "coding": [ @@ -1028,7 +1020,7 @@ } ] }, - "date": "2021-05-13T08:13:06.146Z", + "date": "2021-07-02T05:38:45.994Z", "status": "current", "content": [ { diff --git a/src/Microsoft.Health.Fhir.Liquid.Converter.FunctionalTests/TestData/Expected/Ccda/ProgressNote/PROBLEMS_in_Empty_C-CDA_2.1-C-CDAR2.1-expected.json b/src/Microsoft.Health.Fhir.Liquid.Converter.FunctionalTests/TestData/Expected/Ccda/ProgressNote/PROBLEMS_in_Empty_C-CDA_2.1-C-CDAR2.1-expected.json index 47985ded9..6165dfba7 100644 --- a/src/Microsoft.Health.Fhir.Liquid.Converter.FunctionalTests/TestData/Expected/Ccda/ProgressNote/PROBLEMS_in_Empty_C-CDA_2.1-C-CDAR2.1-expected.json +++ b/src/Microsoft.Health.Fhir.Liquid.Converter.FunctionalTests/TestData/Expected/Ccda/ProgressNote/PROBLEMS_in_Empty_C-CDA_2.1-C-CDAR2.1-expected.json @@ -36,7 +36,8 @@ "event": [ { "period": { - "start": "2015-07-23T07:00:00+08:00" + "start": "2015-07-23T07:00:00+08:00", + "end": "2015-07-23T09:00:00+08:00" } } ], @@ -730,7 +731,6 @@ "value": "urn:uuid:cdbd33f0-6cde-11db-9fe1-0833200c9a66" } ], - "status": "active", "subject": { "reference": "Patient/89236d99-8509-7d3a-9dfb-a82c6b81d268" }, @@ -837,7 +837,7 @@ } ] }, - "date": "2021-05-13T08:27:04.51Z", + "date": "2021-07-02T05:38:47.845Z", "status": "current", "content": [ { diff --git a/src/Microsoft.Health.Fhir.Liquid.Converter.FunctionalTests/TestData/Expected/Ccda/ProgressNote/Progress_Note-expected.json b/src/Microsoft.Health.Fhir.Liquid.Converter.FunctionalTests/TestData/Expected/Ccda/ProgressNote/Progress_Note-expected.json index 537abbb68..27356a21b 100644 --- a/src/Microsoft.Health.Fhir.Liquid.Converter.FunctionalTests/TestData/Expected/Ccda/ProgressNote/Progress_Note-expected.json +++ b/src/Microsoft.Health.Fhir.Liquid.Converter.FunctionalTests/TestData/Expected/Ccda/ProgressNote/Progress_Note-expected.json @@ -3,10 +3,10 @@ "type": "batch", "entry": [ { - "fullUrl": "urn:uuid:3f7f06f6-eacb-9d39-c038-daf818559293", + "fullUrl": "urn:uuid:8bbe00ba-21bb-72de-9022-aaf6f3d4d83c", "resource": { "resourceType": "Composition", - "id": "3f7f06f6-eacb-9d39-c038-daf818559293", + "id": "8bbe00ba-21bb-72de-9022-aaf6f3d4d83c", "identifier": { "use": "official", "value": "2.16.840.1.113883.19" @@ -36,7 +36,8 @@ "event": [ { "period": { - "start": "2010-06-01" + "start": "2010-06-01", + "end": "2010-09-15" } } ], @@ -262,7 +263,7 @@ }, "request": { "method": "PUT", - "url": "Composition/3f7f06f6-eacb-9d39-c038-daf818559293" + "url": "Composition/8bbe00ba-21bb-72de-9022-aaf6f3d4d83c" } }, { @@ -322,19 +323,8 @@ "class": { "code": "99213", "display": "Evaluation and Management", - "system": "urn:oid:2.16.840.1.113883.6.12" + "system": "http://www.ama-assn.org/go/cpt" }, - "type": [ - { - "coding": [ - { - "code": "99213", - "display": "Evaluation and Management", - "system": "urn:oid:2.16.840.1.113883.6.12" - } - ] - } - ], "identifier": [ { "system": "urn:oid:2.16.840.1.113883.19", @@ -497,8 +487,7 @@ "url": "ombCategory", "valueCoding": { "code": "2106-3", - "display": "White", - "system": "urn:oid:2.16.840.1.113883.6.238" + "display": "White" } }, { @@ -514,8 +503,7 @@ "url": "ombCategory", "valueCoding": { "code": "2186-5", - "display": "Not Hispanic or Latino", - "system": "urn:oid:2.16.840.1.113883.6.238" + "display": "Not Hispanic or Latino" } }, { @@ -549,9 +537,7 @@ "language": { "coding": [ { - "system": "urn:ietf:bcp:47", - "code": "fr-CN", - "display": "fr-cn" + "system": "urn:ietf:bcp:47" } ] }, @@ -617,10 +603,10 @@ } }, { - "fullUrl": "urn:uuid:6631e085-a49b-3068-2571-484601da1028", + "fullUrl": "urn:uuid:c6239287-0fbc-be36-672e-66e6d7cc49de", "resource": { "resourceType": "DocumentReference", - "id": "6631e085-a49b-3068-2571-484601da1028", + "id": "c6239287-0fbc-be36-672e-66e6d7cc49de", "type": { "coding": [ { @@ -630,21 +616,21 @@ } ] }, - "date": "2021-05-13T08:27:04.567Z", + "date": "2021-07-02T05:38:47.943Z", "status": "current", "content": [ { "attachment": { "contentType": "text/plain", - "data": "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", - "hash": "NzdiNjE2ZDZmNmFlMDMzYzc0YWUwMzkwZjgwZGZlMDMzNGYyMzg2NA==" + "data": "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", + "hash": "MjgxMzQzNmJlZDA0YTkzMzBlMWJiMThmNWRiYzZhNzY1NzgxMDY2NQ==" } } ] }, "request": { "method": "PUT", - "url": "DocumentReference/6631e085-a49b-3068-2571-484601da1028" + "url": "DocumentReference/c6239287-0fbc-be36-672e-66e6d7cc49de" } } ] diff --git a/src/Microsoft.Health.Fhir.Liquid.Converter.FunctionalTests/TestData/Expected/Ccda/ReferralNote/Referral_Note-expected.json b/src/Microsoft.Health.Fhir.Liquid.Converter.FunctionalTests/TestData/Expected/Ccda/ReferralNote/Referral_Note-expected.json index 0580ca2bd..f4d90ec44 100644 --- a/src/Microsoft.Health.Fhir.Liquid.Converter.FunctionalTests/TestData/Expected/Ccda/ReferralNote/Referral_Note-expected.json +++ b/src/Microsoft.Health.Fhir.Liquid.Converter.FunctionalTests/TestData/Expected/Ccda/ReferralNote/Referral_Note-expected.json @@ -3,10 +3,10 @@ "type": "batch", "entry": [ { - "fullUrl": "urn:uuid:406bb303-2dc0-9cf3-b1f1-90b2af16df37", + "fullUrl": "urn:uuid:0832008d-15f3-8333-8b26-9198c8249661", "resource": { "resourceType": "Composition", - "id": "406bb303-2dc0-9cf3-b1f1-90b2af16df37", + "id": "0832008d-15f3-8333-8b26-9198c8249661", "identifier": { "use": "official", "value": "6f1bd58b-c58f-40b7-b314-caf1294ed98b" @@ -15,7 +15,7 @@ "type": { "coding": [ { - "code": "57113-1", + "code": "57133-1", "display": "Referral Note", "system": "http://loinc.org" } @@ -351,7 +351,7 @@ }, "request": { "method": "PUT", - "url": "Composition/406bb303-2dc0-9cf3-b1f1-90b2af16df37" + "url": "Composition/0832008d-15f3-8333-8b26-9198c8249661" } }, { @@ -497,7 +497,6 @@ ] }, { - "use": "SRCH", "family": "Everywoman", "given": [ "Eve" @@ -514,16 +513,14 @@ "url": "ombCategory", "valueCoding": { "code": "2106-3", - "display": "White", - "system": "urn:oid:2.16.840.1.113883.6.238" + "display": "White" } }, { "url": "ombCategory", "valueCoding": { "code": "2076-8", - "display": "Hawaiian or Other Pacific Islander", - "system": "urn:oid:2.16.840.1.113883.6.238" + "display": "Hawaiian or Other Pacific Islander" } }, { @@ -539,8 +536,7 @@ "url": "ombCategory", "valueCoding": { "code": "2186-5", - "display": "Not Hispanic or Latino", - "system": "urn:oid:2.16.840.1.113883.6.238" + "display": "Not Hispanic or Latino" } }, { @@ -575,8 +571,8 @@ "coding": [ { "system": "urn:ietf:bcp:47", - "code": "eng", - "display": "eng" + "code": "en", + "display": "English" } ] }, @@ -772,10 +768,10 @@ } }, { - "fullUrl": "urn:uuid:e1987838-36ce-9836-ac68-70172656a7d6", + "fullUrl": "urn:uuid:ce48f4cd-50ca-9c45-359e-8d9998cf4d84", "resource": { "resourceType": "AllergyIntolerance", - "id": "e1987838-36ce-9836-ac68-70172656a7d6", + "id": "ce48f4cd-50ca-9c45-359e-8d9998cf4d84", "identifier": [ { "system": "urn:ietf:rfc:3986", @@ -795,7 +791,7 @@ "substance": { "coding": [ { - "code": "70618", + "code": "7980", "display": "Penicillin", "system": "http://www.nlm.nih.gov/research/umls/rxnorm" } @@ -812,8 +808,7 @@ ] } ], - "onset": "2008-02-27T00:05:00+08:00", - "severity": "Nausea" + "onset": "2008-02-27T00:05:00+08:00" } ], "onsetDateTime": "1998-05-01", @@ -823,7 +818,7 @@ }, "request": { "method": "PUT", - "url": "AllergyIntolerance/e1987838-36ce-9836-ac68-70172656a7d6" + "url": "AllergyIntolerance/ce48f4cd-50ca-9c45-359e-8d9998cf4d84" } }, { @@ -888,8 +883,7 @@ } ] } - ], - "severity": "Wheezing" + ] }, { "substance": { @@ -911,8 +905,7 @@ } ] } - ], - "severity": "mild" + ] } ], "patient": { @@ -935,7 +928,6 @@ "value": "urn:uuid:cdbd33f0-6cde-11db-9fe1-0800200c9a66" } ], - "status": "active", "dosage": [ { "doseAndRate": [ @@ -990,7 +982,6 @@ "value": "urn:uuid:6c844c75-aa34-411c-b7bd-5e4a9f206e29" } ], - "status": "active", "dosage": [ { "doseAndRate": [ @@ -1055,8 +1046,8 @@ } ] }, - "priority": "ASAP", - "occuranceDateTime": "2013-03-11", + "priority": "asap", + "occurrenceDateTime": "2013-03-11", "requester": { "reference": "Practitioner/93bfea24-9f88-b634-edf5-9620349d8c55" } @@ -1286,7 +1277,6 @@ ] } ], - "status": "aborted", "code": { "coding": [ { @@ -1797,7 +1787,6 @@ "value": "urn:uuid:122ed3ae-6d9e-43d0-bfa2-434ea34b1426" } ], - "status": "active", "code": { "coding": [ { @@ -1851,7 +1840,6 @@ ] } ], - "status": "active", "code": { "coding": [ { @@ -3067,34 +3055,34 @@ } }, { - "fullUrl": "urn:uuid:f4432786-c9f7-d4db-359b-4c9a8698ec81", + "fullUrl": "urn:uuid:f7263ae4-cade-b0d6-d229-8d792b5df57f", "resource": { "resourceType": "DocumentReference", - "id": "f4432786-c9f7-d4db-359b-4c9a8698ec81", + "id": "f7263ae4-cade-b0d6-d229-8d792b5df57f", "type": { "coding": [ { - "code": "57113-1", + "code": "57133-1", "display": "Referral Note", "system": "http://loinc.org" } ] }, - "date": "2021-05-21T05:22:13.033Z", + "date": "2021-07-02T05:38:49.934Z", "status": "current", "content": [ { "attachment": { "contentType": "text/plain", - "data": "H4sIAAAAAAAACu19aXPbSJL2Z/+LerWXe9eQcB9etTZoSbY5o6tF2d0TGxsTOAoStylCA5B2a3/9m1k4WIWLAAlJtpua6W4JR6GOrDyezMo8/K8/7mfkC42TaTT/eU/Zl/cInftRMJ3f/rz36ea9ZO+RZOHOA3cWzenPe4802fuvo0N8TUoWjzOa3FG6IIvHB7i5oH8sDv5IZnvkLqbhz3vHJ6N9/BNe+H+SRG6mixl9S7KfaxrSOHZn5CJaUPJ+OqNz9z67fSzBq3+/Vv+eP/R3fGgf+3ocU3dBA+I94qNn7hw655LjaJ4sZwvoNfkQR8uHN+Ts7JiQfz5zk8XxnTu/pcEJvPaWqLKiS4oiKSpRtbeq8VZ2iCQbskxe/0qDNwSuX0Rf2GM/kX+GL/z7hj/kZJr4M3d6T+O35OZumpDEvX+YURLCSIkfQb+n84TE9CGmCYW/FtMvlATuwiV0Ru/hSkIW0eo+ccUZ2yfQatZaQB+mPjzvwp/+AlYSnvHv3Nj1FzT+t4TcUXe2uGON75PR/BFaTei9N3PnPsWPuHABXnkAMojmBLrqR9O5Pw2wWzP8UESms9kyWcQwh8RNyL0LjYh9hasPUZJMvRl9QxbQM382nU99aDbxYWXjaQRvPZJ5tCAeJQ8zd8mezYbB2prO4cXSRMGf+Mp0vqDzAJZdmJK01zBz2IM30P8I34vi1bfpF7zFPrJqGH4LaDK9naftQXeWCfwKn4dl+d/lnE0h+TqFKcOBMGIkx3mTOPkJGWNLOHKXPfxhCbO1vzmxSNLRYf6Fk8hfYssEyH2evP0jmf68d7dYPLw9OPj69ev+V20/im8PVFlWDn47P5v4d/TelYCWYCP4dC996+e9ZTx/ezezJHj27Rctu/zWD9ymW0mw8MV7eGXv6BXbu9BHnIWP1A1oTNIevzrEBbg/jgIk6AAYwKfJ3gFcRm4wDkgcRYuf99R9xdy3dXlf2VcUzbY1+AU+CqyCzlOuc3V5fPL3jycy/OgyawC/KPKHYlJevYK9HkbxPdseuD5Bfit5oP4UdgDQxT+W0zgjzLSnCwoLBtTb1i15X4X/w419RS+6McZdAK3CmhcfAlr3004A+8FufJpAd2Eq8vl5/Vn9idxkn9yoA8IEMaYlm5LsFN3K52N88pYs59N/LCkZnxDokjgl7NPT/JNmqHiBYXuSb9ihpMueJXkaNO27oaI6Og0c22uYf9aQn6/05DGB8dSNwcSurx65AJb+897Z5fjiOL38855hwaMSPBVME5iRx/QR4WtFHz4llI0HJQOJwpSvYCdgBfD3BUqUbH7x1yOhmcOD9OKrQxqGFHb1F3oD/Jh8cWdLymZVkx1VQe4vybackh4uLON8U3c2XTxyxH2xt2bsxr5qsDaAsd4u3VvKvUznt+xWQhdAAdzaJjc3jg1CtpEoHGjXwR/4lTWRSeuL5b0HpJYNRmG3YupHcXDjxrd0cfTq1WHGG68jnIVXjBK4T+u6rrKf5q/r+6zhV+lynP6RMtBJ5MPskAn1lzHMEcm6Ahwd5C+uCwieJT4wuSCX45N9tkLQhhsE+BR09+MVMJa82Y9XyJL3HuLpvRs/krvoHthYGEf33HyTuulWFMXJ2oaZXcSgiYzgEzRJzqZzeoRDIx+hNTJh9w4Pqs+wV30YxNE76sLMLqL54QH7O2sUtuzR5TW+ir+xiyDnQC7i4h45lm1ahwfclbTBaDlfxI9HnybQWPZ7MVxgFjjcT/Mp6jETbDfJxjueXBJNMU1JAY2GvQb/BVn1loBmto939pV8Mg9wNtlvCxDCPrydkQL8+fY/lNeGYfwE/0ggKIDd5rO+WszmWf94ZpFsjnADrpn5nMhWA0z1kjhZpPs2UxFWcjshX+9c4JvwWPYu9uT3efR1jhs7X1D2Muv3WUosrw5vYQvPj06/wNZOf30lfHRvcrXHBjV5iOBFbjhsJ2aUdAp7e8HYzpUbL34BQkX2HteOU9fy7rw6DN376eyR/CN/4Wf8HJDNApSsO3cWHh6kT6S9P8Dui3OSwCrNg8ZJcUHRuYN+sPtukuAmQwopFJF8sqoTNLk+/th1jt5dp3P0bhov7p58iuBr2Jf48WsEwrJxitzgHpQfpmBCnz+grhdz3PN9SVq8B5VnRtfz4xpZNKr5UrorMsGKEhtEjYfTQ+YUFiCaw5hQaQX2OkWJlOkdoM7mS8Ge5oWL4lgGCJaMe746hD02BRaBu32ZcCM7L43s3I3jKQ06iJrq0M7L38g/HtPZ9HYKW2IUglINVAXsn+uDAoKw1I3juxjmaOrOyet5NJeO3cVdNJv6b0AZn0u5nvVThwWQLbPaUSS367xPhOsUvxDHJ8fk2gUDBYxPcrq4A90YZQ0T/yBFVyYUrkWIxhMu7P3ynsT5W7R4i5GnD0t7G8H0ov4fAvdHK5Jcnr9DJgwWbhysmA+2wU0RaAmmVJ6kX++Ag6+bA3Nf1ezqFLCR/SuI0//kxsYGzc8BbtiiJ4Xkxu3LaDI1W8LVI3CD0V+wkoqgw78tDwYWBe16YTAf3a/uFBccVMhLxoeu3FSbHiegz+AueaqRpsvE7HZhym1TMkq9BLWOfIQLLryAPT0DsplHT9Yz0OLiACYlY2+F/os2y6+jm5tS766irzBvwDxGi0UUz+njuo7hL6DW2Zpc0zuaPACqgUYyMuHHrE91WtRW2k+b/tOgAXXRgVq0IE536aK9wMqx0Z7ny7JalyuGWOTfK8TJSgy+g+2eCIIwv8ULqWNQMN5F5ccyUdUg4AX5Bb/XdGl1kRMSQC1+/hL3e7qsxberSwXKut5tOVvXs2lBO61oy5KKa3qwGtnhQWnYnHV0fw+mK3Bl4GnZi82WU8ET2QXkdKgsm5ojqcSdPdy5kpbKBrSB907nt7NpAupNoZrcwz2u1VNUFYXNe/oHamLIUWHf/U7n64WbWbNrz7IBjDyQaYvH85UUhhmOI+CnoML5j2cATM247nwodeZDFHXQAUxlbQeuVt8UZvEq1SUBHIRRo80M484nfzVp6T14mY5BnOY7NF4WmsVB42ICDazsAhz6F7Cq48v4Flj3/62WvGSSqorz7rc2c9TMv8z2HspHQEKA2SY3Edi8TGzdPSYwYpBkTKLwWmbOahg7+RUIgOM5hGM6AAgwMEDcljWbUpFlCzEfRFdPYuAejbsy3ZNXUbxAYcpvyfoNKWxHR1G16nZstjJXpuFBw8QXq5NCA4cHInJw6C5B4cMmAFcpISaakiq1h2CiMAx1lD9bXkyYyuynw4rywhUUlF9GoD0bv5W2xSgAkJ+c0wAWeN5B9QLNtkb7ZOvluzElV9nskBv3j2ge3T+S1x/HV6PRT1mfisWvX3tgyKu22PqTdoyhZv3XQwy1q9+0+DWwQB21Z8Qu4SDysWbLyQswTsClshHYRoybS7QtawUqPLp4FJ/LxOdVCjmI4vQwWYId8Affyuh47+h8/2QfZobdK1mNMNRyl1eXcqKEK/lv6GMAwxb4GSPs/MnU1q0hX03TLPbThXrXUIpVoZTvjlAMuQ+hnM7An1e7+mwJGoCA1iXNF+rwQFjJw2mOxHdaVTv/aYdc/zTLCuBgj2X96MbRLKhd14/Th4fIRw9h0mlnn+xfbrSzV2TALfyhD97JKFO1i6EccxcRBcmgNu7GOn1EU5XjHvoIqm25PvBxfNpV9+BWg0H8OeUVD7cpIE53IfRiWkiHqV8tMLdq0CL3R7be+MI1IFAPmXZ5mDuH+YuNT9dR9QV4TutF1cX09g6jCgBt7ETU1xeNJN3UH3TaUPhyUKVF9nKmWQM0kREWIlsfo+QBsb6kjsRqKAu1WqAVAA1zkupFZsfMjPXB9KQPAcL06Lx4Q/R3LaRWS6xqb2IdzedkFHtRXEOt5+NmarVsw9qYWmsXBJewQmhN63o4o0A0qIWgKxHMogZt2lEMVdVMxSg8kDA42AYA4ca8vcoc6x3E207n/h5k7o+pc68kcx3xM5uybTOouBkUWVs543dbYWd+fu9boUT14C2P4Y8peDDSqEnkLtDj0dnZu+O/7lW3Bdhdmuqoqq5D1CKGqhSCIPMPp5+CkDe4lDY2mkzGHy5OT/Zq5AOLJIGf3ohM9vNbR9BFhG1mswjwpjvw2aTulkt4O79S4HVJN5urhwrRrEHUKhDr9YctJQDDFnNNrJAA2Tq22110HtdT8wRDHGtp+ejkso10y5/lL67IlyPXIwE5JpMl2HvxogiQS6HfNBirnsjHF4wkD8MsxJJTb3TZMnQNBWPJo5ZFp4AC2sUB6dQ4mycXl+enJ9LxTbpxmGsZWsOpjFOku3UzHY+uTz+MP59CHENpT5zffOzgAM/Q0jVkbUHcwdeEXAf73yIt8zC58h8FTK6oStmgWE/P6FIAgjyPExhq9gdP6RDEsLgrMfiMuP8CEegitjAQSW8ctsti1SEs9l0UPG7cShZaeQ/e3sygBQpYQgQd+GSwYTa8lm7mcVjwyKZdGJ18Hl0cn5KT8fXp8Q1Q+2Sr0bwSx4MjwvDLjBqKwUCQ2RcWgn4CwbosPBNCtNMH06AneJ1Fa2TxvAF7qXBO9Ymohf+1hdRm+2HFjlRNtzHeY32wa/52GmpancgiCDXr8x/pjODvLrj2CexlcEBgACeMOVjcYTiO/C+5Xx+euoOQ4vwv+LPwEbN7R8XUwXfuSrdo4sfTB5zO6s3PNC54dvVuxtsxnDMPNH6d/CQ8B3+s3NUHQi8PF15GtnV9DiBIN1kmwL5SgYE8awnbGm4ITxV/sJhcWDgQNSegS5wogB1G7FRAXDQEw88e4hqpNHkS75NchSSZaHlD3lOPKM4bPPOhtHZjNp3//nFxP8tOt2TUW6zAvmdARLUDNPcQhHtHOXEHqxXKG2joY2lKuUmEv5BYMiI6WFHRIW6R4qkoBSxArvEC7OzT5AbEF7kHcDK9dPr5giOwHtsIwoEhHCMj+baNTC6LruTtFxs31UnTb7mhSb0gVKXAcSDqVaGq5BqeLYWq5juKS33ZKPznpS1q6JYmCfK+bzy6oGm45eWCSKDZ9Atuga/T2YzrREqwnPKCvG5GQcZwDxUO1M1mOQ31Ll4uo0Y2kKqqcZhR/tWKS7Y84arsh4oeepJnGr6k+7YPE64Hkif7vmtruq/YPteiMOWKqf2aGwGl4P1biBYEdwwEty5jDLxdpxYZ2jZ+2dJohSigSiQQj/Ni50phPp3Q3nzlU2W6BPLmW1T8aI15mN/h0HAeYuQ37eX1h2KHiuvX4q0SRi+4IjK0uNrHhq5wLKmepFZu1YJMeHnPLkVeQuMv1aG9mzTxooKj1DEUrjVOC9hgc+n2Gk1AnHHHM3QfuJGkmMBwdMe3JJeGDuwYzaKBpdJAtZp2jGWoli2pPfSIzhzmVelUiyCooq8cu1BkiKoRKeQOCB226mz2fuZ+iUD7uBgJLR80NH3IWiV/JNO36YnP45P8WI8m66oBFpxZ4g1VUd3JjBP2eYmbbcdNe/DTFo66DU/9prlqG1+t4axreWtn7rqGv1Y5bBuP3YjL9uSzfThtF17bzG2r/PZVE8by+fr9XgupAy+Qy7uBayg/KDY0jX8rAV2rMUMPgBRXbrTSmvJXCswCzAcRsigeyJHlAp6uJe8Mw87h5+pWqaOapp4KOIa4biWIYw3FHE9uBIopNSsAyx8uhGfFoOVX6wPl1gRJ5m00RimsiWHuGrOwPpo5m8fy8Lr49zKAN3Px/bkprggf5ujt+vR9iqXmDyX0gULYEBq4XJRxCMENnOmHD6LSFs9XB+TrOVVuhUtWCOxKD3Vf8jyqS4oF6ppp+54XZiFP3Kr+sSD3wITcG6bVuA8PswwbOWC2vDBlq0FlXW0HAsRPcbZ7dqF5VCgysk9xCjmnVq+08bL6DY/lBngOGqyQAtg1Kziu9C4q4K9ebYwjnp2dXn8YA3w4ujgh44ubS/gbAbEJmSAednlBPqvPgixC+GF8i9ghRsuM5wsg1xgX6QkRRgY1dIcYbcs0epkGOcQozDEAjqfXk1NyfTpi8/vUeONk6aWJJqqg4TV12cwOBRM2AIBJ3gPAAa8ontqaAa7WCf9raDHOOg4NXrjA2d11jfGD6t9vdQ9iugIKUm+ITkNrv95R+n/Asft0uxe+yHHvk+vx5+LQGfRAUA/Ax9aEMuZ2PduXeIoTJiKeY6IA0Zrvadrhwbk1tvxKMmgm1agD8SWWx5IABZ7khFRhVh84uH3HNTnDk9+sx5d5/orW4zglZJSd+V6Z8txRb5bTAo8WLyJ2jnU6B6t6Ebv+70UGhWyiuJlJm5wm7PhnSKL5bYRP51OZnUrOD3zwb1bwBCSdLzywWm/vF6MoAAXxED9EXfB9/eom2bn/9DRJmlOHO7n+bwlLS1ScYC++cZyNAVvIc5ewg9fk3H0kyhvA5x1beIuDOPAeHrVWFL1swTcAGRmiwJH16BOn2G4H1uJ4JukR/mJcQi8OsO/8WHgbrWUw7fBuXQxgl8Dlp7LVBkEjOsOPjE1dU1g0mIHkbvrAre3k07u/7A0ES2aUHg0GRlq9sEjdDXw04btxMHFdISro9BpVhPUrJ9guvA5Rr//+U8YAcMpFILOk7bJp5IHcZu6Y3slz/qCYQJbHXkWmJ8z4tnBpHZcLwc7LuhJkGSGAsCjrRj1/zlt65+IZUhhcnq4jebx/WET3mKAMUVCwM7KmgI83sLd6BidaQ3mvGZZb6nYta04TrKQJz6Aj0QxCnMlr1I/RwUVu6RxU5Fma6sKFmZ4vfhLneQNUWFcc6L0sW9WIMNYv6E2hF20T3kOy8J5uDH5LFt+DZbcw7QrbZqmYNPjpzLYrjPuvI2QDv9VP9jPhxwOAmMeT866Q1Pno4pMISQnwhfDo+UhEr0RXjWwq5ZwYK/NiPW3igbJKCoc/LqL4vowADIivtIm98/cA7IEClqULA2glO7rNf3ITYbgSh7nF1yYPe+81p4NE7CkTy1jcAFKxKhdrJePKtGyHgboKsRYxJsoMzJshq6oJ/65hSvDsSmwUD9uKWvtwI+NvZ/2qatgWY/1d+LqY5oWZ4eWBr9Px1hD7xuS+IngMtmUZ71oJPnv+11wIF2/xqg8Ify7HVxp1ArKXoVIuGMaZgJwuVplcAc1LNZLs5n6a1oj95Fl1i58+X08/utrOwpPlDqye26+Ou99W7+KIL2/YyennErHUDbDLbq6mBvMXXNas/luzdTuohmHKOjuCJyb8ms6CATWfJog428flLXS09rW2lxrA6MYXttzCW5luXbbuC2zbZ9+mT7BFX257drdNk6wX7fZpR0uyJQrGUhwVdrlT3uVwlyXPRoMHuzKgtdNzF4IW7i+qTqEfC+qF4CxQfLxAUqlnSroLIaWuE4YSxIz6pmlojqVw6sUO6t1BvTuodwf1fktQryODJSuHtuRoEFCiW44u2YofSGHgGAoNZYgvsF4W6lX/1FAvtsBH0H66+OsOn/0m8VnYafg/BdML7PDZ7xWfVU1LLiepTqModtjsN4vNarZvagF1JcXVNYjFs3XJ9SxFUsIwkPXQdJUgeHFsVn02bLZNXmyIsgKopNjVc/N5SNCgyNIOgd0hsC+DwFa2c+uGzrGe0sau29pDobumpZlVL3eO+nyv+O72O35LB2M3f8tLeltewM3yJE6Wl3SxdJLWJRx3QKH98j6bp3e9NIC+604CbJwFBFW3yeT89OJm0xagB10C/vuF6Be5CwYqZafYui2VzZLV2MuR+8WN5iD92RTCZ/Ff6UkUFqwPFLtCuKEnR5/mGDQcR7AlAuLBdsAqePgCGY+hL65HwRzbPzxgDwtvXno0gd1Te28Cpt9iThMGxXhYZvXuDbkHUsdwMqZN1r52hWe4lhAetJxhbBDwshkNFxBtRqn4POa/SAoiLAa9jgY3JaDjj+PT9+T48vzqbDS+uHk9+YkdmLg+HU0uL8j7y2vyeTwZf1v0qWi1R0VMVXOQzAZKdVGamdppKZFux8msoeuTjBwh1HHu3qZFz1jMYbSEf7O4shAIGayj5cN+D7KA/2y6dO9H5+Ozv5GP48nN5fXfyGflOU4kvU9Lo93BFojAzZafQtrivJFi9DhuBACYYXVLlyKuvDhZzYwLMCD3NnYf7o7eA+PAGqgB9SnGwv7Eoteym8PmPnJv51GCBX7KZ5FGt5SMFuQScdyhziOdP0ZArsBeZ2Q8D904XcDXPsYqIcsEnGNx91P1AA/mXut8eCjdLpjmrNyMLj/tYZ5V8iBRL6/LJXRU0tNLxL1qahuHr76OvnmkKdDB0xtasmT4tpNGAXpyQBHvNYzq2Z5OOXwgMvl/YZuupjxGxYoGk/Q6PzFX1xM+5oTbeO8xS6BYvJDtjyqrTieRV94QTEWx3i3NoIB/x+48SRvK+uE4OgTjlSNc302jWXTL6lqHDd1KVdbeSTuAY/PHrSuTmdemW5NxISt9Cxp4XRJTMdC6vYbkebdibJV6jLPSKeSaUo9KKeSbr5WbMQcc62oICZjN/myJJ6Q8irKP1R6/TwtWV48UpDOV89NqKabSA2LnTHQTlgL5K5R9IJL2UdOTQ+f5KTOO4ZL8mL28rS3sY+3BGlM3LKzGXvFOzINp2VAuW4F9d9Um/s8SKXQyfFXVgZGbG4TuclJyWkhJsXMtmNLx6NNkQPyoRF5MQg/qENGFGeUpyrQdO3Qpoyi3A0UN5voYAPfQFUfGUzvOBut/AhrVtuDGi+OOqD4OSSZaOf6ft+50A3AEJpp7Tzav5g5FBle/FFlNDAC0sfTIz3vuE+FVFXHyowoYwwupRn3GDrwfVsDkNcLWcxhdNvTNBExuIZF7OptNMXIIGydiNNKOf3wL/EOXn5t/bJX3ZmM86dMFy70yOiOTm9HNp8lT4kk9MSJ9HUaEfPJ9lpAfdLa0eDx4s1J0o0je+1ktUCpedlm6CixtMGSy0pEyGFWe6SfOdsP15zgtHv9YxZpOc15ITtLid9XEOMlyBoYdmIGnuDOqSbd7oVIs/QvOBG/yI0LE9XaUJIDKoz1ZBZLOQSm/I4rCMl5r1fugUNEHtJ4Bqf3VnWFKkh4A1ujk7GAM/3pL3mF9j9K7YgfWfv8bSI9dvz9W6a1XG6O3CgESvzvA5Vqer8imKtmm7ki66sqSrWmBRGlgGl4gK5bPv8dt0sCoeHNnoYQ1MNbvW9WoceKOj9/3hdKeMuFKJZsrHuXepU95qezNNZuFa4rfLv03TL8Qes/UXNvUTMkP8eiPbiqgcyu2pMuea9iea3uaqDVym8bQDRX2WrN8Ssl+C8nXL+4+5fcDnF2r1dyFwt7rtXfFNFQdUHWtND2EFx1fU9HxvWb1aOMkfbJ69E/G9O2mY2rmKFWesg7oA1eymAV0+fAAhjrHaiZXZ39rBWv6rTbYpp0CoZCHXURz6T6dWdzqaddY0jQMgiqU4kxtL2NDK5eGrmiWpfmSqlkqyGzHwVSkpmR4cmjKpqkDT9rU7BL38WqXjj+f/f1GwFAryR6qe709+vgfSzcN1s9bKL1af0jg6jotQLfZMYH+EFsJic1WEsg6WIKvbjpPkwzVlSMpLxsYNS6lmiypim9gURKQG6GvtkC3q2MNJ/TLlEvXWt3PtgXQBwNzeiMfvjunbwDExi+Q1w+sbh6QZ8Q8NKUM17iiLV06TPzooT4dMT8T1HMgrhVz6XqKVZdbxTPLOdHRym5suyXFTemmwHPSDfgNA42oUbOqcmSUMgnMKfv64vTXn7bQdhSVK7XDr4pveoYr656keqEu6U6goClgSqDquJqtaEEoC3iLGEsESLPkkLIfOLXVBlJntlNF+ukimqUodXUnOFXkB1BBIMpwp4L0VkG+ZdAwjz67fE+urk8nEBRKxmdnFxAg+qzoobLPdjWSIsRbaBb+bsA1vK4PGy0LIWimjhmvhX3aPA8l7K/5wS5BaUXmXJdotvRI3ViKWGQrBKhCLOK9myUExzsMqVvyMbZpTC3w9K93EQpgiNl4gMsuy+iYBb/6afArhr4VAbAs0hE+KvzAExjzGBPoGryNwCEXDHlfhEnu18TNrS5czgkGvMD7eLiaHVNIItafNHcuG40Qvcs6EzwmD3Pq7pPjOwqRxn9IsfuYkDm9ZUEzrFvgtp/OMIqGJqxcHktieefi1BVutFAckpss7u7dfLT3UexNA9CYI4g2pvukdRx4GjvPlInLA2NaYP9d0CVxyRhDxG51mDFQjvJoU/4idivrIS3w132+/5Ue9ghEJRsHyYN4GR+PWNZ2Lj3+s1TeZGZjqjw9XUJ8Fk3VJ0LVlAeMcub4xWqiyafJaYmvcKvwxN6E1aTXFOtMi0fAetRU41xgzmx0LtTeS6tnlq6D+pMvcPXmeQROuQhX13scKjoW8QMsBD0j8r7skPMPB6Pjm0+jG2And+4MTcMkmi2zwZcQf5U8LMMwIf8wyV20BP57dX1RsK3q438BZq01eS+YAk5rrjMGUL1+RefzR3IF36fxG3J+0sfVAZQN4ZMzohowXvAJgDF2g4RS43RRgPVQ4JyKmg0Rn5491jpHiGL3Hd1H0EfjbKNV7h48XdBwkbx3xAVfitbT5N3o5HxdsqjV1ljBLNvEDit9XCt+4AWaFsqS6UNExtq6AD2z6bdgM6VCfRpY2tr65PVNrV9lzTOsAwIjcDYnD9SfhlOah0gR0FtgifAA+ojrB1ycRkVUqZl77e/WdyaOlgvKzcWxZqs4+e1MXNtXUdGs4eQXx2NM0JK4yxjRdbEg3unkanw9Ylz99fji4+iMsW0O+TgMooT+0gxXCTHC0fwTjJLr+9Wn9+/LGYCBL6yHVm3BA56+yUQFbqmTeHn7XkgDjHU8kuX9ar/hNVBYlqGbVv3OQatmgKxm34DaBl8ZIrRJ1Xq5WVTXhEcMQwIgQpF0zaGSo3qaZASOrRhhqFMqAhn8UM+hVzEEi/I2MO+GsTQTK3eLi9JZ1AyVGuTwoL3P/JDipuJ+rNIWt2Dv4XlUpsdzPKtXrsy6tkWxTxnJ8EZumcZwlyOJ5FYu2w+ZKV3G6pqcGD1KSmDttLaMF6211EhLMbWmyo78XHc5VbCvaI5YCSxdouPo/h7532NetA7th7ywY1KpmNZ5HID6lp1I66aoR31ecQXBoCkvdpdcPj0g+pwDIXsjX+jd1IfHt+Q7eiNqqaiIhFXSagbcx3uHOnZORMT3RFN1WS93Y0TjCFjOYImIUjrMWq2yhvoE8o3Yei2u3uqcu55A4Pkw8bcrO2RL4gCgtNeBDs/SdFO3pNAHr5uu6r4EsQC6ZFHND1xbpRZ6r7kGdcMUfRkC/cm6CR2rOLzfT2F4w/q4h639XFIpG/W4Vogd4nodE3ZfWQ6nJlXPfTdozmjRi8xo7uT60wdyfnkxBjVxfPGBgGogFFtqT2Q7Fgqc9nbYaANpSDzDcQwF5r4y+cw9nW6s+9ScB0J8HdNbCAZAyx2wrMdt6FIagC5b3dIVSjWVUh37itfaEp9opuV6UYf2Q+dSt5PJ+MPFqejC7rWiJcdos7i5mpTKDTQX2U5hitYq2wzPaCgHm1eVva4tKvuktWC5BCRt250dOKxDFHonrH5KZAJrmD4TNmH6tq77liG5rga+XkXxJc/yAsmguuuEqmxS1XkObEIFl6z9DWATirolOCGqYMOBE5fXo7M1QITynBAAcyT8ICiA4liaXUmz04i+PpPV398Af36de2sq6Kl2U1NTTNO3JFO3IeLN1XUITXEVSbN8RFmppRre96Nkt0Sd2JquVLvKw/BPqxf3EJRPFcGQOs7OyOkvn8ZXmNVqW88lkm/KzWbkFNyPDyxZUFe3Zv4mLd7MHZsbui/XMsBSjiawLu3++XUqs9jshMzLPyeLx1nGNd5BEMPeUWXSypWgWVqxlXKBObnGOBUsUiCND0zeYgAb+M998Pn79Nz9HQIZ/rIEL37qalPrcn/VNPLpAbYA+TDGyEuwD2kyTd4Q8NgtXdDVCq9dtaljFtz4nnoxe1LFJ2WtMYGYWAz79B8PC2Xv6N10NsWXJ3jjDSuuaeRfFCak+YwQc+hXiXB13odF9ZHXK1J6284/NSMbJsYUZ9HaeDQijSnOwgUh2Pqz2qNVA/77U9YuzLNPA4xBKRpbXerXrAJSfxWxuNl5qZ7iRePMpAYGsJr7mthdLtc01RXdguBGmZqggAQQM2fbpibptu6qgW5prsx7ggTBA91izHw7CVMKQEz3Bi/T4ylY5+7sBmkvuw14snC5Nn1OtzNWm2n2AKuKEFFqdjei0k26dk04bd+Q/qcI6O8Qzg86UmtEP0dijmeEiqcDlAjuYd0NLCAx3ZHkgLqeAo5iCJN+YtCkhImosHwd8b1yFL/Y004x/P0S/W8Xv98rep8/cuE4WqhpkqmqoIAqPpXAy2KCAuo6gRa4put79cBMTZi8YIOAvgex02XoP81140MIm0/vUWa2BOhvyV5KYI7ANnjRzbpRz1ZqU3NxOE91DloOCmx1TOAwoIl/9AE4Qe5lO1kyd3lVABwesGeF/jb1agNcSjxc0PGkwI61PTlr6+G62LG2rVibJms68rayNQsbA5SuWwidjaMpaM+A3KH8fCgU++flcTWWxY7LDcXlWs9AlGykfsxveK1ua52OC/0LLSM0PIj6C1wZ3MSGKdmqZUqO7lmhb2mhE7bC61vp4aUS3BrISnW9ot3C7LpocX1CPLbR4Hrob5trb40Mrv7EZeU05ZDsanNmVcmV2qSONSpjW6hiWyhiTWpYr0gUkTW1cJ2HAtQQ8u5eHrd68FrRkS1yt6xNrMQvSmB4pqKD105GigZDIpBsSzUlqoSBrAS+b6kN1WhBBbKU1OwYEptgABm5mqG1QJsxiraEFDiLvAn5VDgGrxAa4P1bPbdw41u6mABAyDWoAvvWMNBOHLA3BYJGVjSYF+EwQfclzB6fmfLqmJvK/IEyl51cnXKP8Sl+zMDyHNWSVM8CYaSBG8ULQg0ALcvXFQ0iJFRfhBeyL1w1eemFSFrV2DCl5607m3kzYMTA0XAiRaW8vROr+yIjyK9uGpzaHN0p7EsIyRGDCjHkkp8h0G0pXYzgKk2SM4idOcJw05wVsiPdJzE7clF9kp9o7OBoPiej2IvA+GZ/C58BznJ0PsZm8Dfu1gPIB3eGpHEkq5ppA5NcXRHWcsnYISY9y3/nlkEcWKegVCmLSh06uvaJY2pLvS99rrTADSus9V3htUvctsadF3nNKleXecAAYYwJygRjVRY/YTUO9HkV+fyKc5DMzbJpk9Cb4VMpGoW3NvNTzBfVfIl1SRIVWXFAHxvsYKMwYRVvInfvyY8z8jOQeemTDfIjFolss7YGK9iRdjBP2rVBJsT7BxcPwfY4E7j1N0fFEed39M79MkVW83xfP5mG4dRfzoBRL7F+ApptuKwk+jon9D7KD5S+RIf8VIZgZAt06OYuWt7eLRIycI7I3nE3NdyAT3hX57PsZ2pYfUwNX1Gp77qhZGihLemGo0l2aDmSZjguhRhCR7c5C5pnU5ahQpihvQWbOiLDqvtCEpi2+HRFMbUqfDmGJdle4cdBsU8XHSknGRkweWU19U1jornSCa2/XmGMOAiZropZN01Y+7E1YfGUmehtyCf+CrigqP5WwqTTcOxR9kJNeHYenD2CiMHArYnOrh7yafh8x5SeNdFkLdDKMEyPT/L5XNyuVyasWm5XSql/C0YKS4SSSawhMmI9Fx80Fa2uTsDotlApvEyl2DHFHVPcMcU1THHTbOEltjhEpnDLGCJT+O9ZpnCtMVN4WYXKYJs0mPz5soUPmZqxm5B6CjG1uaB6OVHVcYW6i6tWgaXapmECKK2Xj3V3sUIHl2FV1X5L5b6Det+i4G+v4tegoYPBoevx0FZAtDsiug4SrSj8m6v8bUp/jdrfRfHvoPpXlf8W9b/ZAKiYALVGQAW8zWZ4x2//HPzWtsCZXE2j0QSyLTKQbcdrd7x2x2tfOtUwPrOpS+zi0831mHnWcg/bt+VcK2LHhMKHiqKzjMEDec5OpnTBPM8Xy0Wclk4U3WeVWeqSWrhorDAz3pKvdDYj82gZT5M7VAxaEuBip96Ss+grSaJguryHLtPFG1D8/Ay08V1QsO4eA8zI25qpdhhUbzU59Q6NzUOm+PxOw3gsICRIKtusRfe3L9HDmZ98bFN1gp4/+KlFyOs2JqnqWmGiOfuLOK0iRfM9XleqdwAjHqJ3V8u6qm235dF2raG+gguhk47iYa1WS+lZqxVpEgj4W9ENBaJpJRvNNk2IU6hEzs1ExkReh6mj/6ens7+fs7qCtnVdpx+jsFNnqCCPjfMLpIB0gwquongxA+HbjBRcXq9DChwHAvpeBinQh0AKrlxgYv7UrUcK2DXyj6U7w7Q4EJhzfLaHrywe2zM+xdN7N27K+ZQswbb7g291BILtfP9kHyOv8d5LYhGbpX17YrGybcqUnVzhK31rsmID6GCVuNxKv0WxglkbBD13Cqj973QnbHbCZidsdsLmaYXNmmCZtbBMR9Tk6uPfJmmqn99G5+h+7IbmdEqA1F1CwX87pzXaptqT6hg6KE7l1O35eeE8XLgEwBT3T/8AZWaeF0spYzDkr/SxaOItUfbJDSgHZDwuKjW9EQo47RN1n0zQlIH44Rki25cPoGqlRYRA9hcFm/aJtk9O3Xj2SJDWWCUoTED4gAlVwf6lyzh6cBd3j1jViANeWBHApVdNOYU32G8dieTVq8lfxxdviEAsnRvg489LwKNAL1nHKquBw538PoVA7Gwcr8v1gH7aFP9R902+tsUgNGZbslNx1BSDCkuD4o+OMYIqzfT78cXJ+OKDQG4i6Ad/YQYqgv9CgsuqPIA1zsMImLAKYKFbSjQwvrL6YJ9YfTDMlRVD/BVx8fzTAnuGVHfoxYIRmueqOqcuvIzkquz9Sn4j6t5ZObOX8PyvjJ6P7wAh9PFDyWLqvyWXgA7MuaJZUcDctc3N3NyBNUfyIYglzpL9NT0AZ325KhorLDWnfgyOe5/QxIcO1jUjpgUT030JOGcJ6dzGBEinbE3A9gbAgz48tDSaTE6vEZReDwnoT5VSXFcVR7XKR8Y2yCmuqwZg+3h6ay0XKB9HLFFXktKp0KHao6GKrYJQ2qz0bsPGZSCW+LEXQ7N2wSWrmdkFlzw5oNOzvPuK16ZCjZ07b3IsbcrRN4BqygFAK06tB7Lmuqaka54l6bprS14IQZW+75sQRmF5gV2ugy6kFASgEtB0cwNe8yuexUMOw+ZrmPrwPJcopVWqYdNXvxRAqJKn2/7v6fzv0/8RGVCdmdWK6j0B1ex/Y3QTqJ5uqrYsUU/TsXi8Kjn4r+bi8TzdEEY43ZNRCoRzRue33w7lqN8I5Yjq8MtQi95ELZap6artMmoxeGqxulDLphrhc1EDp+7plqFjGZNy1vwa22TAqiXPRGgXy3sPqz+HJXsveQlqs9aXlxBpULZp4Fm+LKkKy9wfqpJr2brkuEYYhCACrVB0klai00E+Dhajs5rLkuH5EgSM5YDyV8rPdndQbbH2Q+33NbZYbtT1lzlXa42x5l24Zh8+0+b9OL1lpdCLkeR7NwVAXmIHW0+zVXVVdrJMaL3XuTpNKaLFJmnTrdlKkhqmpNyEJEtI07byoM2ZUDgQRDS+FPbZJa6zK8Jb93N1NrrAMuc316ejG8wAsmlDw8d1rnc2sJBDhl1fQXQI8v2bmLoLoYADn80xfbY2zwpYZaZkDCaJVv3ATO0lR0Ux1wRnf4OaDeQjxMJIURgS4ZDd20rphvzPi2WcUPJ+FrE8bG/I9QVZROTCnfuP5AI2JwbsuzN2o9LGCl/mfx0kCwyuGuAF7ORQv9L1ENkyZWno8gCla3booObB/IHOTzZ/DOsuQCDSAXYXY2rioZLNnM5ZxBF0LgTM7/iO+r9Ly4dqQpMJfQCqQxVHKWpTVIrFJxAAjNWIwIsB0T0QW4ohQOWntDjo8NRJvE/+AvScwAol1crxBx0TuRSb4W1uVqXr/bKjEzDf4KhY1LfkPMIaiD0y1awCga4xIgyGGqQbkpwGy3RvbjRcsYvd/mrv6ZixizTP11synocgROf/55Iv0xhCtb+4PoYNviHj82p/L6Ivz017H+kcK7JQCF/rSHwb5e1pL+u5TYUSXSzbttKmNNBRAKmxhk3NeQdiAaUCdxAL/bBFbja+2v2WEeWWEFHe7q0YMssNflosOdKW5CaD1WyAUzXbkywFHGe6Yhqg+ZqypJuWoxqertmrIyTllVJM7VeAHmT5tycMphVX8Rr4EDQArmEyR7m9XWYZJvpb0srkSkFdCGgWAHqEWkEl3nPotDNNGajH18d8nd7mGg1ijDWuiqa3BFiLHrEh1/zi0/GxcCi6svLNK86Wq3+uJbNIwPxsaZYcyzatYdMsNQVQY8LkPMq6JoN3NXdtZS9ktM003lpKzzbLSheu2zL9tsMApda5yrct2UZooT6Kxah5oXbKHUnqyY/1jln1c21+pc3ytlddBn1AqAPFc31JsQINGLNjSLbjoudDVTzflh1PF1N7cPaaoengIysf4KKCJu1nmrQgAtukaQdhvD5R3Zqyubwoc/ii1BumMa6rnepytVOD5vrgimE7JoA68rDHvfLk71foO2F6MRWQlD8vS3Oc4kyIWc/Sesj3vCI3xkNVS3LnLI/Zby0sL7XsyrxuA+G+Lkfwc2uJwumsrqkQNziZ9c2ey+qXr7zzmaw1J7JazmN1PY31ZEka9e1U6ZYTWP3OX3U4fdXv7NXwunhruenT99dDHKFagXgpCID+gaxUxDbxk7oYz7ehtlHa2Kph1dWGWPV4W72i25lck1cYmAxIp46vYmEYKpb9UIbFFt5PITq363lgR7d1gDeMDTwwGTCUD4zn4UMeAxyKhnfEuznxPjcB7c6I786I786I786IZ2IjQwrWwivoHmgGVtBbsCGwojn9gJURdIQVZd8IS3ENrgBUSbfRjDRsVMzawnx1zC54jb6xe4pezdh9eNw6f8fBU6An9ejxRcf6hcKDwvyc33xcb7BBTE0ZBWFeREF/6YH87TTwKpXuNPCdBv7da+BD2mQPK+tzp4Fni73L0rTL0lTswc3RwTZ8sAYh7IIR9kUJO+GEfZHCKlbYghY244VDJM7o4trsoXunhynqA7EIPLl57knekzCEwm3i8YFqrZV50XnwVHbMEv3cana3VUuWXlqzexTcT+cQ2hBXkLXJu9HJ+V5pbYW1LMwePmZtVYl5i1SitcsJzlLZCAwqqZgYVFc9DfyoliaFhuUEpqrCggVbTGillDs/xWA88JZMTB8gYDI7zFJTqT2OlsLh9PF5F/tESIWbxZ1gQ5ehuErVSmixe79M/OXMjcl0/r9pXLVA2fNkeb8KtMNr9+58GcKUgMc9yAu5D1Ys3uhUP6MIDmdB30Qko9RFzX6FIEhEDNnv8FNJh1IZzzl0NJ66s6aS8R0SeBrlLOoNkZjVJTv+/FtL5fiGZhqrx2OAqDtPUuacBwVULNlp3uobMgN6foMJ1uA1N3Fn9R3sMn7xZAUfUYEXZlFG/6zDyuGBeIF7s3VlxNsZIa5kU5Vyd36vndX9rfm96krLIHNLNTLwombYUU0ihF3K213K213K2x/fmNr5undI287X/Y3E3VUj7waLvVsbfdcaf9c9Am9dDF41Cm+HtP0Y+dDbz8LxIM0rQvJE6OM5EG0KWaUO6ps86n+7bOiA1HRJR1IX2W4pMqYI3CQV0pQHChCKS2ER4cAlGqFXESwYnoIG61iaTX+nJHm8f1hE9wk7fLBgmTAD9xHTXgqJQDtmOeCwtnYgtQFuq8J065MJbJxG4Pry3dnpeVEg6ov6lHkEcmgH+TEsAEx4ftqfpQst550lwqn/nsWl8MR/x5THiJ3ohjxgQpt8Ws/Gk5tytuP01qRLlSkGmlJyHAGNxPOkpqSUkC2VZVLNppb8kyLczG+XcyaTezqbTbHeE1uCNKPLayBUuiB/Wc4eiYaHhmX5p/9OmRmGsyxviaKnZ4n/Z03+Vv5mqX9qbf/Op3/gJ5LF3b2b92P0EGcflK2fCNcR7nq5I1lzIx+Q0rrmrIbmsus9xiXc4hbvmibR7AtmSdho+bTa6bma0+V9NJ+6RCJnmMB6Fn2FBZtFHs2Hdw5wryK/IYrj2P8Jewl6sUyxU7xhpjf4cfPXNxx39Yw2J6lOrsef9zY4s50JqXxG/HQaCbYgiKe+0Vs9ympT33bNMLQlGuiepIcWlWzV1yTq2NSwPd0IKHcCmecox5d5yuo2tbUswjJSKcWR3dyBiFpJHnAzwKqypIgQqUTmFNZwEeH8LKZzQLhAjPi/p5U8KeBS6exx05U2OU0I/D8KSTS/jfDpfH6hqezFVGXm3uzpPFlRUT6KIqswP4ivd+Bb5fv61QVJjPAdPOVjppIAkOv0ifTkwb8lBLP8LHgdhX0jmz/WQhD5S0xeAW8D8TNeZqZMS3iNS3ScnVLHCoQGy93IDaw+3fGTHo1i+eWBLAgMJh+Y0AsA178KY6k5cl83mP6nqr77Q1WDnJ8ZsARRztT4NrbTufvVpt8mJ7mpGxbm0ttARQcyDoQanM08LoTwj4zDpdeRV+Ff/JRNFwmdheK0bZv5vI5XcZ2BwASask0UtiJsj6++c5OU42S8qjAu3rDkhsCSguxdYL8rDUvkSmW+BD9i9gyun3fT27tyR2tZ6u/z6Ctj76ArxLlyIkzdBjndFczQ4bDy0r2poZsuCq+wbFWlM5K7qoE7lGyHkv2A8Wh9fCIbSuGMe+ZCOJcvXEv1GTA2EMsdE/Ny4lXTHMcZEItIqxUPn64T1EJT2QypS3GNThFww+fv7B3TOJAp+5J2rGmroelRRZItB2Ie1VCXHBksWgo2PzWpTUGl++7s2PXW6OaW7gvasaLiZ8m6oiuGUrXh2u1dHhvjB/YCdmypZE37iPoZvDs79k9ux4LlKts21mlxDEvSZcWXbEplSfMCVXYtSw19ITn2zo7tYsfWsKCq7TmUoctC4oB8YL9jf8QNz4zbewqxrqzTfo4fYJvzaDGkHWs41ob58O+Zz8JlToYXNFKbOWsLpxwA8/t2Ub8folr51QuzWB0CTgJPB/eor4eSrlBbchTdlAzZV9TAUkxdFfMz7aDCjVisWADiG2GLmqwbWCZE3cjKW/leX5otWtuyRVVVNU2Hnx1bfHlT+oW9wh7QkhPotiTrrivpjmpJnmYAecmBEvge0Jrtf3fWNG8rzyOwcOe3aUmmbfzDa3OTf0suYj5woskix3uypsiKrMnfvYs4G4xZM5idaf2ndxEroMSbnh5IviYDl1NVWbI96kuO5YWhY5h2GHCHW3d63xO5iJu4Uj1femoX8avDVVsrBiKQwQZaJqhWpqx3LqshhlrmEXGCBlk4sQSVDh1WuWJraiZ0Hj9ZOjYIqjRIuwQi3WpdIVkhEEVVocPVaqxiSB4QwWw5vy2ZpDWdOzxgrb+QktwmCHbYwbPl0FgX5r1FkPfx6cmn69NJEef9+UnjvPuFalvrQ7Uz/1laCmAVNV7npRXK9ViGMqQr9SMEvEZgxbCir3lvyvHdxY3mCO9hirDlH6oWPqvUXtuixhnHB/K6duMTTKAc+cre0XEEhsLUJw/RDBiVD0LssVyILv1kueIUcJzGQl29ikE1mZRF5QjesMSdMFiNqG5JINmmWZELWWVCWV0DOuZO3vCnHnizMzBtz6KaKlm2AmhcaHiS4/uq5PqBoXtyGNhGQ9UN1dJl1djsfHvNCvPAZm1+isMiv1kuYf4ppRchKXTNq+tKdPSpdaXIqpCd5Z4Cy2brTubL2ez9zP0Swe77dPFXPj0MDBGamfNQ7tWqAsvqgXIaysnVKfcYt2q+SqkD/5dcqikSlomXXAe4EnRa8T3PsE1bTFyXf+GqqUgOHysiO6pqbrawPr+wJHFxZkVFrr0nq/tiTsz86nblUTpMm9W3aIJFTtyvCbkO9rtUSniH2t47iEhsrEoyai+VIKuaaT9tqQSWBk1iedBUseD8YYGe0OAyvnXzg3F8H/pMtujxSfOofQA+WtTLmk2BmCoxYRv0vHoKd5u1XLuYbavZeTnXHbutLOjBuuXpU5+lPoPuGYi6Thl0t0vqpInbkB3xI3nqqOk8PeDIlfIVXRKrkzaeAzYgyDULItPTgHQnxIClVUC6WA4pq9J1Qr9MfdrAHiHGSYGXzU3FXpT40UOJKTZ89xAfrWXX3YfomWKe/YP6NntWIisUobXp3/p7KXtn5OuYOLvQjApl6VIMzhT1I758IHATw7Rsp1sBwafUklrqbr2YAuWC0dFZfeJPHNRVLDm+Xu/LECCdIvozT/1bnkV3NvPATYHYEwQLcEGrdeBRT9Vu4ca3dDEBXIcbgq6YDtajs4dN8Dvyggi1SHcekAc6+zJNti4XV0PG+0CpJdLfqUQDqUQN872dEtRInIwGQENoe+Kb0hkmJ8KjvZUGrghxxvMnwN5BopITirkKwa4/i7JEj7WB+MLpfdmEiL/1O1jF9I2VkKIzi8vmkvUi/3Yl22OO2N9npRK/unHw5zND2qhUqJ4qYC9nPMF03j0D1WOt4LNrkhc/TV1xtUeUgQLQKMbaQTwAQKQgoKpaziB6TFeZ9j0DQd+SJjOY+N8J/6fCQ3bCfyf8d8L/xxH+G3lb4T+b+kivT0cTcLK+v7wm16fvT6+vR2fP7XFV9plfE5UOEBWahb8bcA2v98mMpQMfdSRlMBfqNXUT0Okx0do16gYxKNElD2rN7DW7UnNfY16TNs4bZXXkMU/4bJGaEXghBNplldH2V1+/WMYJfZv+h7yfRUxdeXN9UfJjVj2PDeri1fHVdVuBhLynRQdAi9i8KIJeWxTBkr0gsABgpLIaSDpoRpJjq46kGVTzrMChisFJR2G9dc2uq5e7bnqb9MhOOugRWYtbdS97oSlKu7I3GljXG01GXC34b7ZaeuZEtjXM2OFJlmKBq0cxDcm1wHzWTctRDQ9Wnz8JXLKzTe1XTEUi//aEp3fK7OIWYi7AhAhA7sAG3a4QONvjLXW9893fUtj7CBnDC9fxHuJwEbeso8nk9BqjgtavqqhSd8y00xL3Z9qGmubdF1a9YNPEeyTMnwwBc8miZz3u5wnK2kZLmHw6u3mumCzE2K5TY3RN1s0NM2720ysgcsHQJXU4vSKdzIoqwa6uicTqGnGVTh/BtEXVmKvs5mck9rq7M/rFzaU+A0Su3fltzZNjrG0LpmoqVl8ktivFLCC66yO9j24hkHU67xTU1doc4wLQpqLtq+T2IDjbrslsFmOcRGg1q8LB/mS6yVfmf4H4aUXdlzGiWQGZRG5j9z4Bj0xMAmAqM/AFxZ26kTZfvQ7B2f4dUZT0YHNjQFvPmVf3js7o8vfIf1xgFOEgMw9tAowIkeT/7hwMOPVqMfVf72A2iTdDm84HuJowODlbEZAdErAKg3jT2YzJKXgi6diR5518be8I4p3Q2F0MNffQJMBRg8+99gxzfxZ9fa6J1xm/cReRDzr2QDMPbWpg9ZJ/GW7W9WLW74recnwnhIszMCc1fR8ijwG9R27jQ1PfIKkbe0en8ePiLh6U00Cr+r6qILkr6pD0bqzYPGgpjdTuyJKxL2sEtJpvndeA5fsppi6ZTxdxdEvnb9ALurzv1NMryg6qDHGj4+AGCcuOUuwdJDBnqrwb3dycXv9t3ZnfTMVaNbHNgd91yipvNFuB4cqqJ0umxQqFYrbUQNEasqXyaq5hQRSyZJe9Q++Oya9YBywiJ9OQ0fgCTBwCoCWd4UHWd0jcW+jGB4McyS2nRgZkRbZrjoryR8JaHmw6ICuaLVvny8ipZLB0GeudtjytKLLlq4HPaMVYSysitViKLZUPpK108CHoobvV3gqw1ZFB1dC/+qVwzKHWv0eWwOh+3kPlX5w7weThetYBkSgFzz97WtimyeiRWkJLE0tsnlpCN3/JYTkxvy7178CpMnVBsACAewcO/NvHby/xDhclwGxivhVuF5fvVekNK/QCzfHPiIdkwRRsIsLK0VaYh+ZnK8c1RbCp1FWM3KodYANCVWGIPxiLdE3H0wIAndUwBO+ErsuSYyAkrXqwF4wwhH8aT5aboN+plWO3ubX8PfNIsM9ziktNRZFxrQr+CpQoRM+giZ+beYhyZAhHQxVhVO5qGq2eRd4x6B2Dfg4GzdLwCDugjUPLGBTX/PSOR2/Do2lo+Ipv2OAYBBehbhim5NrUlkxqqXJgq6FhqY1qrGVhOK7oQM4xtYE4tFiYrS7QMIfzhBDqTeq5Da4Lqy1U3sxrzzp4XXfa8E4b7qwNG3J3Zqu1P7zjtdvwWsvHHIUeHufHNJuKZ8BvViCppqcGhkMhBKtRH9YNXa8w2xWO/szcVv/2uC3i/znp/suO0+5wh+fHHdAXVEuCZS6L/qKGB3ccdhsO6/l+YIa+I8m+FaI2SyXbVEzJUTUayIGsB6U3eW3WdioAPu82+54hB3TUcXId/XU7ZHaHzD4/hwSvbQsdlvkk+ndbH39ebokAW+aS7J35+Lv0hyqqSgPNpZIJoeSSrgWy5IWuCr/p1NV0T9HVBn+oYpoapuQoe7mYw5P4EFKBZdBhtmjHcM8uNaQ2r1srZmm3ZQ3+7az1gDY++OfwgLoU8CHFDSUA89Gc0WzJsUJZorYehNQINV8T85yIYaHQdok46mIknkrqlimjWeQ2k0O9yOXPTV2M18cp9+IyT5U68vP4ZnRGJuMPF5NniE8GKv08XUAgxAQ8h+vClDmS7hmpvJ7Z8SRpW6AoaoMFKnMzWgpW5u48bepI4s5gfiEICbjWYo9FFJMDgtT9llQDjif0YcEyEMM0qU232V1lmLjkon8zGkL3PlLsZvnDjZFVX6YYuaxYFvG7BVI1t6N2bactBKw0ml97jwbCPG2T/H675WAgbtG2OzTTYyyp0L7C1BU1aUjbOgOhfIqmHtj2loOCADpFtQ9suc+oni6O7fjs0wQUt3V6W8rjMDoiGUh5A3Wru/amKZ6leaCz+WHogzHsOJIjq1QKPGronm+YvtdwONDSLZVFKA3FC1cT8SQha6rsKG2RaqX7z6SerUY9pIpm9XPvBRBx4UD0RRi4qKOFluSiGh/4hmYZhg7ev0b3HoAM6oAnd1L+PiQWUl72dm+cVURd+Pc/CPjBJkBR9F0huAELwT15VNa3wBdCHfz74HGSXDDZJN21ACgF/5PkO2roeKZnGH6jK0pTdEVyBuML+ZHzdyCrSao2EYmcUxeVjeDF+IVt5uzid6Guw45d7OpG/unYhStTDVzVEL9pWrqke6orObZmSX4QWjqAI4EdNEI9tm7LkjkYuxiDtu5+cRN/OXNjgk9Hs6n/cmqFVsS739//98fb/9nxil2N2T+1aqH4qqXbniVRPY1ycSXPlxUpCKhjBbbuylrjwRhbN8G7MBiveHdFTqbuC3MI2/4hGYQiOzL8sytC/ZS2x+Aex+8DuVL10HQDxZZ8QwF+IAN8ZateIClU0RTXdaihej8GcsV2UQtyVbr/J0KuZMOXdcuH6Ejb10CMwG8eNX3JMEPb92VfC9Xwu0Wuysv+p0OudtLjaouTlH9m9VJVPDnUAkOyAtmS9FAPJTcA+MrXtMBXfVezW6IOvlfkqhe/WCmcPwxytWMXO3axGbvwZN2EOCRXMgC/knQV7BWXyuAJdYEWHVeTPYiMfR7kCqzRp4Cr+ukS6s4abUzQkCPbxqYJGmTrl5FsyEY5QcMowDi9c6wlMp3Tby8zw59Zn9DBB65T05RCT/cknVI8lEUDyTEsnYaabLmq9p3DVf20hyJAewdX7RhEPwaxaegqq48EdSRRbUZl+ki4f3iQFg1wZyeRv4R0n4uj/w+3B7On2wwCAA==", - "hash": "ZWZmYTE3ODJhZTY5MWYzZDk5YzhjOWQzMjVlYmRkYjU1NzRmN2M1Mg==" + "data": "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", + "hash": "YzE2YjMzMWQxOTBlOWI2NTFjYmFjMzgxZjhhMDU1ODgyYThlZWNiYw==" } } ] }, "request": { "method": "PUT", - "url": "DocumentReference/f4432786-c9f7-d4db-359b-4c9a8698ec81" + "url": "DocumentReference/f7263ae4-cade-b0d6-d229-8d792b5df57f" } } ] diff --git a/src/Microsoft.Health.Fhir.Liquid.Converter.FunctionalTests/TestData/Expected/Ccda/ReferralNote/sample-expected.json b/src/Microsoft.Health.Fhir.Liquid.Converter.FunctionalTests/TestData/Expected/Ccda/ReferralNote/sample-expected.json index 05e10a3c8..21badee3f 100644 --- a/src/Microsoft.Health.Fhir.Liquid.Converter.FunctionalTests/TestData/Expected/Ccda/ReferralNote/sample-expected.json +++ b/src/Microsoft.Health.Fhir.Liquid.Converter.FunctionalTests/TestData/Expected/Ccda/ReferralNote/sample-expected.json @@ -222,8 +222,7 @@ "url": "ombCategory", "valueCoding": { "code": "2106-3", - "display": "White", - "system": "urn:oid:2.16.840.1.113883.6.238" + "display": "White" } }, { @@ -239,8 +238,7 @@ "url": "ombCategory", "valueCoding": { "code": "2186-5", - "display": "Not Hispanic or Latino", - "system": "urn:oid:2.16.840.1.113883.6.238" + "display": "Not Hispanic or Latino" } }, { @@ -274,9 +272,7 @@ "language": { "coding": [ { - "system": "urn:ietf:bcp:47", - "code": "fr-CN", - "display": "fr-cn" + "system": "urn:ietf:bcp:47" } ] }, @@ -355,7 +351,7 @@ } ] }, - "date": "2021-05-13T09:15:23.18Z", + "date": "2021-07-02T05:38:49.975Z", "status": "current", "content": [ { diff --git a/src/Microsoft.Health.Fhir.Liquid.Converter.FunctionalTests/TestData/Expected/Ccda/TransferSummary/Transfer_Summary-expected.json b/src/Microsoft.Health.Fhir.Liquid.Converter.FunctionalTests/TestData/Expected/Ccda/TransferSummary/Transfer_Summary-expected.json index 693377c3c..fc16e7c86 100644 --- a/src/Microsoft.Health.Fhir.Liquid.Converter.FunctionalTests/TestData/Expected/Ccda/TransferSummary/Transfer_Summary-expected.json +++ b/src/Microsoft.Health.Fhir.Liquid.Converter.FunctionalTests/TestData/Expected/Ccda/TransferSummary/Transfer_Summary-expected.json @@ -3,10 +3,10 @@ "type": "batch", "entry": [ { - "fullUrl": "urn:uuid:3811c10a-7d4c-93ca-d3e1-780716407193", + "fullUrl": "urn:uuid:a736ac87-55c4-7eef-d329-6060bd8c3b23", "resource": { "resourceType": "Composition", - "id": "3811c10a-7d4c-93ca-d3e1-780716407193", + "id": "a736ac87-55c4-7eef-d329-6060bd8c3b23", "identifier": { "use": "official", "value": "04fc2b90-10e0-11e2-892e-0800200c9a66" @@ -36,7 +36,8 @@ "event": [ { "period": { - "start": "2013-06-01" + "start": "2013-06-01", + "end": "2013-08-15" } } ], @@ -217,7 +218,7 @@ "code": { "coding": [ { - "code": "C-CDAV2-DDN", + "code": "11535-2", "display": "Discharge diagnosis narritive", "system": "http://loinc.org" } @@ -494,7 +495,7 @@ }, "request": { "method": "PUT", - "url": "Composition/3811c10a-7d4c-93ca-d3e1-780716407193" + "url": "Composition/a736ac87-55c4-7eef-d329-6060bd8c3b23" } }, { @@ -624,7 +625,6 @@ ] }, { - "use": "SRCH", "family": "Everywoman", "given": [ "Eve" @@ -641,16 +641,14 @@ "url": "ombCategory", "valueCoding": { "code": "2106-3", - "display": "White", - "system": "urn:oid:2.16.840.1.113883.6.238" + "display": "White" } }, { "url": "ombCategory", "valueCoding": { "code": "2076-8", - "display": "Hawaiian or Other Pacific Islander", - "system": "urn:oid:2.16.840.1.113883.6.238" + "display": "Hawaiian or Other Pacific Islander" } }, { @@ -666,8 +664,7 @@ "url": "ombCategory", "valueCoding": { "code": "2186-5", - "display": "Not Hispanic or Latino", - "system": "urn:oid:2.16.840.1.113883.6.238" + "display": "Not Hispanic or Latino" } }, { @@ -702,8 +699,8 @@ "coding": [ { "system": "urn:ietf:bcp:47", - "code": "eng", - "display": "eng" + "code": "en", + "display": "English" } ] }, @@ -899,10 +896,10 @@ } }, { - "fullUrl": "urn:uuid:055ddf40-8945-8113-5454-eb0070939c37", + "fullUrl": "urn:uuid:4f4be2e3-e836-5ee4-bee6-93b4c1eb8982", "resource": { "resourceType": "AllergyIntolerance", - "id": "055ddf40-8945-8113-5454-eb0070939c37", + "id": "4f4be2e3-e836-5ee4-bee6-93b4c1eb8982", "identifier": [ { "system": "urn:ietf:rfc:3986", @@ -922,7 +919,7 @@ "substance": { "coding": [ { - "code": "70618", + "code": "7980", "display": "Penicillin", "system": "http://www.nlm.nih.gov/research/umls/rxnorm" } @@ -939,8 +936,7 @@ ] } ], - "onset": "2008-02-27T00:05:00+08:00", - "severity": "Nausea" + "onset": "2008-02-27T00:05:00+08:00" } ], "onsetDateTime": "1998-05-01", @@ -950,7 +946,7 @@ }, "request": { "method": "PUT", - "url": "AllergyIntolerance/055ddf40-8945-8113-5454-eb0070939c37" + "url": "AllergyIntolerance/4f4be2e3-e836-5ee4-bee6-93b4c1eb8982" } }, { @@ -1015,8 +1011,7 @@ } ] } - ], - "severity": "Wheezing" + ] }, { "substance": { @@ -1038,8 +1033,7 @@ } ] } - ], - "severity": "mild" + ] } ], "patient": { @@ -1062,7 +1056,6 @@ "value": "urn:uuid:cdbd33f0-6cde-11db-9fe1-0800200c9a66" } ], - "status": "active", "dosage": [ { "doseAndRate": [ @@ -1117,7 +1110,6 @@ "value": "urn:uuid:6c844c75-aa34-411c-b7bd-5e4a9f206e29" } ], - "status": "active", "dosage": [ { "doseAndRate": [ @@ -1644,7 +1636,6 @@ "value": "urn:uuid:122ed3ae-6d9e-43d0-bfa2-434ea34b1426" } ], - "status": "active", "code": { "coding": [ { @@ -1698,7 +1689,6 @@ ] } ], - "status": "active", "code": { "coding": [ { @@ -2230,8 +2220,8 @@ } ] }, - "priority": "ASAP", - "occuranceDateTime": "2013-03-11", + "priority": "asap", + "occurrenceDateTime": "2013-03-11", "requester": { "reference": "Practitioner/93bfea24-9f88-b634-edf5-9620349d8c55" } @@ -2298,17 +2288,6 @@ "display": "Ambulatory", "system": "urn:oid:2.16.840.1.113883.5.4" }, - "type": [ - { - "coding": [ - { - "code": "99241", - "display": "Office consultation - 15 minutes", - "system": "urn:oid:2.16.840.1.113883.6.12" - } - ] - } - ], "identifier": [ { "system": "urn:ietf:rfc:3986", @@ -2509,8 +2488,8 @@ "vaccineCode": { "coding": [ { - "code": "88", - "display": "Influenza virus vaccine", + "code": "141", + "display": "Influenza, seasonal, injectable", "system": "http://hl7.org/fhir/sid/cvx" } ] @@ -2549,8 +2528,8 @@ "vaccineCode": { "coding": [ { - "code": "88", - "display": "Influenza virus vaccine", + "code": "141", + "display": "Influenza, seasonal, injectable", "system": "http://hl7.org/fhir/sid/cvx" } ] @@ -2589,8 +2568,8 @@ "vaccineCode": { "coding": [ { - "code": "33", - "display": "Pneumococcal polysaccharide vaccine", + "code": "109", + "display": "Pneumococcal NOS", "system": "http://hl7.org/fhir/sid/cvx" } ] @@ -2638,7 +2617,7 @@ "vaccineCode": { "coding": [ { - "code": "103", + "code": "09", "display": "Tetanus and diphtheria toxoids - preservative free", "system": "http://hl7.org/fhir/sid/cvx" } @@ -2801,7 +2780,6 @@ ] } ], - "status": "aborted", "code": { "coding": [ { @@ -3812,7 +3790,6 @@ "value": "urn:uuid:3e676a50-7aac-11db-9fe1-0800200c9a66" } ], - "status": "completed", "relationship": { "coding": [ { @@ -3840,10 +3817,10 @@ } }, { - "fullUrl": "urn:uuid:72278b7e-c6b7-d99a-83f3-6c397689af7f", + "fullUrl": "urn:uuid:34180c23-046d-b0a0-cbf5-2c81dce8cce6", "resource": { "resourceType": "DocumentReference", - "id": "72278b7e-c6b7-d99a-83f3-6c397689af7f", + "id": "34180c23-046d-b0a0-cbf5-2c81dce8cce6", "type": { "coding": [ { @@ -3853,21 +3830,21 @@ } ] }, - "date": "2021-05-21T05:22:18.758Z", + "date": "2021-07-02T05:38:51.884Z", "status": "current", "content": [ { "attachment": { "contentType": "text/plain", - "data": "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", - "hash": "MmYwYTBlNmRlOTIyMTYwODIxNWE0MTkyNTExNjU2MTY4MWEyODE2Mg==" + "data": "H4sIAAAAAAAACuy9CXfbSJYm+lfiqade29OGhB2Ex6k5NCVbrNKWpOTMfHPm1MESFNGmCBZA2qn69e/ewEIADKwkJTlNznSWTGKJ5cZdvrt9+N9/Ps7INxqEnj//5Ug6Fo8InTu+680ffjm6v/sk9I5IuLTmrjXz5/SXoycaHv3v0w94mxAun2Y0nFK6JMunBfy4pH8uT/4MZ0dkGtDJL0eDs/4x/hNu+H8Egdx5yxl9T+LPXWDNwwkNyHj1+GgFT+STN6Nz6zG+YiDA3f8cyf9MrvtnfN0xjngQUGtJXWI/4dWX1hyGaJGBPw9XsyWMnXwO/NXiHbm8HBDyPy6tcDmYWvMH6p7Bbe+JLEqqIEmCJBNZeS9r70WTCKImiuTNb9R9R+D7a/8bu+wt+R/whv/Z8UPOvNCZWd4jDd6Tu6kXktB6XMwomcBkiePDuL15SAK6CGhI4V9L7xslrrW0CJ3RR/gmJEt//TuxNtbtGJZyGj/QpQvPgVss+KezhC21ZsSZWoHlLGnwnyGZUmu2nLLnH5P+/AkeHNJHe2bNHYrvseALuGUB9ODPCYzW8b2547k4shm+yCfebLYKlwEsI7FC8mjBQ/LDhW8Xfhh69oy+I0sYmTPz5p4Djw0d2N/A8+GuJzL3l8SmZDGzVuzaeBrsWd4cbiysFfwTb/HmSzp3YedzqxKNGhYPR/AOxu/jfX6wfjf9hj+xl6wfDH+5NPQe5tHzYDirEP6E18PO/PdqzpaQfPdgyXAijCTJIHnktb+kIRnik3DmFrv48wpW67g7vQjC6YfkDWe+s8InE6D4efj+z9D75Wi6XC7en5x8//79+Lty7AcPJ7IoSie/X12OnSl9tAQgJzgLDj2K7vrlaBXM309nhgDXvv+mHJH4aY5rbf4W/RS6Syf/G35zdEoIO8YwSlyHC2q5QIXRmOEn3IPHge8iWbvADO7HR+QEf0DeMHRJ4PvLX47kY0k/7qnisXQsSUqvp8Af8GJgHHQe8aDbm8HZPy/ORPioYvwIfO0QqdCbeLDmbrIwQGuwUxM/ADoEJuST+zEZ4TiS0b35Ir8ldxT2CAk2Gugy/mfVmMRjGf4//HAs5QbHGIeoC6KZGdkGJ0s3rtMLlfjRXnK5qE4c2TZFQRIp/EeistAzZSqIPVGE3XdMS9fje5xk/cdPIbyW9yodp7S+5Bo47i9HlzfD60H0NUiBnqFLggGkQojrhTD2p+iq28D/BuQdkPt5uKAOboa7Mftk15HZnxZ//HASfQ8X0MmEwgH7Ru+AO5Jv1mxF2foqoilLyIvZ/NJ5zSeMDXnWzFs+Zcjs+qhmvtqxrMVPAT73sLIeaOZ2On+IfwzpEjYos9fh3Z3ZA/FXumcmPNvED/wZPySWpNerRxsmHU9Kin8MqOMH7p0VPNAl/Bu+iVnWyGdLwr7ycmNQVVVmn/JhqMfx89ntSI/nf0bsbew7sFxkTJ1VAItG4lEBvwUBiQwNxMIKLxhfk5vh2XFEruwxluvihTD4i1s8+JmnX9wi3zxaBB6j9an/CLxmEviPmX0gvG2QJMlcvwJXfBmA7tCHV9EwvPTm9BRnSi7giWTMfvtwsnlNersDczr9SC1Y86U//3DC/p15OJy405sRPgL/Sn8A4QTCDEng1DR6uvHhJPPN+uH+ar4Mnk7vx/Dg+O/cMgCnwWW4n3uoh4zxHWG8DsPxDVEkXRck0EjYrfC/IGjeE9CvjvGXYymz1ie42Mk/liBHHXhGTDrwz/f/Jb3RNO0t/J8Apx24Q7Iv+V0v35eLS4PEK3gf0gZ7k9BlfsaRlhGES4JaWiLw11I4JN+nFnBhuCy+Hwf0de5/nyOjzu48ewCbxuWauuD7B2AH89Pzb/TDSfRn5rdkCEdjmDnOdLzw4RGZObJjHRPgObCKJWNbt1aw/BXIHLlVwJ28qmQHB6+aWI/e7In8K7nrF3wnkNoStKipNZt8OImuWE/oBGe0uVwh7OXcLV0vCzSaKQyK/W6FIZ5XpKZU40jWkb9249Hgov3yfRxFy/fRC5bT51k9eCWOKnj67oOgrl09y30EBYgpmTCLz6jvBRmW/ekoL5U+gdozo/ViANhk+inKvz7nlevzFS8f2g7EnxAbV47MKeyUP4eZohoLvN2DswUqCO6bCwpuds/YHVk5J5mqBjIuw7nhKji3HjAi5CWrMDPhq8KEr6wgAMnbQPBVzPiq+LLcUAI68x48OF/9CWjfQJUgjTIjkkBMFwY1mAawfp41J2/m/lwYWMupP/Ocd6C1z4VYW3DecgdUsl2iAVpNcdhIqaNkcCQzuo3dGpwNyMgCuwaMV3K+nIJKjUKQaUgg69fGF27YBM0uJIHH1SMJkrtoehfv4wA5PPiwE2hFTEA0oTlKbq4+ojQAgzlw80wPH5tZQ1BydKG4ir9NQZzUbax+LCu9iq1ls/5/QQf4X5l5swXZWCTkCOm4Ur0D+QOj7MgcmqwvgR8YBbt5QQ7mwfvi9GD7EDzITe/C+m55SCNgmt0w1ndrMcIgwxCUM3boGhJIvAgd5x7tLAMJclvS0wWtMGYw88gFfGHBDTjuSyC3uf9MewTqauDCgmX5a6rjo630W//urjDgW/87LCzwqf5y6Qdz+lQ3VvwDVNieAto2qRgyDRcAsKCxjlIhVvTTYfFVxh0oevXKXqXC11zpq1X8CspaM4UNqICtylVuZzN7e8vQlvwocgIxuZ6J9I/AccJN+b6+Iit4B6BeffRLro6lcIVaE824MBZ4Gn/g6x8Kgg9I08k9ofhFTD3FAW6SBJhDahuyaUI4NaTThnhqyYdHQCf51fhwwlmzjOX6+LhCcAhFXvYpVaZtjuNHXwMfRytFV0xBJtZsMbUEJRKNAKaQo/P5w8wLQTvMa3aPcEHmBeeoiedYz/mfqNui0ABW8ZWCUK6T8no1z7mMp9W3Qc4vn64KegpuTuCD/AAt2Xm6BJBvlhnf58LoPvt+A6VJl9qM6Hb9es5i30b6OyCvsC4AgwSwMslOFdY2ugCeQ4egeSTcJFjl9bKTKkIAUsrZbbg2DK+5CR5Aev07TzQFpEGWzI+/V6EMMcQU38yYAmoPgHWBlAnvfAA1mECfPoWwICDjmXQt6vYJu2Qs8TegnwzfJBnGCfhPjP3ENxaPzebBl0TRQNwPEe6zADheNXeIOMOtHyxR89hgDBVMIccQTElWShhCNYiQM/tPSrcq3dQYJPpwUoCRUj3OWoHKHWTtS2ZCRlj+96lP4ndE36P6y0z0eWSx5CHL+FkI3eKkwEC6v4uEeis0E7CpBBpjkGAB6DNQ44h/BPOXAfF99mY+GgaEEX8aEmpWVwKF9Nc+2Fza7wW20HfBZ0SuqAtkO2+gfIPxk3KIDfOEkZ9jBZSkYOmd9ac/9x+fyJuL4W2//zYzvBxR80ka5N36mYysST0qVkLVzUCxUoquoGc+iMU75JkzjrPLLkZMAUW1oqh/RMoMsNYA+QwH6uCqQXD98olzcazy3EawGUcF+hCuwMr8M/u8/uDo9Or47BiWkf3GRzJgTTZntP4yJXT4Kv0zOcvoBgMQBgQCHMIYQ0fhkT25TuoDjcDc6MiCg8znnejME/MHLsJ6+AdOURSDfZqetwYEbWwQ9F+HnjWxMz2fz8D7XU6fbOuqkbMaekv3+cNJnhZSovNST1oOo3wiob8KHJAbYFPG1zBfJ6qKKZUlVBlRW/qo5rTWSz7VHpcDsaXMU+lMbBdW4M/ccmq78BYL30Enf9icI54d32zHETMUmqWfIjEBNol8L7oaPPxwe6Sj3I7GCfDAaDr9icAvOZpOtSIE2qO/wQ/GHgy0GE69xQYGn/WOZbSK8e24oE6Mb2/ux+cNMRdNR488X5e4TcY1yo4L1UByB3oZ+YJMCLx7ywwZxGvTjApGfkgrOA4C9rVwPaqjxVem35VtaMJwHIgkgVAjsBUKSquf0YJZAAtE7kQ78giQLcK2iQsT0JAHDxcp4lFFqZe+Ic+HBrmv2brF78/81sRqUmRp0NZqQjM0sVMuhudtLKS88pRq1gX8DW6qtZTMdmrlazOXGu3XmrNk9xuenf1XQfjhzSNwViyY361AlmnwUZBeASKRo2zxHhYNKXlE/uuqWyoO8Bgiu8oP8BidLsCh/013q9VWjBRDHCgMx+WfnSJo0F8AjlyJGDBrl/9EHMjmWpYOL93oGX2wZqh8YzQJ4CebJrM3dz0w3TA0As1mwMqCNfTNtB7Olm8+tsToNSVNlhVd0jLxLbgfQKjgiguyAFscQdVQgTpYxwfr+C9jHWdUB+7JyqFeTU4yTJCCfxrVhsg+thwIi7Kcp6JVUwDE1nhY9cGW8WBLopINWzsc6wPodQC9So518UhFQRsYlOGAThDZZ9HhQy0BmBl44KNEg8jaG/QvLz8O/nHEO40AxCiyKcuqKkksrj8rSOMoq037sT8eDz9fn58d8eUrC/WETyfsOf783hBezgPUs5kPVugU4g+iiIEbuDv5JtWewnYwnNwFV+7P56Qf2H7AB+KuhjXRlpqxPyCOeY0iw0jOAyPxhjeERugcBV2pUo2JBOVy8PTspoHY2xxQ9uvMGclQ/mnepQgB1QDRgPachMVHnsDKEzO8jkn7wyTObcjomqpoaKrCEPlCzHcUTzoAOgnqqdeEE8BFM8bXN1fnZ8LgLj2K7LzDU3GpgwRdqTygg/7o/PPwyzmEE26esau7iwYxgJLU5pgYEPP3PSQj9/jHORtZh6r0X2u8QJbgWKQHp8P5QA81kPVVEMJqxP/YOD4QVricVhilf/fnHExxd0ckUdvYabiZZKj/7Ab00mhDaPDNcygAXIhbZ/DDwe2asnLpCeuBzvzvOWtOL8RwTr2Hae6CnpSFrE94j/0ACCTqn+jrSYd7O/qUCbznHFgYbT29I5q+gSsmK4YP/BQ/OBPzUHr8U5dmDl5KELg7EJWn3Ms/nOSuWW96dlYZIItn6+7C3n0Wj/D2XmF+PNROvMMNgLxKKK85mFcD5xWYV3evcY5i2kXSldvIre3kZrZyW3u5JPyudLZZFJsLwNWF/QBJ5/5fRo8qBbD9cIFx5BvjbL6hxVCfFvGAmRPQJOSnEfnXHIA2R6D2EPCOQRbb5sOom9ZU9HUqRprLlefktaNrQEfQAsqHV9PFFJyR/oMXLn8sTtuM0ZaphRlCu+q/Vk6LIew74LQjn2dSlXPZEQVd4cBlt+eyJL+bOYchn/hLyF/RO7HZSuqvof8fhtHC4DMGBTNKClZIYrt3rgoQfTDr/qPvPnV+TuwT9x/BmZV6JGEnVw46nlx8djJHHG7DT9fRAH53Pvo8PB+T/vUZGV7f3cC/+9cD+GJ8Prgb3lyTN+fXdyO8YnT+6/1wdH72lnyRt5p9TCvZFYhWAa2yvDYV7xgB+I0GD5jmhTlhQ4ivg39jiYUQ8zvXJSLgeSwZLKD/WnkYrIc354O828TOylGmfkXxgQztr2GcnqFrAihuDYoA5J4R5eXn96R/BljL+BxWv8/2Y7xO389MKWPSRd9Y6CaFMw/ClyW/f/fc5RSTBsW/5ROD8OIptdzCl/h1kSvFF5+OV3ZU3wKGMi25ZkQBQoYV414CX25wvBPeKD4s7fV5qB/a5iTY90lY3PDsl6MwGbsEhgTFnK/ZzMOUlOga3mNPuM9t9LYgXgV42bUFwsFq/SLOUu1m/vLRKbJwkBr7njy86bcppf8Gv98upg9fbRAFfIcEn5MshUPxAVnDUxaLGg2/FHLk0OuR9UUgUPoIKkD0z/Mv1xtHJ67FErEnTGyFlQ3mWNQhLcqSX7dWgfsYmt+A97Anp5VKFJ0q1AQfqGGzAkuuLZgTKnEqlRR2LuVfg5ukDklljg7nIWnO/Tp9uuANZhnb4P1FOvDmEDsHkdXO17QYRryOmwsXPRnCQDAtdkL8+YOPNyULHvuTkwwOzgMyQ4pmicT5rZDJVIE6bswxRSHz1RdAk87O5LsVxgUbopSRqLRRJqbxP0MWXJerL5B71yCeIj4p0WlY1ju5sp6I9I5Iptnj3p3BSfEazHWXJDUf85K5nIuLpr+WZ6PkLuucmbIx73FUkCGdf250Jzg33pyzPsgGky5LesldUWKGt7DCnxX53J1dHg96M12i8DP3a8Zvc2Gza9oZ33/8O4d4fBu1+DjidM2Hbz6Oa/gwjxdnH8bjxR3I1WjMjvMsWbVcRwLm244lFwkGXOPnI1QB63lzAZwtVxTTX9LMx+Tw/EfMwXDTCnpqqYzNbcVNZv3L5UH0SxLCiXITuTu7Ffk7f9c2eDkaEzMKbLFkoNUsvZStT8Cqj8fpxnVHgJRpGnFaKq4yz/xoYSourEFSRyZ8elws/UcskQcLAezcjR8Kkq2Go5dxdf6sM5Nae8TWs+KKqqhSUFSHD0bnzyDqk7xBm+s7KMrkgc7B7JpF9VYs2KX58m3JHlVKE3ZFNJ4/Q+99VLlycJYUP1MlE6YmisZmEAYbKYwv1WNrWF+5h5zvHCdr53gnAbg7IdhNnDUTaTwnBH4U+HQQaxzR9o8+crbf+RvYXabtUq41kG3xJaU/lURFja9KCCNzPcshyQi5q/71Pf8uvA9WENjhZjTG1VW/hAiLe2IA8RTDSlL7t35D0Ild+tmoUvLnNUBzFbRykptQyc4UFou7NfnIg43fq3SQq09jOOrePC4XOJy7ca4/fzhb6SZZ/SRBRhopKB3YidlKSWmtqKgVz9mpslKtsJQoLWvApYL4Kh7aWrVoqF5sxq3AksqyDv+t5uWcgBZ2Zw+CnevurJfBdXJYlrWeweRwE4ma9ykyvKtq0ersg8ZnczfnM3tGMcKQletsekbTm39LtKr0EVk9GFS8TIlBFxBqZwnKFIOuLYCNYv3GW64rRnv/jotFxD8elw+g7tNmbNGQ1swqd2VxeOvrjmuWqB0r67VmZRupoedfiqmhnLk34lEVn41Khs6yWM1vR6ym5sDKmqaLKgu+zVcr9GZui7jRZrOsUZjjwZ5kjlA5nyrygtMuz2rynKpn1N+/I6a1G6CjFZN6dczp5ZjRXpnQ8zGfVkynC/ITxoNtjf60hmfKGZpiSKYMDM0sMjT4lfU/QCgAx/lMOMA27AMMSSfnkYqu/xl9VDZENYma7QoytXVBteyeYJmTiaAaiqPrmmIaEkd1PPio1oRy8FEdfFSFo3XwUR18VN19VKYIaI846QmmAoGKqmGqQk9yXGHimppEJ6JhSsZr9lFtxMnHNx18VNU+KgSl5qvZ7NPM+uZDrNj99T8O7qSfwZ0ErAH/n4Q1Ew7upIM7qZ07SdaNojspDic8+JIOviQWh9hzdMWlliBZqiKok54qWLYhCdJk4orqRLck1/0hfEklmsXL+5Iaiu0dOIIAVZZ6m3UJkrDeraDlDrDywXd08B393L6jSl5Ww88SXLeCr9Xytn05sHRD0TfjvhK09+DC2rnvfHdxLa195q/OJfVKHOV7d5I/L5NrzeBaK2oFf9Xz6msv4IxvrTG9tOO8zvOF2bvZ1E9ME8tnh/JyYTvnvJ59wQxXcjYcYYrrl/Mx+SJvl8/bJaPV/cY6vp8xpgaa+b4zWeW6PtrcVFZZUXvYIbFjKuvGUr989mq64BXZq2c0dAJvUZrAGl31BdhNUvSt4rK4ShymMyRNyd+Eb585MXZEw1XoeFE2fJx1sU1yZ/9MOjo988ncx8y25Nldc0nPgmOSlAIicfGed+QTtYlkviNAqFLbsUJQ89eL5eOMTEFeYE4VO23p3h/bmmiDS0M8XriTo9PkMLpr2kge8FKZqvm74mL8ENmeLcV3eT++Ox818/9zOA6JKy5gbZqYlWwdDiBhr8Vyx7810antTmTBNU0dAoypLFgaeP8nsuKYkkUdUeOlZGY5kgZBAoLeiCNt9I27GWJm68bj2wj+GLjfV+bjRqnyHhC/rGybvxiPSHQmkjqxBVvXHEF1eg6svuoKtug4Vk9RHann1Pv4JF35LSmkmlNsRhQLCIFy5gI0FYSvIHWxulpOVdWc9LeoYs41zodfDSe9Mq41dg3B2sjsrRmv5n/ujrjW2OiaW3YsvWyz4EzyQ+3kysqR5Uy90ecS23BNODVtgAr3talQlkylSd20LbJRN5WzHWedbjLX3eefqr2uzn1bUx3gsIIEAIugmo4hWHRiwsFXDOoaMnXlBs59Q5ONXsO6Jg1Z797SOfM1QiVRrvCKsvSKLJh+3S8LJtgiqVERVVlTRLGYKLGpRHUOZaxwND+zZ7lebrVLVNxWfr2ADNt1qmIzWVYnz9rJtG5yrYVsY5eWCYXox0aT3krObSPrOsq7djJvb5mqX7KFKKvOMyYFVpz++lTNfR3kvVfR2MMxrk9+bXSK4/LfYDtzSoFvXJ1Uxk0L7tYf4bhEb1JLt5pR1JD6MyX8liVk37VPyO5/vi6NheHVbNx1kdxW5XIbF87tVtmxRY3HimqPuR87V5rOz+FwlPZ1lNZ+lvVBGp1/SqvzFy4P6QJ9tAhugcsx2c2JNUMdqkRsoC0TzK1ZAovWyo0EtROMCQgPdaI6gm1TVZAMMGP0nmPbk0xD1o3nINBGHkEkWNi8E9CoxWIW47cnDAfk35dbjHhi1YBiFwcUGBf1y4E6QzySlh4avgGMbQFiDHB7/0xXfwyEd43HV+fXd2nN0Y5Pys6srV+mnTOlWJM51Ui6mcVxlJXUA2dLMaxyvTx8F0v6cyPXygysG4L/iU4Ac7GAnb0B2MIIT8Ecnn8lC8ubg4bBvuFddQu/Y30jl9IFXDyLelpgiSSwwUExsi3na9X9N+DfAFh7Gvhzz4GpWw9zP0RfeYh2Mdhhlu1/o++IswqA7tH9HzIuw3smwvZh3tOYW4LmjsaOFPg/z68HN/fXgMpXFtDt+vT9EjX8p6GHEBfpfM7EP1hlECYROS7BjSqsHZaJBzPvtMxC+bqsikKuO0rbg5P55A7NBZCBH7C+gjQdJ/f8rDfs5V2T6ZJWeBNvk7rXFddc+rVOyTPmrHtdtXnT6TNn8mBKna/CavGODOdJ7TRmzlkz8psVuBUewf4j6MkW6ccG8zvyOapbtm7UVnFz1o4fgBfQcyouBhdlsMJmO5LM/JTKK6himxJ81poBMq/zE7bEopvXGcqzCwIBQN43DzY0ZAxjw+G4RgksHR4LRoDpSpKgKiYVTNlWBM01e5I2magu5TkbMxzGNGW12MnvBsAo0OOA8EJACOKObUTSyKM3Xy1puMlrBrcgegufWpaVg8khUiBaJpVXDCLbmIlR/WpBzv8E83weneLNiKf8Sdl4Ir/X03qjA2seRqE6SYT91cdGIV55xeTRXsFTgM0eNYBMLg3c+HTg/BAwlMebbQVyoHumDhKgzKyh2sZTik1YMj+VNlvJkl+dI0QzRQ1g7ZxY6pQZxvnklniDb5Vh/GWGNheKkDshEfWtVGq77ZXDD6Jp1sIPDaGHUtghhRwa5U3syHEciaJmnuNEXlVic/vwBp92QcSPsQ/rsaSYpfjMJi6eyNPSdWu3RzHlN9zQDi5mLpfYbPJUAz9eJl0Pm0KP4zPuLa1ltFKWFM3qa0cNU8gZnWHzzyeSaI0VwUAbbjRRF5tEB8oaqAWkmZRYg+vxCJNxFcTPWit8jLXC76AV7oJBNus4ml8TJJOP6Pr9SGezBryxpN1OfFGGE4qyovdeG28srUd6e8ml2w68oM5lUIdxVuGbjP4BpUwa9oZzb7HACsygzAJtW7GdwX6LtVVeT4KqLIzR+IYTL7JlrElLd327SqBsUa4BcSHLqQXsizVbACse+4KFSXcFME8eswkeJ3AFn0uk0sO1DUXVVUOYOKYpqDJgtlZPVwWDKo5r9WRqiMqzFJbYZVkqWTE5+ZAfAcNypmDa5IyINvEa20XZp5bf9lhu/OkKVH3qXw0v/yAXw/HdzegP8kV6LsQrCXb9xDQoMo1xoCS0ftsgemwk3DKEHhzLmtEwYJWDT+VXshFGBYzPegisxfT0k8XA1TcudSjWoYeo8/WPzxlyz0BdL6wApPoPlPSX5AZL4T8zMHX1BBpGAMjzDITCxAoiUnnjYAVbRBBdCsv4tgIFwrbh2/duglWygRtVheWr4ivAl9ax6HmJxQtN5wnezdO5fuIOCtKpzY5oQUipMrUnhihoTs+MCl/bokshek3TKpomtQocD1f2fwMb2ty9ADk6dcfR7zl1ajTmKgIZ9vLp7qIghaJDv4k7RIueFR+oNqEfqEPAoQZ/SGWxQxv4kmmqhoiZAXlx6bGes6i6T0rGHGElJYE5nUMieShT5RZFP7pL530To9jEps0ZEmTfwafCiAWsD84C+M/BFAPQB5hwhqiu6mQH/oHiI59mCIF6pW+0vWA5zcJpEriuK+s+ISAJpE1inoiLsZ4jaIpzZ7bC7lY2xdBbcAnCUUAndsH/U3hqtKiJeMoEDrCMZRhO/oL8iHUDryhpP1J62k7yx+202Y17DyAvssQ9RI/rHaPHy5ljm/ZFuqoZCNpuVA0CO6yYY9wEKO18+rcLN8+RX1u7QZZltBv0zum/+RO+1lu8VG8pm0OFrTro33PFzLakXUHeTKXaVwcMtWRj8lSt98zexKKMqq1WVL2n+kQ7Tj9XJUTVWenkJsSWz0kArXqfyeSvtIQF2iB7okmlqiNJNiZC1SAMiOlKrXcta0Ltm85uf00jNjU4bqu5h9mdL1eAoEw8/8xyW7MnVKEO43D2QW4nclsrUXSreKkqaurO5HZi6IPjYjbzsP0hvo+UOWsOnPKvwilV8dVyyp0GAm8DHN9fs6jJ/iUZ3/Xv7rE2y3Nhxy2hYLV5rOSn1Zy9DTT1cdTwNAmZTH2tX+TyOElDlYGJbxMnmQeIiqPhA8/FnXj5+MjMwAewZg8gcCsQ5fPEbAN3bgSrll2JxVFmgFQArnGOR7U8eHIHIDQLdcTF5cJnLKhwPU0ICQG/M+IoFajwFZh+UyJJFRGI0YWgSNMFokvgNP/NmmHb9V0A1/2zy5Mh/Oc9+QhWXdlDC2NtPtQfsNzK5nlfl1opHPQOCiHapa0RbsuwHQjXkAXwvaIb1oLIa0VxBUpdXbNdUTIc3v0ZNuRqG5XiZhNhAIEaTQJA1E3eNBx82k0xlmfqSr+R426I+qG3/Ev0lt+rUcc5vJlnco5vBxJD7LCTTWfrCkRPKLrgTLBfkqpLgFpJPUEVbUvr2VbPLg36ygawqpoMnKBcL4gOYSONg/NpU/yjTbuPSGruuxtZSbgxnHcFXF5tTUdJ12RVEzHGJbfYJCuMv0fC+OfpZd6IfXbuZa4ln930Mv+xCgxsWSii0lFwc3Vblv67WiwABssGsd5e/tEUf21HZAjgtC15GwW3zQUWK4qpESQesZXE96WWWGw9VkC/ayewKimGoTiCrBgyKFUQ4GbbVBc0W5zooq6rwKB3jS/k2dOa5Qy/XP7zrsSPw+kiXcXOWvQMgOjAKAg0eXBVsj43Ovp2dFYx6Ioo6av+9X1lM+eWCH2F1yglITiN7sphkaJLVu+rOlZ6k2LAlLcoVURBlhwNCyCC/J44ckOvU7QkUVzsGcXg6IoL83ysZwCG2ThnpfKTY4OONafvwJ/HYsnfLFiiCpwunznRK6qg5GJ8a+fyIXT8RX3NlPxaU9tUdBGrBdiSwetmb+uVdX0Y3tXovU0KLmxcV8K9I770F3KSoJkIeA3Iskzm35vr89/e7kKTlmRODmCeDhzd1ixRtQXZnqiCaroSmr66AGq0pfQkxZ2IJXhsPlsZsGbBJMUgpgjyeGVF8fJZcl30VsWQJF65uoza2pmV/Mjqau+grr4adfU1ODrw08QZ8fn8+nyU8WpIje7aYxmTYk27fMy6DGJT2ZnHIT95rrshf0nLOPf+jAZLYkH4IAQePmCSUbjwAm8ZviPgncfOIZjHFYbH/Pj3zlVC2hAAd3tLPknexM0nctsf35Hh5eX1+Zj1KSj77GIIey4v0sxsSwIrMiU8bq1wSYaz2Ry2MFtsZCOZYydleODCqAxPaXER/u5wybp4Lci54aB/eTK+H33GP5KbWxL8cM6q4r+L8rLiPEj654IG8JeDRXOwnAHITKB7/yso6N+nHvhdWEqDy4wWP8CyFfjEGajs4PuaE0wVmdHJMk9YmBJ3TMbwnu8WhCz44L/2sbwLnLRpXOaSTFA6TwMK11D6NWQnMaCODwFc1I1unsLNNsW+OhZCXZisCSGL8JAQQocx5wx+yn3YaQ7ZpBwsA4SVQrw5aCtJhwxn5kMscjwgeGTJ4c6tWzKSqeVGQRfDIZYcYuEY78jC9wMEMeBNgT+bwUtxYo/W/Ik8USsIYSbJYJNCRR7chuv21XPn9Ck/g0mMp8J6gGTEIxX4jx5uAM4thIfA/BawQkBcMBUYkY+GFARQo8lBcDMX8GxY3zldBT5s87TYzsh3IOwaz1OTyd999+P9WQQe7pgfZfnFlZXW24nx6CCU/fk7Nkrcd2sW+mlxprjrUe4zhdUE1x7YPlg+F/7n0bOinV+/AdY23v1LD94UDQGW14JwDBzJvtjzPlh19mCPzsdYvSzh0q+RM0vHjPWhznssmYqBf2vwHX5fCErdERcVJV3FYuFNuGh+AWsZaf7ylqyT3LHMVmzGpfcEPNeCDyoCMEhAcb77QI7wNx4URKnwhFBCH2nwAHz1CRfzMSL+cOWCDQTMCEKIWEIEdp+i+Z1nzHTCqqjhiWf/jIqiAWzmBoiDWbYLPAHxSKyzttFY7CHwQeRN6SMYgwEeqLsMv0cmZoHVlH8pSM05y9WdeICXRXw/nMJbXTL3CQAtMGzgYTBkOJLwXkBrnNXMW7N45ncJYuYHfIfl6OTfQdMoiSZ8h7VTC5H3Y6W4VQDvxhI8eeGVsHfGBacWRG0wzS2zhNECzdk0XA8fAQA8sJTc55vvuSgLyD2IhFi0xbOX/gvZJYL29gxUxGPwwCwDeNHcBxff4gnYLgz3kS2Bi0sYLZ1LQcKw1BwmVWH7hBlCVvnXPlqzwMd8fjhvWCc7lgdsv4Aq8JncxWcrDMInWG8Efjd9cgMYwmIK2w9skU2mQFvO0xJ35il6Nn1gqUOxvJqBPYXE5UB8YZinmXAFFtO/VhEzTgkoGkwIWF4sWlECgtJVkDbs5MSr+R2TxK3FAs5PtGc2xZZ860QEnCT26AuohX/iXke0v0AcN/kGtzdZqyE6wsICNa8eHlCiwCvYC+OhXo2G+EK2TzjnySpgma4uncFKpRUImXiL09YTNQSnnN2jeJ9zH6bprLfUXkUj8/Ed30GCw2YG8Ht+aZGlgOBcMkKJE+gZiIADTNCb+gNFfiAhOIDTHOWDMXwvUc1/ONNEbxjLtxPJCAE4PfS9lwrGRA2LV/faCqLEQL5cLFwd78VBKO5GKO74MO7gJFzcjG+Hd2A5ng3Hg4v+6DO21+t/vr4ZD9c1RwtAwS5O4DanEWd/5oXYDBVU/fHqESvKp10SMj+llQLIXeJYgxO8VdvDtkcbAQBN0VB1LUTtJ4NMTT8yh6PpRUezXaRMA09A8XxzFqnskB//I5JsV7EIY2Ilvd8l/dXDChCVdcBofUQkuMlzxfERq6+Pg6zcYaBRcKsBHWwbD6koHeIhNcvoqbIuCnpP0wV1ooBvR4f/9ETH0CRrMpEndnU8ZEomOylfuykGKs55k7BJFtjAq7FY7dcvdE6KGvmYolji9qgOE2iduxLVi9+HF/J2s3gRUmBNrbOWmVodg/os8E+bko2JWobUOVFLFU2tpzfOUipkYeM8PfTpbR2lF+vb8vMG6vFHVyRmbr3QrVt7qXA+YKvE3aSHxcw7sT/Kc7pforNXTdxQp3C9f9zC2kkQftOtAVOXZixKWoUO7ZaOHVma1EJtXA+1W92/F2rJojxbk7J1TdSmfcqSiqs1/Y227zq2P8/1c3VT34FVMLy6ur8e/n99tDoyLQ+K3cvfFiyS12CQDB8fV0kN2Lrm61tZIB36rsNTdHO7LscNWiN42RXgWh+57W2EKWQL+rPnIyhUZBf7TRP8YjkYkt2l+0H0c5T2UXUB+lnB/Fs92iWNGF6wjQKsuhcJ6OF8Agx8/m8L/HjUAj5mzd7BiSUVeXfX/jcimViNu/SSQaKWVT3mpL+LzMJGc5W7zvWMOjjX3g8010jw3oI/+NF3wJuBfiMfvBxA8WBeY/HabxHx/wXnHrkp7ygEXoPDBh1BLvjHEZL3LHBA/Amen7Bu2jBlo+LnEZ1ggMT+J3xB0WuwBBTkY1Ufk9VDDNLIW+6TUtIv5XkrR6LziYXN9zMF7/IW/fhj/+yqaNPH/q0qjCCJGsoK9XVuxw7KSmpyB5CJ6hPJtlRFcETqCqptYgS6JAsTVdHcnuX2JiavfwXXQuZY2ky+cmwxro3dLrG2pOaZafJsvw+Bv1rSzJMHck/Sa1MNlGMZwxA206KKGs21lWb9w/QD4PUhHB54JYSRD4Zv0QsXWqsAExYLscpAYY+rEKB8KwCkCVMSuOb0BxeiWn4tpLJoabWO1QMXCZyHq8fCsYh/AxNkNQHqA9+um6SMNMhc4RJxVN2e/QnOVfQ77rK4kNYSs8rO7AreArx3dlqbe9KgRgt2CChsXizQyTcPtjYRbLW1QGNA68vvpdlmue44JXpDTQ+d0kqn0ka/Ie4LIlpE4jniDp3/PtJoFcvirEuKnjKUbHnNVFk2V+nDSf4L3sMa0kGWXoL6liPMJI+RmcsxiW00Hw68c1zRKaDxS/Ljjk/mBvMsPdlbNxaq76eiaoXiDmZP6qEP69D359D359D355X2/XnhMiQKN32+HosvS5vvkjf/rDnzu0tAatk6Le3i7qR+A9KuSVCDNu6NWri3b9++sx5BnVu276in2q0F6CxEydZ0VWM/YqTtzJt4CDMOLo/w3uVTs3Zst4GHYSo1ngQwaiEU9c/se/qDo9Or4zPsHsV+23Eft441c3bliq+OBBle31VaNhhKCzoXg9x3ZMI0zCviwuyGJKoq82e1dplnwXNCQZGsctW28Z/nUfNbCAD3ECwHK0KYeV8pCZ8eF0v/Mcxk3bjWE8T57sq1XnQwNXNKlYA7FY6q5wSNeOWjf17MSH5WzKgnydg36YAaHVCjvwpqxL+m7MDFLir+HQeg6QA0HYAmdvYPDaaLzOHQYPrQYDpLDweg6QA0HYCmA9D0VwKa+J2dDjjTAWf6AXGmQ3BSDmjiJAocgKZDeNLrCk/C/NEmQBP3k0OfGgTmHj0b6KTsAXTChS+f8fXN+BDOlFnAQzjTIZxpf274ZtEvu3G5J0l1Tfzm65S9Csd5d6uE8btmAT3Nw+4OKFN2yQ4o0wFlOqBMB5Tp1aJMrx0FOESbZEEATjTgAQQ4gACvCwSQxJ2hANUpqkTAms9x8Qcs2QkBfM8HCpRE5m4DCmxgAl3mX/Lh5kYdkqB4m3dIgmoUwS8nlX9aFf05xKZsLskBNTigBll6OKAGB9TggBocUIMfNTZlNL653kvp0WKKCWjmqxDcZbsq4VDi6Msg35YORpOmCaYrSYKqmFQwZVsRNNfsSdpkorpuWRNFZiHlPX5xufsb1uGTpTxFdsBt/+4Go3s2kjMvDez8eO1nF2HESiF0aHitHZcNtW2S0zYV+F4b/PRDZDa5VBINU5wIkmrqgmpIptCbUF2YSHbPsHVZMiecHrw7yEFK6hj/FXOQDmVoGkM8qtYhoShTqatDMlFZMZZ9VVw5FDg52PaHiIBDRMChwEnEDg8FTg4FTjZl5KHAyc9W4GRwc3XbMO8kao/n0EgdS0wIro3dvitOapyNE0OPJJYetspFO3knmIAklVnJqTWmTEyzZ8m6ANaXLaiOPRF61JQESZ/YtmEZYDBNGjQdAWtJ6rGKP60rqFg5G3dHVv3zlC5pVmO/a5X7uEk0Of/1fnh7ha1Ov8hdn9WlMj4r0AVGK1a/XzyytpFxdfyt6uA3a9OUoy5d1lXsldegDD6nev3GOraqYB8un2Yx+/joz1xgefGynCfLwkpF4rX5B8yAgjZAEBj66RCXC6NWyRn95jk0fI/9R1zPcsit5dAr6yswnL+vZk9ESao+s/saPut+sYD7Pw+xBloITnfWnPrvYDZis7XoiUrFEwGioO/IJ2oH7AYZbxB5N4C1Wpxhrlj3+b8WS+no9KM38/BBY/zhHbmynoiWDGJz3Rp1IWN9Kza2gcRBwDD5N9fnv70lb9aE+b6aTSpafiXyn2t/LsTF6uB949ViAVvTT2C0N1/kFq/SxBLif1s1AthJh7pg8q9fu/6q3QAktWwABYED8SXJcmZk2+Dyfnx3PqoDHluKKYVXFyjLgnibXN6zKyPdqCqpIMMEkeoAebvYcrOnK4LaUy3ZVQ3FEnlFkHLttGC0jUuDFcGf8fUNcB+CCkEe2IuOLc/PkKtKHF0WVsbkcEv6bgOXrntbDb9c/vNuzBllrqGWaIgsbIojh6few7Q+Q6Gme9ymxFrPMjqMWVz89vKPJtpXS6C7ZXE5pF1kG48p24hHmqLv2aZzSVcbvsq3JmbT1gAkVwWrR4GYLdcAYlZNQXSpZUuiYxp2SUeuLZuqNaCI9W6vwXYZCEPp3GftX4U67GVTW1jBEtZ4gZ2u15r+7eisZJCZ60fYgrpBQfYuzSg5LoxiI0JWD96bxwZAdQvCgidPNU1loiiCLsuyoEoOFcCY1QXFsExXcS3dcjhdK9dLAHzImz9EGkN56GA2LFKVRF3cCPFzYrVlAWrLI6ot74jLHkreLKZPIWPdPnMQvi2N7SNbMtbS8ReZaVbHYoNtFOlYwl/XPzZZzA+h4y/gotKq4BvV/2xT0YGrCnCkjagVpDmBQ5+2grT1ilZ48CSXhs7pZ+CCaZzbKmDNljjaK7u2bHr1I2e9kbNH6rTmGo65FnFHjmDjc/6DSPhBRYJSpikcRMKPJhIUUVFRJigFmQAnGZTzBwvgE98D8w483aj/LFJj9DXKBo7NfJAOP6Z0wH2LTcQGcTin25sT+zMldmVGrLmEMzG0iWZTQXItUVBlTRd6sqELpmobE8cAMHjCG8d+jcm8jBAV0HDk1kZiA3OhjanQxUzYkYnQxTzYhRxoIANydXkNVdREjKYqmARNOjqUNMAm7Xn5Lvh4qYZfr9030Ox3o9XvQqOv49d1vLqcT3N4dDOOu0hhzMwBux3dDJqENlbCol/kbaMbJbVLdKNm65Jqu4KIRw/MZlfoGeBeo9LEFSXXcQzZqkYcQUM2pMjY3hJyLHxy55TB8eR2hsYwrUcii79yMwtx8bnmxvPil1lzQ5O4VfKt4IEux+DSyLxABkmoiCKI59xC2R6cMeTFnbhaxe5sStkFdWD882yhxFvwsW+sZnJhUTCNb885l2ep09JdwzZlQ5BtA+S/4hiC7U4UgMcNR5UURdRlp8xejF96G3HEKoaXIWbNkDWzMS3nFv7Bms3sGQgv4Oi4CWVmY7OBra/jMrbkx+dr9ZbjLZKsqLvtTIQuRfpqshtFWdF7L9uaiMS9iQRsTgSKS9l677KqUKkwZzExA5/F5YPUircMM6Uv/HDhwSKB3lKaWdmkBVMyzfIxlBJWGWkp3UmrDXE1JK8uBNaYxKqIbN+N5OD7RInZOvQkubp7CMr1HUROjO/6d/djMj4f3A1vrmP3etdnZufaNixl2SrUBJto5uJBIpfyHEgEwhFQvyBjbkRLThuTTFDYG8WeFIX95c3welCQarkVLQlXyVzRKFSFdZAlcKpAVDLL97vnLqc4dvFvm2jFlFpu4x7l09P8en3y5i4IWeBO8BP/hvNEGSNnsFNVVw58eBhb/ujp3Ev5vck5k/iw2bC8amZuMrNPqzmjgYq+6VdW4EyJJCVxK6UXgsPe8iCCbxfN4fcwvP4Dcmncmo90an3zkA+/yoGeeRBQ6qxmIBtXc6BqBEGQ7oj/fU7oo88i+F7/2J1IwmNPOBj73dRfPUyXIWk6cPhqg6Thu0JL4kYhU53TVzk88ybzrIQhb51KaHQxth1Jpo5lTQRNmfQEVTMVoTcxTEHRTItalmKqPQ7YlWXvhiYbGoYW5pj0wH8AvYyVpYkJoxH/L3xKxMG+MhsViYd5sisyKOzgLEnUlSRJVzb9N0PY6p0bu6dApWwkxeFxY7j31CO3dJE6NMn9xy0gBRKoBe3V/7YW3RZq91/boss3m1X2W/k2rWbbqPZtXCd3L5Vvu1VK5Ke5NwNpdyo81o8C39XLSA3d1ixRtQEEm6iCarqS0FMUXdAV3VJ6kuJOxBqI9ieWGrqkGMhKiy29H1LV0o5Vy4MIKXwOIuQgQn5aEbJFMgFHiKRP297LZ2gdRIhl2A5ExMpCT4doO1WGYAoQIa5Av7q6ZoOjT3HMahHiFvXuGA1O+ofXCQ4Zy6EWZcVw8GlbSVERbL99CaRWqkCXvWxZInZLleA51YIWqkHrTe+iItSoCXJP13Rw/KmFxXCbADtH+4gE5BugVUbo7gzRdsZoM4N0t0ZpnUdoLz6hdl6hxn6hbp6hFr6hCoN1N0ZrU8O1znhtbcC21EDY5eV+ygaaSP6icvSFn+xfrpV0zx84SLmDlGsu5XoGRGpt5EW5ZS6AZewCOEi4g4TjssKDhOMsykHCtZRwzXIg2oWQJJ+uYR/X93ejIQsfScJIfoAAkkKIftbY0yVJVQV5m8CQzCcnPs48umTBYNerZcACJLiBIhsr2ihYBEK4rYfAWkxP06enJvl78p3OZmTurwIvnKKyuL665CE41vfk0v9OQt/1Vo8wE7p8B1aJE8PBjgWa/fTJDdBLzH/gM3iw10vJ92NvHSsuq/t2VEMws1AEjbKziiz+3bkcOKpxNoh7c0FfW5R3hd6m9hRZZV6M7rCCUBdinz9LvAlVlCob33/8+77KkKdbR8AqhGOKCQA7qkIOX9RhbZYtGaZki4LmGFKUBWOLLl1nwVi6XvKMwnmAQ1R2HoiVzuwHQ9u4tFxDz0pP1yFMcSN3YZZny+TNJArfe/syCFuGvPv3JRldewPcYGkNRdwp3gYgTvwph9zU4xJiLhK0LBq/9kVN1H4vulZdMCSjLK9C4/ASaka2VvLZKMrPwDsQ0RQzp755mGtxZ/3pz/3HJ/LmYnjb77/dLWCY5Cc4KV5I2gOGt36wnIGC1AwvvBm1wQtNU5KV14oXqs+GF95awEkdr6bZ8/qGbGHQweUR3r98ag42NitCuk0h0teOVVZXp3xl2sKumpYc1IWXUBdURZR6gFsaBUmzNtpQW8CijTnjzQPn7Vd60CEOOsRBh+Cct4MOsV6Lgw7xCnWIphFcTXHhrvhtVI8ZAct1SiEEAD1naWtEkaO6GWyl0sLW3z0IZcDV8GhIAix8jeXY8eptSl6zFlEta16DFaeLgrgPePliOL67Gf1Bbj6R9VaQ+/F5RfVstlsvn4w4WAUBqp/rvatILzyDzWPbWpWDCNBlsGSZitUXlaUnRhcM5yktVVx15UMgmI8UZT89c64jWvewcN6MiMeiSa4+n/QHd/f9O1DqphbWGAacaLaqSYGTyQLsq5D8Syfgxw5Ccju6Jt+nlP4bMKWK+/5uzdeFx8uTE5mCW3VBuJw+WhUX3NL5/IncwhixEunV2S4SBPtwav2ZPyOyBqsGkacAd98hiS8rBiIR+o2C+izJ8ULhbbOn6uxCIvW2X6MLUPWDmNGUX8Yt0bLb9MNnbXC4Zgc7bW8o6V2yS1zbVZSJKOgOgNqcIk9ceHsTQWYToTsv1l1WgrOmvFrZS2/jt7JCZdjSEFZqjLVUAJlJmqsQH2jSAsYHSA2v0hoNPN9NRghrgzUxfjmath7jRhNHpSfjFjZt4rjRtXEwzHZmLHxyInV0Pr4djvpMrL4ZXl/0L5nE5GCnH1w/pL8WitXxvFf5tij3sCaZqd3ef4JI73xDVmB7R/VdUwGqLnyK02aSGw/5WbB6+OQHj8/bbjJzlr05lseI/t4R4NSw+0iH5rmUlnm+GrVs3CycpOhyMcuquRSvLa/HVyZ7uSYrMW3/ec0lghb9KPOLENTX1WEwbYYSPsGdPgiV4dw5rkh7afySl26QuSsnEvPA1DdYaFwcqdrNsNPaSMcmfAAANpWXqJKUnbDGHKcVVZIaLvC+CwOVVjAdjK92VME05sHI+ck3OvUcuG9XnFdt0kZMBi8tJ542M55mIRtVBU6jRc+tx1W/zB2drXgNISNqcWh9GvjAdI8asVbupw2/TQ5F/NYKVpib6w4rfdY4okbjm+t9OaLWRvbO3E9mR23AtQ1F1VVDmDgm5v+pjmD1dFUwqOK4Vk+mrPNJ5tGqppfVds13G1J1GOxGUY647FLnwrotylDuIJ6FT7iNzJCGzWEqqpqYmqkbnAR1Bh50ZR57dN2ynpSnXJo/G91/Jlc310OwK4bXnwkoezyyr+k/Obzm8rbWAY7KHlXkLJc1NQn2b2MDWQ306PQ/RjgaHIg3AYWAQ4oYGcSUPu04rIlF+L1g84ziidGl8mqOG402jLKLGxwvvpqBRm77pkr98Xj4+fq8pB1TS/qpyl4sle63Y65YaRcOw0DFFvEsCEU2iWYBjREjVs4gRin+s2PwSrXA31Urhufpq/pqQERsuPoyMKLu9FTVMTQBosNVQZUkR7AN2xU0qlrmRBZ1KpsvCSPKosJrLvxaYESMitkljpgHRvaGI96M+pcNMUPpVcByzG/7cyFzkmkovWKkdbmb6Jksw4ZI3LbA1yuw/XZHcp3NP6orkq47hqCrPVlQLVUVeoolCYrhoPuHGrJm/4WNvapEBEWNyhrkIw4yXsmXMMH219u9OMquQSy3/T/OR9lwmOeKhmkZydJrFsiSiw8it9YTREOlQTbZnlXri0orcKs9Q+8J+s4qcMNoMIQ55Ea7DIHxBazhUpIPEb581AtbP4Laf0Vwya0/85xIYyYnZACOosB6oOzf9XcNzyrLdMOzIGgFLYOaS+PHXfgzWIdnDnHJ9kZKt7EiVOIc6diFeU3XCSkn4GlCi63itoEPbAIRl+vVo80mWRoFAoSpqFpVwAowISDF/wzJlY8QxrMUhq42qqqxpO3b3+kt29+tGcSaprnd78pYSV5ySxMqO64rCoZluc2jM3bLjgofHncCR+4qcGjIGUu7nNn2yGNrCuhCBc0CIksoIeYy/bZkkCcFheqGbmmMFJzGpFAkh/H5JURibOTVXRoEEZYBrmN2+esjNCRJ3JWehqu2FmjgSAVQB33oa/ONv0Sp+zHXJfHTThI2e6WN0es9502aKjVJtQRl62bUcCda7GxlmmTqhS7H93C7Lm6JF5KjRZQOB9GDjwB8TALwYq8HQviDlczyPsH8bExZyZDHyLfc9pmYH9ES+Ehns4al2/ovXrotXuj7MVtojKsCFQADfJHZspUejm8I2neCBGeGPQr+16XheyIdi8f4y7FU0ZK5UapnPsPT6ElR6IWGoH0ar1BKUG3iMNgNDDkuUZAqAfB0wGVjSci7dKyNoyKiq+vDZ0qjI9K9/byyYG6AFGZ53TF8EIYjC5aZQWBMYB6FHurtcBEB/YtMWI9d25vNjnfDGhHl3A23U2Rz4rgQVmpYgG21kVZF7vf5vv8yzO/iVTE/g5xZ30MycjFt+MD1XpLryQytj0lk/wnusZ/tKjiu9bmty2e61mPTVPjTT8B9vnq0ubfwHLMFAJh91mKbXTlsSQzaTcGSzJ3sBEK4ZRDCbeYJJRTVVqusrgJStmDo0moU27d2sTe8HEGjskCYCmf5bVkcWs6GVV3V0mRmuJRnGGS7i0ZARMXUGPeNNANY9TmAPEwmLiJ8okQY1plCZYKlGNkxpjOIXD8IkOdWm6t5dn08QSNmi5SF24ySfU4p4m3eBPYfwykQ51hOgdymGdLDB1YQXGcOzphyYxbeP35u7o2b7S6d97YXLKfZMg/gb9REDeOhTl40+KOU9V9clgT3tGTiZnkUdv3YOZH1KdvrhBc01Ft/es2ygovshOYqPc7nn0YlpNcJxWxHtFI1AeUxyyjVP7Z91wh2Y9wyrwJMVNehholdR+ReR2swq8lc9yuubl94KL017WScU3JGN4PsZtyOrkoiIDll/xRDlxoXbiz04Zj5cz90fIwTrYAzuO2X2wX8lkfLNb2/W6Rd/p7tPdpNHM7Z628v/hgPB/1Lcv57/wph+dYP25/7Gv63ZRGGbs6duJqfqalg2RZdz9OnEMJYZmkbZa4POr3q/E/QJ+ZJmQO+E/of9Cl92nvAuwhw46ha19LPFuyKKz8SywZT7BhsenKHnuLhEEZo2eBECN9BwBwE/iwDfzaj7jEALWSMBlLmg3oaPuRmQefkO6AELoEXzehkSb6CcndMlGNybgWzJ4ImZkj8CaJt3gKjs2eg/q0CH0yK6dMxUY/JlTdzifsULqbWg2cdEy3+KvOZwJa6cM8xx5eJpDpe2WlUQT5+gBOa0Ymik8/4H8PrdwX67vr4YqQDt4L3Jq2n89qgIlzn8VdvnnYzf1MsYfJ2yyBW+Vjn5Yzv5Kj0DNHEQq6FD//gTApT5gwqOiiFDfs0vD4bXn/ePEbxUmzUK0Z0AMKECP4HT0qcFw2+Nq5TEaaGVULAOa1A5AgcOpR59zMHgGLQazA0Ff4IIaJ1iSPHw/LBLgPNMYwT2NTy9Ipa8Bw8cNLRb+R3Ih9dstg89mPlnb+xszmYAg7u4NshqNZ5T27A6Jqz+m7x2XVZy50mD7ybAoBKkhkukhmucIbhceNRBbCi+Zujkjtz6gQ+jJHQ0IFBVz7wwwlb7c2vcas2RCZnaznVxXcUqBgte7P+2J2K3arPU1y5Px6fjzAQrR7OUV8mg0yVJVM2yjOVt0khU2VNUiEuEyzHOt7GD8DMsa4CuYfRESrL0baCB7ocA4FnVk7qyaBONFZ66wZUwo9YAef8+19pJedD6zS2KIfWaYfWaduUEuwUHVYQdZGGQlk8bXU/jV3I2C5cRalqsbcWm6orKpalC6piG4KqWj3Bnuiy4DiO3usZhu32Ssrsbgb1Q1iNKYp6B4TiN4wZRn7MFrfifW2Fa1UNYeCmpZnYXEF5+2taSUNKkqz+jzf/p/d/y51h5aH7zQGVPVLr8Y9Gr65sq7rcEwVqKyqoeVQWTPxP+2gQwggWblM6EOwlnT/8WBQr/1gUm7fgXhGVqk2o1NAVVe5ZjEq1LJUabal0e4Pk5akwY2CohqZijYPCceLZ5w1aeeysrMFroPsoqwJZSh5GCV8N8RvN07k3j4TYo65tOKIgQxwEaBsTWbCMniqYljZxJ6CBGJNSL+hms3FQVRrlIRR6JCUrXIBxXuvBwQImye3KfvxUW9PQfhhWLVCRgiAdgYHkU6gy2ByxaMY22nnNXpoFXUCcFwWgMl2HhANF8Oer4UPG8zIcVRZNcSsYaoPSNpc6gszZQu+aHVWeI0XUtz1HuZkVAO19ytsGidEFNzHHj8ppJNstAbqrV4z3ub3sX2OV+rvRef/u6vz67vXmRTf0LacxIeQWY91ABt8F1FpGGX9l6dHlqdESQBO6oO0sNXo9GAzF4zqn13uBu9MoNzp25YAgeZrFHPijP0NH2oU1dwV/MsHctKRLuj9/z/f+pG6k61UQUvJp5kMAoUPfkdE1+rqvrbnzRK6BoWCndWvGfih50obrjfPNfjO6YXkBtCMDK6DbNieIk4jXDfxGrNd81R3Jle1vaTCO8Wqx8IPlCc4NQyifOw/8HKIYVujjYCHMgyl1vgqrRVV7gtWcEkmrLb4vhct3BCuwgB/6Fj0oEMBVcbkSuG0uPwuOyd/hFIZAFGFF3jq3NEarlga4MeSzb83ek9vVDI7SzZ+goGPCh6n97bWvU4nfLJoVI7f3LZPpq5YqZYjvE0AmOrCHJUqXaN0ecIQ5PrBYbsTFybm7Snu0VC9YbXOQsl3fwfctKeI2CQ58TzIBhQeSyK7RulbYe3JBIb4XQpNAUdLI4wwxB2HiYYQZCZ8wtqX6OEEomST/TBwHpefs6X20XleX6frFbZxB+xBFcn99dwK/gdUUL+W4wVI2Yt5tDxQTWxd0DsJjTL/RrXvOVC3NkOmIUQQ1hjpOwJ6b/9si37xgFQJA5GB/5HdkeFWxDNcQ/cjgr5eWY7teuK1KwjxvCRhJ5dcuXCMNChjk4JICgKM7ys3qnRU+OWNnCsYH2h5O1vYgb9Lo77db114pbdpq8Jq2Ngyt2U1YTePm6PWN0TNeyR54vpWeLRgSBJ+pkq4B1qSLgqobpqzZqtLTSjCrnFGrK78hlxN/797rvFuf83xLH+Dt8ADMWp2jwVnWgKNBym1Vzm6UZMZM2uqMsyTbLLF7a7LN4jbZp2gDV3TFruggUDOzmtCTkrCTkhSy4WjAK0XUIH1oRylf+ybA6/vBIMmwHXDJsJz8GHFU9H85bZqYBlEpyRjOAtZHrlnhg+ahZkm+6rAqXzXXKdfo6UZtrmrD8i6lqWglBQjWHW8wsLay7EqDdNjKYx6fVQZS1Z3cmCWskawaxrD1Sd9Xr5C6hCS++kFT/CbfwyCrk5wDdLmdEqK2rEOXIHZrdCmL01ZUnIMgB1eyscKY4SogFE1N6JkWBu3Iku30RNNWecpDDuXVFNXcrKpKc0CXEwNdeQ2muW7UQNPCCGG8bFdFx2t7G2zdZ6uiQrSVqRDtNmlMIWk9U496RW0Ze8H55DY2sp/RisCFRLWUlniQDvx/G/5vmmnHM72O/2+r5yV9HmpLFiSigmHBzURFBBiXy4hdKHltO5X9wMbMzprzZZiHLBq/9sF7rv1eLBzvrmZxP2tQv57b4tkFT1FJ5l1MryTtFMtb8BaBdHXr9cqbUWO90oSo1ufTK3ktBpu1VNyN/Qi+twAIyKrRFNmP5F8ra4aNNcCtObg8wnsRqGpie95GldmamZ7Z9/RBXbs6Pjt+XbZo+9ISO8gRXLtrI4iQobhYC8ehO8kRVGv7dHXTSDc4mqwZwGa3U4d4iigvgy5eoEbNtRp1zAJ5HC1/RmuVNU2W9MYBTlvM6JMXhMv2zRVMtacCLKrtJg8whqqThXjmtnd7O1+Hg/WyB+s10W9jPXSv+arl+mgznXTXeumz66a71U+jRSuvXLcHPbWVrtpYX+2ms7Ysd92sMGtn/XWnhVnb6LJb6bPtddpt9NqXT/XdrndSijO2hnJZMW4INKtKDWYX3U29ECtEYkxs5lLL9ldYIpIC78NaBYC/whdAsBRDZy2yYOFr/p8EwrRYdSP41pQJ8PsHDNyi4GIvvq2ZgvH5BgipsE5NJtNeisg8X/i66rchirZii8LEptiuhMqCbRi9Nu1KVF3SsRDVntqVxDsQBxCCC4DOdtiWMitDTZHnNN9IFvpy+c/bX6vbV5ppFujfeM0h2VW83d/4DCeMOGMdA+g3pECuPvsyAMYauHesoAZg8pHV9/Yd/BaTelJdlzwAUR1vPrz88XBrLDJzj0vEaNnz4HE2xCml7wUxtr4JhSI+3grj94XZZ8/pg7/0gKpd3tM3DwEzdJNHR/yKc1UZt/qZIhxqYg5eAxx4iHBohSplQZ4a0n9OeLwT4a9ls0scEM4L34NZAXb0Nc/mSFQ4iFgzlMRPxKWhE3ggswiELuJlg7M+Vg9EsnsD8w5BhINXi1CUHvhgm2bugVBKyqlYlx9R5HSeWQHoBhYGYUWDCytGV9oQKmNZmaYuGJouqGZlFMkx1/ztiEOmc9oETNLmKWE8n8xvR0wbASAFO0fe3aThJT4Y9MH8iEN1HQAZHBv4fkC2jxKwIHkDNuDiremzdBCT5JKCLDmajUkCZeY8Q5wTMPTSVjjJbGJKzX8bpjUVa7qJqdSyRarJgusarqDKPfA2mxQEhewqsuvagLI6VZIhV423zAnZLu+xSw3ZVHZvgNNtyYnfDLj04amygXuwBqawPnxkASRay5sw6QtO7Cf2S8xk064SucJ7bzeXEb53aIiVS/Fudoh4VLwdFLlz1N7SbF01IETFBC1DUF1JEXquMxF0TXIthU56ij15Taj9enO7AYUQ8CLvfZCYf1yHIJYkuXKp7m5dznvjM0R6AwJ3wFv/rqDY479C7JIA6vem3HqTof+35TI2kq88zZ/Pu0rrgu0XC+2VtzJoiIVyOHy50M8tTnVt9YwaoKqqzD5V+Gr5PF4Iq6lwgTThsIlhsC2LbcJguwqPZqLp9bFvw9X1iar2BNvClvGyKQmW6VqCSTXX1qjW65XVRHmlTtc9s+8fk3cjqLOOb+/AqQm58L/TbxGyk74F8NcZnEX4d6ZzTnpchbw5lXvHOwRDEb/5vr5+7i/Zld/RziLpWecP56eVJPmtbCFF4lmKzkRSJ7Zg65ojqE7PESxNdQVbdByrp6iO1CuxB14S6uff2wzsR6uvPGIbjcDtoHLF7BaxjVbqmy8yrwR+85AYi2e9FTizokVlFHNcKqrkxoC3N5gu+kixykFgLZ7ednKDV7D0k2eMy+Zn8VxzGkFVtbvj3pBf16u7iy495aKEXL5V3DWd4cVs49ev3RyM04NxejBO01N8ME4PAYGHSNtYSBwCAg8BgZzPISCQ+zkEBGbW4hAQ+CoDArtkdbdHB6Jq4PziYgRu2Dr0jhcOtEtIQMdC1yydJF8aNp0TdVfMt/xDAAHaZs2abpSw7gm7pofRrzdHGy1it9teLDLUBS5KC7x1A42cbB6VZlVTSLtuth3rHFX2vd0RRsRrDtmgOHBrHH53mHzNpxVkvwf0vu6zW3T/NcSnNQD2WwasbQvo7y7nZg/5qfwa9jlONvCBEksq1tfEaKF83kWMVlm1pXV5emWiUUmEOClqmBBGK4mCqcu64MpmT51MJPCWlPh4ckHuPUPvCfoOg9w3w1msJ1YYe+yvAnBuNw3QKuOmHfe3+9ZlTgfEE2ID+hNgF/MlS2QBJontHubev8Clm/267QcL0bBQAn/mOU/InYAvPQTWY8yfMEcDf3di0ixtvJULrXNMS7GpJGgTEWnEdYVejxqCBF416uiSTNVSV1qeTpifoJpGFCBdCaM7Sz4bQpjRA+tXE1PI3RPM3n94SiIJh/NwFVgI5LOO24w4LiHMu1kjgagWDOzOxdVNm44IVYTHDw3cb2v6VOtrrS+GKxtmB+vXdx+9OSxcEOkJ5dbE+GP/7Gpb9VHupj7GtW/RRMEdQFcO6pEVaqTj2q6iTERBd1watew1J0DtNTk+rJBnsbru7bq67rokLKcDcnOtL2YZJK/9wStBnMZTfkzL/SJbieZc/ylENjMdIA1F4j0ynDI9ynec1WZeV6V+amLKMUcPh4P5WCiQGv/2aM1XE3gz0KsLBgHaaVkCu+pf35cmoK+rH2ONWkxSjgqLcq2JDpQpK636T9WUwbIzZbBoaRms7HpcYWKdZ81O67htD2R4r1fPcHs90BSOe/CdcdSAI3aqjFwyr5OGE8suQHATPFhJHWL+IrBczwwdfII7/eAJ6ME5rqhy0vgl+XHHBLrBkksJ/BDiHa/DwYt+CPFOzgPncwjxfo2BeT99iPehrM5PWK/q4EU/eNE5n4MXnS8/DmV11mtx8KK/Si96Ca61M3xsAxCrBonj7KoY08n22lkjWdtXu6l0uQMKIWquRgUZ3M2CitiEKRuKMNEM09VlAMNEd4cuzHzRmDuInM6IYoCKeaARoFbUWsYttOPLeRV8An+1pJkhDa+aRLHnMqbikiD4oJtJfm+rHb5DoBHrcRU6K6yO4M3/O8pgfyYIrB1FaGo7MCttoMoao5I8nZYgbyRzBx+A6wZv1UJb+rEG8yjsDbdrVQnuVSSGwZffS307fuA9eHNrdodwb8lrgGFlryp5ElDPPIzYVtZvkpuHl7zgHZnBeXoHZIa3WaE1O+IOm/8u0mgFy3wYnF4E8U8zPz6jbJ7Sh5P8F7yHNaKBA/B2qK2QJ4hDbYUfKT/3UFvhALz9YPWsD3XiD7jbmiIO5ay5n0M560M5a2Z7HspZH8pZbyPGx/cf/370MtGyiI21hUIA0YDwwmUQ5ZGEax25FOrIRkMakqiqrGRFE49Y3v7P4i6YxxLjUvw24Whz3/qAswLSRAA4EGbeV1DKnx4XS/8xjKNGA0qJaz2Fx9yQtWeqf7hLWBYbuVdFKd5e/rFtkKLSLUgxajK/iwSX7fDYBsGF8TJmogUbfDYDCuPHdI8h1LeCg/+1slj/vOSasnyZqLJtjLZm5pyJh2RTgqv8wMVC0e+arEdAIbAbTjfMHAFhIBgX/k6DtaPKgrz1iIdyCJDcS4CkZig61v+v476INJMGBTf9bxi5P4NoYNEkV59PQEzd9+9gw6cWnKYlRErOVoxNN0d+kyF2fVMZRTaZ8oYr5E9s+dMaDv5rB3nyT2jKWZ0ZyDDHs+bk+9RHtpE20oBIqrh5Z5ZBNvik6WxpoohLViFmdkTPWPcE5XKU8o6+jGNn6yDfX/+jMg2sSetfbu3uYxM+x6qm58UnnPIeRlfvoiumRL5AADJmX/XhrKzoT9cSs8FGPmtb3SgK4oLOg4bNLscUrqlsC9S9YWWkOkTSnbr1vKYRPUuKWUK8ySIOfKa2L9PcJGwBcuGHCw9IIqzoUdRuV+PT0pAETpquRPdmxAk3TJwCqGBuKpbLHL9s8IlZaqxdsf5DQaS4Jnlu0Ut4fPDQH/nQH/nnEQaH/sg/XH9kHAoyrwrgAy6JQovib5BGHhf+HK46LXfwJrE4bT+3o5uPl+dXZHw+uBveXJNvctcnpdz4Q3G8uDm5Ka0ngdFDoIQDggWIVXwR+e6BEMVF8WgkBzzs3bQRaNQK1pExFKwRrpNPbVY1UVC3SYHP23jxal8Ox4WKMqCnLyFgLL4AGEP079xsC/Ad1oC1HgJrMT1lsYRpCxnQOdY/5e6YAfK2AUzBiE/jPSD/IfGuWV/3CIfrYY7G6Jz6MK/wEZO0MVgJWxDNsdfZ31egACjvCAI8b/9PdAZg+7Jf/98PJ+xpZW+B0TzM/dAL32POIegRUS64BS+aUPjPo8f0Agi0c1nNnzenmvg3smBYqDdDTQyudgFDmjJaAs1EJk8UwvZK3guRTJyF4V1bWC25erUGU9BgAAmCAcSL018ERFJxFUTjLVmvTvb7utXpzzHYLPdEo+SJRvUTm86bc12G+EYUgIlvrDTG1uSnVC/o7ZyuHv25ZxGBXNLJksz870B5Mx8M53g9rmCbJfEdkUyz97+AeySgSfSDHv2QXajke84HL9352m0A8RHOnXGXnI2GX/JoUvvmT4kjI1lZJ+7HhA/iuTHalg1vDpGnVhZ1epY+mfQE6qq2oE4MKvRkRxGo2aNaz1Y1l3La/GXZ8eAGOWpdxG/Rq5K27ipFyjPYesFymdMI1IHlA5azAuw7sJyviSGyiBeX36oxab8KvMifP/gxx2K7ECfcrcsVCTsKv94k02SOaafO7BS/T+k8N5PvEM418QLgWlG/l3WpphjP/k8IB5tCBBm3/A2+K2n8hU9yfWeF1TsQIp9HEkCPJAD39kwz0ai1JPgHQACzmg28lqJVM39eUxAnPo6j4ZIFyI0OQmW/c+e82U+zctJNG2vyKix1aGr+rBEgu8q62kNdqBIH9vZxaBkOnX1YqaO5pSezY00Ly5YMU7JFQXMMKSqeYosurSmeslGpUdUMuXEdviLLjjS7ym6EBcY9Aas4ZtvR98h58V/ZlfWWIZ1NSla3nSe8lveW8t/MSF2MK2ASApWXkrpN7CEfIQqX8dGkZ1/i6X+HfadCYLRu/BSQOVltu/Spm/y2HOlMpjHF+OPCPLhS5Ovc/84EHahmQaIhlo2EPbUIbPJxzbolr8jpNZWegfVMOlUGxU+ORitNIbiSuZJL2/82kk77bvVTteHNKgrsrJjfC8gb/Bwyffn7cMj0Xa/FIdN3T5m+nYL/t1e8MkkAMcxUUS+xLfctZag5f6NoGo4hmoIMWpagWuJEsOnEFCzXtGXFVmxbrXpOttaxpsg9QdtxjU78FGNTopWqGFWEatzGF5aGG3ZStOrCyMQqmVJUCAB6Pd0ZrFjyQbTxwwl7c8mxKU9yb1oy8hUcH6btJcp25qFf5LSP6c7Olt7KmCkeFEUBZ/52SH6TgzJma9GmpGgTyi9XaUHVwlrnXYKNI59B85Ks5ZXwd0fSz9FBYR9A6ytCWfWePNGxrq9omBBeLE9UwRQBb6UAZlOd9ihY5X8VlLVtTPQWeOwrQllzZjvYcKqkSppUgRhWw7JZ1xNn4q8IZc3br01n3g2XPaCsB5R1zygr4Kpir2f1BNvUDEEVJUfoUSoKiu3KomUY8sThUvUBZd0TysphrJV46O4RWXxq304tkzyrYiDpI7XmcVBlYqbg07E/STXKuhVyCkHcGkCnZhcoP42BeL1QaANRsj0m+jNCoi9VB+7gzssKGhXiUl1bhUA2R50IqkR7gimpuqCJjiS7hqSrcgmjO7jznknQcEyyVy4SJFPtyb3G3rQ8u2IRbK9cHhj7kQeyLCuKCp+DPHh93TX/+kF4NhC16ao9QVQtS1BN2RBsRQM6F13JdWwg+p7zV4GHsqDP3AeWPX8A3WU34XgVsO1rwoqqoZ9srGwd1ITXiAoojqIiVgMudWEioEjiUNY7YqU7zDa2elc5k3JmfmyIXVlPRK2Yz3pY8YQ0YPQ/U4hhvIt69S4ewK8D+LVv8AuOnm6rruAoIsghWRaFnk0dwTTsycTU9N7EbdCi8hBi+HIhhnXCo0yAvGSIYYELluVOb4OUKYouqmBBdDCL0uyWEnMnTW0sszQwkzHxd+uKDpPEceTe8ckDExGrSnjL0j6W6QTjPrCSLMOMiqMt5t9g8ONq/lAOBVUNvzxW4uXtwUYyMxrqAR/8a9iDz56DOzg/ux+dj9M03Dfn13ejIXwxOv/1fjg6P3uLMTXPlZrbLrHWaJpYG0dKRB1r1+m+pcFCuWbUhibtLn6nUFI7ZCWGsNtwOjp+dm76c6P83CX2gCA2CwRnFcy+e+5yirqP+LfNGnXYNJ2jvPMrAEzXY4GhTEuuOYMl5f4MX26mxfBG8GFp++5T42FtToB9j4Y7qhPDMxZK6MhHpwMfjD/PwZ7WwNgdUDKeWG9NvI7LBbjPxjcie+b+zJ/kxnzgu0Kvjk4Zmmkr5ixEhCe7DiNqKbSaK9wx+hSn2MeDW7edWX8HBzBT4nIjzz6vuLt6zzaoIgtGTwKPwkSzBdNxZMFyXE21xYnb45YvzHqxDFWUNRHbB3dIDNogG15eVnU/jg9pK7lExP9HRJXcZLKKh3Gro22BFWWCWiVR5tZGfKQgDBk11RcC+hDCEsFj59lMttsBZ8GSC0c+MKxcNc1zzuVZcnBkSk34/4JFFUlQdYhGtkzg1DArybFtraf3ymp/JS+9hd0FlbS07lieehTRlGW9G/U4WerB9gWwLWU2QLPRra/DpTst+7FFvbYWZdgarL2xi7prBjmzvodk5B63q7f2EW2Ij3Q2q6+xc9VvWmNHlBW993I1dv5LegO+/Lfwf4IkK2Vu025lyBrsp15diuwzSJqkCtmAFd1qUn6s0xyriGhXZNSGkBqSUhdiakxOVQT1DAXZFklnF1C11hz/ElSQzZdkri0y/R01IVPKeE9kOSXdz7x5VBh6bQOQEm/1upCEbQLIAtqHYUtGlJ5sTjDieZ2eXFZRdhFx8zP6zXNorayBwGkJHqh3VVT80PEXpRKmbiwf8O4awdh8TWy9rAnuSfV7WDWXLK2cVvxe0KxTpbjC1k7U69PdpKi01afbFvtOteZUkb7JJ75wdefMK5ClarrRgzeUV598Xg26We6HAP7uV69rW2But9a0eWnQH5ImW5mHD0b1ju8c8Jtm2iT9hqp7TA6s2Yw1ZEewfbbk5BFxkeftjISlFTzQ5Rjw4MxMVUk3VVMUe7vu652PA7JdH80TLJi6oLNvvPzCHenK/BKvubNfoc8d1OVXqC6XbenuFeQfsz7vjtTB8Rn3lvb6IJfnx2J1DBIUtCByRlkBjSdy6SedGSrzSHPFGkVdFBpkQsrY/bRJ4POlQdbBz/EIk3FtdKBNXKZRU4kZOCiDsqoxB26y02rnsR4dHY8c+nrJpdsOvCBV1vegI/O9WM205PYRiW1bi3cIMZTAJ4RJDRAECL4h0CA2ld+dqrcdlY99QsnSK4OSfyAFd3/q3kHZ+4Gx0YOyx7bkoOwdlL2/qKflp1D2dhF21CkEaHTeH0Nc0aebEYQUfTofjfqXAFa+WECRdMxidVDFBMmsGPi3Bt/h9+3L9KsgbUxB2kdw0IhaIVih2NVvhKpeAKYdNzaIs8CNgoSSmJfb2H4MkrfgK+FH1JMiSxi/mMAhIWiOHq+Hc70KQvo++h/yaeYzdfTd6JoXT1MS2lJpVdwObkc1jVmRLJMJpOMCrXDbDCdJ5WVlpEqBIdqua4Crg4qyK6igAAtmTzYFRaOKbbgmlTSOFpKjHFXpKSyJMR+JW7cZZVZHBZReasCcNsa2G5UAz1VGUySpmebf317xz0O74/4t580/cIOmOPypp5ii0rMFQzLARy/pmmAZgDupumHKmg3kxCuvtAFV6cpvWIlW/P25y2UXmNsDxD5iw1OQvsA99tROLiqgyfhTsyZxCROr7BOHJyRq64Os7tV0+HmJSuIZyuqPx+cjDCGuP89lBlrrKtgV2RB6T8Mkca1AeKkYI/YTYUFSFnbJqKHzcgjo5C8cHQ5h4feXd68lNBwnNorAm5p+Tdv0auqiBEJgoKYK8s56NcXrXqLssd+aR4FvG+0dLTm5g/NVEe8dX/UFz2PlZTP6zUpUNQZejqz5Q9UtQ1AkA8BtIu3nBws5j8BG6ej0gj76DzPf9uYdY80bvooxRHifpBzL5OHEvdzf6+INDHD/4I3YyxnUVfZPprR+Zw52LySSfCxirpykHWvkIbAeQ+xUTFzgvTPw/Qcdhxi9sOKCKytwpkSSospXTQP1d7Df8tHpJV199Z2nJeZr7H2/4X3g7yCS+D/Nk2facDnd8O9T2ENizxDlcAAHwn7SaL8wOgBhLwBz1YjtzWZMw4Arws6DfL1brhydQrg2AkrL59hxeB3g3M+648qL7Pil//01brfKOLq19B0wQJ9hv+F9CoBU5G/Ps9dqutfTdJYZzj6BL2eA+yjqsSmo4G5Ffu7Ao/5yx1o7Oj0PnpbT4Nl4ObxRPZYlPNqS/FxnW1uLb1CfS0+2KQrasagQULf/2twckLH7gFpk7i0D/4HO32GU0Oqx4zxvKUt83/MV3RZrj2mJfuRiBU0vAyt87N/dnY/+aFi9KrYq1k/aQemqZuZdAe11NUuUbVHQDUuNu5K5klLTlSxrImqGKEsCRKTkgxI+DshvBBAen5x5E3Yil4BHEHDf0BkWW/qIR7E1sltuZp7ss7pUsakXIMBir6rYT7YwRoM7amoibaIIu+2WlxDj7pvlNQ91KlayMRzZdRhZao3JcqORi9QTirU61ubqNqDGbjC+ShdDJYFxAMLbX9OYETSRj8gKePwvR2gpl612Dn/IjLsBzlmagPrilUUarl/HyiJKVGdyN5UmVf3XxGGRo9E76kzBme5ZIJ7BazaFoLqHp79GAWL4KVXQGD7Gf0OGFZVfxTkEwy+X/4SDUHJ5npMjeFN/SniVjgDtaXZj425FZZPEkPbK1aqG5MsEx08oUSzdtBUXnIryZAJubVUVBVNDl6Nsw5nWJhP4vwa10XSwFOSNok0JIvbXFSmAwiUkH0EzZTwdLKowcgGVnYlcwC6iewmegtBpDJvWRAhHCn/VmypqXx3E3kHs/cRij5U4zp3kxnJPxMSDZrceJN+rkXx0ojmSo/UgnAYCa1RN0wWrR3uCTg1ZdHvyRDPkBraUYWAeWD6iK/EL7Fzulfa55OSGJG6KkpzAkke9HtEK7o4mp6pcbl3WBjwd7LWDvfbDCy5JEzsKLqX5nQe59WrkluFgyxAbS+Fhmx3J1uAvwxVk3ZZdzaQQn97AYlM1Vd0QXGsP5yuQXOoPK7nQcZscrL/tS2rlNs6myBDw/8BzSUNAxkrzwQ845AGH/CHkGsYa1JwijkzD4IQGdx3k2auRZ7bjuPrEMQXRMSZoh1Ghp0u6YMoKdUVXVN3SZ2TtsJ654WzNBnI0Emiczw+JSmI8SUazw7CSg6+Lt7sHX9fP7evCCKdGB4UjaTAwqvG9r1PeoEMhDrTZumHdXyj4R5Jl6ioWFXTXpIKquKJgTywZ/lKppai2pMo1wT+SritYzbMYZcGie4gDMZZeyFaUYiJSk6yjwqeiDs3JjnI7a8J9QDIp8F+zebhP7R2HcJ8CIVoUcGjJmgjgikVTX+kJpjERBdpT3QnVJoqjlBVazScrAdEXKJEX7fgiOlIZMW4SZCvaK1GQsoUfrocdlKLcIs5ZPGtXlHl/HLtd0mCzxMAvw/PfyM0nMv5jfHd+NSZfpCb3kf1WbyiUXs5X6JN6zDWzsxS9wgqUJOsVrmqUtrewAushsBbTU5JUA3DpPMpwxCh7Ml23jZnQb9hYNCBAeZYX0mNy64cenhHyCXOwqPV1TsOQ1TkFIChYsn/BjbmPDcd/OT0mN3NK6MILcd3gmkdwW82tY3Ltp2+mlmuBwAoz78GMAB9Wy7cCsK/guxAjV6feInxH4OU0evkU/gN35Yg3M9HMt7kF2WNdEviMbwbD/iW5GI7vbkZ/vGRVksqcVOzR3bTLUXp+Cbnq/0HGPiY4pxTDa3yUuaW0B5JsGrrcMMM1d07i98eNjriHJL8JL9/eKD9kcj6j2La2KvGUhgCSL2rSU88T4UUwUTV85kzV/szxAQcm91gIoTSHQCZngTf/GuVn/kbp1/p8A3l3yRnjR5+1Vh4zpaDi1Z9YlT4SwvUYBlUxxCfC8iFEjQjkE7WJbLB/mrsY7mAK7MsB3QAIxXMYU73wQS85n3/zAn8eE03Z2O7nIfD2cAJPQCq79L7h1Af+3PVYZYBnXfkBGForLDaDnHpEZxBW5q/CbHn5qvGc+cDj5/6SWI5DF8s4f4hFnk1WyLJAEICMcP05Ej77G48W3BRdiQIkc/Xxzqe+VZLLrpoDsFrDeW6cfdgXeeue7L0Oxq1pa7oja65gSqIKcCulgjmxVIGKE8WaWJYo8SqK5qBWFXZiZ+3x8JOv5hMxLs8h7po1udYTZ1A7KVmKYCsn0KcyNOWvVW0oQ0Na+ukQyJ/TH0Tj176oiVoxiL/vIsZzhZWrvTl97pJE29fIFkU1U6kbxScI+Ha9qm5BK58B460voHgzalpA0TQhXurlWlXB9++zJVlhlfZa4AnMpAAzQWpqPLEfSdoM+JejAQRow73Lp2bFoW4D79EKnprVhsq+pz84Or06Pjt+RcWitqv+vZ0YBEsj0fUinl2bAtGSURrtROFuW+QYMuC9XWylO98GDcpnem1mba7BMtqftNPBN3hal1pZXmarp0nGZoPunILeDNE+SND8mhep6iBBN9fnIEEPEvTnlKADUDZRYwlIEYXYWnTKfBlZ5yrZXSXI57Xj1qJMlWUdoqfRwOjggs13+023x/VA33PAxnkiC2aHoGBfTJ9C1qkHr+MVyeW2Txpen7VrnzToj84/D7+cj+oqd17dXdTvlIT1fHOzvPIBmgz4vqyXaUqzrVraAAd7c33+29sM4N/ZlJeqYBnFmBi6o0mCrkqSoFLJFXqWYgimZkxc1XRlh05qtFBN7sHt7bXQiEPCGkAUscd9y7OezzHAJrsAGAufPN64GY3zwuZRA2x5F9Ew1dhgAyJ8qCVCQ91ZdXz85MvnbK4SbDpgPRAW9dx0Cxs3vuhfXkYlUI/JcJISMdbAHJxBVMXFzf3lGYmDczY3r1w0KWKvZ5rgtyic1VXeiTCLnAhO6kQgbyYeqxsFWFfh00TENQ4ranpa9uvN/TK8Az/iePj5evzcdYnhMH7xAGojY1Ai68oTbzha23mDm0axZQ9iz4AQ6t1FP2RWmuvSzfz+4v5cAijcAyxTANFnS5Al6PI+IXiq3zPnKv+uU/AWBisA+7LOprJr+6uHVbiMXI0lF+7Ls5tOb0YnMLsLirMsHWqDAnjfPCxXLBkGcbrWu2vyDrnzO1q5NgvL89sulkc5Ou3p5OvDHldHhVf0urxim8WJolFv0WOxCsorcjebgYYlqP//9q62xYkYCP+V+wND87pJ4PCDdx8UFETwk/hhMkmOwyuCx/n7nbTaKmy9dd2t2zYLhVKWFibbJzPPPPNErbyfMUpdNcH1Ky+mCNOxjRBv3nxgRdj7gfngdnOpDMXjtILoKl3+66axltHpyDpoKoW4aRwCBKEypJiticQd5fjM4TfOOLVxnZtqQ9rH58gmh6ovG+zzNvSVWFiYxnkftllMqIbJ1nq8OFKwPpQEJWEVOhcHWGX3iax21ppiaYAXh+fFmfBQhu3WOveslxIsxBjhjuF2xlO0vjQjQ1VjJqWx0xsZ/ov+4egdnCU5GC7UcW+hgFdMdipkBRjq0Cu6DD4rDRRUCbGL1tIAEwctjYQwIdlSr97D6V5ypsT60AqILKx8m7FmjGn+OdgDm+2fsdF3P6Hx892hhWjQ2KCxQeMSoRFF1oGcgNAxlWyiQgieSWhKxRmWciefBgy9eePFwGbISGh8zXUgfsNH7vXh16v6BVW0Oj8k9pYVz1tf75yv1+uPr+4+NVzsW+CWMraUcakpoyRurfnoIJut7xdCJCEhpRxc8gaFHqDL9qZTk2r36/X7jPu7q9t7PA4abgrBEQmiv2ww5Daw4Jds9fNp18+z+3ecMmetTOkwSQ8saGDIE0xcexUTyCy1RAzZqngZnPXm7z6Esz5wY+Os+54vYUkYRwmUJ837Mb+LuSOwXfFEgnRR5Uw564MPVOOs94Foe27jrM+Ks1YyiqKTBZeEA1NMAUxMXJPWiRSh9oPciM6csx6JjfuS5PI461aOnEc5crntvChMR9oiWGauwSiurDELFskg/1RALWI1ZP3/nDVzM8ciqsfmiKpxM42b+XE1MDxFMDQs1zK566BEE8HkXA+oyKlOkZhctHBYT/a5LKJ6bFa4cyduRHUTep1uZng9iW3pxmXniXhgM6da3PGHv95yvbp5uOfzgfHh9gs91Ym5F98BVIUFnJOnAwA=", + "hash": "MjRhYTlmM2QyZjYzMjc5NWZiNzRhM2YwZTZjMGZjMmM1MjY2ZTMyYw==" } } ] }, "request": { "method": "PUT", - "url": "DocumentReference/72278b7e-c6b7-d99a-83f3-6c397689af7f" + "url": "DocumentReference/34180c23-046d-b0a0-cbf5-2c81dce8cce6" } } ] diff --git a/src/Microsoft.Health.Fhir.Liquid.Converter.FunctionalTests/TestData/Expected/Ccda/TransferSummary/Unstructured_Document_reference-expected.json b/src/Microsoft.Health.Fhir.Liquid.Converter.FunctionalTests/TestData/Expected/Ccda/TransferSummary/Unstructured_Document_reference-expected.json index 6df0a334d..991b79e37 100644 --- a/src/Microsoft.Health.Fhir.Liquid.Converter.FunctionalTests/TestData/Expected/Ccda/TransferSummary/Unstructured_Document_reference-expected.json +++ b/src/Microsoft.Health.Fhir.Liquid.Converter.FunctionalTests/TestData/Expected/Ccda/TransferSummary/Unstructured_Document_reference-expected.json @@ -232,8 +232,7 @@ "url": "detailed", "valueCoding": { "code": "1966-1", - "display": "Aleut", - "system": "urn:oid:2.16.840.1.113883.6.238" + "display": "Aleut" } }, { @@ -249,8 +248,7 @@ "url": "ombCategory", "valueCoding": { "code": "2186-5", - "display": "Not Hispanic or Latino", - "system": "urn:oid:2.16.840.1.113883.6.238" + "display": "Not Hispanic or Latino" } }, { @@ -365,7 +363,7 @@ } ] }, - "date": "2021-05-14T02:11:15.958Z", + "date": "2021-07-02T05:38:51.985Z", "status": "current", "content": [ { diff --git a/src/Microsoft.Health.Fhir.Liquid.Converter.Tool/Models/ConverterError.cs b/src/Microsoft.Health.Fhir.Liquid.Converter.Tool/Models/ConverterError.cs deleted file mode 100644 index 66cb00ef9..000000000 --- a/src/Microsoft.Health.Fhir.Liquid.Converter.Tool/Models/ConverterError.cs +++ /dev/null @@ -1,47 +0,0 @@ -// ------------------------------------------------------------------------------------------------- -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License (MIT). See LICENSE in the repo root for license information. -// ------------------------------------------------------------------------------------------------- - -using System; -using Microsoft.Health.Fhir.Liquid.Converter.Exceptions; -using Microsoft.Health.Fhir.Liquid.Converter.Models; -using Microsoft.Health.Fhir.TemplateManagement.Exceptions; - -namespace Microsoft.Health.Fhir.Liquid.Converter.Tool.Models -{ - public class ConverterError - { - public ConverterError(Exception exception, string templateDirectory = null) - { - Status = ProcessStatus.Fail; - - // For TemplateNotFound, add template directory information in error message to help find template - if (exception is RenderException re && re.FhirConverterErrorCode == FhirConverterErrorCode.TemplateNotFound) - { - ErrorType = re.GetType().ToString(); - ErrorCode = re.FhirConverterErrorCode.ToString(); - ErrorMessage = $"{re.Message} in template folder: {templateDirectory}."; - ErrorDetails = re.ToString(); - } - else - { - ErrorType = exception.GetType().ToString(); - ErrorCode = exception is FhirConverterException fce ? fce.FhirConverterErrorCode.ToString() : - (exception is TemplateManagementException tme ? tme.TemplateManagementErrorCode.ToString() : string.Empty); - ErrorMessage = exception.Message; - ErrorDetails = exception.ToString(); - } - } - - public ProcessStatus Status { get; set; } - - public string ErrorType { get; set; } - - public string ErrorCode { get; set; } - - public string ErrorMessage { get; set; } - - public string ErrorDetails { get; set; } - } -} diff --git a/src/Microsoft.Health.Fhir.Liquid.Converter.Tool/Program.cs b/src/Microsoft.Health.Fhir.Liquid.Converter.Tool/Program.cs index 9a1922b12..0fef61950 100644 --- a/src/Microsoft.Health.Fhir.Liquid.Converter.Tool/Program.cs +++ b/src/Microsoft.Health.Fhir.Liquid.Converter.Tool/Program.cs @@ -18,10 +18,10 @@ public static async Task Main(string[] args) var parseResult = Parser.Default.ParseArguments(args); try { - parseResult.WithParsed(options => ConverterLogicHandler.Convert(options)); - await parseResult.WithParsedAsync(options => TemplateManagementLogicHandler.PullAsync(options)); - await parseResult.WithParsedAsync(options => TemplateManagementLogicHandler.PushAsync(options)); - parseResult.WithNotParsed((errors) => HandleOptionsParseError(errors)); + parseResult.WithParsed(ConverterLogicHandler.Convert); + await parseResult.WithParsedAsync(TemplateManagementLogicHandler.PullAsync); + await parseResult.WithParsedAsync(TemplateManagementLogicHandler.PushAsync); + parseResult.WithNotParsed(HandleOptionsParseError); return 0; } catch (Exception ex) diff --git a/src/Microsoft.Health.Fhir.Liquid.Converter.UnitTests/Ccda/CcdaDataParserTests.cs b/src/Microsoft.Health.Fhir.Liquid.Converter.UnitTests/Ccda/CcdaDataParserTests.cs index 37fbf5447..7bb9af447 100644 --- a/src/Microsoft.Health.Fhir.Liquid.Converter.UnitTests/Ccda/CcdaDataParserTests.cs +++ b/src/Microsoft.Health.Fhir.Liquid.Converter.UnitTests/Ccda/CcdaDataParserTests.cs @@ -14,8 +14,6 @@ namespace Microsoft.Health.Fhir.Liquid.Converter.UnitTests.Ccda { public class CcdaDataParserTests { - private readonly CcdaDataParser _parser = new CcdaDataParser(); - public static IEnumerable GetNullOrEmptyCcdaDocument() { yield return new object[] { null }; @@ -33,39 +31,35 @@ public static IEnumerable GetInvalidCcdaDocument() [MemberData(nameof(GetNullOrEmptyCcdaDocument))] public void GivenNullOrEmptyData_WhenParse_ExceptionShouldBeThrown(string input) { - var exception = Assert.Throws(() => _parser.Parse(input)); - Assert.Equal(FhirConverterErrorCode.InputParsingError, exception.FhirConverterErrorCode); - - var innerException = exception.InnerException as FhirConverterException; - Assert.True(innerException is DataParseException); - Assert.Equal(FhirConverterErrorCode.NullOrEmptyInput, innerException.FhirConverterErrorCode); + var exception = Assert.Throws(() => CcdaDataParser.Parse(input)); + Assert.Equal(FhirConverterErrorCode.NullOrEmptyInput, exception.FhirConverterErrorCode); } [Theory] [MemberData(nameof(GetInvalidCcdaDocument))] public void GivenInvalidCcdaDocument_WhenParse_ExceptionShouldBeThrown(string input) { - var exception = Assert.Throws(() => _parser.Parse(input)); + var exception = Assert.Throws(() => CcdaDataParser.Parse(input)); Assert.Equal(FhirConverterErrorCode.InputParsingError, exception.FhirConverterErrorCode); } [Fact] - public void GivenCcdaDocument_WhenParse_CorrectResultShouldBeReturned() + public void GivenValidCcdaDocument_WhenParse_CorrectResultShouldBeReturned() { // Sample CCD document - var document = File.ReadAllText(Path.Join(Constants.SampleDataDirectory, "Ccda", "CCD.ccda")); - var data = _parser.Parse(document); + var document = File.ReadAllText(Path.Join(TestConstants.SampleDataDirectory, "Ccda", "CCD.ccda")); + var data = CcdaDataParser.Parse(document); Assert.NotNull(data); - Assert.NotNull(((Dictionary)data).GetValueOrDefault("msg")); + Assert.NotNull(((Dictionary)data).GetValueOrDefault(Constants.CcdaDataKey)); // Document that contains redundant namespaces "xmlns:cda" // It is removed in the parsed data document = "" + ""; - data = _parser.Parse(document); + data = CcdaDataParser.Parse(document); var contents = ((data as Dictionary) - ?.GetValueOrDefault("msg") as Dictionary) + ?.GetValueOrDefault(Constants.CcdaDataKey) as Dictionary) ?.GetValueOrDefault("ClinicalDocument") as Dictionary; Assert.Equal(3, contents?.Count); Assert.Equal("http://www.w3.org/2001/XMLSchema-instance", contents?["xmlns:xsi"]); @@ -77,10 +71,10 @@ public void GivenCcdaDocument_WhenParse_CorrectResultShouldBeReturned() document = "" + "" + ""; - data = _parser.Parse(document); + data = CcdaDataParser.Parse(document); contents = ((data as Dictionary) - ?.GetValueOrDefault("msg") as Dictionary) + ?.GetValueOrDefault(Constants.CcdaDataKey) as Dictionary) ?.GetValueOrDefault("ClinicalDocument") as Dictionary; Assert.NotNull(contents?["sdtc_raceCode"]); } diff --git a/src/Microsoft.Health.Fhir.Liquid.Converter.UnitTests/Ccda/CcdaProcessorTests.cs b/src/Microsoft.Health.Fhir.Liquid.Converter.UnitTests/Ccda/CcdaProcessorTests.cs deleted file mode 100644 index f9e727f3d..000000000 --- a/src/Microsoft.Health.Fhir.Liquid.Converter.UnitTests/Ccda/CcdaProcessorTests.cs +++ /dev/null @@ -1,131 +0,0 @@ -// ------------------------------------------------------------------------------------------------- -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License (MIT). See LICENSE in the repo root for license information. -// ------------------------------------------------------------------------------------------------- - -using System; -using System.Collections.Generic; -using System.IO; -using System.Threading; -using DotLiquid; -using Microsoft.Health.Fhir.Liquid.Converter.Ccda; -using Microsoft.Health.Fhir.Liquid.Converter.Exceptions; -using Microsoft.Health.Fhir.Liquid.Converter.Models; -using Xunit; - -namespace Microsoft.Health.Fhir.Liquid.Converter.UnitTests.Ccda -{ - public class CcdaProcessorTests - { - private static readonly string TestData; - - static CcdaProcessorTests() - { - TestData = File.ReadAllText(Path.Join(Constants.SampleDataDirectory, "Ccda", "CCD.ccda")); - } - - [Fact] - public void GivenAValidTemplateDirectory_WhenConvert_CorrectResultShouldBeReturned() - { - var processor = new CcdaProcessor(); - var templateProvider = new CcdaTemplateProvider(Constants.CcdaTemplateDirectory); - var result = processor.Convert(TestData, "CCD", templateProvider); - Assert.True(result.Length > 0); - } - - [Fact] - public void GivenAValidTemplateCollection_WhenConvert_CorrectResultShouldBeReturned() - { - var processor = new CcdaProcessor(); - var templateCollection = new List> - { - new Dictionary - { - { "TemplateName", Template.Parse(@"{""a"":""b""}") }, - }, - }; - - var templateProvider = new CcdaTemplateProvider(templateCollection); - var result = processor.Convert(TestData, "TemplateName", templateProvider); - Assert.True(result.Length > 0); - } - - [Fact] - public void GivenInvalidTemplateProviderOrName_WhenConvert_ExceptionsShouldBeThrown() - { - var processor = new CcdaProcessor(); - var templateCollection = new List> - { - new Dictionary - { - { "TemplateName", Template.Parse(@"{""a"":""b""}") }, - }, - }; - - var templateProvider = new CcdaTemplateProvider(templateCollection); - - // Null, empty or nonexistent root template - var exception = Assert.Throws(() => processor.Convert(TestData, null, templateProvider)); - Assert.Equal(FhirConverterErrorCode.NullOrEmptyRootTemplate, exception.FhirConverterErrorCode); - - exception = Assert.Throws(() => processor.Convert(TestData, string.Empty, templateProvider)); - Assert.Equal(FhirConverterErrorCode.NullOrEmptyRootTemplate, exception.FhirConverterErrorCode); - - exception = Assert.Throws(() => processor.Convert(TestData, "NonExistentTemplateName", templateProvider)); - Assert.Equal(FhirConverterErrorCode.TemplateNotFound, exception.FhirConverterErrorCode); - - // Null TemplateProvider - exception = Assert.Throws(() => processor.Convert(TestData, "TemplateName", null)); - Assert.Equal(FhirConverterErrorCode.NullTemplateProvider, exception.FhirConverterErrorCode); - } - - [Fact] - public void GivenProcessorSettings_WhenConvert_CorrectResultsShouldBeReturned() - { - // Null ProcessorSettings: no time out - var processor = new CcdaProcessor(null); - var templateProvider = new CcdaTemplateProvider(Constants.CcdaTemplateDirectory); - var result = processor.Convert(TestData, "CCD", templateProvider); - Assert.True(result.Length > 0); - - // Default ProcessorSettings: no time out - processor = new CcdaProcessor(new ProcessorSettings()); - result = processor.Convert(TestData, "CCD", templateProvider); - Assert.True(result.Length > 0); - - // Positive time out ProcessorSettings: exception thrown when time out - var settings = new ProcessorSettings() - { - TimeOut = 1, - }; - - processor = new CcdaProcessor(settings); - var exception = Assert.Throws(() => processor.Convert(TestData, "CCD", templateProvider)); - Assert.Equal(FhirConverterErrorCode.TimeoutError, exception.FhirConverterErrorCode); - Assert.True(exception.InnerException is TimeoutException); - - // Negative time out ProcessorSettings: no time out - settings = new ProcessorSettings() - { - TimeOut = -1, - }; - - processor = new CcdaProcessor(settings); - result = processor.Convert(TestData, "CCD", templateProvider); - Assert.True(result.Length > 0); - } - - [Fact] - public void GivenCancellationToken_WhenConvert_CorrectResultsShouldBeReturned() - { - var processor = new CcdaProcessor(); - var templateProvider = new CcdaTemplateProvider(Constants.CcdaTemplateDirectory); - var cts = new CancellationTokenSource(); - var result = processor.Convert(TestData, "CCD", templateProvider, cts.Token); - Assert.True(result.Length > 0); - - cts.Cancel(); - Assert.Throws(() => processor.Convert(TestData, "CCD", templateProvider, cts.Token)); - } - } -} diff --git a/src/Microsoft.Health.Fhir.Liquid.Converter.UnitTests/Ccda/CcdaTemplateProviderTests.cs b/src/Microsoft.Health.Fhir.Liquid.Converter.UnitTests/Ccda/CcdaTemplateProviderTests.cs index 872bbb9c2..d71f072c4 100644 --- a/src/Microsoft.Health.Fhir.Liquid.Converter.UnitTests/Ccda/CcdaTemplateProviderTests.cs +++ b/src/Microsoft.Health.Fhir.Liquid.Converter.UnitTests/Ccda/CcdaTemplateProviderTests.cs @@ -18,12 +18,12 @@ public class CcdaTemplateProviderTests public void GivenATemplateDirectory_WhenLoadTemplates_CorrectResultsShouldBeReturned() { // Valid template directory - var templateProvider = new CcdaTemplateProvider(Constants.CcdaTemplateDirectory); + var templateProvider = new CcdaTemplateProvider(TestConstants.CcdaTemplateDirectory); Assert.NotNull(templateProvider.GetTemplate("CCD")); // Invalid template directory - Assert.Throws(() => new CcdaTemplateProvider(string.Empty)); - Assert.Throws(() => new CcdaTemplateProvider(Path.Join("a", "b", "c"))); + Assert.Throws(() => new CcdaTemplateProvider(string.Empty)); + Assert.Throws(() => new CcdaTemplateProvider(Path.Join("a", "b", "c"))); // Template collection var collection = new List>() diff --git a/src/Microsoft.Health.Fhir.Liquid.Converter.UnitTests/DotLiquids/EvaluateTests.cs b/src/Microsoft.Health.Fhir.Liquid.Converter.UnitTests/DotLiquids/EvaluateTests.cs index 6fbe0c8a7..d9ddf3325 100644 --- a/src/Microsoft.Health.Fhir.Liquid.Converter.UnitTests/DotLiquids/EvaluateTests.cs +++ b/src/Microsoft.Health.Fhir.Liquid.Converter.UnitTests/DotLiquids/EvaluateTests.cs @@ -49,7 +49,7 @@ public void GivenValidEvaluateTemplateContent_WhenParseAndRender_CorrectResultSh Assert.True(template.Root.NodeList.Count > 0); // Template should be rendered correctly - var templateProvider = new Hl7v2TemplateProvider(Constants.Hl7v2TemplateDirectory); + var templateProvider = new Hl7v2TemplateProvider(TestConstants.Hl7v2TemplateDirectory); var context = new Context( environments: new List(), outerScope: new Hash(), @@ -66,7 +66,7 @@ public void GivenValidEvaluateTemplateContent_WhenParseAndRender_CorrectResultSh [MemberData(nameof(GetInvalidEvaluateTemplateContents))] public void GivenInvalidEvaluateTemplateContent_WhenParse_ExceptionsShouldBeThrown(string templateContent) { - Assert.Throws(() => TemplateUtility.ParseTemplate(TemplateName, templateContent)); + Assert.Throws(() => TemplateUtility.ParseTemplate(TemplateName, templateContent)); } [Fact] @@ -86,7 +86,7 @@ public void GivenInvalidSnippet_WhenRender_ExceptionsShouldBeThrown() // Valid template file system but no such template template = TemplateUtility.ParseTemplate(TemplateName, @"{% evaluate bundleId using 'ID/Foo' Data: hl7v2Data -%}"); - var templateProvider = new Hl7v2TemplateProvider(Constants.Hl7v2TemplateDirectory); + var templateProvider = new Hl7v2TemplateProvider(TestConstants.Hl7v2TemplateDirectory); context = new Context( environments: new List(), outerScope: new Hash(), diff --git a/src/Microsoft.Health.Fhir.Liquid.Converter.UnitTests/DotLiquids/TemplateLocalFileSystemTests.cs b/src/Microsoft.Health.Fhir.Liquid.Converter.UnitTests/DotLiquids/TemplateLocalFileSystemTests.cs index 87216466a..f76885cf5 100644 --- a/src/Microsoft.Health.Fhir.Liquid.Converter.UnitTests/DotLiquids/TemplateLocalFileSystemTests.cs +++ b/src/Microsoft.Health.Fhir.Liquid.Converter.UnitTests/DotLiquids/TemplateLocalFileSystemTests.cs @@ -18,7 +18,7 @@ public class TemplateLocalFileSystemTests [Fact] public void GivenAValidTemplateDirectory_WhenGetTemplate_CorrectResultsShouldBeReturned() { - var templateLocalFileSystem = new TemplateLocalFileSystem(Constants.Hl7v2TemplateDirectory, DataType.Hl7v2); + var templateLocalFileSystem = new TemplateLocalFileSystem(TestConstants.Hl7v2TemplateDirectory, DataType.Hl7v2); var context = new Context(CultureInfo.InvariantCulture); // Template exists @@ -31,7 +31,7 @@ public void GivenAValidTemplateDirectory_WhenGetTemplate_CorrectResultsShouldBeR [Fact] public void GivenAValidTemplateDirectory_WhenGetTemplateWithContext_CorrectResultsShouldBeReturned() { - var templateLocalFileSystem = new TemplateLocalFileSystem(Constants.Hl7v2TemplateDirectory, DataType.Hl7v2); + var templateLocalFileSystem = new TemplateLocalFileSystem(TestConstants.Hl7v2TemplateDirectory, DataType.Hl7v2); var context = new Context(CultureInfo.InvariantCulture); // Template exists @@ -47,7 +47,7 @@ public void GivenAValidTemplateDirectory_WhenGetTemplateWithContext_CorrectResul [Fact] public void GivenAValidTemplateDirectory_WhenReadTemplateWithContext_ExceptionShouldBeThrown() { - var templateLocalFileSystem = new TemplateLocalFileSystem(Constants.Hl7v2TemplateDirectory, DataType.Hl7v2); + var templateLocalFileSystem = new TemplateLocalFileSystem(TestConstants.Hl7v2TemplateDirectory, DataType.Hl7v2); var context = new Context(CultureInfo.InvariantCulture); context["ADT_A01"] = "ADT_A01"; Assert.Throws(() => templateLocalFileSystem.ReadTemplateFile(context, "hello")); diff --git a/src/Microsoft.Health.Fhir.Liquid.Converter.UnitTests/Filters/CollectionFiltersTest.cs b/src/Microsoft.Health.Fhir.Liquid.Converter.UnitTests/Filters/CollectionFiltersTest.cs index a3804393d..4a1a204ed 100644 --- a/src/Microsoft.Health.Fhir.Liquid.Converter.UnitTests/Filters/CollectionFiltersTest.cs +++ b/src/Microsoft.Health.Fhir.Liquid.Converter.UnitTests/Filters/CollectionFiltersTest.cs @@ -7,6 +7,8 @@ using System.Globalization; using DotLiquid; using Microsoft.Health.Fhir.Liquid.Converter.Ccda; +using Microsoft.Health.Fhir.Liquid.Converter.Exceptions; +using Microsoft.Health.Fhir.Liquid.Converter.Models; using Xunit; namespace Microsoft.Health.Fhir.Liquid.Converter.UnitTests.FilterTests @@ -32,10 +34,6 @@ public void ConcatTests() [Fact] public void BatchRenderTests() { - // No template file system and null collection - var context = new Context(CultureInfo.InvariantCulture); - Assert.Equal(string.Empty, Filters.BatchRender(context, null, "foo", "bar")); - // Valid template file system and template var templateCollection = new List> { @@ -44,8 +42,9 @@ public void BatchRenderTests() { "foo", Template.Parse("{{ i }} ") }, }, }; + var templateProvider = new CcdaTemplateProvider(templateCollection); - context = new Context( + var context = new Context( new List(), new Hash(), Hash.FromDictionary(new Dictionary() { { "file_system", templateProvider.GetTemplateFileSystem() } }), @@ -59,8 +58,14 @@ public void BatchRenderTests() // Valid template file system but null collection Assert.Equal(string.Empty, Filters.BatchRender(context, null, "foo", "i")); + // No template file system + context = new Context(CultureInfo.InvariantCulture); + var exception = Assert.Throws(() => Filters.BatchRender(context, null, "foo", "bar")); + Assert.Equal(FhirConverterErrorCode.TemplateNotFound, exception.FhirConverterErrorCode); + // Valid template file system but non-existing template - Assert.Equal(string.Empty, Filters.BatchRender(context, collection, "bar", "i")); + exception = Assert.Throws(() => Filters.BatchRender(context, collection, "bar", "i")); + Assert.Equal(FhirConverterErrorCode.TemplateNotFound, exception.FhirConverterErrorCode); } } } diff --git a/src/Microsoft.Health.Fhir.Liquid.Converter.UnitTests/Filters/FiltersRenderingTests.cs b/src/Microsoft.Health.Fhir.Liquid.Converter.UnitTests/Filters/FiltersRenderingTests.cs index 6e6045570..8ea98e759 100644 --- a/src/Microsoft.Health.Fhir.Liquid.Converter.UnitTests/Filters/FiltersRenderingTests.cs +++ b/src/Microsoft.Health.Fhir.Liquid.Converter.UnitTests/Filters/FiltersRenderingTests.cs @@ -7,7 +7,7 @@ using DotLiquid; using Xunit; -namespace Microsoft.Health.Fhir.Liquid.Converter.UnitTests +namespace Microsoft.Health.Fhir.Liquid.Converter.UnitTests.FilterTests { public class FiltersRenderingTests { diff --git a/src/Microsoft.Health.Fhir.Liquid.Converter.UnitTests/Filters/SectionFiltersTests.cs b/src/Microsoft.Health.Fhir.Liquid.Converter.UnitTests/Filters/SectionFiltersTests.cs index 9ab8516fd..30374b1d6 100644 --- a/src/Microsoft.Health.Fhir.Liquid.Converter.UnitTests/Filters/SectionFiltersTests.cs +++ b/src/Microsoft.Health.Fhir.Liquid.Converter.UnitTests/Filters/SectionFiltersTests.cs @@ -24,7 +24,7 @@ public void GetFirstCcdaSectionsTests() // Empty section name content var data = LoadTestData() as Dictionary; - var msg = data?.GetValueOrDefault("msg") as IDictionary; + var msg = data?.GetValueOrDefault(Constants.CcdaDataKey) as IDictionary; Assert.Empty(Filters.GetFirstCcdaSections(Hash.FromDictionary(msg), string.Empty)); // Valid data and section name content @@ -47,7 +47,7 @@ public void GetCcdaSectionListsTests() // Empty section name content var data = LoadTestData() as Dictionary; - var msg = data?.GetValueOrDefault("msg") as IDictionary; + var msg = data?.GetValueOrDefault(Constants.CcdaDataKey) as IDictionary; Assert.Empty(Filters.GetCcdaSectionLists(Hash.FromDictionary(msg), string.Empty)); // Valid data and section name content @@ -73,7 +73,7 @@ public void GetFirstCcdaSectionsByTemplateIdTests() // Empty template id content var data = LoadTestData() as Dictionary; - var msg = data?.GetValueOrDefault("msg") as IDictionary; + var msg = data?.GetValueOrDefault(Constants.CcdaDataKey) as IDictionary; Assert.Empty(Filters.GetFirstCcdaSectionsByTemplateId(Hash.FromDictionary(msg), string.Empty)); // Valid data and template id content @@ -88,9 +88,8 @@ public void GetFirstCcdaSectionsByTemplateIdTests() private static IDictionary LoadTestData() { - var parser = new CcdaDataParser(); - var dataContent = File.ReadAllText(Path.Join(Constants.SampleDataDirectory, "Ccda", "170.314B2_Amb_CCD.ccda")); - return parser.Parse(dataContent); + var dataContent = File.ReadAllText(Path.Join(TestConstants.SampleDataDirectory, "Ccda", "170.314B2_Amb_CCD.ccda")); + return CcdaDataParser.Parse(dataContent); } } } diff --git a/src/Microsoft.Health.Fhir.Liquid.Converter.UnitTests/Filters/SegmentFiltersTests.cs b/src/Microsoft.Health.Fhir.Liquid.Converter.UnitTests/Filters/SegmentFiltersTests.cs index 3fcef8eba..297cb7f2e 100644 --- a/src/Microsoft.Health.Fhir.Liquid.Converter.UnitTests/Filters/SegmentFiltersTests.cs +++ b/src/Microsoft.Health.Fhir.Liquid.Converter.UnitTests/Filters/SegmentFiltersTests.cs @@ -119,10 +119,10 @@ public void GivenAnHl7v2Data_WhenHasSegments_CorrectResultShouldBeReturned() Assert.Throws(() => Filters.HasSegments(new Hl7v2Data(), null)); } - private Hl7v2Data LoadTestData() + private static Hl7v2Data LoadTestData() { - var parser = new Hl7v2DataParser(); - return parser.Parse(TestData); + var data = Hl7v2DataParser.Parse(TestData); + return data[Constants.Hl7v2DataKey] as Hl7v2Data; } } } diff --git a/src/Microsoft.Health.Fhir.Liquid.Converter.UnitTests/Hl7v2/Hl7v2DataParserTests.cs b/src/Microsoft.Health.Fhir.Liquid.Converter.UnitTests/Hl7v2/Hl7v2DataParserTests.cs index 6452d345d..e86238db6 100644 --- a/src/Microsoft.Health.Fhir.Liquid.Converter.UnitTests/Hl7v2/Hl7v2DataParserTests.cs +++ b/src/Microsoft.Health.Fhir.Liquid.Converter.UnitTests/Hl7v2/Hl7v2DataParserTests.cs @@ -15,8 +15,6 @@ namespace Microsoft.Health.Fhir.Liquid.Converter.UnitTests.Hl7v2 { public class Hl7v2DataParserTests { - private readonly Hl7v2DataParser _parser = new Hl7v2DataParser(); - public static IEnumerable GetNullOrEmptyHl7v2Message() { yield return new object[] { null }; @@ -27,12 +25,8 @@ public static IEnumerable GetNullOrEmptyHl7v2Message() [MemberData(nameof(GetNullOrEmptyHl7v2Message))] public void GivenNullOrEmptyHl7v2Message_WhenParse_ExceptionShouldBeThrown(string input) { - var exception = Assert.Throws(() => _parser.Parse(input)); - Assert.Equal(FhirConverterErrorCode.InputParsingError, exception.FhirConverterErrorCode); - - var innerException = exception.InnerException as FhirConverterException; - Assert.True(innerException is DataParseException); - Assert.Equal(FhirConverterErrorCode.NullOrEmptyInput, innerException.FhirConverterErrorCode); + var exception = Assert.Throws(() => Hl7v2DataParser.Parse(input)); + Assert.Equal(FhirConverterErrorCode.NullOrEmptyInput, exception.FhirConverterErrorCode); } [Fact] @@ -42,7 +36,7 @@ public void GivenValidHl7v2Message_WhenParse_CorrectHl7v2DataShouldBeReturned() NK1|1|JOHNSON^CONWAY^^^^^L|SPOUS||(130) 724-0433^PRN^PH^^^431^2780404~(330) 274-8214^ORN^PH^^^330^2748214||EMERGENCY ||E|||||12345^Johnson^Peter|||||||||||||||||||||||||||||||||||||201905020700"; - var hl7v2Data = _parser.Parse(input); + var hl7v2Data = Hl7v2DataParser.Parse(input)[Constants.Hl7v2DataKey] as Hl7v2Data; Assert.Equal(3, hl7v2Data.Meta.Count); Assert.Equal("MSH", hl7v2Data.Meta[0]); Assert.Equal("NK1", hl7v2Data.Meta[1]); diff --git a/src/Microsoft.Health.Fhir.Liquid.Converter.UnitTests/Hl7v2/Hl7v2ProcessorTests.cs b/src/Microsoft.Health.Fhir.Liquid.Converter.UnitTests/Hl7v2/Hl7v2ProcessorTests.cs deleted file mode 100644 index 2704f468a..000000000 --- a/src/Microsoft.Health.Fhir.Liquid.Converter.UnitTests/Hl7v2/Hl7v2ProcessorTests.cs +++ /dev/null @@ -1,178 +0,0 @@ -// ------------------------------------------------------------------------------------------------- -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License (MIT). See LICENSE in the repo root for license information. -// ------------------------------------------------------------------------------------------------- - -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Threading; -using DotLiquid; -using Microsoft.Health.Fhir.Liquid.Converter.Exceptions; -using Microsoft.Health.Fhir.Liquid.Converter.Hl7v2; -using Microsoft.Health.Fhir.Liquid.Converter.Models; -using Newtonsoft.Json.Linq; -using Xunit; - -namespace Microsoft.Health.Fhir.Liquid.Converter.UnitTests.Hl7v2 -{ - public class Hl7v2ProcessorTests - { - private const string TestData = @"MSH|^~\&|NIST Test Lab APP|NIST Lab Facility||NIST EHR Facility|20110531140551-0500||ORU^R01^ORU_R01|NIST-LRI-NG-002.00|T|2.5.1|||AL|NE|||||LRI_Common_Component^^2.16.840.1.113883.9.16^ISO~LRI_NG_Component^^2.16.840.1.113883.9.13^ISO~LRI_RU_Component^^2.16.840.1.113883.9.14^ISO -PID|1||PATID1234^^^NIST MPI^MR||Jones^William^A||19610615|M||2106-3^White^HL70005 -ORC|RE|ORD666555^NIST EHR|R-991133^NIST Lab Filler|GORD874233^NIST EHR||||||||57422^Radon^Nicholas^^^^^^NIST-AA-1^L^^^NPI -OBR|1|ORD666555^NIST EHR|R-991133^NIST Lab Filler|57021-8^CBC W Auto Differential panel in Blood^LN^4456544^CBC^99USI^^^CBC W Auto Differential panel in Blood|||20110103143428-0800|||||||||57422^Radon^Nicholas^^^^^^NIST-AA-1^L^^^NPI||||||20110104170028-0800|||F|||10093^Deluca^Naddy^^^^^^NIST-AA-1^L^^^NPI|||||||||||||||||||||CC^Carbon Copy^HL70507 -OBX|1|NM|26453-1^Erythrocytes [#/volume] in Blood^LN^^^^^^Erythrocytes [#/volume] in Blood||4.41|10*6/uL^million per microliter^UCUM|4.3 to 6.2|N|||F|||20110103143428-0800|||||20110103163428-0800||||Century Hospital^^^^^NIST-AA-1^XX^^^987|2070 Test Park^^Los Angeles^CA^90067^^B|2343242^Knowsalot^Phil^^^Dr.^^^NIST-AA-1^L^^^DN -OBX|2|NM|718-7^Hemoglobin [Mass/volume] in Blood^LN^^^^^^Hemoglobin [Mass/volume] in Blood||12.5|g/mL^grams per milliliter^UCUM|13 to 18|L|||F|||20110103143428-0800|||||20110103163428-0800||||Century Hospital^^^^^NIST-AA-1^XX^^^987|2070 Test Park^^Los Angeles^CA^90067^^B|2343242^Knowsalot^Phil^^^Dr.^^^NIST-AA-1^L^^^DN -OBX|3|NM|20570-8^Hematocrit [Volume Fraction] of Blood^LN^^^^^^Hematocrit [Volume Fraction] of Blood||41|%^percent^UCUM|40 to 52|N|||F|||20110103143428-0800|||||20110103163428-0800||||Century Hospital^^^^^NIST-AA-1^XX^^^987|2070 Test Park^^Los Angeles^CA^90067^^B|2343242^Knowsalot^Phil^^^Dr.^^^NIST-AA-1^L^^^DN -OBX|4|NM|26464-8^Leukocytes [#/volume] in Blood^LN^^^^^^Leukocytes [#/volume] in Blood||105600|{cells}/uL^cells per microliter^UCUM|4300 to 10800|HH|||F|||20110103143428-0800|||||20110103163428-0800||||Century Hospital^^^^^NIST-AA-1^XX^^^987|2070 Test Park^^Los Angeles^CA^90067^^B|2343242^Knowsalot^Phil^^^Dr.^^^NIST-AA-1^L^^^DN -OBX|5|NM|26515-7^Platelets [#/volume] in Blood^LN^^^^^^Platelets [#/volume] in Blood||210000|{cells}/uL^cells per microliter^UCUM|150000 to 350000|N|||F|||20110103143428-0800|||||20110103163428-0800||||Century Hospital^^^^^NIST-AA-1^XX^^^987|2070 Test Park^^Los Angeles^CA^90067^^B|2343242^Knowsalot^Phil^^^Dr.^^^NIST-AA-1^L^^^DN -OBX|6|NM|30428-7^Erythrocyte mean corpuscular volume [Entitic volume]^LN^^^^^^Erythrocyte mean corpuscular volume [Entitic volume]||91|fL^femtoliter^UCUM|80 to 95|N|||F|||20110103143428-0800|||||20110103163428-0800||||Century Hospital^^^^^NIST-AA-1^XX^^^987|2070 Test Park^^Los Angeles^CA^90067^^B|2343242^Knowsalot^Phil^^^Dr.^^^NIST-AA-1^L^^^DN -OBX|7|NM|28539-5^Erythrocyte mean corpuscular hemoglobin [Entitic mass]^LN^^^^^^Erythrocyte mean corpuscular hemoglobin [Entitic mass]||29|pg/{cell}^picograms per cell^UCUM|27 to 31|N|||F|||20110103143428-0800|||||20110103163428-0800||||Century Hospital^^^^^NIST-AA-1^XX^^^987|2070 Test Park^^Los Angeles^CA^90067^^B|2343242^Knowsalot^Phil^^^Dr.^^^NIST-AA-1^L^^^DN -OBX|8|NM|28540-3^Erythrocyte mean corpuscular hemoglobin concentration [Mass/volume]^LN^^^^^^Erythrocyte mean corpuscular hemoglobin concentration [Mass/volume]||32.4|g/dL^grams per deciliter^UCUM|32 to 36|N|||F|||20110103143428-0800|||||20110103163428-0800||||Century Hospital^^^^^NIST-AA-1^XX^^^987|2070 Test Park^^Los Angeles^CA^90067^^B|2343242^Knowsalot^Phil^^^Dr.^^^NIST-AA-1^L^^^DN -OBX|9|NM|30385-9^Erythrocyte distribution width [Ratio]^LN^^^^^^Erythrocyte distribution width [Ratio]||10.5|%^percent^UCUM|10.2 to 14.5|N|||F|||20110103143428-0800|||||20110103163428-0800||||Century Hospital^^^^^NIST-AA-1^XX^^^987|2070 Test Park^^Los Angeles^CA^90067^^B|2343242^Knowsalot^Phil^^^Dr.^^^NIST-AA-1^L^^^DN -OBX|10|NM|26444-0^Basophils [#/volume] in Blood^LN^^^^^^Basophils [#/volume] in Blood||0.1|10*3/uL^thousand per microliter^UCUM|0 to 0.3|N|||F|||20110103143428-0800|||||20110103163428-0800||||Century Hospital^^^^^NIST-AA-1^XX^^^987|2070 Test Park^^Los Angeles^CA^90067^^B|2343242^Knowsalot^Phil^^^Dr.^^^NIST-AA-1^L^^^DN -OBX|11|NM|30180-4^Basophils/100 leukocytes in Blood^LN^^^^^^Basophils/100 leukocytes in Blood||0.1|%^percent^UCUM|0 to 2|N|||F|||20110103143428-0800|||||20110103163428-0800||||Century Hospital^^^^^NIST-AA-1^XX^^^987|2070 Test Park^^Los Angeles^CA^90067^^B|2343242^Knowsalot^Phil^^^Dr.^^^NIST-AA-1^L^^^DN -OBX|12|NM|26484-6^Monocytes [#/volume] in Blood^LN^^^^^^Monocytes [#/volume] in Blood||3|10*3/uL^thousand per microliter^UCUM|0.0 to 13.0|N|||F|||20110103143428-0800|||||20110103163428-0800||||Century Hospital^^^^^NIST-AA-1^XX^^^987|2070 Test Park^^Los Angeles^CA^90067^^B|2343242^Knowsalot^Phil^^^Dr.^^^NIST-AA-1^L^^^DN -OBX|13|NM|26485-3^Monocytes/100 leukocytes in Blood^LN^^^^^^Monocytes/100 leukocytes in Blood||3|%^percent^UCUM|0 to 10|N|||F|||20110103143428-0800|||||20110103163428-0800||||Century Hospital^^^^^NIST-AA-1^XX^^^987|2070 Test Park^^Los Angeles^CA^90067^^B|2343242^Knowsalot^Phil^^^Dr.^^^NIST-AA-1^L^^^DN -OBX|14|NM|26449-9^Eosinophils [#/volume] in Blood^LN^^^^^^Eosinophils [#/volume] in Blood||2.1|10*3/uL^thousand per microliter^UCUM|0.0 to 0.45|HH|||F|||20110103143428-0800|||||20110103163428-0800||||Century Hospital^^^^^NIST-AA-1^XX^^^987|2070 Test Park^^Los Angeles^CA^90067^^B|2343242^Knowsalot^Phil^^^Dr.^^^NIST-AA-1^L^^^DN -OBX|15|NM|26450-7^Eosinophils/100 leukocytes in Blood^LN^^^^^^Eosinophils/100 leukocytes in Blood||2|%^percent^UCUM|0 to 6|N|||F|||20110103143428-0800|||||20110103163428-0800||||Century Hospital^^^^^NIST-AA-1^XX^^^987|2070 Test Park^^Los Angeles^CA^90067^^B|2343242^Knowsalot^Phil^^^Dr.^^^NIST-AA-1^L^^^DN -OBX|16|NM|26474-7^Lymphocytes [#/volume] in Blood^LN^^^^^^Lymphocytes [#/volume] in Blood||41.2|10*3/uL^thousand per microliter^UCUM|1.0 to 4.8|HH|||F|||20110103143428-0800|||||20110103163428-0800||||Century Hospital^^^^^NIST-AA-1^XX^^^987|2070 Test Park^^Los Angeles^CA^90067^^B|2343242^Knowsalot^Phil^^^Dr.^^^NIST-AA-1^L^^^DN -OBX|17|NM|26478-8^Lymphocytes/100 leukocytes in Blood^LN^^^^^^Lymphocytes/100 leukocytes in Blood||39|%^percent^UCUM|15.0 to 45.0|N|||F|||20110103143428-0800|||||20110103163428-0800||||Century Hospital^^^^^NIST-AA-1^XX^^^987|2070 Test Park^^Los Angeles^CA^90067^^B|2343242^Knowsalot^Phil^^^Dr.^^^NIST-AA-1^L^^^DN -OBX|18|NM|26499-4^Neutrophils [#/volume] in Blood^LN^^^^^^Neutrophils [#/volume] in Blood||58|10*3/uL^thousand per microliter^UCUM|1.5 to 7.0|HH|||F|||20110103143428-0800|||||20110103163428-0800||||Century Hospital^^^^^NIST-AA-1^XX^^^987|2070 Test Park^^Los Angeles^CA^90067^^B|2343242^Knowsalot^Phil^^^Dr.^^^NIST-AA-1^L^^^DN -OBX|19|NM|26511-6^Neutrophils/100 leukocytes in Blood^LN^^^^^^Neutrophils/100 leukocytes in Blood||55|%^percent^UCUM|50 to 73|N|||F|||20110103143428-0800|||||20110103163428-0800||||Century Hospital^^^^^NIST-AA-1^XX^^^987|2070 Test Park^^Los Angeles^CA^90067^^B|2343242^Knowsalot^Phil^^^Dr.^^^NIST-AA-1^L^^^DN -OBX|20|CWE|38892-6^Anisocytosis [Presence] in Blood^LN^^^^^^Anisocytosis [Presence] in Blood||260348001^Present ++ out of ++++^SCT^^^^^^Moderate Anisocytosis|||A|||F|||20110103143428-0800|||||20110103163428-0800||||Century Hospital^^^^^NIST-AA-1^XX^^^987|2070 Test Park^^Los Angeles^CA^90067^^B|2343242^Knowsalot^Phil^^^Dr.^^^NIST-AA-1^L^^^DN -OBX|21|CWE|30400-6^Hypochromia [Presence] in Blood^LN^^^^^^Hypochromia [Presence] in Blood||260415000^not detected^SCT^^^^^^None seen|||N|||F|||20110103143428-0800|||||20110103163428-0800||||Century Hospital^^^^^NIST-AA-1^XX^^^987|2070 Test Park^^Los Angeles^CA^90067^^B|2343242^Knowsalot^Phil^^^Dr.^^^NIST-AA-1^L^^^DN -OBX|22|CWE|30424-6^Macrocytes [Presence] in Blood^LN^^^^^^Macrocytes [Presence] in Blood||260415000^not detected^SCT^^^^^^None seen|||N|||F|||20110103143428-0800|||||20110103163428-0800||||Century Hospital^^^^^NIST-AA-1^XX^^^987|2070 Test Park^^Los Angeles^CA^90067^^B|2343242^Knowsalot^Phil^^^Dr.^^^NIST-AA-1^L^^^DN -OBX|23|CWE|30434-5^Microcytes [Presence] in Blood^LN^^^^^^Microcytes [Presence] in Blood||260415000^not detected^SCT^^^^^^None seen|||N|||F|||20110103143428-0800|||||20110103163428-0800||||Century Hospital^^^^^NIST-AA-1^XX^^^987|2070 Test Park^^Los Angeles^CA^90067^^B|2343242^Knowsalot^Phil^^^Dr.^^^NIST-AA-1^L^^^DN -OBX|24|CWE|779-9^Poikilocytosis [Presence] in Blood by Light microscopy^LN^^^^^^Poikilocytosis [Presence] in Blood by Light microscopy||260415000^not detected^SCT^^^^^^None seen|||N|||F|||20110103143428-0800|||||20110103163428-0800||||Century Hospital^^^^^NIST-AA-1^XX^^^987|2070 Test Park^^Los Angeles^CA^90067^^B|2343242^Knowsalot^Phil^^^Dr.^^^NIST-AA-1^L^^^DN -OBX|25|CWE|10378-8^Polychromasia [Presence] in Blood by Light microscopy^LN^^^^^^Polychromasia [Presence] in Blood by Light microscopy||260415000^not detected^SCT^^^^^^None seen|||N|||F|||20110103143428-0800|||||20110103163428-0800||||Century Hospital^^^^^NIST-AA-1^XX^^^987|2070 Test Park^^Los Angeles^CA^90067^^B|2343242^Knowsalot^Phil^^^Dr.^^^NIST-AA-1^L^^^DN -OBX|26|TX|6742-1^Erythrocyte morphology finding [Identifier] in Blood^LN^^^^^^Erythrocyte morphology finding [Identifier] in Blood||Many spherocytes present.|||A|||F|||20110103143428-0800|||||20110103163428-0800||||Century Hospital^^^^^NIST-AA-1^XX^^^987|2070 Test Park^^Los Angeles^CA^90067^^B|2343242^Knowsalot^Phil^^^Dr.^^^NIST-AA-1^L^^^DN -OBX|27|TX|11156-7^Leukocyte morphology finding [Identifier] in Blood^LN^^^^^^Leukocyte morphology finding [Identifier] in Blood||Reactive morphology in lymphoid cells.|||A|||F|||20110103143428-0800|||||20110103163428-0800||||Century Hospital^^^^^NIST-AA-1^XX^^^987|2070 Test Park^^Los Angeles^CA^90067^^B|2343242^Knowsalot^Phil^^^Dr.^^^NIST-AA-1^L^^^DN -OBX|28|TX|11125-2^Platelet morphology finding [Identifier] in Blood^LN^^^^^^Platelet morphology finding [Identifier] in Blood||Platelets show defective granulation.|||A|||F|||20110103143428-0800|||||20110103163428-0800||||Century Hospital^^^^^NIST-AA-1^XX^^^987|2070 Test Park^^Los Angeles^CA^90067^^B|2343242^Knowsalot^Phil^^^Dr.^^^NIST-AA-1^L^^^DN -SPM|1|||119297000^BLD^SCT^^^^^^Blood|||||||||||||20110103143428-0800 -"; - - [Fact] - public void GivenAValidTemplateDirectory_WhenConvert_CorrectResultShouldBeReturned() - { - var processor = new Hl7v2Processor(); - var templateProvider = new Hl7v2TemplateProvider(Constants.Hl7v2TemplateDirectory); - var result = processor.Convert(TestData, "ORU_R01", templateProvider); - Assert.True(result.Length > 0); - } - - [Fact] - public void GivenAValidTemplateCollection_WhenConvert_CorrectResultShouldBeReturned() - { - var processor = new Hl7v2Processor(); - var templateCollection = new List> - { - new Dictionary - { - { "TemplateName", Template.Parse(@"{""a"":""b""}") }, - }, - }; - - var templateProvider = new Hl7v2TemplateProvider(templateCollection); - var result = processor.Convert(TestData, "TemplateName", templateProvider); - Assert.True(result.Length > 0); - } - - [Fact] - public void GivenInvalidTemplateProviderOrName_WhenConvert_ExceptionsShouldBeThrown() - { - var processor = new Hl7v2Processor(); - var templateCollection = new List> - { - new Dictionary - { - { "TemplateName", Template.Parse(@"{""a"":""b""}") }, - }, - }; - - var templateProvider = new Hl7v2TemplateProvider(templateCollection); - - // Null, empty or nonexistent root template - var exception = Assert.Throws(() => processor.Convert(TestData, null, templateProvider)); - Assert.Equal(FhirConverterErrorCode.NullOrEmptyRootTemplate, exception.FhirConverterErrorCode); - - exception = Assert.Throws(() => processor.Convert(TestData, string.Empty, templateProvider)); - Assert.Equal(FhirConverterErrorCode.NullOrEmptyRootTemplate, exception.FhirConverterErrorCode); - - exception = Assert.Throws(() => processor.Convert(TestData, "NonExistentTemplateName", templateProvider)); - Assert.Equal(FhirConverterErrorCode.TemplateNotFound, exception.FhirConverterErrorCode); - - // Null TemplateProvider - exception = Assert.Throws(() => processor.Convert(TestData, "TemplateName", null)); - Assert.Equal(FhirConverterErrorCode.NullTemplateProvider, exception.FhirConverterErrorCode); - } - - [Fact] - public void GivenProcessorSettings_WhenConvert_CorrectResultsShouldBeReturned() - { - // Null ProcessorSettings: no time out - var processor = new Hl7v2Processor(null); - var templateProvider = new Hl7v2TemplateProvider(Constants.Hl7v2TemplateDirectory); - var result = processor.Convert(TestData, "ORU_R01", templateProvider); - Assert.True(result.Length > 0); - - // Default ProcessorSettings: no time out - processor = new Hl7v2Processor(new ProcessorSettings()); - result = processor.Convert(TestData, "ORU_R01", templateProvider); - Assert.True(result.Length > 0); - - // Positive time out ProcessorSettings: exception thrown when time out - var settings = new ProcessorSettings() - { - TimeOut = 1, - }; - - processor = new Hl7v2Processor(settings); - var exception = Assert.Throws(() => processor.Convert(TestData, "ORU_R01", templateProvider)); - Assert.Equal(FhirConverterErrorCode.TimeoutError, exception.FhirConverterErrorCode); - Assert.True(exception.InnerException is TimeoutException); - - // Negative time out ProcessorSettings: no time out - settings = new ProcessorSettings() - { - TimeOut = -1, - }; - - processor = new Hl7v2Processor(settings); - result = processor.Convert(TestData, "ORU_R01", templateProvider); - Assert.True(result.Length > 0); - } - - [Fact] - public void GivenCancellationToken_WhenConvert_CorrectResultsShouldBeReturned() - { - var processor = new Hl7v2Processor(); - var templateProvider = new Hl7v2TemplateProvider(Constants.Hl7v2TemplateDirectory); - var cts = new CancellationTokenSource(); - var result = processor.Convert(TestData, "ORU_R01", templateProvider, cts.Token); - Assert.True(result.Length > 0); - - cts.Cancel(); - Assert.Throws(() => processor.Convert(TestData, "ORU_R01", templateProvider, cts.Token)); - } - - [Fact] - public void GivenEscapedMessage_WhenConverting_ExpectedCharacterShouldBeReturned() - { - var hl7v2Processor = new Hl7v2Processor(); - var templateDirectory = Path.Join(AppDomain.CurrentDomain.BaseDirectory, Constants.TemplateDirectory, "Hl7v2"); - var inputContent = string.Join("\n", new List - { - @"MSH|^~\&|FOO|BAR|FOO|BAR|20201225000000|FOO|ADT^A01|123456|P|2.3|||||||||||", - @"PR1|1|FOO|FOO^ESCAPED ONE \T\ ESCAPED TWO^BAR|ESCAPED THREE \T\ ESCAPED FOUR|20201225000000||||||||||", - }); - var result = JObject.Parse(hl7v2Processor.Convert(inputContent, "ADT_A01", new Hl7v2TemplateProvider(templateDirectory))); - - var texts = result.SelectTokens("$.entry[?(@.resource.resourceType == 'Procedure')].resource.code.text").Select(Convert.ToString); - var expected = new List { "ESCAPED ONE & ESCAPED TWO", "ESCAPED THREE & ESCAPED FOUR" }; - Assert.NotEmpty(texts.Intersect(expected)); - } - } -} diff --git a/src/Microsoft.Health.Fhir.Liquid.Converter.UnitTests/Hl7v2/Hl7v2TemplateProviderTests.cs b/src/Microsoft.Health.Fhir.Liquid.Converter.UnitTests/Hl7v2/Hl7v2TemplateProviderTests.cs index 75a27cc2c..c129441ca 100644 --- a/src/Microsoft.Health.Fhir.Liquid.Converter.UnitTests/Hl7v2/Hl7v2TemplateProviderTests.cs +++ b/src/Microsoft.Health.Fhir.Liquid.Converter.UnitTests/Hl7v2/Hl7v2TemplateProviderTests.cs @@ -18,12 +18,12 @@ public class Hl7v2TemplateProviderTests public void GivenATemplateDirectory_WhenLoadTemplates_CorrectResultsShouldBeReturned() { // Valid template directory - var templateProvider = new Hl7v2TemplateProvider(Constants.Hl7v2TemplateDirectory); + var templateProvider = new Hl7v2TemplateProvider(TestConstants.Hl7v2TemplateDirectory); Assert.NotNull(templateProvider.GetTemplate("ADT_A01")); // Invalid template directory - Assert.Throws(() => new Hl7v2TemplateProvider(string.Empty)); - Assert.Throws(() => new Hl7v2TemplateProvider(Path.Join("a", "b", "c"))); + Assert.Throws(() => new Hl7v2TemplateProvider(string.Empty)); + Assert.Throws(() => new Hl7v2TemplateProvider(Path.Join("a", "b", "c"))); // Template collection var collection = new List>() diff --git a/src/Microsoft.Health.Fhir.Liquid.Converter.UnitTests/Hl7v2/Models/Hl7v2TraceInfoTests.cs b/src/Microsoft.Health.Fhir.Liquid.Converter.UnitTests/Hl7v2/Models/Hl7v2TraceInfoTests.cs index 9e225dc40..8a28537c0 100644 --- a/src/Microsoft.Health.Fhir.Liquid.Converter.UnitTests/Hl7v2/Models/Hl7v2TraceInfoTests.cs +++ b/src/Microsoft.Health.Fhir.Liquid.Converter.UnitTests/Hl7v2/Models/Hl7v2TraceInfoTests.cs @@ -45,8 +45,7 @@ public void GivenHl7v2Data_WhenCreate_CorrectHl7v2TraceInfoShouldBeReturned() // Valid Hl7v2Data before render var content = @"MSH|^~\&|AccMgr|1|||20050110045504||ADT^A01|599102|P|2.3||| PID|1||10006579^^^1^MR^1||DUCK^DONALD^D||19241010|M||1|111 DUCK ST^^FOWL^CA^999990000^^M|1|8885551212|8885551212|1|2||40007716^^^AccMgr^VN^1|123121234|||||||||||NO "; - var parser = new Hl7v2DataParser(); - data = parser.Parse(content); + data = Hl7v2DataParser.Parse(content)[Constants.Hl7v2DataKey] as Hl7v2Data; traceInfo = Hl7v2TraceInfo.CreateTraceInfo(data); Assert.Equal(2, traceInfo.UnusedSegments.Count); Assert.Equal(27, traceInfo.UnusedSegments[1].Components.Count); @@ -58,7 +57,7 @@ public void GivenHl7v2Data_WhenCreate_CorrectHl7v2TraceInfoShouldBeReturned() // Valid Hl7v2Data after render var processor = new Hl7v2Processor(); - var templateProvider = new Hl7v2TemplateProvider(Constants.Hl7v2TemplateDirectory); + var templateProvider = new Hl7v2TemplateProvider(TestConstants.Hl7v2TemplateDirectory); _ = processor.Convert(content, "ADT_A01", templateProvider, traceInfo); Assert.Single(traceInfo.UnusedSegments); diff --git a/src/Microsoft.Health.Fhir.Liquid.Converter.UnitTests/Microsoft.Health.Fhir.Liquid.Converter.UnitTests.csproj b/src/Microsoft.Health.Fhir.Liquid.Converter.UnitTests/Microsoft.Health.Fhir.Liquid.Converter.UnitTests.csproj index 5b76199cf..31627550d 100644 --- a/src/Microsoft.Health.Fhir.Liquid.Converter.UnitTests/Microsoft.Health.Fhir.Liquid.Converter.UnitTests.csproj +++ b/src/Microsoft.Health.Fhir.Liquid.Converter.UnitTests/Microsoft.Health.Fhir.Liquid.Converter.UnitTests.csproj @@ -30,7 +30,7 @@ - + PreserveNewest diff --git a/src/Microsoft.Health.Fhir.Liquid.Converter.UnitTests/ProcessorTests.cs b/src/Microsoft.Health.Fhir.Liquid.Converter.UnitTests/ProcessorTests.cs new file mode 100644 index 000000000..e2f48d0d7 --- /dev/null +++ b/src/Microsoft.Health.Fhir.Liquid.Converter.UnitTests/ProcessorTests.cs @@ -0,0 +1,149 @@ +// ------------------------------------------------------------------------------------------------- +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License (MIT). See LICENSE in the repo root for license information. +// ------------------------------------------------------------------------------------------------- + +using System; +using System.Collections.Generic; +using System.IO; +using System.Threading; +using DotLiquid; +using Microsoft.Health.Fhir.Liquid.Converter.Ccda; +using Microsoft.Health.Fhir.Liquid.Converter.Exceptions; +using Microsoft.Health.Fhir.Liquid.Converter.Hl7v2; +using Microsoft.Health.Fhir.Liquid.Converter.Models; +using Xunit; + +namespace Microsoft.Health.Fhir.Liquid.Converter.UnitTests +{ + public class ProcessorTests + { + private static readonly string _hl7v2TestData; + private static readonly string _ccdaTestData; + + static ProcessorTests() + { + _hl7v2TestData = File.ReadAllText(Path.Join(TestConstants.SampleDataDirectory, "Hl7v2", "LRI_2.0-NG_CBC_Typ_Message.hl7")); + _ccdaTestData = File.ReadAllText(Path.Join(TestConstants.SampleDataDirectory, "Ccda", "CCD.ccda")); + } + + public static IEnumerable GetValidInputsWithTemplateDirectory() + { + yield return new object[] { new Hl7v2Processor(), new Hl7v2TemplateProvider(TestConstants.Hl7v2TemplateDirectory), _hl7v2TestData, "ORU_R01", }; + yield return new object[] { new CcdaProcessor(), new CcdaTemplateProvider(TestConstants.CcdaTemplateDirectory), _ccdaTestData, "CCD", }; + } + + public static IEnumerable GetValidInputsWithTemplateCollection() + { + var templateCollection = new List> + { + new Dictionary + { + { "TemplateName", Template.Parse(@"{""a"":""b""}") }, + }, + }; + + yield return new object[] { new Hl7v2Processor(), new Hl7v2TemplateProvider(templateCollection), _hl7v2TestData, }; + yield return new object[] { new CcdaProcessor(), new CcdaTemplateProvider(templateCollection), _ccdaTestData, }; + } + + public static IEnumerable GetValidInputsWithProcessSettings() + { + var positiveTimeOutSettings = new ProcessorSettings + { + TimeOut = 1, + }; + + var negativeTimeOutSettings = new ProcessorSettings + { + TimeOut = -1, + }; + + yield return new object[] + { + new Hl7v2Processor(null), new Hl7v2Processor(new ProcessorSettings()), new Hl7v2Processor(positiveTimeOutSettings), new Hl7v2Processor(negativeTimeOutSettings), + new Hl7v2TemplateProvider("TestTemplates"), _hl7v2TestData, + }; + yield return new object[] + { + new CcdaProcessor(null), new CcdaProcessor(new ProcessorSettings()), new CcdaProcessor(positiveTimeOutSettings), new CcdaProcessor(negativeTimeOutSettings), + new CcdaTemplateProvider("TestTemplates"), _ccdaTestData, + }; + } + + [Theory] + [MemberData(nameof(GetValidInputsWithTemplateDirectory))] + public void GivenAValidTemplateDirectory_WhenConvert_CorrectResultShouldBeReturned(IFhirConverter processor, ITemplateProvider templateProvider, string data, string rootTemplate) + { + var result = processor.Convert(data, rootTemplate, templateProvider); + Assert.True(result.Length > 0); + } + + [Theory] + [MemberData(nameof(GetValidInputsWithTemplateCollection))] + public void GivenAValidTemplateCollection_WhenConvert_CorrectResultShouldBeReturned(IFhirConverter processor, ITemplateProvider templateProvider, string data) + { + var result = processor.Convert(data, "TemplateName", templateProvider); + Assert.True(result.Length > 0); + } + + [Theory] + [MemberData(nameof(GetValidInputsWithTemplateCollection))] + public void GivenInvalidTemplateProviderOrName_WhenConvert_ExceptionsShouldBeThrown(IFhirConverter processor, ITemplateProvider templateProvider, string data) + { + // Null, empty or nonexistent root template + var exception = Assert.Throws(() => processor.Convert(data, null, templateProvider)); + Assert.Equal(FhirConverterErrorCode.NullOrEmptyRootTemplate, exception.FhirConverterErrorCode); + + exception = Assert.Throws(() => processor.Convert(data, string.Empty, templateProvider)); + Assert.Equal(FhirConverterErrorCode.NullOrEmptyRootTemplate, exception.FhirConverterErrorCode); + + exception = Assert.Throws(() => processor.Convert(data, "NonExistentTemplateName", templateProvider)); + Assert.Equal(FhirConverterErrorCode.TemplateNotFound, exception.FhirConverterErrorCode); + + // Null TemplateProvider + exception = Assert.Throws(() => processor.Convert(data, "TemplateName", null)); + Assert.Equal(FhirConverterErrorCode.NullTemplateProvider, exception.FhirConverterErrorCode); + } + + [Theory] + [MemberData(nameof(GetValidInputsWithProcessSettings))] + public void GivenProcessorSettings_WhenConvert_CorrectResultsShouldBeReturned( + IFhirConverter nullSettingProcessor, + IFhirConverter defaultSettingProcessor, + IFhirConverter positiveTimeOutProcessor, + IFhirConverter negativeTimeOutProcessor, + ITemplateProvider templateProvider, + string data) + { + // Null ProcessorSettings: no time out + var result = nullSettingProcessor.Convert(data, "TimeOutTemplate", templateProvider); + Assert.True(result.Length > 0); + + // Default ProcessorSettings: no time out + result = defaultSettingProcessor.Convert(data, "TimeOutTemplate", templateProvider); + Assert.True(result.Length > 0); + + // Positive time out ProcessorSettings: exception thrown when time out + var exception = Assert.Throws(() => positiveTimeOutProcessor.Convert(data, "TimeOutTemplate", templateProvider)); + Assert.Equal(FhirConverterErrorCode.TimeoutError, exception.FhirConverterErrorCode); + Assert.True(exception.InnerException is TimeoutException); + + // Negative time out ProcessorSettings: no time out + result = negativeTimeOutProcessor.Convert(data, "TimeOutTemplate", templateProvider); + Assert.True(result.Length > 0); + } + + [Theory] + [MemberData(nameof(GetValidInputsWithTemplateDirectory))] + public void GivenCancellationToken_WhenConvert_CorrectResultsShouldBeReturned(IFhirConverter processor, ITemplateProvider templateProvider, string data, string rootTemplate) + { + var cts = new CancellationTokenSource(); + var result = processor.Convert(data, rootTemplate, templateProvider, cts.Token); + Assert.True(result.Length > 0); + + cts.Cancel(); + Assert.Throws(() => processor.Convert(data, rootTemplate, templateProvider, cts.Token)); + } + } +} diff --git a/src/Microsoft.Health.Fhir.Liquid.Converter.UnitTests/Constants.cs b/src/Microsoft.Health.Fhir.Liquid.Converter.UnitTests/TestConstants.cs similarity index 95% rename from src/Microsoft.Health.Fhir.Liquid.Converter.UnitTests/Constants.cs rename to src/Microsoft.Health.Fhir.Liquid.Converter.UnitTests/TestConstants.cs index 6004ef136..3b6c8b197 100644 --- a/src/Microsoft.Health.Fhir.Liquid.Converter.UnitTests/Constants.cs +++ b/src/Microsoft.Health.Fhir.Liquid.Converter.UnitTests/TestConstants.cs @@ -7,7 +7,7 @@ namespace Microsoft.Health.Fhir.Liquid.Converter.UnitTests { - public static class Constants + public static class TestConstants { public static readonly string SampleDataDirectory = Path.Join("..", "..", "data", "SampleData"); public static readonly string TemplateDirectory = Path.Join("..", "..", "data", "Templates"); diff --git a/src/Microsoft.Health.Fhir.Liquid.Converter.UnitTests/TestTemplates/InvalidDotLiquidTemplate.liquid b/src/Microsoft.Health.Fhir.Liquid.Converter.UnitTests/TestTemplates/InvalidDotLiquidTemplate.liquid deleted file mode 100644 index 5b6116043..000000000 --- a/src/Microsoft.Health.Fhir.Liquid.Converter.UnitTests/TestTemplates/InvalidDotLiquidTemplate.liquid +++ /dev/null @@ -1 +0,0 @@ -{{ \ No newline at end of file diff --git a/src/Microsoft.Health.Fhir.Liquid.Converter.UnitTests/TestTemplates/TimeOutTemplate.liquid b/src/Microsoft.Health.Fhir.Liquid.Converter.UnitTests/TestTemplates/TimeOutTemplate.liquid new file mode 100644 index 000000000..2fb661aae --- /dev/null +++ b/src/Microsoft.Health.Fhir.Liquid.Converter.UnitTests/TestTemplates/TimeOutTemplate.liquid @@ -0,0 +1,3 @@ +{ + "value": [{% for i in (1..10000) -%}{{ i }},{% endfor -%}] +} \ No newline at end of file diff --git a/src/Microsoft.Health.Fhir.Liquid.Converter.UnitTests/Utilities/TemplateUtilityTests.cs b/src/Microsoft.Health.Fhir.Liquid.Converter.UnitTests/Utilities/TemplateUtilityTests.cs index 3533fea54..a80e6f6f5 100644 --- a/src/Microsoft.Health.Fhir.Liquid.Converter.UnitTests/Utilities/TemplateUtilityTests.cs +++ b/src/Microsoft.Health.Fhir.Liquid.Converter.UnitTests/Utilities/TemplateUtilityTests.cs @@ -72,24 +72,24 @@ public void GivenInvalidHl7v2TemplateContents_WhenParseTemplates_ExceptionsShoul { // Invalid DotLiquid template var templates = new Dictionary { { "ADT_A01.liquid", "{{" } }; - var exception = Assert.Throws(() => TemplateUtility.ParseTemplates(templates)); + var exception = Assert.Throws(() => TemplateUtility.ParseTemplates(templates)); Assert.Equal(FhirConverterErrorCode.TemplateSyntaxError, exception.FhirConverterErrorCode); Assert.True(exception.InnerException is SyntaxException); // Invalid JSON templates = new Dictionary { { "CodeSystem/CodeSystem.json", @"{""a""" } }; - exception = Assert.Throws(() => TemplateUtility.ParseTemplates(templates)); + exception = Assert.Throws(() => TemplateUtility.ParseTemplates(templates)); Assert.Equal(FhirConverterErrorCode.InvalidCodeMapping, exception.FhirConverterErrorCode); Assert.True(exception.InnerException is JsonException); // Null CodeSystemMapping templates = new Dictionary { { "CodeSystem/CodeSystem.json", string.Empty } }; - exception = Assert.Throws(() => TemplateUtility.ParseTemplates(templates)); + exception = Assert.Throws(() => TemplateUtility.ParseTemplates(templates)); Assert.Equal(FhirConverterErrorCode.InvalidCodeMapping, exception.FhirConverterErrorCode); // Null CodeSystemMapping.Mapping templates = new Dictionary { { "CodeSystem/CodeSystem.json", @"{""a"": ""b""}" } }; - exception = Assert.Throws(() => TemplateUtility.ParseTemplates(templates)); + exception = Assert.Throws(() => TemplateUtility.ParseTemplates(templates)); Assert.Equal(FhirConverterErrorCode.InvalidCodeMapping, exception.FhirConverterErrorCode); } @@ -98,24 +98,24 @@ public void GivenInvalidCcdaTemplateContents_WhenParseTemplates_ExceptionsShould { // Invalid DotLiquid template var templates = new Dictionary { { "CCD.liquid", "{{" } }; - var exception = Assert.Throws(() => TemplateUtility.ParseTemplates(templates)); + var exception = Assert.Throws(() => TemplateUtility.ParseTemplates(templates)); Assert.Equal(FhirConverterErrorCode.TemplateSyntaxError, exception.FhirConverterErrorCode); Assert.True(exception.InnerException is SyntaxException); // Invalid JSON templates = new Dictionary { { "ValueSet/ValueSet.json", @"{""a""" } }; - exception = Assert.Throws(() => TemplateUtility.ParseTemplates(templates)); + exception = Assert.Throws(() => TemplateUtility.ParseTemplates(templates)); Assert.Equal(FhirConverterErrorCode.InvalidCodeMapping, exception.FhirConverterErrorCode); Assert.True(exception.InnerException is JsonException); // Null ValueSetMapping templates = new Dictionary { { "ValueSet/ValueSet.json", string.Empty } }; - exception = Assert.Throws(() => TemplateUtility.ParseTemplates(templates)); + exception = Assert.Throws(() => TemplateUtility.ParseTemplates(templates)); Assert.Equal(FhirConverterErrorCode.InvalidCodeMapping, exception.FhirConverterErrorCode); // Null ValueSetMapping.Mapping templates = new Dictionary { { "ValueSet/ValueSet.json", @"{""a"": ""b""}" } }; - exception = Assert.Throws(() => TemplateUtility.ParseTemplates(templates)); + exception = Assert.Throws(() => TemplateUtility.ParseTemplates(templates)); Assert.Equal(FhirConverterErrorCode.InvalidCodeMapping, exception.FhirConverterErrorCode); } } diff --git a/src/Microsoft.Health.Fhir.Liquid.Converter/BaseProcessor.cs b/src/Microsoft.Health.Fhir.Liquid.Converter/BaseProcessor.cs index f02c54e9b..460cdc65d 100644 --- a/src/Microsoft.Health.Fhir.Liquid.Converter/BaseProcessor.cs +++ b/src/Microsoft.Health.Fhir.Liquid.Converter/BaseProcessor.cs @@ -30,17 +30,14 @@ public string Convert(string data, string rootTemplate, ITemplateProvider templa public abstract string Convert(string data, string rootTemplate, ITemplateProvider templateProvider, TraceInfo traceInfo = null); - protected virtual Context CreateContext(ITemplateProvider templateProvider, object data) + protected virtual Context CreateContext(ITemplateProvider templateProvider, IDictionary data) { // Load data and templates var timeout = _settings?.TimeOut ?? 0; - var dataDictionary = data is IDictionary dictionary - ? dictionary - : new Dictionary() { { "hl7v2Data", data } }; var context = new Context( - environments: new List() { Hash.FromDictionary(dataDictionary) }, + environments: new List { Hash.FromDictionary(data) }, outerScope: new Hash(), - registers: Hash.FromDictionary(new Dictionary() { { "file_system", templateProvider.GetTemplateFileSystem() } }), + registers: Hash.FromDictionary(new Dictionary { { "file_system", templateProvider.GetTemplateFileSystem() } }), errorsOutputMode: ErrorsOutputMode.Rethrow, maxIterations: 0, timeout: timeout, diff --git a/src/Microsoft.Health.Fhir.Liquid.Converter/Ccda/CcdaDataParser.cs b/src/Microsoft.Health.Fhir.Liquid.Converter/Ccda/CcdaDataParser.cs index 6a0671b14..c0e0482a6 100644 --- a/src/Microsoft.Health.Fhir.Liquid.Converter/Ccda/CcdaDataParser.cs +++ b/src/Microsoft.Health.Fhir.Liquid.Converter/Ccda/CcdaDataParser.cs @@ -14,17 +14,17 @@ namespace Microsoft.Health.Fhir.Liquid.Converter.Ccda { - public class CcdaDataParser + public static class CcdaDataParser { - public IDictionary Parse(string document) + public static IDictionary Parse(string document) { - try + if (string.IsNullOrEmpty(document)) { - if (string.IsNullOrEmpty(document)) - { - throw new DataParseException(FhirConverterErrorCode.NullOrEmptyInput, Resources.NullOrEmptyInput); - } + throw new DataParseException(FhirConverterErrorCode.NullOrEmptyInput, Resources.NullOrEmptyInput); + } + try + { var xDocument = XDocument.Parse(document); // Remove redundant namespaces to avoid appending namespace prefix before elements @@ -49,9 +49,9 @@ public IDictionary Parse(string document) // Remove line breaks in original data dataDictionary["_originalData"] = Regex.Replace(document, @"\r\n?|\n", string.Empty); - return new Dictionary() + return new Dictionary { - { "msg", dataDictionary }, + { Constants.CcdaDataKey, dataDictionary }, }; } catch (Exception ex) diff --git a/src/Microsoft.Health.Fhir.Liquid.Converter/Ccda/CcdaProcessor.cs b/src/Microsoft.Health.Fhir.Liquid.Converter/Ccda/CcdaProcessor.cs index 5760814a0..760f9914f 100644 --- a/src/Microsoft.Health.Fhir.Liquid.Converter/Ccda/CcdaProcessor.cs +++ b/src/Microsoft.Health.Fhir.Liquid.Converter/Ccda/CcdaProcessor.cs @@ -3,6 +3,7 @@ // Licensed under the MIT License (MIT). See LICENSE in the repo root for license information. // ------------------------------------------------------------------------------------------------- +using System.Collections.Generic; using System.Linq; using DotLiquid; using Microsoft.Health.Fhir.Liquid.Converter.Exceptions; @@ -14,8 +15,6 @@ namespace Microsoft.Health.Fhir.Liquid.Converter.Ccda { public class CcdaProcessor : BaseProcessor { - private readonly CcdaDataParser _dataParser = new CcdaDataParser(); - public CcdaProcessor(ProcessorSettings processorSettings = null) : base(processorSettings) { @@ -39,7 +38,7 @@ public override string Convert(string data, string rootTemplate, ITemplateProvid throw new RenderException(FhirConverterErrorCode.TemplateNotFound, string.Format(Resources.TemplateNotFound, rootTemplate)); } - var ccdaData = _dataParser.Parse(data); + var ccdaData = CcdaDataParser.Parse(data); var context = CreateContext(templateProvider, ccdaData); var rawResult = RenderTemplates(template, context); var result = PostProcessor.Process(rawResult); @@ -47,10 +46,10 @@ public override string Convert(string data, string rootTemplate, ITemplateProvid return result.ToString(Formatting.Indented); } - protected override Context CreateContext(ITemplateProvider templateProvider, object ccdaData) + protected override Context CreateContext(ITemplateProvider templateProvider, IDictionary data) { // Load value set mapping - var context = base.CreateContext(templateProvider, ccdaData); + var context = base.CreateContext(templateProvider, data); var codeMapping = templateProvider.GetTemplate("ValueSet/ValueSet"); if (codeMapping?.Root?.NodeList?.First() != null) { diff --git a/src/Microsoft.Health.Fhir.Liquid.Converter/Ccda/CcdaTemplateProvider.cs b/src/Microsoft.Health.Fhir.Liquid.Converter/Ccda/CcdaTemplateProvider.cs index bcb4ebb5a..37b525c59 100644 --- a/src/Microsoft.Health.Fhir.Liquid.Converter/Ccda/CcdaTemplateProvider.cs +++ b/src/Microsoft.Health.Fhir.Liquid.Converter/Ccda/CcdaTemplateProvider.cs @@ -5,34 +5,20 @@ using System.Collections.Generic; using DotLiquid; -using DotLiquid.FileSystems; -using Microsoft.Health.Fhir.Liquid.Converter.DotLiquids; using Microsoft.Health.Fhir.Liquid.Converter.Models; namespace Microsoft.Health.Fhir.Liquid.Converter.Ccda { - public class CcdaTemplateProvider : ITemplateProvider + public class CcdaTemplateProvider : TemplateProvider { - private readonly IFhirConverterTemplateFileSystem _fileSystem; - public CcdaTemplateProvider(string templateDirectory) + : base(templateDirectory, DataType.Ccda) { - _fileSystem = new TemplateLocalFileSystem(templateDirectory, DataType.Ccda); } public CcdaTemplateProvider(List> templateCollection) + : base(templateCollection) { - _fileSystem = new MemoryFileSystem(templateCollection); - } - - public Template GetTemplate(string templateName) - { - return _fileSystem.GetTemplate(templateName); - } - - public ITemplateFileSystem GetTemplateFileSystem() - { - return _fileSystem; } } } diff --git a/src/Microsoft.Health.Fhir.Liquid.Converter/Constants.cs b/src/Microsoft.Health.Fhir.Liquid.Converter/Constants.cs new file mode 100644 index 000000000..ea79418de --- /dev/null +++ b/src/Microsoft.Health.Fhir.Liquid.Converter/Constants.cs @@ -0,0 +1,13 @@ +// ------------------------------------------------------------------------------------------------- +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License (MIT). See LICENSE in the repo root for license information. +// ------------------------------------------------------------------------------------------------- + +namespace Microsoft.Health.Fhir.Liquid.Converter +{ + public static class Constants + { + public const string Hl7v2DataKey = "hl7v2Data"; + public const string CcdaDataKey = "msg"; + } +} diff --git a/src/Microsoft.Health.Fhir.Liquid.Converter/IFhirConverterTemplateFileSystem.cs b/src/Microsoft.Health.Fhir.Liquid.Converter/DotLiquids/IFhirConverterTemplateFileSystem.cs similarity index 90% rename from src/Microsoft.Health.Fhir.Liquid.Converter/IFhirConverterTemplateFileSystem.cs rename to src/Microsoft.Health.Fhir.Liquid.Converter/DotLiquids/IFhirConverterTemplateFileSystem.cs index 793da8ae4..1d54def84 100644 --- a/src/Microsoft.Health.Fhir.Liquid.Converter/IFhirConverterTemplateFileSystem.cs +++ b/src/Microsoft.Health.Fhir.Liquid.Converter/DotLiquids/IFhirConverterTemplateFileSystem.cs @@ -6,7 +6,7 @@ using DotLiquid; using DotLiquid.FileSystems; -namespace Microsoft.Health.Fhir.Liquid.Converter +namespace Microsoft.Health.Fhir.Liquid.Converter.DotLiquids { public interface IFhirConverterTemplateFileSystem : ITemplateFileSystem { diff --git a/src/Microsoft.Health.Fhir.Liquid.Converter/DotLiquids/TemplateLocalFileSystem.cs b/src/Microsoft.Health.Fhir.Liquid.Converter/DotLiquids/TemplateLocalFileSystem.cs index 7bd926116..c00182f14 100644 --- a/src/Microsoft.Health.Fhir.Liquid.Converter/DotLiquids/TemplateLocalFileSystem.cs +++ b/src/Microsoft.Health.Fhir.Liquid.Converter/DotLiquids/TemplateLocalFileSystem.cs @@ -24,13 +24,11 @@ public TemplateLocalFileSystem(string templateDirectory, DataType dataType) { if (!Directory.Exists(templateDirectory)) { - throw new ConverterInitializeException(FhirConverterErrorCode.TemplateFolderNotFound, string.Format(Resources.TemplateFolderNotFound, templateDirectory)); + throw new TemplateLoadException(FhirConverterErrorCode.TemplateFolderNotFound, string.Format(Resources.TemplateFolderNotFound, templateDirectory)); } _templateDirectory = templateDirectory; _templateCache = new Dictionary(); - - LoadMappingTemplate(dataType); } public string ReadTemplateFile(Context context, string templateName) @@ -63,39 +61,28 @@ public Template GetTemplate(string templateName) } // If not cached, search local file system - var templatePath = GetAbsoluteTemplatePath(templateName); - if (File.Exists(templatePath)) - { - var templateContent = LoadTemplate(templatePath); - var template = TemplateUtility.ParseTemplate(templateName, templateContent); - _templateCache[templateName] = template; - return template; - } - - return null; - } + var templateContent = ReadTemplateFile(templateName); + var template = IsCodeMappingTemplate(templateName) ? TemplateUtility.ParseCodeMapping(templateContent) : TemplateUtility.ParseTemplate(templateName, templateContent); + var key = IsCodeMappingTemplate(templateName) ? $"{templateName}/{templateName}" : templateName; - private void LoadMappingTemplate(DataType dataType) - { - var mappingFileType = dataType == DataType.Hl7v2 ? "CodeSystem" : "ValueSet"; - var codeMappingPath = Path.Join(_templateDirectory, mappingFileType, $"{mappingFileType}.json"); - if (File.Exists(codeMappingPath)) + if (template != null) { - var content = LoadTemplate(codeMappingPath); - var template = TemplateUtility.ParseCodeMapping(content); - _templateCache[$"{mappingFileType}/{mappingFileType}"] = template; + _templateCache[key] = template; } + + return template; } - private string LoadTemplate(string templatePath) + private string ReadTemplateFile(string templateName) { try { - return File.ReadAllText(templatePath); + var templatePath = GetAbsoluteTemplatePath(templateName); + return File.Exists(templatePath) ? File.ReadAllText(templatePath) : null; } catch (Exception ex) { - throw new ConverterInitializeException(FhirConverterErrorCode.TemplateLoadingError, string.Format(Resources.TemplateLoadingError, ex.Message), ex); + throw new TemplateLoadException(FhirConverterErrorCode.TemplateLoadingError, string.Format(Resources.TemplateLoadingError, ex.Message), ex); } } @@ -111,9 +98,15 @@ private string GetAbsoluteTemplatePath(string templateName) } // Snippets - pathSegments[^1] = $"_{pathSegments[^1]}.liquid"; + pathSegments[^1] = IsCodeMappingTemplate(templateName) ? $"{pathSegments[^1]}.json" : $"_{pathSegments[^1]}.liquid"; return pathSegments.Aggregate(result, Path.Join); } + + private static bool IsCodeMappingTemplate(string templateName) + { + return string.Equals("CodeSystem/CodeSystem", templateName, StringComparison.InvariantCultureIgnoreCase) || + string.Equals("ValueSet/ValueSet", templateName, StringComparison.InvariantCultureIgnoreCase); + } } } diff --git a/src/Microsoft.Health.Fhir.Liquid.Converter/Exceptions/ConverterInitializeException.cs b/src/Microsoft.Health.Fhir.Liquid.Converter/Exceptions/TemplateLoadException.cs similarity index 68% rename from src/Microsoft.Health.Fhir.Liquid.Converter/Exceptions/ConverterInitializeException.cs rename to src/Microsoft.Health.Fhir.Liquid.Converter/Exceptions/TemplateLoadException.cs index 40e352f00..502575fad 100644 --- a/src/Microsoft.Health.Fhir.Liquid.Converter/Exceptions/ConverterInitializeException.cs +++ b/src/Microsoft.Health.Fhir.Liquid.Converter/Exceptions/TemplateLoadException.cs @@ -8,14 +8,14 @@ namespace Microsoft.Health.Fhir.Liquid.Converter.Exceptions { - public class ConverterInitializeException : FhirConverterException + public class TemplateLoadException : FhirConverterException { - public ConverterInitializeException(FhirConverterErrorCode fhirConverterErrorCode, string message) + public TemplateLoadException(FhirConverterErrorCode fhirConverterErrorCode, string message) : base(fhirConverterErrorCode, message) { } - public ConverterInitializeException(FhirConverterErrorCode fhirConverterErrorCode, string message, Exception innerException) + public TemplateLoadException(FhirConverterErrorCode fhirConverterErrorCode, string message, Exception innerException) : base(fhirConverterErrorCode, message, innerException) { } diff --git a/src/Microsoft.Health.Fhir.Liquid.Converter/Extensions/StringExtensions.cs b/src/Microsoft.Health.Fhir.Liquid.Converter/Extensions/StringExtensions.cs index b218ea9a4..3909784bf 100644 --- a/src/Microsoft.Health.Fhir.Liquid.Converter/Extensions/StringExtensions.cs +++ b/src/Microsoft.Health.Fhir.Liquid.Converter/Extensions/StringExtensions.cs @@ -22,7 +22,7 @@ public static int IndexOfNthOccurrence(this string s, char c, int n) .Skip(n - 1) .FirstOrDefault(); - return result != null ? result.Index : -1; + return result?.Index ?? -1; } } } diff --git a/src/Microsoft.Health.Fhir.Liquid.Converter/Filters/CollectionFilters.cs b/src/Microsoft.Health.Fhir.Liquid.Converter/Filters/CollectionFilters.cs index 900c4720f..61b3a0f9f 100644 --- a/src/Microsoft.Health.Fhir.Liquid.Converter/Filters/CollectionFilters.cs +++ b/src/Microsoft.Health.Fhir.Liquid.Converter/Filters/CollectionFilters.cs @@ -8,6 +8,9 @@ using System.Linq; using System.Text; using DotLiquid; +using Microsoft.Health.Fhir.Liquid.Converter.DotLiquids; +using Microsoft.Health.Fhir.Liquid.Converter.Exceptions; +using Microsoft.Health.Fhir.Liquid.Converter.Models; namespace Microsoft.Health.Fhir.Liquid.Converter { @@ -33,13 +36,19 @@ public static List Concat(List l1, List l2) public static string BatchRender(Context context, List collection, string templateName, string variableName) { - var sb = new StringBuilder(); var templateFileSystem = context.Registers["file_system"] as IFhirConverterTemplateFileSystem; var template = templateFileSystem?.GetTemplate(templateName); + + if (template == null) + { + throw new RenderException(FhirConverterErrorCode.TemplateNotFound, string.Format(Resources.TemplateNotFound, templateName)); + } + + var sb = new StringBuilder(); collection?.ForEach(entry => { context[variableName] = entry; - sb.Append(template?.Render(RenderParameters.FromContext(context, CultureInfo.InvariantCulture))); + sb.Append(template.Render(RenderParameters.FromContext(context, CultureInfo.InvariantCulture))); }); return sb.ToString(); diff --git a/src/Microsoft.Health.Fhir.Liquid.Converter/Hl7v2/Hl7v2DataParser.cs b/src/Microsoft.Health.Fhir.Liquid.Converter/Hl7v2/Hl7v2DataParser.cs index 4995e38ec..ce174d5bf 100644 --- a/src/Microsoft.Health.Fhir.Liquid.Converter/Hl7v2/Hl7v2DataParser.cs +++ b/src/Microsoft.Health.Fhir.Liquid.Converter/Hl7v2/Hl7v2DataParser.cs @@ -13,23 +13,24 @@ namespace Microsoft.Health.Fhir.Liquid.Converter.Hl7v2 { - public class Hl7v2DataParser + public static class Hl7v2DataParser { - private readonly Hl7v2DataValidator _validator = new Hl7v2DataValidator(); + private static readonly Hl7v2DataValidator Validator = new Hl7v2DataValidator(); private static readonly string[] SegmentSeparators = { "\r\n", "\r", "\n" }; - public Hl7v2Data Parse(string message) + public static IDictionary Parse(string message) { - var result = new Hl7v2Data(message); + if (string.IsNullOrEmpty(message)) + { + throw new DataParseException(FhirConverterErrorCode.NullOrEmptyInput, Resources.NullOrEmptyInput); + } + try { - if (string.IsNullOrEmpty(message)) - { - throw new DataParseException(FhirConverterErrorCode.NullOrEmptyInput, Resources.NullOrEmptyInput); - } + var result = new Hl7v2Data(message); var segments = message.Split(SegmentSeparators, StringSplitOptions.RemoveEmptyEntries); - _validator.ValidateMessageHeader(segments[0]); + Validator.ValidateMessageHeader(segments[0]); var encodingCharacters = ParseHl7v2EncodingCharacters(segments[0]); result.EncodingCharacters = encodingCharacters; @@ -40,16 +41,19 @@ public Hl7v2Data Parse(string message) result.Meta.Add(fields.First()?.Value ?? string.Empty); result.Data.Add(segment); } + + return new Dictionary + { + { Constants.Hl7v2DataKey, result }, + }; } catch (Exception ex) { throw new DataParseException(FhirConverterErrorCode.InputParsingError, string.Format(Resources.InputParsingError, ex.Message), ex); } - - return result; } - private List ParseFields(string dataString, Hl7v2EncodingCharacters encodingCharacters, bool isHeaderSegment = false) + private static List ParseFields(string dataString, Hl7v2EncodingCharacters encodingCharacters, bool isHeaderSegment = false) { var fields = new List(); var fieldValues = dataString.Split(encodingCharacters.FieldSeparator); @@ -69,12 +73,12 @@ private List ParseFields(string dataString, Hl7v2EncodingCharacters fields.Add(fieldSeparatorField); // encoding characters - var seperatorFieldComponents = new List + var separatorFieldComponents = new List { null, new Hl7v2Component(fieldValues[f], new List { null, fieldValues[f] }), }; - var separatorField = new Hl7v2Field(fieldValues[f], seperatorFieldComponents); + var separatorField = new Hl7v2Field(fieldValues[f], separatorFieldComponents); fields.Add(separatorField); } else @@ -114,7 +118,7 @@ private List ParseFields(string dataString, Hl7v2EncodingCharacters return fields; } - private List ParseComponents(string dataString, Hl7v2EncodingCharacters encodingCharacters) + private static List ParseComponents(string dataString, Hl7v2EncodingCharacters encodingCharacters) { // Add a null value at first to keep consistent indexes with HL7 v2 spec var components = new List { null }; @@ -136,7 +140,7 @@ private List ParseComponents(string dataString, Hl7v2EncodingCha return components; } - private List ParseSubcomponents(string dataString, Hl7v2EncodingCharacters encodingCharacters) + private static List ParseSubcomponents(string dataString, Hl7v2EncodingCharacters encodingCharacters) { // Add a null value at first to keep consistent indexes with HL7 v2 spec var subcomponents = new List() { null }; @@ -149,7 +153,7 @@ private List ParseSubcomponents(string dataString, Hl7v2EncodingCharacte return subcomponents; } - private Hl7v2EncodingCharacters ParseHl7v2EncodingCharacters(string headerSegment) + private static Hl7v2EncodingCharacters ParseHl7v2EncodingCharacters(string headerSegment) { return new Hl7v2EncodingCharacters { @@ -161,7 +165,7 @@ private Hl7v2EncodingCharacters ParseHl7v2EncodingCharacters(string headerSegmen }; } - private string NormalizeText(string value, Hl7v2EncodingCharacters encodingCharacters) + private static string NormalizeText(string value, Hl7v2EncodingCharacters encodingCharacters) { var semanticalUnescape = Hl7v2EscapeSequenceProcessor.Unescape(value, encodingCharacters); var grammarEscape = SpecialCharProcessor.Escape(semanticalUnescape); diff --git a/src/Microsoft.Health.Fhir.Liquid.Converter/Hl7v2/Hl7v2Processor.cs b/src/Microsoft.Health.Fhir.Liquid.Converter/Hl7v2/Hl7v2Processor.cs index b80a7b844..cd476dd9e 100644 --- a/src/Microsoft.Health.Fhir.Liquid.Converter/Hl7v2/Hl7v2Processor.cs +++ b/src/Microsoft.Health.Fhir.Liquid.Converter/Hl7v2/Hl7v2Processor.cs @@ -3,6 +3,7 @@ // Licensed under the MIT License (MIT). See LICENSE in the repo root for license information. // ------------------------------------------------------------------------------------------------- +using System.Collections.Generic; using System.Linq; using DotLiquid; using Microsoft.Health.Fhir.Liquid.Converter.Exceptions; @@ -15,8 +16,6 @@ namespace Microsoft.Health.Fhir.Liquid.Converter.Hl7v2 { public class Hl7v2Processor : BaseProcessor { - private readonly Hl7v2DataParser _dataParser = new Hl7v2DataParser(); - public Hl7v2Processor(ProcessorSettings processorSettings = null) : base(processorSettings) { @@ -40,22 +39,22 @@ public override string Convert(string data, string rootTemplate, ITemplateProvid throw new RenderException(FhirConverterErrorCode.TemplateNotFound, string.Format(Resources.TemplateNotFound, rootTemplate)); } - var hl7v2Data = _dataParser.Parse(data); + var hl7v2Data = Hl7v2DataParser.Parse(data); var context = CreateContext(templateProvider, hl7v2Data); var rawResult = RenderTemplates(template, context); var result = PostProcessor.Process(rawResult); if (traceInfo is Hl7v2TraceInfo hl7V2TraceInfo) { - hl7V2TraceInfo.UnusedSegments = Hl7v2TraceInfo.CreateTraceInfo(hl7v2Data).UnusedSegments; + hl7V2TraceInfo.UnusedSegments = Hl7v2TraceInfo.CreateTraceInfo(hl7v2Data[Constants.Hl7v2DataKey] as Hl7v2Data).UnusedSegments; } return result.ToString(Formatting.Indented); } - protected override Context CreateContext(ITemplateProvider templateProvider, object hl7v2Data) + protected override Context CreateContext(ITemplateProvider templateProvider, IDictionary data) { // Load code system mapping - var context = base.CreateContext(templateProvider, hl7v2Data); + var context = base.CreateContext(templateProvider, data); var codeMapping = templateProvider.GetTemplate("CodeSystem/CodeSystem"); if (codeMapping?.Root?.NodeList?.First() != null) { diff --git a/src/Microsoft.Health.Fhir.Liquid.Converter/Hl7v2/Hl7v2TemplateProvider.cs b/src/Microsoft.Health.Fhir.Liquid.Converter/Hl7v2/Hl7v2TemplateProvider.cs index a5eb6b1c9..b4a520a9c 100644 --- a/src/Microsoft.Health.Fhir.Liquid.Converter/Hl7v2/Hl7v2TemplateProvider.cs +++ b/src/Microsoft.Health.Fhir.Liquid.Converter/Hl7v2/Hl7v2TemplateProvider.cs @@ -5,34 +5,20 @@ using System.Collections.Generic; using DotLiquid; -using DotLiquid.FileSystems; -using Microsoft.Health.Fhir.Liquid.Converter.DotLiquids; using Microsoft.Health.Fhir.Liquid.Converter.Models; namespace Microsoft.Health.Fhir.Liquid.Converter.Hl7v2 { - public class Hl7v2TemplateProvider : ITemplateProvider + public class Hl7v2TemplateProvider : TemplateProvider { - private readonly IFhirConverterTemplateFileSystem _fileSystem; - public Hl7v2TemplateProvider(string templateDirectory) + : base(templateDirectory, DataType.Hl7v2) { - _fileSystem = new TemplateLocalFileSystem(templateDirectory, DataType.Hl7v2); } public Hl7v2TemplateProvider(List> templateCollection) + : base(templateCollection) { - _fileSystem = new MemoryFileSystem(templateCollection); - } - - public Template GetTemplate(string templateName) - { - return _fileSystem.GetTemplate(templateName); - } - - public ITemplateFileSystem GetTemplateFileSystem() - { - return _fileSystem; } } } diff --git a/src/Microsoft.Health.Fhir.Liquid.Converter/Hl7v2/Models/Hl7v2Component.cs b/src/Microsoft.Health.Fhir.Liquid.Converter/Hl7v2/Models/Hl7v2Component.cs index 181ccbbd5..572067e9b 100644 --- a/src/Microsoft.Health.Fhir.Liquid.Converter/Hl7v2/Models/Hl7v2Component.cs +++ b/src/Microsoft.Health.Fhir.Liquid.Converter/Hl7v2/Models/Hl7v2Component.cs @@ -38,22 +38,23 @@ public override object this[object index] IsAccessed = true; var indexString = index.ToString(); + if (string.Equals(indexString, "Value", StringComparison.InvariantCultureIgnoreCase)) { return Value; } - else if (string.Equals(indexString, "Subcomponents", StringComparison.InvariantCultureIgnoreCase)) + + if (string.Equals(indexString, "Subcomponents", StringComparison.InvariantCultureIgnoreCase)) { return Subcomponents; } - else if (int.TryParse(indexString, out int result)) + + if (int.TryParse(indexString, out int result)) { return (string)Subcomponents[result]; } - else - { - throw new RenderException(FhirConverterErrorCode.PropertyNotFound, string.Format(Resources.PropertyNotFound, indexString, this.GetType().Name)); - } + + throw new RenderException(FhirConverterErrorCode.PropertyNotFound, string.Format(Resources.PropertyNotFound, indexString, this.GetType().Name)); } } } diff --git a/src/Microsoft.Health.Fhir.Liquid.Converter/Hl7v2/Models/Hl7v2Field.cs b/src/Microsoft.Health.Fhir.Liquid.Converter/Hl7v2/Models/Hl7v2Field.cs index 397cf69d2..51117b791 100644 --- a/src/Microsoft.Health.Fhir.Liquid.Converter/Hl7v2/Models/Hl7v2Field.cs +++ b/src/Microsoft.Health.Fhir.Liquid.Converter/Hl7v2/Models/Hl7v2Field.cs @@ -37,28 +37,30 @@ public override object this[object index] } var indexString = index.ToString(); + if (string.Equals(indexString, "Value", StringComparison.InvariantCultureIgnoreCase)) { SetAccessForAllComponents(); return Value; } - else if (string.Equals(indexString, "Components", StringComparison.InvariantCultureIgnoreCase)) + + if (string.Equals(indexString, "Components", StringComparison.InvariantCultureIgnoreCase)) { return Components; } - else if (string.Equals(indexString, "Repeats", StringComparison.InvariantCultureIgnoreCase)) + + if (string.Equals(indexString, "Repeats", StringComparison.InvariantCultureIgnoreCase)) { SetAccessForAllComponents(); return Repeats; } - else if (int.TryParse(indexString, out int result)) + + if (int.TryParse(indexString, out int result)) { return (Hl7v2Component)Components[result]; } - else - { - throw new RenderException(FhirConverterErrorCode.PropertyNotFound, string.Format(Resources.PropertyNotFound, indexString, this.GetType().Name)); - } + + throw new RenderException(FhirConverterErrorCode.PropertyNotFound, string.Format(Resources.PropertyNotFound, indexString, this.GetType().Name)); } } diff --git a/src/Microsoft.Health.Fhir.Liquid.Converter/Hl7v2/Models/Hl7v2Segment.cs b/src/Microsoft.Health.Fhir.Liquid.Converter/Hl7v2/Models/Hl7v2Segment.cs index d0e330065..e869993ed 100644 --- a/src/Microsoft.Health.Fhir.Liquid.Converter/Hl7v2/Models/Hl7v2Segment.cs +++ b/src/Microsoft.Health.Fhir.Liquid.Converter/Hl7v2/Models/Hl7v2Segment.cs @@ -34,23 +34,24 @@ public override object this[object index] } var indexString = index.ToString(); + if (string.Equals(indexString, "Value", StringComparison.InvariantCultureIgnoreCase)) { SetAccessForAllComponents(); return Value; } - else if (string.Equals(indexString, "Fields", StringComparison.InvariantCultureIgnoreCase)) + + if (string.Equals(indexString, "Fields", StringComparison.InvariantCultureIgnoreCase)) { return Fields; } - else if (int.TryParse(indexString, out int result)) + + if (int.TryParse(indexString, out int result)) { return (Hl7v2Field)Fields[result]; } - else - { - throw new RenderException(FhirConverterErrorCode.PropertyNotFound, string.Format(Resources.PropertyNotFound, indexString, this.GetType().Name)); - } + + throw new RenderException(FhirConverterErrorCode.PropertyNotFound, string.Format(Resources.PropertyNotFound, indexString, this.GetType().Name)); } } diff --git a/src/Microsoft.Health.Fhir.Liquid.Converter/Models/FhirConverterErrorCode.cs b/src/Microsoft.Health.Fhir.Liquid.Converter/Models/FhirConverterErrorCode.cs index cde11cbe0..a4e50c747 100644 --- a/src/Microsoft.Health.Fhir.Liquid.Converter/Models/FhirConverterErrorCode.cs +++ b/src/Microsoft.Health.Fhir.Liquid.Converter/Models/FhirConverterErrorCode.cs @@ -12,7 +12,7 @@ namespace Microsoft.Health.Fhir.Liquid.Converter.Models /// public enum FhirConverterErrorCode { - // InitializeException + // TemplateLoadException TemplateFolderNotFound = 1101, TemplateLoadingError = 1102, InvalidCodeMapping = 1103, diff --git a/src/Microsoft.Health.Fhir.Liquid.Converter/OutputProcessor/PostProcessor.cs b/src/Microsoft.Health.Fhir.Liquid.Converter/OutputProcessor/PostProcessor.cs index 86fd4d0cd..9dfe24d6b 100644 --- a/src/Microsoft.Health.Fhir.Liquid.Converter/OutputProcessor/PostProcessor.cs +++ b/src/Microsoft.Health.Fhir.Liquid.Converter/OutputProcessor/PostProcessor.cs @@ -89,6 +89,7 @@ private static JObject Merge(JObject obj1, JObject obj2) { MergeArrayHandling = MergeArrayHandling.Union, }; + obj1.Merge(obj2, setting); return obj1; diff --git a/src/Microsoft.Health.Fhir.Liquid.Converter/TemplateProvider.cs b/src/Microsoft.Health.Fhir.Liquid.Converter/TemplateProvider.cs new file mode 100644 index 000000000..52936e3af --- /dev/null +++ b/src/Microsoft.Health.Fhir.Liquid.Converter/TemplateProvider.cs @@ -0,0 +1,38 @@ +// ------------------------------------------------------------------------------------------------- +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License (MIT). See LICENSE in the repo root for license information. +// ------------------------------------------------------------------------------------------------- + +using System.Collections.Generic; +using DotLiquid; +using DotLiquid.FileSystems; +using Microsoft.Health.Fhir.Liquid.Converter.DotLiquids; +using Microsoft.Health.Fhir.Liquid.Converter.Models; + +namespace Microsoft.Health.Fhir.Liquid.Converter +{ + public class TemplateProvider : ITemplateProvider + { + private readonly IFhirConverterTemplateFileSystem _fileSystem; + + public TemplateProvider(string templateDirectory, DataType dataType) + { + _fileSystem = new TemplateLocalFileSystem(templateDirectory, dataType); + } + + public TemplateProvider(List> templateCollection) + { + _fileSystem = new MemoryFileSystem(templateCollection); + } + + public Template GetTemplate(string templateName) + { + return _fileSystem.GetTemplate(templateName); + } + + public ITemplateFileSystem GetTemplateFileSystem() + { + return _fileSystem; + } + } +} diff --git a/src/Microsoft.Health.Fhir.Liquid.Converter/Utilities/TemplateUtility.cs b/src/Microsoft.Health.Fhir.Liquid.Converter/Utilities/TemplateUtility.cs index d9980feb7..85d4f8fd3 100644 --- a/src/Microsoft.Health.Fhir.Liquid.Converter/Utilities/TemplateUtility.cs +++ b/src/Microsoft.Health.Fhir.Liquid.Converter/Utilities/TemplateUtility.cs @@ -66,9 +66,9 @@ public static Template ParseCodeMapping(string content) try { var mapping = JsonConvert.DeserializeObject(content); - if (mapping == null || mapping.Mapping == null) + if (mapping?.Mapping == null) { - throw new ConverterInitializeException(FhirConverterErrorCode.InvalidCodeMapping, Resources.InvalidCodeMapping); + throw new TemplateLoadException(FhirConverterErrorCode.InvalidCodeMapping, Resources.InvalidCodeMapping); } var template = Template.Parse(string.Empty); @@ -77,7 +77,7 @@ public static Template ParseCodeMapping(string content) } catch (JsonException ex) { - throw new ConverterInitializeException(FhirConverterErrorCode.InvalidCodeMapping, Resources.InvalidCodeMapping, ex); + throw new TemplateLoadException(FhirConverterErrorCode.InvalidCodeMapping, Resources.InvalidCodeMapping, ex); } } @@ -94,7 +94,7 @@ public static Template ParseTemplate(string templateName, string content) } catch (SyntaxException ex) { - throw new ConverterInitializeException(FhirConverterErrorCode.TemplateSyntaxError, string.Format(Resources.TemplateSyntaxError, templateName, ex.Message), ex); + throw new TemplateLoadException(FhirConverterErrorCode.TemplateSyntaxError, string.Format(Resources.TemplateSyntaxError, templateName, ex.Message), ex); } } } diff --git a/src/Microsoft.Health.Fhir.TemplateManagement.UnitTests/Providers/TemplateCollectionProviderTests.cs b/src/Microsoft.Health.Fhir.TemplateManagement.UnitTests/Providers/TemplateCollectionProviderTests.cs index 71a990b03..6a25dd29c 100644 --- a/src/Microsoft.Health.Fhir.TemplateManagement.UnitTests/Providers/TemplateCollectionProviderTests.cs +++ b/src/Microsoft.Health.Fhir.TemplateManagement.UnitTests/Providers/TemplateCollectionProviderTests.cs @@ -85,7 +85,7 @@ public static IEnumerable GetDefaultTemplatesInfo() { yield return new object[] { "microsofthealth/fhirconverter:default", 808 }; yield return new object[] { "microsofthealth/hl7v2templates:default", 808 }; - yield return new object[] { "microsofthealth/ccdatemplates:default", 835 }; + yield return new object[] { "microsofthealth/ccdatemplates:default", 839 }; } [Theory]