From 86a6d9e6da04bec4db6c5169b1c51c88d7a0630d Mon Sep 17 00:00:00 2001 From: Gabriel Dorsch Date: Mon, 16 Sep 2024 13:47:46 -0400 Subject: [PATCH] Revert "Deployment of 2024-09-12 (#15855)" This reverts commit e07ac7aaf4e5ec15fede02fca684a539b4a04dd5. --- .environment/gitleaks/gitleaks-config.toml | 2 - ...p-receiver-migration-validate-test-data.md | 17 +- .github/actions/build-backend/action.yml | 2 +- .github/actions/build-submissions/action.yml | 2 +- .github/workflows/build_hub.yml | 4 +- .github/workflows/frontend_chromatic_main.yml | 2 +- .github/workflows/frontend_ci.yml | 2 +- .github/workflows/snyk.yml | 2 +- .github/workflows/sonarcloud.yml | 2 +- .github/workflows/validate_terraform.yml | 2 +- .gitignore | 1 - .../authenticated/admin/receiver-status.ts | 196 +- .../pages/authenticated/last-mile-failures.ts | 59 - .../admin/receiver-status-page.spec.ts | 208 +- .../last-mile-failures-page.spec.ts | 6 +- .../{admin => }/message-details-page.spec.ts | 16 +- .../message-id-search-page.spec.ts | 10 +- .../organization-settings-page.spec.ts | 60 +- .../daily-data-page-user-flow.spec.ts | 17 +- .../last-mile-failures-page-user-flow.spec.ts | 98 - .../receiver-status-page-user-flow.spec.ts | 339 -- frontend-react/package.json | 50 +- .../ReportStream-Programmers-Guide-v4.5.pdf | Bin 0 -> 495911 bytes .../ReportStream-Programmers-Guide-v4.6.pdf | Bin 356968 -> 0 bytes .../ResponsesFromReportStream.mdx | 8 +- .../documentation/SamplePayloadsAndOutput.mdx | 2 +- .../getting-started/GettingStarted.mdx | 2 +- frontend-react/src/content/site.json | 2 +- frontend-react/yarn.lock | 792 ++- prime-router/build.gradle.kts | 18 +- prime-router/docs/api/reports.yml | 30 - .../Using-an-apple-silicon-mac.md | 4 +- .../fhir-to-hl7-transforms.md | 180 - .../adding-conformance-profile.md | 2 +- .../docs/universal-pipeline/README.md | 4 +- .../v251/hl7/datatypes/CE/CodeableConcept.yml | 112 + .../hl7/datatypes/CNE/CodeableConcept.yml | 175 + .../v251/hl7/datatypes/CNN/CNNExtension.yml | 70 + .../v251/hl7/datatypes/CNN/Practitioner.yml | 98 + .../v251/hl7/datatypes/CQ/Quantity.yml | 28 + .../v251/hl7/datatypes/CWE/Annotation.yml | 19 + .../hl7/datatypes/CWE/CodeableConcept.yml | 127 + .../v251/hl7/datatypes/CWE/Organization.yml | 60 + .../v251/hl7/datatypes/CX/CXExtension.yml | 46 + .../v251/hl7/datatypes/CX/Identifier.yml | 222 + .../hl7/datatypes/CX/RelatedPerson-mother.yml | 13 + .../v251/hl7/datatypes/DLD/Location.yml | 25 + .../v251/hl7/datatypes/DR/Period.yml | 51 + .../v251/hl7/datatypes/ED/Attachment.yml | 36 + .../v251/hl7/datatypes/ED/EDExtension.yml | 53 + .../EI/Identifier-DefaultAssigner.yml | 50 + .../datatypes/EI/Identifier-Organization.yml | 21 + .../v251/hl7/datatypes/EI/Identifier.yml | 92 + .../v251/hl7/datatypes/EI/Organization.yml | 47 + .../v251/hl7/datatypes/EIP/EI/ExtensionEI.yml | 60 + .../Identifier-FillerAssignedIdentifier.yml | 81 + .../Identifier-PlacerAssignedIdentifier.yml | 82 + .../FN/ExtensionHumanName-family.yml | 51 + .../HD/ExtensionAssigningAuthority.yml | 74 + .../v251/hl7/datatypes/HD/ExtensionHD.yml | 55 + .../HD/Identifier/IdentifierNamespaceId.yml | 15 + .../HD/Identifier/IdentifierUniversalId.yml | 19 + .../v251/hl7/datatypes/HD/Location.yml | 74 + .../v251/hl7/datatypes/HD/Organization.yml | 91 + .../v251/hl7/datatypes/ID/CodeableConcept.yml | 22 + .../ID/CodeableConceptUniversalid.yml | 15 + .../v251/hl7/datatypes/MOC/Extension.yml | 46 + .../v251/hl7/datatypes/MSG/Coding.yml | 24 + .../v251/hl7/datatypes/NDL/HD/Location.yml | 68 + .../v251/hl7/datatypes/NDL/IS/Location.yml | 66 + .../v251/hl7/datatypes/NDL/NDLExtension.yml | 22 + .../hl7/datatypes/NDL/PractitionerRole.yml | 147 + .../datatypes/v251/hl7/datatypes/NR/Range.yml | 17 + .../v251/hl7/datatypes/PL/Location.yml | 292 ++ .../v251/hl7/datatypes/PL/LocationBranch1.yml | 182 + .../v251/hl7/datatypes/PL/LocationBranch2.yml | 151 + .../v251/hl7/datatypes/PL/LocationBranch3.yml | 110 + .../v251/hl7/datatypes/PL/LocationBranch4.yml | 82 + .../v251/hl7/datatypes/PL/LocationBranch5.yml | 46 + .../datatypes/v251/hl7/datatypes/PT/Meta.yml | 37 + .../v251/hl7/datatypes/SN/ExtensionSN.yml | 58 + .../v251/hl7/datatypes/SN/Quantity.yml | 74 + .../datatypes/v251/hl7/datatypes/SN/Range.yml | 106 + .../datatypes/v251/hl7/datatypes/SN/Ratio.yml | 106 + .../v251/hl7/datatypes/XAD/Address.yml | 135 + .../v251/hl7/datatypes/XAD/SADExtension.yml | 46 + .../v251/hl7/datatypes/XAD/XADExtension.yml | 104 + .../v251/hl7/datatypes/XCN/Practitioner.yml | 228 + .../v251/hl7/datatypes/XCN/XCNExtension.yml | 177 + .../v251/hl7/datatypes/XON/Organization.yml | 194 + .../v251/hl7/datatypes/XON/XONExtension.yml | 34 + .../v251/hl7/datatypes/XPN/HumanName.yml | 99 + .../v251/hl7/datatypes/XPN/XPNExtension.yml | 110 + .../v251/hl7/datatypes/XTN/ContactPoint.yml | 233 + .../v251/hl7/datatypes/XTN/XTNExtension.yml | 81 + .../metadata/HL7/v251-elr/config.properties | 5 + .../HL7/v251-elr/fhir/resourcemapping.yml | 23 + .../hl7/codesystem/CodingSystemMapping.yml | 4538 +++++++++++++++++ .../hl7/codesystem/ExtensionUrlMapping.yml | 331 ++ .../hl7/datatypes/CQ_ELR/Quantity.yml | 34 + .../hl7/datatypes/CWE_ELR/Annotation.yml | 19 + .../hl7/datatypes/CWE_ELR/CodeableConcept.yml | 192 + .../v251-elr/hl7/datatypes/CWE_ELR/Coding.yml | 33 + .../hl7/datatypes/CWE_ELR/Organization.yml | 60 + .../hl7/datatypes/CWE_ELR/Quantity.yml | 46 + .../hl7/datatypes/PL_ELR/Location.yml | 292 ++ .../hl7/datatypes/PL_ELR/LocationBranch1.yml | 182 + .../hl7/datatypes/PL_ELR/LocationBranch2.yml | 151 + .../hl7/datatypes/PL_ELR/LocationBranch3.yml | 110 + .../hl7/datatypes/PL_ELR/LocationBranch4.yml | 82 + .../hl7/datatypes/PL_ELR/LocationBranch5.yml | 46 + .../hl7/datatypes/PRL_ELR/Extension.yml | 46 + .../hl7/datatypes/XPN_ELR/HumanName.yml | 102 + .../hl7/datatypes/XPN_ELR/XPNExtension.yml | 121 + .../ExtensionHierarchicDesignator.yml | 69 + .../v251-elr/hl7/extension/ExtensionMeta.yml | 74 + .../HL7/v251-elr/hl7/message/ORU_R01.yml | 99 + .../HL7/v251-elr/hl7/resource/Common.yml | 4 + .../hl7/segments/MSH/MSHExtension.yml | 119 + .../hl7/segments/MSH/MessageHeader.yml | 116 + .../hl7/segments/MSH/Provenance-Source.yml | 78 + .../MSH/Provenance-Transformation.yml | 46 + .../segments/MSH/ReportStreamOrganization.yml | 32 + .../segments/MSH/datatypes/HD/Destination.yml | 85 + .../hl7/segments/MSH/datatypes/HD/Source.yml | 139 + .../hl7/segments/MSH/segments/SFT/Source.yml | 77 + .../hl7/segments/NK1/NK1Extension.yml | 21 + .../hl7/segments/NK1/RelatedPerson.yml | 155 + .../v251-elr/hl7/segments/NTE/Annotation.yml | 44 + .../HL7/v251-elr/hl7/segments/OBX/Device.yml | 13 + .../hl7/segments/OBX/OBXExtension.yml | 115 + .../v251-elr/hl7/segments/OBX/Observation.yml | 503 ++ .../hl7/segments/OBX/PractitionerRole.yml | 36 + .../hl7/segments/ORC/DiagnosticReport.yml | 264 + .../hl7/segments/ORC/OBRExtension.yml | 340 ++ .../hl7/segments/ORC/ORCExtension.yml | 235 + .../hl7/segments/ORC/PractitionerRole.yml | 40 + .../hl7/segments/ORC/ServiceRequest.yml | 322 ++ .../v251-elr/hl7/segments/ORC/Specimen.yml | 62 + .../hl7/segments/PID/PD1Extension.yml | 215 + .../hl7/segments/PID/PIDExtension.yml | 87 + .../HL7/v251-elr/hl7/segments/PID/Patient.yml | 577 +++ .../hl7/segments/PID/Provenance-Patient.yml | 63 + .../v251-elr/hl7/segments/PV1/Encounter.yml | 509 ++ .../hl7/segments/PV1/PV1Extension.yml | 190 + .../hl7/segments/PV1/PV2Extension.yml | 59 + .../HL7/v251-elr/hl7/segments/SFT/Device.yml | 110 + .../hl7/segments/SPM/EIP/Specimen.yml | 28 + .../hl7/segments/SPM/SPMExtension.yml | 237 + .../v251-elr/hl7/segments/SPM/Specimen.yml | 232 + prime-router/settings/STLTs/NJ/nj-doh.yml | 110 - .../settings/STLTs/Oracle/oracle-rln.yml | 22 +- .../src/main/kotlin/ActionMessages.kt | 1 - prime-router/src/main/kotlin/JOOQBindings.kt | 13 +- prime-router/src/main/kotlin/MimeFormat.kt | 50 +- prime-router/src/main/kotlin/Report.kt | 16 +- .../src/main/kotlin/SubmissionReceiver.kt | 40 +- .../src/main/kotlin/azure/ActionHistory.kt | 10 +- .../src/main/kotlin/azure/BlobAccess.kt | 43 +- prime-router/src/main/kotlin/azure/Event.kt | 10 +- .../src/main/kotlin/azure/ProcessFunction.kt | 2 +- .../src/main/kotlin/azure/QueueAccess.kt | 2 +- .../src/main/kotlin/azure/ReportFunction.kt | 74 - .../src/main/kotlin/azure/RequestFunction.kt | 2 - .../src/main/kotlin/azure/SendFunction.kt | 2 +- .../kotlin/azure/SubmissionTableService.kt | 104 - .../src/main/kotlin/azure/TableAccess.kt | 123 - .../kotlin/azure/ValidateSchemasFunctions.kt | 4 +- .../src/main/kotlin/azure/WorkflowEngine.kt | 6 +- .../kotlin/azure/batch/CovidBatchFunction.kt | 2 +- .../azure/batch/UniversalBatchFunction.kt | 2 +- .../event/ReportStreamEventBuilder.kt | 6 +- .../event/ReportStreamEventData.kt | 1 - .../event/ReportStreamEventService.kt | 48 +- .../main/kotlin/cli/ConvertFileCommands.kt | 2 - .../src/main/kotlin/cli/PIIRemovalCommands.kt | 51 +- .../main/kotlin/cli/ProcessFhirCommands.kt | 202 +- .../src/main/kotlin/cli/SettingCommands.kt | 16 +- .../src/main/kotlin/cli/tests/BasicTests.kt | 2 +- .../main/kotlin/cli/tests/RemovePIITest.kt | 15 +- .../cli/tests/SyncTranslationSchemasTest.kt | 6 +- .../cli/tests}/fakePII.fhir | 0 .../src/main/kotlin/common/AzureHttpUtils.kt | 26 - .../src/main/kotlin/common/Environment.kt | 2 +- .../src/main/kotlin/common/piiremoved.json | 1930 ------- .../src/main/kotlin/common/piithere.json | 1930 ------- .../kotlin/fhirengine/azure/FHIRFunctions.kt | 42 +- .../kotlin/fhirengine/engine/FHIRConverter.kt | 35 +- .../engine/FHIRDestinationFilter.kt | 8 +- .../kotlin/fhirengine/engine/FHIREngine.kt | 9 - .../kotlin/fhirengine/engine/FHIRReceiver.kt | 378 -- .../fhirengine/engine/FHIRReceiverFilter.kt | 6 +- .../fhirengine/engine/FHIRTranslator.kt | 45 +- .../kotlin/fhirengine/engine/MessageType.kt | 64 - ...eRouterQueueMessage.kt => QueueMessage.kt} | 123 +- .../translation/hl7/FhirTransformer.kt | 2 +- .../main/kotlin/transport/RESTTransport.kt | 1 - .../common/remove-pii-address.yml | 3 +- .../common/remove-pii-name.yml | 3 +- .../common/remove-pii-telecom.yml | 2 +- .../common/suppress-device-information.yml | 27 - .../unwanted-conditions-to-notes.yml | 42 - .../STLTs/NJ/NJ-receiver-transform.yml | 59 - .../STLTs/Test/test-receiver-transform.yml | 15 - .../test/kotlin/SubmissionReceiverTests.kt | 2 +- .../test/kotlin/azure/ActionHistoryTests.kt | 20 +- .../src/test/kotlin/azure/BlobAccessTests.kt | 9 +- .../src/test/kotlin/azure/EventTest.kt | 18 +- .../test/kotlin/azure/ReportFunctionTests.kt | 137 - .../test/kotlin/azure/WorkflowEngineTests.kt | 4 +- .../common/UniversalPipelineTestUtils.kt | 16 - .../azure/FHIRConverterIntegrationTests.kt | 44 +- .../FHIRDestinationFilterIntegrationTests.kt | 11 +- .../FHIRReceiverFilterIntegrationTests.kt | 15 +- .../azure/FHIRReceiverIntegrationTests.kt | 872 ---- .../azure/FHIRTranslatorIntegrationTests.kt | 5 +- .../SubmissionTableServiceIntegrationTests.kt | 107 - .../fhirengine/engine/FHIRReceiverTests.kt | 273 - .../fhirengine/engine/FhirConverterTests.kt | 82 +- .../engine/FhirDestinationFilterTests.kt | 8 +- .../engine/FhirReceiverFilterTests.kt | 29 +- .../fhirengine/engine/FhirTranslatorTests.kt | 6 +- .../v251/CNNtoPractitionerTests.kt | 17 + .../v251/CWEtoCodeableConceptTests.kt | 105 + .../v251/NDLtoPractitionerRoleTests.kt | 17 + .../v251/XADtoAddressTests.kt | 17 + .../v251/XTNToContactPointTests.kt | 17 + .../v251elr/CQELRtoQuantityTest.kt | 17 + .../v251elr/CWEELRtoCodeableConceptTests.kt | 160 + .../v251elr/ORUR01ELRFullTest.kt | 17 + .../v251elr/PRLELRtoServiceRequestTest.kt | 17 + .../v251elr/XPNELRtoHumanNameTests.kt | 17 + .../RESTTransportIntegrationTests.kt | 58 - .../mars_unwanted_condition_to_notes.fhir | 1 - .../mars_unwanted_condition_to_notes.hl7 | 15 - .../FHIR_to_HL7/sample_NJ_20240719-0001.fhir | 1 - .../FHIR_to_HL7/sample_NJ_20240719-0001.hl7 | 14 - .../v251-elr/cq/cq-to-quantity.fhir | 259 + .../v251-elr/cq/cq-to-quantity.hl7 | 4 + .../CWE-to-CodeableConcept.csv | 25 + .../cwe-10-test-value-cwe8.fhir | 143 + .../cwe-10-test-value-cwe8.hl7 | 2 + .../cwe-11-test-value-cwe9.fhir | 137 + .../cwe-11-test-value-cwe9.hl7 | 2 + .../cwe-12-test-value-cwe10.fhir | 143 + .../cwe-12-test-value-cwe10.hl7 | 2 + .../cwe-13-test-value-cwe11.fhir | 143 + .../cwe-13-test-value-cwe11.hl7 | 2 + .../cwe-14-test-value-cwe12.fhir | 146 + .../cwe-14-test-value-cwe12.hl7 | 2 + .../cwe-15-test-value-cwe13.fhir | 143 + .../cwe-15-test-value-cwe13.hl7 | 2 + .../cwe-16-test-value-cwe14.fhir | 140 + .../cwe-16-test-value-cwe14.hl7 | 2 + .../cwe-3-test-value-cwe1.fhir | 143 + .../cwe-3-test-value-cwe1.hl7 | 2 + .../cwe-4-test-value-cwe2.fhir | 143 + .../cwe-4-test-value-cwe2.hl7 | 2 + .../cwe-5-test-value-cwe3.fhir | 146 + .../cwe-5-test-value-cwe3.hl7 | 2 + .../cwe-6-test-value-cwe4.fhir | 143 + .../cwe-6-test-value-cwe4.hl7 | 2 + .../cwe-7-test-value-cwe5.fhir | 143 + .../cwe-7-test-value-cwe5.hl7 | 2 + .../cwe-8-test-value-cwe6.fhir | 146 + .../cwe-8-test-value-cwe6.hl7 | 2 + .../cwe-9-test-value-cwe7.fhir | 143 + .../cwe-9-test-value-cwe7.hl7 | 2 + .../v251-elr/orur01/oru_r01-full.fhir | 3206 ++++++++++++ .../v251-elr/orur01/oru_r01-full.hl7 | 23 + .../v251-elr/prl/prl-to-servicerequest.fhir | 234 + .../v251-elr/prl/prl-to-servicerequest.hl7 | 3 + ...anname-xpn12-13-populated-xpn10-empty.fhir | 254 + ...manname-xpn12-13-populated-xpn10-empty.hl7 | 3 + .../v251/cnn/cnn-to-Practitioner.csv | 14 + .../v251/cnn/cnn-to-Practitioner.fhir | 235 + .../v251/cnn/cnn-to-Practitioner.hl7 | 3 + .../cwe-10-test-value-cwe8.fhir | 150 + .../cwe-10-test-value-cwe8.hl7 | 2 + .../cwe-11-test-value-cwe9.fhir | 144 + .../cwe-11-test-value-cwe9.hl7 | 2 + .../cwe-3-test-value-cwe1.fhir | 150 + .../cwe-3-test-value-cwe1.hl7 | 2 + .../cwe-4-test-value-cwe2.fhir | 150 + .../cwe-4-test-value-cwe2.hl7 | 2 + .../cwe-5-test-value-cwe3.fhir | 153 + .../cwe-5-test-value-cwe3.hl7 | 2 + .../cwe-6-test-value-cwe4.fhir | 150 + .../cwe-6-test-value-cwe4.hl7 | 2 + .../cwe-7-test-value-cwe5.fhir | 150 + .../cwe-7-test-value-cwe5.hl7 | 2 + .../cwe-8-test-value-cwe6.fhir | 153 + .../cwe-8-test-value-cwe6.hl7 | 2 + .../cwe-9-test-value-cwe7.fhir | 150 + .../cwe-9-test-value-cwe7.hl7 | 2 + .../v251/ndl/NDL-to-PractitionerRole.csv | 42 + .../v251/ndl/NDL-to-PractitionerRole.fhir | 432 ++ .../v251/ndl/NDL-to-PractitionerRole.hl7 | 3 + .../v251/xad/xad-to-address.fhir | 292 ++ .../v251/xad/xad-to-address.hl7 | 3 + .../v251/xtn/xtn-to-contact-point.fhir | 279 + .../v251/xtn/xtn-to-contact-point.hl7 | 2 + .../datatests/translation-test-config.csv | 4 +- .../resources/settings/organizations.yml | 110 - prime-router/upload_swaggerui.sh | 2 +- .../prime/reportstream/shared/BlobUtils.kt | 29 - .../prime/reportstream/shared/QueueMessage.kt | 196 - .../prime/reportstream/shared/Submission.kt | 52 - ...eceivedEvent.kt => ReportReceivedEvent.kt} | 2 +- .../submissions/config/AzureConfig.kt | 12 +- .../controllers/SubmissionController.kt | 44 +- .../src/main/resources/application.properties | 4 +- .../SubmissionControllerIntegrationTest.kt | 35 +- .../test/kotlin/SubmissionControllerTest.kt | 30 +- 314 files changed, 27000 insertions(+), 9129 deletions(-) rename frontend-react/e2e/spec/all/authenticated/{admin => }/last-mile-failures-page.spec.ts (95%) rename frontend-react/e2e/spec/all/authenticated/{admin => }/message-details-page.spec.ts (93%) rename frontend-react/e2e/spec/all/authenticated/{admin => }/message-id-search-page.spec.ts (94%) rename frontend-react/e2e/spec/all/authenticated/{admin => }/organization-settings-page.spec.ts (81%) delete mode 100644 frontend-react/e2e/spec/chromium-only/authenticated/last-mile-failures-page-user-flow.spec.ts delete mode 100644 frontend-react/e2e/spec/chromium-only/authenticated/receiver-status-page-user-flow.spec.ts create mode 100644 frontend-react/public/assets/pdf/ReportStream-Programmers-Guide-v4.5.pdf delete mode 100644 frontend-react/public/assets/pdf/ReportStream-Programmers-Guide-v4.6.pdf delete mode 100644 prime-router/docs/onboarding-users/fhir-to-hl7-transforms.md create mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/CE/CodeableConcept.yml create mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/CNE/CodeableConcept.yml create mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/CNN/CNNExtension.yml create mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/CNN/Practitioner.yml create mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/CQ/Quantity.yml create mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/CWE/Annotation.yml create mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/CWE/CodeableConcept.yml create mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/CWE/Organization.yml create mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/CX/CXExtension.yml create mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/CX/Identifier.yml create mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/CX/RelatedPerson-mother.yml create mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/DLD/Location.yml create mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/DR/Period.yml create mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/ED/Attachment.yml create mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/ED/EDExtension.yml create mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/EI/Identifier-DefaultAssigner.yml create mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/EI/Identifier-Organization.yml create mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/EI/Identifier.yml create mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/EI/Organization.yml create mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/EIP/EI/ExtensionEI.yml create mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/EIP/Identifier-FillerAssignedIdentifier.yml create mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/EIP/Identifier-PlacerAssignedIdentifier.yml create mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/FN/ExtensionHumanName-family.yml create mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/HD/ExtensionAssigningAuthority.yml create mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/HD/ExtensionHD.yml create mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierNamespaceId.yml create mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierUniversalId.yml create mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/HD/Location.yml create mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/HD/Organization.yml create mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/ID/CodeableConcept.yml create mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/ID/CodeableConceptUniversalid.yml create mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/MOC/Extension.yml create mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/MSG/Coding.yml create mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/NDL/HD/Location.yml create mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/NDL/IS/Location.yml create mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/NDL/NDLExtension.yml create mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/NDL/PractitionerRole.yml create mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/NR/Range.yml create mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/PL/Location.yml create mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/PL/LocationBranch1.yml create mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/PL/LocationBranch2.yml create mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/PL/LocationBranch3.yml create mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/PL/LocationBranch4.yml create mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/PL/LocationBranch5.yml create mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/PT/Meta.yml create mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/SN/ExtensionSN.yml create mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/SN/Quantity.yml create mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/SN/Range.yml create mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/SN/Ratio.yml create mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/XAD/Address.yml create mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/XAD/SADExtension.yml create mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/XAD/XADExtension.yml create mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/XCN/Practitioner.yml create mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/XCN/XCNExtension.yml create mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/XON/Organization.yml create mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/XON/XONExtension.yml create mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/XPN/HumanName.yml create mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/XPN/XPNExtension.yml create mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/XTN/ContactPoint.yml create mode 100644 prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/XTN/XTNExtension.yml create mode 100644 prime-router/metadata/HL7/v251-elr/config.properties create mode 100644 prime-router/metadata/HL7/v251-elr/fhir/resourcemapping.yml create mode 100644 prime-router/metadata/HL7/v251-elr/hl7/codesystem/CodingSystemMapping.yml create mode 100644 prime-router/metadata/HL7/v251-elr/hl7/codesystem/ExtensionUrlMapping.yml create mode 100644 prime-router/metadata/HL7/v251-elr/hl7/datatypes/CQ_ELR/Quantity.yml create mode 100644 prime-router/metadata/HL7/v251-elr/hl7/datatypes/CWE_ELR/Annotation.yml create mode 100644 prime-router/metadata/HL7/v251-elr/hl7/datatypes/CWE_ELR/CodeableConcept.yml create mode 100644 prime-router/metadata/HL7/v251-elr/hl7/datatypes/CWE_ELR/Coding.yml create mode 100644 prime-router/metadata/HL7/v251-elr/hl7/datatypes/CWE_ELR/Organization.yml create mode 100644 prime-router/metadata/HL7/v251-elr/hl7/datatypes/CWE_ELR/Quantity.yml create mode 100644 prime-router/metadata/HL7/v251-elr/hl7/datatypes/PL_ELR/Location.yml create mode 100644 prime-router/metadata/HL7/v251-elr/hl7/datatypes/PL_ELR/LocationBranch1.yml create mode 100644 prime-router/metadata/HL7/v251-elr/hl7/datatypes/PL_ELR/LocationBranch2.yml create mode 100644 prime-router/metadata/HL7/v251-elr/hl7/datatypes/PL_ELR/LocationBranch3.yml create mode 100644 prime-router/metadata/HL7/v251-elr/hl7/datatypes/PL_ELR/LocationBranch4.yml create mode 100644 prime-router/metadata/HL7/v251-elr/hl7/datatypes/PL_ELR/LocationBranch5.yml create mode 100644 prime-router/metadata/HL7/v251-elr/hl7/datatypes/PRL_ELR/Extension.yml create mode 100644 prime-router/metadata/HL7/v251-elr/hl7/datatypes/XPN_ELR/HumanName.yml create mode 100644 prime-router/metadata/HL7/v251-elr/hl7/datatypes/XPN_ELR/XPNExtension.yml create mode 100644 prime-router/metadata/HL7/v251-elr/hl7/extension/ExtensionHierarchicDesignator.yml create mode 100644 prime-router/metadata/HL7/v251-elr/hl7/extension/ExtensionMeta.yml create mode 100644 prime-router/metadata/HL7/v251-elr/hl7/message/ORU_R01.yml create mode 100644 prime-router/metadata/HL7/v251-elr/hl7/resource/Common.yml create mode 100644 prime-router/metadata/HL7/v251-elr/hl7/segments/MSH/MSHExtension.yml create mode 100644 prime-router/metadata/HL7/v251-elr/hl7/segments/MSH/MessageHeader.yml create mode 100644 prime-router/metadata/HL7/v251-elr/hl7/segments/MSH/Provenance-Source.yml create mode 100644 prime-router/metadata/HL7/v251-elr/hl7/segments/MSH/Provenance-Transformation.yml create mode 100644 prime-router/metadata/HL7/v251-elr/hl7/segments/MSH/ReportStreamOrganization.yml create mode 100644 prime-router/metadata/HL7/v251-elr/hl7/segments/MSH/datatypes/HD/Destination.yml create mode 100644 prime-router/metadata/HL7/v251-elr/hl7/segments/MSH/datatypes/HD/Source.yml create mode 100644 prime-router/metadata/HL7/v251-elr/hl7/segments/MSH/segments/SFT/Source.yml create mode 100644 prime-router/metadata/HL7/v251-elr/hl7/segments/NK1/NK1Extension.yml create mode 100644 prime-router/metadata/HL7/v251-elr/hl7/segments/NK1/RelatedPerson.yml create mode 100644 prime-router/metadata/HL7/v251-elr/hl7/segments/NTE/Annotation.yml create mode 100644 prime-router/metadata/HL7/v251-elr/hl7/segments/OBX/Device.yml create mode 100644 prime-router/metadata/HL7/v251-elr/hl7/segments/OBX/OBXExtension.yml create mode 100644 prime-router/metadata/HL7/v251-elr/hl7/segments/OBX/Observation.yml create mode 100644 prime-router/metadata/HL7/v251-elr/hl7/segments/OBX/PractitionerRole.yml create mode 100644 prime-router/metadata/HL7/v251-elr/hl7/segments/ORC/DiagnosticReport.yml create mode 100644 prime-router/metadata/HL7/v251-elr/hl7/segments/ORC/OBRExtension.yml create mode 100644 prime-router/metadata/HL7/v251-elr/hl7/segments/ORC/ORCExtension.yml create mode 100644 prime-router/metadata/HL7/v251-elr/hl7/segments/ORC/PractitionerRole.yml create mode 100644 prime-router/metadata/HL7/v251-elr/hl7/segments/ORC/ServiceRequest.yml create mode 100644 prime-router/metadata/HL7/v251-elr/hl7/segments/ORC/Specimen.yml create mode 100644 prime-router/metadata/HL7/v251-elr/hl7/segments/PID/PD1Extension.yml create mode 100644 prime-router/metadata/HL7/v251-elr/hl7/segments/PID/PIDExtension.yml create mode 100644 prime-router/metadata/HL7/v251-elr/hl7/segments/PID/Patient.yml create mode 100644 prime-router/metadata/HL7/v251-elr/hl7/segments/PID/Provenance-Patient.yml create mode 100644 prime-router/metadata/HL7/v251-elr/hl7/segments/PV1/Encounter.yml create mode 100644 prime-router/metadata/HL7/v251-elr/hl7/segments/PV1/PV1Extension.yml create mode 100644 prime-router/metadata/HL7/v251-elr/hl7/segments/PV1/PV2Extension.yml create mode 100644 prime-router/metadata/HL7/v251-elr/hl7/segments/SFT/Device.yml create mode 100644 prime-router/metadata/HL7/v251-elr/hl7/segments/SPM/EIP/Specimen.yml create mode 100644 prime-router/metadata/HL7/v251-elr/hl7/segments/SPM/SPMExtension.yml create mode 100644 prime-router/metadata/HL7/v251-elr/hl7/segments/SPM/Specimen.yml delete mode 100644 prime-router/settings/STLTs/NJ/nj-doh.yml delete mode 100644 prime-router/src/main/kotlin/azure/SubmissionTableService.kt delete mode 100644 prime-router/src/main/kotlin/azure/TableAccess.kt rename prime-router/src/main/{resources/clitests/compare-test-files => kotlin/cli/tests}/fakePII.fhir (100%) delete mode 100644 prime-router/src/main/kotlin/common/piiremoved.json delete mode 100644 prime-router/src/main/kotlin/common/piithere.json delete mode 100644 prime-router/src/main/kotlin/fhirengine/engine/FHIRReceiver.kt delete mode 100644 prime-router/src/main/kotlin/fhirengine/engine/MessageType.kt rename prime-router/src/main/kotlin/fhirengine/engine/{PrimeRouterQueueMessage.kt => QueueMessage.kt} (51%) delete mode 100644 prime-router/src/main/resources/metadata/fhir_transforms/common/suppress-device-information.yml delete mode 100644 prime-router/src/main/resources/metadata/hl7_mapping/receivers/Common/observation-to-nte/unwanted-conditions-to-notes.yml delete mode 100644 prime-router/src/main/resources/metadata/hl7_mapping/receivers/STLTs/NJ/NJ-receiver-transform.yml delete mode 100644 prime-router/src/main/resources/metadata/hl7_mapping/receivers/STLTs/Test/test-receiver-transform.yml delete mode 100644 prime-router/src/test/kotlin/fhirengine/azure/FHIRReceiverIntegrationTests.kt delete mode 100644 prime-router/src/test/kotlin/fhirengine/azure/SubmissionTableServiceIntegrationTests.kt delete mode 100644 prime-router/src/test/kotlin/fhirengine/engine/FHIRReceiverTests.kt create mode 100644 prime-router/src/testIntegration/kotlin/datatests/mappinginventory/v251/CNNtoPractitionerTests.kt create mode 100644 prime-router/src/testIntegration/kotlin/datatests/mappinginventory/v251/CWEtoCodeableConceptTests.kt create mode 100644 prime-router/src/testIntegration/kotlin/datatests/mappinginventory/v251/NDLtoPractitionerRoleTests.kt create mode 100644 prime-router/src/testIntegration/kotlin/datatests/mappinginventory/v251/XADtoAddressTests.kt create mode 100644 prime-router/src/testIntegration/kotlin/datatests/mappinginventory/v251/XTNToContactPointTests.kt create mode 100644 prime-router/src/testIntegration/kotlin/datatests/mappinginventory/v251elr/CQELRtoQuantityTest.kt create mode 100644 prime-router/src/testIntegration/kotlin/datatests/mappinginventory/v251elr/CWEELRtoCodeableConceptTests.kt create mode 100644 prime-router/src/testIntegration/kotlin/datatests/mappinginventory/v251elr/ORUR01ELRFullTest.kt create mode 100644 prime-router/src/testIntegration/kotlin/datatests/mappinginventory/v251elr/PRLELRtoServiceRequestTest.kt create mode 100644 prime-router/src/testIntegration/kotlin/datatests/mappinginventory/v251elr/XPNELRtoHumanNameTests.kt delete mode 100644 prime-router/src/testIntegration/resources/datatests/FHIR_to_HL7/mars_unwanted_condition_to_notes.fhir delete mode 100644 prime-router/src/testIntegration/resources/datatests/FHIR_to_HL7/mars_unwanted_condition_to_notes.hl7 delete mode 100644 prime-router/src/testIntegration/resources/datatests/FHIR_to_HL7/sample_NJ_20240719-0001.fhir delete mode 100644 prime-router/src/testIntegration/resources/datatests/FHIR_to_HL7/sample_NJ_20240719-0001.hl7 create mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cq/cq-to-quantity.fhir create mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cq/cq-to-quantity.hl7 create mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/CWE-to-CodeableConcept.csv create mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-10-test-value-cwe8.fhir create mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-10-test-value-cwe8.hl7 create mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-11-test-value-cwe9.fhir create mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-11-test-value-cwe9.hl7 create mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-12-test-value-cwe10.fhir create mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-12-test-value-cwe10.hl7 create mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-13-test-value-cwe11.fhir create mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-13-test-value-cwe11.hl7 create mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-14-test-value-cwe12.fhir create mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-14-test-value-cwe12.hl7 create mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-15-test-value-cwe13.fhir create mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-15-test-value-cwe13.hl7 create mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-16-test-value-cwe14.fhir create mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-16-test-value-cwe14.hl7 create mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-3-test-value-cwe1.fhir create mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-3-test-value-cwe1.hl7 create mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-4-test-value-cwe2.fhir create mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-4-test-value-cwe2.hl7 create mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-5-test-value-cwe3.fhir create mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-5-test-value-cwe3.hl7 create mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-6-test-value-cwe4.fhir create mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-6-test-value-cwe4.hl7 create mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-7-test-value-cwe5.fhir create mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-7-test-value-cwe5.hl7 create mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-8-test-value-cwe6.fhir create mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-8-test-value-cwe6.hl7 create mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-9-test-value-cwe7.fhir create mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-9-test-value-cwe7.hl7 create mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/orur01/oru_r01-full.fhir create mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/orur01/oru_r01-full.hl7 create mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/prl/prl-to-servicerequest.fhir create mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/prl/prl-to-servicerequest.hl7 create mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/xpn/xpn-to-humanname-xpn12-13-populated-xpn10-empty.fhir create mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/xpn/xpn-to-humanname-xpn12-13-populated-xpn10-empty.hl7 create mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cnn/cnn-to-Practitioner.csv create mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cnn/cnn-to-Practitioner.fhir create mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cnn/cnn-to-Practitioner.hl7 create mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-10-test-value-cwe8.fhir create mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-10-test-value-cwe8.hl7 create mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-11-test-value-cwe9.fhir create mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-11-test-value-cwe9.hl7 create mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-3-test-value-cwe1.fhir create mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-3-test-value-cwe1.hl7 create mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-4-test-value-cwe2.fhir create mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-4-test-value-cwe2.hl7 create mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-5-test-value-cwe3.fhir create mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-5-test-value-cwe3.hl7 create mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-6-test-value-cwe4.fhir create mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-6-test-value-cwe4.hl7 create mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-7-test-value-cwe5.fhir create mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-7-test-value-cwe5.hl7 create mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-8-test-value-cwe6.fhir create mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-8-test-value-cwe6.hl7 create mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-9-test-value-cwe7.fhir create mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-9-test-value-cwe7.hl7 create mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/ndl/NDL-to-PractitionerRole.csv create mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/ndl/NDL-to-PractitionerRole.fhir create mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/ndl/NDL-to-PractitionerRole.hl7 create mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/xad/xad-to-address.fhir create mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/xad/xad-to-address.hl7 create mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/xtn/xtn-to-contact-point.fhir create mode 100644 prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/xtn/xtn-to-contact-point.hl7 delete mode 100644 shared/src/main/kotlin/gov/cdc/prime/reportstream/shared/BlobUtils.kt delete mode 100644 shared/src/main/kotlin/gov/cdc/prime/reportstream/shared/QueueMessage.kt delete mode 100644 shared/src/main/kotlin/gov/cdc/prime/reportstream/shared/Submission.kt rename submissions/src/main/kotlin/gov/cdc/prime/reportstream/submissions/{SubmissionReceivedEvent.kt => ReportReceivedEvent.kt} (90%) diff --git a/.environment/gitleaks/gitleaks-config.toml b/.environment/gitleaks/gitleaks-config.toml index da0f618980d..d95d877f4b8 100644 --- a/.environment/gitleaks/gitleaks-config.toml +++ b/.environment/gitleaks/gitleaks-config.toml @@ -203,8 +203,6 @@ title = "PRIME ReportStream Gitleaks Configuration" 'authority\", \"extension\"', # FHIR extension URL also shows up in normal FHIR test data 'ApiKeyCredential\(\"flexion\"', 'authType: \"two-legged\"', - '\"apiKey\"', - 'api-key\" to \"oracle123\"', 'Authorization-Type: \"username/password\"', 'cdctiautomated_sa' ] diff --git a/.github/ISSUE_TEMPLATE/up-receiver-migration-validate-test-data.md b/.github/ISSUE_TEMPLATE/up-receiver-migration-validate-test-data.md index f5c769eddcc..3398b3d7086 100644 --- a/.github/ISSUE_TEMPLATE/up-receiver-migration-validate-test-data.md +++ b/.github/ISSUE_TEMPLATE/up-receiver-migration-validate-test-data.md @@ -2,11 +2,10 @@ name: UP Migrating Receiver - Validate Test Data about: This is the fourth step in migrating a STLT to the UP title: "[name of STLT] - UP Migration - Validate Test Data" -labels: onboarding-ops, receiver, engineering, needs-refinement +labels: onboarding-ops, receiver assignees: '' --- -[STLT] = name of STLT ### User Story: As a developer, I want the [STLT] to validate test messages in staging, so that they can receive data in the format they expect. @@ -28,16 +27,4 @@ As a developer, I want the [STLT] to validate test messages in staging, so that ### Acceptance Criteria - [ ] Created and sent data using Simple Report -- [ ] Confirmed with STLT that data passes validation -- [ ] When finished, tag Mikaelah, Chris, and Glenn in a slack post stating: -> [STLT] "Testing in Staging" is complete and will be moving on to "Monitor in Production" -> -> Connection Type: [REST, SFTP, SOAP, etc] -> -> Conditions tested: [List of Conditions] -> -> Positives set up to receive: [List of Conditions] -> -> Negatives set up to receive: [List of Conditions] -> -> Format receiving: [HL7 or FHIR] +- [ ] Confirmed with STLT that data passes validation diff --git a/.github/actions/build-backend/action.yml b/.github/actions/build-backend/action.yml index a2aa9e2200f..7f2f489d485 100644 --- a/.github/actions/build-backend/action.yml +++ b/.github/actions/build-backend/action.yml @@ -33,7 +33,7 @@ runs: sudo rm -rf /usr/local/lib/android - name: Set up JDK 17 - uses: actions/setup-java@2dfa2011c5b2a0f1489bf9e433881c92c1631f88 + uses: actions/setup-java@6a0805fcefea3d4657a47ac4c165951e33482018 with: java-version: "17" distribution: "temurin" diff --git a/.github/actions/build-submissions/action.yml b/.github/actions/build-submissions/action.yml index 15904917752..f189ce652f6 100644 --- a/.github/actions/build-submissions/action.yml +++ b/.github/actions/build-submissions/action.yml @@ -33,7 +33,7 @@ runs: sudo rm -rf /usr/local/lib/android - name: Set up JDK 17 - uses: actions/setup-java@2dfa2011c5b2a0f1489bf9e433881c92c1631f88 + uses: actions/setup-java@6a0805fcefea3d4657a47ac4c165951e33482018 with: java-version: "17" distribution: "temurin" diff --git a/.github/workflows/build_hub.yml b/.github/workflows/build_hub.yml index 3774600f35e..b8a33cfc331 100644 --- a/.github/workflows/build_hub.yml +++ b/.github/workflows/build_hub.yml @@ -80,8 +80,8 @@ jobs: ./gradlew :prime-router:primeCLI --args='validate-yaml --type Organizations --file settings/organizations.yml --dir settings/STLTs' ./gradlew :prime-router:primeCLI --args='validate-yaml --type FhirToFhirTransform --dir src/main/resources/metadata/fhir_transforms' ./gradlew :prime-router:primeCLI --args='validate-yaml --type FhirToHL7Mapping --dir src/main/resources/metadata/hl7_mapping' - ./gradlew :prime-router:primeCLI --args='validate-yaml --type HL7ToFhirMappingMessageTemplate --dir metadata/HL7/catchall/hl7/message' - ./gradlew :prime-router:primeCLI --args='validate-yaml --type HL7ToFhirMappingResourceTemplate --dir metadata/HL7 --exclude-dir metadata/HL7/catchall/hl7/message metadata/HL7/catchall/hl7/codesystem --exclude-file metadata/HL7/catchall/fhir/resourcemapping.yml metadata/HL7/catchall/hl7/resource/Common.yml' + ./gradlew :prime-router:primeCLI --args='validate-yaml --type HL7ToFhirMappingMessageTemplate --dir metadata/HL7/catchall/hl7/message metadata/HL7/v251-elr/hl7/message' + ./gradlew :prime-router:primeCLI --args='validate-yaml --type HL7ToFhirMappingResourceTemplate --dir metadata/HL7 --exclude-dir metadata/HL7/catchall/hl7/message metadata/HL7/v251-elr/hl7/message metadata/HL7/v251-elr/hl7/codesystem metadata/HL7/catchall/hl7/codesystem --exclude-file metadata/HL7/catchall/fhir/resourcemapping.yml metadata/HL7/v251-elr/fhir/resourcemapping.yml metadata/HL7/catchall/hl7/resource/Common.yml metadata/HL7/v251-elr/hl7/resource/Common.yml' - name: Check for Uncommited Schema Docs id: check_changes diff --git a/.github/workflows/frontend_chromatic_main.yml b/.github/workflows/frontend_chromatic_main.yml index b6d051404f6..6302c480225 100644 --- a/.github/workflows/frontend_chromatic_main.yml +++ b/.github/workflows/frontend_chromatic_main.yml @@ -32,7 +32,7 @@ jobs: run: yarn install --immutable - name: Run Chromatic - uses: chromaui/action@95f238da20415287a1a877fecec79290ad2a7e0c + uses: chromaui/action@b984808b772126a9f44b2b7737b131b68a2ede32 with: workingDir: frontend-react token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/frontend_ci.yml b/.github/workflows/frontend_ci.yml index 328ec171966..dc05dc522e0 100644 --- a/.github/workflows/frontend_ci.yml +++ b/.github/workflows/frontend_ci.yml @@ -247,7 +247,7 @@ jobs: - name: Run Chromatic id: chromatic - uses: chromaui/action@95f238da20415287a1a877fecec79290ad2a7e0c + uses: chromaui/action@b984808b772126a9f44b2b7737b131b68a2ede32 with: workingDir: frontend-react token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/snyk.yml b/.github/workflows/snyk.yml index 064c19860e7..555553c1bcd 100644 --- a/.github/workflows/snyk.yml +++ b/.github/workflows/snyk.yml @@ -35,7 +35,7 @@ jobs: - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 - uses: snyk/actions/setup@b98d498629f1c368650224d6d212bf7dfa89e4bf - name: Set up JDK 17 to generate backend coverage stats - uses: actions/setup-java@2dfa2011c5b2a0f1489bf9e433881c92c1631f88 + uses: actions/setup-java@6a0805fcefea3d4657a47ac4c165951e33482018 with: java-version: "17" distribution: "temurin" diff --git a/.github/workflows/sonarcloud.yml b/.github/workflows/sonarcloud.yml index c6e54cb4ff9..29ae17f7afc 100644 --- a/.github/workflows/sonarcloud.yml +++ b/.github/workflows/sonarcloud.yml @@ -62,7 +62,7 @@ jobs: - name: Set up JDK 17 if: steps.changed-files-yaml.outputs.backend_any_changed == 'true' || steps.branch-name.outputs.is_default == 'true' - uses: actions/setup-java@2dfa2011c5b2a0f1489bf9e433881c92c1631f88 + uses: actions/setup-java@6a0805fcefea3d4657a47ac4c165951e33482018 with: java-version: "17" distribution: "temurin" diff --git a/.github/workflows/validate_terraform.yml b/.github/workflows/validate_terraform.yml index 310178f7101..07e6b3068bd 100644 --- a/.github/workflows/validate_terraform.yml +++ b/.github/workflows/validate_terraform.yml @@ -48,7 +48,7 @@ jobs: uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 - name: Run Checkov action - uses: bridgecrewio/checkov-action@08a0f072354cdd9c009ce7c5c6174491834cec08 + uses: bridgecrewio/checkov-action@c9421864e014ef6b8acfa35d0bf3c7e52c13ab10 with: directory: operations/app/terraform skip_check: CKV_AZURE_139,CKV_AZURE_137,CKV_AZURE_103,CKV_AZURE_104,CKV_AZURE_102,CKV_AZURE_130,CKV_AZURE_121,CKV_AZURE_67,CKV_AZURE_56,CKV_AZURE_17,CKV_AZURE_63,CKV_AZURE_18,CKV_AZURE_88,CKV_AZURE_65,CKV_AZURE_13,CKV_AZURE_66,CKV_AZURE_33,CKV_AZURE_35,CKV_AZURE_36,CKV_AZURE_98,CKV2_AZURE_1,CKV2_AZURE_15,CKV2_AZURE_21,CKV_AZURE_213,CKV_AZURE_59,CKV2_AZURE_33,CKV2_AZURE_32,CKV2_AZURE_28,CKV_AZURE_206,CKV_AZURE_42,CKV_AZURE_110,CKV_AZURE_109,CKV_AZURE_166,CKV2_AZURE_38,CKV2_AZURE_40,CKV2_AZURE_41,CKV_AZURE_235 diff --git a/.gitignore b/.gitignore index 71f2e182cf9..c361e158a19 100644 --- a/.gitignore +++ b/.gitignore @@ -23,7 +23,6 @@ hs_err_pid* **/build/** **/log/** **/dependency-reduced-pom.xml -**/version.json # Frontend build output **/node_modules/** diff --git a/frontend-react/e2e/pages/authenticated/admin/receiver-status.ts b/frontend-react/e2e/pages/authenticated/admin/receiver-status.ts index 2f0673d9892..a937092350c 100644 --- a/frontend-react/e2e/pages/authenticated/admin/receiver-status.ts +++ b/frontend-react/e2e/pages/authenticated/admin/receiver-status.ts @@ -1,14 +1,11 @@ import { expect, Locator } from "@playwright/test"; import { endOfDay, format, startOfDay, subDays } from "date-fns"; -import type { RSOrganizationSettings } from "../../../../src/config/endpoints/settings"; import { RSReceiverStatus } from "../../../../src/hooks/api/UseReceiversConnectionStatus/UseReceiversConnectionStatus"; import { createStatusTimePeriodData, SUCCESS_RATE_CLASSNAME_MAP, - SuccessRate, } from "../../../../src/pages/admin/receiver-dashboard/utils"; -import { DatePair, dateShortFormat, durationFormatShort } from "../../../../src/utils/DateTimeUtils"; -import { formatDate } from "../../../../src/utils/misc"; +import { DatePair, dateShortFormat } from "../../../../src/utils/DateTimeUtils"; import { createMockGetReceiverStatus } from "../../../mocks/receiverStatus"; import { BasePage, BasePageTestArgs, type ResponseHandlerEntry, type RouteHandlerFulfillEntry } from "../../BasePage"; @@ -313,7 +310,8 @@ export class AdminReceiverStatusPage extends BasePage { if (!isRequestAwaitedBool) return undefined as void; const req = await p; - return req ? new URL(req.url()) : undefined; + const reqUrl = req ? new URL(req.url()) : undefined; + return reqUrl; } async updateFilterDateRange(start: Date, end: Date, inputMethod: "textbox" | "calendar" = "textbox") { @@ -402,7 +400,7 @@ export class AdminReceiverStatusPage extends BasePage { return a[0] !== b[0] && a[1] !== b[1]; } - async testReceiverStatusDisplay(isSmoke = false) { + async testReceiverStatusDisplay() { const [startDate, endDate] = this.filterFormInputs.dateRange.value; const statusRows = this.receiverStatusRowsLocator; await expect(statusRows).toHaveCount(new Set(this.receiverStatus?.map((r) => r.receiverId)).size); @@ -446,192 +444,6 @@ export class AdminReceiverStatusPage extends BasePage { await expect(sliceEle).toHaveClass(expectedClass); } } - - if (isSmoke && i === 0) { - break; - } - } - - return true; - } - - async testReceiverName() { - const { organizationName, receiverName, successRate } = - this.timePeriodData[1]; - - const receiversStatusRows = this.receiverStatusRowsLocator; - const expectedReceiverStatusRow = receiversStatusRows.nthCustom(0); - const expectedReceiverStatusRowTitle = - this.getExpectedReceiverStatusRowTitle( - organizationName, - receiverName, - successRate, - ); - - await expect(receiversStatusRows).toHaveCount(this.timePeriodData.length); - - await this.updateFilters({ - receiverName, - }); - - await expect(receiversStatusRows).toHaveCount(1); - await expect(expectedReceiverStatusRow).toBeVisible(); - await expect(expectedReceiverStatusRow.title).toHaveText(expectedReceiverStatusRowTitle); - - await this.resetFilters(); - - await expect(receiversStatusRows).toHaveCount(this.timePeriodData.length); - - return true; - } - - async testReceiverMessage() { - // get first entry's result from all-fail receiver's first day -> third time period - const receiverI = 0; - const dayI = 0; - const timePeriodI = 2; - const entryI = 0; - const {days} = this.timePeriodData[receiverI]; - const {connectionCheckResult} = days[dayI].timePeriods[timePeriodI].entries[entryI]; - - const receiversStatusRows = this.receiverStatusRowsLocator; - - await this.updateFilters({ - resultMessage: connectionCheckResult, - }); - - for (const [i, {days}] of this.timePeriodData.entries()) { - const isRowExpected = i === receiverI; - const row = receiversStatusRows.nthCustom(i); - - for (const [i, {timePeriods}] of days.entries()) { - const isDayExpected = isRowExpected && i === dayI; - const rowDay = row.days.nthCustom(i); - - for (const [i] of timePeriods.entries()) { - const isTimePeriodExpected = isDayExpected && i === timePeriodI; - const expectedClass = !isTimePeriodExpected - ? /success-result-hidden/ - : /^((?!success-result-hidden).)*$/; - const rowDayTimePeriod = rowDay.timePeriods.nth(i); - - await expect(rowDayTimePeriod).toBeVisible(); - await expect(rowDayTimePeriod).toHaveClass(expectedClass); - } - } - } - - await this.resetFilters(); - - await this.testReceiverStatusDisplay(); - - return true; - } - - async testReceiverOrgLinks(isSmoke = false) { - const rows = this.receiverStatusRowsLocator; - - for (const [i, { organizationName }] of this.timePeriodData.entries()) { - const row = rows.nthCustom(i); - - const link = row.title.getByRole("link", { name: organizationName, exact: true }).first(); - const expectedUrl = this.getExpectedStatusOrganizationUrl(i); - await expect(link).toBeVisible(); - const p = this.page.route( - `/api/settings/organizations/${organizationName}`, - (route) => - route.fulfill({ - json: { - description: "fake", - filters: [], - name: organizationName, - jurisdiction: "fake", - version: 0, - createdAt: "", - createdBy: "", - } satisfies RSOrganizationSettings, - }), - ); - await link.click(); - await expect(this.page).toHaveURL(expectedUrl); - await p; - await this.page.goBack(); - - if (isSmoke && i === 0) { - break; - } - } - - return true; - } - - async testReceiverTimePeriodModals(isSmoke = false) { - const overlay = this.filterFormInputs.dateRange.modalOverlay; - - for (const [i, { days }] of this.timePeriodData.entries()) { - const { days: daysLoc } = this.receiverStatusRowsLocator.nthCustom(i); - - for (const [dayI, day] of days.entries()) { - for (const [i, { successRateType, entries }] of day.timePeriods.entries()) { - // only first entry in time period is currently displayed - const { - organizationName, - organizationId, - receiverId, - receiverName, - connectionCheckSuccessful, - connectionCheckStartedAt, - connectionCheckCompletedAt, - connectionCheckResult, - } = entries[0] ?? {}; - const sliceEle = daysLoc.nthCustom(dayI).timePeriods.nth(i); - - const isModalExpectedVisible = successRateType !== SuccessRate.UNDEFINED; - - await sliceEle.click({ force: true }); - await expect(overlay).toBeAttached({ - attached: isModalExpectedVisible, - }); - - if (isModalExpectedVisible) { - const expectedResultText = connectionCheckSuccessful ? "success" : "failed"; - const expectedModalText = `Results for connection verification checkOrg:${organizationName} (id: ${organizationId})Receiver:${receiverName} (id: ${receiverId})Result:${expectedResultText}Started At:${formatDate(connectionCheckStartedAt)}${connectionCheckStartedAt.toISOString()}Time to complete:${durationFormatShort(connectionCheckCompletedAt, connectionCheckStartedAt)}Result message:${connectionCheckResult}`; - - await expect(overlay).toBeVisible(); - await expect(overlay).toHaveText(expectedModalText); - - await overlay.press("Escape"); - } - } - } - - if (isSmoke && i === 0) { - break; - } - } - - return true; - } - - async testReceiverLinks(isSmoke = false) { - const rows = this.receiverStatusRowsLocator; - - for (const [i, { receiverName }] of this.timePeriodData.entries()) { - const row = rows.nthCustom(i); - - const link = row.title.getByRole("link", { - name: receiverName, - }); - await expect(link).toBeVisible(); - await link.click(); - await expect(this.page).toHaveURL( - this.getExpectedStatusReceiverUrl(i), - ); - await this.page.goBack(); - - if (isSmoke && i === 0) { - break; - } } return true; diff --git a/frontend-react/e2e/pages/authenticated/last-mile-failures.ts b/frontend-react/e2e/pages/authenticated/last-mile-failures.ts index bfc8c1bccea..ab8e38e5f92 100644 --- a/frontend-react/e2e/pages/authenticated/last-mile-failures.ts +++ b/frontend-react/e2e/pages/authenticated/last-mile-failures.ts @@ -1,6 +1,3 @@ -import { expect, Locator } from "@playwright/test"; -import { startOfDay, subDays } from "date-fns"; -import { tableRows } from "../../helpers/utils"; import { MOCK_GET_RESEND, MOCK_GET_SEND_FAILURES } from "../../mocks/lastMilefailures"; import { BasePage, BasePageTestArgs, RouteHandlerFulfillEntry } from "../BasePage"; @@ -9,16 +6,6 @@ export class LastMileFailuresPage extends BasePage { static readonly API_GET_SEND_FAILURES = "/api/adm/getsendfailures?days_to_show=15"; static readonly API_GET_RESEND = "/api/adm/getresend?days_to_show=15"; - readonly filterFormInputs: { - filter: { - input: Locator; - }, - daysToShow: { - input: Locator; - button: Locator - } - }; - constructor(testArgs: BasePageTestArgs) { super( { @@ -32,20 +19,8 @@ export class LastMileFailuresPage extends BasePage { ); this.addMockRouteHandlers([this.createMockGetSendFailuresHandler(), this.createMockGetResendHandler()]); - this.filterFormInputs = { - filter: { - input: this.page.locator("#input_filter") - }, - daysToShow: { - input: this.page.locator("#days_to_show"), - button: this.page.getByRole("button", { - name: "Refresh", - }), - } - } } - createMockGetSendFailuresHandler(): RouteHandlerFulfillEntry { return [ LastMileFailuresPage.API_GET_SEND_FAILURES, @@ -67,38 +42,4 @@ export class LastMileFailuresPage extends BasePage { }, ]; } - - async tableColumnDateTimeInRange( - daysToShow: number, - ) { - let datesInRange = true; - const rowCount = await tableRows(this.page).count(); - const now = new Date(); - const targetFrom = startOfDay(subDays(now, daysToShow)); - - for (let i = 0; i < rowCount; i++) { - const columnValue = await tableRows(this.page).nth(i).locator("td").nth(0).innerText(); - const columnDate = new Date(columnValue); - - if (!(columnDate >= targetFrom)) { - datesInRange = false; - break; - } - } - return datesInRange; - } - - async testReportId( - reportId: string, - ) { - const rowCount = await tableRows(this.page).count(); - - for (let i = 0; i < rowCount; i++) { - const columnValue = await tableRows(this.page).nth(i).locator("td").nth(1).innerText(); - - expect(reportId).toEqual(columnValue); - } - - return true; - } } diff --git a/frontend-react/e2e/spec/all/authenticated/admin/receiver-status-page.spec.ts b/frontend-react/e2e/spec/all/authenticated/admin/receiver-status-page.spec.ts index edba29a56c0..f8f92d2615b 100644 --- a/frontend-react/e2e/spec/all/authenticated/admin/receiver-status-page.spec.ts +++ b/frontend-react/e2e/spec/all/authenticated/admin/receiver-status-page.spec.ts @@ -1,6 +1,10 @@ -import {addDays, endOfDay, startOfDay, subDays} from "date-fns"; -import {AdminReceiverStatusPage} from "../../../../pages/authenticated/admin/receiver-status"; -import {test as baseTest, expect, logins} from "../../../../test"; +import { addDays, endOfDay, startOfDay, subDays } from "date-fns"; +import type { RSOrganizationSettings } from "../../../../../src/config/endpoints/settings"; +import { SuccessRate } from "../../../../../src/pages/admin/receiver-dashboard/utils"; +import { durationFormatShort } from "../../../../../src/utils/DateTimeUtils"; +import { formatDate } from "../../../../../src/utils/misc"; +import { AdminReceiverStatusPage } from "../../../../pages/authenticated/admin/receiver-status"; +import { test as baseTest, expect, logins } from "../../../../test"; export interface AdminReceiverStatusPageFixtures { adminReceiverStatusPage: AdminReceiverStatusPage; @@ -38,29 +42,29 @@ const test = baseTest.extend({ test.describe("Admin Receiver Status Page", () => { test.describe("not authenticated", () => { - test("redirects to login", async ({adminReceiverStatusPage}) => { + test("redirects to login", async ({ adminReceiverStatusPage }) => { await expect(adminReceiverStatusPage.page).toHaveURL("/login"); }); }); test.describe("authenticated receiver", () => { - test.use({storageState: logins.receiver.path}); - test("returns Page Not Found", async ({adminReceiverStatusPage}) => { + test.use({ storageState: logins.receiver.path }); + test("returns Page Not Found", async ({ adminReceiverStatusPage }) => { await expect(adminReceiverStatusPage.page).toHaveTitle(/Page Not Found/); }); }); test.describe("authenticated sender", () => { - test.use({storageState: logins.sender.path}); - test("returns Page Not Found", async ({adminReceiverStatusPage}) => { + test.use({ storageState: logins.sender.path }); + test("returns Page Not Found", async ({ adminReceiverStatusPage }) => { await expect(adminReceiverStatusPage.page).toHaveTitle(/Page Not Found/); }); }); test.describe("authenticated admin", () => { - test.use({storageState: logins.admin.path}); + test.use({ storageState: logins.admin.path }); - test("If there is an error, the error is shown on the page", async ({adminReceiverStatusPage}) => { + test("If there is an error, the error is shown on the page", async ({ adminReceiverStatusPage }) => { adminReceiverStatusPage.mockError = true; await adminReceiverStatusPage.reload(); @@ -70,7 +74,10 @@ test.describe("Admin Receiver Status Page", () => { test.describe("Header", () => { test( "has correct title + heading", - async ({adminReceiverStatusPage}) => { + { + tag: "@smoke", + }, + async ({ adminReceiverStatusPage }) => { await adminReceiverStatusPage.testHeader(); }, ); @@ -80,9 +87,12 @@ test.describe("Admin Receiver Status Page", () => { test.describe("Displays correctly", () => { test.describe( "filters", + { + tag: "@smoke", + }, () => { - test("date range", async ({adminReceiverStatusPage}) => { - const {button, label, modalOverlay, valueDisplay} = + test("date range", async ({ adminReceiverStatusPage }) => { + const { button, label, modalOverlay, valueDisplay } = adminReceiverStatusPage.filterFormInputs.dateRange; await expect(label).toBeVisible(); await expect(button).toBeVisible(); @@ -90,8 +100,8 @@ test.describe("Admin Receiver Status Page", () => { await expect(modalOverlay).toBeHidden(); }); - test("receiver name", async ({adminReceiverStatusPage}) => { - const {input, expectedTooltipText, label, tooltip, expectedDefaultValue} = + test("receiver name", async ({ adminReceiverStatusPage }) => { + const { input, expectedTooltipText, label, tooltip, expectedDefaultValue } = adminReceiverStatusPage.filterFormInputs.receiverName; await expect(label).toBeVisible(); await expect(input).toBeVisible(); @@ -103,8 +113,8 @@ test.describe("Admin Receiver Status Page", () => { await expect(tooltip).toHaveText(expectedTooltipText); }); - test("results message", async ({adminReceiverStatusPage}) => { - const {input, expectedTooltipText, label, tooltip, expectedDefaultValue} = + test("results message", async ({ adminReceiverStatusPage }) => { + const { input, expectedTooltipText, label, tooltip, expectedDefaultValue } = adminReceiverStatusPage.filterFormInputs.resultMessage; await expect(label).toBeVisible(); await expect(input).toBeVisible(); @@ -116,8 +126,8 @@ test.describe("Admin Receiver Status Page", () => { await expect(tooltip).toHaveText(expectedTooltipText); }); - test("success type", async ({adminReceiverStatusPage}) => { - const {input, expectedTooltipText, label, tooltip, expectedDefaultValue} = + test("success type", async ({ adminReceiverStatusPage }) => { + const { input, expectedTooltipText, label, tooltip, expectedDefaultValue } = adminReceiverStatusPage.filterFormInputs.successType; await expect(label).toBeVisible(); await expect(input).toBeVisible(); @@ -133,7 +143,7 @@ test.describe("Admin Receiver Status Page", () => { // Failures here indicate potential misalignment of playwright/browser timezone test.describe("receiver statuses", () => { - test("time periods", async ({adminReceiverStatusPage}) => { + test("time periods", async ({ adminReceiverStatusPage }) => { const result = await adminReceiverStatusPage.testReceiverStatusDisplay(); expect(result).toBe(true); }); @@ -142,8 +152,8 @@ test.describe("Admin Receiver Status Page", () => { test.describe("Footer", () => { test("has footer and explicit scroll to footer and scroll to top", async ({ - adminReceiverStatusPage, - }) => { + adminReceiverStatusPage, + }) => { await adminReceiverStatusPage.testFooter(); }); }); @@ -152,9 +162,12 @@ test.describe("Admin Receiver Status Page", () => { test.describe("filters", () => { test.describe( "date range", + { + tag: "@smoke", + }, () => { - test("works through calendar", async ({adminReceiverStatusPage}) => { - const {valueDisplay} = adminReceiverStatusPage.filterFormInputs.dateRange; + test("works through calendar", async ({ adminReceiverStatusPage }) => { + const { valueDisplay } = adminReceiverStatusPage.filterFormInputs.dateRange; const now = new Date(); const targetFrom = startOfDay(subDays(now, 3)); const targetTo = addDays(endOfDay(now), 1); @@ -175,8 +188,8 @@ test.describe("Admin Receiver Status Page", () => { }); }); - test("works through textboxes", async ({adminReceiverStatusPage}) => { - const {valueDisplay} = adminReceiverStatusPage.filterFormInputs.dateRange; + test("works through textboxes", async ({ adminReceiverStatusPage }) => { + const { valueDisplay } = adminReceiverStatusPage.filterFormInputs.dateRange; await expect(adminReceiverStatusPage.receiverStatusRowsLocator).not.toHaveCount(0); const now = new Date(); const targetFrom = startOfDay(subDays(now, 3)); @@ -229,12 +242,48 @@ test.describe("Admin Receiver Status Page", () => { await expect(receiversStatusRows).toHaveCount(adminReceiverStatusPage.timePeriodData.length); }); - test("result message", async ({adminReceiverStatusPage}) => { - const result = await adminReceiverStatusPage.testReceiverMessage(); - expect(result).toBe(true); + test("result message", async ({ adminReceiverStatusPage }) => { + // get first entry's result from all-fail receiver's first day -> third time period + const receiverI = 0; + const dayI = 0; + const timePeriodI = 2; + const entryI = 0; + const { days } = adminReceiverStatusPage.timePeriodData[receiverI]; + const { connectionCheckResult } = days[dayI].timePeriods[timePeriodI].entries[entryI]; + + const receiversStatusRows = adminReceiverStatusPage.receiverStatusRowsLocator; + + await adminReceiverStatusPage.updateFilters({ + resultMessage: connectionCheckResult, + }); + + for (const [i, { days }] of adminReceiverStatusPage.timePeriodData.entries()) { + const isRowExpected = i === receiverI; + const row = receiversStatusRows.nthCustom(i); + + for (const [i, { timePeriods }] of days.entries()) { + const isDayExpected = isRowExpected && i === dayI; + const rowDay = row.days.nthCustom(i); + + for (const [i] of timePeriods.entries()) { + const isTimePeriodExpected = isDayExpected && i === timePeriodI; + const expectedClass = !isTimePeriodExpected + ? /success-result-hidden/ + : /^((?!success-result-hidden).)*$/; + const rowDayTimePeriod = rowDay.timePeriods.nth(i); + + await expect(rowDayTimePeriod).toBeVisible(); + await expect(rowDayTimePeriod).toHaveClass(expectedClass); + } + } + } + + await adminReceiverStatusPage.resetFilters(); + + await adminReceiverStatusPage.testReceiverStatusDisplay(); }); - test("success type", async ({adminReceiverStatusPage}) => { + test("success type", async ({ adminReceiverStatusPage }) => { const [failRow, , mixedRow] = adminReceiverStatusPage.timePeriodData; const failRowTitle = adminReceiverStatusPage.getExpectedReceiverStatusRowTitle( failRow.organizationName, @@ -272,7 +321,7 @@ test.describe("Admin Receiver Status Page", () => { test.describe("receiver statuses", () => { test.describe("date range length changes", () => { - test("increases", async ({adminReceiverStatusPage}) => { + test("increases", async ({ adminReceiverStatusPage }) => { const rows = adminReceiverStatusPage.receiverStatusRowsLocator; const days = rows.nthCustom(0).days; await expect(rows).not.toHaveCount(0); @@ -287,7 +336,7 @@ test.describe("Admin Receiver Status Page", () => { await expect(days).toHaveCount(4); }); - test("decreases", async ({adminReceiverStatusPage}) => { + test("decreases", async ({ adminReceiverStatusPage }) => { const rows = adminReceiverStatusPage.receiverStatusRowsLocator; const days = rows.nthCustom(0).days; await expect(rows).not.toHaveCount(0); @@ -303,19 +352,96 @@ test.describe("Admin Receiver Status Page", () => { }); }); - test("time period modals", async ({adminReceiverStatusPage}) => { - const result = await adminReceiverStatusPage.testReceiverTimePeriodModals(); - expect(result).toBe(true); + test("time period modals", async ({ adminReceiverStatusPage }) => { + const overlay = adminReceiverStatusPage.filterFormInputs.dateRange.modalOverlay; + for (const [i, { days }] of adminReceiverStatusPage.timePeriodData.entries()) { + const { days: daysLoc } = adminReceiverStatusPage.receiverStatusRowsLocator.nthCustom(i); + + for (const [dayI, day] of days.entries()) { + for (const [i, { successRateType, entries }] of day.timePeriods.entries()) { + // only first entry in time period is currently displayed + const { + organizationName, + organizationId, + receiverId, + receiverName, + connectionCheckSuccessful, + connectionCheckStartedAt, + connectionCheckCompletedAt, + connectionCheckResult, + } = entries[0] ?? {}; + const sliceEle = daysLoc.nthCustom(dayI).timePeriods.nth(i); + + const isModalExpectedVisible = successRateType !== SuccessRate.UNDEFINED; + + await sliceEle.click({ force: true }); + await expect(overlay).toBeAttached({ + attached: isModalExpectedVisible, + }); + + if (isModalExpectedVisible) { + const expectedResultText = connectionCheckSuccessful ? "success" : "failed"; + const expectedModalText = `Results for connection verification checkOrg:${organizationName} (id: ${organizationId})Receiver:${receiverName} (id: ${receiverId})Result:${expectedResultText}Started At:${formatDate(connectionCheckStartedAt)}${connectionCheckStartedAt.toISOString()}Time to complete:${durationFormatShort(connectionCheckCompletedAt, connectionCheckStartedAt)}Result message:${connectionCheckResult}`; + + await expect(overlay).toBeVisible(); + await expect(overlay).toHaveText(expectedModalText); + + await overlay.press("Escape"); + } + } + } + } }); - test("receiver org links", async ({adminReceiverStatusPage}) => { - const result = await adminReceiverStatusPage.testReceiverOrgLinks(); - expect(result).toBe(true); + test("receiver org links", async ({ adminReceiverStatusPage }) => { + const rows = adminReceiverStatusPage.receiverStatusRowsLocator; + + for (const [i, { organizationName }] of adminReceiverStatusPage.timePeriodData.entries()) { + const row = rows.nthCustom(i); + + const link = row.title.getByRole("link", { + name: organizationName, + }); + const expectedUrl = adminReceiverStatusPage.getExpectedStatusOrganizationUrl(i); + await expect(link).toBeVisible(); + const p = adminReceiverStatusPage.page.route( + `api/settings/organizations/${organizationName}`, + (route) => + route.fulfill({ + json: { + description: "fake", + filters: [], + name: organizationName, + jurisdiction: "fake", + version: 0, + createdAt: "", + createdBy: "", + } satisfies RSOrganizationSettings, + }), + ); + await link.click(); + await expect(adminReceiverStatusPage.page).toHaveURL(expectedUrl); + await p; + await adminReceiverStatusPage.page.goBack(); + } }); - test("receiver links", async ({adminReceiverStatusPage}) => { - const result = await adminReceiverStatusPage.testReceiverLinks(); - expect(result).toBe(true); + test("receiver links", async ({ adminReceiverStatusPage }) => { + const rows = adminReceiverStatusPage.receiverStatusRowsLocator; + + for (const [i, { receiverName }] of adminReceiverStatusPage.timePeriodData.entries()) { + const row = rows.nthCustom(i); + + const link = row.title.getByRole("link", { + name: receiverName, + }); + await expect(link).toBeVisible(); + await link.click(); + await expect(adminReceiverStatusPage.page).toHaveURL( + adminReceiverStatusPage.getExpectedStatusReceiverUrl(i), + ); + await adminReceiverStatusPage.page.goBack(); + } }); }); }); diff --git a/frontend-react/e2e/spec/all/authenticated/admin/last-mile-failures-page.spec.ts b/frontend-react/e2e/spec/all/authenticated/last-mile-failures-page.spec.ts similarity index 95% rename from frontend-react/e2e/spec/all/authenticated/admin/last-mile-failures-page.spec.ts rename to frontend-react/e2e/spec/all/authenticated/last-mile-failures-page.spec.ts index ba01d3812c2..df8503376bb 100644 --- a/frontend-react/e2e/spec/all/authenticated/admin/last-mile-failures-page.spec.ts +++ b/frontend-react/e2e/spec/all/authenticated/last-mile-failures-page.spec.ts @@ -1,6 +1,6 @@ -import { tableRows } from "../../../../helpers/utils"; -import { LastMileFailuresPage } from "../../../../pages/authenticated/last-mile-failures"; -import { test as baseTest, expect } from "../../../../test"; +import { tableRows } from "../../../helpers/utils"; +import { LastMileFailuresPage } from "../../../pages/authenticated/last-mile-failures"; +import { test as baseTest, expect } from "../../../test"; export interface LastMileFailuresPageFixtures { lastMileFailuresPage: LastMileFailuresPage; diff --git a/frontend-react/e2e/spec/all/authenticated/admin/message-details-page.spec.ts b/frontend-react/e2e/spec/all/authenticated/message-details-page.spec.ts similarity index 93% rename from frontend-react/e2e/spec/all/authenticated/admin/message-details-page.spec.ts rename to frontend-react/e2e/spec/all/authenticated/message-details-page.spec.ts index 2a101640d8c..916b14b1096 100644 --- a/frontend-react/e2e/spec/all/authenticated/admin/message-details-page.spec.ts +++ b/frontend-react/e2e/spec/all/authenticated/message-details-page.spec.ts @@ -1,12 +1,12 @@ import fs from "node:fs"; -import { parseFileLocation } from "../../../../../src/utils/misc"; -import { tableRows } from "../../../../helpers/utils"; -import { MOCK_GET_MESSAGE } from "../../../../mocks/messages"; -import { MessageDetailsPage } from "../../../../pages/authenticated/message-details"; -import { MessageIDSearchPage } from "../../../../pages/authenticated/message-id-search"; -import { mockGetHistoryReportResponse } from "../../../../pages/authenticated/report-details"; - -import { test as baseTest, expect } from "../../../../test"; +import { parseFileLocation } from "../../../../src/utils/misc"; +import { tableRows } from "../../../helpers/utils"; +import { MOCK_GET_MESSAGE } from "../../../mocks/messages"; +import { MessageDetailsPage } from "../../../pages/authenticated/message-details"; +import { MessageIDSearchPage } from "../../../pages/authenticated/message-id-search"; +import { mockGetHistoryReportResponse } from "../../../pages/authenticated/report-details"; + +import { test as baseTest, expect } from "../../../test"; export interface MessageDetailsPageFixtures { messageDetailsPage: MessageDetailsPage; diff --git a/frontend-react/e2e/spec/all/authenticated/admin/message-id-search-page.spec.ts b/frontend-react/e2e/spec/all/authenticated/message-id-search-page.spec.ts similarity index 94% rename from frontend-react/e2e/spec/all/authenticated/admin/message-id-search-page.spec.ts rename to frontend-react/e2e/spec/all/authenticated/message-id-search-page.spec.ts index 2ac84973da4..9de8e807739 100644 --- a/frontend-react/e2e/spec/all/authenticated/admin/message-id-search-page.spec.ts +++ b/frontend-react/e2e/spec/all/authenticated/message-id-search-page.spec.ts @@ -1,9 +1,9 @@ -import { noData, tableRows } from "../../../../helpers/utils"; -import { MOCK_GET_MESSAGES } from "../../../../mocks/messages"; -import { MessageIDSearchPage } from "../../../../pages/authenticated/message-id-search"; -import { openReportIdDetailPage } from "../../../../pages/authenticated/submission-history"; +import { noData, tableRows } from "../../../helpers/utils"; +import { MOCK_GET_MESSAGES } from "../../../mocks/messages"; +import { MessageIDSearchPage } from "../../../pages/authenticated/message-id-search"; +import { openReportIdDetailPage } from "../../../pages/authenticated/submission-history"; -import { test as baseTest, expect } from "../../../../test"; +import { test as baseTest, expect } from "../../../test"; export interface MessageIDSearchPageFixtures { messageIDSearchPage: MessageIDSearchPage; diff --git a/frontend-react/e2e/spec/all/authenticated/admin/organization-settings-page.spec.ts b/frontend-react/e2e/spec/all/authenticated/organization-settings-page.spec.ts similarity index 81% rename from frontend-react/e2e/spec/all/authenticated/admin/organization-settings-page.spec.ts rename to frontend-react/e2e/spec/all/authenticated/organization-settings-page.spec.ts index ee9773e664c..83ce97b9e2a 100644 --- a/frontend-react/e2e/spec/all/authenticated/admin/organization-settings-page.spec.ts +++ b/frontend-react/e2e/spec/all/authenticated/organization-settings-page.spec.ts @@ -1,10 +1,10 @@ -import {expect} from "@playwright/test"; -import {readFileSync} from "node:fs"; -import {join} from "node:path"; -import {fileURLToPath} from "node:url"; -import {MOCK_GET_ORGANIZATION_SETTINGS_LIST} from "../../../../mocks/organizations"; -import {OrganizationPage} from "../../../../pages/authenticated/organization"; -import {test as baseTest} from "../../../../test"; +import { expect } from "@playwright/test"; +import { readFileSync } from "node:fs"; +import { join } from "node:path"; +import { fileURLToPath } from "node:url"; +import { MOCK_GET_ORGANIZATION_SETTINGS_LIST } from "../../../mocks/organizations"; +import { OrganizationPage } from "../../../pages/authenticated/organization"; +import { test as baseTest } from "../../../test"; const __dirname = fileURLToPath(import.meta.url); @@ -43,35 +43,35 @@ const test = baseTest.extend({ test.describe("Admin Organization Settings Page", () => { test.describe("not authenticated", () => { - test("redirects to login", async ({organizationPage}) => { + test("redirects to login", async ({ organizationPage }) => { await expect(organizationPage.page).toHaveURL("/login"); }); }); test.describe("authenticated receiver", () => { - test.use({storageState: "e2e/.auth/receiver.json"}); - test("returns Page Not Found", async ({organizationPage}) => { + test.use({ storageState: "e2e/.auth/receiver.json" }); + test("returns Page Not Found", async ({ organizationPage }) => { await expect(organizationPage.page).toHaveTitle(/Page Not Found/); }); }); test.describe("authenticated sender", () => { - test.use({storageState: "e2e/.auth/sender.json"}); - test("returns Page Not Found", async ({organizationPage}) => { + test.use({ storageState: "e2e/.auth/sender.json" }); + test("returns Page Not Found", async ({ organizationPage }) => { await expect(organizationPage.page).toHaveTitle(/Page Not Found/); }); }); test.describe("authenticated admin", () => { - test.use({storageState: "e2e/.auth/admin.json"}); + test.use({ storageState: "e2e/.auth/admin.json" }); test.describe("Header", () => { - test("has correct title + heading", async ({organizationPage}) => { + test("has correct title + heading", async ({ organizationPage }) => { await organizationPage.testHeader(); }); }); - test("If there is an error, the error is shown on the page", async ({organizationPage}) => { + test("If there is an error, the error is shown on the page", async ({ organizationPage }) => { organizationPage.mockError = true; await organizationPage.reload(); await expect(organizationPage.page.getByText("there was an error")).toBeVisible(); @@ -79,8 +79,8 @@ test.describe("Admin Organization Settings Page", () => { test.describe("When there is no error", () => { test("nav contains the 'Admin tools' dropdown with 'Organization Settings' option", async ({ - organizationPage, - }) => { + organizationPage, + }) => { const navItems = organizationPage.page.locator(".usa-nav li"); await expect(navItems).toContainText(["Admin tools"]); @@ -96,12 +96,12 @@ test.describe("Admin Organization Settings Page", () => { await expect(organizationPage.page).toHaveURL("/admin/settings"); }); - test("Has correct title", async ({organizationPage}) => { + test("Has correct title", async ({ organizationPage }) => { await expect(organizationPage.page).toHaveURL(/settings/); await expect(organizationPage.page).toHaveTitle(/Admin-Organizations/); }); - test("Displays data", async ({organizationPage}) => { + test("Displays data", async ({ organizationPage }) => { // Heading with result length await expect( organizationPage.page.getByRole("heading", { @@ -122,12 +122,12 @@ test.describe("Admin Organization Settings Page", () => { const cols = await row.getByRole("cell").allTextContents(); expect(cols).toHaveLength(colHeaders.length); - const {description, jurisdiction, name, stateCode} = + const { description, jurisdiction, name, stateCode } = i === 0 ? MOCK_GET_ORGANIZATION_SETTINGS_LIST[0] : (MOCK_GET_ORGANIZATION_SETTINGS_LIST.find((i) => i.name === cols[0]) ?? { - name: "INVALID", - }); + name: "INVALID", + }); // if first row, we expect column headers. else, the data row matching id (name) // SetEdit is text of buttons in button column const expectedColContents = @@ -141,7 +141,7 @@ test.describe("Admin Organization Settings Page", () => { } }); - test("Create new organization navigation works", async ({organizationPage}) => { + test("Create new organization navigation works", async ({ organizationPage }) => { const link = organizationPage.page.getByRole("link", { name: "Create New Organization", }); @@ -155,7 +155,7 @@ test.describe("Admin Organization Settings Page", () => { expect(organizationPage.page.url()).toContain(expectedUrl); }); - test("Save CSV button downloads a file", async ({organizationPage}) => { + test("Save CSV button downloads a file", async ({ organizationPage }) => { const downloadProm = organizationPage.page.waitForEvent("download"); const saveButton = organizationPage.page.getByRole("button", { name: "Save List to CSV", @@ -165,7 +165,7 @@ test.describe("Admin Organization Settings Page", () => { await saveButton.click(); const download = await downloadProm; - const expectedFile = readFileSync(join(__dirname, "../../../../../mocks/prime-orgs.csv"), { + const expectedFile = readFileSync(join(__dirname, "../../../../mocks/prime-orgs.csv"), { encoding: "utf-8", }); const stream = await download.createReadStream(); @@ -174,9 +174,9 @@ test.describe("Admin Organization Settings Page", () => { expect(download.suggestedFilename()).toBe("prime-orgs.csv"); }); - test("Filtering works", async ({organizationPage}) => { + test("Filtering works", async ({ organizationPage }) => { const table = organizationPage.page.getByRole("table"); - const {description, name, jurisdiction, stateCode} = MOCK_GET_ORGANIZATION_SETTINGS_LIST[2]; + const { description, name, jurisdiction, stateCode } = MOCK_GET_ORGANIZATION_SETTINGS_LIST[2]; const filterBox = organizationPage.page.getByRole("textbox", { name: "Filter:", }); @@ -201,7 +201,7 @@ test.describe("Admin Organization Settings Page", () => { } }); - test('Clicking "Set" updates link label', async ({organizationPage}) => { + test('Clicking "Set" updates link label', async ({ organizationPage }) => { const firstDataRow = organizationPage.page.getByRole("table").getByRole("row").nth(1); const firstDataRowName = (await firstDataRow.getByRole("cell").nth(0).textContent()) ?? "INVALID"; const setButton = firstDataRow.getByRole("button", { @@ -218,7 +218,7 @@ test.describe("Admin Organization Settings Page", () => { await expect(orgLink).toHaveAttribute("href", "/admin/settings"); }); - test("Edit navigation works", async ({organizationPage}) => { + test("Edit navigation works", async ({ organizationPage }) => { const firstDataRow = organizationPage.page.getByRole("table").getByRole("row").nth(1); const firstDataRowName = await firstDataRow.getByRole("cell").nth(0).textContent(); const expectedUrl = `/admin/orgsettings/org/${firstDataRowName}`; @@ -237,7 +237,7 @@ test.describe("Admin Organization Settings Page", () => { }); test.describe("Footer", () => { - test("has footer and explicit scroll to footer and scroll to top", async ({organizationPage}) => { + test("has footer and explicit scroll to footer and scroll to top", async ({ organizationPage }) => { await organizationPage.testFooter(); }); }); diff --git a/frontend-react/e2e/spec/chromium-only/authenticated/daily-data-page-user-flow.spec.ts b/frontend-react/e2e/spec/chromium-only/authenticated/daily-data-page-user-flow.spec.ts index c39aaff902e..5950c5a4314 100644 --- a/frontend-react/e2e/spec/chromium-only/authenticated/daily-data-page-user-flow.spec.ts +++ b/frontend-react/e2e/spec/chromium-only/authenticated/daily-data-page-user-flow.spec.ts @@ -74,8 +74,7 @@ const SMOKE_RECEIVERS = [TEST_ORG_UP_RECEIVER_UP, TEST_ORG_CP_RECEIVER_CP, TEST_ test.describe( "Daily Data page - user flow smoke tests", { - // TODO: Investigate Daily Data page - user flow smoke tests › admin user › ignore org - FULL_ELR receiver › filter › on 'Apply' › clears 'Report ID' - //tag: "@smoke", + tag: "@smoke", }, () => { test.describe("admin user", () => { @@ -207,7 +206,7 @@ test.describe( ); }); - test.skip("clears 'Report ID'", async ({ dailyDataPage }) => { + test("clears 'Report ID'", async ({ dailyDataPage }) => { // Search by Report ID const reportId = await tableDataCellValue(dailyDataPage.page, 0, 0); await searchInput(dailyDataPage.page).fill(reportId); @@ -374,13 +373,11 @@ test.describe( await dailyDataPage.page.locator(".usa-table tbody").waitFor({ state: "visible" }); }); - test("downloads the file", async ({ dailyDataPage, isMockDisabled }) => { - test.skip(!isMockDisabled, "Mocks are ENABLED, skipping 'downloads the file' test"); - // Sort by File available until, but they're in ASCENDING order - await dailyDataPage.page.getByRole("button", { name: "File available until" }).click(); - await dailyDataPage.page.locator(".usa-table tbody").waitFor({ state: "visible" }); - // Sort by File available until again, to get the absolute latest result - await dailyDataPage.page.getByRole("button", { name: "File available until" }).click(); + test.skip("downloads the file", async ({ dailyDataPage }) => { + await setDate(dailyDataPage.page, "#start-date", 14); + await setDate(dailyDataPage.page, "#end-date", 0); + + await applyButton(dailyDataPage.page).click(); await dailyDataPage.page.locator(".usa-table tbody").waitFor({ state: "visible" }); const downloadProm = dailyDataPage.page.waitForEvent("download"); diff --git a/frontend-react/e2e/spec/chromium-only/authenticated/last-mile-failures-page-user-flow.spec.ts b/frontend-react/e2e/spec/chromium-only/authenticated/last-mile-failures-page-user-flow.spec.ts deleted file mode 100644 index e1a09504f79..00000000000 --- a/frontend-react/e2e/spec/chromium-only/authenticated/last-mile-failures-page-user-flow.spec.ts +++ /dev/null @@ -1,98 +0,0 @@ -import { tableRows } from "../../../helpers/utils"; -import { LastMileFailuresPage } from "../../../pages/authenticated/last-mile-failures"; -import { test as baseTest, expect } from "../../../test"; - -export interface LastMileFailuresPageFixtures { - lastMileFailuresPage: LastMileFailuresPage; -} - -const test = baseTest.extend({ - lastMileFailuresPage: async ( - { - page: _page, - isMockDisabled, - adminLogin, - senderLogin, - receiverLogin, - storageState, - frontendWarningsLogPath, - isFrontendWarningsLog, - }, - use, - ) => { - const page = new LastMileFailuresPage({ - page: _page, - isMockDisabled, - adminLogin, - senderLogin, - receiverLogin, - storageState, - frontendWarningsLogPath, - isFrontendWarningsLog, - }); - await page.goto(); - await use(page); - }, -}); - -test.describe("Last Mile Failure page", - { - tag: "@smoke", - }, () => { - test.describe("admin user", () => { - test.use({ storageState: "e2e/.auth/admin.json" }); - - test.describe("'Filter'", () => { - test("table has expected data when filtering by 'ReportId'", async ({ lastMileFailuresPage }) => { - const reportId = await tableRows(lastMileFailuresPage.page).nth(0).locator("td").nth(1).innerText(); - await lastMileFailuresPage.filterFormInputs.filter.input.fill(reportId); - const isReportIdReturned = await lastMileFailuresPage.testReportId( - reportId, - ); - expect(isReportIdReturned).toBe(true); - }); - }); - - test.describe("'Days to show' filter", () => { - test.beforeEach(async ({ lastMileFailuresPage }) => { - await lastMileFailuresPage.filterFormInputs.daysToShow.input.fill("200"); - await lastMileFailuresPage.page.locator(".usa-table tbody").waitFor({ state: "visible" }); - }); - - test("table has correct headers", async ({ lastMileFailuresPage }) => { - await expect(lastMileFailuresPage.page.locator(".column-header-text").nth(0)).toHaveText(/Failed At/); - await expect(lastMileFailuresPage.page.locator(".column-header-text").nth(1)).toHaveText(/ReportId/); - await expect(lastMileFailuresPage.page.locator(".column-header-text").nth(2)).toHaveText(/Receiver/); - }); - - test("table column 'Failed At' has expected data", async ({ lastMileFailuresPage, isMockDisabled }) => { - test.skip(!isMockDisabled, "Mocks are ENABLED, test"); - const areDatesInRange = await lastMileFailuresPage.tableColumnDateTimeInRange( - 200, - ); - expect(areDatesInRange).toBe(true); - }); - }); - - test("table column 'ReportId' will open a modal with report details", async ({ lastMileFailuresPage }) => { - const reportId = tableRows(lastMileFailuresPage.page).nth(0).locator("td").nth(1); - const reportIdCell = await reportId.innerText(); - await reportId.click(); - - const modal = lastMileFailuresPage.page.getByTestId("modalWindow").nth(0); - await expect(modal).toContainText(`Report ID:${reportIdCell}`); - }); - - test("table column 'Receiver' will open receiver edit page", async ({ lastMileFailuresPage, isMockDisabled }) => { - test.skip(!isMockDisabled, "Mocks are ENABLED, skipping test"); - const receiver = tableRows(lastMileFailuresPage.page).nth(0).locator("td").nth(2); - const receiverCell = await receiver.getByRole("link").innerText(); - await receiver.click(); - - await expect(lastMileFailuresPage.page).toHaveURL( - `/admin/orgreceiversettings/org/${receiverCell}/receiver//action/edit`, - ); - }); - }); - }, -); diff --git a/frontend-react/e2e/spec/chromium-only/authenticated/receiver-status-page-user-flow.spec.ts b/frontend-react/e2e/spec/chromium-only/authenticated/receiver-status-page-user-flow.spec.ts deleted file mode 100644 index 8cb59f03528..00000000000 --- a/frontend-react/e2e/spec/chromium-only/authenticated/receiver-status-page-user-flow.spec.ts +++ /dev/null @@ -1,339 +0,0 @@ -import { addDays, endOfDay, startOfDay, subDays } from "date-fns"; -import { AdminReceiverStatusPage } from "../../../pages/authenticated/admin/receiver-status"; -import { test as baseTest, expect, logins } from "../../../test"; - -export interface AdminReceiverStatusPageFixtures { - adminReceiverStatusPage: AdminReceiverStatusPage; -} - -const test = baseTest.extend({ - adminReceiverStatusPage: async ( - { - page: _page, - isMockDisabled, - adminLogin, - senderLogin, - receiverLogin, - storageState, - frontendWarningsLogPath, - isFrontendWarningsLog, - }, - use, - ) => { - const page = new AdminReceiverStatusPage({ - page: _page, - isMockDisabled, - adminLogin, - senderLogin, - receiverLogin, - storageState, - isFrontendWarningsLog, - frontendWarningsLogPath, - isTestOrg: true, - }); - await page.goto(); - await use(page); - }, -}); - -test.describe("Admin Receiver Status Page", - { - // TODO: Investigate Admin Receiver Status Page › functions correctly › receiver statuses › time period modals - // tag: "@smoke", - }, () => { - test.use({ storageState: logins.admin.path }); - test.describe("displays correctly", () => { - test.describe("header", () => { - test( - "has correct title + heading", - async ({ adminReceiverStatusPage }) => { - await adminReceiverStatusPage.testHeader(); - }, - ); - }); - - test.describe( - "filters", - () => { - test("date range", async ({ adminReceiverStatusPage }) => { - const { button, label, modalOverlay, valueDisplay } = - adminReceiverStatusPage.filterFormInputs.dateRange; - await expect(label).toBeVisible(); - await expect(button).toBeVisible(); - await expect(valueDisplay).toHaveText(adminReceiverStatusPage.expectedDateRangeLabelText); - await expect(modalOverlay).toBeHidden(); - }); - - test("receiver name", async ({ adminReceiverStatusPage }) => { - const { input, expectedTooltipText, label, tooltip, expectedDefaultValue } = - adminReceiverStatusPage.filterFormInputs.receiverName; - await expect(label).toBeVisible(); - await expect(input).toBeVisible(); - await expect(input).toHaveValue(expectedDefaultValue); - - await expect(tooltip).toBeHidden(); - await input.hover(); - await expect(tooltip).toBeVisible(); - await expect(tooltip).toHaveText(expectedTooltipText); - }); - - test("results message", async ({ adminReceiverStatusPage }) => { - const { input, expectedTooltipText, label, tooltip, expectedDefaultValue } = - adminReceiverStatusPage.filterFormInputs.resultMessage; - await expect(label).toBeVisible(); - await expect(input).toBeVisible(); - await expect(input).toHaveValue(expectedDefaultValue); - - await expect(tooltip).toBeHidden(); - await input.hover(); - await expect(tooltip).toBeVisible(); - await expect(tooltip).toHaveText(expectedTooltipText); - }); - - test("success type", async ({ adminReceiverStatusPage }) => { - const { input, expectedTooltipText, label, tooltip, expectedDefaultValue } = - adminReceiverStatusPage.filterFormInputs.successType; - await expect(label).toBeVisible(); - await expect(input).toBeVisible(); - await expect(input).toHaveValue(expectedDefaultValue); - - await expect(tooltip).toBeHidden(); - await input.hover(); - await expect(tooltip).toBeVisible(); - await expect(tooltip).toHaveText(expectedTooltipText); - }); - }, - ); - - // Failures here indicate potential misalignment of playwright/browser timezone - test.describe("receiver statuses", () => { - test("time periods", async ({ adminReceiverStatusPage }) => { - const result = await adminReceiverStatusPage.testReceiverStatusDisplay(true); - expect(result).toBe(true); - }); - }); - - test.describe("has footer", () => { - test("has footer and explicit scroll to footer and scroll to top", - async ({ - adminReceiverStatusPage, - }) => { - await adminReceiverStatusPage.testFooter(); - }); - }); - }); - - test.describe("functions correctly", () => { - test.describe("filters", () => { - test.describe( - "date range", - () => { - test("works through calendar", async ({ adminReceiverStatusPage }) => { - const { valueDisplay } = adminReceiverStatusPage.filterFormInputs.dateRange; - const now = new Date(); - const targetFrom = startOfDay(subDays(now, 3)); - const targetTo = addDays(endOfDay(now), 1); - - const reqUrl = await adminReceiverStatusPage.updateFilters({ - dateRange: { - value: [targetFrom, targetTo], - }, - }); - expect(reqUrl).toBeDefined(); - - await expect(valueDisplay).toHaveText( - adminReceiverStatusPage.expectedDateRangeLabelText, - ); - expect(Object.fromEntries(reqUrl!.searchParams.entries())).toMatchObject({ - start_date: targetFrom.toISOString(), - end_date: targetTo.toISOString(), - }); - }); - - test("works through textboxes", async ({ adminReceiverStatusPage }) => { - const { valueDisplay } = adminReceiverStatusPage.filterFormInputs.dateRange; - await expect(adminReceiverStatusPage.receiverStatusRowsLocator).not.toHaveCount(0); - const now = new Date(); - const targetFrom = startOfDay(subDays(now, 3)); - const targetTo = addDays(endOfDay(now), 1); - - const reqUrl = await adminReceiverStatusPage.updateFilters({ - dateRange: { - value: [targetFrom, targetTo], - }, - }); - - expect(reqUrl).toBeDefined(); - - await expect(valueDisplay).toHaveText( - adminReceiverStatusPage.expectedDateRangeLabelText, - ); - expect(Object.fromEntries(reqUrl!.searchParams.entries())).toMatchObject({ - start_date: targetFrom.toISOString(), - end_date: targetTo.toISOString(), - }); - }); - }, - ); - - // TODO: revisit after filters have been fixed per ticket #15737 - test.skip("receiver name", async ({adminReceiverStatusPage, isMockDisabled}) => { - test.skip(!isMockDisabled, "Mocks are ENABLED, skipping 'receiver name' test"); - const {organizationName, receiverName, successRate} = - adminReceiverStatusPage.timePeriodData[1]; - - const receiversStatusRows = adminReceiverStatusPage.receiverStatusRowsLocator; - const defaultReceiversStatusRowsCount = await receiversStatusRows.count(); - const expectedReceiverStatusRow = receiversStatusRows.nthCustom(0); - const expectedReceiverStatusRowTitle = - adminReceiverStatusPage.getExpectedReceiverStatusRowTitle( - organizationName, - receiverName, - successRate, - ); - - expect(defaultReceiversStatusRowsCount).toBe(adminReceiverStatusPage.timePeriodData.length); - - await adminReceiverStatusPage.updateFilters({ - receiverName, - }); - - const receiversStatusRowsCount = await receiversStatusRows.count(); - expect(receiversStatusRowsCount).toBeGreaterThanOrEqual(1); - await expect(expectedReceiverStatusRow).toBeVisible(); - await expect(expectedReceiverStatusRow.title).toHaveText(expectedReceiverStatusRowTitle); - - await adminReceiverStatusPage.resetFilters(); - - expect(defaultReceiversStatusRowsCount).toBe(adminReceiverStatusPage.timePeriodData.length); - }); - - test.skip("result message", async ({adminReceiverStatusPage, isMockDisabled}) => { - test.skip(!isMockDisabled, "Mocks are ENABLED, skipping 'result message' test"); - // get first entry's result from all-fail receiver's first day -> third time period - const receiverI = 0; - const dayI = 0; - const timePeriodI = 2; - const entryI = 0; - const {days} = adminReceiverStatusPage.timePeriodData[receiverI]; - const {connectionCheckResult} = days[dayI].timePeriods[timePeriodI].entries[entryI]; - - const receiversStatusRows = adminReceiverStatusPage.receiverStatusRowsLocator; - - await adminReceiverStatusPage.updateFilters({ - resultMessage: connectionCheckResult, - }); - - for (const [i, {days}] of adminReceiverStatusPage.timePeriodData.entries()) { - const row = receiversStatusRows.nthCustom(i); - - for (const [i, {timePeriods}] of days.entries()) { - const rowDay = row.days.nthCustom(i); - - for (const [i] of timePeriods.entries()) { - const rowDayTimePeriod = rowDay.timePeriods.nth(i); - - await expect(rowDayTimePeriod).toHaveClass(/success-result-hidden/); - } - } - } - - await adminReceiverStatusPage.resetFilters(); - - // TODO: revisit after filters have been fixed per ticket #15737 - // await adminReceiverStatusPage.testReceiverStatusDisplay(); - }); - - test.skip("success type", async ({ adminReceiverStatusPage, isMockDisabled }) => { - test.skip(!isMockDisabled, "Mocks are ENABLED, skipping 'success type' test"); - const [failRow, ,] = adminReceiverStatusPage.timePeriodData; - const failRowTitle = adminReceiverStatusPage.getExpectedReceiverStatusRowTitle( - failRow.organizationName, - failRow.receiverName, - failRow.successRate, - ); - // const mixedRowTitle = adminReceiverStatusPage.getExpectedReceiverStatusRowTitle( - // mixedRow.organizationName, - // mixedRow.receiverName, - // mixedRow.successRate, - // ); - - const receiversStatusRows = adminReceiverStatusPage.receiverStatusRowsLocator; - const defaultReceiversStatusRowsCount = await receiversStatusRows.count(); - const expectedRow = receiversStatusRows.nthCustom(0); - - expect(defaultReceiversStatusRowsCount).toBe(adminReceiverStatusPage.timePeriodData.length); - - await adminReceiverStatusPage.updateFilters({ - successType: "ALL_FAILURE", - }); - let receiversStatusRowsCount = await receiversStatusRows.count(); - - expect(receiversStatusRowsCount).toBeGreaterThanOrEqual(1); - await expect(expectedRow.title).toHaveText(failRowTitle); - - await adminReceiverStatusPage.updateFilters({ - successType: "MIXED_SUCCESS", - }); - receiversStatusRowsCount = await receiversStatusRows.count(); - expect(receiversStatusRowsCount).toBeGreaterThanOrEqual(1); - // TODO: revisit after filters have been fixed per ticket #15737 - // await expect(expectedRow.title).toHaveText(mixedRowTitle); - - // await adminReceiverStatusPage.resetFilters(); - // receiversStatusRowsCount = await receiversStatusRows.count(); - // - // expect(receiversStatusRowsCount).toBe(defaultReceiversStatusRowsCount); - }); - }); - - test.describe("receiver statuses", () => { - test.describe("date range length changes", () => { - test("increases", async ({ adminReceiverStatusPage }) => { - const rows = adminReceiverStatusPage.receiverStatusRowsLocator; - const days = rows.nthCustom(0).days; - await expect(rows).not.toHaveCount(0); - const now = new Date(); - const targetFrom = startOfDay(subDays(now, 3)); - const targetTo = endOfDay(now); - await adminReceiverStatusPage.updateFilters({ - dateRange: { - value: [targetFrom, targetTo], - }, - }); - await expect(days).toHaveCount(4); - }); - - test("decreases", async ({ adminReceiverStatusPage }) => { - const rows = adminReceiverStatusPage.receiverStatusRowsLocator; - const days = rows.nthCustom(0).days; - await expect(rows).not.toHaveCount(0); - const now = new Date(); - const targetFrom = startOfDay(subDays(now, 1)); - const targetTo = endOfDay(now); - await adminReceiverStatusPage.updateFilters({ - dateRange: { - value: [targetFrom, targetTo], - }, - }); - await expect(days).toHaveCount(2); - }); - }); - - test.skip("time period modals", async ({ adminReceiverStatusPage }) => { - const result = await adminReceiverStatusPage.testReceiverTimePeriodModals(true); - expect(result).toBe(true); - }); - - test("receiver org links", async ({ adminReceiverStatusPage }) => { - const result = await adminReceiverStatusPage.testReceiverOrgLinks(true); - expect(result).toBe(true); - }); - - test("receiver links", async ({ adminReceiverStatusPage }) => { - const result = await adminReceiverStatusPage.testReceiverLinks(true); - expect(result).toBe(true); - }); - }); - }); - }); diff --git a/frontend-react/package.json b/frontend-react/package.json index 74e016d89d4..620f0fe9663 100644 --- a/frontend-react/package.json +++ b/frontend-react/package.json @@ -5,16 +5,16 @@ "type": "module", "npmClient": "yarn", "dependencies": { - "@microsoft/applicationinsights-react-js": "^17.3.2", - "@microsoft/applicationinsights-web": "^3.3.2", + "@microsoft/applicationinsights-react-js": "^17.3.1", + "@microsoft/applicationinsights-web": "^3.3.1", "@okta/okta-react": "^6.9.0", - "@okta/okta-signin-widget": "^7.23.0", + "@okta/okta-signin-widget": "^7.21.2", "@rest-hooks/rest": "^3.0.3", - "@tanstack/react-query": "^5.55.4", - "@tanstack/react-query-devtools": "^5.55.4", - "@trussworks/react-uswds": "^9.1.0", + "@tanstack/react-query": "^5.51.23", + "@tanstack/react-query-devtools": "^5.51.23", + "@trussworks/react-uswds": "^9.0.0", "@uswds/uswds": "3.7.1", - "axios": "^1.7.7", + "axios": "^1.7.5", "classnames": "^2.5.1", "date-fns": "^3.6.0", "date-fns-tz": "^3.1.3", @@ -32,15 +32,15 @@ "react-loader-spinner": "^6.1.6", "react-markdown": "^9.0.1", "react-query-kit": "^3.3.0", - "react-router": "^6.26.1", - "react-router-dom": "^6.26.1", + "react-router": "^6.25.1", + "react-router-dom": "^6.25.1", "react-scroll-sync": "^0.11.2", "react-toastify": "^10.0.5", "rehype-raw": "^7.0.0", "rehype-slug": "^5.1.0", "rest-hooks": "^6.1.7", "sanitize-html": "^2.13.0", - "tsx": "^4.19.0", + "tsx": "^4.17.0", "use-deep-compare-effect": "^1.8.1", "uuid": "^10.0.0", "web-vitals": "^3.4.0" @@ -111,7 +111,7 @@ "devDependencies": { "@mdx-js/react": "^3.0.1", "@mdx-js/rollup": "^3.0.1", - "@playwright/test": "^1.47.0", + "@playwright/test": "^1.46.1", "@rest-hooks/test": "^7.3.1", "@storybook/addon-a11y": "^8.2.9", "@storybook/addon-actions": "^8.2.9", @@ -127,8 +127,8 @@ "@storybook/testing-library": "^0.2.2", "@storybook/theming": "^8.2.9", "@testing-library/dom": "^10.4.0", - "@testing-library/jest-dom": "^6.5.0", - "@testing-library/react": "^16.0.1", + "@testing-library/jest-dom": "^6.4.8", + "@testing-library/react": "^16.0.0", "@testing-library/user-event": "^14.5.2", "@types/dompurify": "^3.0.5", "@types/dotenv-flow": "^3.3.3", @@ -138,16 +138,16 @@ "@types/lodash": "^4.17.7", "@types/mdx": "^2.0.13", "@types/node": "^20.12.5", - "@types/react": "18.3.5", + "@types/react": "18.3.3", "@types/react-dom": "^18.3.0", "@types/react-router-dom": "^5.3.3", "@types/react-scroll-sync": "^0.9.0", - "@types/sanitize-html": "^2.13.0", + "@types/sanitize-html": "^2.11.0", "@typescript-eslint/eslint-plugin": "^7.17.0", "@typescript-eslint/parser": "^7.17.0", "@vitejs/plugin-react": "^4.3.1", - "@vitest/coverage-istanbul": "^2.0.5", - "@vitest/ui": "^2.0.5", + "@vitest/coverage-istanbul": "^2.0.4", + "@vitest/ui": "^2.0.4", "autoprefixer": "^10.4.20", "browserslist": "^4.23.3", "browserslist-useragent-regexp": "^4.1.3", @@ -168,34 +168,34 @@ "eslint-plugin-testing-library": "^6.3.0", "eslint-plugin-vitest": "^0.5.4", "husky": "^9.1.5", - "jsdom": "^25.0.0", - "lint-staged": "^15.2.10", + "jsdom": "^24.1.1", + "lint-staged": "^15.2.9", "mockdate": "^3.0.5", "msw": "^2.3.5", "msw-storybook-addon": "beta", "npm-run-all": "^4.1.5", "otpauth": "^9.3.2", "patch-package": "^8.0.0", - "postcss": "^8.4.45", + "postcss": "^8.4.41", "prettier": "^3.3.3", "react-error-boundary": "^4.0.13", "remark-frontmatter": "^5.0.0", "remark-mdx-frontmatter": "^5.0.0", "remark-mdx-toc": "^0.3.1", - "sass": "^1.78.0", + "sass": "^1.77.8", "storybook": "^8.2.9", "storybook-addon-remix-react-router": "^3.0.0", "ts-node": "^10.9.2", "tslib": "^2.6.3", "typescript": "^5.5.4", "undici": "^6.19.8", - "vite": "^5.4.3", - "vite-plugin-checker": "^0.8.0", + "vite": "^5.3.4", + "vite-plugin-checker": "^0.7.2", "vite-plugin-svgr": "^4.2.0", - "vitest": "^2.0.5" + "vitest": "^2.0.4" }, "resolutions": { - "@types/react": "18.3.5" + "@types/react": "18.3.3" }, "engines": { "node": "^20.15" diff --git a/frontend-react/public/assets/pdf/ReportStream-Programmers-Guide-v4.5.pdf b/frontend-react/public/assets/pdf/ReportStream-Programmers-Guide-v4.5.pdf new file mode 100644 index 0000000000000000000000000000000000000000..b3e0b02b6f143b943959187243e0fd395841bd8b GIT binary patch literal 495911 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

1M1TjGoD~Wt)9oeyKDQ2T|16NM+$Yt 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 z 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

G!{M!GK?&EpL9fdetUO0(O0LAnUTVPVG(bdMaH` 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

7CuP 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

233u$3h$K9m7hA5FboYg)?5d;M(O7Fe{$7 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

ZeZ3+S;10Qg1iv)57zLisuH6dINAM0Xb|G7lTdp zBxfKiMpX(*EXB5!qEslP!zz}Q(ZisPErMsm87wZ=7PvI=i_83IiK`T>beO}W26~vA zBsP-)a!bWIp`IW?P0YsD@`rJbaPQ^I-dX+e_+0j!?(ycqL>qc}a9PE&N;^K!j{w>d zo03sY{JaaUGbut6278{Jr)cRg8pGTPZxp*2=IcwImaq(QK08m-2sk7}GhQl|tT9a4E80~!ktZU=Vq}2WYjhJE`T!fE`YMrD8;0q*dK#W(9^pp zC4Coe$83ZqUkM$-c_G`^UDmcE`Vht)4aW+BrP`($=bf1Egg)l zz7rhy+PWHrHQ-9@V=At9l;*D)1Rt1>t}?}99XZ=as^*U9WcCZ_P0B=RFtY}$_OO18 zzI#M@L_EfWoAHm{B4aK<=EG$Mt3IyR9_BFBs91S~BXqYdgqL*{D=cvpP`TDb>R=a0a_Tba#U-{*09F!8r-<-FTui ztmDFwV_YS{3+5t9Bu=3zMsfk}BZb^<_b7wk_=Yn`p2aZOKd2a- ziTPqEbTI@u17`I#fY(Bg)6j#O>LRSY<4!{QPi6qX+31-c*N;4L^yP;A!6&!8lm`Mm zh1wG*>A49t+LPFWZeZW`3-keV1o$)yGn5*Xs$(dFUN19KsYu5d1PeG1n&mkhkD18i z4y67%va5YGNypnjl9Kpd9#%1U9npDH30daISMK>88|rl#T6LDuSy~h@CI0=;NS5yf z;Pl3VjZH3kkY-XcB00eE_B%S!K8!J%L<+_twvqLK+<1!PkW#7jWe*{dC~rsM1|oW0tI}Y|iRC7q`8=F!%W-=#m$f1_lPUfbtTBsnj#|@( zQq<>xDLH-5sLe6N&v_9J@gHFBrj$2111Xjmg`_vr)37p@KNuVkWiJZn&n~jAQCV}W zj;8$dh}mB1x3C%U-g>uIPrrJ(Gn|uE(^=`Q30m?i|Ef^v{Y@}h=89DG*J2BxN86}c zH>85Fv2WCtK14B-yzs2tK5+1|`P#j}x91_>?3Lv?bDgf{?5vnSy}d1aj#K1SrQEZp zd_{e>Lb+6{H3#ba9g8(ukVGBmiW$7VPek^{Db^J3>&+aZxi<`}}(GMXYA!azq5#JFHG27@G12${D}U2{-k zS9+k@6I|iSULAh$fUCNrw0LPObAV}VsGP&H0i9jpDRt|#vSzvN(9TGAW3IEZ-B-I{ zejWB;6(S>3A|40XI7caZNUt3OnJA=(Sk-xYKSaa>RBW1JNIaZYUl&Kil7@o2e)qfn z=b!(iuu6PLeRuP`#8I?nUdzuQSTJZ769W%#qrz02nnM-DRpy~+MeR_wOssjR(oq59 z4K0B~95c z2SfgFUMN2TvR(kPHh>+bg8j?cA&vfZcw`lQ54b=Dnchqe#oGr}LtlQb-jU_A_VqD& z3xe}|L`GCqUMe^H?1@wKJO6ur$kWk*ZEP{zM=ky(U$fDN1Sx|wY5D|0FC-dYwmb6j9GQMUd$~C=ueq6iEXSUalapc3!S@(s zV)VbmJ@84T%ri3akX(ta7rbA(_7F9Bo8)l1IR?A<7@WN2C$7rHh1m@@$K34F>aUSm zxU<-hkQXg1ffT-7t7~jTC!0T+;(?c^2jnTIGEPh6G{Z<=hx>|&Kp8=xB&kL&hUC=I zu!Qm4|NFka-|ia+;pr0B=ywwJ|M3U7)>60@jo%?nnNEphL}DXEUia{2o~KKTrjH}) zc%uEJ`0=?DyPNU*myiwm&jLHoqdaj%s!XIE%63^YGSWa2BW5bOgoWi1CVSejOs14P z!fo?*x1-=n(lA`aR&>`$B$4eXvh#Xer7z1?mHdQ`jQ&DiR~uM*d%W*8|(cb;jTM zzhfsP4u<^Ck$-lQi|zamaUcl>(gFzu3J5y>ob8K!i{rbU&jfF4I~dz4wFrbsAN#LE z&C}rDxy0eXK}^G>Z?@U2X8kEPX)bBD9+Ss?+qyXCI@q=`+}+h4-)m{w)ydu6RXx$& z$By~RR#r6hw=6T)tP|F*a9%N7+TG=^8`?j-^S-Xt?>HQ8AO2$OYs( zN^CYKrXQhs^!xE|nllSubHZ%gZwzep-MiluH?+2v);G44ia7%P`|vJ?8!VJ#Bm1 z`c_#hI$P^kwN;e1ZyT=N>}}anHPC6VY;X1rdtIjQc~>?Rm+mYqtYMv{OWlP9l?@&B z%R0Dfi~ZgLJ6q|5MV+&#y2%d_2TetAWt@h7*)(Lg7C%zpa5@VMVEjDgE}eIafZxfG zbDN+o`QfVMh9z~cv1P?b{dnxrM`Jf`WIEQHs%(}W_c4~uN0&Xe`5#gVoi`jX0+zyR zzv4_O_V8m@;ZXz9dxO^X=~{jMyFixiF$K2xx9^GVDS?T&B4%=L>-O&5%Z$$cG;Ig& z88R2FfE=#{`!-a1#%OyEhQ1jV;YSet*)c|6f-@`9hpTH2$yd@a&po+qJ9E!01GUSc z_9)bLA$G`aDs~u)imWcMas(OR2As@l^eq`+iaf-&(x+{`_(^uDadhKXLPaG*_iu={ z+Dq;l8*|w_V4iuotM?`5*6ib>p=)o4M(~fhF-#438UarZR5figI}9eH-HQEWXU|S; z_VifmOFi^S*~r&V96x;N!l9!NfBB-x{lW_jGkgC0>@Bd?WE?gQg0(VKgFlNj9GRw9 zg=MbnlS7SJ@*mh zHSG=1j5C|JFr(meKeV6#eA-d@Ijivz$lwuJSmW!@*R+K-xSLxs7tHQps%HPhoS41N zcuejPlN`Hy_S^W)1?W3Em}2Gt;8}thL!XAThO-d%9)dSbPQV!8B;f7O4$PwYlBL7) zEvv&S+CFFdf!$?4ZogWvwBUHbn~pxmV}QRpzv#SNSY5cc@LJKKq8m&6p8zL|4R^!< z;2WPB{!)@D`QUcA*13LtJ7Agn($Y3SDhIF5!9Aei7{#($4eu>K_6hLH@>j|NWih}* zWhct6epHmBMbJ?mEl-rI<&T%YTK-1)A1g*GPFI|%cqWhk5xib8Q`ufsP<8P?qk4Pw z8#TQ(U#)qk_JP{putV%G*?+Ehu5PgI#rmD~XX^jez&HH4G1PdfskLdJhx0t;dERru z^Rnl4&+k3gJ@0vDyk>6^!E!I_ZT24ao^Nh!KHYq?Wmn7jmcO??%$W%~ximM;{fxWF zUFLqv{egRzd!M`2W@{^H>t7Ucf@5tz$zu*a`)3Fb_^$e{`s)cq{|_kwB>*|_bBy*4 z?e_!DwV&%K0Bp!3k390o*;K{)&gEw`M&+A*5S^V{FB1g#<%M2-eoGKzvTJ-&nes_x$|sd6pHw#G z=ukeXY{@C7d{UY6NoC3>l_{T8rhHPF@=0aN=V`>E4irG`s1Kx3B%%mXkc3k3KaNx= z3xT8{nQVC|5kX2KADkIR`28m=l#3{a;&3iSjs(~Xus;CXC}@UA4Qw$17O;*;wmkf+ z#A*~YCtBpmbLNhA^Y&{o*TKr2BkFSOIIwJtZd z9VGIU)=C!jf}H>$oV{~&CEvF%+DSS|#~rg{+qP|6JGPxp$F^>(og7xx1VId zIDJm7&Y38+ID63BEW%Au-TYwU1hU-HIbCfNjU|bZzFtXJJkj-yXgXv)@z9n?V$w@x zplO3zei8|WxF9c#!#Lw##^Wl&M+tkFC+II=fOo!utI7~#8HqwnfZP+r9+|8M83|2A znCe79>?YyFr}ftN5W=>D6N-j@jUmB6Esw@uRzZmiGhXfT%-bN0-6b6^6+bz8OMKq1 z@v^e^5q%y)+9m^D?Pp6Jxql`!A?lJ*#6*W`9&|(yy!pj_q2prc$E1x?D{b)Dv^Jp@ zi6BvZ_Dxyr0Dl?2Qx(eL5^5Ln;1*~NVFe}rarO|wBC~-Bl1L$MA0Zj$V(#J5wOt(7 zHM)+<5;=a>uq{ta3adOrY8`e#G75dK_k}clKStf?pzM@Da87mL4SW!jSaNplz45@O znXOA^#b=N+W7bA0Bdo=@a5;k49fyNl7>SH1ywpNe-cW2?NlyHEX{0UW^K{s%e_iE`LOR5`I2F6Dyh+z)c28wyBJlAblmS zT$njue*QfUsmajY(}&l_-dN_Lz@cxnFlD)@D}pp8Z$L@u;^C#Rpui*6%@IfSz7$<8 zgscr~@{!=ADNa!#g*;*KsS00Ox4pSZ-c(IGh(E3$lG`aU&WPj*I#n8C>Wc{ywUJVA zI4N)?Bo-#Jg59r48_LYEni~9`8kjMNP{C@hO!N)A2q={C?n*l~xSKVy>Aq1jMaVGshyw@XG7I`n((W$rD|49KgTUYZPvB2H!u z+{r_s$-SpT+S(n}tHD)d;_ju=UfRP>YmW&&`s^NnjJ$H-riwm!Z%I~I%w~$mA0lGC zuXMOy;sZvOQs@l^5@2O$?_dYev;2$vYa4quHe6cVzbFk{CMMd?!QaP!sXwECfB&nw ze|i6t^M5S;k^a}yzncG!|0DHB=HJ=>Nc~s-|DT=z@cz~PKRN%$+y74cFG;QcRF;nR zPxOD4mXni4z}m_IVC7(sOGiuhIW3P%BVuRmX!D1oKqClnGBp6mi}2GZ&?wsJS=rm@ z*#WE!Txk?tZ2*4@a&yy20Sry`_^n+u{wfPI9X&1!8@(2d>>pVNT>8JQ$^-1J9qkMN z_Meu8TpUCc9P}IjpR|YqD=zatjuqH&S^gqFjS7Fp^~n~d!)5)OD@;fG8RI|Jgz4yT z={_g^3RsvP_tWR!Bm*wpp9|+R4Ph2s7RG-_R$SJ<4bup-;j;bh?$d{?owb1iz(IpX zR#2Em5#ZuLBW9^*4B-F!B=Gl1OzTrpQBU9gPYwR0E&D0L&HZ2N`KNII)>GKj!U14M zBW&@Ro*=-$+7Lh^39vGDFu`S@V`bvz{`Wd}NgLNZwZ5&q;`wLE~Gx(f}mL zK2G-h>Vu<`7Zicf;q82#jx$_z>%RW^wY4$wyGL9ZR{L_P-Ro+&;;S?>gAyKP2!-VM2B2bp ziy3F()r6?l*+)KYPry>ug0P=0o|`Z(rGbBeZY6-s$81_qh<^+|b+9O%5gs^hv8v&Q zF>U{|w{$57@_9*ue-BGe@E^JMEP>^F08^HZ-M#`ZfQ{amBkbRGiJ96*SWp>x?7MzcPs>Bv`p@uzCKjo_NpNxRQgfj zhPh|{!t{pbYt%D-8PWtJ?8168Z=$;cs9#3{s>sx0+;MlP-3n!Hah!8fmh0hvf)8*hSBQ&|CW;>YL6{rb|0aHUlNRGeCxL1#8b~h5_O7 z{8~vVu7}8qWS;BCMCoCKVrGmUhpv>k{KiZ-P3401`_hKAbogn(myMFxcaUCH{w3I? zczfzDzs_RByBZR5H4m)5RvBWoR<9CrIcZv0be>!mAQ#-rI^3t0$S=YNt49#!8`=ie z+$|w2bG4TLbyACrF)AP9mAUKpirG35n>)i1#{`wA&VuDM43gHNTa@Dn_W=>yl}3cY zb(0NRT*6c}6c&mS5V*@)iuCm4ScJU`pyxaO3ken(AX>N5K6R?lPvSJ?qQ zmLE_tixLCdSI35}Ao3^?;cEsVXul{9rVb`g{MZj56eQFcB)MJpSHY!(Uv)8yp4FKk z!z&8gNmw-1QvBa}a};r_6&1x4^w#JFm2Z$WRkJhnLBVb1N9mwzT7G#4Hb$r$H94Jc zX~9D6tB@A2!Y=C^4@TCltS~**kJ@I_74gpjw{ElRmLCAUn!Wk?+2FzTxCm0h?xPZy z9)^w`6H`TnWvq=*(KM)9`R}sAsSXmR?ZLwG)Hu zAyC+%?NWtY(uK~gK- znEq58DX2%-Z|E0@$fQHESf&n07#cT#U3a&k4kc=|gPdKh175scD>PnkwWG1}hKVo@ zzt*>0>j=x$it1%ImGLfrRwP_(;e#o%Tuoec5OD$D&l8pM2~nhp9IK#BeC2O%iL*b4 z&M2_l+>ah@enZ=kpe+zE&)sE6U&}CWPJ3~3x5dORmw{+Jd;m9TM*BchSC+VSAlrN3 zwygS!v3tN1U2e&!7C|$cTGv7zZ_?0;m12JkUe*wbGS(W&g$-kv~twL3~Y@vY!hT~ld(+NiS1P?U^CCaQbl(9 zZD3&Ca}}m(g>7DK770ce6MsgO=-P>Ak?7pNl+>;lCbu(Ph1KIL(YY5kkY2a}sQDeC zR#{^aC}SjUXGgamD**X0Ep+E0E*Lm8)$r?Q>z|zNFu|`!wBVC|m4s5B;#jeamf~sR zh14|CPl_SW@>C>_r1s*7w=u%c1bURJiAVU>-YIc-92h-5QvAq7M9deLmx%lc%1AQV zz>t)}Kj!ahnRkHc^WvTc{kp<6Yugm;mQ?W!Se-AJzZBD!KGwGa@uoRn_)eMAS7J6C zKGMsy6CAN4i75v=`_YQ;{J?|m!3&H^tVVZRhoTazO3-t-MIQdPma!&DQp~T`&{vvl zdZ>6Om%=(ynp5SLhxE#5WOzLraWbJoM}A$3O%|LvFS@X9ZKc`fGg2JP1@64mk27H;#aP_NWajLV&nr-Is z4aCFzLTzUfq*YBZuTTyOs!BPZns~SLsXqYq$}Os33f~HrnX$Fz@_Yn%cEOyDU^;hh zJ5$KEYb+sk+yZBFt_fhhh=oqEi`#9ZPkLs*BaOedl3v1mOZrmCTdwb9ZXf)>*QMIe zn?wg0NA&}G)(T2D<7Eo_eENF^&r3y6u)u737tIfcVv=;_>U|5_$GzP;C=MBv;Y4P; zaG(KcL$_#{9`E8;NKkj%AE}XjR{myjq|bwD=?mpSS$XrB--gV<2;&)mjK^9aec5Nd zxiNJnBM;z?HAB>QsS2nj3;iH0@!LFACyw({q?H7l?Cf3b9NBz^u{JlPjed`&p2p3V zY}cXev&@&7soKeXuMuFa4J`|hK%+TK<`6S6PN&c8wJX-Acd|6dJUI~68Z@M~Lt1N% z_1vw%mq=K&Tr`>QByZmbT@hHjI8kIDGHl5=^)L4Q9=UJ)Ti&^+3KL<@a9kXEFyuR1 z=_pDXAy<-=^!A&bhhwUlSTPvE`)b-1b3Mwhr4YP1SWizugoNK;)uSF zA(&vMb&X8o3-V)Roa@fDr*EUfuaq!3icF6;r|=JjyUUNe=kMc>R$kSUJJR*)OdIg9 zJ=Pv^N4|3=2n#hwaV+qJ-{h@QsUn;!4xtiv-Y*}5`||lT;Q?X;C>f7a8)bk~7y1k- zqhd-krJy2M;xUd4${(}M#Gwax3O_c=Vsaviyq{-NOQtYYh3JB1to7phGW5_0v5~Y9 zoqU``N^L<7`2wwSE(u8)dp5M*H?@ zIi%aNQY;LaK_SAiENuYo)DYP9Qx_umoTGI0s4x**-`VEX7b3ZV_qV#b(aItamBERX z`7JA}oL`6{syh`*EfQVB2qciRD|#sisj_OQ**x63vnf;G#MRM-dA+Xgi`T!ZSj?yl zV5=^S!Us+K7zJ>&8NoTb2~KbwzmAe=tJz#bb?R3YaT&n?#uG5(8C*t(`yDuJSMGBd zs8|-)R^RKLxdbBmpdiyV8@#n~c|}uZv*ID!gM$oN7;QX}ggWoB_?E9!96>VRlcq`3 zA@X}V!)qabvGa|RGEtlt$Afsc(>Xvq>5e7;|8|YMb`dOQKd`IHeG5D)DuS~tBQNw6H0YBs# zb@Bwey<=bz)2+SW5DSXf(uay!D(wNE`L)osVYDTNKENiZjq|&P!sK>GW<+&m>I?$p^uUV~CUY#g)5@?QsL+qU~?U zR)&ZItU?_%usV%i#~Y7;ai|Y>%BHK|bQhFQ&6TTHIjWH-0o2hJ&Sox9m5SeYOX_tW zIfdV?j+Lf<&tdj4@Sr=N$Fb&;yv`)M7`W~_My7g-Oxka{oW)0LU_A}M@pY%U9F0n^ z*IzpCrH;2DaX@bLx1NbFUB7F!a<1hxpIvxJ!$)w!HI}QhMI~D|EWu-?i*#63pEr4J zHX@z{G+8<4!uCeYGw86~)ln8Cz$6n`ZH5}2@wsF{d8}We`IiFvUwE`i_gDUxDEn_f z^)Ghe*Ru!w!Cf?prj`JEX@Il5wWXewtb&x{Cla(b_(bV?Rt|pz{-8yMzp<5&)hEU= zwKAp=GyFt*rVg%DqBIJQ`VN1P(jT})OQUG5WM%pX2z@I3gU$ZJQGX2mcO3P{zmDaQTT*Uv^weTl%mA@S_ewI$mLC?a}fX~X<0)R_P zBceaq^{^0rG^>%TY>S%Oc|DbMu*?!M$UfKTeRYYGfE)7XZOqE+$f1VGvoY78b_YPjWvirGQaGj0cJu|m0a9FOeF<0}MsGL;C8a(P1 z-fhQcKPpbKRC1CGk0rj;zX+$&89lqqW_s_nT(lWNr#XvDA1IsQS<$g7!aP$(KU3UN z@CBJQgeuw<>By7hig~AnaMi^a)5qJV$|A=@?XyaSg-?-GR#SeVY-y7d&`>`Ma~m{) zO0{^XCV|$kR)wy=lsg=bmTxEz2#<8e0)Hn>|1MSM`=0u<{U_u{=}Le-82KjOZ5NlM zq%8WLz>mQe6bobA`?-0&3BxPR$R;B0X8-=uxvahN{ItW{C^=*Pyp`(@`?K2@!O{gT}hC_9`+8K?d@wm8-h2@%%&BS4U56H zN-2FcR-7(tbTBirEi6VltuUMgjnz22x6 zFnZ#1FhR`7k`%L6#8M$zQI^%chh(S_#bAH8!I!|{tA?Jjs>v}lyzM7v)Uh#Vad0d( z1FZ0v+M1ARsnWp0;_A^M3h*DsXuSgvA2W>K{>D_xznD9Yy@BlBUa?B3sc#IHj9d^nRkctq9AmeU9cB|cUsF)uk^epIb z)3qegmVEyy2G#JK^Yk>Zy<|ILy#R(%f686Ekt@=YG5}{Z-Sw+nz%?Mjxj3&ze<~h6 zbD_KLwpy~}_s&?zZ+Z&j;!(}hU%!8k6|9A$tp@%m*a zG-F*FgeT7}v2B%rZW5iQmTcymgW!DM==8c_NwjMjU}f$+1&L8RCOZ59b7Swy@SS#a zG~ag#^IBMM7rInaORXA^leIPQ;JpV>*qCAl>h!YL)Cg-ECDwAr1a@gguqS5?6yPvUt35>Lfm(tqmZ2-TY1ac2$jZ`J%tmz%Q!(s})B`8*-DL1<(MfcmM?b4lKAJ}G4Y{*s5NBelz zxvK_CgxRk^xFQC7o7j>BO(&{)(WQ9!wQ{KRkSXeVK#>`8;;(VVIWLM0XYGG zByG&d=sV9aiM#UoMO>iT$Cg8{{gRn!cajkgBT?lCCtQL=eJBRM_q7jA2kozZiIqU3 z?<Kud}t9lMaP7>EAN6-93P5Xl=%U3gB+AdgqBXCY7puR+{uK|e1ELn zPvy2RAJjyJNK-kce@Qe2vDr~S9h-M1V;#mszju}CqW>2ZqX1Oa*eIjo!02|8lZ zu~dgV8T~bL_KemAKh{90FBP@h{`Eqo*Yl@@JSMoLMaUx<^?0QM!b=*=h7H zNkeEuSQ93Yt20HpU_EuyfNyYlAMzBTLcGww=Zu z!g-&JuocL*-W?W!oHdQjC@N{$!bjwDl*_4AUVqK4rl?Zzdwd*_l4|(t+U$daDmrM4 zB$H_qQ?$Gfi`YMMXZgtxJT~2O~lFF6ueR{97iL+ z=`H6zypg^uY*g?;Lh!&D`kuKdl0ECva9l1hPFPM*#Uc?-$yFa`kOvTCagh^HFrVK< zB4>y%x`*0xG9nmX@4sAvktZ#Sba!eO?7&x}u;5iT39Jb$XL0nSQa(p!J!R>DdIKN% zl1j9=m%YMe$-n2*y}yxu?!astwgKJ&eybfv^!8GHgHpX*(r6lX0q;2tp{>&Ub%;s# z8);N4c(XgLR##qJow06oEI8JepR0&bvokkl7h@`A0NIdBUp^Mty{brEIZ*Qax`9)g;FEpQBp{v!nxSgSUlF7M$iJThHg55n;Si8b=SnhVG%TaWerOm_Hadxh zOhf<}qcm_IS*oBnnww|w3+E?HPEO{y$Y}K5Q24E#R!Et?$YA}#N$1GQOpgTP*MmZJ zE8#|)l8BR$vO$}E83>U0><-ldgS01v@pS>j{U_vRA zKfGx{`?~mPdEJm`>M1AJ;!}C^#N>oy0&cHFG0-pfvN_{C zMpigR)c?Lx?uO#twt3wY*onBh z-+84>f`v{;+LorNdi1ATz@ny2)+wWEr(3{zxkDB_yI%-j7;2rMoY>VJdRC*xH;nC( z)ZTZ|-ndc)UU+4EDu6wMPLgnLadI75B;G2s-xFou$&uOf-hJnc=2yoLR9`E@=3ngU z^wHhk0!{jrZ=Z=us@&RX)NO&+Xap&&z@I$o^nVPk%XKo^Sk_gntwwb#%fTnMtnVGp z#JC!8O$d*k@*4M3u!v9?mJ=^`)0&5!#PW*g#mmsAuasT1$*p4;0v#(O?us>r-A8Ta zm{P9OZ;1J$I11jSPKTWT{P25_ag-VInFXihdj9!vD5LM8lKn_yA?=X)5E!`cAka-t8(jByi^_0&`ZUwQob0NVOK!ViqBi$P|}5^zk}8Bj!-{Hf7lM zX(s#SP{#BOwejkxVfCgpa*rlrN<_%1)fpWt@xzLugq)XDD}NUMCO4aUT_Xc zXiyhTvjoQtKb(c}%jU6;3l;z=u5Nh3F<~!dC6f*c6A5n4o(ExJDG3FgQ4SILK2Te* zn$Q=&k`LO;p;mL}Be~US8T13nJtzY_O4%g5q8*Z~x46co0$nQ!qwjmqggdfbefDZG zQ}GYyi=rO*!%qmK%>)!lKL;>sX1^(!9?kXaXLa@TG>=W0Maa7&GaBNQ`&Y^NQB6vv z5Q?rL6bWX&SjE(!IX=Dr?a5^I0TphU7|t}(fo=8%wWCbtC3-(k{$dvI$z{lCcsJjo zOKfgwj^i*jCc0a1%igCDQ%%Wk%afM8dy=kK9(~OHP{=8Q)bk#X5R_E>EIA7imopMD z0!G$@AD_ec+n9ixY$@ML!8P29%Z$1){vB1 z<>CqT`N`zdn|!+3q6J2}6g=@JIMQl3nZ#ZGdw#ye138ylWM^TWaV5P@=4GZ1yLY90 z<>Je!#OVV$AJ-9F0@wq&_WJ2Vg4+XmDpe3;17=0xiFVm8m*eW`Ma8OCW2ba@Ekh=` zM|Bhp)fw5Ewu|%jMbDc*Gg(u^n{BR@^Y$fVzmW_6>Q@u1nz420kVs0a6-w|K@Y4|X zShv{cSU(Ce2}mMzF-tMC$R+9vlpcy-Ioe~W68<3uigVf==zS*D^U@pfH6;C#=wfUM zIVlbBt8}Zjt7NGq%lyo}3r44PcPr19trqSUVyzafXKf7mEcrY_P4abdvLVqk2{~@( zVYCh0S!ucBsayf0R^~Sage>VUwCMHC^$k6$oJ*}>uip^L5Kb0U?%%3y+>tD_e}CH9&A zMz&R7{O;r{d`d#XlDAtlarABG5=iIsrsDNmQApJ{jd1IT%5G7dJ5aO$AySJNF&$k* zDBRw>ON$ezucA4c6;~uhU`zR>NvfMhC#M81sNdo!tuo6R)Mo6z0I5BnXbGNh-T)73 zG_r@hLAwAyUL370q2Ia9h%637gxW4ebkGF|dbK1vDZr=e#~zttbc5Y}pRloXfE&+2 zHRZ{lR=x*5P#By(hVSE{X{bdR0g$iDR8H5|MQ>#9HkmfgXiy@aGb+$nB{5a&;92Ic z>IY`WONQS{vG*)g`y&Z@F;{kJJ|15zecP8eJu^8YA@%g%&=acWO9@}2Aq9B|I=^Mp zY+syt&^OjKg{R65TxPzfz{21#EtJoP?yD#~c8KyCQ;%*5^^-vgKf#_UN}|rCD1w^l%w1e!WfnuLj#(O8dfVcb^xgt` zPpj&U_%fcI??A#8wCv(9y%iSQQ)26|8h99Z)_5YLt3hE|fLV-_z~k2vIjzSWEVa|j z`e+wc6^0_<#Bwh5A>a^JU-J!9Zxh9Re#*p?k|N>93xHC1e-0MPdA4zS@P+d0k6T>G zeqz9{8Zns6_T^`&qr_vhx9?7E{;nTCxefPSyasss8wV>QxDedI8(3{fQ-oD!5KgkG zZXuq@H%?}6q2Dq*$6~Xda&F4pa^1-9UB@ix#{JHJXSaX1yzJ8mnW4>4p&fxP&_kMC zLbd?X=)W*}sL{K}a1UQ?g46hL??IvoVu>Rw!6+5_ym`2XqiIf2-i7gitbKD0dw_RK z$S__mOH$Gotju~h<&F&2r8e0RIuUHY=T4XCAsOFfnw>$y~g zwIDSxSHpQ>qulI=3u4?xXemO0(T@%aTJ7W7Y25)I5e8)5w6Keu%Rel)3R|PS>6J0v zqn|DTe6@%a`IH!u-)j*z9JtO-`)i{crpFn1ox63oW!!C|a0&{KT%YOM#X7q&aSwdQ z&8J@6T-IToP%~bZ4bE22)b2T7&^f4Zw1W!cWVY|xq8qQ2Jis&DAL-s9y;Z_c*MoB2 zT(G}KhAvi}l8Q^h>?W6ADB?7<>(bOuHqh96e2fj(?i&*rZ(`(6zfPMAU;cQzKcX>E z>2K)q;!&CrRCS{$Ys2AgLY>UL>Ki;}d**I8TYd%~NQR7bX85ro>(i(_X|#RB7^pQ- z(N~K$Id1`xLER8mK2V!}S1VJiv1GiIes)=Y7>c&4eeZbBnjvuZEd!^vahYbx{R|FE zdJME}c~Zh9YEd^Y+yf&;;6Ao3Quhoy;CU6pV+(FcQ^U<9@kHp2dD=teHm|X)|Jjt92H~_%Ye(cn+)3Qz z%#j&)A?VaV2a)PkV7j+rN2Z#8Tgkj%yv0}F0_OwWJM%++*eLX|QnmPo%_-<1NLW(| z=tM%i!7lWf8uqGEo~koA{K~kWYA0cdN3Q(&i@S#B&yOg^eO4S1YXhatkxPMmoGT^| zl6nfIlfgQ$-|vohu}PQcuguES+RE5j&VCagLFT*dK^P*-n)yLGgXT-zf@`%F!0CpV zMTu`*=w}f3#FzteAMn?-se=mF4U!jz3bv`Nvhd8E(Eiv4gB*;9 zW`kRTmS_l+UzcgVaxFj@bYmb`0B>|Emx~`_OAH*dh(C% z1o}QM@lG0RHfKnZ0^*tY^F!j+vKa~J9Y6aI_SL4b%RbY4ZaB$$1|QUF;tOGVe$jph z(+cD|JUrsbJki}maFZ?mIgf$=8*J|J=E#D+?4z_FDr{D&$`x$EHI*JS`e9>9J2YIHo+} zs?vWMzwt5a4HxtC-)GkEU{Ss#sE1T6(sbBsdZRWwq=Vyv8JE7StBTuabjU1?7->2M zyJ`05(sT^A7pC2&`q&d{zpp7j|5eUq->fzkciQHBVyETT^b&WG8X#FJnOrIc$tuAQ zbEp>1FA-VcJRwPHyw)7K!x3l7UBGNo+o2xb-EHYx;0_D9nh3mL3hM`LM$mi4^^;&{ z8*NaZ8yu}YP*}n*x4u4bxd9nhU(UkWe7wT9`?U_9-YTSxZ{#%Ewy;P1UZx2e{a8$7 z*M9ebcW!n(h~Ry}HI})u-o`dMlo1kB3V3RS{U+WpI>smL3Y+?jw3qgkBA3vKt2JT` zXz{qE)={Ntqq6nY;>SF}CA+Vo{1AiaNY&eXwqxH}mhUNAv#*aXE+g5_=oR2Gy6PG- zeY$T5T_8WwmKG=aRr+7#>nwUa?QnVhUBHJE|h8m)W z((n^bL3s+lu&d*IufsP33>14ev36x0NTcmZoUohm?bFPF|l~f2*(iFk}aa4_8=3<*xW>^u?mZBVr@R=dv@V zJ*>C!ovOd(UX#C36QP0u>;xqfhSZ1(L z*8+QDVSaQGSr?Oipd)VMh)vWqfJmrYQiC<6paLp3jh7s=n|kis5P+MsS?i0adWT($)o$Nym9u}Xt=pSRzg(L zRt93+E;LOxxRsUA!ip&_l>%5XV8)?jyxdmhP$}@F_jhlpt^4ZEMoJ?YBX47?v)@JG z3%^cbAisN$(c??=WUEMz^|NF9qw3UPnMChJ2vS#Yb zaNFV9WPrA9CxYAHn=~oa`l;9rvYEC_N2N{9qQVKqo_1t!VQX6kR_4WTH*pWQ&%10< z%Fs2}zMHiRz4tac0;Dm>W_tlX=O|D;cPlS#ZE6`i)*$}u7@%&Nr>2Gg+w^ z!LY3{HTPBiN?@vm-S{*rC{Hgg za4H^)HB$=Qy#37U=_zbv6&?moNkGA3e6wevbGLUjM>dbHMAYB!Rv$^H)1YnA2>8IH zL!>g^e0W^t&&|&+4Y8}4QAe%uy2o_-bq8KaJ%WB|4VCc&LaY2R?TvTY!)R1$!>+Sa ze3i6;l8lP<+WS?ZpF9Jdl?Lt6g=E1*;mj|m#5p>V{As|2v+n)cz;?=}`EiFHlQWX0 zfo*0sxpP*lkbl;eSYIIv2#GH*O5MiPP^yoyCIP)SQt3Q{Nv(xO zRIqwp{x`hRh)XJ6VLoFZnyZ4WykJ(TfZ81(uHfEOAi=QtR zbzVL$#KL@`4Y@3*heEzBZbxE1V40kNp_QSK$JjgK>fmf-o2`@Dymr{zNS?h~d`6(Q z#4;QavvE*GX6q)_n8itVGv=qiy&XY7TC~RQ^VS~vJy8E}p6sqNK__b#tN3ew1bsL# zWQ=^Pj={c}zcA9rXxBK4!XV=pU~)@cOn_>*ASZb3P-@H`PQ%AZ7rO=R=OY}Z7U?`) zy03fUUF27*J1^n~dp1^%$SAzo?R`9K1QaCT+L@&%^XQ1p^%yl>Tbrh5neLaL`@OlI zzB-JjxQ2;|}oG5)mFLOgt?+2q{ytxZ$WTz4y48Os2hx8vlm#;a`?YvBPMZgWwlOJG*kZ~CT^Ttl8XfW;XS<3IpRK0Iaz+W}*VRTsB7%TDv zU0K(+gr5tMTjeGa5*VzPzdDQQ2`~GtO`Z@DsS8~D#Sn{2lT8lIXiC~XkW}YksE|v9 zf5WO;YaW)c9IK*R6|`ofC=A1|Tr92jvP>Khvo|eZ&iOH`SYCUUjY*k!wp0awja672 zPQq;ACxRc4x#m(sARug;#B>m&ytUEf^Vx-T8p|0wXV}N_VsBV!%CkaA%p$-dZBs$8!orVk#amH18Fy$WqL~>ynuIeM)Uo4kGijijW*_%zX#m_vhzJ4u`w)y+snkk zVRUpSH=M>=FydOklg5$|g`?;74E`QLy6VCkpBfha^R2K+Shy0(BX*xEe=yG_5p48v z!%o1vwR~H|$y4NMQAVUwsTS%9?eoJ)n|(G823LJN5HA zyh z8B)~UEWS2yuH0~cUFqK{Z)5~*8GH~8#B_fSY-lK?*5u@3lzUDO9dB=M#f-n~!+9O? z=lZQ?xjD7OtP+_SaUQJ#Zk4}r;d~?RnLg8Y_^6f1n)nvun3_k5&>86PhV+U}1` z^l4%~>(#^g#iZ%sM8cg!c-7sl1y=ZZulDjaf5z*M;zh=RN#4QJ~+s&}Gp1Mo)hTyX1RR2*F{su7kv103OKo+q!6 z(u;w7t06M!CmxCtg|r)Z$_FpfeYrx`edDTExpkho_C2IR)_yW++Yp7co&QFDvO0dZ z+*D|td`$gU{)Y}E-d@$~qTh%9m*^*JaXQLq=`uP>#Lid3YHzizwAY}niV`|U!^GE` zE~^>|Q>3O0%EUpJp(;DoEwCF|ElJ(XO{IsnH(%fw>scNs%IJdzZ&X#{yHq%cvZyU1 z@~ToZ$seZ6SjbB-kH5O^_C#I70xec=bGl#*_3gEFb=upWAnqj~s6ic=>Obgq*t>l0 z3%|Ekzp?e*ExqIG!|g1>v;53%jmzpv6Nq37#QH=zPD_gEO=HWX2zQ|%X6FItX&qTI09`DHs;>nY>|$BzgGHA+?*ch?Aa z(u+bz&x$bYC6F(=ugP~jgJAkVf-Vh~6abxt;wlPC?y={ii4a7&hG-w8V$qb-TaE!} zj}Tm;Wih}FlDy+z$12F{PFeN8yYUl(`^S8(tDbyN%L`(H(PlzxhhBt^xaCU@SmCTQ zGXz!NA?1Q|v*ePC>VT|~zzzJR31WCc2*V1~^u^Oi4US5KM{?k5)$VMC4?z%9@fACs za?7;KH7=Ssv43ebJHcOhK?4{w6p$(Z$kvaqZbRUX5(OnL{keC9n`&u@S*5nc3&yHs=T1eru2;9RYif+d)VUo{AeK1TKyzfyoyco$+$P0{j@cOy-~Sk zxyx}}AHC}cd@?Dh^zxE$&R)13Zf8krS4AdpbNg!+!TAZbkK|3FS7EXPq6cT7e08+W-$Qi$9y&tOY~adl z7563~D`X>!w5?2al)k%=`0spc=r=`$Ke?}(P4W60RE3s7!!{7YYN{f~Q$#qbkxa&dr`8SBCtu#n#Pm5Wrcs4moQfc&u62Xz(S9a#>lMcyus zFeeWz{oL;Lw3&q#MA??aV6$2wy%ba8kl91ls#N7ydMfcjhkvw0qP;f(oW=R#s$(8G zxZAbDhbO+Y#D4p9-+XPzlff4W*EPC1Ot%qxnet)sjvE-;eQn#Z`>bC}!AbR_`||_) zRnZomt!fcBS{yX^3ei@T-?geNb~c8bn6<7rgC02U$+|s;vYq39WHFceqM;+(3h#B_ zajZPYPla-D{Qgag{wrrYqV3mab(X=cnxc}40W?+5w^nP>p*H(<>SYpTYd|Au0(xz^ zE6?GS``Ux)3p=`;2G}{N@oyrNUE7*k;a&y?l8I1pr_D3U+S;3eL-f!!3)g+5(hE$N zHdhoA{zd!)JMBKMAnw$iv~72|RdmI@%)#XegA5f=Tk9SsG~D=1iYL2*qCC5d%FRh` zKh-#N`Dy2YRO}-6|(zL3z6W2N+L=vT9tkIKpzd;*O!M31MLY0PY?Zx`$+YPmH?(OEpc@im0 zX_X{ZKI}wpU99ujpX)FOpbYBqpy+M%>B!pD-9ZlX%X;gEJO>=!U|dx)ZM{sbO^^sM zYqrcCod*wI_hbs&gWSX9SW1^<^|c{QDp#uGP@OE?_Vbv6bCm8nNX~I66`NS5%K3~2nhjE z1jNb1XI3i;z$@WFXBAj(U-9?R9!gfMz*KJ@$9ec#H)<_Xen?fz01g z`o@+dY)<|v)pbg#IL5lb;evC{nu%6k=I+YkO7cAv5S>VaH3pL(Q$kUKCTO2nf)l$%KX*8p5S|tgV8(+q_(P_Vqr1}uXY-A>TwNYsKOl$R2mU?6i8j~la zR753}@E9Tcft-v2)7&bv8n(D#9PC{8rO|F&siJ271nJVJy66t*@C!X_-gDskhqx~Ir>?QHcC~BlHzH3?%d=#eJ??I#*)H%4>=D0 z&=leNd{?U2X?n&%4O3x?0;%>cEWsb>No|d6^`6ODc|H(XJLj=$-D0EZ4i+igI#bNSjlem+TmnHHBdVa z(-I0dujm0(lrA84-q?hcNz+o@;9?L*J~v?*jV%#HCIa%oa0S%*@Qp%*+-uKb=0^=XAfB zzH{fk`yxgWJG2WjcU4wqR#w*kttIzU@|cWK*n&X{dNQ#h0t?FPJ5gwcyr-V1(=t^u{OvFYI z%MTN8eG{hUzVv9~>emrrx)!Knc_L{`g%LA{hb*~JS=WNSi-!kSBTq1<0I)Vc<%np^ z+g0*JpDp)|7nZ7>@omt;${;6#Jiw!xFqls%`Xoz5(I-_p5V=pQ&1r&VVhwbn38CgI z7~m&ZWJLemb}~3va=-V*%0&+oQCCs(G7NVxg(m)arS)Y3n7K_#Kcaz!>Mr%*Y4T?{ z1c)Pk5d6Rt+S+jSez5~=sDr`$${Hu$Rouz9YN_@eUkFX1(H=rACZ;D4_qnJj0cc$6 zZ?;{&hmR;4t-|w^)nGihAOm687F&cqeIEiz*+m{*eiH2_U^6DY67#CfA(0kXaict# zIoaRCfuEU{?ZhQDoP3q8Fk|?0cDlJo6*SY?6Y7c$K%MyO4JYyI2Vvr+khS_sVYJ80 zS!q}Cy*!z$&}x%{Ef0Xm25B;U&#ju@o-3*?OjLl`1Rk1UA2$eFM*a@_^R3(w)F zYocczJm`h>gosfk(+e)CutU=e3P`Gk2;nnRrTt^Yv1KO*M=e-T0_(*rh`HFYLehUy z=xNg;6exfx6GKV&Q7KRg33rQ=Tac$EB?X!t8j@m*rz1`miBb0(%J@torNfiSM~5_- zP<}B!K&iPj#GIA&T~sAyiwC0HO17b8g;LLs2%PvFKwcm?MOh3p=5q^OYfa4O&WFs& zn*MX<^3V_yTQ;z(dUD7lsRX2e{Ac!{RFq8MH-Um~4jKe`6b>m>XD6<3=_~-)d#0H1 zHsgN35Kn@{XI3a}a{0X?W0E18s6doxQW8UIWXQ{KnIvRUA_f5ZzC7k!EjclR|J*^$ zRw!NU)>l+RvZdYQE7siC>p6CBncV3Edjw+xdpvIAB=!fSi z?9TY93w&%1OSbsw+>ztyq6hp2k>e%nI>jy`i?`lA_o?b*&$4Cvc;xK^4vx(tngv<~ zngg3|P~PpfSm!g3Uh(nmUId*gFUH5`1Ia%%r3fl2?yc{z;h{N7Y#n zH}gGbcmQ~#VpY~~4z& z`8$ClFU&)Y;}_yN_*pz6i8Z-<(&$w^_CaUSHRkUIXEom^nkInx&fi=+3G6k#OP--@ z8r{Qewyb3mRzDNnqjhFF@WVYQ-0Bd@zhazph{Zht=H8($U*I zfBGugIpNkJY1$2KW*piH1@y%(z)3XCha&@3HgFLj5J=$WvAUN4xyWv~WuJ_I`;QwPALnCX1ejLK?0btG{VwjLTzX{^}QC9zgIRylTq=bcObaZr7hgGX9et{R@-%+fV*+#Q$I5&fgB>kBt6+JDHjP4R^AA(3O9JI~o53cQSHt{HJgy zBNG!L-N!~kHYR35HpaiOogBZ@xBuWbe?vR}zGnRIA)f3ke-NH*|2@LBinCZ{;~3(8<_sN;-i1~t$X;`m6h@LecArl#K!TLME_3A{?9ajTEY2y zT8@8a^6xDitp6boEkaJF-*;!^`2E{oD(|21+`lJPnOIr=(m8z{`RJUGT2E;1lJI?h zwMukhst0{X^!(aDKqzUhf+Q)BfcW-Yjye!PFE+x!JTiV&%(ox{xk<1-3<2t}Oc|Mz z-YR5LwGg<+NlDk^I}L!`!lbZgjsy-`c1S=2zmO#!*fd_`p;_4m-8t9JUdRs`bDl%8 zB0nhS$byclss;&y z5(=v{G+F5VvTfF)G@u|5`RuPvylnJ1!$j=5 z4Ra}P&d2F0J2lOzke?)iqX{@G4J&`}0(Lz2#r&I&>(9jRzZJPqw6nJPkNRT& zQ+3MzOEt3p0|_#Ks;s`5k-=|@Xd;RqLTIf2?5X)a{{GkEWQ_m1(SE3@efjt(0F>m# z|H)&2F>o-ow))31<;NQ@8+$GQz}VEm#8IE#z}gZZC?sfX?F6u~`vAb{?2K%z?Hv9o zUIx&&u+|4y>U|*gc7JTPcKpYJp|ycMK+ndM>f@*c6h3}T-a&>&>t zp#Nz59BlNgOl*XVY;5!&o#_YaPtUIPFVO%gQ!Deo_P76gBLHRw4(30%vNar2Yutw0 zXOJgEe|}VEpTK=y=D?Q1^xmqlpVAg+!qKRKwe>$l65`@5gz26(!tU{db~Vjidz5^z zCzAy29%S0XR&~%je$jzpTvWt|LhtA5JC-ayy{>Ot>r{oc^U5!JefiMB4$s}Rt^wubYhC93Y-N3E&^7E`>BoOY*Ur1B@lxrG z*m<8Kv?xwKhskR0;ulQBhxompHrAm>$&vsyF`sDx=mkxhP(i?oPm(tz9*sqYXvn<- zUW)Y&%BLrk{M#Gwl#ZZ%g^6i~J9{CTSannL#-$I0eC4Vs-2unYc^Hgy`gDAB0DarE=(qoBt#Um@~HJe8k4;7fDll{=oem zAwTP%5}86rTD=JPWxZU;2SJ68JXRUb(IhELPC;V%LdbHRWW`M)Z(X2%Y-?WwG(G!gnJZNdiV4Sp+r_l?HVjVIP zFFi3CXK_Df1Zt(Q>j&UVbqdy zQ^$ihXp|1m%WfDqTzpA`5xfw2ofZ9hC?19sCu`(4lBbHKG(Z+zN&gB9-wk;~HHltC zR8Kg~A@#sFL`rV}X8mn9UWLpo7O}S$&#rzi0x_+LB?g)vj}ND3oN|P)?Wss67KR%L-mC}AnEku3)c}b`1Ml9F0A6r@eg8It-aWPYlKHj=K3v_V z^7{nV9@^Zj?nMV~SgKHv$e9TiniW4AJJs>Z;kJm+y;w-(_M%X4%6Eh>5D~91VLlh~=<{AEe%UYiZ>BZ$PisZi%!Oa`ps5gWq0D4L{fczkFMi;E7>8FUUT zwxxocrOBNw62A4KjHKQBrc6$lbc52kEh9N`^Yg7rE9OS)ZP}+zs%aF(uBeu5_bBiZ zwzzX!2BYOx`iqS+4_;_J9i+*`YH!Be)wdiBv1OZeXVLAB3Fdf zmLQ0C`tNKwgehwgZa--q4O7vYMHW3Yl`dN$bZsa17HJI4d4i{?1f}g!3lcfm7d2$~ zUM^HmYZdYjsvp*kC~gA8VLh03`bem%Bw`4}C>NVGz>U9p0edn8zs4185(7cjV5?H* zQ|gU^;_4ot6-fr_>H~$EPJ9EitxY7CE|blI_Vh=)&X2>IwLdyq;j%t{rp^HmwiI!5 zWfiJZP1&G=qiV#OxvY*Weo#;omz#y-e5c93Ae7a;Q!0v+wb?Kh5S17h!{t+}5uRy0 zd!Y!Zk|6eT3~y%gxf6cJT3nJr{~pB5pzUTSV6hS)K-A1BZGaCmRz~@TwlkR=$^&Fmpn1`p>7^*QiIm|0?u4g855AtbPCkQiajSoVc>^(7(`8$#&sLnNfwB`a#5v(( zlt8#u_|cW<6SKfll1yPX@}|j@20`aOr!{LVQ5iI)D?Q|F$r+-oufnf&6Kvb=>_C?7 znZggyw(Kb!1QqzCi4sS8j4|&Jz5k%Hx2fg>-O)E$?HD+qIdqA?Md|txlB)q$gTnzq zHS~oiGG!TSZ&hTp1*c%MeeiwH$alr(M6%-fVJ47v4tg#HzI0TblcB$Rsmn^Q&~5wh z0SlGju<)G$_orZpab}d#ODGU3Q_s6^Df zd>ExI)@`(WOVc}wvnUP@?xYWqq(B3>-1tJ3*w4h0QL(0EC@yj9eo*o4bU9nL5sM~` zTs0cUbw!NKX<#wh7h+aHV4Skb49?>igR{rq20R#>1Bed~9%IlgY%$0*sPurOe{i3d zn?Gs@RyBr`xJpL^--Du1YlBMI-a8wa_FhV>iEn5Y;NV$=HV_MO$oNDXyeFRc3t>Y# zc|qKtJ~G>rwJLo@S(dX*_&iIOhy~5)5aJ2e56xgalpKS6`yh3cRf_r$GMueskLo^K z7!1Lr8y4hP-dD_spJ;j@iZ~+S_M zh(N%%f+`{u*?K?hAS zjBzS`y{+TJ$3EcgY1Xp_qzC||T`zGFYoA^$$(y3+-g;&{vmPW^ocWNo7$Z8j1 ze!GcZ(DE_4h@1Vc9kF0@CK`O;u|i{B$DN^oHIhuF(UKxIF}1;gO9m_qT3;O6*J}5| z63Dr|&E_wYaI`*tR#RUR9DkDzm%_<<#4hb0{zqA z#8E9c#fV*b$AXjLcnIYDS83UW3}T=N%zyI$mePjL7;F zh@@&1uZocBwTJhMkOW}$QjPL-C!3AP%FbCg=xNHbROne>3KA}SJVjtPgW4@KcD|~n z@*%mYacXXw`_7e3`t*=-MfpWaw<(U<$UICh=5-@fIb1y5R?9m|eAZ-xbKT5Hiktp{ z;U%%mnpGMp%|1YjJY8dy=YW_?k%#lS{BEe0u8e@MYUEpZX@T8E5hQ@DtQ1%(^q2ht z(T%F_Kmuhs#S%V6LTB5iq23PE4!}-YoBcLqJe=O}weU5yk7KmK~XYR!vtF+4g>r`6N z_^09nDfQfF1*4N^VIF85HyKJ7<|~#%-yecw;aoNG8)d#HNX!nqd+{bssZ=yK=ff55 z{KfcOYj21Zf*joX)|7-YM&%c7D@8|dn}zmk{71*o#z-sc6~PiGHx0sr3MAWW^Zu>e zciX+W+QU!EI~li~r9Umu7S`&#=+jDw%qCO1CaR8%t^CFpvMVDVz-8c0f{*wjnY%2I z`L_Y%#v`lAcL6i4XH&_CzYaZF1}$RdND;emjFRJ0aL5VsAQuO8UX?i) zQdTAwAkq0>Ft9SqSpM@zPNx4{1e@u9xCr)t@o@R^u=RgQ)cUuA_+xVF@255x*%&$h z{M0q3E@{2WhSUzIeE%X!by4l1z!VDps}_1$FpLetj?&F0ebIDkv1*5Wuww!)h`1=R zO>IU5R0w5gtCjO*@b=cN4{N|XJqoRYmPd=CB(>pW?!{WMGgRGnsemYvq&8>i-$5IFidOTRhS#nYQg&t9z60%SWf7;pvs7FPBd)NMQ$V z+`VVV>a5U2F(&eXr`A;Ezd^}rZ?NI)ea?)St21L8p9^|RbxSyW4}2?c_s3V#VZm90 zc*4OvJ(A@e>$vzOx&dT_@f3pSIb$*&>&C}|V*oNib9e+2^zJc%WwL^BLzFV&+pe_A z&{E@kA9?JdyduLSM_6($p?bpd$&45j6maY;4cp}(DNmekSf&>9=uYC-h!_!vG={Dp ziHvUfTD%l|;W|U(xSaIlX~3u^bYfz|ae<|ggfo7S4Lt#)ro&eJR^o%sW&?5MIpc2_ ze~V!lWDsQ;voL45kzX;&Dt5{$f}p~Sk>WJ(kc(+L1)DEk`O}~1%T2NrloK$r^iAx~ z$3m-PS)EE$vdOL8!XV=Tm_AwV0jU<$PTm@!afMe;4&y;R<%KLVXR82);{z5{@WK3}uv$pZI{F~UF! zOQOwET`t7!WePS=ZLW^-E8!u@r%;9{1`*;cl*~+NN5~ugJQHkid>c=$ghid|MOqS7 zbe6_Wo?xyBYdo&h_OJzOPn*rIMi+n?E(t(T(YD$RBgpkXh%*sakiXI@jLQtn!;U9o zO4~n}&~Q2nh=XhPA5!RTU07!CZ(#p@ z`9oJDW^sgpon}D2e-20;`>YpJotWhSsWRef5;x;}Fbn-GP!Sq^PQ-k6kO@+C1O5*h zuz3+zpwnxOmPx;hkGcn#B;gHD;Dc=Gj1@7ZA3EMkxDHgba(0dzr^=yY?gJX@HdS-d zz7y*=_x>DOH(7DPc=v0|w0<0tauEZV|LD8O0pYRWX5H*ZAPQO%%8m&^{h5YhRX>hAbEh|y7a$Nt7CUU2 zW#(uNWtJf6%Efn zht?G4h_`Ly-r|R!mv?H{<^q2XJW|k*TNtw|j_C=xFw~+$lG#O?w9`W8H2o*CSa+JU=Gge^#(=j9>TW%%dm01G z$uUS>QlZT#%VZGR!cyJNQX^b!7dCe7`NtYa&27X$`D$8d1dTdF|~O@ zS*%aYeie>njP!qV_x{Js@E>=le@_^Hyz}_&{nh`}so{UQQ~Y1NPyb6a^&f5-e``L$ z#Kiem^9c<#Ydls|ugJJ}-OFyc;iM|w9jxnq`FhBD2qHNoYSR?us9Nb2RR4$bG$VB5 zei`eSSgL6Ku{vJ95ofmNr}o8-62}PdE>$HOL`#fPF8=k6=Oa+Z`i}ddt+(}{Om3s_ z`Z6w$)(&G`?Xqw)^Harz+Gd|Og{0fQSMBsxf3!JhPnezpz}-DQYVnH_o>yCkGvfTS zm-l&}2J|^gNE0&*gmP(J#90XAwlOGMwS-+;y;chqKx8Q;q#UV6In}Cf6w$~?(^fO3 z-UT|+@$yAY&9P4nI&u{`qNw^fY~W%M^?NykW)?`FAl>m|FE7wVhzWos?E!?fS3=VdXAC-BeIE#zmD`JQSz zt5P3uoqh+dUCdaN_3u`xxY6RYwNXyWU1~?6qJ>yzkk1zhXg)bFw(miQK0z--LZ|% z>hiCVdUeP$EOwgdCUSydQNbN?jS!{A7J{)}0J@GxZ1iH+=9EUPYj@bGA~k~ z65DM0H%!wc0#RvdkI(Q$9iobA>az(yjVL^~{1U4B%lk)T6ZY{;>fo0f%dkux6GJc8 z9ha*jK}rr_Se2Yb+SK|ytUKXoWD&O9f!fTF1aE?Cs?7$xGC&hfu`j+4*CnoR-x1xU zZi6Xb%p6K*YmXQ`WeIka7_uX}9>JXvwcmjpj-$sxlm~1cYtm+1pUO8z0w+PlucvHV z%kzGo1BZ%KvL>un#LM3+zK1eo|8d3K_-zK^93(A5aPW2Sv32|s%F;X#{bl`GukO>A zAlN48o zukYgMh~}e;2l8wfe&Qbxc-;HPR4en#w>HJip-mX!Q$Ff9|BzRS>)6jj5tq=4+u?a~ zVa~a*rHh*UUdrlTa_ZJ&?>UBFN{uQM%wmJcU(*_-nK%_*)Snv1TrtFoNXKXz^t4Z` zS3WSSxt4vmf9$8SrDO~Ce$Z?VVMagbf+pYa?Mf#hFgYhQnp`U!mk0+ERJEZug~QFM z=|%{81Jb_CSt+R0h(&ss>05a9?di|yk%U@O#G+gA(y2iYd2&`iG#?&J0mV6;;=2%@ z3gm#Ip~>2~ZHoNY`Ea%Zt#9wjZjoYG=(8EvPUDK<_43_g#03v&y#eV+b|NaAUTTS{r5i z>Qo!Wt?I?RY>jDUzPo5Q8oJ24itWT&FPxHp(NLP$5c%m z`k}+S*@zNUTa_Uvd950U#Q8PkWtZ9nrmEHcFlWnrC0tqZyO8BiW~$UIFl_f7hj72u z7>bgKZyU*>MXDFT#dDA2a;P@jgtBHHax!vy(^vp5QJjn+A$k>%+^xP41=JZ#t66S^ zM#Cr)2Bu-h{v9kMk+z2MZaKKj9mf8-K1LLIZu4RVY_JIn6!!A{MAryhYYI6JC@v2r3qxAiT>=IQ73Af2e@ zLXy#uxgY@~+)^}3vshY(45XGG7EMfZ>jrhFPwLNTfcHUHp~AYMugEtoUog-6V~3M} zfIxg*6aD-ZItH%HNh@&QZ=3gRf84F|0Kc@UTbe~lw|2|d%PgZhOmS1)xKhnADz)o@ zAYQ45#sduf92Qit{$h51mTeY)P~5g047f-I2-wedn7g>x z;Je8tQ9OMCF6*WF0u+v0Ei#Lf$zIk`nN>6Hb37?ggu9r8g73NRl3ujyIuk)0$F!fd%=Yq%oskV)g8I)ws{;yU+`4?E5fxegSyyq zYA}>q&cqZE1)QACuCas#%e<%;jvihIvG%O$vY#{(o@P0kxJ5(kth!MP%E6a4}c>w-nr!b^bETgYzVlh2_mf_RQ6E_Hl84! zw8Zkw%4Y7$##Tsnm^4yZ@Oj8`OJb^(S9`=wUhWylTID@7!i4qcGHfTD@QSd@>gN)6 z?#BhrH31#4#C@yx&pvXn;Z)w!`##n)FHZSUcw6wN^@~KR*S{d58`9$RKFqNU9kCMn zx;jhu+3!L~#~vJFUcXC%bo!wMreY$cu%an_qE#qhn ziY_2N{*=BF(C^)8lFa-!W63|u%KvFB`MYfV|M;=w|1X|qOn+9e|NCJj3-ezhTiWDD ztX4iETVN;oe?`;ks*_5G3|DFw8-ATe*gqAy zn`5iQVVbbOFTNMHR^R+Zr1_vU<*1Mx8`#3xB**eA;v(Jd>LEVL{jvz$22Fa3L4}#A z>Y;puO1Mc%pV;e7oyMNWPy}s7Kgze)-b1|0SGbsM2=?Rz+l-MV zcR=GDS?(_InAfgr4U4in&&4aZ+(d*j_4se=H4lVnF=e2z1KBmLLy%0MWU$H``N+p? zr_(56)ncrf}Z#PJ%T1TtNT^9O(y2YPK$7~dPLZjRdsn6m!YEz8KB>cz}qg9Ya zQ6mQF5o0(5Tta`}CtdiP2Jz>prav`^-<<*er#6U>NJ2)Yf0{7>{>BpU{~+?_<4Ns* zY5vFb=g_6UZzxPme~nI=(_FFom?!mQ-}EMYL8+=#(-sPW2?dc(%^wp??Y4rQg$5aL zLLq54I_-rHeRFqRI5RucptLpkT%GWfBgp>SAQ5ZJ`N9Ha_I`x{uH5XQ{faFMx2DeX zGmb-Z`<;og=jlo&xPG`zh?90j1*29ZaUdxfNL?Li9Xm%y0VF%Pk7eQa<736*tX823!O)ldJX>9s-V$xQlO?Uk5WBHFRarGbsc=O z3)Rh&#_H)ibX1;W3a}gTL0pf`-OVY38h3kd)KZIlGj0|I_4IsT(++74ptv2|bmO&8 zb*H%co~%8?_#Z*kM3E}bjU{)LWIu+6l^qgO2YJk>NfcJrIS0}P4gid>5f&zL(vGuD}mvEwM`Nj3EywJQL9Dl+v@>U01dtJ;T(2McU~aq^*9cB)R(o*OqWYz9J-5 zjE=P*m~5zU!tK>t0d)BLT(s1XBw=9haVQ3hSNUGqYE?SPms1!R8DN5zkH(z#z#z9* z>71R&vYB_^GHQau8D+4OyOlqSSF0fty5;MG;zmXsc})9r_^~Lene)}l?81+zu9^R` zn4a3Vy7$_p?xz{Baex)PXoXC6l3GfWo8YW3GqBQlc4GHs=W05{7=7>+Un=eb5BrhXAAdrT#=2 z^3HHfEy!WZK259p#StLpm%&UOLN9UOHa_bt!abb}W@Jy?4_2fg0KtY8fonT#M`Xew z?qJ^)aoJ-5f_4-m!kUlcC`LEXSWF~9yu|8X44mM7zF_b#H;mm~#LPS@+3wd7%>uQR%U@H6 z(f#jc6ScKu{p=wXGl^n46Y(!Qmc*F{FvYKArr<^%4SGTXv8Rpgu;S?io`_XAT8O3Z zDKS_X_w$=AdOT;mPmAs^k`@h99vTNuqX=Y)OUZk!M3&V$MoDu%oS9zg0l8e?5Q%Xx z7Hw@%ji=fIVwfl1A~Wg`tF(2;)jnf3nQGHxQ9$2Dv?_JQYKHEe_Dcx~5QD~oCjaPf zmiGEhb6x3x>Vy(_nHzWCAvdQXNRKF9mJo3C_^R zIL2>zC5=zSSW4Pc0#Qzuix&SxD9uYPAb-wHeP@NHjMMVu672{FXGoJB|^%KixYy=}CnWK^~dyyC@e1D#+pY1Jq?J)lm zV2T+~WNzvt9<**imt-hZ44ZDAi`PEggHXRX<-Q$Q>y%!51m2M}zkqR$iQ$dWk zpaMUguoRyA(>MT~zV*F5B(Dd)T6D4O^zNs1$2HyqrsUWw;yS`=Y{kJZpuYK@dG$zQ zi=m`D{KaWw7uO{wopYnOhM*qbfwig}&A zZk(vdsr3eDi+t0}`pfs$~}FEt#f#m{5<4OiO8f%qjhI%U#wDLG15Zhf=YIGTAxZ zHayl11;!m+WBbu?CRl37_G5=q6{GF<*XsMo4Vd1|fwD2msZD{6Ug{Z1hGwl`q1vqb zcgYX{-rXmQt!a<($Z$lH}6&KMDimD$anOE?Ffkue>GhnlNl!^yrCHk@z+btj$qpw(9Pe4k5T6#WAZ76 z0_=;*A8%7dL!&k+5XYv|WxJ4V>I74zO+|M)CdLg8b&SN#8bNDoK(rguOVdD|)Q3bD zFkTG4i$p8LE2=}k88*bc_*Ayjez6<9@6}}JUdd&XMAD$S1{EwBpba-CV`@vXBzDie!~$5Qa;YRB12&C$rpk&mn%WXT zW}z}bSL!hfpEH<#ob<~Ax-V6#vq&YI9cC=^7%GG|&u(}O_Nd4aL0qdzaRBV220Dfh z9_d{A%BxV%G5S)7T3<3XQQB+K=zF66t{%cvp z)Xv^P&_vJf4}YtFTT6Wm1b=58q&}jQf7^$Vksa_G^dQ2>^siWBMLS2M->{W`u`7Vz z%&R{9&6xiPu>S1?etXsM&rJV#>+n0U!O6t%Z(!rYiu+H%20P22fDI;A_Wu;vU}0zb zaN}bAFsuIH9X?Y0#f*#j4~OeN5gY%pg#H9;d}Q)>eq0{~!1lWz7c1+3%a7}~qxj>r z|9*(e$jZ*Z@h?9vW=MFLi+}XZZ~psadAmQ`?9v(C^kD6kyMHM$)o?NxX_!YUlgFz^z^gtK0TtjZv!aC zn$vo2JDs`^7-x(jDBsMgIuaC7&(YXHmv z?_rTE@L}u(VRbTn%0BUu?YxK590dHK+io4!&20)&vW3}=CZfSKWtINgLgKOwjyy+a zK$jDoHVPu*Fg~^R0EVGZGTu)YEcQ~_0KGU|kF6C(mP+?Z&ZF(ad6Jd#7;0@4=Ntpfy|YlXv&tb?`Li zGuBpsQA%D%(8{>R_-EziJiS-IU|C}01I8|W!eDeK%NI|-{@MmO4C0JfyErdVZ_Wkr zT~4bf%GLq8_MnlQJ}TT2I|80qw|AIecboqHD%$#%ypA6nfu=afvlXV}hu?xVR*^zX zoh4tOcgzi!sE-O3lEKHrh$}L)mG(FVjV)*{YlnBhwvNvrU$Cy#$!Ia(XCs)A^1UEx zq1T;u#-N)QgC{fW!a(tjKnA+WK(8Fr*&?A3Eh2) zfW%0!?Hg)}>DOp)uDv(M%AmisiuaP(eiE$F&?${k1)M@hP2{;c=foAfRSDm5Uuh)7 zMaDtJm_{3~Q)pIi9C;PA0|5vTnjdBFi7FB6_}YPN>!n&WpU9M+B3>3qPvpp66A$-0 z)P=x_1-ofi4(yJsul5wFD)h(o$7d-;KL`rk-wKk-|b0!^}I5AZ5X+*D0&93^B!N@`*wmbbi%Vt zxk2ZVTw5Z=*D**JX(177AbE_0Na!7Y5zT}iq96Z^wIu7wq_)Q>`1%eKzd+ZPIkVVp zTXfq+y2Qp+*ioA3C?0o9^qxVoQZ*{*)n>6{DgX8b(bZG-URDX``T~5rFwLG{C@szv z^-YT(>@>0cg4@NJ z1GCl?1GL?^@s9C^qqWq`Q{#bolSD-4g%M)xX!#*w(&5k+Gif0)|GeSWRX0;~StjJc z%Y?~o)sxm&beSiFSX)-BV(F`!O8(pYfho>Tpg-O~*F z4VEw8YzVBQIWVrR1wF`nf|Bd%StKEr`acC7@^28O1*^%^D;#V0z6#?k%<}gSwF~bg z&LexCGpO%fx_10xX7QeG)FxVxbQ8Il$fPkjb@{SQ5h4}x%$s%2IcCLV)f`v)<;L6T z+m=quCoA`YEq`yhAIFuG@U_a)F`nCC!%`wy-rzq(8FhU7Q6hwwM@FNWW@Xlx((ghZ zW2mfYK~}`S;&_hOU63?1iQ)a^pLDxRU)A8FWgKPIVv#5{YJA&C$Ty(!+jsWak!VW!$Q{r@Y9Ib{Gcpuy=$!V=j9f7G=)Q-LFl< z_0+;|SPRt)CHUWza7gM02-WqXhNz*CkbM)AN`Q)j`qqgDN~9gnmUix=0ofgJdi>O~ z>->P_dFS10>Un;%E6T}N>yQ#=C93HI7q+OlJoIR>u7F3xw5vZLpF$Ef=r70nf?{=#Q%qLvgaNiFd7KR;NOq z5&PtB7&*5*T6~#TH#Nk?+-+gtVi|PTMdz|HlM_M8B;{Y5`11;R*v7Lm-7@YQ+oQIm zOfxfsczFGuE?u+{2SpOoBj|JdM-S z)7;#DbweDoHJG-RbJY=SRT~yAYHfJ@dS-8ec$Ko6Grc@jiojt%J>Q!>K3~Y+a?ZGR zZ!2x(Mjf=I%`U!9v;lb-e(ta;w z9u(Mf$vl}A$xq`hPT)>sx^CDxM&^i7tZNRSKIp2!!p&YH{d7eWg%@r z=8#oEOm>vkT)>T!SnScPj(i?n^0dkm7oT7`2D@awn|#MQ zo#!OEWiD&{I#EZ=Tcf}{RUfEyL7ECi z#(dM<^L(7aUC`Y$4n@LpVq{4tSL2iCyB6oXpYlpwKGuPwhRqymtx)n>_{lq+SnMPs z`3t_PX!$UgV{IRz4eZwjpKttnmHeX#5+eC!z71Qnh}ew`nhG$)0y#* zFHcw8&{tG^3aWW&>A>#^=lU=m?$I5rlj~-2v$hgXwCO8i=Abu-=^If5tU7#v=K$#^ zF5#z+#OzxN{jPe`qlFP;pBIFzOz)Plpyej#jAie6=5S7Jp5ClCo zYud4F7H@B&9^+;JmjWi)8^+NIH+Qz}m*?-2tC*e}uL*H^w;}UA^6Zn^0`K$!CnfDV zIo5f#^+(Ul!#SMx@o70Tx$R6vq8~1zb|osXTo|i^UKTc=N9ZMpq zjjV8*r4Y;6*BTd2`|lqzNCpW=Z17G@zpQreH8+shY)tu`e4gO6vi-%)%Q0{_`K;5! zU>Mz!8T;g1rR8b6dVjA-a(3F#0eKI`+xWvFN7lXE3HBXXj^ZR*s>ANfuP%l<#PSZ_ znpKBQz8uJfNUK$hyVa1!HIlci+Kso7>W*UB^nExRG1BIMpzDtTUL$_umd+EtOjb=y zjxpPM?fsL*?m>`R;JUdEPmkN70he+HXS(>3SOZhfqm{(f#Ov@Kp5Ynt{q=hOIZp8# zy+_l^z0&JSiSRzF*rY4g801rflIQ!k7_W*b)y@s#+H+*?JndJFvhuLq)u&9!%$ELP zjs#oJ(z{I0qp0)6a(+bl4dc~ra_E#2lT20_KE!)v2I+af_N5Gxy&LPwr=_uP4d*pa z&3Py5lyZcpGaX~c8&o&;q-z8?jr7=J2iCdPj=ar))y!;f=4fLgMVV)Ghjy;Y@h2?5 z;E)b` z8JOhqjuK@_`oxZ@;3(Vsjlv`2{sG7uaXgm{8MlMMJ1y!FjFG#U>%&y`HWHZxJ|eF| zouG%<-kfm0wVNMDeoimFlXs>|)zZ~Qsm3E*WW)AaDWW@hw1dr332c*I3TX(TiB2X`m&#tH&nJ*Yc|Zyv5*k!S3MSc9&X{j@;XHCSRzQN;D#rSgQ&x9&sz ze8i~F+KND+n@-@Hsf%y62=hsg%cAQU9ZuF)v(@{@s(&jQo4z)cK3+mQ)(*P?!X>&? zPBrtE@-7mkA6ODO8_Y*Yf)0Y&{QI^XIfB$;epw}wMCCVQK_Z^uOPbo|gsoT+{UAZb)5E0eZi$2mwV;~4nX;L-d467B!*a#2WqNNqV=I!2=cAsG0dT+Cl`Grj zD9bmti@M9lTabzNHf1>RMoc(A+tWF%6=xJ=+&_XmJrBNnUxLuyhNRnroY0Xs(2VYAQQo{sJY3)u`-WFjEp*jn<$4`tRMSU?>x9jDmaQ_R z%6;eDT>eEfC~Ik3q!IdgYploZ_#HlR%R6lT;GO^Me3Q~r)#c9j@z$}9)&BpX?j3`C z3AR1$w$0tvZriqP+qP}ncK5%r+jj4^ZS1yfWA-^`ChnQIcVg~`_x&(Y8C9#QvN9?o zvN9@GuJwB=e^F77o6lr%8oxC)G)hTFMZ>`2zABf=wq&Ti)vodZ7 zNJ2`{Jtnx+l@!Y>Y1kwiI$1?k5865RsMxf+M!t<}!P(QdtgPjXG~dwBR*_jC`^O9p z8A5AI4&E7ME3>Ri<&;{dx2CgT6!#$LJ12HqL~^o%b4~XAco<4>j_EEHj>)8I3Sa{K ztQ7`M=I33ujG(u)a#K@TPD9h)-#cq!p_q5!?2gLW%A(tVX~1e(=TbswwLfq8T{LXc zYv%2|5TsRB2o2keBelN4&K;bTEBRz(K2Mr2Vvw57p?on!I&H#Dm94n+47AHKtbNh) zbPXKaO7LxDAeAh08`bKAh*m=N)DC_B$WUNwL9|Ry7iY7!ei$J7!_ls?>aYzSLzBBN zF-_-K1)K7?E)P{pm^1q!r)MwriNmTgN$l1B@($`4AlkBs_R#Z0kN<7hGi51Zq0{8S z>9~;O=IzM%ZYx*4pcn%zo?K-uDei?m&dzE?s+NF5Wu0sJgkc`hodC|zCuUn$)S*UA z9L*^ll{4F>k>&(QMN8IgNqQPKVoPvYqqcq)PCE~dyJb7yqQRALH3?^~g2Ev!Ea`6X ztYB`LTaWp4uBcwdK6Y6wd_TKrmOd*_y}&S^hkR+{xQx`ItjZ2=qLX2Lj$>c5LjP45 zrv-~@Q|i%(DK`uU%a)E&ib0!W^9x;VcIbvuDM$$P!C(+cUqwt4f=WxpEcRFQ{y7Vo zW~uD3N75v@+f`U~Fgp_UYMnwYsL2!LYWLBfh4AbEL z=n%`_4^4703Ym>uW!36Z`oh)iLO3o;s}ko`%X%AY=?N?Kv02M{LXXK@Am*O@>2NGT znX(^2BgWssl0n&*TSCCQYTNG>tZ2m<8rAvxjM^IwHc=>eYQBrFf4NKxte3pV;nClAe-N?v@W$Icy?rQXK1NQNM}!l+8# z#dzeD7qZO;=$nY}CG*RNPE!@J-eX=}bO`TjAR@li3*=bje#RdzDcsSs5o6|@?6h{o z+y#KNajy}1ZJlsmHT4MMg&e-}K5;97NTq7HM^T!l9~%%j3e>&OB-664(;X&W7MD?6 z)%4mq3T86{X6CuWU|tGZy54oX$~YMu2$Q$jkv_9*SNweYSy6EjMD;GpQJpZCMP@(g_E#z0x<502 z;@v39w@7bQ1T~~~(J@51yW+_2#9jC!hi=99DSCgiW)Y3M8g7xXuY-V_ZL!&#jN_QR z43NR2{Mmf)797c{W$ z+v?W3>x(Lsc$?Pa0h@-DAm(n0nbwPEm9mjwFWLi>mCCjV>CsAr8zDAGHi$oHI0y-a z`a+>zaFI&!PPGNT1LJT(^HhmP7 zMR(XR4We$-r(?<+rC*8VNC~4GC6vB*)B%3&jZ|w@&(g(Ch~@!)O-IWjpx6GRStm$q z{&p)!p{Wz~mbD+~(8FI;njfGO0{R=))T;^QH zqC*3({{?4Re@qQtPpy=`LL;rK)%dfy-OTZ7g+k9dY|IV&1}r*ccm9Yz*o>zRE=;L)Q!bin&BmAuA*a^&Q!c$ zHe$z|Yl*F_X>J2DuPIY1Lz>GdDKR7?DibOLE`tE@0aVB+XOJ<=8jTx|n`Vus46p=J zW?S+oVx{tTf^p$stwaAt5u%?yxCkc^Maj|`v8Nf|yFGBSHIdNPva zaT5cj3@}uSpE@$#GQ2W>WcV3#jouI!Bmo4OegN5IFc;;_G zr`s~$MsGQ%%m9C;&)`#KfP4nuRg;|1Tg0g_05Kzuv3uqLf1y*x-`p$w)E3ao*gf<> zwxFN6W#E;2N-tB(*ggILvoIk;&)7Zs0J3l|<8S5_cS^DFclKn!GxW+jr38>?A~5sz zxkQ{g0)k~AGw_YqXBLMZ$N}P+_=f8vP3aZM6~SX;4-Utp#3kVwU!xC%f8jIu25-Cz zpEA#kpK+&p0PhUH2^aPST^a8TH|9TME|3d!fQ?K$mHCyal}TsP5l|6oiN5eEL!CKo%$0tM3qY5d$V_9T zHPz~0oNUUlL{?Td*WgtmQ3hQQ0yJh~Fie?OnpYZEnr4l#q*sJl%9)=Sl~@6&08)Uc zX(XL#5zYl0fMzbqUZR;B1Ubo+LDn=&Y(>l|4L}Ki0x$v;O%vukiV`UUCkt-`NB%bk z6bInHF`6>|8$+q-@)G4gjV2DA(GWcm#3Gzq)IGF4{)prV0%U%|9`PIjpYRuqTlhWe zLG=iFFWJprEh7v??ALB+ww2y-NHBzclNA)ZJF zA0Lha!YAlKq8Q#djtGtb54d`QxzHEXJ;gzi2;YeA2sx4P?;s8GJ;Ooa2!3LGkq_Wo zpuOjacjRXxzwkCpN5s9>h)!g8q9;N(k}HwTz|}){xr@t)4Ww3LJHgGE)yOtzN0L2= z!N&-^h;yWsH^7kIzPICr+aTMvX+07xNU?EoZ7dr{F@iXyZp}d4TlwO{{Azg<1t|j+ z+u3^gA4NoQEOxCS#&dPGA;ae3G_I;XLl5TnbS^Qom=WzgjV{go8w}hyc4q-gPZQx1 zCFHpug#sbWdk!Imj76kDi~QJ$>Ka-2bSIJ|{fhC-7Y-R9eQ7&sJF z_rXB};%VzNrx@WwKxyYRQb31VOpVQ(KGI57mIekk1xomPVU@PryR1V zj<|=GreCZ&xT(%__0;!&xqg1EBM{Y8oFhri;hH1iL0jIoTy79`ID|2GbhIqgnajHv z{((CtgW<;2S`{@ENbFc%vc_m3qZg3^aQ_jpzB@CKv5-x}git51wbO+k`=-~~^Is46 z?t|4%&~9!{t;43bv7}AeT-jX2)H@|UY#n1cd0~3^d~*`e z1>@a#dw}qvkqnB|3)zHCIgsE6lKt&VQo2fpPc5+Gg^z;u!NBX8SR>arTC5y5&Y%QTssW5V)eGo^)pC#GrQj9xoZH)96jdw7sBKT%j1EHA4oo# z;m!C$lKKF4GtMv}m{r1uAb084TMZ}uDj6f_f8vNS%?l&Bfx`{uAGp5(>4Ku~o4A2F z<0(Jn4W@N*5t!z?%zS^(t33CtlwWYh@6Zcf*>QcL?t-@O+pg>04(uK1yut569N7VV zLE89Meu4CX_zt4qwSIx<2}ae5WUqrue^E$&5wh|UKD%3dV8k8yLXVNaSc{-Z4DO~? zKY$I_pks@e+Ot}X=mF?kZbG^LZa%rknd@}l_eBi57WMxV{$*7A3H<4b=q3BC4>{~g z&lkj3&_VE<%lY!z`iqzVS2RA6U=&p6nqGRDFM5b&{yiZB5+)=9-Js|jbr!jhiiEpL5BT&HI&I_g zQ?*t%EC|dsog(NXFa16q@=z-d@)*!<wt=aokv0` zSna+HtD1yf+aIBH^LA4+i!mx#RNPOwxK&1v`jz-+Eo?KdUCMW_2_0PT((k+sUF?`0 z{qRV~<2q_GS&%W((9qZ@D9C6yB$RY`C&cSax%jcnd9fhBM+tvMQz2!RET!ME9yOWR zZn|7!%UNDSsA&i#H=tipP*5@QK|4*Q%D3hydwbpw09ZyoKEAxPR!kw(|6mrbi(e~; z0E>Zwrh}nU=(d5tx$4w&)c}Fh+lrc7v0%~u@PVBaMM})iPYr!UK$ywpa5Pf$^HZoB zjg^@gkK#!3{K-tg&Q4295&g|HUyX2&bv_|c8_oQq3*Jq*sLy}^nVpyi(!MSIVQkxR z1D$iru$EIq!&+{7s9&qVhXy78oE9aXf5p3seAD9c&(}J$(SC(|{cyBSK2Aq0Rst+{ z+psq(YVl403Oos+@a@$@q?CtDOo+(Jt}k$(X(Z(f*`vfTl(A0XX+T{tBG?Xh#(+l5 zQ*6%C{n72m&gNzwdvbk6{t(8n+weGEK!|=J@OhbQv?6rm8sjQ6z=;3Hap`mD&8#ED zdpQs(%g^D7SzW)W#H9%Ydfb(+63%LuxyACFw`JGrM^03FuGKURW!?$1Y)wsceT95> zCUd{@q3V0*!DZ)boir@u$6QjX#lIqYdA!|(&Xa9j?dM06R{Cs18|B~4?_E3@>4YDKkMYM=%zCcok5wMoR^);rO*y9J5)+NGi02j8@GNyNjn_0Wom z`jQGV;Gm%yi>U|X2UTLu9X(Vnmw58zmt?FpJlq`UIHCWze#B0au*j7&4}M^yFA|`D z!uf)dN#jTscXc(A%MiwgLP&;(?ov!JW^~zv#7n)zZ^+m9jZW8TmO?Lk99f_E&8=tlEZY?E_LioA)EBFyP zjh$6I0n&`!Ugkw4tPNF{vst$EwsZ{HgHOumLy?^4X6xCigPXi7(-E9^wpgpK`^b z{-Rv-uxUo)&~NjscGQ&ldR@-IU&-ZOhPVJTc>Lav7b2#|zEjTLY(F-=IbSuu>sI7>`nlYjAeH_+F@=9LwZ1^*aKjq#GY*eQbSAJcize?Y<9a_Zs$t_JnS0 ze10V6uv;yb97IGMNEVA7l8Qh0ZM+wvQ0{fQM++GX=;%3_m^kU_=;%qAm`Lf>UKd`O zBjOdY?YuSb<|s}#Zd7o^9>uc<$B9_m7u;Yu}cDVIaEThc$`?pBN%;){e- zT{g;fZP`bAJLNsLxe-1?Qd=W3%hzP18QP*T+Tl^c9O-|?}cR7 z4A-9}1-GXUz31=<+q-q3Jifw5r^4~WQN5JZ@|qr|b86O(4Ck;36%9iyxdmId2XExh zq((Ok3z{xcq809acuXNnsK(;uZETp_9@M1VFx>VMnu8DcYlT8 zI=|gIsg}Ur8DLT-UnhJlJ{ic)okDj%)JAhC?-fDsY= zmo@}$ACRDNpAWyq>;Mc2JqpXg$R?6?qhG32SL(kU^&Km2o4PgjID+}Q!{&3&LaA#| z@QoR|*sS+;owc4+X?PU=tRf{X=y2`_o!+9Vf7+?;$F|?w8({D6`tg~4;8;FF^P%rxY9Q2%GNcbEEVVk1dPRTTV1OYpQNm=cLI!d4`3H21N)4RTWFE=2~eyA zuLFg;Eca7Wr9wVv zqE$ZxruYhtzB2#z{Zbhx`Zjky-cc?glAoT2sTx`LFRbQ^bXfL_Pz1PyW%ww*l8|(D zkNjM-oP&aoL93DY3q>(y_%xvl&qGejuM@qi;B-Kq^!>hojkA^?Iw}Six6TH$!)|Zz zrlSd?SDL}{uPc5oPcn_nXJIQOt9aJ;Ybt#bgb$s|d@VC_$n+7th=-dKFwtf__@!1&wvkN&gc^t1o>UzT*O z4Y0BC>^^$G22`~-ve+4E^62FN@3{~uX{;>zg57S%$kn~ZXv8m5618L6D)VkjE|u>d z(V)9H#FafYypzVvPRox}hUq*sjO=@dQ}$zJv9(Cxj`0@knWM7~lZ7?tv4m`~lXHGj z0DOeor$TA22ir6Hn8Z%126XC7BsO^yhK+8$G99K)hb67QuAyPf`CQY2VnJF;@dSHv zCxgS$cz9omF9$_b1JV(JpqUD9-<&cF!CcnV5XO?LoMSM+1*c*INv?w@VIm+H=J1_G z+EQHetC*#W&*i)iuxEPSx>VB3s4>HL7g%p8ZSGmIOIoVsVrz&#$7h8AdY73ca!05OS-??Tw0jArSmRLKlkp(;J4xCiM+!DlY2Z`zRg#7 z=)hWk)3r2g=(A3MMPpv!=EEJVl*3fDQZ+Ejb^JT15IKs6v<71cSw{y^Gb6|OHHyw# z8?8>Kmk<)oR5#al2yP_1S@Z{VrZF&_T=Ae|*X^)(NIlo0b3@IvVdbC;r$_rHfx-r( zEW!a;7F;R}>VU?I^U5RAsw*oqYccBbRe=KV=!yXK4zUb+mp1FZj7k80Rh7vb%DvJhNXCbyJ+u~;G=`o8P> znR3KR@yZ3%9$xJ>&Kd2H$r9}ZCNeV}mAxBWP4!ZGO4>=Zb(#mZS2o@R!S~!ge+hgZ zf_=rxq00*Nv|Denoo&@?oc&fO%-kX<`&O|(ZSmOXPM(473$u|{D>T0f{RUK?4tL-n zaySZT-ncvI68(PHvrBnp=hkldbxq}&l>-NMN99p>`dnPt)%eHs_!Y#+1J|qpB45n& zA~(>=U%bMI0{D*zx@S(21wMsTmx+?ZAjX$v)T~&R8qfuM1>lB{!p)fI%=p98d=;f9 zVIk|-DYXTv-^*6jmZig)zpnY=qb5kN2(@{nzLGfmc|_h+3dWr!1UC|Ky;{Um;EHLC z5^>$Jxai}$)3+17NPE9u5b31kV!L5#Cy~#zk92?etHuM<@l`Jpr#(D(z9j6rl*`nG_BoHKm$ zd*c_T25?d!}g{p;n!I5GF8*u0E^2*~E* zIAtxh2{p(WrE~=>CdG6)m2_8u#p;N1q=qG3*O7j8TWA!22p?*(XXY*;LiZCp1W~sh z#S)6-cLf%q)+FXR~$ckmwL&XfCVpmQAf#XhcbrWE7K;^UM!pq)JUpMXS7Ef+W!e z89I$9JPFYM{uPHUBY`P1NPr6+Yl9Xh@cpFA{r*5Vak>bT{BbxRK8bc{Bvva!Q0lb! zw&HZ|1X)fqboeFV$ZtqY(DmdDaPndzpll#7-PCklx2+C9hRH4U3k8Ep)fcTw;8L$n zn_yP_#<>hQM#+v(=X?bb1(EsyQSp~Jc=mY;FV48ho7t`Y@rpSfu697OecbaaTjc9* zgx=3~;*Ok-@AHLQf1?4eWr!8RYT>Tt?IaPoTRNS4YYyQI*W2O1{%0Zq%kF5cnBdvG zi6&%!Aid5(jT1YE*u>?567K#1$R;T6fMZJs^;O_aYNk!w{*}vCU9T43WUE&o!@E00 zsazqr{w&C=g0Z(5KJW~D-1F-vcYX|f+{nilcRtNQu!;B3h0ji#)du=yz`GP5(T(hI zdg52zTb#CRT+dLU!5cIi62Hz zDs(CV#$Gqa;Pv=tz*#@?*ITbpNPe3msO%i*q~jB%R^azn;%O*v?Sgkk@r7~SF~b(< z3&3tQWB=hSQ_3lh!5u+8X<@zmou$+Hufr*4B-;qze)6^@a6o&R2ix8n$HT~ZrZ}=i zAJaQa*K|rRdJWYrmCd_aIanXhrmFjXLO57{fbH$@A!|c8Z0~48z2?iLxRB#Ra&rBg zy=zjjBeiZBdDkOUYPuf=T~T=v7CARYb^H}IMT#hSE{gjU&zS3SWR;fD0o`wDKZh|`B=Z?aa@wil{JsRrXb-#7eahUWj)GzK8BrT4K zE0O-eIfMNZ|HovVU^5Ot;_mELD`T))!ceJLUA~ePyX`x4B-$9yrisw{}d|B+Luj`AQtx1J(Uki|5UcUWG;LPh8qP6_du4>)!@7(Oh+A z;O5oHPUp8e51^Tu?b2VoCIUEyniLBb4+8N~3v*uG!2UVNM2Be2L`Az6p+cp7@`)-` zV2#J(KnfHA`6P+t@;kFgVIjfP0R;4?!i8@TQMVLmcJbnUZNTNExCmIM`ju-@TZQOB zG2bpj6>ep-uR^7hGNr@s^g1W}N!%j-j|aN9%nQ)J#g;}>WHkIR{!+`5@e%t8&RDQ< z3{V+4Q>4U`rHu`Fo5O$U(3KuJAajfI!xYd#0t4kCCub)RX-FX%03DI=fx@iVO1QQn zvZpq+G^eSswKq*0lyowmps8J)QP$KxW5x3M|JKpd2T;O_rn!cVn_RQlThJ(4B z`dp7|RoR)Q!>M8eZ*!+$8>(|6NA?%bT&L>>9;yEPhBP)i%Q2hsdRSJ{9TTwjph5J( zRKh2Exp9NaRBkDX1az_fH|0T{k76}1WPm47RmpP>4SG+6ZcBVyRdNQ9AedpuzF3ER z#ELgQ2)_+6iEf)D?gzziuj#dwb@$;a^W?C~`%_%Q^)h(u6-@lnyo!evuuGiy90gtQ9RrcoE z8&6LS*CARH>WdmYX|dWS0NHo@`}qdzNdfojiB`iV_le7;-A$Lovt$n8?NWW?ma)U~ zAFjExR!bd}RLFCbQPJ&1#G!JG(-oX~;USy;4XYe+86aX6ItqaXKvocxxIije#2wi} zvWCo6oUmsAbGig)k$W6!R_Z&Ui#m#4 zw23{V_!7AEV(L5wEZ*Z{?v}+v&zk?ZPvoys(gfK**40}A?7rc!|ylk!9B#Cyw`Ux)P{1I zd$D5V^|X~H!oSV<=DLPu_k;Y@9&2@dsx*=g?$x^IvA%X*UVm+<3Do}MN}AI$c|0n+ zCt({zRi2nm0vS`mimaNcRsF1jTVlclsj{0)_9@6L;7M`qqVxuGd>^Tw>K~-d`W_Z< zuC~W735&DQV&m*eo<{%3{_ei)4VnE6&tKorT`yI~l0GpxRhpWwq1xV5GpKgjm=WF# zsNQg%(R<*;HMPSWZUwvXJhV@gspPV4HL?IOGYI@Rkr&>=U9^U|5%Fn^RwA0A7UlTa zd-%ZE;bJW8D_`7gHuW1tIP^*3s$I+8Qe)N=zM9(Ph_tjhb>iAapS5k0)L1XmZpv2U zu=W*v!frsZ14E33dWW%SKH2Gru=bPBWo9man81T*00SBxi19uK4n*i@*q05?!`&dN zlcDGS(G&yS{D>o93F$r9OA&k zQSN^9SJ{Jm6XNBd6FUBT87`@s}Lmf<WKIu&-0hdh z11q-jOEY+Lj3{UNd6#&}x|rA&gV zTLJVOa05R)S~ZDe>_!c7-=$U&ZCckb;pcHGFKstCzlw(Cow{@oYf|cU&6UanCrs*h z^0yIQz3bvL;hsIK&q3kL^rT)cWbOfmI99q&@YT7P)vLUipu zEbhOY0By3~F*ATxM^T`6faXLUFEQls_{A22j^4yyWMo3VfR3Jy@NfdQML+HJLIUHa>Q|#bHnmd z5LyvB2j!;MV>%FK9r0uaAxC@FPHj=)cH}R&SAN9NW*?+&n%MuArp=$GU0Rc^d=a}V zZMeDrouBxfg?u(UqI$wa4EfVD{FL;LGodxJ)zn%r&z$69Wp(?LRz&aZo9_9~&ocC_ z?4KlK^_q9#Sd<;2Nx?}Ux3xs$*a_Y+cip0|855!LWI6=T%Bj*xyp0FM{*eAMN$%!j z*FW2P63W#j?skIiuq63vmBsG;0E;euZGx>VdpB|`TTwS^YuHrD8 zG*{HiGrwfQ&|hpGy}Wo<4w(U z!_M;;$&g<}cSm_f{NFsh;-V-ZA+aQUkN0AbD#Dd2!kF%~5||opGtJIhgmj4+B7W84 z4~!y;cg!M10KF$$0Kxay!+E9$*n+e?|F*`R))A}uO^YB1`;zn1Gq&G8tqD7v*?oX5 z)~%0klbMeR${TZ-MPMr)r1InMYRFaCv*HP*B+?6J+usOfbGj_MqLDd_ATAP3iUNiv zMa22IwU0ys(J6I)g*8%U@+hWUXhOg4?dw@6G@;4 z#{M@TLklpiAHm&>tK0Gl1}(=eS=-x)$Ir;M7gSBHNYPmRJ5W3FDDu#u75Qv!D78_3$e-!_IM>q11P0stKO_sZ`hofELmXJeo(!&c{KTNRZr3vwrG&ib-%LVY zK<<-CM{ZPo!NmFK!XiYW_YjfOJw(F>Mcx3spWrxF{7Nyg3D1suD>Ut71WQJ}&7por z+6h1B8pChUf>%O0H9q`&ckqP9KmC+`qqOjdS`Fq$b)V#v zOCj}^l&H^9DH4#rGD+18THJ3bzc9Mj7fiTfUZLPgNrj^||LG^&Rx0vzLT#R}Id5G$%3Ke(8 zR9q7{i1*XQ?e#SKNw^%yT7BZ802db%2S$YHyYj$Vj0@HBd$I570iDkl+~DNN=%@k{ zGUg4mpP{#v$|@cnsu(kL9r(pSXQ+)-L@DZ=O_5pzIWvjyT)h?%7cQpQyd(#9urf*= zxU?9`>7OwhjI47U5*;{F<4D6z4BSzu3KzZ85#GhE$yEt1bb?q@Yj7D>9qs7aG4}*q zj3+oU6O*U2{rN)Da`EKhkae|%=Is`$u<)gKmrJM;$4&u18=A6kGi8Ct8!_K< z21gbqw#NuPz{g9L8HWo5|DG{upoh-*Bp`*500Y~L{5m;NSSFZ?xtQ`dpMyvA!Yb_N zaeP7)?TL?0ceyRYp26N19so_!%RzoD)wq_r#;-w7i!BYeBH}^qvmuxm8|~H1onTL+Jt}e(*FwM{%ija>)*HkxcXmN|L5oay^a5D|3_Q@ z`QCrL$$!-PhxNbC{&oEK{lD)0&pQ7O;A8%;b%2@wU(o^n|3$m)pS}OT=j*eu{_o;# zmw496xXriks(<`fZ*zD9_jY`(j2xS9Pn%Ds=e(t z2{C_@u=sp!ZP_1A7T;-mbc!2IoD)=U*@5l%;5^H6+}AQMGun-6hqJ-10XNG~Ygn7p zw#rmQEE_F{I#wmFGm#7P%iCfizZaVk9s65iTz)8$bi5M8I^35{39Y^Q7hATSO5~W* zaVL<=lZCI`!rxp0Ck0#&h>g8M?t-{8%cBq->A!tHeAxG7X8Z5e8hv>--u!%<-M$A) z-g0T`mrt3Bbz|h^*cLRePzLH&JDlqz0PL=ajlWI^e7uI1HD&kOnS7)9_Y!cRWh(cl zhC+haZR`dHYs0Ja*@@eMTap)3vn-BXtqSxl^)DsHts;d-`hZfO*W!a`?y`R$uWtg{ z4cFH4^EOznHT0llGW>p^Pip3ta#8e=N+V z(N0K*f}APcculsTc+S^vOk00rRx)wMAFd8}Hs{9f?0SK{1$EF=QYyNZLMjOG&U&$jX#Bnnp+mj#qu}b%c+TW|h%M;Su zc&e0D)A^tI9j{B;Cv6W%EZ4{)ln^|)#>A4SQI~dSxGTWF!xMk&8}y7rQ(sMSU@=11 zi0b$=u;6n24Ohp&f6Jg&xl^+NZz$?!>rDLew)l4Vjg6f%siooij8@b(5G-qxHox67 z(ed_#xZM2AipK0hB)o?#<`$jQs|N1ScT3dz*_~(`56stAFPdQNb%{5o!JuRpIsEv! z-Ud+u3@aE>2}SE?gYgUc!oKYJtqUu!uPgwc8SmWb;2bKO#~v)7zAW6{cGhBP)-^~o z6^wmfCUkkGC-+>9FB`Y%;L%Lg2^GJzuh2js8%Wih`xB^yJ^oDg*8?8&fo`@Mbs40s z$LiF&h!qkVf53}iB@S_cV%iQ*z=2@1=mEEcDYF^@iTYKv*r{GRxqt8==%?d%2O>{! zSh=16e^Cb5XIsOPFS*6r>bK-1e-e1(R_mq~cE=O>0p;I; zD+Q%|&76QyD(3@emWz2`l;!0EBDn2ntn6Yt#@64|tN`Oypt=xvC!MWepcoq8)$YHiVyttEY!zb75eLdb|R=a4O4HfeE7X|<=%@n!*pyO@_nC@as8&l-k~ie zMA=rO!#D)h@x+@wR(M+)5-Jf_rG$@ksw|ux%3_kB-RqABH3(qGoq-z3=X(S*_8EAV zY48{^Jix{WT-^wW5DI5dOG)H;7TPwuo(m9L79V8sSL0wm6hthVac2#%TVav3~J({P(X}PGLVYqcW>#1!A8vvFGV!c_!t{@T?4q>qHN5Ar3k->&M z4!wng<1-)Pyz}avr__%Xq_1RTRq@@dj8W<|yemATuZH`J z{8DdV-32T%r=1fy5_CKjxgvV7FkW9c*dP>rk>`{qd6G1{$fqcAhA1}Mo`k+c4w;$I zod6j+RjyHsnS@lX4|{>7B-cQH5qP-b&N$2zt-UT|y6J+Sirgqv0YrNd2?dsYMX8H+S}vFhha_M-@sl(IikCqDw<>@a=o}bI;5t#j-VNeZ6GDpgge;x zdg#vOr9n}LR=`J_hXbi98n&N{iZIWLnsMf$;=EcCz;VZW3|)$$d=Wx7@y?eZ%Av5F z=4RZi)1AX6lw*vc^s+ypO4&IkYfElL4X*!Sjj7$So;TRD6!{So+H}G~pN@(G!F7RY z_}eu8XAWCG!>3yW>;@_pjeCUYgpIguohlMCf8=IIRu=(Wb4QI!O9bQ{OY`}RWJUM!{pF>U`$ z4m&q9v%1|-r2-=v9*?(xki~vi1j+D}$tZzje5Z&|Nb9sNgidNf=I8)@A}VlbtkO=@ z$YhnF+Va4no6Iqk_P`%BU0%8?Wrq2kt0L3KB2ylyXRXGXYJ~P8@nqeOXM9;cHC%8SAkTO0I5IpfJr1A-Ru+Qo2B7o3GPIyE%&_xtarqwB#(?W< zamH$uo6F=M)eVT2h=UOVoOUc)h{7n$R&c+Ge@6eFvB&uvtyK1aK${~k*w_4lz#Xnr zPcc`;j~i+Pk7`*rbqM~l&T{wR?XMu_Vjao;IYxEy1QQmtGx7RMC)_yQII1vWq)Pq= zDRDSc{@yadbY(QHc{hd%OX75-*QiL`Hayei*mIcxkD~9tJxHq< zY4SkS7GcqKZ^F-ZC^%^b(CUg`^XHwjE5v~QG(0d#dFH{^bGdH4=iTfybgU&` zls{h2)vr0BT$%g4=%d~fE{8A96PX7Z)C3F)j33q-mOeBF-_8?6j=i3E>BgR;eJ#zCX3v7on>pT*^bEr`U5Fk!JyGykW9&~+ziYbw8Kilme{U9*p2MyngXmJheByNU^WD&~5Zdy$Qt+`S%bjVC4Sou;x zz|X$R>NOC1+>&*nk)V!CZ(`ztw(-w}XC|RTc*R)6eoL)%;}_p2WcTrnEIlKqG_$=M zQRND}i!}O)F{?RJ=^Rt$d8cv8yVlAp-T8$5mqu_X$9)L0E0rBqceWEk{Rcemq=xU) z^3(V_3rrXev(<)8CI>QADVD}uQ8M=hH;lt@Rn9!24b9A3%#FG6-_h>%iatTUVXeN) z*0Y`}L@2*v(Zm6c->O*VGnd_S62VQQ@8yc`5{zTBQMigPI0#S^y!+Zf6g+-n!(oBL zdTY-UungGhra|4Y!Jy~+d(x+bPfuC$QB})RmQ2@DoAYgKA;rHKU!^EkO)l${0w+Ej z=(=hf_^?*;gDG)^hwWWVER>Ckn~lR|hlrm3#Cg8DtIdX}DO4<3cc}2rk*rMR@T~}i z1~{SoRbQrt&Ea*4a-|bLLU|msiO94cSd=i&d-Lx)oc@^0`0aOl_{+eE$0{b9KW{7S zkp#-p5^Frg*rU5J!q8-(QrLDCM0CR&hmH5kiOmKZKXxG~aIq|45ctfYKvtqpungDvN~ss&0-NO(-8bcq{h z#mrK9a+ueE>dIzw!*+jM1-w3)5?+7$L}pKS`bZ{#TQ-?lGTrH7WJ6?aET*sGnVmy@ zy&$D86W5Q^n;AMT4^(5qoQ(Sq%d<4lYl&Cie6>ZGG_RY{IU3kRubd#EW z5R-&@lTb4K(%OOGD9^H^B{Ky%Um^1+cjz?08T(F8=4Jsy8NIe^)4=jV`JW(px|HwC zoNq=)<|x>*MBuCfh_T4ZNbJj&_&8%F10yAfT1joCa<*~}^!$86t`aFMQh9pp@z+M_ zOBZSjp|P)0ADgwl#lkg@xl37fS_>tVrcL+^$nI?C)h(K==0|GlRak@3YgLjS=WN!% zg#{XBQIrP@P#I=qC7W|U_-Uab307aE8Hz_C{pA5F9is?clPmkezG*C7R7>-o61+9x zbu0O7@HIZ|E_fwMyehY-v{)XlFaYi}{V>rez;S@AipvXrJ-(d*lno1ioW|uQb#m5y zsizs`GNl_G`~@LQ~d|+C~t~{@H^nja zPd7H=3ukX4SQa8kpyZ) zC$=u9qGD5Yl}A1tDDl2&BvhFxRPNLypEQ3#3;!amP56 zib~-Jo40cDh0o0F;70pe-K*vckzSu7CNUViV}?+@Q=+C8 zC%u|PbrcP*9jgQ+5FYfm*$jvIt$1-xIexm_R?gkC(+lT#uL*c|hi3P-zkHg$Y+LKt zx9NPW{?@}&W4`V9bVXfs2=A?%LO&Z||NKTp(0AJ{UO1g2kO3If#Eqc=idk=nGJ(XW z@%6pj9%{0z&3jYB&MzO`s8_|eK9u{K`u`~W>L;t{YaE-F-!2M$wJ!8&y*$c)rPlCW zewrcOWNu?W&`V%@nT}qPG+%hUen$P{_UUXNa#~~WKWCptr`7y~yWt(Cu*)NjwD5AY zlzb{t-Uik0#ZHXR=g!n#)dp*>Go14Ztl|P z@b5s&A&m_?9CjpM%mRPHyC!WBn(K5PHrs`#3QS;NBe2lMv|OOr90@yEmXqFeZk-Kd zYjfW*n|;WvqHzJ&GZMG#!@WawqfQ;4Mm@TouPvDB(pw|n z4xN(*d1%_MBsG!aQtI>Ti5kpaQpXm0c{KAIO2m9U8cgw63;pOv`H3O-L(g6sOoD5$ zo)rLhRik8h7o>I*g+6Y_Sfw<(p|GE=tQA}J+*FUQ<+hJStmX8^qK!5;jV-4egv7}r1qGXx4ug@eQqDyl>lh@lZmiVP_YQ9EM- zxi4RrwK^Faxhb5h;DhFU6@f_ST@77cze-;XnDI(?;P(gv6~1?Ky;Aa1O`AYJn8b0Q z0;$h<$VtHlc% z+JmCJuDBUAj#OrvsL?u+d|{%}5aqtV?;_A)!9|?}70twPT{}oYLxgQ$8J|rPicvJ8 zMl?0P;wuxAHrhl-A)2I_8Y*e4O(Jcow2dfIiI1iwG1@XcAFDh2or~=s9cS2o7=E04 z&$+*Q9(VU!?#UZGVfEDNh2I(0ac0M&VUzYfFlOb?eD76V{L#!eHXYoPlTtc7^xdHu zvo57vIsN!s*?+oJaP+HH4P6CCI_mCf9(eYN3oq|Wtla64=3TX|R`OGi&#C%H-o5jd z)-BylOSY7JJ?m@wY4)$L-;?yz)K@>K@{K#!>2p>r**bUF_k-sfKgnJ7Qe4K|BO89; zBTwX!{L?i}y8p`uRmqUbfBy2!sg@rH6I;`tZr*!kV)dT+jr+It`F--)w>$SIZQDEH z3-#BN!PP); zbKJPJYuEc%SC=ju{qEMi$;;Qam)}ULJ~nsRxdjK-AHF>6?!DvM(o#R~?3Yz@X-eK8 zYjkp;tZ(hU*@YX&PQCV<<2$w-$Z7oZAHppOxdn&nTPMAfwdm-QkKY^ld3a^b$zOeV z>3rqN6aKs#yYG8{z{Afrls_LIcj|X9ef!+_ALdjI2y7jEbe*5Jt!*9O{L@VX`c3xT zzvAg-msd}CVO-+0M~_!z7bOh}?n+v{w-+yTFS=?UYu|q2vt@#feTKn0zGSVLGy1b$N#^$zv^}n33dE;#|YHUjk zpD(m9(ESWWLC*b5Fi zsaqV0$mPzl9CbsttiNL%iP+~=y@#V{56J*rLw(baM5F+FIEp=2+&PY7TMzXfj-nYL zU^!7ginPS>a1@Qn|K5-D|BE#d8_~Uoqi6;QSUPgpv}pIE=X@)cqi*Pq$C`A5{Fatp z!;y?;fPh75L2|Y!IWDOlIi`hMCK2XvYzx!c z#$!2*GBN6w6wiE|FoOe5gpGA@qTOay-my@;4INZU%pa$=8(y(vsbHEQ{;1&0?TGA^ z;~bg|7?@*X-Cw{!V-*AUMVO-u4BEn>eWOCC9x$z-qvT zQ^KfaOi6=RY71KfZ3)ToM()&Hm<**L*sl8rIz-98TA9?j6LGiG5nb` z$_TcFx!Dfc2MGb^CJup#W12JR;2O`tv5dWBO5vOXavGn*IMWQr3}8Z__yA1dx&YP* zT(6t{At&5#0ej*S&h@xfaLGOAx^Q{HlkM_==t57do3| tWlP`q9Fe7z%GUnO|1A;B%uI-{2p5!xBX3KReportStream responds to each API call with a response (JSON formatted) about the disposition of your data.

-

Last updated: 9/9/24

+

Last updated: 6/24/24

*** @@ -52,9 +52,11 @@ Example ReportStream response to an async submission: } ``` -ReportStream features a History Details API that can be later queried to obtain the actual destinations and relevant detail using your existing private/public key pair. +ReportStream features a History Details API that can be later queried to obtain the actual destinations and relevant detail. +If you’d like to use this API, let the ReportStream team know, and we’ll provide you with additional information about requirements +for Okta authentication. -The request is made with the submissionId in the earlier example: +The request is made with the submissionId in the earlier example.: ``` https://prime.cdc.gov/api/history/simple_report/submissions/1588 diff --git a/frontend-react/src/content/developer-resources/reportstream-api/documentation/SamplePayloadsAndOutput.mdx b/frontend-react/src/content/developer-resources/reportstream-api/documentation/SamplePayloadsAndOutput.mdx index de160a051be..9c8c69d4cc3 100644 --- a/frontend-react/src/content/developer-resources/reportstream-api/documentation/SamplePayloadsAndOutput.mdx +++ b/frontend-react/src/content/developer-resources/reportstream-api/documentation/SamplePayloadsAndOutput.mdx @@ -16,7 +16,7 @@ import site from "../../../site.json"; # Sample payloads and output -

Last updated: 9/9/24

+

Last updated: 6/24/24

*** diff --git a/frontend-react/src/content/developer-resources/reportstream-api/getting-started/GettingStarted.mdx b/frontend-react/src/content/developer-resources/reportstream-api/getting-started/GettingStarted.mdx index bdc0f1fc993..3ee2e505c05 100644 --- a/frontend-react/src/content/developer-resources/reportstream-api/getting-started/GettingStarted.mdx +++ b/frontend-react/src/content/developer-resources/reportstream-api/getting-started/GettingStarted.mdx @@ -24,7 +24,7 @@ import Sidenav from "../Sidenav.mdx"; Examples in this guide use curl commands for simplicity with the assumption you’ll be coding these calls into your sending system. You can also use a program like Postman to test submissions. -

**Last updated:** 9/9/24

+

**Last updated:** 6/24/24

*** diff --git a/frontend-react/src/content/site.json b/frontend-react/src/content/site.json index 77485c73e4d..38654e3249a 100644 --- a/frontend-react/src/content/site.json +++ b/frontend-react/src/content/site.json @@ -48,7 +48,7 @@ "path": "/assets/csv/ReportStream-StandardCSV-ExampleData-20220509.csv" }, "programmersGuidePdf": { - "path": "/assets/pdf/ReportStream-Programmers-Guide-v4.6.pdf" + "path": "/assets/pdf/ReportStream-Programmers-Guide-v4.5.pdf" }, "exampleHl7": { "path": "/assets/hl7/Example-hl7-file.hl7" diff --git a/frontend-react/yarn.lock b/frontend-react/yarn.lock index 262a13d07be..8c9e38e5ff8 100644 --- a/frontend-react/yarn.lock +++ b/frontend-react/yarn.lock @@ -2164,118 +2164,118 @@ __metadata: languageName: node linkType: hard -"@microsoft/applicationinsights-analytics-js@npm:3.3.2": - version: 3.3.2 - resolution: "@microsoft/applicationinsights-analytics-js@npm:3.3.2" +"@microsoft/applicationinsights-analytics-js@npm:3.3.1": + version: 3.3.1 + resolution: "@microsoft/applicationinsights-analytics-js@npm:3.3.1" dependencies: - "@microsoft/applicationinsights-common": 3.3.2 - "@microsoft/applicationinsights-core-js": 3.3.2 + "@microsoft/applicationinsights-common": 3.3.1 + "@microsoft/applicationinsights-core-js": 3.3.1 "@microsoft/applicationinsights-shims": 3.0.1 "@microsoft/dynamicproto-js": ^2.0.3 "@nevware21/ts-utils": ">= 0.11.3 < 2.x" peerDependencies: - tslib: ">= 1.0.0" - checksum: f36f555b4d8937a63014ef28f5c09cf5e7c9f35f2e10a702edb926ba135c7b71eefd796d15400b1841f99e3625879580608081b50cb031264566a29ad4b94492 + tslib: "*" + checksum: e5c34f3cbafdd81a2e5ff87922d3b80754b41dccc50359ee407b4af70cba8e4ed57476f12a87364c7fbef33953ffe9bacdaf70c0e03eeb2a4fc3f447cb39f7ab languageName: node linkType: hard -"@microsoft/applicationinsights-cfgsync-js@npm:3.3.2": - version: 3.3.2 - resolution: "@microsoft/applicationinsights-cfgsync-js@npm:3.3.2" +"@microsoft/applicationinsights-cfgsync-js@npm:3.3.1": + version: 3.3.1 + resolution: "@microsoft/applicationinsights-cfgsync-js@npm:3.3.1" dependencies: - "@microsoft/applicationinsights-common": 3.3.2 - "@microsoft/applicationinsights-core-js": 3.3.2 + "@microsoft/applicationinsights-common": 3.3.1 + "@microsoft/applicationinsights-core-js": 3.3.1 "@microsoft/applicationinsights-shims": 3.0.1 "@microsoft/dynamicproto-js": ^2.0.3 "@nevware21/ts-async": ">= 0.5.2 < 2.x" "@nevware21/ts-utils": ">= 0.11.3 < 2.x" peerDependencies: - tslib: ">= 1.0.0" - checksum: 81709fd0f4a15fc465bb22857e996a7474a8e49ddf9d2fe8cd7651c7d6dfdd3fe6b226f79ca334c73dbfb9df1fbd33602fe401a6daf56ccbd1c41b153b51a334 + tslib: "*" + checksum: eab8ba79732bceeba93f5888006a23321e33cf46c9c30c77ab325782f1e0b3621c9851ac6a7d0813398ff16a62833b6812fd0caccdb36760700f34fdaf09f463 languageName: node linkType: hard -"@microsoft/applicationinsights-channel-js@npm:3.3.2": - version: 3.3.2 - resolution: "@microsoft/applicationinsights-channel-js@npm:3.3.2" +"@microsoft/applicationinsights-channel-js@npm:3.3.1": + version: 3.3.1 + resolution: "@microsoft/applicationinsights-channel-js@npm:3.3.1" dependencies: - "@microsoft/applicationinsights-common": 3.3.2 - "@microsoft/applicationinsights-core-js": 3.3.2 + "@microsoft/applicationinsights-common": 3.3.1 + "@microsoft/applicationinsights-core-js": 3.3.1 "@microsoft/applicationinsights-shims": 3.0.1 "@microsoft/dynamicproto-js": ^2.0.3 "@nevware21/ts-async": ">= 0.5.2 < 2.x" "@nevware21/ts-utils": ">= 0.11.3 < 2.x" peerDependencies: - tslib: ">= 1.0.0" - checksum: af2d5703c9beb9d20ebb87c277b028b3a0a90e0c135d37ad21697a963504066914cfc3160be35b58570c75d40dddc23b4cc85f708a9936c102bea79801b35936 + tslib: "*" + checksum: 880bec408d65620e1585996a1f78119114ed14e12fa81277f9c70799065d7f4471a1e771c498b3ff0cee009edd3559412ac45eb73099168092d013bf49481cdc languageName: node linkType: hard -"@microsoft/applicationinsights-common@npm:3.3.2, @microsoft/applicationinsights-common@npm:^3.3.2": - version: 3.3.2 - resolution: "@microsoft/applicationinsights-common@npm:3.3.2" +"@microsoft/applicationinsights-common@npm:3.3.1, @microsoft/applicationinsights-common@npm:^3.3.1": + version: 3.3.1 + resolution: "@microsoft/applicationinsights-common@npm:3.3.1" dependencies: - "@microsoft/applicationinsights-core-js": 3.3.2 + "@microsoft/applicationinsights-core-js": 3.3.1 "@microsoft/applicationinsights-shims": 3.0.1 "@microsoft/dynamicproto-js": ^2.0.3 "@nevware21/ts-utils": ">= 0.11.3 < 2.x" peerDependencies: - tslib: ">= 1.0.0" - checksum: ae459e7301244251a7e9a3e3cd51715848bfabf1fdcfe269d8bed19eb6d92819b3cf915be0423215e8c676a650b2c48e167e6870860ac70540e7a137654b1a64 + tslib: "*" + checksum: 3d2762807812f3dacc4675bce8ecad529d41d4990f4be3e1123047797bfcd42d8fa69b551ae722fbc5e1d42feb3ac62a17ca0f9cb047ff219154072aa5050c23 languageName: node linkType: hard -"@microsoft/applicationinsights-core-js@npm:3.3.2, @microsoft/applicationinsights-core-js@npm:^3.3.2": - version: 3.3.2 - resolution: "@microsoft/applicationinsights-core-js@npm:3.3.2" +"@microsoft/applicationinsights-core-js@npm:3.3.1, @microsoft/applicationinsights-core-js@npm:^3.3.1": + version: 3.3.1 + resolution: "@microsoft/applicationinsights-core-js@npm:3.3.1" dependencies: "@microsoft/applicationinsights-shims": 3.0.1 "@microsoft/dynamicproto-js": ^2.0.3 "@nevware21/ts-async": ">= 0.5.2 < 2.x" "@nevware21/ts-utils": ">= 0.11.3 < 2.x" peerDependencies: - tslib: ">= 1.0.0" - checksum: f3cedb3e79d4e5ceac42ee3cf089dc7810fed734901d2108cdfa47375a3c7d26ff282c535909a4bd87761ed0e623310c8c0e87c4142de32ab129161eff4eb53e + tslib: "*" + checksum: e51dca60df15e576321c1a9aeea70357d7eb29b3ed08c5f361a3919f5100fa4736b8778397ee0995c2683f988d38fc7e45b6b0943cda1e799cbffb852477624f languageName: node linkType: hard -"@microsoft/applicationinsights-dependencies-js@npm:3.3.2": - version: 3.3.2 - resolution: "@microsoft/applicationinsights-dependencies-js@npm:3.3.2" +"@microsoft/applicationinsights-dependencies-js@npm:3.3.1": + version: 3.3.1 + resolution: "@microsoft/applicationinsights-dependencies-js@npm:3.3.1" dependencies: - "@microsoft/applicationinsights-common": 3.3.2 - "@microsoft/applicationinsights-core-js": 3.3.2 + "@microsoft/applicationinsights-common": 3.3.1 + "@microsoft/applicationinsights-core-js": 3.3.1 "@microsoft/applicationinsights-shims": 3.0.1 "@microsoft/dynamicproto-js": ^2.0.3 "@nevware21/ts-async": ">= 0.5.2 < 2.x" "@nevware21/ts-utils": ">= 0.11.3 < 2.x" peerDependencies: - tslib: ">= 1.0.0" - checksum: fa915a95b8be6c675c72de5e4435ebd9f8c03bfad0ff4daa2980d7d2ccf4b0592a12bcbfcfa8b95a01349334deaf11c1cea8a9ea0ac2df8c53c8b754726aeef8 + tslib: "*" + checksum: 30cf9882fa3b8fff62b6dd1a1ac27f00b466eac4a22394c284761a56f799857ba1711f1acec33168c1872f42938068a18de9b74c323460fc96d82e72792acadd languageName: node linkType: hard -"@microsoft/applicationinsights-properties-js@npm:3.3.2": - version: 3.3.2 - resolution: "@microsoft/applicationinsights-properties-js@npm:3.3.2" +"@microsoft/applicationinsights-properties-js@npm:3.3.1": + version: 3.3.1 + resolution: "@microsoft/applicationinsights-properties-js@npm:3.3.1" dependencies: - "@microsoft/applicationinsights-common": 3.3.2 - "@microsoft/applicationinsights-core-js": 3.3.2 + "@microsoft/applicationinsights-common": 3.3.1 + "@microsoft/applicationinsights-core-js": 3.3.1 "@microsoft/applicationinsights-shims": 3.0.1 "@microsoft/dynamicproto-js": ^2.0.3 "@nevware21/ts-utils": ">= 0.11.3 < 2.x" peerDependencies: - tslib: ">= 1.0.0" - checksum: 0ba90bcfd91311763d6d2046da62efe6654d77b33d49bb1ff1141f4bd0ac204fddd73afa42abd805a979ff4d9d64c5429b3ff0a1f15d699ebc8bee34656b6998 + tslib: "*" + checksum: 5a229fe7920101d2ff118a2e3c3d83b22cb11ba21b86ddcdf46a37f93d4f62dd2ee08a109ff49d3aaa5b922c5b793677b171035d642c8be6421be7e3bb214ae8 languageName: node linkType: hard -"@microsoft/applicationinsights-react-js@npm:^17.3.2": - version: 17.3.2 - resolution: "@microsoft/applicationinsights-react-js@npm:17.3.2" +"@microsoft/applicationinsights-react-js@npm:^17.3.1": + version: 17.3.1 + resolution: "@microsoft/applicationinsights-react-js@npm:17.3.1" dependencies: - "@microsoft/applicationinsights-common": ^3.3.2 - "@microsoft/applicationinsights-core-js": ^3.3.2 + "@microsoft/applicationinsights-common": ^3.3.1 + "@microsoft/applicationinsights-core-js": ^3.3.1 "@microsoft/applicationinsights-shims": ^3.0.1 "@microsoft/dynamicproto-js": ^2.0.3 "@nevware21/ts-utils": ">= 0.11.3 < 2.x" @@ -2283,7 +2283,7 @@ __metadata: history: ">= 4.10.1" react: ">= 17.0.1" tslib: "*" - checksum: b5c128c5c1fcf46b64ca15184f9ced77bc83ff3e93255acce7ae8a13fc4ed83e6422c4d5181825fb90a9c0f476f1a89cf540af346f5dd1266c8937e2e873a012 + checksum: 954b2fb18d0b0e2d78f082236a42f2b9b830e1c4b251c9328ef633ff0561db34a17c6e958c68b534c5c5cc2393466a96d737d8d7c8497f222d763f1276d016e9 languageName: node linkType: hard @@ -2296,24 +2296,24 @@ __metadata: languageName: node linkType: hard -"@microsoft/applicationinsights-web@npm:^3.3.2": - version: 3.3.2 - resolution: "@microsoft/applicationinsights-web@npm:3.3.2" - dependencies: - "@microsoft/applicationinsights-analytics-js": 3.3.2 - "@microsoft/applicationinsights-cfgsync-js": 3.3.2 - "@microsoft/applicationinsights-channel-js": 3.3.2 - "@microsoft/applicationinsights-common": 3.3.2 - "@microsoft/applicationinsights-core-js": 3.3.2 - "@microsoft/applicationinsights-dependencies-js": 3.3.2 - "@microsoft/applicationinsights-properties-js": 3.3.2 +"@microsoft/applicationinsights-web@npm:^3.3.1": + version: 3.3.1 + resolution: "@microsoft/applicationinsights-web@npm:3.3.1" + dependencies: + "@microsoft/applicationinsights-analytics-js": 3.3.1 + "@microsoft/applicationinsights-cfgsync-js": 3.3.1 + "@microsoft/applicationinsights-channel-js": 3.3.1 + "@microsoft/applicationinsights-common": 3.3.1 + "@microsoft/applicationinsights-core-js": 3.3.1 + "@microsoft/applicationinsights-dependencies-js": 3.3.1 + "@microsoft/applicationinsights-properties-js": 3.3.1 "@microsoft/applicationinsights-shims": 3.0.1 "@microsoft/dynamicproto-js": ^2.0.3 "@nevware21/ts-async": ">= 0.5.2 < 2.x" "@nevware21/ts-utils": ">= 0.11.3 < 2.x" peerDependencies: - tslib: ">= 1.0.0" - checksum: fd96bf7509179a73c0e49a6d1fe8fd330e529d7a9b0fa00c3f022a34f5c4e6220aa2cead83596c8f3482b6aa44ef28c28e10a8ad6f3118ffb893f6de28b4c73b + tslib: "*" + checksum: 3371f4b5f2e278ab2bd320a23687abf94587004a751b509c3704e55d638fa6a8c8b42d8bdaac93de4ae94c4be00b655dac4151665c253042260b7bd63d00bd38 languageName: node linkType: hard @@ -2399,9 +2399,9 @@ __metadata: languageName: node linkType: hard -"@okta/okta-auth-js@npm:^7.8.0": - version: 7.8.0 - resolution: "@okta/okta-auth-js@npm:7.8.0" +"@okta/okta-auth-js@npm:^7.7.0": + version: 7.7.0 + resolution: "@okta/okta-auth-js@npm:7.7.0" dependencies: "@babel/runtime": ^7.12.5 "@peculiar/webcrypto": ^1.4.0 @@ -2419,7 +2419,7 @@ __metadata: tiny-emitter: 1.1.0 webcrypto-shim: ^0.1.5 xhr2: 0.1.3 - checksum: faeac22381a46784381e3757c1f5193bb7dc821ea39fdd5d58952dc744cf0a64788e979aa3ce4a2551dd29f6b49e9e7eda756bafc3737386ec4c6d2b3277582c + checksum: 86f091db8131694aa373dc36400dd6a89160cd0efd695c98459bae83a6c68fe615b9fa9083b96ec301c321b7e7efc93a20a5bd9ca43da8117b26be2ba398c492 languageName: node linkType: hard @@ -2438,11 +2438,11 @@ __metadata: languageName: node linkType: hard -"@okta/okta-signin-widget@npm:^7.23.0": - version: 7.23.0 - resolution: "@okta/okta-signin-widget@npm:7.23.0" +"@okta/okta-signin-widget@npm:^7.21.2": + version: 7.21.2 + resolution: "@okta/okta-signin-widget@npm:7.21.2" dependencies: - "@okta/okta-auth-js": ^7.8.0 + "@okta/okta-auth-js": ^7.7.0 "@sindresorhus/to-milliseconds": ^1.0.0 "@types/backbone": ^1.4.15 "@types/eslint-scope": ^3.7.3 @@ -2464,7 +2464,7 @@ __metadata: dependenciesMeta: fsevents: optional: true - checksum: 5b55d5fc39412778505d262810ab3a87c2bf557a55a59e4f041f77393b6344e35a96477603a40e80cae325f0bd534aa61c95f0b154b659e647b35e55346d4b90 + checksum: ac78f2055248aff5d09a50bbe086023cc1aee0b6c10f84e80eeac2488dfbd6e5647b10abb8b65b60a80c754159d50c828ae11a6769e255df588fc7b8b681fd19 languageName: node linkType: hard @@ -2532,14 +2532,14 @@ __metadata: languageName: node linkType: hard -"@playwright/test@npm:^1.47.0": - version: 1.47.0 - resolution: "@playwright/test@npm:1.47.0" +"@playwright/test@npm:^1.46.1": + version: 1.46.1 + resolution: "@playwright/test@npm:1.46.1" dependencies: - playwright: 1.47.0 + playwright: 1.46.1 bin: playwright: cli.js - checksum: 4f5a921c57d2577c64b0bc03d4b97937a6f853eee6afb58f2fc8fb140147b7f33800afe490c9ba3af515d5feb104f65319663931ec1ee75e10f001c1d69b138c + checksum: 180d90c6421ee6a8c00a1ae65d91d5f69767e2de95c3f5582ac2bdf3a388e621fdd3ee00ecb7836db427bb0d4cee58111c14f133cb62150357d8e4f43e3e2295 languageName: node linkType: hard @@ -2550,10 +2550,10 @@ __metadata: languageName: node linkType: hard -"@remix-run/router@npm:1.19.1": - version: 1.19.1 - resolution: "@remix-run/router@npm:1.19.1" - checksum: ebe4474ba0c1046093976b48a4eb4e39bd2f47368aacea21400126d72e133d2cfbfb50254cf1bde0b66dacdf0344452f743049d1595a22e86130668f60112376 +"@remix-run/router@npm:1.18.0": + version: 1.18.0 + resolution: "@remix-run/router@npm:1.18.0" + checksum: dad8e8cbd3b44503c89de0fc5d8f92954d04c00bf36b42a18ae8b03fe0783742a99d0cae36f2962db38e2bdba3d40259105202c69620943e88f81711ceeb8fe4 languageName: node linkType: hard @@ -2663,13 +2663,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-android-arm-eabi@npm:4.21.2": - version: 4.21.2 - resolution: "@rollup/rollup-android-arm-eabi@npm:4.21.2" - conditions: os=android & cpu=arm - languageName: node - linkType: hard - "@rollup/rollup-android-arm64@npm:4.13.0": version: 4.13.0 resolution: "@rollup/rollup-android-arm64@npm:4.13.0" @@ -2677,13 +2670,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-android-arm64@npm:4.21.2": - version: 4.21.2 - resolution: "@rollup/rollup-android-arm64@npm:4.21.2" - conditions: os=android & cpu=arm64 - languageName: node - linkType: hard - "@rollup/rollup-darwin-arm64@npm:4.13.0": version: 4.13.0 resolution: "@rollup/rollup-darwin-arm64@npm:4.13.0" @@ -2691,13 +2677,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-darwin-arm64@npm:4.21.2": - version: 4.21.2 - resolution: "@rollup/rollup-darwin-arm64@npm:4.21.2" - conditions: os=darwin & cpu=arm64 - languageName: node - linkType: hard - "@rollup/rollup-darwin-x64@npm:4.13.0": version: 4.13.0 resolution: "@rollup/rollup-darwin-x64@npm:4.13.0" @@ -2705,13 +2684,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-darwin-x64@npm:4.21.2": - version: 4.21.2 - resolution: "@rollup/rollup-darwin-x64@npm:4.21.2" - conditions: os=darwin & cpu=x64 - languageName: node - linkType: hard - "@rollup/rollup-linux-arm-gnueabihf@npm:4.13.0": version: 4.13.0 resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.13.0" @@ -2719,20 +2691,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-linux-arm-gnueabihf@npm:4.21.2": - version: 4.21.2 - resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.21.2" - conditions: os=linux & cpu=arm & libc=glibc - languageName: node - linkType: hard - -"@rollup/rollup-linux-arm-musleabihf@npm:4.21.2": - version: 4.21.2 - resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.21.2" - conditions: os=linux & cpu=arm & libc=musl - languageName: node - linkType: hard - "@rollup/rollup-linux-arm64-gnu@npm:4.13.0": version: 4.13.0 resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.13.0" @@ -2740,13 +2698,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-linux-arm64-gnu@npm:4.21.2": - version: 4.21.2 - resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.21.2" - conditions: os=linux & cpu=arm64 & libc=glibc - languageName: node - linkType: hard - "@rollup/rollup-linux-arm64-musl@npm:4.13.0": version: 4.13.0 resolution: "@rollup/rollup-linux-arm64-musl@npm:4.13.0" @@ -2754,20 +2705,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-linux-arm64-musl@npm:4.21.2": - version: 4.21.2 - resolution: "@rollup/rollup-linux-arm64-musl@npm:4.21.2" - conditions: os=linux & cpu=arm64 & libc=musl - languageName: node - linkType: hard - -"@rollup/rollup-linux-powerpc64le-gnu@npm:4.21.2": - version: 4.21.2 - resolution: "@rollup/rollup-linux-powerpc64le-gnu@npm:4.21.2" - conditions: os=linux & cpu=ppc64 & libc=glibc - languageName: node - linkType: hard - "@rollup/rollup-linux-riscv64-gnu@npm:4.13.0": version: 4.13.0 resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.13.0" @@ -2775,20 +2712,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-linux-riscv64-gnu@npm:4.21.2": - version: 4.21.2 - resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.21.2" - conditions: os=linux & cpu=riscv64 & libc=glibc - languageName: node - linkType: hard - -"@rollup/rollup-linux-s390x-gnu@npm:4.21.2": - version: 4.21.2 - resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.21.2" - conditions: os=linux & cpu=s390x & libc=glibc - languageName: node - linkType: hard - "@rollup/rollup-linux-x64-gnu@npm:4.13.0": version: 4.13.0 resolution: "@rollup/rollup-linux-x64-gnu@npm:4.13.0" @@ -2796,13 +2719,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-linux-x64-gnu@npm:4.21.2": - version: 4.21.2 - resolution: "@rollup/rollup-linux-x64-gnu@npm:4.21.2" - conditions: os=linux & cpu=x64 & libc=glibc - languageName: node - linkType: hard - "@rollup/rollup-linux-x64-musl@npm:4.13.0": version: 4.13.0 resolution: "@rollup/rollup-linux-x64-musl@npm:4.13.0" @@ -2810,13 +2726,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-linux-x64-musl@npm:4.21.2": - version: 4.21.2 - resolution: "@rollup/rollup-linux-x64-musl@npm:4.21.2" - conditions: os=linux & cpu=x64 & libc=musl - languageName: node - linkType: hard - "@rollup/rollup-win32-arm64-msvc@npm:4.13.0": version: 4.13.0 resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.13.0" @@ -2824,13 +2733,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-win32-arm64-msvc@npm:4.21.2": - version: 4.21.2 - resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.21.2" - conditions: os=win32 & cpu=arm64 - languageName: node - linkType: hard - "@rollup/rollup-win32-ia32-msvc@npm:4.13.0": version: 4.13.0 resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.13.0" @@ -2838,13 +2740,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-win32-ia32-msvc@npm:4.21.2": - version: 4.21.2 - resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.21.2" - conditions: os=win32 & cpu=ia32 - languageName: node - linkType: hard - "@rollup/rollup-win32-x64-msvc@npm:4.13.0": version: 4.13.0 resolution: "@rollup/rollup-win32-x64-msvc@npm:4.13.0" @@ -2852,13 +2747,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-win32-x64-msvc@npm:4.21.2": - version: 4.21.2 - resolution: "@rollup/rollup-win32-x64-msvc@npm:4.21.2" - conditions: os=win32 & cpu=x64 - languageName: node - linkType: hard - "@selderee/plugin-htmlparser2@npm:^0.11.0": version: 0.11.0 resolution: "@selderee/plugin-htmlparser2@npm:0.11.0" @@ -3511,40 +3399,40 @@ __metadata: languageName: node linkType: hard -"@tanstack/query-core@npm:5.55.4": - version: 5.55.4 - resolution: "@tanstack/query-core@npm:5.55.4" - checksum: f20fc8dbd7484b38aa010bd51a381f185691589373ebb41b9fe22c24492d8537a9eaaf6bf273cb781f2dfd65021f4fc984d4104a92a34c911df706b2bd1bdb8c +"@tanstack/query-core@npm:5.51.21": + version: 5.51.21 + resolution: "@tanstack/query-core@npm:5.51.21" + checksum: a602e70bfbfa1fa28333be8c1b9ac9c9b97937b236d3997a757079ae04086fe59c2688cb6406fd82dcf9ef07f73e7a4ba1d373040f6cad340e1f64bceafe0e07 languageName: node linkType: hard -"@tanstack/query-devtools@npm:5.55.1": - version: 5.55.1 - resolution: "@tanstack/query-devtools@npm:5.55.1" - checksum: f1a4fba14f512b3250536703e2363712ac942ffb7712aa694988b8df75c04b52f0ac75fcf90c85abb6974ef422e64ad27f9e0ff07a06854ae02ba1ce4cbdd1d1 +"@tanstack/query-devtools@npm:5.51.16": + version: 5.51.16 + resolution: "@tanstack/query-devtools@npm:5.51.16" + checksum: 77ffcfc693b32d640144ccdcc51da3d7ecd7ac43ae0d1665465da701fce77f90c606fc6863ecf34ab375d0ce3c3dab5b4c9c66c889e4d35fa6bd1decf7f8a096 languageName: node linkType: hard -"@tanstack/react-query-devtools@npm:^5.55.4": - version: 5.55.4 - resolution: "@tanstack/react-query-devtools@npm:5.55.4" +"@tanstack/react-query-devtools@npm:^5.51.23": + version: 5.51.23 + resolution: "@tanstack/react-query-devtools@npm:5.51.23" dependencies: - "@tanstack/query-devtools": 5.55.1 + "@tanstack/query-devtools": 5.51.16 peerDependencies: - "@tanstack/react-query": ^5.55.4 + "@tanstack/react-query": ^5.51.23 react: ^18 || ^19 - checksum: 264f70d5b1796d2e2e73fc177c21fcb298e345e0e6be82d242722f31e19e04c9908614d63ae5095027c8b81804f4a3b74a73805a8f2471e239b988ea74f4c44f + checksum: 4551cf800ff0fa83174130b885f68dacbddd451d4a68b4b6652e55be7a9989a0c27a21f2acab9c144e29cf86d927736514ac5b1fc648225ac3b40d7c478e0035 languageName: node linkType: hard -"@tanstack/react-query@npm:^5.55.4": - version: 5.55.4 - resolution: "@tanstack/react-query@npm:5.55.4" +"@tanstack/react-query@npm:^5.51.23": + version: 5.51.23 + resolution: "@tanstack/react-query@npm:5.51.23" dependencies: - "@tanstack/query-core": 5.55.4 + "@tanstack/query-core": 5.51.21 peerDependencies: - react: ^18 || ^19 - checksum: 26e4ecc0950f2d9a1c0d527dbe736827ae63bcb12e688b442083507235a48abf3bf9fc247ee730820b0d1af242d7b516ed9de02568a4867b7867c2dd23de3664 + react: ^18.0.0 + checksum: d1d8131232430635923694befff9bdabc8d18ca2392789456a28191020d489671577e02ee5b0107e0064fea981c74c99cea3077a4e34cc1ac7438175bd50effe languageName: node linkType: hard @@ -3629,18 +3517,19 @@ __metadata: languageName: node linkType: hard -"@testing-library/jest-dom@npm:^6.5.0": - version: 6.5.0 - resolution: "@testing-library/jest-dom@npm:6.5.0" +"@testing-library/jest-dom@npm:^6.4.8": + version: 6.4.8 + resolution: "@testing-library/jest-dom@npm:6.4.8" dependencies: "@adobe/css-tools": ^4.4.0 + "@babel/runtime": ^7.9.2 aria-query: ^5.0.0 chalk: ^3.0.0 css.escape: ^1.5.1 dom-accessibility-api: ^0.6.3 lodash: ^4.17.21 redent: ^3.0.0 - checksum: c2d14103ebe3358852ec527ff7512f64207a39932b2f7b6dff7e73ba91296b01a71bad9a9584b6ee010681380a906c1740af50470adc6db660e1c7585d012ebf + checksum: b601688950e522557c2c6bbc0f026ae31a10583577c8a557814b0eb33648fe82afc06299f3cdb79ff0c5076fd1a6106f3d76e2ca0dde6f7ee0555e63008fbd72 languageName: node linkType: hard @@ -3666,9 +3555,9 @@ __metadata: languageName: node linkType: hard -"@testing-library/react@npm:^16.0.1": - version: 16.0.1 - resolution: "@testing-library/react@npm:16.0.1" +"@testing-library/react@npm:^16.0.0": + version: 16.0.0 + resolution: "@testing-library/react@npm:16.0.0" dependencies: "@babel/runtime": ^7.12.5 peerDependencies: @@ -3682,7 +3571,7 @@ __metadata: optional: true "@types/react-dom": optional: true - checksum: 1837db473ea018cf2b5d0cbfffb7a30d0d759e5a7f23aad431441c77bcc3d2533250cd003a61878fd908267df47404cedcb5914f12d79e413002c659652b37fd + checksum: 45a35f0b5f34b5a7f4dcefdd3f1d202d5421692e5cc7a491c9bc71e6ed9dd5872a182b80b4dfefb4a56d9c1df35e50f6fa2917bcf657cc26b4bc0d2259df0027 languageName: node linkType: hard @@ -3702,15 +3591,15 @@ __metadata: languageName: node linkType: hard -"@trussworks/react-uswds@npm:^9.1.0": - version: 9.1.0 - resolution: "@trussworks/react-uswds@npm:9.1.0" +"@trussworks/react-uswds@npm:^9.0.0": + version: 9.0.0 + resolution: "@trussworks/react-uswds@npm:9.0.0" peerDependencies: "@uswds/uswds": ^3.7.1 focus-trap-react: ^10.2.3 react: ^16.x || ^17.x || ^18.x react-dom: ^16.x || ^17.x || ^18.x - checksum: 907613e6bc42d7b304f69e52556ab78b0df86adcb24453cf9616805786e5940a3dbdd55bf6f03270c41dd672cfda1a4fdb9331ff64dd8c7beeecaa578771783c + checksum: 2e2d310c69a6dc2e92d48830537ad1873b45a4f0cfab81ccfa180ec2cae55c4b61153397c4956295dfd2cdad7b8a5156b69eb3c5464b0bba213fc386564c4993 languageName: node linkType: hard @@ -4204,13 +4093,13 @@ __metadata: languageName: node linkType: hard -"@types/react@npm:18.3.5": - version: 18.3.5 - resolution: "@types/react@npm:18.3.5" +"@types/react@npm:18.3.3": + version: 18.3.3 + resolution: "@types/react@npm:18.3.3" dependencies: "@types/prop-types": "*" csstype: ^3.0.2 - checksum: 63d2ff473b348c902b68c20be55d2c5124d078c4336c2d1778f316c27789ed596657e8e714022ce14fb24994b0960fc64c913e629bb0bf85815355b0c31eb46b + checksum: c63d6a78163244e2022b01ef79b0baec4fe4da3475dc4a90bb8accefad35ef0c43560fd0312e5974f92a0f1108aa4d669ac72d73d66396aa060ea03b5d2e3873 languageName: node linkType: hard @@ -4221,12 +4110,12 @@ __metadata: languageName: node linkType: hard -"@types/sanitize-html@npm:^2.13.0": - version: 2.13.0 - resolution: "@types/sanitize-html@npm:2.13.0" +"@types/sanitize-html@npm:^2.11.0": + version: 2.11.0 + resolution: "@types/sanitize-html@npm:2.11.0" dependencies: htmlparser2: ^8.0.0 - checksum: a32c67bdf86048efa8ee5cdc1a68351758bae888956010eea58e694c1f9fc580632d1ce0478d31984559e0b03282d130ffe3e87479838c8da92cf1ac06626edc + checksum: a901d55d31cd946a7fce0130cc7cf6bcf56602af9c87291be77d8149c60e7afc47c83ca74c67c2d84e6ba029fe9bbd6f14f89a8cb30fbd185766eebc5722c251 languageName: node linkType: hard @@ -4609,9 +4498,9 @@ __metadata: languageName: node linkType: hard -"@vitest/coverage-istanbul@npm:^2.0.5": - version: 2.0.5 - resolution: "@vitest/coverage-istanbul@npm:2.0.5" +"@vitest/coverage-istanbul@npm:^2.0.4": + version: 2.0.4 + resolution: "@vitest/coverage-istanbul@npm:2.0.4" dependencies: "@istanbuljs/schema": ^0.1.3 debug: ^4.3.5 @@ -4624,8 +4513,8 @@ __metadata: test-exclude: ^7.0.1 tinyrainbow: ^1.2.0 peerDependencies: - vitest: 2.0.5 - checksum: 641e8169d8ca67f1d8cf9d9acf603aa0a23f2066898e542d0fd119f8ae84afb32f0c67dafefd478899f8cd41e2091aa5641042e33b80ad456a7341bec5bc8eeb + vitest: 2.0.4 + checksum: 4438e918427c5970a57978c3bb958c7c40d9e866960ebc0a3427846617befa37098430255525721a7845786ce44ee181e131ee5c02ce557d950d17fbf4bce612 languageName: node linkType: hard @@ -4640,45 +4529,45 @@ __metadata: languageName: node linkType: hard -"@vitest/expect@npm:2.0.5": - version: 2.0.5 - resolution: "@vitest/expect@npm:2.0.5" +"@vitest/expect@npm:2.0.4": + version: 2.0.4 + resolution: "@vitest/expect@npm:2.0.4" dependencies: - "@vitest/spy": 2.0.5 - "@vitest/utils": 2.0.5 + "@vitest/spy": 2.0.4 + "@vitest/utils": 2.0.4 chai: ^5.1.1 tinyrainbow: ^1.2.0 - checksum: 0c65eb24c2fd9ef5735d1e65dc8fee59936e6cab1d6ab24a95e014b8337be5598242fceae4e8ec2974e2ae70a30c1906ad41208bf6de6cdf2043594cdb65e627 + checksum: 6841da3ffa58572c24b3720c84bade5b7293d60905b17b3e2ea28fcecb7c18592851fe84538bfc9995ab3b7681cd3e0fc6913512390ae1564d3fb1de8d9edad8 languageName: node linkType: hard -"@vitest/pretty-format@npm:2.0.5, @vitest/pretty-format@npm:^2.0.5": - version: 2.0.5 - resolution: "@vitest/pretty-format@npm:2.0.5" +"@vitest/pretty-format@npm:2.0.4, @vitest/pretty-format@npm:^2.0.4": + version: 2.0.4 + resolution: "@vitest/pretty-format@npm:2.0.4" dependencies: tinyrainbow: ^1.2.0 - checksum: d60346001180e5bb3c53be4b4d0b6d9352648b066641d5aba7b97d7c97a8e252dc934204d58818330262a65f07127455fc5f3b5f7e3647c60f6ff302a725733b + checksum: a0dbfea5a1379aa1b69ee208116bd88e39edccb7e2f71be56f85868495217b2d8c0284ecba81a6f66f8e78a6d50b9f2c2fc3f3bc2114e909b7b43b96fdee7042 languageName: node linkType: hard -"@vitest/runner@npm:2.0.5": - version: 2.0.5 - resolution: "@vitest/runner@npm:2.0.5" +"@vitest/runner@npm:2.0.4": + version: 2.0.4 + resolution: "@vitest/runner@npm:2.0.4" dependencies: - "@vitest/utils": 2.0.5 + "@vitest/utils": 2.0.4 pathe: ^1.1.2 - checksum: 4d6c23ea77ada83d70cb8cfd20b17cd0b9a375bc70b95466acee822734e203952931319abf167abcdba33dca415affed71d98d3f7212e1812dbf81e540fae4a4 + checksum: 313030973a80766de9bed1ed6f4342c5320d9b9dfcf97bc8d61899a41a916e8f5d2aa2ab727023372ad057ca5f95daae3820535f1124e0651814ce7045883414 languageName: node linkType: hard -"@vitest/snapshot@npm:2.0.5": - version: 2.0.5 - resolution: "@vitest/snapshot@npm:2.0.5" +"@vitest/snapshot@npm:2.0.4": + version: 2.0.4 + resolution: "@vitest/snapshot@npm:2.0.4" dependencies: - "@vitest/pretty-format": 2.0.5 + "@vitest/pretty-format": 2.0.4 magic-string: ^0.30.10 pathe: ^1.1.2 - checksum: 468d040106aa186a63ff3a86ce6bf333d52de83a2d906dc8c7c5c63406f2ecb46850ac5d69f5838a15764094946963962fa963d64c62a1a8a127ba20496fa3f1 + checksum: af9bd9da387dca25c13d6b8323d9e574ce3be19b7965ef26c427394e07ca7c7d291d3d52e65c90cf2bcafbfe673a70d362c526597150fe4407d5c13f9cf47412 languageName: node linkType: hard @@ -4691,20 +4580,20 @@ __metadata: languageName: node linkType: hard -"@vitest/spy@npm:2.0.5": - version: 2.0.5 - resolution: "@vitest/spy@npm:2.0.5" +"@vitest/spy@npm:2.0.4": + version: 2.0.4 + resolution: "@vitest/spy@npm:2.0.4" dependencies: tinyspy: ^3.0.0 - checksum: a010dec99146832a2586c639fccf533b194482f6f25ffb2d64367598a4e77d094aedd3d82cdb55fc1a3971649577a039513ccf8dc1571492e5982482c530c7b9 + checksum: 097cef445965e4145993f0436007116f5c56da6e02d51f9c7f18c56fb9ae05c045c627b75a34609b4f39901f2f8e9acf54dae94b490db3c4b1656c0e4fbf5847 languageName: node linkType: hard -"@vitest/ui@npm:^2.0.5": - version: 2.0.5 - resolution: "@vitest/ui@npm:2.0.5" +"@vitest/ui@npm:^2.0.4": + version: 2.0.4 + resolution: "@vitest/ui@npm:2.0.4" dependencies: - "@vitest/utils": 2.0.5 + "@vitest/utils": 2.0.4 fast-glob: ^3.3.2 fflate: ^0.8.2 flatted: ^3.3.1 @@ -4712,8 +4601,8 @@ __metadata: sirv: ^2.0.4 tinyrainbow: ^1.2.0 peerDependencies: - vitest: 2.0.5 - checksum: a1c0e5484279189e0e0d2b93809932a6fa971224b1677f069d8071c2b953853a11b01eb56009f51ca7a53e61d51f0f1d0a688ba06166533c868f43f41bf96673 + vitest: 2.0.4 + checksum: 60a9db849662de4fac8109afc02616b235880751432d22b4b9e9a75f75bde1062ecb311ebc7aecb3d47924168a6ed19997deaa2ccf734906316ff108bd102da7 languageName: node linkType: hard @@ -4729,15 +4618,15 @@ __metadata: languageName: node linkType: hard -"@vitest/utils@npm:2.0.5": - version: 2.0.5 - resolution: "@vitest/utils@npm:2.0.5" +"@vitest/utils@npm:2.0.4": + version: 2.0.4 + resolution: "@vitest/utils@npm:2.0.4" dependencies: - "@vitest/pretty-format": 2.0.5 + "@vitest/pretty-format": 2.0.4 estree-walker: ^3.0.3 loupe: ^3.1.1 tinyrainbow: ^1.2.0 - checksum: 6867556dd7e376437e454b96c7e596ec16e141fb00b002b6ce435611ab3d9d1e3f38ebf48b1fc49f4c97f9754ed37abb602de8bf122f4ac0de621a4dbe0a314e + checksum: 1f6ce4d80403750e1ed3669de746327cd6626c3a80ba9e30613653521e4c9126d7db5b4ea764a644eb7e933f9fef218816515181deb746c5ed6988c5ea9dde0d languageName: node linkType: hard @@ -5264,14 +5153,14 @@ __metadata: languageName: node linkType: hard -"axios@npm:^1.7.7": - version: 1.7.7 - resolution: "axios@npm:1.7.7" +"axios@npm:^1.7.5": + version: 1.7.5 + resolution: "axios@npm:1.7.5" dependencies: follow-redirects: ^1.15.6 form-data: ^4.0.0 proxy-from-env: ^1.1.0 - checksum: 882d4fe0ec694a07c7f5c1f68205eb6dc5a62aecdb632cc7a4a3d0985188ce3030e0b277e1a8260ac3f194d314ae342117660a151fabffdc5081ca0b5a8b47fe + checksum: 2859fe01437cf133eee35571abc1d4b5224bb13e530e66cb3581ca226e170541dd5eef9f46abb41592cee0a2f54930c9e4978354e0cf1064748fc20d9a05e9d5 languageName: node linkType: hard @@ -5368,9 +5257,9 @@ __metadata: languageName: node linkType: hard -"body-parser@npm:1.20.3": - version: 1.20.3 - resolution: "body-parser@npm:1.20.3" +"body-parser@npm:1.20.2": + version: 1.20.2 + resolution: "body-parser@npm:1.20.2" dependencies: bytes: 3.1.2 content-type: ~1.0.5 @@ -5380,11 +5269,11 @@ __metadata: http-errors: 2.0.0 iconv-lite: 0.4.24 on-finished: 2.4.1 - qs: 6.13.0 + qs: 6.11.0 raw-body: 2.5.2 type-is: ~1.6.18 unpipe: 1.0.0 - checksum: 1a35c59a6be8d852b00946330141c4f142c6af0f970faa87f10ad74f1ee7118078056706a05ae3093c54dabca9cd3770fa62a170a85801da1a4324f04381167d + checksum: 14d37ec638ab5c93f6099ecaed7f28f890d222c650c69306872e00b9efa081ff6c596cd9afb9930656aae4d6c4e1c17537bea12bb73c87a217cb3cfea8896737 languageName: node linkType: hard @@ -6660,13 +6549,6 @@ __metadata: languageName: node linkType: hard -"encodeurl@npm:~2.0.0": - version: 2.0.0 - resolution: "encodeurl@npm:2.0.0" - checksum: abf5cd51b78082cf8af7be6785813c33b6df2068ce5191a40ca8b1afe6a86f9230af9a9ce694a5ce4665955e5c1120871826df9c128a642e09c58d592e2807fe - languageName: node - linkType: hard - "encoding@npm:^0.1.13": version: 0.1.13 resolution: "encoding@npm:0.1.13" @@ -7642,41 +7524,41 @@ __metadata: linkType: hard "express@npm:^4.19.2": - version: 4.20.0 - resolution: "express@npm:4.20.0" + version: 4.19.2 + resolution: "express@npm:4.19.2" dependencies: accepts: ~1.3.8 array-flatten: 1.1.1 - body-parser: 1.20.3 + body-parser: 1.20.2 content-disposition: 0.5.4 content-type: ~1.0.4 cookie: 0.6.0 cookie-signature: 1.0.6 debug: 2.6.9 depd: 2.0.0 - encodeurl: ~2.0.0 + encodeurl: ~1.0.2 escape-html: ~1.0.3 etag: ~1.8.1 finalhandler: 1.2.0 fresh: 0.5.2 http-errors: 2.0.0 - merge-descriptors: 1.0.3 + merge-descriptors: 1.0.1 methods: ~1.1.2 on-finished: 2.4.1 parseurl: ~1.3.3 - path-to-regexp: 0.1.10 + path-to-regexp: 0.1.7 proxy-addr: ~2.0.7 qs: 6.11.0 range-parser: ~1.2.1 safe-buffer: 5.2.1 - send: 0.19.0 - serve-static: 1.16.0 + send: 0.18.0 + serve-static: 1.15.0 setprototypeof: 1.2.0 statuses: 2.0.1 type-is: ~1.6.18 utils-merge: 1.0.1 vary: ~1.1.2 - checksum: faa11bffa16be97b26d9f38187e569378c01cad0b92fbd02094fb4e35a224dc5177cc9cc6849141702da80d2d8cbe857c60a7e622e8106695405dc27e38fb3ee + checksum: 212dbd6c2c222a96a61bc927639c95970a53b06257080bb9e2838adb3bffdb966856551fdad1ab5dd654a217c35db94f987d0aa88d48fb04d306340f5f34dca5 languageName: node linkType: hard @@ -9531,9 +9413,9 @@ __metadata: languageName: node linkType: hard -"jsdom@npm:^25.0.0": - version: 25.0.0 - resolution: "jsdom@npm:25.0.0" +"jsdom@npm:^24.1.1": + version: 24.1.1 + resolution: "jsdom@npm:24.1.1" dependencies: cssstyle: ^4.0.1 data-urls: ^5.0.0 @@ -9561,7 +9443,7 @@ __metadata: peerDependenciesMeta: canvas: optional: true - checksum: aa7dc92333f7694c3ddd61685b640f743a61e5e638fcc9c24156e63dc432ab36dbe90137d608c82a3f84d9e05f70c903a38f9e34d6cca1a74469fad4c93f76c2 + checksum: c3f3c9c8f6ac4ce308de6f005980d0f3da4d504686a0fc20c59760f1e3be714d48adf3d31f8d3a352d8adb4961e6cfebfc6b6c3c9841408cf6e7f8c0cd4dcdc4 languageName: node linkType: hard @@ -9779,9 +9661,9 @@ __metadata: languageName: node linkType: hard -"lint-staged@npm:^15.2.10": - version: 15.2.10 - resolution: "lint-staged@npm:15.2.10" +"lint-staged@npm:^15.2.9": + version: 15.2.9 + resolution: "lint-staged@npm:15.2.9" dependencies: chalk: ~5.3.0 commander: ~12.1.0 @@ -9789,13 +9671,13 @@ __metadata: execa: ~8.0.1 lilconfig: ~3.1.2 listr2: ~8.2.4 - micromatch: ~4.0.8 + micromatch: ~4.0.7 pidtree: ~0.6.0 string-argv: ~0.3.2 yaml: ~2.5.0 bin: lint-staged: bin/lint-staged.js - checksum: 7ab255b848478ca47c6b94aad0e7a3cfe5ba48ae1fb353cfa86635741333b83b1fd793d7cac6d44bf0388ad087d7e0250c7ec0a8ebece63fbcf7a8d175279809 + checksum: 7f804c24d0374b48d26f11a051342141b84c9954f77225bab5ae221b1e4d47a72f722f39b13169267592c28b2614ad39f9722fd86bc4cdfdf93e8601ff66b0e1 languageName: node linkType: hard @@ -10300,10 +10182,10 @@ __metadata: languageName: node linkType: hard -"merge-descriptors@npm:1.0.3": - version: 1.0.3 - resolution: "merge-descriptors@npm:1.0.3" - checksum: 52117adbe0313d5defa771c9993fe081e2d2df9b840597e966aadafde04ae8d0e3da46bac7ca4efc37d4d2b839436582659cd49c6a43eacb3fe3050896a105d1 +"merge-descriptors@npm:1.0.1": + version: 1.0.1 + resolution: "merge-descriptors@npm:1.0.1" + checksum: 5abc259d2ae25bb06d19ce2b94a21632583c74e2a9109ee1ba7fd147aa7362b380d971e0251069f8b3eb7d48c21ac839e21fa177b335e82c76ec172e30c31a26 languageName: node linkType: hard @@ -10684,7 +10566,7 @@ __metadata: languageName: node linkType: hard -"micromatch@npm:^4.0.2, micromatch@npm:^4.0.4, micromatch@npm:~4.0.8": +"micromatch@npm:^4.0.2, micromatch@npm:^4.0.4, micromatch@npm:~4.0.7": version: 4.0.8 resolution: "micromatch@npm:4.0.8" dependencies: @@ -11662,10 +11544,10 @@ __metadata: languageName: node linkType: hard -"path-to-regexp@npm:0.1.10": - version: 0.1.10 - resolution: "path-to-regexp@npm:0.1.10" - checksum: ab7a3b7a0b914476d44030340b0a65d69851af2a0f33427df1476100ccb87d409c39e2182837a96b98fb38c4ef2ba6b87bdad62bb70a2c153876b8061760583c +"path-to-regexp@npm:0.1.7": + version: 0.1.7 + resolution: "path-to-regexp@npm:0.1.7" + checksum: 69a14ea24db543e8b0f4353305c5eac6907917031340e5a8b37df688e52accd09e3cebfe1660b70d76b6bd89152f52183f28c74813dbf454ba1a01c82a38abce languageName: node linkType: hard @@ -11809,27 +11691,27 @@ __metadata: languageName: node linkType: hard -"playwright-core@npm:1.47.0": - version: 1.47.0 - resolution: "playwright-core@npm:1.47.0" +"playwright-core@npm:1.46.1": + version: 1.46.1 + resolution: "playwright-core@npm:1.46.1" bin: playwright-core: cli.js - checksum: 64c6adae3ba76cd9f05e6569b1350a6e6990fd8236bb17d1f241b49bea68592a4f4390adb38863d2ee8ef5124e9cb77ff50b9076f8ef3a0890b2a37f87fb842a + checksum: 99a03f97d76af02b0565aa09758eb03427e13497ef7e9e9044fd1184a5f050e7545a517dd7ad8988a68b3ea76e2ba0d411f81e410b1cb29f5ac9161c49689822 languageName: node linkType: hard -"playwright@npm:1.47.0": - version: 1.47.0 - resolution: "playwright@npm:1.47.0" +"playwright@npm:1.46.1": + version: 1.46.1 + resolution: "playwright@npm:1.46.1" dependencies: fsevents: 2.3.2 - playwright-core: 1.47.0 + playwright-core: 1.46.1 dependenciesMeta: fsevents: optional: true bin: playwright: cli.js - checksum: e055fee751035f306a636267d0e080f08d4a523a6c1e3ebb01c91c18838c29bb9165ec3e63eb706798886fa2715f272dec908a7e2e1abcd7a55984688dbac2db + checksum: 9e721cb27f919cd92ea8c7461f4a8e97e32eade9da036baa4747f483549e33a8d77585f51e228d6639a1e28a76b0c1d59ca0a05dbd07aa3cfe427be7aaeb9ec8 languageName: node linkType: hard @@ -11867,7 +11749,7 @@ __metadata: languageName: node linkType: hard -"postcss@npm:^8.3.11, postcss@npm:^8.4.38": +"postcss@npm:^8.3.11, postcss@npm:^8.4.38, postcss@npm:^8.4.39": version: 8.4.39 resolution: "postcss@npm:8.4.39" dependencies: @@ -11878,14 +11760,14 @@ __metadata: languageName: node linkType: hard -"postcss@npm:^8.4.43, postcss@npm:^8.4.45": - version: 8.4.45 - resolution: "postcss@npm:8.4.45" +"postcss@npm:^8.4.41": + version: 8.4.41 + resolution: "postcss@npm:8.4.41" dependencies: nanoid: ^3.3.7 picocolors: ^1.0.1 source-map-js: ^1.2.0 - checksum: 3223cdad4a9392c0b334ee3ee7e4e8041c631cb6160609cef83c18d2b2580e931dd8068ab13cc6000c1a254d57492ac6c38717efc397c5dcc9756d06bc9c44f3 + checksum: f865894929eb0f7fc2263811cc853c13b1c75103028b3f4f26df777e27b201f1abe21cb4aa4c2e901c80a04f6fb325ee22979688fe55a70e2ea82b0a517d3b6f languageName: node linkType: hard @@ -12044,15 +11926,6 @@ __metadata: languageName: node linkType: hard -"qs@npm:6.13.0": - version: 6.13.0 - resolution: "qs@npm:6.13.0" - dependencies: - side-channel: ^1.0.6 - checksum: e9404dc0fc2849245107108ce9ec2766cde3be1b271de0bf1021d049dc5b98d1a2901e67b431ac5509f865420a7ed80b7acb3980099fe1c118a1c5d2e1432ad8 - languageName: node - linkType: hard - "querystringify@npm:^2.1.1": version: 2.2.0 resolution: "querystringify@npm:2.2.0" @@ -12184,11 +12057,11 @@ __metadata: dependencies: "@mdx-js/react": ^3.0.1 "@mdx-js/rollup": ^3.0.1 - "@microsoft/applicationinsights-react-js": ^17.3.2 - "@microsoft/applicationinsights-web": ^3.3.2 + "@microsoft/applicationinsights-react-js": ^17.3.1 + "@microsoft/applicationinsights-web": ^3.3.1 "@okta/okta-react": ^6.9.0 - "@okta/okta-signin-widget": ^7.23.0 - "@playwright/test": ^1.47.0 + "@okta/okta-signin-widget": ^7.21.2 + "@playwright/test": ^1.46.1 "@rest-hooks/rest": ^3.0.3 "@rest-hooks/test": ^7.3.1 "@storybook/addon-a11y": ^8.2.9 @@ -12204,13 +12077,13 @@ __metadata: "@storybook/react-vite": ^8.2.9 "@storybook/testing-library": ^0.2.2 "@storybook/theming": ^8.2.9 - "@tanstack/react-query": ^5.55.4 - "@tanstack/react-query-devtools": ^5.55.4 + "@tanstack/react-query": ^5.51.23 + "@tanstack/react-query-devtools": ^5.51.23 "@testing-library/dom": ^10.4.0 - "@testing-library/jest-dom": ^6.5.0 - "@testing-library/react": ^16.0.1 + "@testing-library/jest-dom": ^6.4.8 + "@testing-library/react": ^16.0.0 "@testing-library/user-event": ^14.5.2 - "@trussworks/react-uswds": ^9.1.0 + "@trussworks/react-uswds": ^9.0.0 "@types/dompurify": ^3.0.5 "@types/dotenv-flow": ^3.3.3 "@types/downloadjs": ^1.4.6 @@ -12219,19 +12092,19 @@ __metadata: "@types/lodash": ^4.17.7 "@types/mdx": ^2.0.13 "@types/node": ^20.12.5 - "@types/react": 18.3.5 + "@types/react": 18.3.3 "@types/react-dom": ^18.3.0 "@types/react-router-dom": ^5.3.3 "@types/react-scroll-sync": ^0.9.0 - "@types/sanitize-html": ^2.13.0 + "@types/sanitize-html": ^2.11.0 "@typescript-eslint/eslint-plugin": ^7.17.0 "@typescript-eslint/parser": ^7.17.0 "@uswds/uswds": 3.7.1 "@vitejs/plugin-react": ^4.3.1 - "@vitest/coverage-istanbul": ^2.0.5 - "@vitest/ui": ^2.0.5 + "@vitest/coverage-istanbul": ^2.0.4 + "@vitest/ui": ^2.0.4 autoprefixer: ^10.4.20 - axios: ^1.7.7 + axios: ^1.7.5 browserslist: ^4.23.3 browserslist-useragent-regexp: ^4.1.3 chromatic: ^11.7.1 @@ -12260,8 +12133,8 @@ __metadata: history: ^5.3.0 html-to-text: ^9.0.5 husky: ^9.1.5 - jsdom: ^25.0.0 - lint-staged: ^15.2.10 + jsdom: ^24.1.1 + lint-staged: ^15.2.9 lodash: ^4.17.21 mockdate: ^3.0.5 msw: ^2.3.5 @@ -12269,7 +12142,7 @@ __metadata: npm-run-all: ^4.1.5 otpauth: ^9.3.2 patch-package: ^8.0.0 - postcss: ^8.4.45 + postcss: ^8.4.41 prettier: ^3.3.3 react: ^18.3.1 react-dom: ^18.3.1 @@ -12279,8 +12152,8 @@ __metadata: react-loader-spinner: ^6.1.6 react-markdown: ^9.0.1 react-query-kit: ^3.3.0 - react-router: ^6.26.1 - react-router-dom: ^6.26.1 + react-router: ^6.25.1 + react-router-dom: ^6.25.1 react-scroll-sync: ^0.11.2 react-toastify: ^10.0.5 rehype-raw: ^7.0.0 @@ -12290,20 +12163,20 @@ __metadata: remark-mdx-toc: ^0.3.1 rest-hooks: ^6.1.7 sanitize-html: ^2.13.0 - sass: ^1.78.0 + sass: ^1.77.8 storybook: ^8.2.9 storybook-addon-remix-react-router: ^3.0.0 ts-node: ^10.9.2 tslib: ^2.6.3 - tsx: ^4.19.0 + tsx: ^4.17.0 typescript: ^5.5.4 undici: ^6.19.8 use-deep-compare-effect: ^1.8.1 uuid: ^10.0.0 - vite: ^5.4.3 - vite-plugin-checker: ^0.8.0 + vite: ^5.3.4 + vite-plugin-checker: ^0.7.2 vite-plugin-svgr: ^4.2.0 - vitest: ^2.0.5 + vitest: ^2.0.4 web-vitals: ^3.4.0 languageName: unknown linkType: soft @@ -12421,27 +12294,27 @@ __metadata: languageName: node linkType: hard -"react-router-dom@npm:^6.26.1": - version: 6.26.1 - resolution: "react-router-dom@npm:6.26.1" +"react-router-dom@npm:^6.25.1": + version: 6.25.1 + resolution: "react-router-dom@npm:6.25.1" dependencies: - "@remix-run/router": 1.19.1 - react-router: 6.26.1 + "@remix-run/router": 1.18.0 + react-router: 6.25.1 peerDependencies: react: ">=16.8" react-dom: ">=16.8" - checksum: e393ab62e3239585d44d598e6bc8cc138ac8353f3dc46262680c6ad83dea35773662ada2f1c353921a05c37d1f369c0a2cb097848a6210689e9b6076550c7de0 + checksum: fac768bc02cc0f39f5c1f022c8e7323ce9ffcc9b8e80456b51a70ff765854444cb4e6cdbf7d4132064a8fcbeeabeb82b8802614fbe66d8cbe7408e23ee33d789 languageName: node linkType: hard -"react-router@npm:6.26.1, react-router@npm:^6.26.1": - version: 6.26.1 - resolution: "react-router@npm:6.26.1" +"react-router@npm:6.25.1, react-router@npm:^6.25.1": + version: 6.25.1 + resolution: "react-router@npm:6.25.1" dependencies: - "@remix-run/router": 1.19.1 + "@remix-run/router": 1.18.0 peerDependencies: react: ">=16.8" - checksum: 810949febc1bf2a6f8dd65f4c0532a2413d0532df462b3e78891aec81dca5a088d387b32c9922cde52bd9770f32263590993cab2383c94ddc1cdb50a20fd7adc + checksum: 2abbab5ecc5d1210f70980571326fd1956da3898b78bfcce6229e346e658dd42ec75bea1caea6aa45607ef677e442f3241dc3fb839293f276fa4bd466870aadd languageName: node linkType: hard @@ -13002,69 +12875,6 @@ __metadata: languageName: node linkType: hard -"rollup@npm:^4.20.0": - version: 4.21.2 - resolution: "rollup@npm:4.21.2" - dependencies: - "@rollup/rollup-android-arm-eabi": 4.21.2 - "@rollup/rollup-android-arm64": 4.21.2 - "@rollup/rollup-darwin-arm64": 4.21.2 - "@rollup/rollup-darwin-x64": 4.21.2 - "@rollup/rollup-linux-arm-gnueabihf": 4.21.2 - "@rollup/rollup-linux-arm-musleabihf": 4.21.2 - "@rollup/rollup-linux-arm64-gnu": 4.21.2 - "@rollup/rollup-linux-arm64-musl": 4.21.2 - "@rollup/rollup-linux-powerpc64le-gnu": 4.21.2 - "@rollup/rollup-linux-riscv64-gnu": 4.21.2 - "@rollup/rollup-linux-s390x-gnu": 4.21.2 - "@rollup/rollup-linux-x64-gnu": 4.21.2 - "@rollup/rollup-linux-x64-musl": 4.21.2 - "@rollup/rollup-win32-arm64-msvc": 4.21.2 - "@rollup/rollup-win32-ia32-msvc": 4.21.2 - "@rollup/rollup-win32-x64-msvc": 4.21.2 - "@types/estree": 1.0.5 - fsevents: ~2.3.2 - dependenciesMeta: - "@rollup/rollup-android-arm-eabi": - optional: true - "@rollup/rollup-android-arm64": - optional: true - "@rollup/rollup-darwin-arm64": - optional: true - "@rollup/rollup-darwin-x64": - optional: true - "@rollup/rollup-linux-arm-gnueabihf": - optional: true - "@rollup/rollup-linux-arm-musleabihf": - optional: true - "@rollup/rollup-linux-arm64-gnu": - optional: true - "@rollup/rollup-linux-arm64-musl": - optional: true - "@rollup/rollup-linux-powerpc64le-gnu": - optional: true - "@rollup/rollup-linux-riscv64-gnu": - optional: true - "@rollup/rollup-linux-s390x-gnu": - optional: true - "@rollup/rollup-linux-x64-gnu": - optional: true - "@rollup/rollup-linux-x64-musl": - optional: true - "@rollup/rollup-win32-arm64-msvc": - optional: true - "@rollup/rollup-win32-ia32-msvc": - optional: true - "@rollup/rollup-win32-x64-msvc": - optional: true - fsevents: - optional: true - bin: - rollup: dist/bin/rollup - checksum: ac83ca15495dd00d6b910e87e7f5f2c480d36977471ec11e3d207089e0aa207d34fc9bd0270f7804b268a7f7473d3bc6b65bccf474fbd1d1826a70bde2741894 - languageName: node - linkType: hard - "rrweb-cssom@npm:^0.6.0": version: 0.6.0 resolution: "rrweb-cssom@npm:0.6.0" @@ -13146,16 +12956,16 @@ __metadata: languageName: node linkType: hard -"sass@npm:^1.78.0": - version: 1.78.0 - resolution: "sass@npm:1.78.0" +"sass@npm:^1.77.8": + version: 1.77.8 + resolution: "sass@npm:1.77.8" dependencies: chokidar: ">=3.0.0 <4.0.0" immutable: ^4.0.0 source-map-js: ">=0.6.2 <2.0.0" bin: sass: sass.js - checksum: ea856bd224c85d831a5800195750c2dd008d101771d071dbaca886c47fe4f131c30c328755d7a974ad944ba5b3aafa7a9f6010952da306436dcebddb41580e1c + checksum: 6b5dce17faa1bd1e349b4825bf7f76559a32f3f95d789cd2847623c88ee9635e1485d3458532a05fa5b9134cfbce79a4bad3f13dc63c2433632347674db0abae languageName: node linkType: hard @@ -13243,36 +13053,15 @@ __metadata: languageName: node linkType: hard -"send@npm:0.19.0": - version: 0.19.0 - resolution: "send@npm:0.19.0" - dependencies: - debug: 2.6.9 - depd: 2.0.0 - destroy: 1.2.0 - encodeurl: ~1.0.2 - escape-html: ~1.0.3 - etag: ~1.8.1 - fresh: 0.5.2 - http-errors: 2.0.0 - mime: 1.6.0 - ms: 2.1.3 - on-finished: 2.4.1 - range-parser: ~1.2.1 - statuses: 2.0.1 - checksum: 5ae11bd900c1c2575525e2aa622e856804e2f96a09281ec1e39610d089f53aa69e13fd8db84b52f001d0318cf4bb0b3b904ad532fc4c0014eb90d32db0cff55f - languageName: node - linkType: hard - -"serve-static@npm:1.16.0": - version: 1.16.0 - resolution: "serve-static@npm:1.16.0" +"serve-static@npm:1.15.0": + version: 1.15.0 + resolution: "serve-static@npm:1.15.0" dependencies: encodeurl: ~1.0.2 escape-html: ~1.0.3 parseurl: ~1.3.3 send: 0.18.0 - checksum: a479dfe7e9fa7e8cb3ceccb0d944a3c72bb8f88d78472e30989f58fe15a92cfc909ab05a5c7cda2d1a6aa2663ab503ad1e2f40653740346e53e72b3ba41b6951 + checksum: af57fc13be40d90a12562e98c0b7855cf6e8bd4c107fe9a45c212bf023058d54a1871b1c89511c3958f70626fff47faeb795f5d83f8cf88514dbaeb2b724464d languageName: node linkType: hard @@ -14301,9 +14090,9 @@ __metadata: languageName: node linkType: hard -"tsx@npm:^4.19.0": - version: 4.19.0 - resolution: "tsx@npm:4.19.0" +"tsx@npm:^4.17.0": + version: 4.17.0 + resolution: "tsx@npm:4.17.0" dependencies: esbuild: ~0.23.0 fsevents: ~2.3.3 @@ -14313,7 +14102,7 @@ __metadata: optional: true bin: tsx: dist/cli.mjs - checksum: 950e502265d3af1d3a95dc155ecba6bc4feaf0ec38fd5e94777c5e090b5d5ac47eda7c93f8cb97c31782b65a6ff889a851dd07340f4f0e9de45259a5d7592ff3 + checksum: 36fb12cef74b177d11601f04aa1b768e7ce74ad0c4d8983a6050c6e19657a30362b07ac84ac5796fd1923b51904e801b42d26768a563a6139b310f8ffb0f08b1 languageName: node linkType: hard @@ -14928,9 +14717,9 @@ __metadata: languageName: node linkType: hard -"vite-node@npm:2.0.5": - version: 2.0.5 - resolution: "vite-node@npm:2.0.5" +"vite-node@npm:2.0.4": + version: 2.0.4 + resolution: "vite-node@npm:2.0.4" dependencies: cac: ^6.7.14 debug: ^4.3.5 @@ -14939,13 +14728,13 @@ __metadata: vite: ^5.0.0 bin: vite-node: vite-node.mjs - checksum: 30071f1cd3d3b78fd52726d66d18d81b63b321dee70d03c259db959a72f46dce2d71f12a85eaf503497f562ce11fea51197a74888d5892d3c7f3ad0ef093ec25 + checksum: 1e40f2a6eb977fdb77a56b4cb71de0c329b9214bff9db2bedca6186626d70a70e2f3878acad3311e28d718b97e804de3e6795aab846bcb74ea66d4cba5ff48cd languageName: node linkType: hard -"vite-plugin-checker@npm:^0.8.0": - version: 0.8.0 - resolution: "vite-plugin-checker@npm:0.8.0" +"vite-plugin-checker@npm:^0.7.2": + version: 0.7.2 + resolution: "vite-plugin-checker@npm:0.7.2" dependencies: "@babel/code-frame": ^7.12.13 ansi-escapes: ^4.3.0 @@ -14971,7 +14760,7 @@ __metadata: vite: ">=2.0.0" vls: "*" vti: "*" - vue-tsc: ~2.1.6 + vue-tsc: ">=2.0.0" peerDependenciesMeta: "@biomejs/biome": optional: true @@ -14991,7 +14780,7 @@ __metadata: optional: true vue-tsc: optional: true - checksum: f7a21be71256efe4e835a3945760e2ac220d5f8f3353b7df10fe02396d2e92a0e15226816843748b9fb1f5aca3ed1d588eba1070de08dee57e43fec4e3ceb8ae + checksum: 91e15bfa9d259cb69cca0590e45e3fc36214918634ec3f5fc413f30277b0b2e9f08a60009d7d1a8e01562f23b0c4a2cb34aedccf9453270c4e4599afd6fa036a languageName: node linkType: hard @@ -15048,20 +14837,19 @@ __metadata: languageName: node linkType: hard -"vite@npm:^5.4.3": - version: 5.4.3 - resolution: "vite@npm:5.4.3" +"vite@npm:^5.3.4": + version: 5.3.4 + resolution: "vite@npm:5.3.4" dependencies: esbuild: ^0.21.3 fsevents: ~2.3.3 - postcss: ^8.4.43 - rollup: ^4.20.0 + postcss: ^8.4.39 + rollup: ^4.13.0 peerDependencies: "@types/node": ^18.0.0 || >=20.0.0 less: "*" lightningcss: ^1.21.0 sass: "*" - sass-embedded: "*" stylus: "*" sugarss: "*" terser: ^5.4.0 @@ -15077,8 +14865,6 @@ __metadata: optional: true sass: optional: true - sass-embedded: - optional: true stylus: optional: true sugarss: @@ -15087,21 +14873,21 @@ __metadata: optional: true bin: vite: bin/vite.js - checksum: 3a28bcb09345030d2dba41b93b6b8a3aac8f19a9336c50e7e5f5e30931fbb16193cdd97814c5c0d1b5ade3b3e763b329eb881ea5cfe6e422c669d21a304f3295 + checksum: 2dfbab98daf91b86b3d3e535add1d6a982f7087df62f8f4bc219f3ae91a97f38c04683a32ba2457618e804fa93380090ddda5b0c9823a94bdcb53d6044b04732 languageName: node linkType: hard -"vitest@npm:^2.0.5": - version: 2.0.5 - resolution: "vitest@npm:2.0.5" +"vitest@npm:^2.0.4": + version: 2.0.4 + resolution: "vitest@npm:2.0.4" dependencies: "@ampproject/remapping": ^2.3.0 - "@vitest/expect": 2.0.5 - "@vitest/pretty-format": ^2.0.5 - "@vitest/runner": 2.0.5 - "@vitest/snapshot": 2.0.5 - "@vitest/spy": 2.0.5 - "@vitest/utils": 2.0.5 + "@vitest/expect": 2.0.4 + "@vitest/pretty-format": ^2.0.4 + "@vitest/runner": 2.0.4 + "@vitest/snapshot": 2.0.4 + "@vitest/spy": 2.0.4 + "@vitest/utils": 2.0.4 chai: ^5.1.1 debug: ^4.3.5 execa: ^8.0.1 @@ -15112,13 +14898,13 @@ __metadata: tinypool: ^1.0.0 tinyrainbow: ^1.2.0 vite: ^5.0.0 - vite-node: 2.0.5 + vite-node: 2.0.4 why-is-node-running: ^2.3.0 peerDependencies: "@edge-runtime/vm": "*" "@types/node": ^18.0.0 || >=20.0.0 - "@vitest/browser": 2.0.5 - "@vitest/ui": 2.0.5 + "@vitest/browser": 2.0.4 + "@vitest/ui": 2.0.4 happy-dom: "*" jsdom: "*" peerDependenciesMeta: @@ -15136,7 +14922,7 @@ __metadata: optional: true bin: vitest: vitest.mjs - checksum: 4709e7678d89f957d9bd8e4dd2f99734857df03e22d38d9c3986a75f608205572b73c2faaf059ed41a2dccbc5c65f6717bf66594d6459cf2e57ab175be9aebc1 + checksum: d00015d1518e297283fc939dc2d30e95258bda65cae9146e82380c87ac0cafd8bb892882516a4940d628afc835fc20e55c8be30f30c8bcaba93e20568dbb3744 languageName: node linkType: hard diff --git a/prime-router/build.gradle.kts b/prime-router/build.gradle.kts index 90a5971f314..f470edb4efa 100644 --- a/prime-router/build.gradle.kts +++ b/prime-router/build.gradle.kts @@ -23,9 +23,7 @@ import org.apache.commons.io.FilenameUtils import org.apache.tools.ant.filters.ReplaceTokens import org.jetbrains.kotlin.gradle.tasks.KotlinCompile import org.jooq.meta.jaxb.ForcedType -import java.io.ByteArrayOutputStream import java.io.FileInputStream -import java.nio.charset.StandardCharsets import java.time.LocalDateTime import java.time.format.DateTimeFormatter import java.util.Properties @@ -101,8 +99,7 @@ val reportsApiEndpointHost = ( val devAzureConnectString = "DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;AccountKey=" + "Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;BlobEndpoint=" + - "http://localhost:10000/devstoreaccount1;QueueEndpoint=http://localhost:10001/devstoreaccount1;" + - "TableEndpoint=http://127.0.0.1:10002/devstoreaccount1;" + "http://localhost:10000/devstoreaccount1;QueueEndpoint=http://localhost:10001/devstoreaccount1;" val env = mutableMapOf( "AzureWebJobsStorage" to devAzureConnectString, @@ -500,22 +497,9 @@ tasks.azureFunctionsPackage { finalizedBy("copyAzureScripts") } -tasks.register("generateVersionFile") { - doLast { - val stdout = ByteArrayOutputStream() - exec { - commandLine("git", "rev-parse", "--short", "HEAD") - standardOutput = stdout - } - val currentCommit = stdout.toString(StandardCharsets.UTF_8).trim() - File(buildDir, "$azureFunctionsDir/$azureAppName/version.json").writeText("{\"commitId\": \"$currentCommit\"}") - } -} - val azureResourcesTmpDir = File(buildDir, "$azureFunctionsDir-resources/$azureAppName") val azureResourcesFinalDir = File(buildDir, "$azureFunctionsDir/$azureAppName") tasks.register("gatherAzureResources") { - dependsOn("generateVersionFile") from("./") into(azureResourcesTmpDir) include("metadata/**/*.yml") diff --git a/prime-router/docs/api/reports.yml b/prime-router/docs/api/reports.yml index 2a860227aa8..e3475f53e21 100644 --- a/prime-router/docs/api/reports.yml +++ b/prime-router/docs/api/reports.yml @@ -118,36 +118,6 @@ paths: $ref: '#/components/schemas/Report' '500': description: Internal Server Error - /reports/download: - get: - summary: Downloads a message based on the report id - security: - - OAuth2: [ system_admin ] - parameters: - - in: query - name: reportId - description: The report id to look for to download. - schema: - type: string - required: true - example: e491f4fb-f2c5-4473-8db2-206ea04991e8 - - in: query - name: removePII - description: Boolean that determines if PII will be removed from the message. If missing will default to true. - Required to be true if prod env. - required: false - schema: - type: boolean - example: true - responses: - '200': - description: OK - content: - application/json: - schema: - $ref: '#/components/schemas/Report' - '500': - description: Internal Server Error # Building components: schemas: diff --git a/prime-router/docs/docs-deprecated/getting-started/Using-an-apple-silicon-mac.md b/prime-router/docs/docs-deprecated/getting-started/Using-an-apple-silicon-mac.md index 4b839860dfd..448d9454a2e 100644 --- a/prime-router/docs/docs-deprecated/getting-started/Using-an-apple-silicon-mac.md +++ b/prime-router/docs/docs-deprecated/getting-started/Using-an-apple-silicon-mac.md @@ -59,8 +59,8 @@ Here's a list of environment variables that are used at the time of writing this CREDENTIAL_STORAGE_METHOD=HASHICORP_VAULT VAULT_TOKEN= VAULT_API_ADDR=http://localhost:8200 -AzureWebJobsStorage="DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;AccountKey=;BlobEndpoint=http://localhost:10000/devstoreaccount1;QueueEndpoint=http://localhost:10001/devstoreaccount1;TableEndpoint=http://127.0.0.1:10002/devstoreaccount1;" -PartnerStorage="DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;AccountKey=;BlobEndpoint=http://localhost:10000/devstoreaccount1;QueueEndpoint=http://localhost:10001/devstoreaccount1;TableEndpoint=http://127.0.0.1:10002/devstoreaccount1;" +AzureWebJobsStorage="DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;AccountKey=;BlobEndpoint=http://localhost:10000/devstoreaccount1;QueueEndpoint=http://localhost:10001/devstoreaccount1;" +PartnerStorage="DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;AccountKey=;BlobEndpoint=http://localhost:10000/devstoreaccount1;QueueEndpoint=http://localhost:10001/devstoreaccount1;" POSTGRES_USER=prime POSTGRES_PASSWORD=changeIT! POSTGRES_URL=jdbc:postgresql://localhost:5432/prime_data_hub diff --git a/prime-router/docs/onboarding-users/fhir-to-hl7-transforms.md b/prime-router/docs/onboarding-users/fhir-to-hl7-transforms.md deleted file mode 100644 index 9d22507f9ef..00000000000 --- a/prime-router/docs/onboarding-users/fhir-to-hl7-transforms.md +++ /dev/null @@ -1,180 +0,0 @@ -This file documents the types of transforms currently being used by Engagement. This document does not recommend any particular method of acheiving the needed transformations or purport to show best practices. This is simply to document how things have been accomplished so far. - -## Types of FHIR->HL7 transforms currently used - -Default value in field - Default a static value into a single field or subfield -```yaml - - name: ak-receiving-application - value: [ '"AKDOH"' ] - hl7Spec: [ 'MSH-5-1' ] -``` - -Replace value in single field/subfield with empty string -```yaml - - name: ak-ordering-provider-id-number - value: [ '""' ] - hl7Spec: [ '/PATIENT_RESULT/ORDER_OBSERVATION/OBR-16-1' ] -``` - -Replace value in multiple fields/subfields with empty string -```yaml - - name: remove-hl7-fields - value: [ '""' ] - hl7Spec: [ 'MSH-19-1' , 'MSH-19-2' , 'MSH-19-3' , '%{ORC}-2-1' , '%{ORC}-2-2' , '%{ORC}-2-3' , '%{ORC}-2-4' , '%{ORC}-4-1' , '%{ORC}-4-2' , '%{ORC}-4-3' , '%{ORC}-4-4' , '%{OBR}-2-1' , '%{OBR}-2-2' , '%{OBR}-2-3' , '%{OBR}-2-4' ] -``` - -Modify value - Change the format of a value in a single field or subfield -```yaml -- name: obx-value-dtm-dt - condition: '%context.extension(%`rsext-obx-observation`).extension.where(url = "OBX.2").value = "DT"' - value: [ '%resource.value.extension(%`rsext-hl7v2-date-time`).value.toString().replace("-","")' ] - hl7Spec: [ '%{hl7OBXField}-5' ] -``` - -Modify value based on valueset - Correlate a set of values to another set of values -```yaml - - name: ak-patient-ethnicity-identifier-code - value: - - 'Bundle.entry.resource.ofType(Patient).extension(%`rsext-ethnic-group`).value.coding[0].code' - hl7Spec: [ '/PATIENT_RESULT/PATIENT/PID-22-1' ] - valueSet: - values: - H: 2135-2 - N: 2186-5 -``` - -Use customFhirFunction to correlate FHir valuesets with HL7 valuesets -```yaml - - name: ak-patient-race-coding-system - resource: 'Bundle.entry.resource.ofType(Patient).extension("http://ibm.com/fhir/cdm/StructureDefinition/local-race-cd").value.coding' - condition: '%resource.code.exists()' - value: [ '%resource.system.getCodingSystemMapping()' ] - hl7Spec: [ '/PATIENT_RESULT/PATIENT/PID-10-3' ] -``` - -Override base mappings to prevent certain segments/fields from being mapped to outbound HL7 -```yaml - - name: obx-equipment-instance-identifier - condition: 'false' -``` - -Override base mappings to prevent a field in specific datatype from being mapped to outbound hl7 -```yaml - - name: xtn-extension-value - resource: '%resource.extension(%`rsext-xtn-contact-point`)' - schema: classpath:/metadata/hl7_mapping/receivers/Common/remove-xtn-1/XTNExtension.yml -``` -```yaml -elements: - - - name: xtn-2-telecom-use-code - value: [ '%resource.extension("XTN.2").value' ] - hl7Spec: [ '%{hl7TelecomPath}-2' ] - - - name: xtn-3-telecom-equipment-type - value: [ '%resource.extension("XTN.3").value' ] - hl7Spec: [ '%{hl7TelecomPath}-3' ] - - - name: xtn-4-communication-address - value: [ '%resource.extension("XTN.4").value' ] - hl7Spec: [ '%{hl7TelecomPath}-4' ] - - - name: xtn-7-local-number - value: [ '%resource.extension("XTN.7").value' ] - hl7Spec: [ '%{hl7TelecomPath}-7' ] - - - name: xtn-9-any-text - value: [ '%resource.extension("XTN.9").value' ] - hl7Spec: [ '%{hl7TelecomPath}-9' ] - - - name: xtn-12-unformatted-telephone-number - value: [ '%resource.extension("XTN.12").value' ] - hl7Spec: [ '%{hl7TelecomPath}-12' ] -``` - -Override base mappings to create segments/fields in a specific format/ordering -```yaml - - name: ca-order-observations - resource: 'Bundle.entry.resource.ofType(DiagnosticReport)' - condition: '%resource.count() > 0' - schema: classpath:/metadata/hl7_mapping/receivers/STLTs/CA/ca-order-observation.yml - resourceIndex: orderIndex -``` -```yaml -constants: - hl7Order: '/PATIENT_RESULT/ORDER_OBSERVATION(%{orderIndex})' - diagnostic: 'Bundle.entry.resource.ofType(DiagnosticReport)[%orderIndex]' - service: 'Bundle.entry.resource.ofType(DiagnosticReport)[%orderIndex].basedOn.resolve()' - specimen: 'Bundle.entry.resource.ofType(DiagnosticReport)[%orderIndex].specimen.resolve()' -elements: - - name: ca-observation-result - resource: '%resource.result.resolve()' - schema: classpath:/metadata/hl7_mapping/receivers/STLTs/CA/ca-observation-result.yml - resourceIndex: resultIndex -``` -```yaml -constants: - hl7ObservationPath: '/PATIENT_RESULT/ORDER_OBSERVATION(%{orderIndex})/OBSERVATION(%{resultIndex})' - rsext: '"https://reportstream.cdc.gov/fhir/StructureDefinition/"' - observation: '%diagnostic.result[%resultIndex].resolve()' -elements: - - # California requirement: Move all regular notes and AOE questions between last OBX segment and SPM - # as NTE segments - # To do that we have to compare the Observation index against the Observation count - # to make sure is the last OBX segment and only add notes and AOE questions to that segment - - name: ca-order-observation-note - resource: '%diagnostic.result.resolve().note.text.split(''\n'') | %service.note.text.split(''\n'') | %service.supportingInfo.resolve()' - condition: >- - (Bundle.entry.resource.ofType(Observation).note.exists() or %service.note.exists() or %service.supportingInfo.exists()) - and (%diagnostic.result.count() - 1) = %resultIndex - schema: classpath:/metadata/hl7_mapping/receivers/STLTs/CA/ca-order-note.yml - resourceIndex: noteIndex - constants: - hl7NotePath: '%{hl7ObservationPath}' -``` -```yaml -elements: - - name: aoe-note - condition: '%resource is Observation' - schema: classpath:/metadata/hl7_mapping/receivers/STLTs/CA/ca-aoe-note.yml - - - name: note - condition: '%resource is string' - schema: classpath:/metadata/hl7_mapping/datatypes/annotation/NTE.yml - constants: - noteDetails: '%resource.note' -``` -```yaml -constants: - caAoeNteFieldPath: '%{hl7NotePath}/NTE(%{noteIndex})' - commentCondition: '%resource.code.coding.code.exists() and %resource.code.text.exists()' -elements: - - name: aoe-note-id - value: [ '%noteIndex + 1' ] - hl7Spec: [ '%{caAoeNteFieldPath}-1' ] - - - name: aoe-note-source - value: - - '"L"' - hl7Spec: [ '%{caAoeNteFieldPath}-2' ] - - - name: aoe-note-comment-datetime - condition: '%resource.value.exists() and %resource.value is dateTime and %commentCondition' - value: [ '%resource.code.coding.code + " " + %resource.code.text + ": " + %resource.value.toString()' ] - hl7Spec: [ '%{caAoeNteFieldPath}-3' ] - - - name: aoe-note-comment-string - condition: '%resource.value.exists() and %resource.value is string and %commentCondition' - value: [ '%resource.code.coding.code + " " + %resource.code.text + ": " + %resource.value' ] - hl7Spec: [ '%{caAoeNteFieldPath}-3' ] - - - name: aoe-note-comment-cwe - condition: '%resource.value.exists() and %resource.value is CodeableConcept and %commentCondition' - value: [ '%resource.code.coding.code - + " " + %resource.code.text - + ": " + %resource.value.coding.display - + " " + %resource.value.coding.code - + " " + %resource.value.coding.system.getCodingSystemMapping()' ] - hl7Spec: [ '%{caAoeNteFieldPath}-3' ] -``` diff --git a/prime-router/docs/standard-operating-procedures/adding-conformance-profile.md b/prime-router/docs/standard-operating-procedures/adding-conformance-profile.md index 8198868c336..6e5744e5d11 100644 --- a/prime-router/docs/standard-operating-procedures/adding-conformance-profile.md +++ b/prime-router/docs/standard-operating-procedures/adding-conformance-profile.md @@ -107,7 +107,7 @@ v251. That presents the opportunity for reuse. 1. Review existing data type mappings located in `prime-router/metadata/HL7/datatypes/` for reuse 2. Add folder to `prime-router/metadata/HL7/` with a name indicating the new conformance profile -3. Copy folder `fhir` from `prime-router/metadata/HL7/catchall` and add to your new mapping folder. +3. Copy folder `fhir` from `prime-router/metadata/HL7/v251-elr` and add to your new mapping folder. 4. Create folder `hl7` in your new mapping folder with the following sub-folders: - "message" - **required** - within that, add a yml file named with the HL7 message type (ex ORU_R01, ORM_O01, ADT_A01, etc.) diff --git a/prime-router/docs/universal-pipeline/README.md b/prime-router/docs/universal-pipeline/README.md index f854ccff2d4..2a8e775e2dd 100644 --- a/prime-router/docs/universal-pipeline/README.md +++ b/prime-router/docs/universal-pipeline/README.md @@ -104,8 +104,8 @@ In the Convert case above, `messagesToSend` is a list of `FHIRConvertMessage` ob messagesToSend.add( FhirConvertMessage( report.id, - blobInfo.blobUrl, - BlobUtils.digestToString(blobInfo.digest), + blobInfo.blobUrl, + BlobAccess.digestToString(blobInfo.digest), message.blobSubFolderName, message.topic ) diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/CE/CodeableConcept.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/CE/CodeableConcept.yml new file mode 100644 index 00000000000..36421f3188a --- /dev/null +++ b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/CE/CodeableConcept.yml @@ -0,0 +1,112 @@ +# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +coding: + generateList: true + expressionType: nested + vars: + code: String, CE.1 + display: String, CE.2 + system: SYSTEM_URL, CE.3 + expressionsMap: + code: + type: String + expressionType: HL7Spec + valueOf: CE.1 + display: + type: String + expressionType: HL7Spec + valueOf: CE.2 + system: + type: SYSTEM_URL + expressionType: HL7Spec + valueOf: CE.3 + extension_ce-coding: + generateList: true + condition: $code NOT_NULL || $display NOT_NULL || $system NOT_NULL + expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: ce-coding + valueString: + value: coding + extension_ce-coding-system: + condition: $coding-system NOT_NULL + generateList: true + expressionType: nested + vars: + coding-system: String, CE.3 + expressionsMap: + url: + type: SYSTEM_URL + value: ce-coding-system + valueString: + value: $coding-system + +coding_alt: + generateList: true + expressionType: nested + vars: + altCode: String, CE.4 + altDisplay: String, CE.5 + altSystem: SYSTEM_URL, CE.6 + expressionsMap: + code: + type: String + expressionType: HL7Spec + valueOf: CE.4 + display: + type: String + expressionType: HL7Spec + valueOf: CE.5 + system: + type: SYSTEM_URL + expressionType: HL7Spec + valueOf: CE.6 + extension_ce-coding: + condition: $altCode NOT_NULL || $altDisplay NOT_NULL || $altSystem NOT_NULL + generateList: true + expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: ce-coding + valueString: + value: alt-coding + extension_ce-coding-system: + condition: $coding-system NOT_NULL + generateList: true + expressionType: nested + vars: + coding-system: String, CE.6 + expressionsMap: + url: + type: SYSTEM_URL + value: ce-coding-system + valueString: + value: $coding-system + +extension: + generateList: true + expressionType: nested + expressions: + - generateList: true + expressionType: nested + condition: $hl7v2Field NOT_NULL + expressionsMap: + url: + type: SYSTEM_URL + value: hl7v2Field + valueString: + type: STRING + valueOf: $hl7v2Field + - generateList: true + expressionType: nested + condition: $hl7v2Component NOT_NULL + expressionsMap: + url: + type: SYSTEM_URL + value: hl7v2Component + valueString: + type: STRING + valueOf: $hl7v2Component \ No newline at end of file diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/CNE/CodeableConcept.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/CNE/CodeableConcept.yml new file mode 100644 index 00000000000..1250b162be6 --- /dev/null +++ b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/CNE/CodeableConcept.yml @@ -0,0 +1,175 @@ +# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +coding: + generateList: true + expressionType: nested + vars: + code: String, CNE.1 + display: String, CNE.2 + system: SYSTEM_URL, CNE.3 + version: String, CNE.7 + expressionsMap: + code: + type: String + expressionType: HL7Spec + valueOf: CNE.1 + display: + type: String + expressionType: HL7Spec + valueOf: CNE.2 + system: + type: SYSTEM_URL + expressionType: HL7Spec + valueOf: CNE.3 + version: + type: String + expressionType: HL7Spec + valueOf: CNE.7 + extension_CNE-coding: + condition: $code NOT_NULL || $display NOT_NULL || $system NOT_NULL || $version NOT_NULL + generateList: true + expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: CNE-coding + valueString: + value: coding + extension_CNE-coding-system: + condition: $coding-system NOT_NULL + generateList: true + expressionType: nested + vars: + coding-system: String, CNE.3 + expressionsMap: + url: + type: SYSTEM_URL + value: CNE-coding-system + valueString: + value: $coding-system + +coding_alt: + generateList: true + expressionType: nested + vars: + altCode: String, CNE.4 + altDisplay: String, CNE.5 + altSystem: SYSTEM_URL, CNE.6 + altVersion: String, CNE.8 + expressionsMap: + code: + type: String + expressionType: HL7Spec + valueOf: CNE.4 + display: + type: String + expressionType: HL7Spec + valueOf: CNE.5 + system: + type: SYSTEM_URL + expressionType: HL7Spec + valueOf: CNE.6 + version: + type: String + expressionType: HL7Spec + valueOf: CNE.8 + extension_CNE-coding: + condition: $altCode NOT_NULL || $altDisplay NOT_NULL || $altSystem NOT_NULL || $altVersion NOT_NULL + generateList: true + expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: CNE-coding + valueString: + value: alt-coding + extension_CNE-coding-system: + condition: $coding-system NOT_NULL + generateList: true + expressionType: nested + vars: + coding-system: String, CNE.6 + expressionsMap: + url: + type: SYSTEM_URL + value: CNE-coding-system + valueString: + value: $coding-system + +coding_secondary-alt: + generateList: true + expressionType: nested + vars: + secondaryAltCode: String, CWE.10 + secondaryAltDisplay: String, CWE.11 + secondaryAltSystem: SYSTEM_URL, CWE.12 + secondaryAltVersion: String, CWE.13 + expressionsMap: + code: + type: String + expressionType: HL7Spec + valueOf: CWE.10 + display: + type: String + expressionType: HL7Spec + valueOf: CWE.11 + system: + type: SYSTEM_URL + expressionType: HL7Spec + valueOf: CWE.12 + version: + type: String + expressionType: HL7Spec + valueOf: CWE.13 + extension_cne-coding: + condition: $secondaryAltCode NOT_NULL || $secondaryAltDisplay NOT_NULL || $secondaryAltSystem NOT_NULL || $secondaryAltVersion NOT_NULL + generateList: true + expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: cne-coding + valueString: + value: secondary-alt-coding + extension_cne-coding-system: + condition: $coding-system NOT_NULL + generateList: true + expressionType: nested + vars: + coding-system: String, CWE.12 + expressionsMap: + url: + type: SYSTEM_URL + value: cne-coding-system + valueString: + value: $coding-system + +text: + type: STRING + expressionType: HL7Spec + valueOf: CNE.9 + +extension: + generateList: true + expressionType: nested + expressions: + - generateList: true + expressionType: nested + condition: $hl7v2Field NOT_NULL + expressionsMap: + url: + type: SYSTEM_URL + value: hl7v2Field + valueString: + type: STRING + valueOf: $hl7v2Field + - generateList: true + expressionType: nested + condition: $hl7v2Component NOT_NULL + expressionsMap: + url: + type: SYSTEM_URL + value: hl7v2Component + valueString: + type: STRING + valueOf: $hl7v2Component \ No newline at end of file diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/CNN/CNNExtension.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/CNN/CNNExtension.yml new file mode 100644 index 00000000000..9942d500ee9 --- /dev/null +++ b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/CNN/CNNExtension.yml @@ -0,0 +1,70 @@ +# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +url: + type: SYSTEM_URL + valueOf: cnn-practitioner + +extension: + generateList: true + expressionType: nested + expressions: + - expressionType: nested + vars: + cnn3: STRING_ALL, CNN.3 + condition: $cnn3 NOT_NULL + expressionsMap: + url: + type: STRING + valueOf: CNN.3 + valueString: + type: STRING + expressionType: HL7Spec + valueOf: CNN.3 + - expressionType: nested + vars: + cnn4: STRING_ALL, CNN.4 + condition: $cnn4 NOT_NULL + expressionsMap: + url: + type: STRING + valueOf: CNN.4 + valueString: + type: STRING + expressionType: HL7Spec + valueOf: CNN.4 + - expressionType: nested + vars: + cnn5: STRING_ALL, CNN.5 + condition: $cnn5 NOT_NULL + expressionsMap: + url: + type: STRING + valueOf: CNN.5 + valueString: + type: STRING + expressionType: HL7Spec + valueOf: CNN.5 + - expressionType: nested + vars: + cnn7: STRING_ALL, CNN.7 + condition: $cnn7 NOT_NULL + expressionsMap: + url: + type: STRING + valueOf: CNN.7 + valueString: + type: STRING + expressionType: HL7Spec + valueOf: CNN.7 + - expressionType: nested + vars: + cnn8: STRING_ALL, CNN.8 + condition: $cnn8 NOT_NULL + expressionsMap: + url: + type: STRING + valueOf: CNN.8 + valueString: + type: STRING + expressionType: HL7Spec + valueOf: CNN.8 \ No newline at end of file diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/CNN/Practitioner.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/CNN/Practitioner.yml new file mode 100644 index 00000000000..ff3e1ac127a --- /dev/null +++ b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/CNN/Practitioner.yml @@ -0,0 +1,98 @@ +# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +resourceType: Practitioner + +id: + type: STRING + valueOf: "GeneralUtils.generateResourceId()" + expressionType: JEXL + +identifier: + expressionType: nested + expressionsMap: + value: + type: STRING + valueOf: CNN.1 + expressionType: HL7Spec + extension_assigningAuthority: + generateList: true + expressionType: nested + vars: + cnn9: CNN.9 + cnn10: CNN.10 + cnn11: CNN.11 + condition: $cnn9 NOT_NULL || $cnn10 NOT_NULL || $cnn11 NOT_NULL + expressionsMap: + url: + type: SYSTEM_URL + valueOf: assigning-authority + extension: + generateList: true + expressionType: nested + expressions: + - expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + valueOf: namespace-id + valueString: + type: STRING + expressionType: HL7Spec + valueOf: CNN.9 + - expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + valueOf: universal-id + valueString: + type: STRING + expressionType: HL7Spec + valueOf: CNN.10 + - expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + valueOf: universal-id-type + valueCode: + type: STRING + expressionType: HL7Spec + valueOf: CNN.11 + +name: + expressionType: nested + expressionsMap: + family: + type: STRING + valueOf: CNN.2 + expressionType: HL7Spec + given: + generateList: true + expressionType: nested + expressions: + - expressionType: HL7Spec + valueOf: CNN.3 + type: STRING + - expressionType: HL7Spec + valueOf: CNN.4 + type: STRING + suffix: + generateList: true + expressionType: nested + expressions: + - expressionType: HL7Spec + valueOf: CNN.5 + type: STRING + - expressionType: HL7Spec + valueOf: CNN.7 + type: STRING + prefix: + type: STRING + valueOf: CNN.6 + expressionType: HL7Spec + +extension: + generateList: true + expressionType: nested + expressions: + - expressionType: resource + valueOf: datatypes/CNN/CNNExtension diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/CQ/Quantity.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/CQ/Quantity.yml new file mode 100644 index 00000000000..9237b917fb0 --- /dev/null +++ b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/CQ/Quantity.yml @@ -0,0 +1,28 @@ +# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +value: + type: BIG_DECIMAL + expressionType: HL7Spec + valueOf: CQ.1 + +unit: + expressionType: nested + expressions: + - type: STRING + expressionType: HL7Spec + valueOf: CQ.2.2 + +extension: + condition: $cq2 NOT_NULL + generateList: true + expressionType: nested + vars: + cq2: STRING_ALL, CQ.2 + expressionsMap: + url: + type: SYSTEM_URL + value: 'cq-units' + valueCodeableConcept: + valueOf: datatypes/CE/CodeableConcept + expressionType: resource + specs: CQ.2 \ No newline at end of file diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/CWE/Annotation.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/CWE/Annotation.yml new file mode 100644 index 00000000000..5738d74bbd2 --- /dev/null +++ b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/CWE/Annotation.yml @@ -0,0 +1,19 @@ +# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +text: + type: STRING_ALL + valueOf: CWE + generateList: true + expressionType: HL7Spec + +extension: + generateList: true + expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: 'cwe-annotation' + valueCodeableConcept: + valueOf: datatypes/CWE/CodeableConcept + expressionType: resource + specs: CWE \ No newline at end of file diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/CWE/CodeableConcept.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/CWE/CodeableConcept.yml new file mode 100644 index 00000000000..76dd3c2546b --- /dev/null +++ b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/CWE/CodeableConcept.yml @@ -0,0 +1,127 @@ +# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +coding: + generateList: true + expressionType: nested + vars: + code: String, CWE.1 + display: String, CWE.2 + system: SYSTEM_URL, CWE.3 + version: String, CWE.7 + expressionsMap: + code: + type: String + expressionType: HL7Spec + valueOf: CWE.1 + display: + type: String + expressionType: HL7Spec + valueOf: CWE.2 + system: + type: SYSTEM_URL + expressionType: HL7Spec + valueOf: CWE.3 + version: + type: String + expressionType: HL7Spec + valueOf: CWE.7 + extension_cwe-coding: + condition: $code NOT_NULL || $display NOT_NULL || $system NOT_NULL || $version NOT_NULL + generateList: true + expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: cwe-coding + valueString: + value: coding + extension_cwe-coding-system: + condition: $coding-system NOT_NULL + generateList: true + expressionType: nested + vars: + coding-system: String, CWE.3 + expressionsMap: + url: + type: SYSTEM_URL + value: cwe-coding-system + valueString: + value: $coding-system + +coding_alt: + generateList: true + expressionType: nested + vars: + altCode: String, CWE.4 + altDisplay: String, CWE.5 + altSystem: SYSTEM_URL, CWE.6 + altVersion: String, CWE.8 + expressionsMap: + code: + type: String + expressionType: HL7Spec + valueOf: CWE.4 + display: + type: String + expressionType: HL7Spec + valueOf: CWE.5 + system: + type: SYSTEM_URL + expressionType: HL7Spec + valueOf: CWE.6 + version: + type: String + expressionType: HL7Spec + valueOf: CWE.8 + extension_cwe-coding: + condition: $altCode NOT_NULL || $altDisplay NOT_NULL || $altSystem NOT_NULL || $altVersion NOT_NULL + generateList: true + expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: cwe-coding + valueString: + value: alt-coding + extension_cwe-coding-system: + condition: $coding-system NOT_NULL + generateList: true + expressionType: nested + vars: + coding-system: String, CWE.6 + expressionsMap: + url: + type: SYSTEM_URL + value: cwe-coding-system + valueString: + value: $coding-system + +text: + type: STRING + expressionType: HL7Spec + valueOf: CWE.9 + +extension: + generateList: true + expressionType: nested + expressions: + - generateList: true + expressionType: nested + condition: $hl7v2Field NOT_NULL + expressionsMap: + url: + type: SYSTEM_URL + value: hl7v2Field + valueString: + type: STRING + valueOf: $hl7v2Field + - generateList: true + expressionType: nested + condition: $hl7v2Component NOT_NULL + expressionsMap: + url: + type: SYSTEM_URL + value: hl7v2Component + valueString: + type: STRING + valueOf: $hl7v2Component \ No newline at end of file diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/CWE/Organization.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/CWE/Organization.yml new file mode 100644 index 00000000000..53e69b95630 --- /dev/null +++ b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/CWE/Organization.yml @@ -0,0 +1,60 @@ +# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +resourceType: Organization + +id: + type: STRING + valueOf: "GeneralUtils.generateResourceId()" + expressionType: JEXL + +identifier: + generateList: true + expressionType: nested + expressionsMap: + value: + type: STRING + expressionType: HL7Spec + valueOf: CWE.1 + system: + type: STRING + expressionType: HL7Spec + valueOf: CWE.3 + +name: + type: STRING + expressionType: HL7Spec + valueOf: CWE.2 | CWE.9 + +extension: + generateList: true + expressionType: nested + expressions: + - expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: cwe-organization + valueCodeableConcept: + expressionType: resource + valueOf: datatypes/CWE/CodeableConcept + specs: $BASE_VALUE + - generateList: true + expressionType: nested + condition: $cweOrganizationHL7Field NOT_NULL + expressionsMap: + url: + type: SYSTEM_URL + value: hl7v2Field + valueString: + type: STRING + valueOf: $cweOrganizationHL7Field + - generateList: true + expressionType: nested + condition: $cweOrganizationHL7Component NOT_NULL + expressionsMap: + url: + type: SYSTEM_URL + value: hl7v2Component + valueString: + type: STRING + valueOf: $cweOrganizationHL7Component \ No newline at end of file diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/CX/CXExtension.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/CX/CXExtension.yml new file mode 100644 index 00000000000..9eb5c811fe1 --- /dev/null +++ b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/CX/CXExtension.yml @@ -0,0 +1,46 @@ +# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +url: + type: SYSTEM_URL + value: cx-identifier + +extension: + generateList: true + expressionType: nested + expressions: + - expressionType: nested + condition: $cx5 NOT_NULL + vars: + cx5: CX.5 + expressionsMap: + url: + type: STRING + value: CX.5 + valueString: + type: STRING + valueOf: $cx5 + expressionType: HL7Spec + - expressionType: nested + vars: + cx9: STRING_ALL, CX.9 + condition: $cx9 NOT_NULL + expressionsMap: + url: + type: STRING + value: CX.9 + valueCodeableConcept: + valueOf: datatypes/CWE/CodeableConcept + expressionType: resource + specs: CX.9 + - expressionType: nested + vars: + cx10: STRING_ALL, CX.10 + condition: $cx10 NOT_NULL + expressionsMap: + url: + type: STRING + value: CX.10 + valueCodeableConcept: + valueOf: datatypes/CWE/CodeableConcept + expressionType: resource + specs: CX.10 \ No newline at end of file diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/CX/Identifier.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/CX/Identifier.yml new file mode 100644 index 00000000000..ec5604f1241 --- /dev/null +++ b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/CX/Identifier.yml @@ -0,0 +1,222 @@ +# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +resourceType: Identifier + +value: + type: STRING + valueOf: CX.1 + expressionType: HL7Spec + +# Checking if HD is an Organization or a System by looking at the ID type. +# If ID type is null or ID type is not ISO or UUID, treat as organization. +# Otherwise, treat as system. +assigner_1: + vars: + cx43: String, CX.4.3 + cx4: STRING_ALL, CX.4 + condition: $cx43 NULL && $cx4 NOT_NULL + valueOf: datatypes/HD/Organization + expressionType: reference + specs: CX.4 + +assigner_2: + vars: + cx43: String, CX.4.3 + condition: $cx43 NOT_NULL && $cx43 NOT_EQUALS ISO && $cx43 NOT_EQUALS UUID + valueOf: datatypes/HD/Organization + expressionType: reference + specs: CX.4 + +system: + vars: + cx41: String, CX.4.1 + cx42: String, CX.4.2 + cx43: String, CX.4.3 + condition: $cx43 EQUALS ISO || $cx43 EQUALS UUID + expressionType: nested + expressions: + - condition: $cx41 NOT_NULL + type: STRING + valueOf: $cx41 + - condition: $cx41 NULL && $cx43 EQUALS ISO + constants: + prefix: "urn:oid:" + vars: + systemURI: $prefix + CX.4.2 + type: STRING + valueOf: $systemURI + - condition: $cx41 NULL && $cx43 EQUALS UUID + constants: + prefix: "urn:uuid:" + vars: + systemURI: $prefix + CX.4.2 + type: STRING + valueOf: $systemURI +_system: + vars: + cx41: String, CX.4.1 + cx42: String, CX.4.2 + cx43: String, CX.4.3 + condition: $cx43 EQUALS ISO || $cx43 EQUALS UUID + expressionType: nested + expressionsMap: + extension_1-namespace-id: + generateList: true + expressionType: nested + condition: $cx41 NOT_NULL + expressionsMap: + url: + type: SYSTEM_URL + value: namespace-id + valueString: + type: STRING + valueOf: $cx41 + expressionType: HL7Spec + extension_2-universal-id: + generateList: true + expressionType: nested + condition: $cx42 NOT_NULL + expressionsMap: + url: + type: SYSTEM_URL + value: universal-id + valueString: + type: STRING + valueOf: $cx42 + expressionType: HL7Spec + extension_3-universal-id-type: + generateList: true + expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: universal-id-type + valueString: + type: STRING + valueOf: $cx43 + expressionType: HL7Spec + +type: + expressionType: nested + vars: + code: $code | CX.5 + system: $system + condition: $code NOT_NULL || $system NOT_NULL + expressions: + - expressionType: nested + expressionsMap: + coding: + generateList: true + expressionType: nested + expressionsMap: + code: + type: STRING + valueOf: $code + system: + type: STRING + valueOf: $system + text: + type: STRING + condition: $CXIdentifierText NOT_NULL + valueOf: $CXIdentifierText + +period: + vars: + startDate: CX.7 + endDate: CX.8 + condition: $startDate NOT_NULL || $endDate NOT_NULL + expressionType: nested + expressionsMap: + start: + valueOf: "GeneralUtils.dateTimeWithZoneId(startDate,ZONEID)" + expressionType: JEXL + _start: + expressionType: nested + condition: $startDate NOT_NULL + expressionsMap: + extension_1: + generateList: true + expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: hl7v2-date-time + valueString: + type: STRING + valueOf: $startDate + expressionType: HL7Spec + end: + valueOf: "GeneralUtils.dateTimeWithZoneId(endDate,ZONEID)" + expressionType: JEXL + _end: + expressionType: nested + condition: $endDate NOT_NULL + expressionsMap: + extension_1: + generateList: true + expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: hl7v2-date-time + valueString: + type: STRING + valueOf: $endDate + expressionType: HL7Spec + +extension: + generateList: true + expressionType: nested + expressions: + - expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: identifier-check-digit + valueString: + type: STRING + expressionType: HL7Spec + valueOf: CX.2 + - expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: naming-system-check-digit + valueString: + type: STRING + expressionType: HL7Spec + valueOf: CX.3 + - expressionType: nested + condition: $cx6 NOT_NULL + vars: + cx6: CX.6 + expressionsMap: + url: + type: SYSTEM_URL + value: assigning-facility + valueReference: + valueOf: datatypes/HD/Organization + expressionType: reference + specs: CX.6 + - expressionType: resource + valueOf: datatypes/CX/CXExtension + - generateList: true + expressionType: nested + condition: $CXIdentifierField NOT_NULL + expressionsMap: + url: + type: SYSTEM_URL + value: hl7v2Field + valueString: + type: STRING + valueOf: $CXIdentifierField + - generateList: true + expressionType: nested + condition: $CXIdentifierComponent NOT_NULL + expressionsMap: + url: + type: SYSTEM_URL + value: hl7v2Component + valueString: + type: STRING + valueOf: $CXIdentifierComponent diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/CX/RelatedPerson-mother.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/CX/RelatedPerson-mother.yml new file mode 100644 index 00000000000..3d1da98f2f4 --- /dev/null +++ b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/CX/RelatedPerson-mother.yml @@ -0,0 +1,13 @@ +# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +resourceType: RelatedPerson + +id: + type: STRING + valueOf: "GeneralUtils.generateResourceId()" + expressionType: JEXL + +identifier: + expressionType: resource + specs: CX + valueOf: datatypes/CX/Identifier \ No newline at end of file diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/DLD/Location.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/DLD/Location.yml new file mode 100644 index 00000000000..f207f43e245 --- /dev/null +++ b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/DLD/Location.yml @@ -0,0 +1,25 @@ +# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +resourceType: Location + +id: + type: STRING + valueOf: "GeneralUtils.generateResourceId()" + expressionType: JEXL + +type: + type: STRING + valueOf: DLD.1 + expressionType: HL7Spec + +extension: + generateList: true + expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: dld2-effective-date + valueString: + valueOf: DLD.2 + type: STRING + expressionType: HL7Spec \ No newline at end of file diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/DR/Period.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/DR/Period.yml new file mode 100644 index 00000000000..378bd28002b --- /dev/null +++ b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/DR/Period.yml @@ -0,0 +1,51 @@ +# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +start: + condition: $dateTimeIn NOT_NULL + type: STRING + valueOf: "GeneralUtils.dateTimeWithZoneId(dateTimeIn,ZONEID)" + expressionType: JEXL + vars: + dateTimeIn: DR.1 +_start: + expressionType: nested + vars: + dr1: DR.1 + condition: $dr1 NOT_NULL + expressionsMap: + extension_1: + generateList: true + expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: hl7v2-date-time + valueString: + type: STRING + valueOf: DR.1 + expressionType: HL7Spec + +end: + condition: $dateTimeIn NOT_NULL + type: STRING + valueOf: "GeneralUtils.dateTimeWithZoneId(dateTimeIn,ZONEID)" + expressionType: JEXL + vars: + dateTimeIn: DR.2 +_end: + expressionType: nested + condition: $dr2 NOT_NULL + vars: + dr2: DR.2 + expressionsMap: + extension_1: + generateList: true + expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: hl7v2-date-time + valueString: + type: STRING + valueOf: DR.2 + expressionType: HL7Spec \ No newline at end of file diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/ED/Attachment.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/ED/Attachment.yml new file mode 100644 index 00000000000..40286edae49 --- /dev/null +++ b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/ED/Attachment.yml @@ -0,0 +1,36 @@ +# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +extension: + generateList: true + expressionType: nested + expressions: + - expressionType: resource + valueOf: datatypes/ED/EDExtension + - expressionType: nested + vars: + ed2: STRING_ALL, ED.2 + ed3: STRING_ALL, ED.3 + condition: $ed3 NULL && $ed2 NOT_NULL + expressionsMap: + url: + type: SYSTEM_URL + value: alternate-codes + valueCodeableConcept: + valueOf: datatypes/ID/CodeableConcept + specs: ED.2 + expressionType: resource + + +contentType: + valueOf: ED.3 + type: STRING + expressionType: HL7Spec + +data: + vars: + ed4: STRING, ED.4 + condition: $ed4 EQUALS Base64 + valueOf: ED.5 + type: STRING + expressionType: HL7Spec + diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/ED/EDExtension.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/ED/EDExtension.yml new file mode 100644 index 00000000000..6b3e2057fe1 --- /dev/null +++ b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/ED/EDExtension.yml @@ -0,0 +1,53 @@ +# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +url: + type: SYSTEM_URL + value: ed-attachment + +extension: + generateList: true + expressionType: nested + expressions: + - expressionType: resource + valueOf: datatypes/HD/ExtensionHD + specs: ED.1 + constants: + extensionUrl: ED.1 + isStringUrl: true + - expressionType: nested + vars: + ed2: STRING_ALL, ED.2 + ed3: STRING_ALL, ED.3 + condition: $ed3 NOT_NULL && $ed2 NOT_NULL + expressionsMap: + url: + type: STRING + value: ED.2 + valueCodeableConcept: + valueOf: datatypes/ID/CodeableConcept + specs: ED.2 + expressionType: resource + - expressionType: nested + vars: + ed4: STRING, ED.4 + condition: $ed4 NOT_NULL + expressionsMap: + url: + type: STRING + value: ED.4 + valueString: + valueOf: ED.4 + expressionType: HL7Spec + type: STRING + - expressionType: nested + vars: + ed5: STRING, ED.5 + condition: $ed5 NOT_NULL + expressionsMap: + url: + type: STRING + value: ED.5 + valueString: + valueOf: ED.5 + expressionType: HL7Spec + type: STRING \ No newline at end of file diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/EI/Identifier-DefaultAssigner.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/EI/Identifier-DefaultAssigner.yml new file mode 100644 index 00000000000..1948f302ead --- /dev/null +++ b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/EI/Identifier-DefaultAssigner.yml @@ -0,0 +1,50 @@ +# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +value: + expressionType: HL7Spec + type: STRING + valueOf: EI.1 + +assigner: + valueOf: datatypes/HD/Organization + expressionType: reference + specs: $eiAssigningOrganization + +extension: + generateList: true + expressionType: nested + expressions: + - expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: namespace-id + valueString: + expressionType: HL7Spec + type: STRING + valueOf: EI.2 + - expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: universal-id + valueString: + expressionType: HL7Spec + type: STRING + valueOf: EI.3 + - expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: universal-id-type + valueString: + expressionType: HL7Spec + type: STRING + valueOf: EI.4 + - expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: ei-assigner-organization-type + valueString: + valueOf: 'organization' \ No newline at end of file diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/EI/Identifier-Organization.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/EI/Identifier-Organization.yml new file mode 100644 index 00000000000..7298b64f8c3 --- /dev/null +++ b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/EI/Identifier-Organization.yml @@ -0,0 +1,21 @@ +# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +value: + expressionType: HL7Spec + type: STRING + valueOf: EI.1 + +assigner: + expressionType: reference + valueOf: datatypes/EI/Organization + specs: $BASE_VALUE + +extension: + generateList: true + expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: ei-assigner-organization-type + valueString: + valueOf: 'default' \ No newline at end of file diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/EI/Identifier.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/EI/Identifier.yml new file mode 100644 index 00000000000..a130f73960c --- /dev/null +++ b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/EI/Identifier.yml @@ -0,0 +1,92 @@ +# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +value: + type: STRING + valueOf: EI.1 + expressionType: HL7Spec + +type: + condition: $code NOT_NULL || $system NOT_NULL + expressionType: nested + expressionsMap: + coding: + generateList: true + expressionType: nested + expressions: + - expressionType: nested + expressionsMap: + code: + type: STRING + valueOf: $code + system: + type: STRING + valueOf: $system + +extension_1-assigning-authority: + generateList: true + expressionType: nested + vars: + ei2: EI.2 + ei3: EI.3 + ei4: EI.4 + expressionsMap: + url: + type: SYSTEM_URL + valueOf: assigning-authority + extension_url: + generateList: true + expressionType: nested + expressions: + - expressionType: nested + condition: $ei2 NOT_NULL + expressionsMap: + url: + type: SYSTEM_URL + valueOf: namespace-id + valueString: + type: STRING + expressionType: HL7Spec + valueOf: $ei2 + - expressionType: nested + condition: $ei3 NOT_NULL + expressionsMap: + url: + type: SYSTEM_URL + valueOf: universal-id + valueString: + type: STRING + expressionType: HL7Spec + valueOf: $ei3 + - expressionType: nested + condition: $ei4 NOT_NULL + expressionsMap: + url: + type: SYSTEM_URL + valueOf: universal-id-type + valueCode: + type: STRING + expressionType: HL7Spec + valueOf: $ei4 + +extension: + generateList: true + expressionType: nested + expressions: + - expressionType: nested + condition: $hl7v2Field NOT_NULL + expressionsMap: + url: + type: SYSTEM_URL + value: hl7v2Field + valueString: + type: STRING + valueOf: $hl7v2Field + - expressionType: nested + condition: $hl7v2Component NOT_NULL + expressionsMap: + url: + type: SYSTEM_URL + value: hl7v2Component + valueString: + type: STRING + valueOf: $hl7v2Component \ No newline at end of file diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/EI/Organization.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/EI/Organization.yml new file mode 100644 index 00000000000..069148e051b --- /dev/null +++ b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/EI/Organization.yml @@ -0,0 +1,47 @@ +# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +resourceType: Organization + +id: + type: STRING + valueOf: "GeneralUtils.generateResourceId()" + expressionType: JEXL + +identifier: + expressionType: nested + generateList: true + expressions: + - expressionType: nested + expressionsMap: + value: + type: STRING + expressionType: HL7Spec + valueOf: EI.2 + extension: + generateList: true + expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: hl7v2Field + valueString: + valueOf: EI.2 + - expressionType: nested + expressionsMap: + value: + type: STRING + expressionType: HL7Spec + valueOf: EI.3 + type: + expressionType: resource + specs: EI.4 + valueOf: datatypes/ID/CodeableConcept + extension: + generateList: true + expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: hl7v2Field + valueString: + valueOf: "EI.3,EI.4" \ No newline at end of file diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/EIP/EI/ExtensionEI.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/EIP/EI/ExtensionEI.yml new file mode 100644 index 00000000000..90525e16bc8 --- /dev/null +++ b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/EIP/EI/ExtensionEI.yml @@ -0,0 +1,60 @@ +# $schema: ./../../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +url: + type: SYSTEM_URL + valueOf: $extensionUrl + +extension: + generateList: true + expressionType: nested + expressions: + - vars: + ei1: STRING, EI.1 + condition: $ei1 NOT_NULL + expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: entity-identifier + valueString: + expressionType: HL7Spec + type: STRING + valueOf: EI.1 + - vars: + ei2: STRING, EI.2 + condition: $ei2 NOT_NULL + expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: namespace-id + valueString: + expressionType: HL7Spec + type: STRING + valueOf: EI.2 + - vars: + ei3: STRING, EI.3 + condition: $ei3 NOT_NULL + expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: universal-id + valueString: + expressionType: HL7Spec + type: STRING + valueOf: EI.3 + - vars: + ei4: STRING, EI.4 + condition: $ei4 NOT_NULL + expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: universal-id-type + valueString: + expressionType: HL7Spec + type: STRING + valueOf: EI.4 + + diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/EIP/Identifier-FillerAssignedIdentifier.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/EIP/Identifier-FillerAssignedIdentifier.yml new file mode 100644 index 00000000000..3360abc1ee8 --- /dev/null +++ b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/EIP/Identifier-FillerAssignedIdentifier.yml @@ -0,0 +1,81 @@ +# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +value: + type: STRING + valueOf: EIP.2.1 + expressionType: HL7Spec + +type: + expressionType: nested + expressionsMap: + coding: + generateList: true + expressionType: nested + expressions: + - expressionType: nested + expressionsMap: + code: + type: STRING + valueOf: "FGN" + system: + type: STRING + valueOf: "http://terminology.hl7.org/CodeSystem/v2-0203" + +extension: + generateList: true + expressionType: nested + expressions: + - expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: namespace-id + valueString: + expressionType: HL7Spec + type: STRING + valueOf: EIP.2.2 + - expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: universal-id + valueString: + expressionType: HL7Spec + type: STRING + valueOf: EIP.2.3 + - expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: universal-id-type + valueString: + expressionType: HL7Spec + type: STRING + valueOf: EIP.2.4 + - vars: + eip1: STRING_ALL, EIP.1 + extensionUrl: $backupExtension + condition: $eip1 NOT_NULL + expressionType: resource + valueOf: datatypes/EIP/EI/ExtensionEI + specs: EIP.1 + - generateList: true + expressionType: nested + condition: $hl7v2Field NOT_NULL + expressionsMap: + url: + type: SYSTEM_URL + value: hl7v2Field + valueString: + type: STRING + valueOf: $hl7v2Field + - generateList: true + expressionType: nested + condition: $hl7v2Component NOT_NULL + expressionsMap: + url: + type: SYSTEM_URL + value: hl7v2Component + valueString: + type: STRING + valueOf: $hl7v2Component \ No newline at end of file diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/EIP/Identifier-PlacerAssignedIdentifier.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/EIP/Identifier-PlacerAssignedIdentifier.yml new file mode 100644 index 00000000000..73c32876cd4 --- /dev/null +++ b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/EIP/Identifier-PlacerAssignedIdentifier.yml @@ -0,0 +1,82 @@ +# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +value: + type: STRING + valueOf: EIP.1.1 + expressionType: HL7Spec + +type: + expressionType: nested + expressionsMap: + coding: + generateList: true + expressionType: nested + expressions: + - expressionType: nested + expressionsMap: + code: + type: STRING + valueOf: "PGN" + system: + type: STRING + valueOf: "http://terminology.hl7.org/CodeSystem/v2-0203" + +extension: + generateList: true + expressionType: nested + expressions: + - expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: namespace-id + valueString: + expressionType: HL7Spec + type: STRING + valueOf: EIP.1.2 + - expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: universal-id + valueString: + expressionType: HL7Spec + type: STRING + valueOf: EIP.1.3 + - expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: universal-id-type + valueString: + expressionType: HL7Spec + type: STRING + valueOf: EIP.1.4 + - vars: + eip2: STRING_ALL, EIP.2 + extensionUrl: $backupExtension + condition: $eip2 NOT_NULL + generateList: true + expressionType: resource + valueOf: datatypes/EIP/EI/ExtensionEI + specs: EIP.2 + - generateList: true + expressionType: nested + condition: $hl7v2Field NOT_NULL + expressionsMap: + url: + type: SYSTEM_URL + value: hl7v2Field + valueString: + type: STRING + valueOf: $hl7v2Field + - generateList: true + expressionType: nested + condition: $hl7v2Component NOT_NULL + expressionsMap: + url: + type: SYSTEM_URL + value: hl7v2Component + valueString: + type: STRING + valueOf: $hl7v2Component \ No newline at end of file diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/FN/ExtensionHumanName-family.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/FN/ExtensionHumanName-family.yml new file mode 100644 index 00000000000..0216dc917ec --- /dev/null +++ b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/FN/ExtensionHumanName-family.yml @@ -0,0 +1,51 @@ +# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +extension: + generateList: true + expressionType: nested + vars: + fn2: String, FN.2 + fn3: String, FN.3 + fn4: String, FN.4 + fn5: String, FN.5 + expressions: + - expressionType: nested + condition: $fn2 NOT_NULL + expressionsMap: + url: + type: SYSTEM_URL + value: humanname-own-prefix + valueString: + type: STRING + valueOf: FN.2 + expressionType: HL7Spec + - expressionType: nested + condition: $fn3 NOT_NULL + expressionsMap: + url: + type: SYSTEM_URL + value: humanname-own-name + valueString: + type: STRING + valueOf: FN.3 + expressionType: HL7Spec + - expressionType: nested + condition: $fn4 NOT_NULL + expressionsMap: + url: + type: SYSTEM_URL + value: humanname-partner-prefix + valueString: + type: STRING + valueOf: FN.4 + expressionType: HL7Spec + - expressionType: nested + condition: $fn5 NOT_NULL + expressionsMap: + url: + type: SYSTEM_URL + value: humanname-partner-name + valueString: + type: STRING + valueOf: FN.5 + expressionType: HL7Spec \ No newline at end of file diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/HD/ExtensionAssigningAuthority.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/HD/ExtensionAssigningAuthority.yml new file mode 100644 index 00000000000..d5fc7cd9d8a --- /dev/null +++ b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/HD/ExtensionAssigningAuthority.yml @@ -0,0 +1,74 @@ +# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +url: + type: SYSTEM_URL + value: 'assigning-authority' + +extension_1-namespaceId: + generateList: true + expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: namespace-id + valueString: + type: STRING + valueOf: HD.1 + expressionType: HL7Spec + +extension_2-universalId: + generateList: true + condition: $universalIdType EQUALS ISO || $universalIdType EQUALS UUID + expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: universal-id + valueString: + type: String + valueOf: HD.2 + expressionType: HL7Spec + vars: + universalIdType: String, HD.3 + +extension_3-universalIdType: + generateList: true + expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: universal-id-type + valueCode: + type: STRING + valueOf: HD.3 + expressionType: HL7Spec + +extension_4-universalIdUnknownType: + condition: $universalIdType NOT_EQUALS ISO && $universalIdType NOT_EQUALS UUID + generateList: true + expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: universal-id-unknown-type + valueCode: + type: STRING + valueOf: HD.2 + expressionType: HL7Spec + vars: + universalIdType: String, HD.3 + +extension_5-universalIdUnknownType: + condition: $universalIdType NULL + generateList: true + expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: universal-id-unknown-type + valueCode: + type: STRING + valueOf: HD.2 + expressionType: HL7Spec + vars: + universalIdType: String, HD.3 \ No newline at end of file diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/HD/ExtensionHD.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/HD/ExtensionHD.yml new file mode 100644 index 00000000000..931f9f88e8d --- /dev/null +++ b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/HD/ExtensionHD.yml @@ -0,0 +1,55 @@ +# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +url: + expressionType: nested + expressions: + - type: SYSTEM_URL + condition: $isStringUrl NULL + valueOf: $extensionUrl + - type: STRING + condition: $isStringUrl NOT_NULL + valueOf: $extensionUrl + + +extension: + generateList: true + expressionType: nested + expressions: + - vars: + hd1: STRING, HD.1 + condition: $hd1 NOT_NULL + expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: namespace-id + valueString: + type: STRING + valueOf: HD.1 + expressionType: HL7Spec + - vars: + hd2: STRING, HD.2 + condition: $hd2 NOT_NULL + expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: universal-id + valueString: + type: STRING + valueOf: HD.2 + expressionType: HL7Spec + - vars: + hd3: STRING, HD.3 + condition: $hd3 NOT_NULL + expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: universal-id-type + valueString: + type: STRING + valueOf: HD.3 + expressionType: HL7Spec + + diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierNamespaceId.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierNamespaceId.yml new file mode 100644 index 00000000000..b7834cb80d8 --- /dev/null +++ b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierNamespaceId.yml @@ -0,0 +1,15 @@ +# $schema: ./../../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +value: + type: STRING + expressionType: HL7Spec + valueOf: HD.1 +extension: + generateList: true + expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: hl7v2Field + valueString: + valueOf: HD.1 \ No newline at end of file diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierUniversalId.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierUniversalId.yml new file mode 100644 index 00000000000..2d060644c46 --- /dev/null +++ b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierUniversalId.yml @@ -0,0 +1,19 @@ +# $schema: ./../../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +value: + type: STRING + expressionType: HL7Spec + valueOf: HD.2 +type: + expressionType: resource + specs: HD.3 + valueOf: datatypes/ID/CodeableConcept +extension: + generateList: true + expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: hl7v2Field + valueString: + valueOf: "HD.2,HD.3" \ No newline at end of file diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/HD/Location.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/HD/Location.yml new file mode 100644 index 00000000000..3fc98dddbfb --- /dev/null +++ b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/HD/Location.yml @@ -0,0 +1,74 @@ +# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +resourceType: Location + +id: + type: STRING + valueOf: "GeneralUtils.generateResourceId()" + expressionType: JEXL + +name: + valueOf: HD.1 + type: STRING + expressionType: HL7Spec + +identifier_1: + expressionType: nested + generateList: true + vars: + universalId: String, HD.3 + expressionsMap: + value_1: + condition: $universalId EQUALS ISO || $universalId EQUALS UUID + type: STRING + expressionType: HL7Spec + valueOf: HD.2 + +extension_1-unknownUniversalIdType: + condition: $universalId NOT_EQUALS ISO && $universalId NOT_EQUALS UUID + generateList: true + expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: universal-id-unknown-type + valueString: + expressionType: HL7Spec + type: STRING + valueOf: HD.2 + vars: + universalId: STRING, HD.3 + +extension_2-unknownUniversalIdType: + condition: $universalId NULL + generateList: true + expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: universal-id-unknown-type + valueString: + expressionType: HL7Spec + type: STRING + valueOf: HD.2 + vars: + universalId: STRING, HD.3 + +extension_3-universalIdType: + generateList: true + expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: universal-id-type + valueCode: + expressionType: HL7Spec + type: STRING + valueOf: HD.3 + +physicalType: + valueOf: datatype/CodeableConcept_var + expressionType: resource + constants: + code: si + system: "http://terminology.hl7.org/CodeSystem/location-physical-type" \ No newline at end of file diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/HD/Organization.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/HD/Organization.yml new file mode 100644 index 00000000000..a1c24c51fce --- /dev/null +++ b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/HD/Organization.yml @@ -0,0 +1,91 @@ +# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +resourceType: Organization + +id: + type: STRING + valueOf: "GeneralUtils.generateResourceId()" + expressionType: JEXL + +identifier_1: + condition: $hd1 NOT_NULL + vars: + hd1: String, HD.1 + expressionType: nested + generateList: true + expressionsMap: + value_1: + type: STRING + expressionType: HL7Spec + valueOf: HD.1 + extension_1-namespaceId: + generateList: true + expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: hl7v2Field + valueString: + valueOf: HD.1 + +identifier_2: + condition: $hd2 NOT_NULL + expressionType: nested + generateList: true + vars: + hd3: String, HD.3 + hd2: String, HD.2 + expressionsMap: + value: + type: STRING + expressionType: HL7Spec + valueOf: HD.2 + type: + valueOf: datatypes/ID/CodeableConceptUniversalid + generateList: true + expressionType: resource + specs: HD.3 + system: + condition: $hd3 EQUALS ISO || $hd3 EQUALS UUID + type: STRING + valueOf: "urn:ietf:rfc:3986" + extension_1-universalId: + generateList: true + expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: hl7v2Field + valueString: + valueOf: "HD.2,HD.3" + +address: + condition: $organizationCountry NOT_NULL + valueOf: datatypes/XAD/Address + expressionType: resource + generateList: true + vars: + country: $organizationCountry + +extension: + generateList: true + expressionType: nested + expressions: + - expressionType: nested + condition: $hdOrganizationHL7Field NOT_NULL + expressionsMap: + url: + type: SYSTEM_URL + value: hl7v2Field + valueString: + type: STRING + valueOf: $hdOrganizationHL7Field + - expressionType: nested + condition: $hdOrganizationHL7Component NOT_NULL + expressionsMap: + url: + type: SYSTEM_URL + value: hl7v2Component + valueString: + type: STRING + valueOf: $hdOrganizationHL7Component \ No newline at end of file diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/ID/CodeableConcept.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/ID/CodeableConcept.yml new file mode 100644 index 00000000000..4b574d46ca6 --- /dev/null +++ b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/ID/CodeableConcept.yml @@ -0,0 +1,22 @@ +# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +coding: + condition: $BASE_VALUE NOT_NULL + generateList: true + expressionType: nested + expressions: + - expressionType: nested + expressionsMap: + code: + expressionType: HL7Spec + type: STRING + valueOf: $BASE_VALUE + extension: + generateList: true + expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: codeable-concept-id + valueBoolean: + valueOf: "true" \ No newline at end of file diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/ID/CodeableConceptUniversalid.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/ID/CodeableConceptUniversalid.yml new file mode 100644 index 00000000000..00490717b2b --- /dev/null +++ b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/ID/CodeableConceptUniversalid.yml @@ -0,0 +1,15 @@ +# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +coding: + generateList: true + expressionType: nested + expressions: + - expressionType: nested + expressionsMap: + code: + expressionType: HL7Spec + type: STRING + valueOf: $BASE_VALUE + system: + type: STRING + value: "http://terminology.hl7.org/CodeSystem/v2-0301" \ No newline at end of file diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/MOC/Extension.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/MOC/Extension.yml new file mode 100644 index 00000000000..5ef51c9c0d3 --- /dev/null +++ b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/MOC/Extension.yml @@ -0,0 +1,46 @@ +# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +url: + type: STRING + valueOf: $mocExtensionName + +extension: + generateList: true + expressionType: nested + expressions: + - expressionType: nested + vars: + moc1: STRING_ALL, MOC.1 + condition: $moc1 NOT_NULL + expressionsMap: + url: + type: STRING + value: moc-1-1-monetary-amount + valueString: + type: STRING + expressionType: HL7Spec + valueOf: MOC.1.1 + - expressionType: nested + vars: + moc1: STRING_ALL, MOC.1 + condition: $moc1 NOT_NULL + expressionsMap: + url: + type: STRING + value: moc-1-2-monetary-denomination + valueString: + type: STRING + expressionType: HL7Spec + valueOf: MOC.1.2 + - expressionType: nested + vars: + moc2: STRING_ALL, MOC.2 + condition: $moc2 NOT_NULL + expressionsMap: + url: + type: STRING + value: moc-2-charge-code + valueCodeableConcept: + valueOf: datatypes/CE/CodeableConcept + expressionType: resource + specs: MOC.2 \ No newline at end of file diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/MSG/Coding.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/MSG/Coding.yml new file mode 100644 index 00000000000..8199ee3d799 --- /dev/null +++ b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/MSG/Coding.yml @@ -0,0 +1,24 @@ +# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +display: + type: STRING + vars: + msg1: MSG.1 + msg2: MSG.2 + msg3: MSG.3 + msgDisplay: MSG.1 + $caret + MSG.2 + $caret + MSG.3 + constants: + caret: "^" + valueOf: $msgDisplay + +code: + type: STRING + expressionType: HL7Spec + valueOf: MSG.2 + +system: + vars: + msg2: MSG.2 + condition: $msg2 NOT_NULL + type: STRING + value: "http://terminology.hl7.org/CodeSystem/v2-0003" \ No newline at end of file diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/NDL/HD/Location.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/NDL/HD/Location.yml new file mode 100644 index 00000000000..d49f3d48cc1 --- /dev/null +++ b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/NDL/HD/Location.yml @@ -0,0 +1,68 @@ +# $schema: ./../../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +resourceType: Location + +id: + type: STRING + valueOf: "GeneralUtils.generateResourceId()" + expressionType: JEXL + +identifier: + expressionType: nested + generateList: true + expressions: + - expressionType: resource + valueOf: datatypes/HD/Identifier/IdentifierNamespaceId + specs: $BASE_VALUE + - expressionType: resource + valueOf: datatypes/HD/Identifier/IdentifierUniversalId + specs: $BASE_VALUE + +status: + valueOf: $ndlLocationStatus + type: STRING + expressionType: HL7Spec + +mode: + value: 'instance' + type: STRING + +physicalType: + expressionType: nested + expressionsMap: + coding: + expressionType: nested + generateList: true + expressions: + - expressionType: nested + expressionsMap: + code: + condition: $physicalTypeCode NOT_EQUALS poc + type: STRING + valueOf: $physicalTypeCode + _code: + condition: $physicalTypeCode EQUALS poc + expressionType: nested + expressionsMap: + extension: + generateList: true + expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: location-physical-type-poc + valueString: + value: "poc" + system: + type: STRING + value: "http://terminology.hl7.org/CodeSystem/location-physical-type" + +partOf: + valueOf: datatype/Reference + expressionType: resource + specs: $Location + condition: $refLocation EQUALS $partOfId + vars: + refLocation: $BASE_VALUE, GeneralUtils.extractAttribute(refLocation,"$.identifier.value[0].value","String") + + diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/NDL/IS/Location.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/NDL/IS/Location.yml new file mode 100644 index 00000000000..95237101b75 --- /dev/null +++ b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/NDL/IS/Location.yml @@ -0,0 +1,66 @@ +# $schema: ./../../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +resourceType: Location + +id: + type: STRING + valueOf: "GeneralUtils.generateResourceId()" + expressionType: JEXL + +identifier: + generateList: true + expressionType: nested + expressionsMap: + value: + type: STRING + valueOf: IS + expressionType: HL7Spec + +status: + valueOf: $ndlLocationStatus + type: STRING + expressionType: HL7Spec + +mode: + value: 'instance' + type: STRING + +physicalType: + expressionType: nested + expressionsMap: + coding: + expressionType: nested + generateList: true + expressions: + - expressionType: nested + expressionsMap: + code: + condition: $physicalTypeCode NOT_EQUALS poc + type: STRING + valueOf: $physicalTypeCode + _code: + condition: $physicalTypeCode EQUALS poc + expressionType: nested + expressionsMap: + extension: + generateList: true + expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: location-physical-type-poc + valueString: + value: "poc" + system: + type: STRING + value: "http://terminology.hl7.org/CodeSystem/location-physical-type" + +partOf: + valueOf: datatype/Reference + expressionType: resource + specs: $Location + condition: $refLocation EQUALS $partOfId + vars: + refLocation: $BASE_VALUE, GeneralUtils.extractAttribute(refLocation,"$.identifier.value[0].value","String") + + diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/NDL/NDLExtension.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/NDL/NDLExtension.yml new file mode 100644 index 00000000000..9908f03b282 --- /dev/null +++ b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/NDL/NDLExtension.yml @@ -0,0 +1,22 @@ +# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +url: + type: SYSTEM_URL + valueOf: ndl-practitioner-role + +extension: + vars: + ndl9: NDL.9 + expressionType: nested + generateList: true + expressions: + - expressionType: nested + condition: $ndl9 NOT_NULL + expressionsMap: + url: + type: STRING + valueOf: NDL.9 + valueString: + type: STRING + expressionType: HL7Spec + valueOf: NDL.9 \ No newline at end of file diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/NDL/PractitionerRole.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/NDL/PractitionerRole.yml new file mode 100644 index 00000000000..a70671f2b88 --- /dev/null +++ b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/NDL/PractitionerRole.yml @@ -0,0 +1,147 @@ +# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +resourceType: PractitionerRole + +id: + type: STRING + valueOf: "GeneralUtils.generateResourceId()" + expressionType: JEXL + +practitioner: + valueOf: datatypes/CNN/Practitioner + expressionType: reference + specs: NDL.1 + +period: + vars: + startDate: NDL.2 + endDate: NDL.3 + condition: $startDate NOT_NULL || $endDate NOT_NULL + expressionType: nested + expressionsMap: + start: + valueOf: "GeneralUtils.dateTimeWithZoneId(startDate,ZONEID)" + expressionType: JEXL + _start: + expressionType: nested + condition: $startDate NOT_NULL + expressionsMap: + extension_1: + generateList: true + expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: hl7v2-date-time + valueString: + type: STRING + valueOf: $startDate + expressionType: HL7Spec + end: + valueOf: "GeneralUtils.dateTimeWithZoneId(endDate,ZONEID)" + expressionType: JEXL + _end: + expressionType: nested + condition: $endDate NOT_NULL + expressionsMap: + extension_1: + generateList: true + expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: hl7v2-date-time + valueString: + type: STRING + valueOf: $endDate + expressionType: HL7Spec + +location: + generateList: true + expressionType: nested + expressions: + - valueOf: datatypes/NDL/HD/Location + condition: $ndl7 NOT_NULL + expressionType: reference + specs: NDL.7 + vars: + ndlLocationStatus: NDL.8 + ndl7: NDL.7 + constants: + physicalTypeCode: "si" + - valueOf: datatypes/NDL/IS/Location + condition: $ndl10 NOT_NULL + expressionType: reference + specs: NDL.10 + vars: + refLocation: $BASE_VALUE, GeneralUtils.extractAttribute(refLocation,"$.identifier[0].value","String") + partOfId: NLD.7.1 + ndlLocationStatus: NDL.8 + ndl10: NDL.10 + constants: + physicalTypeCode: "bu" + - valueOf: datatypes/NDL/IS/Location + condition: $ndl4 NOT_NULL + expressionType: reference + specs: NDL.4 + vars: + refLocation: $BASE_VALUE, GeneralUtils.extractAttribute(refLocation,"$.identifier[0].value","String") + partOfId: NLD.10 + ndlLocationStatus: NDL.8 + ndl4: NDL.4 + constants: + physicalTypeCode: "poc" + - valueOf: datatypes/NDL/IS/Location + condition: $ndl11 NOT_NULL + expressionType: reference + specs: NDL.11 + vars: + refLocation: $BASE_VALUE, GeneralUtils.extractAttribute(refLocation,"$.identifier[0].value","String") + partOfId: NLD.4 + ndlLocationStatus: NDL.8 + ndl11: NDL.11 + constants: + physicalTypeCode: "lvl" + - valueOf: datatypes/NDL/IS/Location + condition: $ndl5 NOT_NULL + expressionType: reference + specs: NDL.5 + vars: + refLocation: $BASE_VALUE, GeneralUtils.extractAttribute(refLocation,"$.identifier[0].value","String") + partOfId: NLD.4 + ndlLocationStatus: NDL.8 + ndl5: NDL.5 + constants: + physicalTypeCode: "ro" + - valueOf: datatypes/NDL/IS/Location + condition: $ndl6 NOT_NULL + expressionType: reference + specs: NDL.6 + vars: + refLocation: $BASE_VALUE, GeneralUtils.extractAttribute(refLocation,"$.identifier[0].value","String") + partOfId: NLD.5 + ndlLocationStatus: NDL.8 + ndl6: NDL.6 + constants: + physicalTypeCode: "bd" + + +extension: + generateList: true + expressionType: nested + condition: $performerParticipationType NOT_NULL + expressions: + - expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: event-performerFunction + valueCodeableConcept: + valueOf: datatype/CodeableConcept_var + expressionType: resource + vars: + code: $performerParticipationType + constants: + system: "http://terminology.hl7.org/CodeSystem/v3-ParticipationType" + - expressionType: resource + valueOf: datatypes/NDL/NDLExtension \ No newline at end of file diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/NR/Range.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/NR/Range.yml new file mode 100644 index 00000000000..aa68365fc9d --- /dev/null +++ b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/NR/Range.yml @@ -0,0 +1,17 @@ +# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +low: + expressionType: nested + expressionsMap: + value: + type: STRING + expressionType: HL7Spec + valueOf: NR.1 +high: + expressionType: nested + expressionsMap: + value: + type: STRING + expressionType: HL7Spec + valueOf: NR.2 + diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/PL/Location.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/PL/Location.yml new file mode 100644 index 00000000000..ea6e86567c4 --- /dev/null +++ b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/PL/Location.yml @@ -0,0 +1,292 @@ +# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +resourceType: Location + +id: + type: STRING + valueOf: "GeneralUtils.generateResourceId()" + expressionType: JEXL + +identifier: + generateList: true + expressionType: nested + vars: + pl3: STRING_ALL, PL.3 + pl2: STRING_ALL, PL.2 + pl1: STRING_ALL, PL.1 + pl8: STRING_ALL, PL.8 + pl7: STRING_ALL, PL.7 + pl4: STRING_ALL, PL.4 + pl10: STRING_ALL, PL.10 + pl11: STRING_ALL, PL.11 + expressions: + - expressionType: nested + generateList: true + condition: $pl3 NOT_NULL + expressions: + - expressionType: resource + valueOf: datatypes/HD/Identifier/IdentifierNamespaceId + specs: PL.3 + - expressionType: resource + valueOf: datatypes/HD/Identifier/IdentifierUniversalId + specs: PL.3 + - expressionType: resource + condition: $pl11 NULL && $pl10 NOT_NULL + valueOf: datatypes/EI/Identifier-Organization + specs: PL.10 + - expressionType: resource + vars: + eiAssigningOrganization: PL.11 + condition: $pl11 NOT_NULL && $pl10 NOT_NULL + valueOf: datatypes/EI/Identifier-DefaultAssigner + specs: PL.10 + - expressionType: nested + condition: $pl3 NULL && $pl2 NOT_NULL + generateList: true + expressions: + - expressionType: resource + valueOf: datatypes/HD/Identifier/IdentifierNamespaceId + specs: PL.2 + - expressionType: resource + valueOf: datatypes/HD/Identifier/IdentifierUniversalId + specs: PL.2 + - expressionType: resource + condition: $pl11 NULL && $pl10 NOT_NULL + valueOf: datatypes/EI/Identifier-Organization + specs: PL.10 + - expressionType: resource + vars: + eiAssigningOrganization: PL.11 + condition: $pl11 NOT_NULL && $pl10 NOT_NULL + valueOf: datatypes/EI/Identifier-DefaultAssigner + specs: PL.10 + - expressionType: nested + condition: $pl3 NULL && $pl2 NULL && $pl1 NOT_NULL + generateList: true + expressions: + - expressionType: resource + valueOf: datatypes/HD/Identifier/IdentifierNamespaceId + specs: PL.1 + - expressionType: resource + valueOf: datatypes/HD/Identifier/IdentifierUniversalId + specs: PL.1 + - expressionType: resource + condition: $pl11 NULL && $pl10 NOT_NULL + valueOf: datatypes/EI/Identifier-Organization + specs: PL.10 + - expressionType: resource + vars: + eiAssigningOrganization: PL.11 + condition: $pl11 NOT_NULL && $pl10 NOT_NULL + valueOf: datatypes/EI/Identifier-DefaultAssigner + specs: PL.10 + - expressionType: nested + condition: $pl3 NULL && $pl2 NULL && $pl1 NULL && $pl8 NOT_NULL + generateList: true + expressions: + - expressionType: resource + valueOf: datatypes/HD/Identifier/IdentifierNamespaceId + specs: PL.8 + - expressionType: resource + valueOf: datatypes/HD/Identifier/IdentifierUniversalId + specs: PL.8 + - expressionType: resource + condition: $pl11 NULL && $pl10 NOT_NULL + valueOf: datatypes/EI/Identifier-Organization + specs: PL.10 + - expressionType: resource + vars: + eiAssigningOrganization: PL.11 + condition: $pl11 NOT_NULL && $pl10 NOT_NULL + valueOf: datatypes/EI/Identifier-DefaultAssigner + specs: PL.10 + - expressionType: nested + condition: $pl3 NULL && $pl2 NULL && $pl1 NULL && $pl8 NULL && $pl7 NOT_NULL + generateList: true + expressions: + - expressionType: resource + valueOf: datatypes/HD/Identifier/IdentifierNamespaceId + specs: PL.7 + - expressionType: resource + valueOf: datatypes/HD/Identifier/IdentifierUniversalId + specs: PL.7 + - expressionType: resource + condition: $pl11 NULL && $pl10 NOT_NULL + valueOf: datatypes/EI/Identifier-Organization + specs: PL.10 + - expressionType: resource + vars: + eiAssigningOrganization: PL.11 + condition: $pl11 NOT_NULL && $pl10 NOT_NULL + valueOf: datatypes/EI/Identifier-DefaultAssigner + specs: PL.10 + - expressionType: nested + condition: $pl3 NULL && $pl2 NULL && $pl1 NULL && $pl8 NULL && $pl7 NULL && $pl4 NOT_NULL + generateList: true + expressions: + - expressionType: resource + valueOf: datatypes/HD/Identifier/IdentifierNamespaceId + specs: PL.4 + - expressionType: resource + valueOf: datatypes/HD/Identifier/IdentifierUniversalId + specs: PL.4 + - expressionType: resource + condition: $pl11 NULL && $pl10 NOT_NULL + valueOf: datatypes/EI/Identifier-Organization + specs: PL.10 + - expressionType: resource + vars: + eiAssigningOrganization: PL.11 + condition: $pl11 NOT_NULL && $pl10 NOT_NULL + valueOf: datatypes/EI/Identifier-DefaultAssigner + specs: PL.10 + +physicalType: + expressionType: nested + vars: + pl3: STRING_ALL, PL.3 + pl2: STRING_ALL, PL.2 + pl1: STRING_ALL, PL.1 + pl8: STRING_ALL, PL.8 + pl7: STRING_ALL, PL.7 + pl4: STRING_ALL, PL.4 + constants: + system: "http://terminology.hl7.org/CodeSystem/location-physical-type" + expressions: + - expressionType: nested + expressionsMap: + coding: + generateList: true + expressionType: nested + expressionsMap: + code: + valueOf: "bd" + system: + valueOf: $system + condition: $pl3 NOT_NULL + - expressionType: nested + expressionsMap: + coding: + generateList: true + expressionType: nested + expressionsMap: + code: + valueOf: "ro" + system: + valueOf: $system + condition: $pl3 NULL && $pl2 NOT_NULL + - expressionType: nested + expressionsMap: + coding: + expressionType: nested + generateList: true + expressions: + - expressionType: nested + expressionsMap: + _code: + expressionType: nested + expressionsMap: + extension: + generateList: true + expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: location-physical-type-poc + valueString: + value: "poc" + system: + type: STRING + value: "http://terminology.hl7.org/CodeSystem/location-physical-type" + condition: $pl3 NULL && $pl2 NULL && $pl1 NOT_NULL + - expressionType: nested + expressionsMap: + coding: + generateList: true + expressionType: nested + expressionsMap: + code: + valueOf: "lvl" + system: + valueOf: $system + condition: $pl3 NULL && $pl2 NULL && $pl1 NULL && $pl8 NOT_NULL + - expressionType: nested + expressionsMap: + coding: + generateList: true + expressionType: nested + expressionsMap: + code: + valueOf: "bu" + system: + valueOf: $system + condition: $pl3 NULL && $pl2 NULL && $pl1 NULL && $pl8 NULL && $pl7 NOT_NULL + - expressionType: nested + expressionsMap: + coding: + generateList: true + expressionType: nested + expressionsMap: + code: + valueOf: "si" + system: + valueOf: $system + condition: $pl3 NULL && $pl2 NULL && $pl1 NULL && $pl8 NULL && $pl7 NULL && $pl4 NOT_NULL + + +partOf: + expressionType: nested + vars: + pl3: STRING_ALL, PL.3 + pl2: STRING_ALL, PL.2 + pl1: STRING_ALL, PL.1 + pl8: STRING_ALL, PL.8 + pl7: STRING_ALL, PL.7 + pl4: STRING_ALL, PL.4 + condition: $pl3 NOT_NuLL || $pl2 NOT_NULL || $pl1 NOT_NULL || $pl8 NOT_NULL || $pl7 NOT_NULL + expressions: + - expressionType: reference + condition: $pl2 NOT_NULL + valueOf: datatypes/PL/LocationBranch1 #PL2 + specs: $BASE_VALUE + - expressionType: reference + condition: $pl2 NULL && $pl1 NOT_NULL #PL1 + valueOf: datatypes/PL/LocationBranch2 + specs: $BASE_VALUE + - expressionType: reference + condition: $pl2 NULL && $pl1 NULL && $pl8 NOT_NULL + valueOf: datatypes/PL/LocationBranch3 + specs: $BASE_VALUE + - expressionType: reference + condition: $pl2 NULL && $pl1 NULL && $pl8 NULL && $pl7 NOT_NULL + valueOf: datatypes/PL/LocationBranch4 + specs: $BASE_VALUE + - expressionType: reference + condition: $pl2 NULL && $pl1 NULL && $pl8 NULL && $pl7 NULL && $pl4 NOT_NULL + valueOf: datatypes/PL/LocationBranch5 + specs: $BASE_VALUE + +status: + expressionType: HL7Spec + valueOf: PL.5 + type: STRING + +mode: + value: "instance" + +description: + type: STRING + expressionType: HL7Spec + valueOf: PL.9 + +extension: + generateList: true + expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: pl6-person-location-type + valueString: + type: STRING + expressionType: HL7Spec + valueOf: PL.6 \ No newline at end of file diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/PL/LocationBranch1.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/PL/LocationBranch1.yml new file mode 100644 index 00000000000..f2bbcd73bd3 --- /dev/null +++ b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/PL/LocationBranch1.yml @@ -0,0 +1,182 @@ +# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +resourceType: Location + +id: + type: STRING + valueOf: "GeneralUtils.generateResourceId()" + expressionType: JEXL + +identifier: + generateList: true + expressionType: nested + vars: + pl2: STRING_ALL, PL.2 + pl1: STRING_ALL, PL.1 + pl8: STRING_ALL, PL.8 + pl7: STRING_ALL, PL.7 + pl4: STRING_ALL, PL.4 + expressions: + - expressionType: nested + condition: $pl2 NOT_NULL + generateList: true + expressions: + - expressionType: resource + valueOf: datatypes/HD/Identifier/IdentifierNamespaceId + specs: PL.2 + - expressionType: resource + valueOf: datatypes/HD/Identifier/IdentifierUniversalId + specs: PL.2 + - expressionType: nested + condition: $pl2 NULL && $pl1 NOT_NULL + generateList: true + expressions: + - expressionType: resource + valueOf: datatypes/HD/Identifier/IdentifierNamespaceId + specs: PL.1 + - expressionType: resource + valueOf: datatypes/HD/Identifier/IdentifierUniversalId + specs: PL.1 + - expressionType: nested + condition: $pl2 NULL && $pl1 NULL && $pl8 NOT_NULL + generateList: true + expressions: + - expressionType: resource + valueOf: datatypes/HD/Identifier/IdentifierNamespaceId + specs: PL.8 + - expressionType: resource + valueOf: datatypes/HD/Identifier/IdentifierUniversalId + specs: PL.8 + - expressionType: nested + condition: $pl2 NULL && $pl1 NULL && $pl8 NULL && $pl7 NOT_NULL + generateList: true + expressions: + - expressionType: resource + valueOf: datatypes/HD/Identifier/IdentifierNamespaceId + specs: PL.7 + - expressionType: resource + valueOf: datatypes/HD/Identifier/IdentifierUniversalId + specs: PL.7 + - expressionType: nested + condition: $pl2 NULL && $pl1 NULL && $pl8 NULL && $pl7 NULL && $pl4 NOT_NULL + generateList: true + expressions: + - expressionType: resource + valueOf: datatypes/HD/Identifier/IdentifierNamespaceId + specs: PL.4 + - expressionType: resource + valueOf: datatypes/HD/Identifier/IdentifierUniversalId + specs: PL.4 + + + +physicalType: + expressionType: nested + vars: + pl2: STRING, PL.2 + pl1: STRING, PL.1 + pl8: STRING, PL.8 + pl7: STRING, PL.7 + pl4: STRING_ALL, PL.4 + constants: + system: "http://terminology.hl7.org/CodeSystem/location-physical-type" + expressions: + - expressionType: nested + expressionsMap: + coding: + generateList: true + expressionType: nested + expressionsMap: + code: + valueOf: "ro" + system: + valueOf: $system + condition: $pl2 NOT_NULL + - expressionType: nested + expressionsMap: + coding: + expressionType: nested + generateList: true + expressions: + - expressionType: nested + expressionsMap: + _code: + expressionType: nested + expressionsMap: + extension: + generateList: true + expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: location-physical-type-poc + valueString: + value: "poc" + system: + type: STRING + value: "http://terminology.hl7.org/CodeSystem/location-physical-type" + system: + type: STRING + valueOf: $system + condition: $pl2 NULL && $pl1 NOT_NULL + - expressionType: nested + expressionsMap: + coding: + generateList: true + expressionType: nested + expressionsMap: + code: + valueOf: "lvl" + system: + valueOf: $system + condition: $pl2 NULL && $pl1 NULL && $pl8 NOT_NULL + - expressionType: nested + expressionsMap: + coding: + generateList: true + expressionType: nested + expressionsMap: + code: + valueOf: "bu" + system: + valueOf: $system + condition: $pl2 NULL && $pl1 NULL && $pl8 NULL && $pl7 NOT_NULL + - expressionType: nested + expressionsMap: + coding: + generateList: true + expressionType: nested + expressionsMap: + code: + valueOf: "si" + system: + valueOf: $system + condition: $pl2 NULL && $pl1 NULL && $pl8 NULL && $pl7 NULL && $pl4 NOT_NULL + + +partOf: + expressionType: nested + vars: + pl2: STRING_ALL, PL.2 + pl1: STRING_ALL, PL.1 + pl8: STRING_ALL, PL.8 + pl7: STRING_ALL, PL.7 + pl4: STRING_ALL, PL.4 + condition: $pl2 NOT_NULL || $pl1 NOT_NULL || $pl8 NOT_NULL || $pl7 NOT_NULL + expressions: + - expressionType: reference + condition: $pl1 NOT_NULL #PL1 + valueOf: datatypes/PL/LocationBranch2 + specs: $BASE_VALUE + - expressionType: reference + condition: $pl1 NULL && $pl8 NOT_NULL #PL8 + valueOf: datatypes/PL/LocationBranch3 + specs: $BASE_VALUE + - expressionType: reference + condition: $pl1 NULL && $pl8 NULL && $pl7 NOT_NULL #PL7 + valueOf: datatypes/PL/LocationBranch4 + specs: $BASE_VALUE + - expressionType: reference + condition: $pl1 NULL && $pl8 NULL && $pl7 NULL && $pl4 NOT_NULL #PL4 + valueOf: datatypes/PL/LocationBranch5 + specs: $BASE_VALUE \ No newline at end of file diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/PL/LocationBranch2.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/PL/LocationBranch2.yml new file mode 100644 index 00000000000..af152d5c8be --- /dev/null +++ b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/PL/LocationBranch2.yml @@ -0,0 +1,151 @@ +# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +resourceType: Location + +id: + type: STRING + valueOf: "GeneralUtils.generateResourceId()" + expressionType: JEXL + +identifier: + generateList: true + expressionType: nested + vars: + pl1: STRING_ALL, PL.1 + pl8: STRING_ALL, PL.8 + pl7: STRING_ALL, PL.7 + pl4: STRING_ALL, PL.4 + expressions: + - expressionType: nested + condition: $pl1 NOT_NULL + generateList: true + expressions: + - expressionType: resource + valueOf: datatypes/HD/Identifier/IdentifierNamespaceId + specs: PL.1 + - expressionType: resource + valueOf: datatypes/HD/Identifier/IdentifierUniversalId + specs: PL.1 + - expressionType: nested + condition: $pl1 NULL && $pl8 NOT_NULL + generateList: true + expressions: + - expressionType: resource + valueOf: datatypes/HD/Identifier/IdentifierNamespaceId + specs: PL.8 + - expressionType: resource + valueOf: datatypes/HD/Identifier/IdentifierUniversalId + specs: PL.8 + - expressionType: nested + condition: $pl1 NULL && $pl8 NULL && $pl7 NOT_NULL + generateList: true + expressions: + - expressionType: resource + valueOf: datatypes/HD/Identifier/IdentifierNamespaceId + specs: PL.7 + - expressionType: resource + valueOf: datatypes/HD/Identifier/IdentifierUniversalId + specs: PL.7 + - expressionType: nested + condition: $pl1 NULL && $pl8 NULL && $pl7 NULL && $pl4 NOT_NULL + generateList: true + expressions: + - expressionType: resource + valueOf: datatypes/HD/Identifier/IdentifierNamespaceId + specs: PL.4 + - expressionType: resource + valueOf: datatypes/HD/Identifier/IdentifierUniversalId + specs: PL.4 + + + +physicalType: + expressionType: nested + vars: + pl1: STRING_ALL, PL.1 + pl8: STRING_ALL, PL.8 + pl7: STRING_ALL, PL.7 + pl4: STRING_ALL, PL.4 + constants: + system: "http://terminology.hl7.org/CodeSystem/location-physical-type" + expressions: + - expressionType: nested + expressionsMap: + coding: + expressionType: nested + generateList: true + expressions: + - expressionType: nested + expressionsMap: + _code: + expressionType: nested + expressionsMap: + extension: + generateList: true + expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: location-physical-type-poc + valueString: + value: "poc" + system: + type: STRING + value: "http://terminology.hl7.org/CodeSystem/location-physical-type" + condition: $pl1 NOT_NULL + - expressionType: nested + expressionsMap: + coding: + generateList: true + expressionType: nested + expressionsMap: + code: + valueOf: "lvl" + system: + valueOf: $system + condition: $pl1 NULL && $pl8 NOT_NULL + - expressionType: nested + expressionsMap: + coding: + generateList: true + expressionType: nested + expressionsMap: + code: + valueOf: "bu" + system: + valueOf: $system + condition: $pl1 NULL && $pl8 NULL && $pl7 NOT_NULL + - expressionType: nested + expressionsMap: + coding: + generateList: true + expressionType: nested + expressionsMap: + code: + valueOf: "si" + system: + valueOf: $system + condition: $pl1 NULL && $pl8 NULL && $pl7 NULL && $pl4 NOT_NULL + + +partOf: + expressionType: nested + vars: + pl1: STRING_ALL, PL.1 + pl8: STRING_ALL, PL.8 + pl7: STRING_ALL, PL.7 + pl4: STRING_ALL, PL.4 + condition: $pl1 NOT_NULL || $pl8 NOT_NULL || $pl7 NOT_NULL + expressions: + - expressionType: reference + condition: $pl8 NOT_NULL #PL8 + valueOf: datatypes/PL/LocationBranch3 + specs: $BASE_VALUE + - expressionType: reference + condition: $pl8 NULL && $pl7 NOT_NULL #PL7 + valueOf: datatypes/PL/LocationBranch4 + specs: $BASE_VALUE + - expressionType: reference + condition: $pl8 NULL && $pl7 NULL && $pl4 NOT_NULL #PL4 + valueOf: datatypes/PL/LocationBranch5 + specs: $BASE_VALUE \ No newline at end of file diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/PL/LocationBranch3.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/PL/LocationBranch3.yml new file mode 100644 index 00000000000..9803743ebd6 --- /dev/null +++ b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/PL/LocationBranch3.yml @@ -0,0 +1,110 @@ +# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +resourceType: Location + +id: + type: STRING + valueOf: "GeneralUtils.generateResourceId()" + expressionType: JEXL + +identifier: + generateList: true + expressionType: nested + vars: + pl8: STRING_ALL, PL.8 + pl7: STRING_ALL, PL.7 + pl4: STRING_ALL, PL.4 + expressions: + - expressionType: nested + condition: $pl8 NOT_NULL + generateList: true + expressions: + - expressionType: resource + valueOf: datatypes/HD/Identifier/IdentifierNamespaceId + specs: PL.8 + - expressionType: resource + valueOf: datatypes/HD/Identifier/IdentifierUniversalId + specs: PL.8 + - expressionType: nested + condition: $pl8 NULL && $pl7 NOT_NULL + generateList: true + expressions: + - expressionType: resource + valueOf: datatypes/HD/Identifier/IdentifierNamespaceId + specs: PL.7 + - expressionType: resource + valueOf: datatypes/HD/Identifier/IdentifierUniversalId + specs: PL.7 + - expressionType: nested + condition: $pl8 NULL && $pl7 NULL && $pl4 NOT_NULL + generateList: true + expressions: + - expressionType: resource + valueOf: datatypes/HD/Identifier/IdentifierNamespaceId + specs: PL.4 + - expressionType: resource + valueOf: datatypes/HD/Identifier/IdentifierUniversalId + specs: PL.4 + + + +physicalType: + expressionType: nested + vars: + pl8: STRING_ALL, PL.8 + pl7: STRING_ALL, PL.7 + pl4: STRING_ALL, PL.4 + constants: + system: "http://terminology.hl7.org/CodeSystem/location-physical-type" + expressions: + - expressionType: nested + expressionsMap: + coding: + generateList: true + expressionType: nested + expressionsMap: + code: + valueOf: "lvl" + system: + valueOf: $system + condition: $pl8 NOT_NULL + - expressionType: nested + expressionsMap: + coding: + generateList: true + expressionType: nested + expressionsMap: + code: + valueOf: "bu" + system: + valueOf: $system + condition: $pl8 NULL && $pl7 NOT_NULL + - expressionType: nested + expressionsMap: + coding: + generateList: true + expressionType: nested + expressionsMap: + code: + valueOf: "si" + system: + valueOf: $system + condition: $pl8 NULL && $pl7 NULL && $pl4 NOT_NULL + + +partOf: + expressionType: nested + vars: + pl8: STRING_ALL, PL.8 + pl7: STRING_ALL, PL.7 + pl4: STRING_ALL, PL.4 + condition: $pl8 NOT_NULL || $pl7 NOT_NULL + expressions: + - expressionType: reference + condition: $pl7 NOT_NULL #PL7 + valueOf: datatypes/PL/LocationBranch4 + specs: $BASE_VALUE + - expressionType: reference + condition: $pl7 NULL && $pl4 NOT_NULL #PL4 + valueOf: datatypes/PL/LocationBranch5 + specs: $BASE_VALUE \ No newline at end of file diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/PL/LocationBranch4.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/PL/LocationBranch4.yml new file mode 100644 index 00000000000..a991717d78f --- /dev/null +++ b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/PL/LocationBranch4.yml @@ -0,0 +1,82 @@ +# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +resourceType: Location + +id: + type: STRING + valueOf: "GeneralUtils.generateResourceId()" + expressionType: JEXL + +identifier: + generateList: true + expressionType: nested + vars: + pl7: STRING_ALL, PL.7 + pl4: STRING_ALL, PL.4 + expressions: + - expressionType: nested + condition: $pl7 NOT_NULL + generateList: true + expressions: + - expressionType: resource + valueOf: datatypes/HD/Identifier/IdentifierNamespaceId + specs: PL.7 + - expressionType: resource + valueOf: datatypes/HD/Identifier/IdentifierUniversalId + specs: PL.7 + - expressionType: nested + condition: $pl7 NULL && $pl4 NOT_NULL + generateList: true + expressions: + - expressionType: resource + valueOf: datatypes/HD/Identifier/IdentifierNamespaceId + specs: PL.4 + - expressionType: resource + valueOf: datatypes/HD/Identifier/IdentifierUniversalId + specs: PL.4 + + + +physicalType: + expressionType: nested + vars: + pl7: STRING_ALL, PL.7 + pl4: STRING_ALL, PL.4 + constants: + system: "http://terminology.hl7.org/CodeSystem/location-physical-type" + expressions: + - expressionType: nested + expressionsMap: + coding: + generateList: true + expressionType: nested + expressionsMap: + code: + valueOf: "bu" + system: + valueOf: $system + condition: $pl7 NOT_NULL + - expressionType: nested + expressionsMap: + coding: + generateList: true + expressionType: nested + expressionsMap: + code: + valueOf: "si" + system: + valueOf: $system + condition: $pl7 NULL && $pl4 NOT_NULL + + +partOf: + expressionType: nested + vars: + pl7: STRING_ALL, PL.7 + pl4: STRING_ALL, PL.4 + condition: $pl7 NOT_NULL + expressions: + - expressionType: reference + condition: $pl4 NOT_NULL + valueOf: datatypes/PL/LocationBranch5 + specs: $BASE_VALUE \ No newline at end of file diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/PL/LocationBranch5.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/PL/LocationBranch5.yml new file mode 100644 index 00000000000..e7a3953d1ab --- /dev/null +++ b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/PL/LocationBranch5.yml @@ -0,0 +1,46 @@ +# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +resourceType: Location + +id: + type: STRING + valueOf: "GeneralUtils.generateResourceId()" + expressionType: JEXL + +identifier: + generateList: true + expressionType: nested + vars: + pl4: STRING_ALL, PL.4 + expressions: + - expressionType: nested + condition: $pl4 NOT_NULL + generateList: true + expressions: + - expressionType: resource + valueOf: datatypes/HD/Identifier/IdentifierNamespaceId + specs: PL.4 + - expressionType: resource + valueOf: datatypes/HD/Identifier/IdentifierUniversalId + specs: PL.4 + + +physicalType: + expressionType: nested + vars: + pl4: STRING_ALL, PL.4 + constants: + system: "http://terminology.hl7.org/CodeSystem/location-physical-type" + expressions: + - expressionType: nested + expressionsMap: + coding: + generateList: true + expressionType: nested + expressionsMap: + code: + valueOf: "si" + system: + valueOf: $system + condition: $pl4 NOT_NULL + diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/PT/Meta.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/PT/Meta.yml new file mode 100644 index 00000000000..1d6d14698e3 --- /dev/null +++ b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/PT/Meta.yml @@ -0,0 +1,37 @@ +# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +tag: + generateList: true + expressionType: nested + vars: + pt1: STRING, PT.1 + pt2: STRING, PT.2 + condition: $pt1 NOT_NULL || $pt2 NOT_NULL + expressions: + - expressionType: nested + condition: $pt1 NOT_NULL + expressionsMap: + code: + valueOf: PT.1 + expressionType: HL7Spec + type: STRING + system: + value: "http://terminology.hl7.org/CodeSystem/v2-0103" + - expressionType: nested + condition: $pt2 NOT_NULL + expressionsMap: + code: + valueOf: PT.2 + type: STRING + expressionType: HL7Spec + system: + value: "http://terminology.hl7.org/CodeSystem/v2-0207" + +# Currently used to capture MSH.8 +security: + expressionType: nested + generateList: true + expressionsMap: + code: + type: STRING + valueOf: $metaSecurity diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/SN/ExtensionSN.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/SN/ExtensionSN.yml new file mode 100644 index 00000000000..c97ee8bf8be --- /dev/null +++ b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/SN/ExtensionSN.yml @@ -0,0 +1,58 @@ +# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +url: + type: SYSTEM_URL + value: obx-5-value-sn + +extension: + generateList: true + expressionType: nested + expressions: + - vars: + sn1: STRING, SN.1 + condition: $sn1 NOT_NULL + expressionType: nested + expressionsMap: + url: + type: STRING + value: SN.1 + valueString: + type: STRING + expressionType: HL7Spec + valueOf: SN.1 + - vars: + sn2: STRING, SN.2 + condition: $sn2 NOT_NULL + expressionType: nested + expressionsMap: + url: + type: STRING + value: SN.2 + valueString: + type: STRING + expressionType: HL7Spec + valueOf: SN.2 + - vars: + sn3: STRING, SN.3 + condition: $sn3 NOT_NULL + expressionType: nested + expressionsMap: + url: + type: STRING + value: SN.3 + valueString: + type: STRING + expressionType: HL7Spec + valueOf: SN.3 + - vars: + sn4: STRING, SN.4 + condition: $sn4 NOT_NULL + expressionType: nested + expressionsMap: + url: + type: STRING + value: SN.4 + valueString: + type: STRING + expressionType: HL7Spec + valueOf: SN.4 \ No newline at end of file diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/SN/Quantity.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/SN/Quantity.yml new file mode 100644 index 00000000000..1162dab6f0f --- /dev/null +++ b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/SN/Quantity.yml @@ -0,0 +1,74 @@ +# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +comparator: + type: STRING + expressionType: HL7Spec + valueOf: SN.1 + +value: + type: STRING + expressionType: HL7Spec + valueOf: SN.2 + +code: + condition: $identifier NOT_NULL && $nameOfCodingSystem NOT_NULL + type: STRING + expressionType: HL7Spec + valueOf: CWEQuantityUnits.1 + vars: + identifier: CWEQuantityUnits.1 + nameOfCodingSystem: CWEQuantityUnits.3 + +unit: + expressionType: nested + vars: + identifier: CWEQuantityUnits.1 + text: CWEQuantityUnits.2 + expressions: + - condition: $text NULL && $identifier NOT_NULL + type: STRING + valueOf: CWEQuantityUnits.1 + expressionType: HL7Spec + - condition: $text NOT_NULL + type: STRING + valueOf: CWEQuantityUnits.2 + expressionType: HL7Spec + +system: + condition: $identifier NOT_NULL && $nameOfCodingSystem NOT_NULL + type: STRING + expressionType: HL7Spec + valueOf: CWEQuantityUnits.3 + vars: + identifier: CWEQuantityUnits.1 + nameOfCodingSystem: CWEQuantityUnits.3 + +extension: + generateList: true + expressionType: nested + expressions: + - vars: + sn3: STRING, SN.3 + condition: $sn3 NOT_NULL + expressionType: nested + expressionsMap: + url: + type: STRING + value: SN.3 + valueString: + type: STRING + expressionType: HL7Spec + valueOf: SN.3 + - vars: + sn4: STRING, SN.4 + condition: $sn4 NOT_NULL + expressionType: nested + expressionsMap: + url: + type: STRING + value: SN.4 + valueString: + type: STRING + expressionType: HL7Spec + valueOf: SN.4 + diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/SN/Range.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/SN/Range.yml new file mode 100644 index 00000000000..bf401e617cb --- /dev/null +++ b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/SN/Range.yml @@ -0,0 +1,106 @@ +# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +low: + expressionType: nested + expressionsMap: + value: + type: STRING + expressionType: HL7Spec + valueOf: SN.2 + code: + condition: $identifier NOT_NULL && $nameOfCodingSystem NOT_NULL + type: STRING + expressionType: HL7Spec + valueOf: CWERangeUnits.1 + vars: + identifier: CWERangeUnits.1 + nameOfCodingSystem: CWERangeUnits.3 + unit: + expressionType: nested + vars: + identifier: CWERangeUnits.1 + text: CWERangeUnits.2 + expressions: + - condition: $text NULL && $identifier NOT_NULL + type: STRING + valueOf: CWERangeUnits.1 + expressionType: HL7Spec + - condition: $text NOT_NULL + type: STRING + valueOf: CWERangeUnits.2 + expressionType: HL7Spec + system: + condition: $identifier NOT_NULL && $nameOfCodingSystem NOT_NULL + type: STRING + expressionType: HL7Spec + valueOf: CWERangeUnits.3 + vars: + identifier: CWERangeUnits.1 + nameOfCodingSystem: CWERangeUnits.3 + +high: + expressionType: nested + expressionsMap: + value: + type: STRING + expressionType: HL7Spec + valueOf: SN.4 + code: + condition: $identifier NOT_NULL && $nameOfCodingSystem NOT_NULL + type: STRING + expressionType: HL7Spec + valueOf: CWERangeUnits.1 + vars: + identifier: CWERangeUnits.1 + nameOfCodingSystem: CWERangeUnits.3 + unit: + expressionType: nested + vars: + identifier: CWERangeUnits.1 + text: CWERangeUnits.2 + expressions: + - condition: $text NULL && $identifier NOT_NULL + type: STRING + valueOf: CWERangeUnits.1 + expressionType: HL7Spec + - condition: $text NOT_NULL + type: STRING + valueOf: CWERangeUnits.2 + expressionType: HL7Spec + system: + condition: $identifier NOT_NULL && $nameOfCodingSystem NOT_NULL + type: STRING + expressionType: HL7Spec + valueOf: CWERangeUnits.3 + vars: + identifier: CWERangeUnits.1 + nameOfCodingSystem: CWERangeUnits.3 + +extension: + expressionType: nested + generateList: true + expressions: + - vars: + sn1: STRING, SN.1 + condition: $sn1 NOT_NULL + expressionType: nested + expressionsMap: + url: + type: STRING + value: SN.1 + valueString: + type: STRING + expressionType: HL7Spec + valueOf: SN.1 + - vars: + sn3: STRING, SN.3 + condition: $sn3 NOT_NULL + expressionType: nested + expressionsMap: + url: + type: STRING + value: SN.3 + valueString: + type: STRING + expressionType: HL7Spec + valueOf: SN.3 \ No newline at end of file diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/SN/Ratio.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/SN/Ratio.yml new file mode 100644 index 00000000000..d68936327d5 --- /dev/null +++ b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/SN/Ratio.yml @@ -0,0 +1,106 @@ +# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +numerator: + expressionType: nested + expressionsMap: + value: + type: STRING + expressionType: HL7Spec + valueOf: SN.2 + code: + condition: $identifier NOT_NULL && $nameOfCodingSystem NOT_NULL + type: STRING + expressionType: HL7Spec + valueOf: CWERangeUnits.1 + vars: + identifier: CWERangeUnits.1 + nameOfCodingSystem: CWERangeUnits.3 + unit: + expressionType: nested + vars: + identifier: CWERangeUnits.1 + text: CWERangeUnits.2 + expressions: + - condition: $text NULL && $identifier NOT_NULL + type: STRING + valueOf: CWERangeUnits.1 + expressionType: HL7Spec + - condition: $text NOT_NULL + type: STRING + valueOf: CWERangeUnits.2 + expressionType: HL7Spec + system: + condition: $identifier NOT_NULL && $nameOfCodingSystem NOT_NULL + type: STRING + expressionType: HL7Spec + valueOf: CWERangeUnits.3 + vars: + identifier: CWERangeUnits.1 + nameOfCodingSystem: CWERangeUnits.3 + +denominator: + expressionType: nested + expressionsMap: + value: + type: STRING + expressionType: HL7Spec + valueOf: SN.4 + code: + condition: $identifier NOT_NULL && $nameOfCodingSystem NOT_NULL + type: STRING + expressionType: HL7Spec + valueOf: CWERangeUnits.1 + vars: + identifier: CWERangeUnits.1 + nameOfCodingSystem: CWERangeUnits.3 + unit: + expressionType: nested + vars: + identifier: CWERangeUnits.1 + text: CWERangeUnits.2 + expressions: + - condition: $text NULL && $identifier NOT_NULL + type: STRING + valueOf: CWERangeUnits.1 + expressionType: HL7Spec + - condition: $text NOT_NULL + type: STRING + valueOf: CWERangeUnits.2 + expressionType: HL7Spec + system: + condition: $identifier NOT_NULL && $nameOfCodingSystem NOT_NULL + type: STRING + expressionType: HL7Spec + valueOf: CWERangeUnits.3 + vars: + identifier: CWERangeUnits.1 + nameOfCodingSystem: CWERangeUnits.3 + +extension: + expressionType: nested + generateList: true + expressions: + - vars: + sn1: STRING, SN.1 + condition: $sn1 NOT_NULL + expressionType: nested + expressionsMap: + url: + type: STRING + value: SN.1 + valueString: + type: STRING + expressionType: HL7Spec + valueOf: SN.1 + - vars: + sn3: STRING, SN.3 + condition: $sn3 NOT_NULL + expressionType: nested + expressionsMap: + url: + type: STRING + value: SN.3 + valueString: + type: STRING + expressionType: HL7Spec + valueOf: SN.3 diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/XAD/Address.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/XAD/Address.yml new file mode 100644 index 00000000000..1b641e215d3 --- /dev/null +++ b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/XAD/Address.yml @@ -0,0 +1,135 @@ +# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +line: + expressionType: nested + generateList: true + expressions: + - type: STRING + expressionType: HL7Spec + valueOf: XAD.1.1 + - type: STRING + expressionType: HL7Spec + valueOf: XAD.1.2 + - type: STRING + expressionType: HL7Spec + valueOf: XAD.1.3 + - type: STRING + expressionType: HL7Spec + valueOf: XAD.2 + - type: STRING + expressionType: HL7Spec + valueOf: XAD.19 + +city: + type: STRING + expressionType: HL7Spec + valueOf: XAD.3 + +state: + type: STRING + expressionType: HL7Spec + valueOf: XAD.4 + +postalCode: + type: STRING + expressionType: HL7Spec + valueOf: XAD.5 + +country: + type: STRING + expressionType: HL7Spec + valueOf: $country | XAD.6 + +type: + vars: + xad7: String, XAD.7 + condition: $xad7 EQUALS M || $xad7 EQUALS SH + type: STRING + expressionType: JEXL + valueOf: 'GeneralUtils.getFhirAddressType(xad7)' + +use: + vars: + xad7: String, XAD.7 + condition: $xad7 EQUALS BA || $xad7 EQUALS BI || $xad7 EQUALS C || $xad7 EQUALS B || $xad7 EQUALS H || $xad7 EQUALS O + type: STRING + valueOf: 'GeneralUtils.getFhirAddressUse(xad7)' + expressionType: JEXL + + + +district: + type: STRING + valueOf: XAD.9 + expressionType: HL7Spec + +# XAD.12 is deprecated so the schema favors using XAD.13/14 if either are populated +period: + vars: + xad13: String, XAD.13 + xad14: String, XAD.14 + condition: $xad13 NOT_NULL || $xad14 NOT_NULL + expressionType: nested + expressionsMap: + start: + valueOf: "GeneralUtils.dateTimeWithZoneId(periodStart,ZONEID)" + expressionType: JEXL + vars: + periodStart: XAD.13 + end: + valueOf: "GeneralUtils.dateTimeWithZoneId(periodEnd,ZONEID)" + expressionType: JEXL + vars: + periodEnd: XAD.14 + +extension: + generateList: true + expressionType: nested + expressions: + - expressionType: nested + vars: + xad10: STRING_ALL, XAD.10 + condition: $xad10 NOT_NULL + expressionsMap: + url: + type: SYSTEM_URL + value: iso21090-ADXP-censusTract + valueCode: + type: STRING + expressionType: HL7Spec + valueOf: XAD.10 + - vars: + xad7: String, XAD.7 + condition: $xad7 EQUALS HV + expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: iso21090-AD-use + valueCode: + type: STRING + valueOf: XAD.7 + expressionType: HL7Spec + - generateList: true + expressionType: nested + condition: $hl7v2Field NOT_NULL + expressionsMap: + url: + type: SYSTEM_URL + value: hl7v2Field + valueString: + type: STRING + valueOf: $hl7v2Field + - generateList: true + expressionType: nested + condition: $hl7v2Component NOT_NULL + expressionsMap: + url: + type: SYSTEM_URL + value: hl7v2Component + valueString: + type: STRING + valueOf: $hl7v2Component + - expressionType: resource + valueOf: datatypes/XAD/XADExtension + diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/XAD/SADExtension.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/XAD/SADExtension.yml new file mode 100644 index 00000000000..fe1872fd7db --- /dev/null +++ b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/XAD/SADExtension.yml @@ -0,0 +1,46 @@ +# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +url: + type: SYSTEM_URL + value: sad-address-line + +extension: + generateList: true + expressionType: nested + expressions: + - expressionType: nested + vars: + sad1: STRING, SAD.1 + condition: $sad1 NOT_NULL + expressionsMap: + url: + type: STRING + value: SAD.1 + valueString: + type: STRING + valueOf: SAD.1 + expressionType: HL7Spec + - expressionType: nested + vars: + sad2: STRING, SAD.2 + condition: $sad2 NOT_NULL + expressionsMap: + url: + type: STRING + value: SAD.2 + valueString: + type: STRING + valueOf: SAD.2 + expressionType: HL7Spec + - expressionType: nested + vars: + sad3: STRING, SAD.3 + condition: $sad3 NOT_NULL + expressionsMap: + url: + type: STRING + value: SAD.3 + valueString: + type: STRING + valueOf: SAD.3 + expressionType: HL7Spec \ No newline at end of file diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/XAD/XADExtension.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/XAD/XADExtension.yml new file mode 100644 index 00000000000..8944f77d87c --- /dev/null +++ b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/XAD/XADExtension.yml @@ -0,0 +1,104 @@ +# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +# This extension stores HL7 fields that are either not mapped to FHIR +# or become ambiguous when mapped +# URL: https://reportstream.cdc.gov/fhir/StructureDefinition/xad-address + +url: + type: SYSTEM_URL + value: xad-address + +extension: + generateList: true + expressionType: nested + expressions: + - expressionType: resource + vars: + xad1: STRING_ALL, XAD.1 + condition: $xad1 NOT_NULL + valueOf: datatypes/XAD/SADExtension + specs: XAD.1 + - expressionType: nested + vars: + xad2: STRING_ALL, XAD.2 + condition: $xad2 NOT_NULL + expressionsMap: + url: + type: STRING + value: XAD.2 + valueString: + type: STRING + valueOf: XAD.2 + expressionType: HL7Spec + - expressionType: nested + vars: + xad6: STRING_ALL, XAD.6 + condition: $xad6 NOT_NULL + expressionsMap: + url: + type: STRING + value: XAD.6 + valueString: + type: STRING + valueOf: XAD.6 + expressionType: HL7Spec + - expressionType: nested + vars: + xad7: STRING_ALL, XAD.7 + condition: $xad7 NOT_NULL + expressionsMap: + url: + type: STRING + value: XAD.7 + valueCode: + type: STRING + valueOf: XAD.7 + expressionType: HL7Spec + - expressionType: nested + vars: + xad8: STRING_ALL, XAD.8 + condition: $xad8 NOT_NULL + expressionsMap: + url: + type: STRING + value: XAD.8 + valueString: + type: STRING + valueOf: XAD.8 + expressionType: HL7Spec + - expressionType: nested + vars: + xad11: STRING_ALL, XAD.11 + condition: $xad11 NOT_NULL + expressionsMap: + url: + type: STRING + value: XAD.11 + valueCode: + type: STRING + valueOf: XAD.11 + expressionType: HL7Spec + - expressionType: nested + vars: + xad13: STRING, XAD.13 + condition: $xad13 NOT_NULL + expressionsMap: + url: + type: STRING + value: XAD.13 + valueString: + type: STRING + valueOf: XAD.13 + expressionType: HL7Spec + - expressionType: nested + vars: + xad14: XAD.14 + condition: $xad14 NOT_NULL + expressionsMap: + url: + type: STRING + value: XAD.14 + valueString: + type: STRING + valueOf: XAD.14 + expressionType: HL7Spec \ No newline at end of file diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/XCN/Practitioner.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/XCN/Practitioner.yml new file mode 100644 index 00000000000..908743312c2 --- /dev/null +++ b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/XCN/Practitioner.yml @@ -0,0 +1,228 @@ +# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +resourceType: Practitioner + +id: + type: STRING + valueOf: "GeneralUtils.generateResourceId()" + expressionType: JEXL + +identifier: + expressionType: nested + vars: + xcnhd1: String, XCN.9.1 + xcnhd2: String, XCN.9.2 + xcnhd3: String, XCN.9.3 + xcn9: STRING_ALL, XCN.9 + xcn11: String, XCN.11 + xcn12: String, XCN.12 + xcn13: String, XCN.13 + xcn14: STRING_ALL, XCN.14 + expressionsMap: + value: + type: STRING + valueOf: XCN.1 + expressionType: HL7Spec + # Checking if HD is an Organization or a System by looking at the ID type. + # If ID type is null or ID type is not ISO or UUID, treat as organization. + # Otherwise, treat as system. + assigner_1: + condition: $xcn9 NOT_NULL && $xcnhd3 NULL + valueOf: datatypes/HD/Organization + expressionType: reference + specs: XCN.9 + assigner_2: + condition: $xcn9 NOT_NULL && $xcnhd3 NOT_NULL && $xcnhd3 NOT_EQUALS ISO && $xcnhd3 NOT_EQUALS UUID + valueOf: datatypes/HD/Organization + expressionType: reference + specs: XCN.9 + system: + expressionType: nested + condition: $xcnhd3 EQUALS ISO || $xcnhd3 EQUALS UUID + expressions: + - condition: $xcnhd1 NOT_NULL + expressionType: HL7Spec + type: STRING + valueOf: XCN.9.1 + - condition: $xcnhd1 NULL && $xcnhd3 EQUALS ISO + expressionType: HL7Spec + type: STRING + constants: + prefix: "urn:oid:" + vars: + join: $prefix + $xcnhd2 + valueOf: $join + - condition: $xcnhd1 NULL && $xcnhd3 EQUALS UUID + expressionType: HL7Spec + type: STRING + constants: + prefix: "urn:uuid:" + vars: + join: $prefix + $xcnhd2 + valueOf: $join + type: + condition: $xcn13 NOT_NULL + expressionType: resource + specs: XCN.13 + valueOf: datatypes/ID/CodeableConcept + extension_1-checkDigit: + condition: $xcn11 NOT_NULL + generateList: true + expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: identifier-check-digit + valueString: + type: STRING + expressionType: HL7Spec + valueOf: XCN.11 + extension_2-checkDigitScheme: + condition: $xcn12 NOT_NULL + generateList: true + expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: naming-system-check-digit + valueCode: + valueOf: XCN.12 + type: STRING + expressionType: HL7Spec + extension_3-assigningFacility: + generateList: true + expressionType: nested + condition: $xcn14 NOT_NULL + expressionsMap: + url: + type: SYSTEM_URL + value: assigning-facility + valueReference: + valueOf: datatypes/HD/Location + expressionType: reference + specs: XCN.14 + +name: + expressionType: nested + expressionsMap: + family: + type: STRING + valueOf: XCN.2.1 + expressionType: HL7Spec + _family: + expressionType: resource + valueOf: datatypes/FN/ExtensionHumanName-family + specs: XCN.2 + given: + generateList: true + expressionType: nested + expressions: + - expressionType: HL7Spec + valueOf: XCN.3 + type: STRING + - expressionType: HL7Spec + valueOf: XCN.4 + type: STRING + suffix: + generateList: true + expressionType: nested + expressions: + - expressionType: HL7Spec + valueOf: XCN.5 + type: STRING + - expressionType: HL7Spec + valueOf: XCN.21 + type: STRING + prefix: + type: STRING + valueOf: XCN.6 + expressionType: HL7Spec + use: + type: NAME_USE + valueOf: XCN.10 + expressionType: HL7Spec + # This needs to use variables because the message parses this field using NULLDT since it is deprecated which means that + # the values do not get correctly loaded and will not be mapped over correctly using a spec. + period_1: + vars: + xcn19: String, XCN.19 + xcn20: String, XCN.20 + start: String, XCN.17.1 + end: String, XCN.17.2 + condition: $xcn19 NULL && $xcn20 NULL + expressionType: resource + valueOf: datatypes/DR/Period + # XCN.17 is deprecated so the schema favors using XCN.19/20 if either are populated + period_2: + vars: + xcn19: String, XCN.19 + xcn20: String, XCN.20 + condition: $xcn19 NOT_NULL || $xcn20 NOT_NULL + expressionType: nested + expressionsMap: + start: + valueOf: "GeneralUtils.dateTimeWithZoneId(periodStart,ZONEID)" + expressionType: JEXL + vars: + periodStart: XCN.19 + end: + valueOf: "GeneralUtils.dateTimeWithZoneId(periodEnd,ZONEID)" + expressionType: JEXL + vars: + periodEnd: XCN.20 + extension_AssemblyOrder: + expressionType: nested + generateList: true + vars: + xcn18: String, XCN.18 + condition: $xcn18 NOT_NULL + expressions: + - expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: humanname-assembly-order + valueCode: + type: STRING + valueOf: XCN.18 + expressionType: HL7Spec + +address: + condition: $XADAddress NOT_NULL + valueOf: datatypes/XAD/Address + expressionType: resource + specs: $XADAddress + generateList: true + +extension: + vars: + xcn9: STRING_ALL, XCN.9 + generateList: true + expressionType: nested + expressions: + - expressionType: resource + condition: $xcn9 NOT_NULL + valueOf: datatypes/HD/ExtensionAssigningAuthority + specs: XCN.9 + - expressionType: resource + valueOf: datatypes/XCN/XCNExtension + - generateList: true + expressionType: nested + condition: $XCNHL7Field NOT_NULL + expressionsMap: + url: + type: SYSTEM_URL + value: hl7v2Field + valueString: + type: STRING + valueOf: $XCNHL7Field + - generateList: true + expressionType: nested + condition: $XCNHL7Component NOT_NULL + expressionsMap: + url: + type: SYSTEM_URL + value: hl7v2Component + valueString: + type: STRING + valueOf: $XCNHL7Component \ No newline at end of file diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/XCN/XCNExtension.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/XCN/XCNExtension.yml new file mode 100644 index 00000000000..b56456496df --- /dev/null +++ b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/XCN/XCNExtension.yml @@ -0,0 +1,177 @@ +# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +url: + type: SYSTEM_URL + value: xcn-practitioner + +extension: + expressionType: nested + generateList: true + vars: + xcn3: String, XCN.3 + xcn4: String, XCN.4 + xcn5: String, XCN.5 + xcn8: STRING_ALL, XCN.8 + xcn10: String, XCN.10 + xcn15: String, XCN.12 + xcn16: STRING_ALL, XCN.16 + xcn17: STRING_ALL, XCN.17 + xcn19: String, XCN.19 + xcn20: String, XCN.20 + xcn21: String, XCN.21 + xcn22: STRING_ALL, XCN.22 + xcn23: STRING_ALL, XCN.23 + expressions: + - expressionType: nested + condition: $xcn3 NOT_NULL + expressionsMap: + url: + type: STRING + valueOf: XCN.3 + valueString: + type: STRING + expressionType: HL7Spec + valueOf: XCN.3 + - expressionType: nested + condition: $xcn4 NOT_NULL + expressionsMap: + url: + type: STRING + valueOf: XCN.4 + valueString: + type: STRING + expressionType: HL7Spec + valueOf: XCN.4 + - expressionType: nested + condition: $xcn5 NOT_NULL + expressionsMap: + url: + type: STRING + valueOf: XCN.5 + valueString: + type: STRING + expressionType: HL7Spec + valueOf: XCN.5 + - expressionType: nested + condition: $xcn8 NOT_NULL + expressionsMap: + url: + type: STRING + value: XCN.8 + valueCodeableConcept: + valueOf: datatypes/CWE/CodeableConcept + expressionType: resource + specs: XCN.8 + - expressionType: nested + condition: $xcn10 NOT_NULL + expressionsMap: + url: + type: STRING + valueOf: XCN.10 + valueString: + type: STRING + expressionType: HL7Spec + valueOf: XCN.10 + - expressionType: nested + condition: $xcn15 NOT_NULL + expressionsMap: + url: + type: STRING + valueOf: XCN.15 + valueString: + type: STRING + expressionType: HL7Spec + valueOf: XCN.15 + - expressionType: nested + condition: $xcn16 NOT_NULL + expressionsMap: + url: + type: STRING + value: XCN.16 + valueCodeableConcept: + valueOf: datatypes/CWE/CodeableConcept + expressionType: resource + specs: XCN.16 + - expressionType: nested + vars: + start: XCN.17.1 + end: XCN.17.2 + condition: $start NOT_NULL || $end NOT_NULL + expressionsMap: + url: + type: STRING + value: XCN.17 + extension_1-start: + generateList: true + expressionType: nested + condition: $start NOT_NULL + expressionsMap: + url: + type: STRING + value: XCN.17.1 + valueString: + type: STRING + valueOf: $start + expressionType: HL7Spec + extension_2-end: + generateList: true + expressionType: nested + condition: $end NOT_NULL + expressionsMap: + url: + type: STRING + value: XCN.17.2 + valueString: + type: STRING + valueOf: $end + expressionType: HL7Spec + - expressionType: nested + condition: $xcn19 NOT_NULL + expressionsMap: + url: + type: STRING + value: XCN.19 + valueString: + type: STRING + valueOf: $xcn19 + expressionType: HL7Spec + - expressionType: nested + condition: $xcn20 NOT_NULL + expressionsMap: + url: + type: STRING + value: XCN.20 + valueString: + type: STRING + valueOf: $xcn20 + expressionType: HL7Spec + - expressionType: nested + condition: $xcn21 NOT_NULL + expressionsMap: + url: + type: STRING + valueOf: XCN.21 + valueString: + type: STRING + expressionType: HL7Spec + valueOf: XCN.21 + - expressionType: nested + condition: $xcn22 NOT_NULL + expressionsMap: + url: + type: STRING + value: XCN.22 + valueCodeableConcept: + valueOf: datatypes/CWE/CodeableConcept + expressionType: resource + specs: XCN.22 + - expressionType: nested + condition: $xcn23 NOT_NULL + expressionsMap: + url: + type: STRING + value: XCN.23 + valueCodeableConcept: + valueOf: datatypes/CWE/CodeableConcept + expressionType: resource + specs: XCN.23 diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/XON/Organization.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/XON/Organization.yml new file mode 100644 index 00000000000..05ca223a0e0 --- /dev/null +++ b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/XON/Organization.yml @@ -0,0 +1,194 @@ +# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +resourceType: Organization + +id: + type: STRING + valueOf: "GeneralUtils.generateResourceId()" + expressionType: JEXL + +name: + type: STRING + valueOf: XON.1 + expressionType: HL7Spec + +identifier: + expressionType: nested + vars: + xon3: XON.3 + xon4: XON.4 + xon5: XON.5 + xon6: XON.6 + xon7: XON.7 + xon8: XON.8 + xon10: String, XON.10 + expressionsMap: + value_1: + condition: $xon10 NULL + type: STRING + expressionType: HL7Spec + valueOf: XON.3 + value_2: + condition: $xon10 NOT_NULL + type: STRING + expressionType: HL7Spec + valueOf: XON.10 + type: + condition: $xon7 NOT_NULL + valueOf: datatype/CodeableConcept_var + expressionType: resource + vars: + code: String, XON.7 + constants: + system: "http://terminology.hl7.org/CodeSystem/v2-0203" + extension_1-checkDigitSchema: + condition: $xon5 NOT_NULL + generateList: true + expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: naming-system-check-digit + valueCode: + valueOf: XON.5 + type: STRING + expressionType: HL7Spec + extension_2-checkDigit: + condition: $xon4 NOT_NULL + generateList: true + expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: identifier-check-digit + valueString: + type: STRING + expressionType: HL7Spec + valueOf: XON.4 + extension_3-assigningAuthority: + condition: $xon6 NOT_NULL + generateList: true + expressionType: resource + valueOf: datatypes/HD/ExtensionAssigningAuthority + specs: XON.6 + extension_4-location: + condition: $xon8 NOT_NULL + generateList: true + expressionType: nested + vars: + xon8: String, XON.8 + expressionsMap: + url: + type: SYSTEM_URL + value: identifier-location + valueReference: + expressionType: reference + valueOf: datatypes/HD/Location + specs: XON.8 + +address: + condition: $XADAddress NOT_NULL + valueOf: datatypes/XAD/Address + expressionType: resource + specs: $XADAddress + +telecom: + expressionType: resource + condition: $XTNTelecom NOT_NULL + valueOf: datatypes/XTN/ContactPoint + generateList: true + specs: $XTNTelecom * + +contact: + expressionType: nested + generateList: true + expressionsMap: + name: + condition: $XPNContactName NOT_NULL + expressionType: resource + generateList: true + specs: $XPNHumanName * + valueOf: datatypes/XPN/HumanName + telecom: + condition: $XPNContactTelecom NOT_NULL + valueOf: datatypes/XTN/ContactPoint + generateList: true + expressionType: resource + specs: $XPNContactTelecom * + address: + condition: $XADContactAddress NOT_NULL + valueOf: datatypes/XAD/Address + generateList: true + expressionType: resource + specs: $XADContactAddress * + +extension: + expressionType: nested + generateList: true + expressions: + - condition: $xon2 NOT_NULL + expressionType: nested + vars: + xon2: XON.2 + expressionsMap: + url: + type: SYSTEM_URL + value: organization-name-type + valueString: + type: STRING + expressionType: HL7Spec + valueOf: XON.2 + - generateList: true + expressionType: nested + condition: $hl7v2Field NOT_NULL + expressionsMap: + url: + type: SYSTEM_URL + value: hl7v2Field + valueString: + type: STRING + valueOf: $hl7v2Field + - generateList: true + expressionType: nested + condition: $hl7v2Component NOT_NULL + expressionsMap: + url: + type: SYSTEM_URL + value: hl7v2Component + valueString: + type: STRING + valueOf: $hl7v2Component + - condition: $xon9 NOT_NULL + expressionType: nested + vars: + xon9: String, XON.9 + expressionsMap: + url: + type: SYSTEM_URL + value: name-representation-code + valueString: + type: STRING + expressionType: HL7Spec + valueOf: XON.9 + - expressionType: resource + valueOf: datatypes/XON/XONExtension + - generateList: true + expressionType: nested + condition: $XONHL7Field NOT_NULL + expressionsMap: + url: + type: SYSTEM_URL + value: hl7v2Field + valueString: + type: STRING + valueOf: $XONHL7Field + - generateList: true + expressionType: nested + condition: $XONHL7Component NOT_NULL + expressionsMap: + url: + type: SYSTEM_URL + value: hl7v2Component + valueString: + type: STRING + valueOf: $XONHL7Component \ No newline at end of file diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/XON/XONExtension.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/XON/XONExtension.yml new file mode 100644 index 00000000000..37c71015f39 --- /dev/null +++ b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/XON/XONExtension.yml @@ -0,0 +1,34 @@ +# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +url: + type: SYSTEM_URL + value: xon-organization + +extension: + generateList: true + expressionType: nested + expressions: + - expressionType: nested + vars: + xon3: STRING_ALL, XON.3 + condition: $xon3 NOT_NULL + expressionsMap: + url: + type: STRING + value: XON.3 + valueString: + expressionType: HL7Spec + type: STRING + valueOf: XON.3 + - expressionType: nested + vars: + xon10: STRING_ALL, XON.10 + condition: $xon10 NOT_NULL + expressionsMap: + url: + type: STRING + value: XON.10 + valueString: + expressionType: HL7Spec + type: STRING + valueOf: XON.10 \ No newline at end of file diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/XPN/HumanName.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/XPN/HumanName.yml new file mode 100644 index 00000000000..9e30b26712e --- /dev/null +++ b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/XPN/HumanName.yml @@ -0,0 +1,99 @@ +# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +resourceType: HumanName + +family: + type: STRING + valueOf: XPN.1.1 + expressionType: HL7Spec +_family: + expressionType: resource + valueOf: datatypes/FN/ExtensionHumanName-family + specs: XPN.1 + +given: + generateList: true + expressionType: nested + expressions: + - expressionType: HL7Spec + valueOf: XPN.2 + type: STRING + - expressionType: HL7Spec + valueOf: XPN.3 + type: STRING +suffix: + generateList: true + expressionType: nested + expressions: + - expressionType: HL7Spec + valueOf: XPN.4 + type: STRING + - expressionType: HL7Spec + valueOf: XPN.14 + type: STRING +prefix: + type: STRING + valueOf: XPN.5 + expressionType: HL7Spec +use: + type: NAME_USE + valueOf: XPN.7 + expressionType: HL7Spec + +extension_AssemblyOrder: + vars: + xpn11: String, XPN.11 + condition: $xpn11 NOT_NULL + expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: humanname-assembly-order + valueCode: + type: STRING + valueOf: XPN.11 + expressionType: HL7Spec + +# XPN.10 is deprecated so the schema favors using XPN.12/13 if either are populated +period_2: + vars: + xpn12: String, XPN.12 + xpn13: String, XPN.13 + condition: $xpn12 NOT_NULL || $xpn13 NOT_NULL + expressionType: nested + expressionsMap: + start: + valueOf: "GeneralUtils.dateTimeWithZoneId(periodStart,ZONEID)" + expressionType: JEXL + vars: + periodStart: XPN.12 + end: + valueOf: "GeneralUtils.dateTimeWithZoneId(periodEnd,ZONEID)" + expressionType: JEXL + vars: + periodEnd: XPN.13 + +extension: + generateList: true + expressionType: nested + expressions: + - expressionType: nested + condition: $hl7v2Field NOT_NULL + expressionsMap: + url: + type: SYSTEM_URL + value: hl7v2Field + valueString: + type: STRING + valueOf: $hl7v2Field + - expressionType: nested + condition: $hl7v2Component NOT_NULL + expressionsMap: + url: + type: SYSTEM_URL + value: hl7v2Component + valueString: + type: STRING + valueOf: $hl7v2Component + - expressionType: resource + valueOf: datatypes/XPN/XPNExtension \ No newline at end of file diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/XPN/XPNExtension.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/XPN/XPNExtension.yml new file mode 100644 index 00000000000..be88228b014 --- /dev/null +++ b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/XPN/XPNExtension.yml @@ -0,0 +1,110 @@ +# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +url: + type: SYSTEM_URL + valueOf: xpn-human-name + +extension: + vars: + xpn2: String, XPN.2 + xpn3: String, XPN.3 + xpn4: String, XPN.4 + xpn7: String, XPN.7 + xpn8: String, XPN.8 + xpn9: STRING_ALL, XPN.9 + xpn12: String, XPN.12 + xpn13: String, XPN.13 + xpn14: String, XPN.14 + expressionType: nested + generateList: true + expressions: + - expressionType: nested + condition: $xpn2 NOT_NULL + expressionsMap: + url: + type: STRING + valueOf: XPN.2 + valueString: + type: STRING + expressionType: HL7Spec + valueOf: XPN.2 + - expressionType: nested + condition: $xpn3 NOT_NULL + expressionsMap: + url: + type: STRING + valueOf: XPN.3 + valueString: + type: STRING + expressionType: HL7Spec + valueOf: XPN.3 + - expressionType: nested + condition: $xpn4 NOT_NULL + expressionsMap: + url: + type: STRING + valueOf: XPN.4 + valueString: + type: STRING + expressionType: HL7Spec + valueOf: XPN.4 + - expressionType: nested + condition: $xpn7 NOT_NULL + expressionsMap: + url: + type: STRING + valueOf: XPN.7 + valueString: + type: STRING + expressionType: HL7Spec + valueOf: XPN.7 + - expressionType: nested + condition: $xpn8 NOT_NULL + expressionsMap: + url: + type: STRING + valueOf: XPN.8 + valueString: + type: STRING + expressionType: HL7Spec + valueOf: XPN.8 + - expressionType: nested + condition: $xpn9 NOT_NULL + expressionsMap: + url: + type: STRING + value: XPN.9 + valueCodeableConcept: + valueOf: datatypes/CE/CodeableConcept + expressionType: resource + specs: XPN.9 + - expressionType: nested + condition: $xpn12 NOT_NULL + expressionsMap: + url: + type: STRING + value: XPN.12 + valueString: + type: STRING + valueOf: $xpn12 + expressionType: HL7Spec + - expressionType: nested + condition: $xpn13 NOT_NULL + expressionsMap: + url: + type: STRING + value: XPN.13 + valueString: + type: STRING + valueOf: $xpn13 + expressionType: HL7Spec + - expressionType: nested + condition: $xpn14 NOT_NULL + expressionsMap: + url: + type: STRING + valueOf: XPN.14 + valueString: + type: STRING + expressionType: HL7Spec + valueOf: XPN.14 \ No newline at end of file diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/XTN/ContactPoint.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/XTN/ContactPoint.yml new file mode 100644 index 00000000000..1fa5982ce89 --- /dev/null +++ b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/XTN/ContactPoint.yml @@ -0,0 +1,233 @@ +# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +value: + expressionType: nested + vars: + telEquipType: String, XTN.3 + commAddress: String, XTN.4 + unformattedTelNum: String, XTN.12 + expressions: + - condition: $telEquipType EQUALS Internet || $telEquipType EQUALS X.400 + valueOf: $commAddress + - condition: $telEquipType NOT_EQUALS Internet && $telEquipType NOT_EQUALS X.400 && $unformattedTelNum NOT_NULL + valueOf: $unformattedTelNum + - condition: $telEquipType NULL && $unformattedTelNum NOT_NULL + valueOf: $unformattedTelNum + +#mapping from HL7 Concept Map: TelecomUseCode +#https://docs.google.com/spreadsheets/d/1EE3a5UIGXLi8wMDr49fWTEVx8QS2GFqYgitE3vLOQTQ/edit#gid=0 +use_1: + condition: $xtnUse EQUALS PRN && $useCode NULL + type: STRING + value: "home" + vars: + xtnUse: String, XTN.2 + +use_2: + condition: $xtnUse EQUALS WPN && $useCode NULL + type: STRING + value: "work" + vars: + xtnUse: String, XTN.2 + +use_3: + condition: $xtnUse EQUALS BPN && $useCode NULL + type: STRING + value: "mobile" + vars: + xtnUse: String, XTN.2 + +use_4: + condition: $useCode NOT_NULL + type: STRING + value: $useCode + +#mapping from HL7 Concept Map: TelecomEquipmentType +#https://docs.google.com/spreadsheets/d/1FhoR5oxEWdHmpR5S0_wYPstdy1lwv7rL-JWJu_DE_Vs/edit#gid=0 +system_1: + # CP maps to "mobile" but that is not a valid option for system + condition: $equipType EQUALS PH || $equipType EQUALS CP + type: STRING + valueOf: "phone" + vars: + equipType: String, XTN.3 + +system_2: + condition: $equipType EQUALS FX + type: STRING + valueOf: "fax" + vars: + equipType: String, XTN.3 + +system_3: + condition: $equipType EQUALS Internet || $equipType EQUALS X.400 + type: STRING + valueOf: "email" + vars: + equipType: String, XTN.3 + +system_4: + condition: $equipType EQUALS BP + type: STRING + valueOf: "pager" + vars: + equipType: String, XTN.3 + +system_5: + condition: $equipType EQUALS MD || $equipType EQUALS SAT || $equipType EQUALS TDD || $equipType EQUALS TTY + type: STRING + valueOf: "other" + vars: + equipType: String, XTN.3 + +system_6: + condition: $telEquipType NULL && $commAddress NOT_NULL + valueOf: "email" + vars: + telEquipType: String, XTN.3 + commAddress: String, XTN.4 + +system_7: + condition: $telEquipType NULL && $commAddress NULL + expressionType: nested + vars: + telEquipType: String, XTN.3 + commAddress: String, XTN.4 + expressionsMap: + extension: + generateList: true + expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: "data-absent-reason" + valueCode: + value: unknown + +period: + vars: + startDate: XTN.13 + endDate: XTN.14 + condition: $startDate NOT_NULL || $endDate NOT_NULL + expressionType: nested + expressionsMap: + start: + valueOf: "GeneralUtils.dateTimeWithZoneId(startDate,ZONEID)" + expressionType: JEXL + _start: + expressionType: nested + condition: $startDate NOT_NULL + expressionsMap: + extension_1: + generateList: true + expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: hl7v2-date-time + valueString: + type: STRING + valueOf: $startDate + expressionType: HL7Spec + end: + valueOf: "GeneralUtils.dateTimeWithZoneId(endDate,ZONEID)" + expressionType: JEXL + _end: + expressionType: nested + condition: $endDate NOT_NULL + expressionsMap: + extension_1: + generateList: true + expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: hl7v2-date-time + valueString: + type: STRING + valueOf: $endDate + expressionType: HL7Spec + +rank: + type: POSITIVEINT + valueOf: XTN.18 + expressionType: HL7Spec + +extension: + generateList: true + expressionType: nested + expressions: + - condition: $countryCode NOT_NULL + expressionType: nested + vars: + countryCode: String, XTN.5 + expressionsMap: + url: + type: SYSTEM_URL + value: contactpoint-country + valueString: + value: $countryCode + - condition: $areaCode NOT_NULL + expressionType: nested + vars: + areaCode: String, XTN.6 + expressionsMap: + url: + type: SYSTEM_URL + value: contactpoint-area + valueString: + value: $areaCode + - condition: $telEquipType NOT_EQUALS Internet && $telEquipType NOT_EQUALS X.400 && $contactPointLocal NOT_NULL + expressionType: nested + vars: + telEquipType: String, XTN.3 + contactPointLocal: String, XTN.7 + expressionsMap: + url: + type: SYSTEM_URL + value: contactpoint-local + valueString: + value: $contactPointLocal + - condition: $telEquipType NULL && $contactPointLocal NOT_NULL + expressionType: nested + vars: + telEquipType: String, XTN.3 + contactPointLocal: String, XTN.7 + expressionsMap: + url: + type: SYSTEM_URL + value: contactpoint-local + valueString: + value: $contactPointLocal + - condition: $numExt NOT_NULL + expressionType: nested + vars: + numExt: String, XTN.8 + expressionsMap: + url: + type: SYSTEM_URL + value: contactpoint-extension + valueString: + value: $numExt + - expressionType: resource + valueOf: datatypes/XTN/XTNExtension + - generateList: true + expressionType: nested + condition: $hl7v2Field NOT_NULL + expressionsMap: + url: + type: SYSTEM_URL + value: hl7v2Field + valueString: + type: STRING + valueOf: $hl7v2Field + - generateList: true + expressionType: nested + condition: $hl7v2Component NOT_NULL + expressionsMap: + url: + type: SYSTEM_URL + value: hl7v2Component + valueString: + type: STRING + valueOf: $hl7v2Component diff --git a/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/XTN/XTNExtension.yml b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/XTN/XTNExtension.yml new file mode 100644 index 00000000000..660874eead5 --- /dev/null +++ b/prime-router/metadata/HL7/datatypes/v251/hl7/datatypes/XTN/XTNExtension.yml @@ -0,0 +1,81 @@ +# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +url: + type: SYSTEM_URL + value: xtn-contact-point + +extension: + generateList: true + expressionType: nested + expressions: + - condition: $xtn2 NOT_NULL + expressionType: nested + vars: + xtn2: String, XTN.2 + expressionsMap: + url: + type: STRING + value: XTN.2 + valueString: + value: $xtn2 + - condition: $xtn3 NOT_NULL + expressionType: nested + vars: + xtn3: String, XTN.3 + expressionsMap: + url: + type: STRING + value: XTN.3 + valueString: + value: $xtn3 + - condition: $xtn4 NOT_NULL + expressionType: nested + vars: + xtn4: String, XTN.4 + expressionsMap: + url: + type: STRING + value: XTN.4 + valueString: + value: $xtn4 + - condition: $xtn7 NOT_NULL + expressionType: nested + vars: + xtn7: String, XTN.7 + expressionsMap: + url: + type: STRING + value: XTN.7 + valueString: + value: $xtn7 + - condition: $xtn9 NOT_NULL + expressionType: nested + vars: + xtn9: String, XTN.9 + expressionsMap: + url: + type: STRING + value: XTN.9 + valueString: + type: STRING + valueOf: $xtn9 + - condition: $xtn11 NOT_NULL + expressionType: nested + vars: + xtn11: String, XTN.11 + expressionsMap: + url: + type: STRING + value: XTN.11 + valueString: + value: $xtn11 + - condition: $xtn12 NOT_NULL + expressionType: nested + vars: + xtn12: String, XTN.12 + expressionsMap: + url: + type: STRING + value: XTN.12 + valueString: + value: $xtn12 diff --git a/prime-router/metadata/HL7/v251-elr/config.properties b/prime-router/metadata/HL7/v251-elr/config.properties new file mode 100644 index 00000000000..9362725bdf4 --- /dev/null +++ b/prime-router/metadata/HL7/v251-elr/config.properties @@ -0,0 +1,5 @@ +base.path.resource=./metadata/HL7/v251-elr +supported.hl7.messages=ORU_R01,ORM_O01 +default.zoneid=+00:00 +additional.conceptmap.file= +additional.resources.location=./metadata/HL7/datatypes/v251 \ No newline at end of file diff --git a/prime-router/metadata/HL7/v251-elr/fhir/resourcemapping.yml b/prime-router/metadata/HL7/v251-elr/fhir/resourcemapping.yml new file mode 100644 index 00000000000..6c73f0434b7 --- /dev/null +++ b/prime-router/metadata/HL7/v251-elr/fhir/resourcemapping.yml @@ -0,0 +1,23 @@ +Patient: org.hl7.fhir.r4.model.Patient +Encounter: org.hl7.fhir.r4.model.Encounter +Observation: org.hl7.fhir.r4.model.Observation +AllergyIntolerance: org.hl7.fhir.r4.model.AllergyIntolerance +Condition: org.hl7.fhir.r4.model.Condition +Practitioner: org.hl7.fhir.r4.model.Practitioner +PractitionerRole: org.hl7.fhir.r4.model.PractitionerRole +DiagnosticReport: org.hl7.fhir.r4.model.DiagnosticReport +Immunization: org.hl7.fhir.r4.model.Immunization +Organization: org.hl7.fhir.r4.model.Organization +MessageHeader: org.hl7.fhir.r4.model.MessageHeader +Medication: org.hl7.fhir.r4.model.Medication +Specimen: org.hl7.fhir.r4.model.Specimen +Procedure: org.hl7.fhir.r4.model.Procedure +DocumentReference: org.hl7.fhir.r4.model.DocumentReference +ServiceRequest: org.hl7.fhir.r4.model.ServiceRequest +MedicationRequest: org.hl7.fhir.r4.model.MedicationRequest +Device: org.hl7.fhir.r4.model.Device +Coverage: org.hl7.fhir.r4.model.Coverage +RelatedPerson: org.hl7.fhir.r4.model.RelatedPerson +Provenance: org.hl7.fhir.r4.model.Provenance +Location: org.hl7.fhir.r4.model.Location +EpisodeOfCare: org.hl7.fhir.r4.model.EpisodeOfCare \ No newline at end of file diff --git a/prime-router/metadata/HL7/v251-elr/hl7/codesystem/CodingSystemMapping.yml b/prime-router/metadata/HL7/v251-elr/hl7/codesystem/CodingSystemMapping.yml new file mode 100644 index 00000000000..08270014ad8 --- /dev/null +++ b/prime-router/metadata/HL7/v251-elr/hl7/codesystem/CodingSystemMapping.yml @@ -0,0 +1,4538 @@ +# Coding System for values from https://www.hl7.org/fhir/v2/0396/index.html +--- + +- id: "ACR" + description: "American College of Radiology finding codes" + url: "http://terminology.hl7.org/CodeSystem/ACR" + oid: "urn:oid:2.16.840.1.113883.6.76" +- id: "ART" + description: "WHO Adverse Reaction Terms" + url: "http://terminology.hl7.org/CodeSystem/art" + oid: "urn:oid:2.16.840.1.113883.6.74" +- id: "AS4" + description: "ASTM E1238/ E1467 Universal" + url: "http://terminology.hl7.org/CodeSystem/AS4" + oid: "urn:oid:2.16.840.1.113883.6.30" +- id: "AS4E" + description: "AS4 Neurophysiology Codes" + url: "http://terminology.hl7.org/CodeSystem/AS4E" + oid: "urn:oid:2.16.840.1.113883.6.78" + +- id: "C5" + description: "CPT-5" + url: "http://terminology.hl7.org/CodeSystem/C5" + oid: "urn:oid:2.16.840.1.113883.6.82" +- id: "CAS" + description: "Chemical abstract codes" + url: "http://terminology.hl7.org/CodeSystem/CAS" + oid: "urn:oid:2.16.840.1.113883.6.61" +- id: "CCC" + description: "Clinical Care Classification system" + url: "http://terminology.hl7.org/CodeSystem/CCC" + oid: "urn:oid:2.16.840.1.113883.6.236" +- id: "CD2" + description: "American Dental Association's Current Dental Terminology 2 (CDT-2) codes." + url: "http://terminology.hl7.org/CodeSystem/CD2" + oid: "urn:oid:2.16.840.1.113883.6.13" +- id: "CDCA" + description: "CDC Analyte Codes" + url: "http://terminology.hl7.org/CodeSystem/CDCA" + oid: "urn:oid:2.16.840.1.113883.6.57" +- id: "CDCM" + description: "CDC Methods/Instruments Codes" + url: "http://terminology.hl7.org/CodeSystem/CDCM" + oid: "urn:oid:2.16.840.1.113883.6.58" +- id: "CDS" + description: "CDC Surveillance" + url: "http://terminology.hl7.org/CodeSystem/CDS" + oid: "urn:oid:2.16.840.1.113883.6.79" +- id: "CE" + description: "CEN ECG diagnostic codes" + url: "http://terminology.hl7.org/CodeSystem/CE" + oid: "urn:oid:2.16.840.1.113883.6.80" +- id: "CLP" + description: "CLIP" + url: "http://terminology.hl7.org/CodeSystem/CLP" + oid: "urn:oid:2.16.840.1.113883.6.81" +- id: "CPTM" + description: "CPT Modifier Code" + url: "http://www.ama-assn.org/go/cpt" + oid: "urn:oid:2.16.840.1.113883.6.12" +- id: "CST" + description: "COSTART" + url: "http://terminology.hl7.org/CodeSystem/CST" + oid: "urn:oid:2.16.840.1.113883.6.62" +- id: "CVX" + description: "CDC Vaccine Codes" + url: "http://hl7.org/fhir/sid/cvx" + oid: "urn:oid:2.16.840.1.113883.6.59" +- id: "DCM" + description: "DICOM Controlled Terminology" + url: "http://dicom.nema.org/resources/ontology/DCM" + oid: "urn:oid:1.2.840.10008.2.16.4" +- id: "E" + description: "EUCLIDES" + url: "http://terminology.hl7.org/CodeSystem/euclides" + oid: "urn:oid:2.16.840.1.113883.6.34" +- id: "E5" + description: "Euclides quantity codes" + url: "http://terminology.hl7.org/CodeSystem/E5" + oid: "urn:oid:2.16.840.1.113883.6.35" +- id: "E6" + description: "Euclides Lab method codes" + url: "http://terminology.hl7.org/CodeSystem/E6" + oid: "urn:oid:2.16.840.1.113883.6.36" +- id: "E7" + description: "Euclides Lab equipment codes" + url: "http://terminology.hl7.org/CodeSystem/E7" + oid: "urn:oid:2.16.840.1.113883.6.37" +- id: "ENZC" + description: "Enzyme Codes" + url: "http://terminology.hl7.org/CodeSystem/ENZC" + oid: "urn:oid:2.16.840.1.113883.6.33" +- id: "FDDC" + description: "First DataBank Drug Codes" + url: "http://terminology.hl7.org/CodeSystem/FDDC" + oid: "urn:oid:2.16.840.1.113883.6.64" +- id: "FDDX" + description: "First DataBank Diagnostic Codes" + url: "http://terminology.hl7.org/CodeSystem/FDDX" + oid: "urn:oid:2.16.840.1.113883.6.63" +- id: "FDK" + description: "FDA K10" + url: "http://terminology.hl7.org/CodeSystem/fdk" + oid: "urn:oid:2.16.840.1.113883.6.38" + +- id: "HB" + description: "HIBCC" + url: "http://terminology.hl7.org/CodeSystem/hibccHIN" + oid: "urn:oid:2.16.840.1.113883.6.40" +- id: "HCPCS" + description: "The Healthcare Common Procedure Coding System (HCPCS)" + url: "http://terminology.hl7.org/CodeSystem/HCPCS" + oid: "urn:oid:2.16.840.1.113883.6.14" +- id: "HHC" + description: "Home Health Care" + url: "http://terminology.hl7.org/CodeSystem/hhcc" + oid: "urn:oid:2.16.840.1.113883.6.17" +- id: "hi" + description: "Health Outcomes" + url: "http://terminology.hl7.org/CodeSystem/hi" + oid: "urn:oid:2.16.840.1.113883.6.39" +- id: "HPC" + description: "CMS (formerly HCFA )Procedure Codes (HCPCS)" + url: "http://terminology.hl7.org/CodeSystem/HCPCS" + oid: "urn:oid:2.16.840.1.113883.6.14" +- id: "I10" + description: "ICD-10" + # change from http://hl7.org/fhir/sid/icd-10 to http://hl7.org/fhir/sid/icd-10-cm, assuming US ICD-10-CM system + url: "http://hl7.org/fhir/sid/icd-10-cm" + oid: "urn:oid:2.16.840.1.113883.6.3" +- id: "ICD-10" + description: "ICD-10" + # change from http://hl7.org/fhir/sid/icd-10 to http://hl7.org/fhir/sid/icd-10-cm, assuming US ICD-10-CM system + url: "http://hl7.org/fhir/sid/icd-10-cm" + oid: "urn:oid:2.16.840.1.113883.6.3" +- id: "I10P" + description: "ICD-10 Procedure Codes" + url: "http://www.cms.gov/Medicare/Coding/ICD10" + oid: "urn:oid:2.16.840.1.113883.6.4" +- id: "I9" + description: "ICD9" + url: "http://terminology.hl7.org/CodeSystem/icd9" + oid: "urn:oid:2.16.840.1.113883.6.42" +- id: "ICD-9" + description: "ICD9" + url: "http://terminology.hl7.org/CodeSystem/icd9" + oid: "urn:oid:2.16.840.1.113883.6.42" +- id: "I9C" + description: "ICD-9CM" + url: "http://terminology.hl7.org/CodeSystem/icd9cm" + oid: "urn:oid:2.16.840.1.113883.6.2" +- id: "I9CDX" + description: "ICD-9CM Diagnosis codes" + url: "http://terminology.hl7.org/CodeSystem/ICD-9CM-diagnosiscodes" + oid: "urn:oid:2.16.840.1.113883.6.103" +- id: "I9CP" + description: "ICD-9CM Procedure codes" + url: "http://terminology.hl7.org/CodeSystem/ICD-9CM-procedurecodes" + oid: "urn:oid:2.16.840.1.113883.6.104" +- id: "IBT" + description: "ISBT" + url: "http://terminology.hl7.org/CodeSystem/ib" + oid: "urn:oid:2.16.840.1.113883.6.18" + +- id: "ICD10CA" + description: "ICD-10 Canada" + url: "http://hl7.org/fhir/sid/icd-10-ca" + oid: "urn:oid:2.16.840.1.113883.6.94" +- id: "ICD10GM2007" + description: "ICD 10 Germany v2007" + url: "http://terminology.hl7.org/CodeSystem/dmdICD10" + oid: "urn:oid:2.16.840.1.113883.6.3.3" +- id: "ICD10GM2008" + description: "ICD 10 Germany v2008" + url: "http://terminology.hl7.org/CodeSystem/dmdICD10" + oid: "urn:oid:2.16.840.1.113883.6.3.3" +- id: "ICDO" + description: "International Classification of Diseases for Oncology" + url: "http://terminology.hl7.org/CodeSystem/icd-o" + oid: "urn:oid:2.16.840.1.113883.6.43" +- id: "ICS" + description: "ICCS" + url: "http://terminology.hl7.org/CodeSystem/ics" + oid: "urn:oid:2.16.840.1.113883.6.41" +- id: "ICSD" + description: "International Classification of Sleep Disorders" + url: "http://terminology.hl7.org/CodeSystem/ICSD" + oid: "urn:oid:2.16.840.1.113883.6.45" + +- id: "IUPC" + description: "IUPAC/IFCC Component Codes" + url: "http://terminology.hl7.org/CodeSystem/IUPC" + oid: "urn:oid:2.16.840.1.113883.6.47" +- id: "IUPP" + description: "IUPAC/IFCC Property Codes" + url: "http://terminology.hl7.org/CodeSystem/IUPP" + oid: "urn:oid:2.16.840.1.113883.6.46" + +- id: "JC8" + description: "Japanese Chemistry" + url: "http://terminology.hl7.org/CodeSystem/JC8" + oid: "urn:oid:2.16.840.1.113883.6.48" + +- id: "LN" + description: "Logical Observation Identifier Names and Codes (LOINC)" + url: "http://loinc.org" + oid: "urn:oid:2.16.840.1.113883.6.1" +- id: "L" + description: "Local general code" + url: "https://terminology.hl7.org/CodeSystem-v2-0396.html#v2-0396-99zzzorL" +- id: "MDC" + description: "Medical Device Communication" + url: "urn:iso:std:iso:11073:10101" + oid: "urn:oid:2.16.840.1.113883.6.24" +- id: "MDDX" + description: "Medispan Diagnostic Codes" + url: "http://terminology.hl7.org/CodeSystem/MDDX" + oid: "urn:oid:2.16.840.1.113883.6.65" +- id: "MEDC" + description: "Medical Economics Drug Codes" + url: "http://terminology.hl7.org/CodeSystem/MEDC" + oid: "urn:oid:2.16.840.1.113883.6.67" + +- id: "MEDX" + description: "Medical Economics Diagnostic Codes" + url: "http://terminology.hl7.org/CodeSystem/MEDX" + oid: "urn:oid:2.16.840.1.113883.6.66" +- id: "MGPI" + description: "Medispan GPI" + url: "http://terminology.hl7.org/CodeSystem/MGPI" + oid: "urn:oid:2.16.840.1.113883.6.68" +- id: "MVX" + description: "CDC Vaccine Manufacturer Codes" + url: "http://terminology.hl7.org/CodeSystem/MVX" + oid: "urn:oid:2.16.840.1.113883.6.60" +- id: "NDA" + description: "NANDA" + url: "http://www.nanda.org/" + oid: "urn:oid:2.16.840.1.113883.6.20" +- id: "NDC" + description: "National drug codes" + url: "http://hl7.org/fhir/sid/ndc" + oid: "urn:oid:2.16.840.1.113883.6.69" +- id: "NIC" + description: "Nursing Interventions Classification" + url: "https://nursing.uiowa.edu/cncce/nursing-interventions-classification-overview" + oid: "urn:oid:2.16.840.1.113883.6.15" + +- id: "OHA" + description: "Omaha System" + url: "http://terminology.hl7.org/CodeSystem/oms" + oid: "urn:oid:2.16.840.1.113883.6.98" + +- id: "POS" + description: "POS Codes" + url: "http://terminology.hl7.org/CodeSystem/POS" + oid: "urn:oid:2.16.840.1.113883.6.50" + +- id: "SCT" + description: "SNOMED Clinical Terms" + url: "http://snomed.info/sct" + oid: "urn:oid:2.16.840.1.113883.6.96" + +- id: "SDM" + description: "SNOMED-DICOM Microglossary" + url: "http://terminology.hl7.org/CodeSystem/SDM" + oid: "urn:oid:2.16.840.1.113883.6.53" +- id: "SNM" + description: "Systemized Nomenclature in Medicine (SNOMED)" + url: "http://terminology.hl7.org/CodeSystem/snm" + oid: "urn:oid:2.16.840.1.113883.6.5" +- id: "SNM3" + description: "SNOMED International" + url: "http://terminology.hl7.org/CodeSystem/SNM3" + oid: "urn:oid:2.16.840.1.113883.6.51" +- id: "SNT" + description: "SNOMED topology codes (anatomic sites)" + url: "http://terminology.hl7.org/CodeSystem/SNT" + oid: "urn:oid:2.16.840.1.113883.6.52" + +- id: "UC" + description: "UCDS" + url: "http://terminology.hl7.org/CodeSystem/UC" + oid: "urn:oid:2.16.840.1.113883.6.54" +- id: "UCUM" + description: "UCUM code set for units of measure(from Regenstrief)" + url: "http://unitsofmeasure.org" + oid: "urn:oid:2.16.840.1.113883.6.8" +- id: "UMD" + description: "MDNS" + url: "http://terminology.hl7.org/CodeSystem/UMD" + oid: "urn:oid:2.16.840.1.113883.6.75" +- id: "UML" + description: "Unified Medical Language" + url: "http://terminology.hl7.org/CodeSystem/UML" + oid: "urn:oid:2.16.840.1.113883.6.56" +- id: "UPC" + description: "Universal Product Code" + url: "http://terminology.hl7.org/CodeSystem/UPC" + oid: "urn:oid:2.16.840.1.113883.6.55" +- id: "W4" + description: "WHO rec\\# code with ASTM extension" + url: "http://terminology.hl7.org/CodeSystem/W4" + oid: "urn:oid:2.16.840.1.113883.6.72" + +- id: "PHOccupationCDCCensus2010" + description: "Occupation CDC Census 2010" + url: "http://terminology.hl7.org/CodeSystem/PHOccupationCDCCensus2010" + oid: "urn:oid:2.16.840.1.114222.4.5.314" +- id: "v3-ManagedParticipationStatus" + description: "ManagedParticipationStatus" + url: "http://terminology.hl7.org/CodeSystem/v3-ManagedParticipationStatus" + oid: "urn:oid:2.16.840.1.113883.5.1062" +- id: "v2-0280" + description: "referralPriority" + url: "http://terminology.hl7.org/CodeSystem/v2-0280" + oid: "urn:oid:2.16.840.1.113883.18.173" +- id: "NHSNProcedureCategory" + description: "NHSN Procedure Category" + url: "http://terminology.hl7.org/CodeSystem/NHSNProcedureCategory" + oid: "urn:oid:2.16.840.1.113883.6.271" +- id: "v2-0003" + description: "eventType" + url: "http://terminology.hl7.org/CodeSystem/v2-0003" + oid: "urn:oid:2.16.840.1.113883.18.4" +- id: "special-values" + description: "SpecialValues" + url: "http://terminology.hl7.org/CodeSystem/special-values" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1049" +- id: "communication-not-done-reason" + description: "CommunicationNotDoneReason" + url: "http://terminology.hl7.org/CodeSystem/communication-not-done-reason" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1077" +- id: "v2-0146" + description: "amountType" + url: "http://terminology.hl7.org/CodeSystem/v2-0146" + oid: "urn:oid:2.16.840.1.113883.18.67" +- id: "v2-0516" + description: "errorSeverity" + url: "http://terminology.hl7.org/CodeSystem/v2-0516" + oid: "urn:oid:2.16.840.1.113883.18.337" +- id: "v2-0238" + description: "eventSeriousness" + url: "http://terminology.hl7.org/CodeSystem/v2-0238" + oid: "urn:oid:2.16.840.1.113883.18.137" +- id: "v2-0392" + description: "matchReason" + url: "http://terminology.hl7.org/CodeSystem/v2-0392" + oid: "urn:oid:2.16.840.1.113883.18.243" +- id: "medicationrequest-course-of-therapy" + description: "MedicationRequest Course of Therapy Codes" + url: "http://terminology.hl7.org/CodeSystem/medicationrequest-course-of-therapy" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1327" +- id: "audit-event-outcome" + description: "AuditEventOutcome" + url: "http://terminology.hl7.org/CodeSystem/audit-event-outcome" + oid: "urn:oid:2.16.840.1.113883.4.642.1.0" +- id: "v2-0404" + description: "languageProficiency" + url: "http://terminology.hl7.org/CodeSystem/v2-0404" + oid: "urn:oid:2.16.840.1.113883.18.253" +- id: "v2-0384" + description: "substanceType" + url: "http://terminology.hl7.org/CodeSystem/v2-0384" + oid: "urn:oid:2.16.840.1.113883.18.237" +- id: "benefit-type" + description: "Benefit Type Codes" + url: "http://terminology.hl7.org/CodeSystem/benefit-type" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1176" +- id: "claim-type" + description: "Claim Type Codes" + url: "http://terminology.hl7.org/CodeSystem/claim-type" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1156" +- id: "catalogType" + description: "CatalogType" + url: "http://terminology.hl7.org/CodeSystem/catalogType" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1288" +- id: "practitioner-role" + description: "Practitioner role" + url: "http://terminology.hl7.org/CodeSystem/practitioner-role" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1132" +- id: "v2-0107" + description: "deferredResponseType" + url: "http://terminology.hl7.org/CodeSystem/v2-0107" + oid: "urn:oid:2.16.840.1.113883.18.44" +- id: "DEEDS210" + description: "DEEDS2.10" + url: "http://terminology.hl7.org/CodeSystem/DEEDS210" + oid: "urn:oid:2.16.840.1.113883.6.102.2.10" +- id: "v2-0557" + description: "payeeType" + url: "http://terminology.hl7.org/CodeSystem/v2-0557" + oid: "urn:oid:2.16.840.1.113883.18.361" +- id: "v2-0279" + description: "allowSubstitution" + url: "http://terminology.hl7.org/CodeSystem/v2-0279" + oid: "urn:oid:2.16.840.1.113883.18.172" +- id: "reaction-event-certainty" + description: "AllergyIntoleranceCertainty" + url: "http://terminology.hl7.org/CodeSystem/reaction-event-certainty" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1276" +- id: "v3-AcknowledgementCondition" + description: "AcknowledgementCondition" + url: "http://terminology.hl7.org/CodeSystem/v3-AcknowledgementCondition" + oid: "urn:oid:2.16.840.1.113883.5.1050" +- id: "v2-0916" + description: "relevantClincialInformation" + url: "http://terminology.hl7.org/CodeSystem/v2-0916" + oid: "urn:oid:2.16.840.1.113883.18.422" +- id: "v2-0445" + description: "identityReliability" + url: "http://terminology.hl7.org/CodeSystem/v2-0445" + oid: "urn:oid:2.16.840.1.113883.18.285" +- id: "v2-0500" + description: "consentDisclosureLevel" + url: "http://terminology.hl7.org/CodeSystem/v2-0500" + oid: "urn:oid:2.16.840.1.113883.18.324" +- id: "v2-0150" + description: "certificationPatientType" + url: "http://terminology.hl7.org/CodeSystem/v2-0150" + oid: "urn:oid:2.16.840.1.113883.18.71" +- id: "X12.3" + description: "X12.3 Data Elementary Dictionary" + url: "http://terminology.hl7.org/CodeSystem/X12.3" + oid: "urn:oid:2.16.840.1.113883.6.255" +- id: "allerg-intol-substance-exp-risk" + description: "AllergyIntoleranceSubstanceExposureRisk" + url: "http://terminology.hl7.org/CodeSystem/allerg-intol-substance-exp-risk" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1275" +- id: "v2-0717" + description: "accessRestrictionValue" + url: "http://terminology.hl7.org/CodeSystem/v2-0717" + oid: "urn:oid:2.16.840.1.113883.18.388" +- id: "diagnosis-role" + description: null + url: "http://terminology.hl7.org/CodeSystem/diagnosis-role" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1054" +- id: "v2-0202" + description: "telecommunicationEquipmentType" + url: "http://terminology.hl7.org/CodeSystem/v2-0202" + oid: "urn:oid:2.16.840.1.113883.18.107" +- id: "sic" + description: "US Census Bureau" + url: "http://terminology.hl7.org/CodeSystem/sic" + oid: "urn:oid:2.16.840.1.113883.6.232" +- id: "dicomMDLTY" + description: "DICOM modality codes" + url: "http://terminology.hl7.org/CodeSystem/dicomMDLTY" + oid: "urn:oid:2.16.840.1.113883.6.31" +- id: "v3-AddressPartType" + description: "AddressPartType" + url: "http://terminology.hl7.org/CodeSystem/v3-AddressPartType" + oid: "urn:oid:2.16.840.1.113883.5.16" +- id: "v3-DataOperation" + description: "DataOperation" + url: "http://terminology.hl7.org/CodeSystem/v3-DataOperation" + oid: "urn:oid:2.16.840.1.113883.5.1123" +- id: "GCDF" + description: "GCDF" + url: "http://terminology.hl7.org/CodeSystem/GCDF" + oid: "urn:oid:2.16.840.1.113883.4.79" +- id: "v2-0255" + description: "durationCategories" + url: "http://terminology.hl7.org/CodeSystem/v2-0255" + oid: "urn:oid:2.16.840.1.113883.18.150" +- id: "v3-ActRelationshipJoin" + description: "ActRelationshipJoin" + url: "http://terminology.hl7.org/CodeSystem/v3-ActRelationshipJoin" + oid: "urn:oid:2.16.840.1.113883.5.12" +- id: "v3-EntityNameUse" + description: "EntityNameUse" + url: "http://terminology.hl7.org/CodeSystem/v3-EntityNameUse" + oid: "urn:oid:2.16.840.1.113883.5.45" +- id: "medication-usage-admin-location" + description: "MedicationUsage Administration Location Codes" + url: "http://terminology.hl7.org/CodeSystem/medication-usage-admin-location" + oid: "urn:oid:2.16.840.1.113883.4.642.1.0" +- id: "v2-0469" + description: "packagingStatus" + url: "http://terminology.hl7.org/CodeSystem/v2-0469" + oid: "urn:oid:2.16.840.1.113883.18.298" +- id: "v2-0193" + description: "amountClass" + url: "http://terminology.hl7.org/CodeSystem/v2-0193" + oid: "urn:oid:2.16.840.1.113883.18.103" +- id: "location-physical-type" + description: "Location type" + url: "http://terminology.hl7.org/CodeSystem/location-physical-type" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1108" +- id: "FDBHICCode" + description: "FDB HIC Code" + url: "http://terminology.hl7.org/CodeSystem/FDBHICCode" + oid: "urn:oid:2.16.840.1.113883.3.84" +- id: "v2-0243" + description: "identityMayBeDivulged" + url: "http://terminology.hl7.org/CodeSystem/v2-0243" + oid: "urn:oid:2.16.840.1.113883.18.142" +- id: "v3-VaccineType" + description: "VaccineType" + url: "http://terminology.hl7.org/CodeSystem/v3-VaccineType" + oid: "urn:oid:2.16.840.1.113883.5.145" +- id: "v2-0490" + description: "specimenRejectReason" + url: "http://terminology.hl7.org/CodeSystem/v2-0490" + oid: "urn:oid:2.16.840.1.113883.18.314" +- id: "subscription-channel-type" + description: "SubscriptionChannel Type Codes" + url: "http://terminology.hl7.org/CodeSystem/subscription-channel-type" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1432" +- id: "v2-0185" + description: "preferredMethodOfContact" + url: "http://terminology.hl7.org/CodeSystem/v2-0185" + oid: "urn:oid:2.16.840.1.113883.18.98" +- id: "v2-0351" + description: "nubc-OccurrenceSpan-cs" + url: "http://terminology.hl7.org/CodeSystem/v2-0351" + oid: "urn:oid:2.16.840.1.113883.6.301.8" +- id: "DEEDS416" + description: "DEEDS416" + url: "http://terminology.hl7.org/CodeSystem/DEEDS416" + oid: "urn:oid:2.16.840.1.113883.6.102.4.16" +- id: "v3-hl7PublishingDomain" + description: "HL7PublishingDomain" + url: "http://terminology.hl7.org/CodeSystem/v3-hl7PublishingDomain" + oid: "urn:oid:2.16.840.1.113883.5.1136" +- id: "v2-0214" + description: "specialProgram" + url: "http://terminology.hl7.org/CodeSystem/v2-0214" + oid: "urn:oid:2.16.840.1.113883.18.118" +- id: "v3-ObservationCategory" + description: "ObservationCategory" + url: "http://terminology.hl7.org/CodeSystem/v3-ObservationCategory" + oid: "urn:oid:2.16.840.1.113883.4.642.1.222" +- id: "v2-0428" + description: "incidentType" + url: "http://terminology.hl7.org/CodeSystem/v2-0428" + oid: "urn:oid:2.16.840.1.113883.18.269" +- id: "dicomqry" + description: "DICOM Query Label" + url: "http://terminology.hl7.org/CodeSystem/dicomqry" + oid: "urn:oid:2.16.840.1.113883.6.32" +- id: "v3-ParameterizedDataType" + description: "ParameterizedDataType" + url: "http://terminology.hl7.org/CodeSystem/v3-ParameterizedDataType" + oid: "urn:oid:2.16.840.1.113883.5.87" +- id: "externalCodeSystems" + description: "HL7 Registered External Coding Systems" + url: "http://terminology.hl7.org/CodeSystem/externalCodeSystems" + oid: "urn:oid:2.16.840.1.113883.6" +- id: "device-status-reason" + description: "FHIRDeviceStatusReason" + url: "http://terminology.hl7.org/CodeSystem/device-status-reason" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1082" +- id: "resource-security-category" + description: "ResourceSecurityCategory" + url: "http://terminology.hl7.org/CodeSystem/resource-security-category" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1404" +- id: "v2-0263" + description: "levelOfCare" + url: "http://terminology.hl7.org/CodeSystem/v2-0263" + oid: "urn:oid:2.16.840.1.113883.18.158" +- id: "media-category" + description: "Digital Media Category" + url: "http://terminology.hl7.org/CodeSystem/media-category" + oid: "urn:oid:2.16.840.1.113883.4.642.1.326" +- id: "W1-W2" + description: "WHO rec# drug codes" + url: "http://terminology.hl7.org/CodeSystem/W1-W2" + oid: "urn:oid:2.16.840.1.113883.6.71" +- id: "v2-0326" + description: "visitIndicator" + url: "http://terminology.hl7.org/CodeSystem/v2-0326" + oid: "urn:oid:2.16.840.1.113883.18.199" +- id: "v2-0776" + description: "itemStatus" + url: "http://terminology.hl7.org/CodeSystem/v2-0776" + oid: "urn:oid:2.16.840.1.113883.18.402" +- id: "v3-brazilianProcedureCodesSUS" + description: "Brazilian Procedure Codes SUS" + url: "http://terminology.hl7.org/CodeSystem/v3-brazilianProcedureCodesSUS" + oid: "urn:oid:2.16.840.1.113883.2.21.10" +- id: "v3-HealthcareProviderTaxonomyHIPAA" + description: "Healthcare Provider Taxonomy HIPAA" + url: "http://terminology.hl7.org/CodeSystem/v3-HealthcareProviderTaxonomyHIPAA" + oid: "urn:oid:2.16.840.1.113883.5.53" +- id: "triggerEventID" + description: "Trigger Event ID" + url: "http://terminology.hl7.org/CodeSystem/triggerEventID" + oid: "urn:oid:2.16.840.1.113883.1.18" +- id: "v2-0234" + description: "reportTiming" + url: "http://terminology.hl7.org/CodeSystem/v2-0234" + oid: "urn:oid:2.16.840.1.113883.18.133" +- id: "v2-0371" + description: "additivePreservative" + url: "http://terminology.hl7.org/CodeSystem/v2-0371" + oid: "urn:oid:2.16.840.1.113883.18.229" +- id: "multum" + description: "Multum Lexicon" + url: "http://terminology.hl7.org/CodeSystem/multum" + oid: "urn:oid:2.16.840.1.113883.6.27" +- id: "v2-0388" + description: "processingType" + url: "http://terminology.hl7.org/CodeSystem/v2-0388" + oid: "urn:oid:2.16.840.1.113883.18.239" +- id: "composite-measure-scoring" + description: "CompositeMeasureScoring" + url: "http://terminology.hl7.org/CodeSystem/composite-measure-scoring" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1235" +- id: "v2-0367" + description: "alertLevel" + url: "http://terminology.hl7.org/CodeSystem/v2-0367" + oid: "urn:oid:2.16.840.1.113883.18.225" +- id: "contractaction" + description: "Contract Action Codes" + url: "http://terminology.hl7.org/CodeSystem/contractaction" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1202" +- id: "v3-nuccProviderCodes" + description: "NUCC Health Care Provider Taxonomy" + url: "http://terminology.hl7.org/CodeSystem/v3-nuccProviderCodes" + oid: "urn:oid:2.16.840.1.113883.6.101" +- id: "service-type" + description: "Service type" + url: "http://terminology.hl7.org/CodeSystem/service-type" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1145" +- id: "v3-Currency" + description: "Currency" + url: "http://terminology.hl7.org/CodeSystem/v3-Currency" + oid: "urn:oid:2.16.840.1.113883.5.1058" +- id: "ICD-9CM-procedurecodes" + description: "National Center for Health Statistics" + url: "http://terminology.hl7.org/CodeSystem/ICD-9CM-procedurecodes" + oid: "urn:oid:2.16.840.1.113883.6.104" +- id: "v3-hl7ITSType" + description: "HL7ITSType" + url: "http://terminology.hl7.org/CodeSystem/v3-hl7ITSType" + oid: "urn:oid:2.16.840.1.113883.5.1135" +- id: "v3-MdfHmdRowType" + description: "MdfHmdRowType" + url: "http://terminology.hl7.org/CodeSystem/v3-MdfHmdRowType" + oid: "urn:oid:2.16.840.1.113883.5.76" +- id: "v2-0625" + description: "itemStatus" + url: "http://terminology.hl7.org/CodeSystem/v2-0625" + oid: "urn:oid:2.16.840.1.113883.18.377" +- id: "v3-RoleClass" + description: "RoleClass" + url: "http://terminology.hl7.org/CodeSystem/v3-RoleClass" + oid: "urn:oid:2.16.840.1.113883.5.110" +- id: "v3-AcknowledgementType" + description: "AcknowledgementType" + url: "http://terminology.hl7.org/CodeSystem/v3-AcknowledgementType" + oid: "urn:oid:2.16.840.1.113883.5.18" +- id: "v2-0275" + description: "documentStorageStatus" + url: "http://terminology.hl7.org/CodeSystem/v2-0275" + oid: "urn:oid:2.16.840.1.113883.18.168" +- id: "iso639-3" + description: "ISO 639-3 Language Codes Alpha 3" + url: "http://terminology.hl7.org/CodeSystem/iso639-3" + oid: "urn:oid:1.0.639.3" +- id: "v2-0330" + description: "marketingBasis" + url: "http://terminology.hl7.org/CodeSystem/v2-0330" + oid: "urn:oid:2.16.840.1.113883.18.201" +- id: "medicationrequest-category" + description: "MedicationRequest Category Codes" + url: "http://terminology.hl7.org/CodeSystem/medicationrequest-category" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1323" +- id: "v2-0127" + description: "allergenType" + url: "http://terminology.hl7.org/CodeSystem/v2-0127" + oid: "urn:oid:2.16.840.1.113883.18.54" +- id: "v3-IdentifierReliability" + description: "IdentifierReliability" + url: "http://terminology.hl7.org/CodeSystem/v3-IdentifierReliability" + oid: "urn:oid:2.16.840.1.113883.5.1117" +- id: "v2-0062" + description: "eventReason" + url: "http://terminology.hl7.org/CodeSystem/v2-0062" + oid: "urn:oid:2.16.840.1.113883.18.23" +- id: "v2-0432" + description: "admissionLevelOfCare" + url: "http://terminology.hl7.org/CodeSystem/v2-0432" + oid: "urn:oid:2.16.840.1.113883.18.273" +- id: "epsg-ca" + description: "European Petroleum Survey Group Geodetic Parameter Dataset Coordinate Axis" + url: "http://terminology.hl7.org/CodeSystem/epsg-ca" + oid: "urn:oid:2.16.840.1.113883.6.279" +- id: "expansion-parameter-source" + description: "ExpansionParameterSource" + url: "http://terminology.hl7.org/CodeSystem/expansion-parameter-source" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1279" +- id: "v2-0520" + description: "messageWaitingPriority" + url: "http://terminology.hl7.org/CodeSystem/v2-0520" + oid: "urn:oid:2.16.840.1.113883.18.340" +- id: "v2-0170" + description: "derivedSpecimen" + url: "http://terminology.hl7.org/CodeSystem/v2-0170" + oid: "urn:oid:2.16.840.1.113883.18.88" +- id: "appointment-cancellation-reason" + description: "Appointment cancellation reason" + url: "http://terminology.hl7.org/CodeSystem/appointment-cancellation-reason" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1382" +- id: "v2-0936" + description: "observationType" + url: "http://terminology.hl7.org/CodeSystem/v2-0936" + oid: "urn:oid:2.16.840.1.113883.18.439" +- id: "testscript-profile-destination-types" + description: "Test script profile destination type" + url: "http://terminology.hl7.org/CodeSystem/testscript-profile-destination-types" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1197" +- id: "v2-0465" + description: "name-addressRepresentation" + url: "http://terminology.hl7.org/CodeSystem/v2-0465" + oid: "urn:oid:2.16.840.1.113883.18.295" +- id: "v3-PersonDisabilityType" + description: "PersonDisabilityType" + url: "http://terminology.hl7.org/CodeSystem/v3-PersonDisabilityType" + oid: "urn:oid:2.16.840.1.113883.5.93" +- id: "icd9" + description: "ICD9" + url: "http://terminology.hl7.org/CodeSystem/icd9" + oid: "urn:oid:2.16.840.1.113883.6.42" +- id: "v2-0166" + description: "rxComponentType" + url: "http://terminology.hl7.org/CodeSystem/v2-0166" + oid: "urn:oid:2.16.840.1.113883.18.84" +- id: "v2-0536" + description: "certificateStatus" + url: "http://terminology.hl7.org/CodeSystem/v2-0536" + oid: "urn:oid:2.16.840.1.113883.18.350" +- id: "v2-0473" + description: "formularyStatus" + url: "http://terminology.hl7.org/CodeSystem/v2-0473" + oid: "urn:oid:2.16.840.1.113883.18.301" +- id: "v2-0189" + description: "ethnicGroup" + url: "http://terminology.hl7.org/CodeSystem/v2-0189" + oid: "urn:oid:2.16.840.1.113883.18.100" +- id: "HL70189" + description: "ethnicGroup" + url: "http://terminology.hl7.org/CodeSystem/v2-0189" + oid: "urn:oid:2.16.840.1.113883.18.100" +- id: "v2-0920" + description: "preferredSpecimen-AttributeStatus" + url: "http://terminology.hl7.org/CodeSystem/v2-0920" + oid: "urn:oid:2.16.840.1.113883.18.426" +- id: "benefit-unit" + description: "Unit Type Codes" + url: "http://terminology.hl7.org/CodeSystem/benefit-unit" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1178" +- id: "DEEDS508" + description: "DEEDS508" + url: "http://terminology.hl7.org/CodeSystem/DEEDS508" + oid: "urn:oid:2.16.840.1.113883.6.102.5.8" +- id: "v2-0561" + description: "product-servicesClarification" + url: "http://terminology.hl7.org/CodeSystem/v2-0561" + oid: "urn:oid:2.16.840.1.113883.18.364" +- id: "v2-0131" + description: "contactRole2" + url: "http://terminology.hl7.org/CodeSystem/v2-0131" + oid: "urn:oid:2.16.840.1.113883.18.58" +- id: "v3-HL7ContextConductionStyle" + description: "HL7ContextConductionStyle" + url: "http://terminology.hl7.org/CodeSystem/v3-HL7ContextConductionStyle" + oid: "urn:oid:2.16.840.1.113883.5.1129" +- id: "NHSNSSIAnatomicSite" + description: "NHSN SSI Anatomic Site" + url: "http://terminology.hl7.org/CodeSystem/NHSNSSIAnatomicSite" + oid: "urn:oid:2.16.840.1.113883.6.272" +- id: "v2-0424" + description: "gestationCategory" + url: "http://terminology.hl7.org/CodeSystem/v2-0424" + oid: "urn:oid:2.16.840.1.113883.18.265" +- id: "v3-TelecommunicationAddressUse" + description: "TelecommunicationAddressUse" + url: "http://terminology.hl7.org/CodeSystem/v3-TelecommunicationAddressUse" + oid: "urn:oid:2.16.840.1.113883.5.1011" +- id: "v2-0074" + description: "diagnosticServiceSectionId" + url: "http://terminology.hl7.org/CodeSystem/v2-0074" + oid: "urn:oid:2.16.840.1.113883.18.29" +- id: "whoARTfl" + description: "WHO Adverse Reaction Terms foreign language translations" + url: "http://terminology.hl7.org/CodeSystem/whoARTfl" + oid: "urn:oid:2.16.840.1.113883.6.230" +- id: "v3-loinc" + description: "Logical Observation Identifiers, Names and Codes (LOINC)" + url: "http://loinc.org" + oid: "urn:oid:2.16.840.1.113883.6.1" +- id: "research-study-reason-stopped" + description: "ResearchStudyReasonStopped" + url: "http://terminology.hl7.org/CodeSystem/research-study-reason-stopped" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1249" +- id: "v2-0560" + description: "Quantity Units" + url: "http://terminology.hl7.org/CodeSystem/v2-0560" + oid: "urn:oid:2.16.840.1.113883.18.455" +- id: "v2-0130" + description: "visitUserCodes" + url: "http://terminology.hl7.org/CodeSystem/v2-0130" + oid: "urn:oid:2.16.840.1.113883.18.56" +- id: "v3-ConceptProperty" + description: "HL7 Value Set and Coded Concept Property Codes" + url: "http://terminology.hl7.org/CodeSystem/v3-ConceptProperty" + oid: "urn:oid:2.16.840.1.113883.5.1087" +- id: "nciVersionOfNDF-RT" + description: "NCI Version of NDF-RT" + url: "http://terminology.hl7.org/CodeSystem/nciVersionOfNDF-RT" + oid: "urn:oid:2.16.840.1.113883.3.26.1.5" +- id: "v3-iso4217-HL7" + description: "ISO 4217 Currency code, HL7 use" + url: "http://terminology.hl7.org/CodeSystem/v3-iso4217-HL7" + oid: "urn:oid:2.16.840.1.113883.6.9" +- id: "v2-0425" + description: "newbornType" + url: "http://terminology.hl7.org/CodeSystem/v2-0425" + oid: "urn:oid:2.16.840.1.113883.18.266" +- id: "MDRSPA" + description: "MedDRA Spanish" + url: "http://terminology.hl7.org/CodeSystem/MDRSPA" + oid: "urn:oid:2.16.840.1.113883.6.163.6" +- id: "nmds" + description: "Nursing Minimum Data Set" + url: "http://terminology.hl7.org/CodeSystem/nmds" + oid: "urn:oid:2.16.840.1.113883.6.87" +- id: "v3-ActRelationshipType" + description: "ActRelationshipType" + url: "http://terminology.hl7.org/CodeSystem/v3-ActRelationshipType" + oid: "urn:oid:2.16.840.1.113883.5.1002" +- id: "v3-QueryRequestLimit" + description: "QueryRequestLimit" + url: "http://terminology.hl7.org/CodeSystem/v3-QueryRequestLimit" + oid: "urn:oid:2.16.840.1.113883.5.1112" +- id: "v3-sctemp" + description: "pan-Canadian Temporary Codes" + url: "https://fhir.infoway-inforoute.ca/CodeSystem/sctemp" + oid: "urn:oid:2.16.840.1.113883.2.20.5.2" +- id: "v2-0167" + description: "substitutionStatus" + url: "http://terminology.hl7.org/CodeSystem/v2-0167" + oid: "urn:oid:2.16.840.1.113883.18.85" +- id: "v2-0472" + description: "tqConjunctionId" + url: "http://terminology.hl7.org/CodeSystem/v2-0472" + oid: "urn:oid:2.16.840.1.113883.18.300" +- id: "v2-0921" + description: "certificationType" + url: "http://terminology.hl7.org/CodeSystem/v2-0921" + oid: "urn:oid:2.16.840.1.113883.18.427" +- id: "coverage-class" + description: "Coverage Class Codes" + url: "http://terminology.hl7.org/CodeSystem/coverage-class" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1147" +- id: "v2-0258" + description: "relationshipModifier" + url: "http://terminology.hl7.org/CodeSystem/v2-0258" + oid: "urn:oid:2.16.840.1.113883.18.153" +- id: "mth-icpc2-icd10-7B" + description: "ICPC2-ICD10 Thesaurus, 7-bit" + url: "http://terminology.hl7.org/CodeSystem/mth-icpc2-icd10-7B" + oid: "urn:oid:2.16.840.1.113883.6.142.2" +- id: "NHSNHipReplacement" + description: "NHSN Hip Replacement" + url: "http://terminology.hl7.org/CodeSystem/NHSNHipReplacement" + oid: "urn:oid:2.16.840.1.113883.6.263" +- id: "v2-0937" + description: "observationSubtype" + url: "http://terminology.hl7.org/CodeSystem/v2-0937" + oid: "urn:oid:2.16.840.1.113883.18.440" +- id: "v3-AmericanIndianAlaskaNativeLanguages" + description: "AmericanIndianAlaskaNativeLanguages" + url: "http://terminology.hl7.org/CodeSystem/v3-AmericanIndianAlaskaNativeLanguages" + oid: "urn:oid:2.16.840.1.113883.5.1054" +- id: "v2-0034" + description: "siteAdministered" + url: "http://terminology.hl7.org/CodeSystem/v2-0034" + oid: "urn:oid:2.16.840.1.113883.18.17" +- id: "measure-scoring" + description: "MeasureScoring" + url: "http://terminology.hl7.org/CodeSystem/measure-scoring" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1232" +- id: "audit-event-type" + description: "Audit Event ID" + url: "http://terminology.hl7.org/CodeSystem/audit-event-type" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1136" +- id: "adjudication" + description: "Adjudication Value Codes" + url: "http://terminology.hl7.org/CodeSystem/adjudication" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1171" +- id: "v2-0126" + description: "quantityLimitedRequest" + url: "http://terminology.hl7.org/CodeSystem/v2-0126" + oid: "urn:oid:2.16.840.1.113883.18.53" +- id: "v3-QueryPriority" + description: "QueryPriority" + url: "http://terminology.hl7.org/CodeSystem/v3-QueryPriority" + oid: "urn:oid:2.16.840.1.113883.5.102" +- id: "v2-0063" + description: "relationship" + url: "http://terminology.hl7.org/CodeSystem/v2-0063" + oid: "urn:oid:2.16.840.1.113883.18.24" +- id: "v2-0433" + description: "precaution" + url: "http://terminology.hl7.org/CodeSystem/v2-0433" + oid: "urn:oid:2.16.840.1.113883.18.274" +- id: "v3-CalendarCycle" + description: "Calendar Cycle Codes" + url: "http://terminology.hl7.org/CodeSystem/v3-CalendarCycle" + oid: "urn:oid:2.16.840.1.113883.5.9" +- id: "v2-0761" + description: "drgProcedureDeterminationStatus" + url: "http://terminology.hl7.org/CodeSystem/v2-0761" + oid: "urn:oid:2.16.840.1.113883.18.400" +- id: "iso639-2" + description: "ISO 639-2: Codes for the representation of names of languages -- Part 2:\ + \ Alpha-3 code" + url: "http://terminology.hl7.org/CodeSystem/iso639-2" + oid: "urn:oid:1.0.639.2" +- id: "v2-0331" + description: "facilityType" + url: "http://terminology.hl7.org/CodeSystem/v2-0331" + oid: "urn:oid:2.16.840.1.113883.18.202" +- id: "SCDHEC-GISSpatialAccuracyTiers" + description: "SCDHEC GIS Spatial Accuracy Tiers" + url: "http://terminology.hl7.org/CodeSystem/SCDHEC-GISSpatialAccuracyTiers" + oid: "urn:oid:2.16.840.1.113883.6.241" +- id: "v3-URLScheme" + description: "Universal Resource Locator Scheme" + url: "http://terminology.hl7.org/CodeSystem/v3-URLScheme" + oid: "urn:oid:2.16.840.1.113883.5.143" +- id: "v2-0223" + description: "livingDependency2" + url: "http://terminology.hl7.org/CodeSystem/v2-0223" + oid: "urn:oid:2.16.840.1.113883.18.124" +- id: "codesystem-altcode-kind" + description: "AlternativeCodeKind" + url: "http://terminology.hl7.org/CodeSystem/codesystem-altcode-kind" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1284" +- id: "service-provision-conditions" + description: "ServiceProvisionConditions" + url: "http://terminology.hl7.org/CodeSystem/service-provision-conditions" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1143" +- id: "v2-0389" + description: "analyteRepeatStatus" + url: "http://terminology.hl7.org/CodeSystem/v2-0389" + oid: "urn:oid:2.16.840.1.113883.18.240" +- id: "v2-0366" + description: "local-remoteControlState" + url: "http://terminology.hl7.org/CodeSystem/v2-0366" + oid: "urn:oid:2.16.840.1.113883.18.224" +- id: "v3-icpc2E" + description: "International Classification of Primary Care, second edition (1998)" + url: "http://hl7.org/fhir/sid/icpc-2" + oid: "urn:oid:2.16.840.1.113883.6.139" +- id: "v3-ActRelationshipCheckpoint" + description: "ActRelationshipCheckpoint" + url: "http://terminology.hl7.org/CodeSystem/v3-ActRelationshipCheckpoint" + oid: "urn:oid:2.16.840.1.113883.5.10" +- id: "guide-parameter-code" + description: "GuideParameterCode" + url: "http://terminology.hl7.org/CodeSystem/guide-parameter-code" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1421" +- id: "v3-GenderStatus" + description: "GenderStatus" + url: "http://terminology.hl7.org/CodeSystem/v3-GenderStatus" + oid: "urn:oid:2.16.840.1.113883.5.51" +- id: "discharge-disposition" + description: "Discharge disposition" + url: "http://terminology.hl7.org/CodeSystem/discharge-disposition" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1093" +- id: "whoPOR" + description: "WHO Adverse Reaction Terms Portuguese" + url: "http://terminology.hl7.org/CodeSystem/whoPOR" + oid: "urn:oid:2.16.840.1.113883.6.230.3" +- id: "v2-0235" + description: "reportSource" + url: "http://terminology.hl7.org/CodeSystem/v2-0235" + oid: "urn:oid:2.16.840.1.113883.18.134" +- id: "extra-security-role-type" + description: null + url: "http://terminology.hl7.org/CodeSystem/extra-security-role-type" + oid: null +- id: "v2-0370" + description: "containerStatus" + url: "http://terminology.hl7.org/CodeSystem/v2-0370" + oid: "urn:oid:2.16.840.1.113883.18.228" +- id: "v2-0409" + description: "applicationChangeType" + url: "http://terminology.hl7.org/CodeSystem/v2-0409" + oid: "urn:oid:2.16.840.1.113883.18.255" +- id: "plan-definition-type" + description: "PlanDefinitionType" + url: "http://terminology.hl7.org/CodeSystem/plan-definition-type" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1245" +- id: "v3-EntityHandling" + description: "EntityHandling" + url: "http://terminology.hl7.org/CodeSystem/v3-EntityHandling" + oid: "urn:oid:2.16.840.1.113883.5.42" +- id: "usage-context-type" + description: "UsageContextType" + url: "http://terminology.hl7.org/CodeSystem/usage-context-type" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1068" +- id: "v2-0262" + description: "privacyLevel" + url: "http://terminology.hl7.org/CodeSystem/v2-0262" + oid: "urn:oid:2.16.840.1.113883.18.157" +- id: "container-cap" + description: "ContainerCap" + url: "http://terminology.hl7.org/CodeSystem/container-cap" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1258" +- id: "icd10" + description: "ICD-10" + # change from http://hl7.org/fhir/sid/icd-10 to http://hl7.org/fhir/sid/icd-10-cm, assuming US ICD-10-CM system + url: "http://hl7.org/fhir/sid/icd-10-cm" + oid: "urn:oid:2.16.840.1.113883.6.3" +- id: "soc" + description: "Standard Occupation Code" + url: "http://terminology.hl7.org/CodeSystem/soc" + oid: "urn:oid:2.16.840.1.113883.6.243" +- id: "question-max-occurs" + description: "MaxOccurs" + url: "http://terminology.hl7.org/CodeSystem/question-max-occurs" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1272" +- id: "v2-0429" + description: "productionClass" + url: "http://terminology.hl7.org/CodeSystem/v2-0429" + oid: "urn:oid:2.16.840.1.113883.18.270" +- id: "forms-codes" + description: "Form Codes" + url: "http://terminology.hl7.org/CodeSystem/forms-codes" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1052" +- id: "icpc2-icd10-DUT" + description: "ICPC2-ICD10ENG Thesaurus, Dutch Translation" + url: "http://terminology.hl7.org/CodeSystem/icpc2-icd10-DUT" + oid: "urn:oid:2.16.840.1.113883.6.142.1" +- id: "v2-0350" + description: "nubc-OccurrenceCode-cs" + url: "http://terminology.hl7.org/CodeSystem/v2-0350" + oid: "urn:oid:2.16.840.1.113883.6.301.7" +- id: "v3-Country" + description: "Country" + url: "http://terminology.hl7.org/CodeSystem/v3-Country" + oid: "urn:oid:2.16.840.1.113883.5.28" +- id: "v3-TimingEvent" + description: "TimingEvent" + url: "http://terminology.hl7.org/CodeSystem/v3-TimingEvent" + oid: "urn:oid:2.16.840.1.113883.5.139" +- id: "v3-MapRelationship" + description: "MapRelationship" + url: "http://terminology.hl7.org/CodeSystem/v3-MapRelationship" + oid: "urn:oid:2.16.840.1.113883.5.67" +- id: "v2-0215" + description: "publicity" + url: "http://terminology.hl7.org/CodeSystem/v2-0215" + oid: "urn:oid:2.16.840.1.113883.18.119" +- id: "v2-0491" + description: "specimenQuality" + url: "http://terminology.hl7.org/CodeSystem/v2-0491" + oid: "urn:oid:2.16.840.1.113883.18.315" +- id: "v2-0868" + description: "telecommunicationExpirationReason" + url: "http://terminology.hl7.org/CodeSystem/v2-0868" + oid: "urn:oid:2.16.840.1.113883.18.409" +- id: "payment-type" + description: "Payment Type Codes" + url: "http://terminology.hl7.org/CodeSystem/payment-type" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1186" +- id: "MDRAE" + description: "MedDRA Am Engl" + url: "http://terminology.hl7.org/CodeSystem/MDRAE" + oid: "urn:oid:2.16.840.1.113883.6.163.1" +- id: "risk-probability" + description: "Risk Probability" + url: "http://terminology.hl7.org/CodeSystem/risk-probability" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1133" +- id: "v2-0757" + description: "drgStatusRespirationMinutes" + url: "http://terminology.hl7.org/CodeSystem/v2-0757" + oid: "urn:oid:2.16.840.1.113883.18.398" +- id: "v2-0242" + description: "primaryObserverQualification" + url: "http://terminology.hl7.org/CodeSystem/v2-0242" + oid: "urn:oid:2.16.840.1.113883.18.141" +- id: "MDRFRE" + description: "MedDRA French" + url: "http://terminology.hl7.org/CodeSystem/MDRFRE" + oid: "urn:oid:2.16.840.1.113883.6.163.3" +- id: "v2-0487" + description: "specimenType" + url: "http://terminology.hl7.org/CodeSystem/v2-0487" + oid: "urn:oid:2.16.840.1.113883.18.311" +- id: "v3-WC" + description: "WHO ATC" + url: "http://www.whocc.no/atc" + oid: "urn:oid:2.16.840.1.113883.6.73" +- id: "v2-0038" + description: "orderStatus" + url: "http://terminology.hl7.org/CodeSystem/v2-0038" + oid: "urn:oid:2.16.840.1.113883.18.18" +- id: "v2-0468" + description: "paymentAdjustmentInformation" + url: "http://terminology.hl7.org/CodeSystem/v2-0468" + oid: "urn:oid:2.16.840.1.113883.18.297" +- id: "v3-PaymentTerms" + description: "PaymentTerms" + url: "http://terminology.hl7.org/CodeSystem/v3-PaymentTerms" + oid: "urn:oid:2.16.840.1.113883.5.91" +- id: "v2-0311" + description: "jobStatus" + url: "http://terminology.hl7.org/CodeSystem/v2-0311" + oid: "urn:oid:2.16.840.1.113883.18.189" +- id: "v3-CodeSystem" + description: "CodeSystem" + url: "http://terminology.hl7.org/CodeSystem/v3-CodeSystem" + oid: "urn:oid:2.16.840.1.113883.5.22" +- id: "diet" + description: "Diet" + url: "http://terminology.hl7.org/CodeSystem/diet" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1091" +- id: "admit-source" + description: "Admit source" + url: "http://terminology.hl7.org/CodeSystem/admit-source" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1092" +- id: "v2-0254" + description: "kindOfQuantity" + url: "http://terminology.hl7.org/CodeSystem/v2-0254" + oid: "urn:oid:2.16.840.1.113883.18.149" +- id: "v3-EncounterReferralSource" + description: "EncounterReferralSource" + url: "http://terminology.hl7.org/CodeSystem/v3-EncounterReferralSource" + oid: "urn:oid:2.16.840.1.113883.5.39" +- id: "v2-0080" + description: "natureOfAbnormalTesting" + url: "http://terminology.hl7.org/CodeSystem/v2-0080" + oid: "urn:oid:2.16.840.1.113883.18.32" +- id: "v3-RoleCode" + description: "RoleCode" + url: "http://terminology.hl7.org/CodeSystem/v3-RoleCode" + oid: "urn:oid:2.16.840.1.113883.5.111" +- id: "service-referral-method" + description: "ReferralMethod" + url: "http://terminology.hl7.org/CodeSystem/service-referral-method" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1142" +- id: "goal-category" + description: "Goal category" + url: "http://terminology.hl7.org/CodeSystem/goal-category" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1097" +- id: "v2-0203" + description: "identifierType" + url: "http://terminology.hl7.org/CodeSystem/v2-0203" + oid: "urn:oid:2.16.840.1.113883.18.108" +- id: "v2-0653" + description: "dateFormat" + url: "http://terminology.hl7.org/CodeSystem/v2-0653" + oid: "urn:oid:2.16.840.1.113883.18.381" +- id: "v3-QueryParameterValue" + description: "QueryParameterValue" + url: "http://terminology.hl7.org/CodeSystem/v3-QueryParameterValue" + oid: "urn:oid:2.16.840.1.113883.5.1096" +- id: "medicationrequest-admin-location" + description: "Medication request administration location codes" + url: "http://terminology.hl7.org/CodeSystem/medicationrequest-admin-location" + oid: "urn:oid:2.16.840.1.113883.4.642.1.0" +- id: "v2-0917" + description: "bolusType" + url: "http://terminology.hl7.org/CodeSystem/v2-0917" + oid: "urn:oid:2.16.840.1.113883.18.423" +- id: "v2-0444" + description: "nameAssemblyOrder" + url: "http://terminology.hl7.org/CodeSystem/v2-0444" + oid: "urn:oid:2.16.840.1.113883.18.284" +- id: "v2-0501" + description: "consentNon-disclosureReason" + url: "http://terminology.hl7.org/CodeSystem/v2-0501" + oid: "urn:oid:2.16.840.1.113883.18.325" +- id: "v2-0278" + description: "fillerStatus" + url: "http://terminology.hl7.org/CodeSystem/v2-0278" + oid: "urn:oid:2.16.840.1.113883.18.171" +- id: "v3-TableCellVerticalAlign" + description: "TableCellVerticalAlign" + url: "http://terminology.hl7.org/CodeSystem/v3-TableCellVerticalAlign" + oid: "urn:oid:2.16.840.1.113883.5.133" +- id: "dose-rate-type" + description: "DoseAndRateType" + url: "http://terminology.hl7.org/CodeSystem/dose-rate-type" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1069" +- id: "v2-0940" + description: "limitationTypeCode" + url: "http://terminology.hl7.org/CodeSystem/v2-0940" + oid: "urn:oid:2.16.840.1.113883.18.443" +- id: "v2-4000" + description: "name-addressRepresentation" + url: "http://terminology.hl7.org/CodeSystem/v2-4000" + oid: "urn:oid:2.16.840.1.113883.18.436" +- id: "icpc-FIN" + description: "International Classification of Primary Care 1993 Finnish" + url: "http://terminology.hl7.org/CodeSystem/icpc-FIN" + oid: "urn:oid:2.16.840.1.113883.6.138.4" +- id: "v2-0106" + description: "queryResponseFormat" + url: "http://terminology.hl7.org/CodeSystem/v2-0106" + oid: "urn:oid:2.16.840.1.113883.18.43" +- id: "v2-0556" + description: "benefitGroup" + url: "http://terminology.hl7.org/CodeSystem/v2-0556" + oid: "urn:oid:2.16.840.1.113883.18.360" +- id: "naics" + description: "North American Industry Classification System" + url: "http://terminology.hl7.org/CodeSystem/naics" + oid: "urn:oid:2.16.840.1.113883.6.85" +- id: "recommendation-strength" + description: "StrengthOfRecommendationRating" + url: "http://terminology.hl7.org/CodeSystem/recommendation-strength" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1268" +- id: "v3-LanguageAbilityProficiency" + description: "LanguageAbilityProficiency" + url: "http://terminology.hl7.org/CodeSystem/v3-LanguageAbilityProficiency" + oid: "urn:oid:2.16.840.1.113883.5.61" +- id: "icpc2E-DUT" + description: "ICPC2E, Dutch Translation" + url: "http://terminology.hl7.org/CodeSystem/icpc2E-DUT" + oid: "urn:oid:2.16.840.1.113883.6.139.2" +- id: "v2-0540" + description: "inactiveReason" + url: "http://terminology.hl7.org/CodeSystem/v2-0540" + oid: "urn:oid:2.16.840.1.113883.18.352" +- id: "v3-cpt-4" + description: "CPT-4" + url: "http://www.ama-assn.org/go/cpt" + oid: "urn:oid:2.16.840.1.113883.6.12" +- id: "v3-ucum" + description: "Unified Code for Units of Measure (UCUM)" + url: "http://unitsofmeasure.org" + oid: "urn:oid:2.16.840.1.113883.6.8" +- id: "ex-paymenttype" + description: "Example Payment Type Codes" + url: "http://terminology.hl7.org/CodeSystem/ex-paymenttype" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1181" +- id: "substance-category" + description: "Substance Category Codes" + url: "http://terminology.hl7.org/CodeSystem/substance-category" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1138" +- id: "v2-0239" + description: "eventExpected" + url: "http://terminology.hl7.org/CodeSystem/v2-0239" + oid: "urn:oid:2.16.840.1.113883.18.138" +- id: "v2-0669" + description: "loadStatus" + url: "http://terminology.hl7.org/CodeSystem/v2-0669" + oid: "urn:oid:2.16.840.1.113883.18.385" +- id: "v3-ActReason" + description: "ActReason" + url: "http://terminology.hl7.org/CodeSystem/v3-ActReason" + oid: "urn:oid:2.16.840.1.113883.5.8" +- id: "v2-0393" + description: "matchAlgorithms" + url: "http://terminology.hl7.org/CodeSystem/v2-0393" + oid: "urn:oid:2.16.840.1.113883.18.244" +- id: "parameter-group" + description: "DeviceDefinitionParameterGroup" + url: "http://terminology.hl7.org/CodeSystem/parameter-group" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1264" +- id: "v3-hc-DIN" + description: "Health Canada Drug Id Number" + url: "http://www.canada.ca/en/health-canada/services/drugs-health-products/drug-products/drug-product-database-3" + oid: "urn:oid:2.16.840.1.113883.5.1105" +- id: "v2-0002" + description: "maritalStatus" + url: "http://terminology.hl7.org/CodeSystem/v2-0002" + oid: "urn:oid:2.16.840.1.113883.18.179" +- id: "v3-dbSNP" + description: "Genetic Sequence polymorphism database" + url: "http://www.ncbi.nlm.nih.gov/projects/SNP" + oid: "urn:oid:2.16.840.1.113883.6.284" +- id: "v2-0147" + description: "policyType" + url: "http://terminology.hl7.org/CodeSystem/v2-0147" + oid: "urn:oid:2.16.840.1.113883.18.68" +- id: "v2-0517" + description: "informInstructions" + url: "http://terminology.hl7.org/CodeSystem/v2-0517" + oid: "urn:oid:2.16.840.1.113883.18.338" +- id: "consentaction" + description: "Consent Action Codes" + url: "http://terminology.hl7.org/CodeSystem/consentaction" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1227" +- id: "v2-0281" + description: "referralType" + url: "http://terminology.hl7.org/CodeSystem/v2-0281" + oid: "urn:oid:2.16.840.1.113883.18.174" +- id: "v2-0009" + description: "ambulatoryStatus" + url: "http://terminology.hl7.org/CodeSystem/v2-0009" + oid: "urn:oid:2.16.840.1.113883.18.11" +- id: "flag-category" + description: "Flag Category" + url: "http://terminology.hl7.org/CodeSystem/flag-category" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1071" +- id: "v3-CommunicationFunctionType" + description: "CommunicationFunctionType" + url: "http://terminology.hl7.org/CodeSystem/v3-CommunicationFunctionType" + oid: "urn:oid:2.16.840.1.113883.5.1056" +- id: "v2-0265" + description: "specialtyType" + url: "http://terminology.hl7.org/CodeSystem/v2-0265" + oid: "urn:oid:2.16.840.1.113883.18.159" +- id: "contractsubtypecodes" + description: "Contract Subtype Codes" + url: "http://terminology.hl7.org/CodeSystem/contractsubtypecodes" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1198" +- id: "v2-0818" + description: "package" + url: "http://terminology.hl7.org/CodeSystem/v2-0818" + oid: "urn:oid:2.16.840.1.113883.18.407" +- id: "v3-TransmissionRelationshipTypeCode" + description: "TransmissionRelationshipTypeCode" + url: "http://terminology.hl7.org/CodeSystem/v3-TransmissionRelationshipTypeCode" + oid: "urn:oid:2.16.840.1.113883.5.1111" +- id: "v2-0398" + description: "continuationStyle" + url: "http://terminology.hl7.org/CodeSystem/v2-0398" + oid: "urn:oid:2.16.840.1.113883.18.249" +- id: "v2-0232" + description: "insuranceCompanyContactReason" + url: "http://terminology.hl7.org/CodeSystem/v2-0232" + oid: "urn:oid:2.16.840.1.113883.18.132" +- id: "v3-EntityNameUseR2" + description: "EntityNameUseR2" + url: "http://terminology.hl7.org/CodeSystem/v3-EntityNameUseR2" + oid: "urn:oid:2.16.840.1.113883.5.1120" +- id: "v2-0377" + description: "environmentalFactors" + url: "http://terminology.hl7.org/CodeSystem/v2-0377" + oid: "urn:oid:2.16.840.1.113883.18.235" +- id: "v2-0418" + description: "procedurePriority" + url: "http://terminology.hl7.org/CodeSystem/v2-0418" + oid: "urn:oid:2.16.840.1.113883.18.260" +- id: "v2-0048" + description: "whatSubjectFilter" + url: "http://terminology.hl7.org/CodeSystem/v2-0048" + oid: "urn:oid:2.16.840.1.113883.18.20" +- id: "USCOC" + description: "US Census Occupation Code" + url: "http://terminology.hl7.org/CodeSystem/USCOC" + oid: "urn:oid:2.16.840.1.113883.6.240" +- id: "consentverification" + description: "Consent Vefication Codes" + url: "http://terminology.hl7.org/CodeSystem/consentverification" + oid: "urn:oid:2.16.840.1.113883.4.642.1.0" + +- id: "v3-ActUSPrivacyLaw" + description: "ActUSPrivacyLaw" + url: "http://terminology.hl7.org/CodeSystem/v3-ActUSPrivacyLaw" + oid: "urn:oid:2.16.840.1.113883.5.1138" +- id: "v3-Ethnicity" + description: "Ethnicity" + url: "http://terminology.hl7.org/CodeSystem/v3-Ethnicity" + oid: "urn:oid:2.16.840.1.113883.5.50" +- id: "v2-0224" + description: "transportArranged" + url: "http://terminology.hl7.org/CodeSystem/v2-0224" + oid: "urn:oid:2.16.840.1.113883.18.125" +- id: "v2-0731" + description: "drgDiagnosisDeterminationStatus" + url: "http://terminology.hl7.org/CodeSystem/v2-0731" + oid: "urn:oid:2.16.840.1.113883.18.392" +- id: "v3-CodeSystemType" + description: "HL7 Code System Type" + url: "http://terminology.hl7.org/CodeSystem/v3-CodeSystemType" + oid: "urn:oid:2.16.840.1.113883.5.1085" +- id: "v3-ActCode" + description: "ActCode" + url: "http://terminology.hl7.org/CodeSystem/v3-ActCode" + oid: "urn:oid:2.16.840.1.113883.5.4" +- id: "v2-0273" + description: "documentAvailabilityStatus" + url: "http://terminology.hl7.org/CodeSystem/v2-0273" + oid: "urn:oid:2.16.840.1.113883.18.167" +- id: "icpc-FRE" + description: "International Classification of Primary Care 1993 French" + url: "http://terminology.hl7.org/CodeSystem/icpc-FRE" + oid: "urn:oid:2.16.840.1.113883.6.138.5" +- id: "claim-exception" + description: "Exception Codes" + url: "http://terminology.hl7.org/CodeSystem/claim-exception" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1162" +- id: "immunization-recommendation-status" + description: "Immunization Recommendation Status Codes" + url: "http://terminology.hl7.org/CodeSystem/immunization-recommendation-status" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1104" +- id: "v2-0336" + description: "referralReason" + url: "http://terminology.hl7.org/CodeSystem/v2-0336" + oid: "urn:oid:2.16.840.1.113883.18.206" +- id: "v2-0121" + description: "responseFlag" + url: "http://terminology.hl7.org/CodeSystem/v2-0121" + oid: "urn:oid:2.16.840.1.113883.18.49" +- id: "med-admin-perform-function" + description: "MedicationAdministration Performer Function Codes" + url: "http://terminology.hl7.org/CodeSystem/med-admin-perform-function" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1112" +- id: "v2-0571" + description: "invoiceProcessingResultsStatus" + url: "http://terminology.hl7.org/CodeSystem/v2-0571" + oid: "urn:oid:2.16.840.1.113883.18.371" +- id: "v3-HL7StandardVersionCode" + description: "HL7StandardVersionCode" + url: "http://terminology.hl7.org/CodeSystem/v3-HL7StandardVersionCode" + oid: "urn:oid:2.16.840.1.113883.5.1097" +- id: "characteristic-method" + description: "CharacteristicMethod" + url: "http://terminology.hl7.org/CodeSystem/characteristic-method" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1453" +- id: "v2-0434" + description: "patientCondition" + url: "http://terminology.hl7.org/CodeSystem/v2-0434" + oid: "urn:oid:2.16.840.1.113883.18.275" +- id: "v2-0208" + description: "queryResponseStatus" + url: "http://terminology.hl7.org/CodeSystem/v2-0208" + oid: "urn:oid:2.16.840.1.113883.18.113" +- id: "medicationknowledge-status" + description: "MedicationKnowledge Status Codes" + url: "http://terminology.hl7.org/CodeSystem/medicationknowledge-status" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1336" +- id: "v3-GTSAbbreviation" + description: "GTSAbbreviation" + url: "http://terminology.hl7.org/CodeSystem/v3-GTSAbbreviation" + oid: "urn:oid:2.16.840.1.113883.5.1022" +- id: "basic-resource-type" + description: "Basic Resource Types" + url: "http://terminology.hl7.org/CodeSystem/basic-resource-type" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1072" +- id: "v3-RoleLinkType" + description: "RoleLinkType" + url: "http://terminology.hl7.org/CodeSystem/v3-RoleLinkType" + oid: "urn:oid:2.16.840.1.113883.5.107" +- id: "v2-0033" + description: "route" + url: "http://terminology.hl7.org/CodeSystem/v2-0033" + oid: "urn:oid:2.16.840.1.113883.18.16" +- id: "consentpolicycodes" + description: "Consent PolicyRule Codes" + url: "http://terminology.hl7.org/CodeSystem/consentpolicycodes" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1229" +- id: "v3-ExposureMode" + description: "ExposureMode" + url: "http://terminology.hl7.org/CodeSystem/v3-ExposureMode" + oid: "urn:oid:2.16.840.1.113883.5.1113" +- id: "v3-ada-snodent" + description: "Systematized Nomenclature of Dentistry (SNODENT)" + url: "http://www.ada.org/snodent" + oid: "urn:oid:2.16.840.1.113883.3.3150" +- id: "v3-hgvs" + description: "Human Genome Variation Society nomenclature" + url: "http://varnomen.hgvs.org" + oid: "urn:oid:2.16.840.1.113883.6.282" +- id: "v2-0160" + description: "trayType" + url: "http://terminology.hl7.org/CodeSystem/v2-0160" + oid: "urn:oid:2.16.840.1.113883.18.78" +- id: "v2-0530" + description: "organization-Agency-Department" + url: "http://terminology.hl7.org/CodeSystem/v2-0530" + oid: "urn:oid:2.16.840.1.113883.18.346" +- id: "v2-0926" + description: "phlebotomyStatus" + url: "http://terminology.hl7.org/CodeSystem/v2-0926" + oid: "urn:oid:2.16.840.1.113883.18.432" +- id: "participant-type" + description: "Participant type" + url: "http://terminology.hl7.org/CodeSystem/participant-type" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1089" +- id: "v2-0475" + description: "chargeTypeReason" + url: "http://terminology.hl7.org/CodeSystem/v2-0475" + oid: "urn:oid:2.16.840.1.113883.18.303" +- id: "v3-ModifyIndicator" + description: "ModifyIndicator" + url: "http://terminology.hl7.org/CodeSystem/v3-ModifyIndicator" + oid: "urn:oid:2.16.840.1.113883.5.81" +- id: "paymentstatus" + description: "Payment Status Codes" + url: "http://terminology.hl7.org/CodeSystem/paymentstatus" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1187" +- id: "v2-0834" + description: "mimeTypes" + url: "http://terminology.hl7.org/CodeSystem/v2-0834" + oid: "urn:oid:2.16.840.1.113883.18.408" +- id: "v2-0137" + description: "mailClaimParty" + url: "http://terminology.hl7.org/CodeSystem/v2-0137" + oid: "urn:oid:2.16.840.1.113883.18.61" +- id: "v2-0422" + description: "triageType" + url: "http://terminology.hl7.org/CodeSystem/v2-0422" + oid: "urn:oid:2.16.840.1.113883.18.263" +- id: "v3-ConceptGenerality" + description: "ConceptGenerality" + url: "http://terminology.hl7.org/CodeSystem/v3-ConceptGenerality" + oid: "urn:oid:2.16.840.1.113883.5.24" +- id: "v2-0971" + description: "onlineVerificationResultErrorCodes" + url: "http://terminology.hl7.org/CodeSystem/v2-0971" + oid: "urn:oid:2.16.840.1.113883.18.454" +- id: "NHSNOccasionOfDetection" + description: "NHSN Occasion Of Detection" + url: "http://terminology.hl7.org/CodeSystem/NHSNOccasionOfDetection" + oid: "urn:oid:2.16.840.1.113883.6.273" +- id: "v2-0269" + description: "chargeOnIndicator" + url: "http://terminology.hl7.org/CodeSystem/v2-0269" + oid: "urn:oid:2.16.840.1.113883.18.162" +- id: "v2-0793" + description: "rulingAct" + url: "http://terminology.hl7.org/CodeSystem/v2-0793" + oid: "urn:oid:2.16.840.1.113883.18.405" +- id: "measure-population" + description: "MeasurePopulationType" + url: "http://terminology.hl7.org/CodeSystem/measure-population" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1231" +- id: "v2-0286" + description: "providerRole" + url: "http://terminology.hl7.org/CodeSystem/v2-0286" + oid: "urn:oid:2.16.840.1.113883.18.178" +- id: "whoGER" + description: "WHO Adverse Reaction Terms German" + url: "http://terminology.hl7.org/CodeSystem/whoGER" + oid: "urn:oid:2.16.840.1.113883.6.230.2" +- id: "v2-0906" + description: "actpriority" + url: "http://terminology.hl7.org/CodeSystem/v2-0906" + oid: "urn:oid:2.16.840.1.113883.18.417" +- id: "program" + description: "Program" + url: "http://terminology.hl7.org/CodeSystem/program" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1384" +- id: "HL70005" + description: "PH_RaceAndEthnicity_CDC" + url: "http://terminology.hl7.org/CodeSystem/v3-Race" + oid: "urn:oid:2.16.840.1.113883.6.238" +- id: "v2-0005" + description: "PH_RaceAndEthnicity_CDC" + url: "http://terminology.hl7.org/CodeSystem/v2-0005" + oid: "urn:oid:2.16.840.1.113883.6.238" +- id: "adjudication-error" + description: "Adjudication Error Codes" + url: "http://terminology.hl7.org/CodeSystem/adjudication-error" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1053" +- id: "v3-MDFAttributeType" + description: "MDFAttributeType" + url: "http://terminology.hl7.org/CodeSystem/v3-MDFAttributeType" + oid: "urn:oid:2.16.840.1.113883.5.74" +- id: "v2-0140" + description: "militaryService" + url: "http://terminology.hl7.org/CodeSystem/v2-0140" + oid: "urn:oid:2.16.840.1.113883.18.62" +- id: "v2-0510" + description: "bloodProductDispenseStatus" + url: "http://terminology.hl7.org/CodeSystem/v2-0510" + oid: "urn:oid:2.16.840.1.113883.18.333" +- id: "v3-SubstitutionCondition" + description: "SubstitutionCondition" + url: "http://terminology.hl7.org/CodeSystem/v3-SubstitutionCondition" + oid: "urn:oid:2.16.840.1.113883.5.1071" +- id: "v3-iso3166-2" + description: "ISO 3166 Part 2 Country Subdivision Codes" + url: "urn:iso:std:iso:3166:-2" + oid: "urn:oid:1.0.3166.2" +- id: "conceptdomains" + description: "Concept Domains" + url: "http://terminology.hl7.org/CodeSystem/conceptdomains" + oid: null +- id: "v2-0394" + description: "responseModality" + url: "http://terminology.hl7.org/CodeSystem/v2-0394" + oid: "urn:oid:2.16.840.1.113883.18.245" +- id: "medicationdispense-performer-function" + description: "MedicationDispense Performer Function Codes" + url: "http://terminology.hl7.org/CodeSystem/medicationdispense-performer-function" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1319" +- id: "v2-0402" + description: "schoolType" + url: "http://terminology.hl7.org/CodeSystem/v2-0402" + oid: "urn:oid:2.16.840.1.113883.18.251" +- id: "v2-0052" + description: "diagnosisType" + url: "http://terminology.hl7.org/CodeSystem/v2-0052" + oid: "urn:oid:2.16.840.1.113883.18.21" +- id: "v2-0951" + description: "reasonForStudy" + url: "http://terminology.hl7.org/CodeSystem/v2-0951" + oid: "urn:oid:2.16.840.1.113883.18.451" +- id: "v2-0547" + description: "jurisdictionalBreadth" + url: "http://terminology.hl7.org/CodeSystem/v2-0547" + oid: "urn:oid:2.16.840.1.113883.18.354" +- id: "v2-0228" + description: "diagnosisClassification" + url: "http://terminology.hl7.org/CodeSystem/v2-0228" + oid: "urn:oid:2.16.840.1.113883.18.128" +- id: "ex-payee-resource-type" + description: "ClaimPayeeResourceType" + url: "http://terminology.hl7.org/CodeSystem/ex-payee-resource-type" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1164" +- id: "v3-scpqual" + description: "pan-Canadian Provider Qualification Types" + url: "https://fhir.infoway-inforoute.ca/CodeSystem/scpqual" + oid: "urn:oid:2.16.840.1.113883.2.20.5.4" +- id: "contract-content-derivative" + description: "Contract Content Derivation Codes" + url: "http://terminology.hl7.org/CodeSystem/contract-content-derivative" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1204" +- id: "v3-EntityNamePartType" + description: "EntityNamePartType" + url: "http://terminology.hl7.org/CodeSystem/v3-EntityNamePartType" + oid: "urn:oid:2.16.840.1.113883.5.44" +- id: "icpc2-icd10-THSRS" + description: "ICPC2-ICD10 Thesaurus" + url: "http://terminology.hl7.org/CodeSystem/icpc2-icd10-THSRS" + oid: "urn:oid:2.16.840.1.113883.6.142" +- id: "icpc-ITA" + description: "International Classification of Primary Care 1993 Italian" + url: "http://terminology.hl7.org/CodeSystem/icpc-ITA" + oid: "urn:oid:2.16.840.1.113883.6.138.9" +- id: "icpc-SPA" + description: "International Classification of Primary Care 1993 Spanish" + url: "http://terminology.hl7.org/CodeSystem/icpc-SPA" + oid: "urn:oid:2.16.840.1.113883.6.138.12" +- id: "icpc-ENG" + description: "International Classification of Primary Care 1993 (English)" + url: "http://terminology.hl7.org/CodeSystem/icpc-ENG" + oid: "urn:oid:2.16.840.1.113883.6.138.14" +- id: "definition-topic" + description: "DefinitionTopic" + url: "http://terminology.hl7.org/CodeSystem/definition-topic" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1244" +- id: "v2-0290" + description: "mimeBase64EncodingCharacters" + url: "http://terminology.hl7.org/CodeSystem/v2-0290" + oid: "urn:oid:2.16.840.1.113883.18.180" +- id: "v3-CodingRationale" + description: "CodingRationale" + url: "http://terminology.hl7.org/CodeSystem/v3-CodingRationale" + oid: "urn:oid:2.16.840.1.113883.5.1074" +- id: "v2-0443" + description: "providerRole" + url: "http://terminology.hl7.org/CodeSystem/v2-0443" + oid: "urn:oid:2.16.840.1.113883.18.283" +- id: "v3-ProcessingID" + description: "ProcessingID" + url: "http://terminology.hl7.org/CodeSystem/v3-ProcessingID" + oid: "urn:oid:2.16.840.1.113883.5.100" +- id: "v2-0506" + description: "serviceRequestRelationship" + url: "http://terminology.hl7.org/CodeSystem/v2-0506" + oid: "urn:oid:2.16.840.1.113883.18.330" +- id: "v2-0156" + description: "whichDate-timeQualifier" + url: "http://terminology.hl7.org/CodeSystem/v2-0156" + oid: "urn:oid:2.16.840.1.113883.18.74" +- id: "history-absent-reason" + description: "FamilyHistoryAbsentReason" + url: "http://terminology.hl7.org/CodeSystem/history-absent-reason" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1094" +- id: "v3-EntityNamePartQualifier" + description: "EntityNamePartQualifier" + url: "http://terminology.hl7.org/CodeSystem/v3-EntityNamePartQualifier" + oid: "urn:oid:2.16.840.1.113883.5.43" + +- id: "icd10PCS" + description: "ICD-10 Procedure Codes" + url: "http://www.cms.gov/Medicare/Coding/ICD10" + oid: "urn:oid:2.16.840.1.113883.6.4" +- id: "v2-0204" + description: "organizationalNameType" + url: "http://terminology.hl7.org/CodeSystem/v2-0204" + oid: "urn:oid:2.16.840.1.113883.18.109" +- id: "adverse-event-severity" + description: "AdverseEventSeverity" + url: "http://terminology.hl7.org/CodeSystem/adverse-event-severity" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1256" +- id: "v3-ActClass" + description: "ActClass" + url: "http://terminology.hl7.org/CodeSystem/v3-ActClass" + oid: "urn:oid:2.16.840.1.113883.5.6" +- id: "v2-0438" + description: "allergyClinicalStatus" + url: "http://terminology.hl7.org/CodeSystem/v2-0438" + oid: "urn:oid:2.16.840.1.113883.18.279" +- id: "v3-refSeq" + description: "Gene Reference Sequence Collection" + url: "http://www.ncbi.nlm.nih.gov/refseq" + oid: "urn:oid:2.16.840.1.113883.6.280" +- id: "modifiers" + description: "Modifier type Codes" + url: "http://terminology.hl7.org/CodeSystem/modifiers" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1151" +- id: "v2-0316" + description: "organDonorCodes" + url: "http://terminology.hl7.org/CodeSystem/v2-0316" + oid: "urn:oid:2.16.840.1.113883.18.192" +- id: "v2-0253" + description: "indirectExposureMechanism" + url: "http://terminology.hl7.org/CodeSystem/v2-0253" + oid: "urn:oid:2.16.840.1.113883.18.148" +- id: "v2-0480" + description: "pharmacyOrderTypes" + url: "http://terminology.hl7.org/CodeSystem/v2-0480" + oid: "urn:oid:2.16.840.1.113883.18.306" +- id: "implantStatus" + description: "Implant Status" + url: "http://terminology.hl7.org/CodeSystem/implantStatus" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1283" +- id: "v3-DocumentStorage" + description: "DocumentStorage" + url: "http://terminology.hl7.org/CodeSystem/v3-DocumentStorage" + oid: "urn:oid:2.16.840.1.113883.5.34" +- id: "v2-0615" + description: "userAuthenticationCredentialType" + url: "http://terminology.hl7.org/CodeSystem/v2-0615" + oid: "urn:oid:2.16.840.1.113883.18.373" +- id: "v2-0496" + description: "consentType" + url: "http://terminology.hl7.org/CodeSystem/v2-0496" + oid: "urn:oid:2.16.840.1.113883.18.320" +- id: "v2-0183" + description: "active-inactive" + url: "http://terminology.hl7.org/CodeSystem/v2-0183" + oid: "urn:oid:2.16.840.1.113883.18.97" +- id: "match-grade" + description: "MatchGrade" + url: "http://terminology.hl7.org/CodeSystem/match-grade" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1289" +- id: "list-order" + description: "List Order Codes" + url: "http://terminology.hl7.org/CodeSystem/list-order" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1107" +- id: "v3-ProcessingMode" + description: "ProcessingMode" + url: "http://terminology.hl7.org/CodeSystem/v3-ProcessingMode" + oid: "urn:oid:2.16.840.1.113883.5.101" +- id: "icpc2E-P-AUS" + description: "ICPC2P 1998 Plus Austral Mod" + url: "http://terminology.hl7.org/CodeSystem/icpc2E-P-AUS" + oid: "urn:oid:2.16.840.1.113883.6.140.2" +- id: "v2-0357" + description: "messageErrorCondition" + url: "http://terminology.hl7.org/CodeSystem/v2-0357" + oid: "urn:oid:2.16.840.1.113883.18.217" +- id: "v2-0642" + description: "reorderTheory" + url: "http://terminology.hl7.org/CodeSystem/v2-0642" + oid: "urn:oid:2.16.840.1.113883.18.379" +- id: "icd10CM" + description: "International Classification of Diseases, 10th Revision, Clinical Modification\ + \ (ICD-10-CM)" + url: "http://hl7.org/fhir/sid/icd-10-cm" + oid: "urn:oid:2.16.840.1.113883.6.90" +- id: "ICD-10-CM" + description: "International Classification of Diseases, 10th Revision, Clinical Modification\ + \ (ICD-10-CM)" + url: "http://hl7.org/fhir/sid/icd-10-cm" + oid: "urn:oid:2.16.840.1.113883.6.90" +- id: "observation-category" + description: "Observation Category Codes" + url: "http://terminology.hl7.org/CodeSystem/observation-category" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1125" +- id: "v2-0091" + description: "queryPriority" + url: "http://terminology.hl7.org/CodeSystem/v2-0091" + oid: "urn:oid:2.16.840.1.113883.18.35" +- id: "testscript-profile-origin-types" + description: "Test script profile origin type" + url: "http://terminology.hl7.org/CodeSystem/testscript-profile-origin-types" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1196" +- id: "v3-AddressUse" + description: "AddressUse" + url: "http://terminology.hl7.org/CodeSystem/v3-AddressUse" + oid: "urn:oid:2.16.840.1.113883.5.1119" +- id: "immunization-subpotent-reason" + description: "Immunization Subpotent Reason" + url: "http://terminology.hl7.org/CodeSystem/immunization-subpotent-reason" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1098" +- id: "measure-improvement-notation" + description: "MeasureImprovementNotation" + url: "http://terminology.hl7.org/CodeSystem/measure-improvement-notation" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1395" +- id: "v2-0356" + description: "alternateCharacterSetHandlingScheme" + url: "http://terminology.hl7.org/CodeSystem/v2-0356" + oid: "urn:oid:2.16.840.1.113883.18.216" +- id: "v2-0213" + description: "purgeStatus" + url: "http://terminology.hl7.org/CodeSystem/v2-0213" + oid: "urn:oid:2.16.840.1.113883.18.117" +- id: "v2-0497" + description: "consentMode" + url: "http://terminology.hl7.org/CodeSystem/v2-0497" + oid: "urn:oid:2.16.840.1.113883.18.321" +- id: "v2-0478" + description: "formularyStatus" + url: "http://terminology.hl7.org/CodeSystem/v2-0478" + oid: "urn:oid:2.16.840.1.113883.18.305" +- id: "v2-0881" + description: "roleExecutingPhysician" + url: "http://terminology.hl7.org/CodeSystem/v2-0881" + oid: "urn:oid:2.16.840.1.113883.18.411" +- id: "v2-0301" + description: "universalIdType" + url: "http://terminology.hl7.org/CodeSystem/v2-0301" + oid: "urn:oid:2.16.840.1.113883.18.186" +- id: "applicability" + description: "Benefit cost applicability" + url: "http://terminology.hl7.org/CodeSystem/applicability" + oid: "urn:oid:2.16.840.1.113883.4.642.1.0" +- id: "audit-entity-type" + description: "Audit event entity type" + url: "http://terminology.hl7.org/CodeSystem/audit-entity-type" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1134" +- id: "v3-ResponseMode" + description: "ResponseMode" + url: "http://terminology.hl7.org/CodeSystem/v3-ResponseMode" + oid: "urn:oid:2.16.840.1.113883.5.1126" +- id: "research-study-objective-type" + description: "ResearchStudyObjectiveType" + url: "http://terminology.hl7.org/CodeSystem/research-study-objective-type" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1248" +- id: "v3-AcknowledgementDetailType" + description: "AcknowledgementDetailType" + url: "http://terminology.hl7.org/CodeSystem/v3-AcknowledgementDetailType" + oid: "urn:oid:2.16.840.1.113883.5.1082" +- id: "operation-outcome" + description: "Operation Outcome Codes" + url: "http://terminology.hl7.org/CodeSystem/operation-outcome" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1127" +- id: "v3-QueryStatusCode" + description: "QueryStatusCode" + url: "http://terminology.hl7.org/CodeSystem/v3-QueryStatusCode" + oid: "urn:oid:2.16.840.1.113883.5.103" +- id: "v2-0317" + description: "annotations" + url: "http://terminology.hl7.org/CodeSystem/v2-0317" + oid: "urn:oid:2.16.840.1.113883.18.193" +- id: "expansion-processing-rule" + description: "ExpansionProcessingRule" + url: "http://terminology.hl7.org/CodeSystem/expansion-processing-rule" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1281" +- id: "v2-0252" + description: "causalityObservations" + url: "http://terminology.hl7.org/CodeSystem/v2-0252" + oid: "urn:oid:2.16.840.1.113883.18.147" +- id: "mdr" + description: "MedDRA" + url: "http://terminology.hl7.org/CodeSystem/mdr" + oid: "urn:oid:2.16.840.1.113883.6.163" +- id: "v3-ActRelationshipSubset" + description: "ActRelationshipSubset" + url: "http://terminology.hl7.org/CodeSystem/v3-ActRelationshipSubset" + oid: "urn:oid:2.16.840.1.113883.5.1099" +- id: "VHA" + description: "US Department of Veterans Affairs" + url: "http://terminology.hl7.org/CodeSystem/VHA" + oid: "urn:oid:2.16.840.1.113883.6.233" +- id: "v3-hl7ApprovalStatus" + description: "HL7ApprovalStatus" + url: "http://terminology.hl7.org/CodeSystem/v3-hl7ApprovalStatus" + oid: "urn:oid:2.16.840.1.113883.5.1130" +- id: "v2-0069" + description: "hospitalService" + url: "http://terminology.hl7.org/CodeSystem/v2-0069" + oid: "urn:oid:2.16.840.1.113883.18.27" +- id: "DEEDS407" + description: "DEEDS407" + url: "http://terminology.hl7.org/CodeSystem/DEEDS407" + oid: "urn:oid:2.16.840.1.113883.6.102.4.7" +- id: "hl7TermMaintInfra" + description: "HL7 Terminology Maintenance Infrastructure Vocabulary" + url: "http://terminology.hl7.org/CodeSystem/hl7TermMaintInfra" + oid: null +- id: "hsloc" + description: "Healthcare Service Location" + url: "http://terminology.hl7.org/CodeSystem/hsloc" + oid: "urn:oid:2.16.840.1.113883.6.259" +- id: "v3-PostalAddressUse" + description: "PostalAddressUse" + url: "http://terminology.hl7.org/CodeSystem/v3-PostalAddressUse" + oid: "urn:oid:2.16.840.1.113883.5.1012" +- id: "v2-0205" + description: "priceType" + url: "http://terminology.hl7.org/CodeSystem/v2-0205" + oid: "urn:oid:2.16.840.1.113883.18.110" +- id: "contactentity-type" + description: "Contact entity type" + url: "http://terminology.hl7.org/CodeSystem/contactentity-type" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1129" +- id: "v2-0442" + description: "locationServiceType" + url: "http://terminology.hl7.org/CodeSystem/v2-0442" + oid: "urn:oid:2.16.840.1.113883.18.282" +- id: "v2-0012" + description: "stockLocation" + url: "http://terminology.hl7.org/CodeSystem/v2-0012" + oid: "urn:oid:2.16.840.1.113883.18.12" +- id: "study-type" + description: "StatisticStudyType" + url: "http://terminology.hl7.org/CodeSystem/study-type" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1350" +- id: "v3-EncounterAccident" + description: "EncounterAccident" + url: "http://terminology.hl7.org/CodeSystem/v3-EncounterAccident" + oid: "urn:oid:2.16.840.1.113883.5.36" +- id: "umls" + description: "Unified Medical Language System" + url: "http://terminology.hl7.org/CodeSystem/umls" + oid: "urn:oid:2.16.840.1.113883.6.86" +- id: "v2-0507" + description: "observationResultHandling" + url: "http://terminology.hl7.org/CodeSystem/v2-0507" + oid: "urn:oid:2.16.840.1.113883.18.331" +- id: "v2-0157" + description: "whichDate-timeStatusQualifier" + url: "http://terminology.hl7.org/CodeSystem/v2-0157" + oid: "urn:oid:2.16.840.1.113883.18.75" +- id: "adverse-event-category" + description: "AdverseEventCategory" + url: "http://terminology.hl7.org/CodeSystem/adverse-event-category" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1251" +- id: "v2-0291" + description: "subtypeOfReferencedData" + url: "http://terminology.hl7.org/CodeSystem/v2-0291" + oid: "urn:oid:2.16.840.1.113883.18.181" +- id: "composition-altcode-kind" + description: "AlternativeCodeKind" + url: "http://terminology.hl7.org/CodeSystem/composition-altcode-kind" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1406" +- id: "v3-TargetAwareness" + description: "TargetAwareness" + url: "http://terminology.hl7.org/CodeSystem/v3-TargetAwareness" + oid: "urn:oid:2.16.840.1.113883.5.137" +- id: "v3-ActExposureLevelCode" + description: "ActExposureLevelCode" + url: "http://terminology.hl7.org/CodeSystem/v3-ActExposureLevelCode" + oid: "urn:oid:2.16.840.1.113883.5.1114" +- id: "list-example-use-codes" + description: "Example Use Codes for List" + url: "http://terminology.hl7.org/CodeSystem/list-example-use-codes" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1105" +- id: "v2-0946" + description: "supplierType" + url: "http://terminology.hl7.org/CodeSystem/v2-0946" + oid: "urn:oid:2.16.840.1.113883.18.446" +- id: "v2-0415" + description: "drgTransferType" + url: "http://terminology.hl7.org/CodeSystem/v2-0415" + oid: "urn:oid:2.16.840.1.113883.18.257" +- id: "v2-0100" + description: "invocationEvent" + url: "http://terminology.hl7.org/CodeSystem/v2-0100" + oid: "urn:oid:2.16.840.1.113883.18.38" +- id: "v3-fda-FFRN" + description: "Food and Drug Administration Food Facility Registration Numbers" + url: "http://terminology.hl7.org/CodeSystem/v3-fda-FFRN" + oid: "urn:oid:2.16.840.1.113883.3.24.6.1" +- id: "v2-0550" + description: "bodyParts" + url: "http://terminology.hl7.org/CodeSystem/v2-0550" + oid: "urn:oid:2.16.840.1.113883.18.356" +- id: "ex-serviceplace" + description: "Example Service Place Codes" + url: "http://terminology.hl7.org/CodeSystem/ex-serviceplace" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1157" +- id: "measure-data-usage" + description: "MeasureDataUsage" + url: "http://terminology.hl7.org/CodeSystem/measure-data-usage" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1234" +- id: "NHSNInfectionType" + description: "NHSN Infection Type" + url: "http://terminology.hl7.org/CodeSystem/NHSNInfectionType" + oid: "urn:oid:2.16.840.1.113883.6.268" +- id: "v2-0383" + description: "substanceStatus" + url: "http://terminology.hl7.org/CodeSystem/v2-0383" + oid: "urn:oid:2.16.840.1.113883.18.236" +- id: "medication-admin-location" + description: "MedicationAdministration Location Codes" + url: "http://terminology.hl7.org/CodeSystem/medication-admin-location" + oid: "urn:oid:2.16.840.1.113883.4.642.1.0" +- id: "condition-category" + description: "Condition Category Codes" + url: "http://terminology.hl7.org/CodeSystem/condition-category" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1073" +- id: "v2-0403" + description: "languageAbility" + url: "http://terminology.hl7.org/CodeSystem/v2-0403" + oid: "urn:oid:2.16.840.1.113883.18.252" +- id: "v3-hl7PublishingSection" + description: "HL7PublishingSection" + url: "http://terminology.hl7.org/CodeSystem/v3-hl7PublishingSection" + oid: "urn:oid:2.16.840.1.113883.5.1133" +- id: "v2-0950" + description: "orderStatusModifier" + url: "http://terminology.hl7.org/CodeSystem/v2-0950" + oid: "urn:oid:2.16.840.1.113883.18.450" +- id: "ex-USCLS" + description: "USCLS Codes" + url: "http://terminology.hl7.org/CodeSystem/ex-USCLS" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1153" +- id: "reason-medication-given" + description: "Reason Medication Given Codes" + url: "http://terminology.hl7.org/CodeSystem/reason-medication-given" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1110" +- id: "v2-0116" + description: "bedStatus" + url: "http://terminology.hl7.org/CodeSystem/v2-0116" + oid: "urn:oid:2.16.840.1.113883.18.47" +- id: "epsg-crs" + description: "European Petroleum Survey Group Geodetic Parameter Dataset Coordinate Reference\ + \ System" + url: "http://terminology.hl7.org/CodeSystem/epsg-crs" + oid: "urn:oid:2.16.840.1.113883.6.278" +- id: "coverage-copay-type" + description: "Coverage Copay Type Codes" + url: "http://terminology.hl7.org/CodeSystem/coverage-copay-type" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1149" +- id: "v2-0395" + description: "modifyIndicator" + url: "http://terminology.hl7.org/CodeSystem/v2-0395" + oid: "urn:oid:2.16.840.1.113883.18.246" +- id: "v2-0907" + description: "confidentiality" + url: "http://terminology.hl7.org/CodeSystem/v2-0907" + oid: "urn:oid:2.16.840.1.113883.18.418" +- id: "immunization-evaluation-dose-status" + description: "Immunization Evaluation Dose Status codes" + url: "http://terminology.hl7.org/CodeSystem/immunization-evaluation-dose-status" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1102" +- id: "v3-Dentition" + description: "Dentition" + url: "http://terminology.hl7.org/CodeSystem/v3-Dentition" + oid: "urn:oid:2.16.840.1.113883.5.1080" +- id: "v2-0004" + description: "patientClass" + url: "http://terminology.hl7.org/CodeSystem/v2-0004" + oid: "urn:oid:2.16.840.1.113883.18.5" +- id: "v2-0511" + description: "bpObservationStatusCodesInterpretation" + url: "http://terminology.hl7.org/CodeSystem/v2-0511" + oid: "urn:oid:2.16.840.1.113883.18.334" +- id: "v3-EntityDeterminer" + description: "EntityDeterminer" + url: "http://terminology.hl7.org/CodeSystem/v3-EntityDeterminer" + oid: "urn:oid:2.16.840.1.113883.5.30" +- id: "v2-0268" + description: "override" + url: "http://terminology.hl7.org/CodeSystem/v2-0268" + oid: "urn:oid:2.16.840.1.113883.18.161" +- id: "push-type-available" + description: "Push-type-available" + url: "http://terminology.hl7.org/CodeSystem/push-type-available" + oid: "urn:oid:2.16.840.1.113883.4.642.1.899" +- id: "v3-EditStatus" + description: "EditStatus" + url: "http://terminology.hl7.org/CodeSystem/v3-EditStatus" + oid: "urn:oid:2.16.840.1.113883.5.35" +- id: "v3-ActSite" + description: "ActSite" + url: "http://terminology.hl7.org/CodeSystem/v3-ActSite" + oid: "urn:oid:2.16.840.1.113883.5.1052" +- id: "v2-0287" + description: "problem-goalAction" + url: "http://terminology.hl7.org/CodeSystem/v2-0287" + oid: "urn:oid:2.16.840.1.113883.18.3" +- id: "v3-TableCellScope" + description: "TableCellScope" + url: "http://terminology.hl7.org/CodeSystem/v3-TableCellScope" + oid: "urn:oid:2.16.840.1.113883.5.132" +- id: "ib" + description: "ISBT" + url: "http://terminology.hl7.org/CodeSystem/ib" + oid: "urn:oid:2.16.840.1.113883.6.18" +- id: "primary-source-type" + description: "Primary-source-type" + url: "http://terminology.hl7.org/CodeSystem/primary-source-type" + oid: "urn:oid:2.16.840.1.113883.4.642.1.893" +- id: "v3-Charset" + description: "Charset" + url: "http://terminology.hl7.org/CodeSystem/v3-Charset" + oid: "urn:oid:2.16.840.1.113883.5.21" +- id: "v2-0566" + description: "bloodUnitType" + url: "http://terminology.hl7.org/CodeSystem/v2-0566" + oid: "urn:oid:2.16.840.1.113883.18.368" +- id: "v2-0423" + description: "caseCategory" + url: "http://terminology.hl7.org/CodeSystem/v2-0423" + oid: "urn:oid:2.16.840.1.113883.18.264" +- id: "validation-type" + description: "Validation-type" + url: "http://terminology.hl7.org/CodeSystem/validation-type" + oid: "urn:oid:2.16.840.1.113883.4.642.1.887" +- id: "icd9cm" + description: "ICD-9CM" + url: "http://terminology.hl7.org/CodeSystem/icd9cm" + oid: "urn:oid:2.16.840.1.113883.6.2" +- id: "v2-0970" + description: "onlineVerificationResult" + url: "http://terminology.hl7.org/CodeSystem/v2-0970" + oid: "urn:oid:2.16.840.1.113883.18.453" +- id: "condition-state" + description: "ConditionState" + url: "http://terminology.hl7.org/CodeSystem/condition-state" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1287" +- id: "communication-topic" + description: "CommunicationTopic" + url: "http://terminology.hl7.org/CodeSystem/communication-topic" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1078" +- id: "v3-ISO3166-3retired" + description: "ISO 3166 Numeric country Codes" + url: "http://terminology.hl7.org/CodeSystem/v3-ISO3166-3retired" + oid: "urn:oid:2.16.3" +- id: "v2-0618" + description: "protection" + url: "http://terminology.hl7.org/CodeSystem/v2-0618" + oid: "urn:oid:2.16.840.1.113883.18.376" +- id: "v2-0248" + description: "productSource" + url: "http://terminology.hl7.org/CodeSystem/v2-0248" + oid: "urn:oid:2.16.840.1.113883.18.144" +- id: "v2-0161" + description: "allowSubstitution" + url: "http://terminology.hl7.org/CodeSystem/v2-0161" + oid: "urn:oid:2.16.840.1.113883.18.79" +- id: "v2-0927" + description: "armStick" + url: "http://terminology.hl7.org/CodeSystem/v2-0927" + oid: "urn:oid:2.16.840.1.113883.18.433" +- id: "ahfs" + description: "AHFS Pharmacologic-Therapeutic Classification" + url: "http://terminology.hl7.org/CodeSystem/ahfs" + oid: "urn:oid:2.16.840.1.113883.6.234" +- id: "name-assembly-order" + description: "HumanNameAssemblyOrder" + url: "http://terminology.hl7.org/CodeSystem/name-assembly-order" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1266" +- id: "v3-HL7ConformanceInclusion" + description: "HL7ConformanceInclusion" + url: "http://terminology.hl7.org/CodeSystem/v3-HL7ConformanceInclusion" + oid: "urn:oid:2.16.840.1.113883.5.55" +- id: "v2-0474" + description: "organizationUnitType" + url: "http://terminology.hl7.org/CodeSystem/v2-0474" + oid: "urn:oid:2.16.840.1.113883.18.302" +- id: "MSH" + description: "MeSH" + url: "http://terminology.hl7.org/CodeSystem/MSH" + oid: "urn:oid:2.16.840.1.113883.6.177" +- id: "v3-snomed-CT" + description: "SNOMED\_CT International Edition" + url: "http://snomed.info/sct" + oid: "urn:oid:2.16.840.1.113883.6.96" +- id: "v3-EntityRisk" + description: "EntityRisk" + url: "http://terminology.hl7.org/CodeSystem/v3-EntityRisk" + oid: "urn:oid:2.16.840.1.113883.5.46" +- id: "DEEDS519" + description: "DEEDS519" + url: "http://terminology.hl7.org/CodeSystem/DEEDS519" + oid: "urn:oid:2.16.840.1.113883.6.102.5.19" +- id: "v2-0527" + description: "calendarAlignment" + url: "http://terminology.hl7.org/CodeSystem/v2-0527" + oid: "urn:oid:2.16.840.1.113883.18.343" +- id: "v2-0177" + description: "confidentialityCodes" + url: "http://terminology.hl7.org/CodeSystem/v2-0177" + oid: "urn:oid:2.16.840.1.113883.18.92" +- id: "medicationknowledge-package-type" + description: "MedicationKnowledge Package Type Codes" + url: "http://terminology.hl7.org/CodeSystem/medicationknowledge-package-type" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1340" +- id: "v2-0659" + description: "lotControl" + url: "http://terminology.hl7.org/CodeSystem/v2-0659" + oid: "urn:oid:2.16.840.1.113883.18.383" +- id: "v2-0209" + description: "relationalOperator" + url: "http://terminology.hl7.org/CodeSystem/v2-0209" + oid: "urn:oid:2.16.840.1.113883.18.114" +- id: "v3-HL7UpdateMode" + description: "HL7UpdateMode" + url: "http://terminology.hl7.org/CodeSystem/v3-HL7UpdateMode" + oid: "urn:oid:2.16.840.1.113883.5.57" +- id: "v2-0570" + description: "paymentMethod" + url: "http://terminology.hl7.org/CodeSystem/v2-0570" + oid: "urn:oid:2.16.840.1.113883.18.370" +- id: "v2-0065" + description: "specimenAction" + url: "http://terminology.hl7.org/CodeSystem/v2-0065" + oid: "urn:oid:2.16.840.1.113883.18.25" +- id: "v2-0435" + description: "advanceDirective" + url: "http://terminology.hl7.org/CodeSystem/v2-0435" + oid: "urn:oid:2.16.840.1.113883.18.276" +- id: "v2-0272" + description: "documentConfidentialityStatus2" + url: "http://terminology.hl7.org/CodeSystem/v2-0272" + oid: "urn:oid:2.16.840.1.113883.18.166" +- id: "v2-0337" + description: "certificationStatus" + url: "http://terminology.hl7.org/CodeSystem/v2-0337" + oid: "urn:oid:2.16.840.1.113883.18.207" +- id: "icpc-HUN" + description: "International Classification of Primary Care 1993 Hungarian" + url: "http://terminology.hl7.org/CodeSystem/icpc-HUN" + oid: "urn:oid:2.16.840.1.113883.6.138.8" +- id: "v2-0225" + description: "escortRequired" + url: "http://terminology.hl7.org/CodeSystem/v2-0225" + oid: "urn:oid:2.16.840.1.113883.18.126" +- id: "v2-0360" + description: "degreeLicenseCertificate" + url: "http://terminology.hl7.org/CodeSystem/v2-0360" + oid: "urn:oid:2.16.840.1.113883.18.220" +- id: "v3-ndc" + description: "National drug codes" + url: "http://hl7.org/fhir/sid/ndc" + oid: "urn:oid:2.16.840.1.113883.6.69" +- id: "DEEDS427" + description: "DEEDS427" + url: "http://terminology.hl7.org/CodeSystem/DEEDS427" + oid: "urn:oid:2.16.840.1.113883.6.102.4.27" +- id: "immunization-funding-source" + description: "Immunization Funding Source" + url: "http://terminology.hl7.org/CodeSystem/immunization-funding-source" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1100" +- id: "v3-lrg" + description: "Locus Reference Genomic Sequences (LRG)" + url: "http://www.lrg-sequence.org" + oid: "urn:oid:2.16.840.1.113883.6.283" +- id: "synthesis-type" + description: "StatisticSynthesisType" + url: "http://terminology.hl7.org/CodeSystem/synthesis-type" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1348" +- id: "v3-MdfRmimRowType" + description: "MdfRmimRowType" + url: "http://terminology.hl7.org/CodeSystem/v3-MdfRmimRowType" + oid: "urn:oid:2.16.840.1.113883.5.77" +- id: "opinions" + description: "Online Product Identification Number Index of Nova Scotia" + url: "http://terminology.hl7.org/CodeSystem/opinions" + oid: "urn:oid:2.16.840.1.113883.5.1102" +- id: "v3-SetOperator" + description: "SetOperator" + url: "http://terminology.hl7.org/CodeSystem/v3-SetOperator" + oid: "urn:oid:2.16.840.1.113883.5.1069" +- id: "ex-providerqualification" + description: "Example Provider Qualification Codes" + url: "http://terminology.hl7.org/CodeSystem/ex-providerqualification" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1160" +- id: "atc" + description: "American Type Culture Collection" + url: "http://www.whocc.no/atc" + oid: "urn:oid:2.16.840.1.113883.6.77" +- id: "v3-ActMood" + description: "ActMood" + url: "http://terminology.hl7.org/CodeSystem/v3-ActMood" + oid: "urn:oid:2.16.840.1.113883.5.1001" +- id: "v3-EntityStatus" + description: "EntityStatus" + url: "http://terminology.hl7.org/CodeSystem/v3-EntityStatus" + oid: "urn:oid:2.16.840.1.113883.5.1061" +- id: "ex-diagnosisrelatedgroup" + description: "Example Diagnosis Related Group Codes" + url: "http://terminology.hl7.org/CodeSystem/ex-diagnosisrelatedgroup" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1166" +- id: "v3-ResponseLevel" + description: "ResponseLevel" + url: "http://terminology.hl7.org/CodeSystem/v3-ResponseLevel" + oid: "urn:oid:2.16.840.1.113883.5.108" +- id: "v2-0376" + description: "specialHandling" + url: "http://terminology.hl7.org/CodeSystem/v2-0376" + oid: "urn:oid:2.16.840.1.113883.18.234" +- id: "v3-mime" + description: "MIME" + url: "http://www.iana.org/assignments/media-types" + oid: "urn:oid:2.16.840.1.113883.6.10" +- id: "rcV2" + description: "The Read Codes Version 2" + url: "http://terminology.hl7.org/CodeSystem/rcV2" + oid: "urn:oid:2.16.840.1.113883.6.29" +- id: "v3-hl7VoteResolution" + description: "HL7VoteResolution" + url: "http://terminology.hl7.org/CodeSystem/v3-hl7VoteResolution" + oid: "urn:oid:2.16.840.1.113883.5.1131" +- id: "v2-0634" + description: "itemImportance" + url: "http://terminology.hl7.org/CodeSystem/v2-0634" + oid: "urn:oid:2.16.840.1.113883.18.378" +- id: "v2-0321" + description: "dispenseMethod" + url: "http://terminology.hl7.org/CodeSystem/v2-0321" + oid: "urn:oid:2.16.840.1.113883.18.194" +- id: "v3-hc-npn" + description: "Health Canada Natural Product Number" + url: "http://hl7.org/fhir/sid/ca-hc-npn" + oid: "urn:oid:2.16.840.1.113883.5.1107" +- id: "v2-0008" + description: "acknowledgmentCodes" + url: "http://terminology.hl7.org/CodeSystem/v2-0008" + oid: "urn:oid:2.16.840.1.113883.18.10" +- id: "v2-0359" + description: "diagnosisPriority" + url: "http://terminology.hl7.org/CodeSystem/v2-0359" + oid: "urn:oid:2.16.840.1.113883.18.218" +- id: "v3-fda-FCE" + description: "Food and Drug Administration Food Canning Establishments" + url: "http://terminology.hl7.org/CodeSystem/v3-fda-FCE" + oid: "urn:oid:2.16.840.1.113883.3.24.6.2" +- id: "statistic-type" + description: "StatisticStatisticType" + url: "http://terminology.hl7.org/CodeSystem/statistic-type" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1411" +- id: "v2-0070" + description: "specimenSourceCodes" + url: "http://terminology.hl7.org/CodeSystem/v2-0070" + oid: "urn:oid:2.16.840.1.113883.18.28" +- id: "v3-orderableDrugForm" + description: "Orderable Drug Form" + url: "http://terminology.hl7.org/CodeSystem/v3-orderableDrugForm" + oid: "urn:oid:2.16.840.1.113883.5.85" +- id: "v2-0565" + description: "providerAdjustmentReason" + url: "http://terminology.hl7.org/CodeSystem/v2-0565" + oid: "urn:oid:2.16.840.1.113883.18.367" +- id: "PHIndustryCDCCensus2010" + description: "Industry CDC Census 2010" + url: "http://terminology.hl7.org/CodeSystem/PHIndustryCDCCensus2010" + oid: "urn:oid:2.16.840.1.114222.4.5.315" +- id: "v2-0135" + description: "assignmentOfBenefits" + url: "http://terminology.hl7.org/CodeSystem/v2-0135" + oid: "urn:oid:2.16.840.1.113883.18.60" +- id: "coverage-selfpay" + description: "Coverage SelfPay Codes" + url: "http://terminology.hl7.org/CodeSystem/coverage-selfpay" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1148" +- id: "immunization-program-eligibility" + description: "Immunization Program Eligibility" + url: "http://terminology.hl7.org/CodeSystem/immunization-program-eligibility" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1099" +- id: "v2-0027" + description: "priority" + url: "http://terminology.hl7.org/CodeSystem/v2-0027" + oid: "urn:oid:2.16.840.1.113883.18.15" +- id: "v3-VocabularyDomainQualifier" + description: "VocabularyDomainQualifier" + url: "http://terminology.hl7.org/CodeSystem/v3-VocabularyDomainQualifier" + oid: "urn:oid:2.16.840.1.113883.5.147" +- id: "v2-0477" + description: "controlledSubstanceSchedule" + url: "http://terminology.hl7.org/CodeSystem/v2-0477" + oid: "urn:oid:2.16.840.1.113883.18.304" +- id: "v3-LocalMarkupIgnore" + description: "LocalMarkupIgnore" + url: "http://terminology.hl7.org/CodeSystem/v3-LocalMarkupIgnore" + oid: "urn:oid:2.16.840.1.113883.5.65" +- id: "v2-0924" + description: "cumulativeDosageLimitUom" + url: "http://terminology.hl7.org/CodeSystem/v2-0924" + oid: "urn:oid:2.16.840.1.113883.18.430" +- id: "HL70162" + description: "routeOfAdministration" + url: "http://terminology.hl7.org/CodeSystem/v2-0162" + oid: "urn:oid:2.16.840.1.113883.18.80" +- id: "v2-0162" + description: "routeOfAdministration" + url: "http://terminology.hl7.org/CodeSystem/v2-0162" + oid: "urn:oid:2.16.840.1.113883.18.80" +- id: "v3-ContentProcessingMode" + description: "ContentProcessingMode" + url: "http://terminology.hl7.org/CodeSystem/v3-ContentProcessingMode" + oid: "urn:oid:2.16.840.1.113883.5.1110" +- id: "v2-0498" + description: "consentStatus" + url: "http://terminology.hl7.org/CodeSystem/v2-0498" + oid: "urn:oid:2.16.840.1.113883.18.322" +- id: "v2-0532" + description: "expandedYes-NoIndicator" + url: "http://terminology.hl7.org/CodeSystem/v2-0532" + oid: "urn:oid:2.16.840.1.113883.18.347" +- id: "rejection-criteria" + description: "RejectionCriterion" + url: "http://terminology.hl7.org/CodeSystem/rejection-criteria" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1260" +- id: "v3-ConceptCodeRelationship" + description: "Possible Concept Code Relationships" + url: "http://terminology.hl7.org/CodeSystem/v3-ConceptCodeRelationship" + oid: "urn:oid:2.16.840.1.113883.5.1088" +- id: "contract-data-meaning" + description: "ContractDataMeaning" + url: "http://terminology.hl7.org/CodeSystem/contract-data-meaning" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1205" +- id: "communication-category" + description: "CommunicationCategory" + url: "http://terminology.hl7.org/CodeSystem/communication-category" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1076" +- id: "v2-0524" + description: "sequenceCondition" + url: "http://terminology.hl7.org/CodeSystem/v2-0524" + oid: "urn:oid:2.16.840.1.113883.18.342" +- id: "v2-0174" + description: "natureOfServiceTestObservation" + url: "http://terminology.hl7.org/CodeSystem/v2-0174" + oid: "urn:oid:2.16.840.1.113883.18.90" +- id: "DEEDS408" + description: "DEEDS408" + url: "http://terminology.hl7.org/CodeSystem/DEEDS408" + oid: "urn:oid:2.16.840.1.113883.6.102.4.8" +- id: "supplyrequest-reason" + description: "SupplyRequestReason" + url: "http://terminology.hl7.org/CodeSystem/supplyrequest-reason" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1193" +- id: "v2-0066" + description: "employmentStatus" + url: "http://terminology.hl7.org/CodeSystem/v2-0066" + oid: "urn:oid:2.16.840.1.113883.18.26" +- id: "v2-0436" + description: "sensitivityToCausativeAgent" + url: "http://terminology.hl7.org/CodeSystem/v2-0436" + oid: "urn:oid:2.16.840.1.113883.18.277" +- id: "v2-0123" + description: "resultStatus" + url: "http://terminology.hl7.org/CodeSystem/v2-0123" + oid: "urn:oid:2.16.840.1.113883.18.51" +- id: "v2-0334" + description: "disabilityInformationRelationship" + url: "http://terminology.hl7.org/CodeSystem/v2-0334" + oid: "urn:oid:2.16.840.1.113883.18.204" +- id: "GTIN" + description: "GTIN Global Trade Item Number" + url: "https://www.gs1.org/gtin" + oid: "urn:oid:1.3.160" +- id: "v3-ParticipationFunction" + description: "ParticipationFunction" + url: "http://terminology.hl7.org/CodeSystem/v3-ParticipationFunction" + oid: "urn:oid:2.16.840.1.113883.5.88" +- id: "v3-TableRules" + description: "TableRules" + url: "http://terminology.hl7.org/CodeSystem/v3-TableRules" + oid: "urn:oid:2.16.840.1.113883.5.136" +- id: "v2-0271" + description: "documentCompletionStatus" + url: "http://terminology.hl7.org/CodeSystem/v2-0271" + oid: "urn:oid:2.16.840.1.113883.18.164" +- id: "iso639-1ret" + description: "ISO 639-1 Alpha-2 Language Codes" + url: "http://terminology.hl7.org/CodeSystem/iso639-1ret" + oid: "urn:oid:2.16.840.1.113883.6.99" +- id: "v2-0158" + description: "date-timeSelectionQualifier" + url: "http://terminology.hl7.org/CodeSystem/v2-0158" + oid: "urn:oid:2.16.840.1.113883.18.76" +- id: "v2-0508" + description: "bloodProductProcessingRequirements" + url: "http://terminology.hl7.org/CodeSystem/v2-0508" + oid: "urn:oid:2.16.840.1.113883.18.332" +- id: "allergyintolerance-clinical" + description: "AllergyIntolerance Clinical Status Codes" + url: "http://terminology.hl7.org/CodeSystem/allergyintolerance-clinical" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1373" +- id: "v3-DCM" + description: "DICOM Controlled Terminology" + url: "http://dicom.nema.org/medical/dicom" + oid: "urn:oid:1.2.840.10008.2.16.4" +- id: "DEEDS424" + description: "DEEDS424" + url: "http://terminology.hl7.org/CodeSystem/DEEDS424" + oid: "urn:oid:2.16.840.1.113883.6.102.4.24" +- id: "MDREX" + description: "MedDRA expanded" + url: "http://terminology.hl7.org/CodeSystem/MDREX" + oid: "urn:oid:2.16.840.1.113883.6.164" +- id: "definition-status" + description: "DefinitionStatus" + url: "http://terminology.hl7.org/CodeSystem/definition-status" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1070" +- id: "read-Codes" + description: "Read Classification" + url: "http://terminology.hl7.org/CodeSystem/read-Codes" + oid: "urn:oid:2.16.840.1.113883.6.6" +- id: "v2-0949" + description: "orderControlCodeReason" + url: "http://terminology.hl7.org/CodeSystem/v2-0949" + oid: "urn:oid:2.16.840.1.113883.18.449" + +- id: "v2-0375" + description: "artificialBlood" + url: "http://terminology.hl7.org/CodeSystem/v2-0375" + oid: "urn:oid:2.16.840.1.113883.18.233" +- id: "v2-0230" + description: "procedureFunctionalType" + url: "http://terminology.hl7.org/CodeSystem/v2-0230" + oid: "urn:oid:2.16.840.1.113883.18.130" +- id: "rcFB" + description: "The Read Codes Four Byte Set:" + url: "http://terminology.hl7.org/CodeSystem/rcFB" + oid: "urn:oid:2.16.840.1.113883.6.28" +- id: "v2-0119" + description: "orderControlCodes" + url: "http://terminology.hl7.org/CodeSystem/v2-0119" + oid: "urn:oid:2.16.840.1.113883.18.48" +- id: "v3-AcknowledgementDetailCode" + description: "AcknowledgementDetailCode" + url: "http://terminology.hl7.org/CodeSystem/v3-AcknowledgementDetailCode" + oid: "urn:oid:2.16.840.1.113883.5.1100" +- id: "v2-0322" + description: "completionStatus" + url: "http://terminology.hl7.org/CodeSystem/v2-0322" + oid: "urn:oid:2.16.840.1.113883.18.195" +- id: "v2-0267" + description: "daysOfTheWeek" + url: "http://terminology.hl7.org/CodeSystem/v2-0267" + oid: "urn:oid:2.16.840.1.113883.18.160" +- id: "object-role" + description: "AuditEventEntityRole" + url: "http://terminology.hl7.org/CodeSystem/object-role" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1135" +- id: "v3-CompressionAlgorithm" + description: "CompressionAlgorithm" + url: "http://terminology.hl7.org/CodeSystem/v3-CompressionAlgorithm" + oid: "urn:oid:2.16.840.1.113883.5.1009" +- id: "directness" + description: "EvidenceDirectness" + url: "http://terminology.hl7.org/CodeSystem/directness" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1459" +- id: "DEEDS" + description: "DEEDS vocabularies" + url: "http://terminology.hl7.org/CodeSystem/DEEDS" + oid: "urn:oid:2.16.840.1.113883.6.102" +- id: "v3-Calendar" + description: "Calendar" + url: "http://terminology.hl7.org/CodeSystem/v3-Calendar" + oid: "urn:oid:2.16.840.1.113883.5.1055" +- id: "v2-0569" + description: "adjustmentAction" + url: "http://terminology.hl7.org/CodeSystem/v2-0569" + oid: "urn:oid:2.16.840.1.113883.18.369" +- id: "v3-EncounterSpecialCourtesy" + description: "EncounterSpecialCourtesy" + url: "http://terminology.hl7.org/CodeSystem/v3-EncounterSpecialCourtesy" + oid: "urn:oid:2.16.840.1.113883.5.40" +- id: "episodeofcare-type" + description: "Episode of care type" + url: "http://terminology.hl7.org/CodeSystem/episodeofcare-type" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1189" +- id: "v2-0210" + description: "relationalConjunction" + url: "http://terminology.hl7.org/CodeSystem/v2-0210" + oid: "urn:oid:2.16.840.1.113883.18.115" +- id: "DEEDS412" + description: "DEEDS412" + url: "http://terminology.hl7.org/CodeSystem/DEEDS412" + oid: "urn:oid:2.16.840.1.113883.6.102.4.12" +- id: "v2-0355" + description: "primaryKeyValueType" + url: "http://terminology.hl7.org/CodeSystem/v2-0355" + oid: "urn:oid:2.16.840.1.113883.18.215" +- id: "v2-0882" + description: "medicalRoleExecutingPhysician" + url: "http://terminology.hl7.org/CodeSystem/v2-0882" + oid: "urn:oid:2.16.840.1.113883.18.412" +- id: "choice-list-orientation" + description: "ChoiceListOrientation" + url: "http://terminology.hl7.org/CodeSystem/choice-list-orientation" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1273" +- id: "v2-0181" + description: "mfnRecord-levelErrorReturn" + url: "http://terminology.hl7.org/CodeSystem/v2-0181" + oid: "urn:oid:2.16.840.1.113883.18.96" +- id: "icpc-DUT" + description: "International Classification of Primary Care 1993 Dutch" + url: "http://terminology.hl7.org/CodeSystem/icpc-DUT" + oid: "urn:oid:2.16.840.1.113883.6.138.3" +- id: "v2-0494" + description: "specimenChildRole" + url: "http://terminology.hl7.org/CodeSystem/v2-0494" + oid: "urn:oid:2.16.840.1.113883.18.318" +- id: "v2-0247" + description: "statusOfEvaluation" + url: "http://terminology.hl7.org/CodeSystem/v2-0247" + oid: "urn:oid:2.16.840.1.113883.18.143" +- id: "goal-priority" + description: "Goal priority" + url: "http://terminology.hl7.org/CodeSystem/goal-priority" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1096" +- id: "v2-0617" + description: "addressUsage" + url: "http://terminology.hl7.org/CodeSystem/v2-0617" + oid: "urn:oid:2.16.840.1.113883.18.375" +- id: "v3-ActStatus" + description: "ActStatus" + url: "http://terminology.hl7.org/CodeSystem/v3-ActStatus" + oid: "urn:oid:2.16.840.1.113883.5.14" +- id: "state-change-reason" + description: "StateChangeReason" + url: "http://terminology.hl7.org/CodeSystem/state-change-reason" + oid: "urn:oid:2.16.840.1.113883.4.642.1.0" +- id: "observation-statistics" + description: "StatisticsCode" + url: "http://terminology.hl7.org/CodeSystem/observation-statistics" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1126" +- id: "v2-0894" + description: "sideOfBody" + url: "http://terminology.hl7.org/CodeSystem/v2-0894" + oid: "urn:oid:2.16.840.1.113883.18.413" +- id: "DCL" + description: "DICOM Class Label" + url: "http://terminology.hl7.org/CodeSystem/DCL" + oid: "urn:oid:2.16.840.1.113883.6.83" +- id: "v2-0178" + description: "file-levelEvent" + url: "http://terminology.hl7.org/CodeSystem/v2-0178" + oid: "urn:oid:2.16.840.1.113883.18.93" +- id: "v2-0482" + description: "orderType" + url: "http://terminology.hl7.org/CodeSystem/v2-0482" + oid: "urn:oid:2.16.840.1.113883.18.307" +- id: "MDRGER" + description: "MedDRA German" + url: "http://terminology.hl7.org/CodeSystem/MDRGER" + oid: "urn:oid:2.16.840.1.113883.6.163.4" +- id: "v2-0528" + description: "eventRelatedPeriod" + url: "http://terminology.hl7.org/CodeSystem/v2-0528" + oid: "urn:oid:2.16.840.1.113883.18.344" +- id: "v2-0251" + description: "actionTakenInResponseToTheEvent" + url: "http://terminology.hl7.org/CodeSystem/v2-0251" + oid: "urn:oid:2.16.840.1.113883.18.146" +- id: "ex-benefitcategory" + description: "Benefit Category Codes" + url: "http://terminology.hl7.org/CodeSystem/ex-benefitcategory" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1175" +- id: "ICD10dut" + description: "ICD10, Dutch Translation" + url: "http://hl7.org/fhir/sid/icd-10-nl" + oid: "urn:oid:2.16.840.1.113883.6.3.2" +- id: "v2-0085" + description: "observationResultStatusCodesInterpretation" + url: "http://terminology.hl7.org/CodeSystem/v2-0085" + oid: "urn:oid:2.16.840.1.113883.18.34" +- id: "v2-0206" + description: "segmentAction" + url: "http://terminology.hl7.org/CodeSystem/v2-0206" + oid: "urn:oid:2.16.840.1.113883.18.111" +- id: "contract-type" + description: "Contract Type Codes" + url: "http://terminology.hl7.org/CodeSystem/contract-type" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1330" +- id: "MDREA" + description: "MedDRA Am Engl expanded" + url: "http://terminology.hl7.org/CodeSystem/MDREA" + oid: "urn:oid:2.16.840.1.113883.6.164.1" +- id: "NHSNKneeReplacement" + description: "NHSN KneeR eplacement" + url: "http://terminology.hl7.org/CodeSystem/NHSNKneeReplacement" + oid: "urn:oid:2.16.840.1.113883.6.264" +- id: "PHOccupationalDataForHealthODH" + description: "Occupational Data for Health (ODH)" + url: "http://terminology.hl7.org/CodeSystem/PHOccupationalDataForHealthODH" + oid: "urn:oid:2.16.840.1.114222.4.5.327" +- id: "payment-adjustment-reason" + description: "Payment Adjustment Reason Codes" + url: "http://terminology.hl7.org/CodeSystem/payment-adjustment-reason" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1173" +- id: "v2-0504" + description: "sequenceCondition" + url: "http://terminology.hl7.org/CodeSystem/v2-0504" + oid: "urn:oid:2.16.840.1.113883.18.328" +- id: "v3-hc-AIGC" + description: "Active Ingredient Group Code" + url: "http://www.canada.ca/en/health-canada/services/drugs-health-products/drug-products/drug-product-database-2" + oid: "urn:oid:2.16.840.1.113883.5.1104" +- id: "v2-0912" + description: "participation" + url: "http://terminology.hl7.org/CodeSystem/v2-0912" + oid: "urn:oid:2.16.840.1.113883.18.420" +- id: "v2-0441" + description: "immunizationRegistryStatus" + url: "http://terminology.hl7.org/CodeSystem/v2-0441" + oid: "urn:oid:2.16.840.1.113883.18.281" +- id: "hl7-work-group" + description: "HL7Workgroup" + url: "http://terminology.hl7.org/CodeSystem/hl7-work-group" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1277" +- id: "contracttermtypecodes" + description: "Contract Term Type Codes" + url: "http://terminology.hl7.org/CodeSystem/contracttermtypecodes" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1199" +- id: "NHSNSpinalFusionLevel" + description: "NHSN Spinal Fusion Level" + url: "http://terminology.hl7.org/CodeSystem/NHSNSpinalFusionLevel" + oid: "urn:oid:2.16.840.1.113883.6.269" +- id: "v3-AdministrativeGender" + description: "AdministrativeGender" + url: "http://terminology.hl7.org/CodeSystem/v3-AdministrativeGender" + oid: "urn:oid:2.16.840.1.113883.5.1" +- id: "v2-0292" + description: "PH_VaccinesAdministered" + url: "http://terminology.hl7.org/ValueSet/v2-0292" + oid: "urn:oid:2.16.840.1.114222.4.11.934" +- id: "endpoint-payload-type" + description: "Endpoint Payload Type" + url: "http://terminology.hl7.org/CodeSystem/endpoint-payload-type" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1139" +- id: "contractsignertypecodes" + description: "Contract Signer Type Codes" + url: "http://terminology.hl7.org/CodeSystem/contractsignertypecodes" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1201" + +- id: "v2-0103" + description: "processingId" + url: "http://terminology.hl7.org/CodeSystem/v2-0103" + oid: "urn:oid:2.16.840.1.113883.18.40" +- id: "v2-0553" + description: "invoiceControl" + url: "http://terminology.hl7.org/CodeSystem/v2-0553" + oid: "urn:oid:2.16.840.1.113883.18.357" +- id: "utg-concept-properties" + description: "UTG Specific Concept Properties" + url: "http://terminology.hl7.org/CodeSystem/utg-concept-properties" + oid: null +- id: "NHSNSummaryData" + description: "NHSN Summary Data" + url: "http://terminology.hl7.org/CodeSystem/NHSNSummaryData" + oid: "urn:oid:2.16.840.1.113883.6.270" +- id: "v2-0416" + description: "procedureDrgType" + url: "http://terminology.hl7.org/CodeSystem/v2-0416" + oid: "urn:oid:2.16.840.1.113883.18.258" +- id: "cpnum" + description: "Gold Standard's Clinical Pharmacology Monograph Number" + url: "http://terminology.hl7.org/CodeSystem/cpnum" + oid: "urn:oid:2.16.840.1.113883.4.81" +- id: "v2-0945" + description: "auto-DilutionType" + url: "http://terminology.hl7.org/CodeSystem/v2-0945" + oid: "urn:oid:2.16.840.1.113883.18.445" +- id: "v3-RelationshipConjunction" + description: "RelationshipConjunction" + url: "http://terminology.hl7.org/CodeSystem/v3-RelationshipConjunction" + oid: "urn:oid:2.16.840.1.113883.5.106" +- id: "validation-status" + description: "Validation-status" + url: "http://terminology.hl7.org/CodeSystem/validation-status" + oid: "urn:oid:2.16.840.1.113883.4.642.1.895" +- id: "v3-ProbabilityDistributionType" + description: "ProbabilityDistributionType" + url: "http://terminology.hl7.org/CodeSystem/v3-ProbabilityDistributionType" + oid: "urn:oid:2.16.840.1.113883.5.1020" +- id: "subscriber-relationship" + description: "SubscriberPolicyholder Relationship Codes" + url: "http://terminology.hl7.org/CodeSystem/subscriber-relationship" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1386" +- id: "v3-MaterialType" + description: "MaterialType" + url: "http://terminology.hl7.org/CodeSystem/v3-MaterialType" + oid: "urn:oid:2.16.840.1.113883.5.73" +- id: "v3-TableFrame" + description: "TableFrame" + url: "http://terminology.hl7.org/CodeSystem/v3-TableFrame" + oid: "urn:oid:2.16.840.1.113883.5.134" +- id: "icpc-POR" + description: "International Classification of Primary Care 1993 Portuguese" + url: "http://terminology.hl7.org/CodeSystem/icpc-POR" + oid: "urn:oid:2.16.840.1.113883.6.138.11" +- id: "iso3166-1edition2alpha2" + description: "ISO 3166 Part 1 Country Codes, 2nd Edition, Alpha-2" + url: "http://terminology.hl7.org/CodeSystem/iso3166-1edition2alpha2" + oid: "urn:oid:1.0.3166.1.2.2" +- id: "ex-programcode" + description: "Example Program Reason Codes" + url: "http://terminology.hl7.org/CodeSystem/ex-programcode" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1161" + +- id: "v2-0396" + description: "codingSystem" + url: "http://terminology.hl7.org/CodeSystem/v2-0396" + oid: "urn:oid:2.16.840.1.113883.18.247" +- id: "measure-type" + description: "MeasureType" + url: "http://terminology.hl7.org/CodeSystem/measure-type" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1233" +- id: "subscription-tag" + description: "SubscriptionTag" + url: "http://terminology.hl7.org/CodeSystem/subscription-tag" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1141" +- id: "v3-TelecommunicationCapabilities" + description: "TelecommunicationCapabilities" + url: "http://terminology.hl7.org/CodeSystem/v3-TelecommunicationCapabilities" + oid: "urn:oid:2.16.840.1.113883.5.1118" +- id: "v2-0142" + description: "militaryStatus" + url: "http://terminology.hl7.org/CodeSystem/v2-0142" + oid: "urn:oid:2.16.840.1.113883.18.64" +- id: "v2-0007" + description: "admissionType" + url: "http://terminology.hl7.org/CodeSystem/v2-0007" + oid: "urn:oid:2.16.840.1.113883.18.9" +- id: "v3-icpc" + description: "International Classification of Primary Care, 1993 edition" + url: "http://hl7.org/fhir/sid/icpc-1" + oid: "urn:oid:2.16.840.1.113883.6.138" +- id: "v2-0457" + description: "overallClaimDisposition" + url: "http://terminology.hl7.org/CodeSystem/v2-0457" + oid: "urn:oid:2.16.840.1.113883.18.292" +- id: "v3-RoleStatus" + description: "RoleStatus" + url: "http://terminology.hl7.org/CodeSystem/v3-RoleStatus" + oid: "urn:oid:2.16.840.1.113883.5.1068" +- id: "v2-0904" + description: "securityCheckScheme" + url: "http://terminology.hl7.org/CodeSystem/v2-0904" + oid: "urn:oid:2.16.840.1.113883.18.415" +- id: "v2-0284" + description: "referralCategory" + url: "http://terminology.hl7.org/CodeSystem/v2-0284" + oid: "urn:oid:2.16.840.1.113883.18.177" +- id: "action-type" + description: "ActionType" + url: "http://terminology.hl7.org/CodeSystem/action-type" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1246" +- id: "questionnaire-usage-mode" + description: "QuestionnaireItemUsageMode" + url: "http://terminology.hl7.org/CodeSystem/questionnaire-usage-mode" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1274" +- id: "v2-0790" + description: "approvingRegulatoryAgency" + url: "http://terminology.hl7.org/CodeSystem/v2-0790" + oid: "urn:oid:2.16.840.1.113883.18.404" +- id: "v3-LivingArrangement" + description: "LivingArrangement" + url: "http://terminology.hl7.org/CodeSystem/v3-LivingArrangement" + oid: "urn:oid:2.16.840.1.113883.5.63" +- id: "v2-0513" + description: "bloodProductTransfusion-dispositionStatus" + url: "http://terminology.hl7.org/CodeSystem/v2-0513" + oid: "urn:oid:2.16.840.1.113883.18.335" +- id: "attribute-estimate-type" + description: "StatisticAttribute Estimate Type" + url: "http://terminology.hl7.org/CodeSystem/attribute-estimate-type" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1413" +- id: "v2-0006" + description: "religion2" + url: "http://terminology.hl7.org/CodeSystem/v2-0006" + oid: "urn:oid:2.16.840.1.113883.18.8" +- id: "v2-0456" + description: "nubc-ServiceLineRevenue-cs" + url: "http://terminology.hl7.org/CodeSystem/v2-0456" + oid: "urn:oid:2.16.840.1.113883.6.301.3" +- id: "missingtoothreason" + description: "Missing Tooth Reason Codes" + url: "http://terminology.hl7.org/CodeSystem/missingtoothreason" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1150" +- id: "organization-type" + description: "Organization type" + url: "http://terminology.hl7.org/CodeSystem/organization-type" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1128" +- id: "v2-0905" + description: "shipmentStatus" + url: "http://terminology.hl7.org/CodeSystem/v2-0905" + oid: "urn:oid:2.16.840.1.113883.18.416" +- id: "iso3166-1edition2alpha3" + description: "ISO 3166 Part 1 Country Codes, 2nd Edition, Alpha-3" + url: "http://terminology.hl7.org/CodeSystem/iso3166-1edition2alpha3" + oid: "urn:oid:1.0.3166.1.2.3" +- id: "NCIT" + description: "NCI Thesaurus" + url: "http://ncithesaurus-stage.nci.nih.gov" + oid: "urn:oid:2.16.840.1.113883.3.26.1.1" +- id: "v3-nciThesaurus" + description: "NCI Thesaurus" + url: "http://ncithesaurus-stage.nci.nih.gov" + oid: "urn:oid:2.16.840.1.113883.3.26.1.1" +- id: "v3-MessageWaitingPriority" + description: "MessageWaitingPriority" + url: "http://terminology.hl7.org/CodeSystem/v3-MessageWaitingPriority" + oid: "urn:oid:2.16.840.1.113883.5.1083" +- id: "v2-0682" + description: "deviceStatus" + url: "http://terminology.hl7.org/CodeSystem/v2-0682" + oid: "urn:oid:2.16.840.1.113883.18.386" +- id: "research-subject-state" + description: "ResearchSubjectState" + url: "http://terminology.hl7.org/CodeSystem/research-subject-state" + oid: "urn:oid:2.16.840.1.113883.4.642.1.0" +- id: "v2-0728" + description: "cclValue" + url: "http://terminology.hl7.org/CodeSystem/v2-0728" + oid: "urn:oid:2.16.840.1.113883.18.391" +- id: "v2-0397" + description: "sequencing" + url: "http://terminology.hl7.org/CodeSystem/v2-0397" + oid: "urn:oid:2.16.840.1.113883.18.248" +- id: "subscription-status-at-event" + description: "SubscriptionStatusAtEvent" + url: "http://terminology.hl7.org/CodeSystem/subscription-status-at-event" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1465" +- id: "research-study-phase" + description: "ResearchStudyPhase" + url: "http://terminology.hl7.org/CodeSystem/research-study-phase" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1247" +- id: "v2-0544" + description: "containerCondition" + url: "http://terminology.hl7.org/CodeSystem/v2-0544" + oid: "urn:oid:2.16.840.1.113883.18.353" +- id: "v3-LocalRemoteControlState" + description: "LocalRemoteControlState" + url: "http://terminology.hl7.org/CodeSystem/v3-LocalRemoteControlState" + oid: "urn:oid:2.16.840.1.113883.5.66" +- id: "ex-diagnosis-on-admission" + description: "Example Diagnosis on Admission Codes" + url: "http://terminology.hl7.org/CodeSystem/ex-diagnosis-on-admission" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1170" +- id: "v2-0401" + description: "governmentReimbursementProgram" + url: "http://terminology.hl7.org/CodeSystem/v2-0401" + oid: "urn:oid:2.16.840.1.113883.18.250" +- id: "encounter-type" + description: "Encounter type" + url: "http://terminology.hl7.org/CodeSystem/encounter-type" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1088" +- id: "icnp" + description: "International Classification for Nursing Practice" + url: "http://terminology.hl7.org/CodeSystem/icnp" + oid: "urn:oid:2.16.840.1.113883.6.97" +- id: "euclides" + description: "EUCLIDES" + url: "http://terminology.hl7.org/CodeSystem/euclides" + oid: "urn:oid:2.16.840.1.113883.6.34" +- id: "csaid" + description: "CAN/CSA-Z795-96" + url: "http://terminology.hl7.org/CodeSystem/csaid" + oid: "urn:oid:2.16.840.1.113883.6.235" +- id: "v3-ContainerSeparator" + description: "ContainerSeparator" + url: "http://terminology.hl7.org/CodeSystem/v3-ContainerSeparator" + oid: "urn:oid:2.16.840.1.113883.5.27" +- id: "ex-revenue-center" + description: "Example Revenue Center Codes" + url: "http://terminology.hl7.org/CodeSystem/ex-revenue-center" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1168" +- id: "v3-ParticipationMode" + description: "ParticipationMode" + url: "http://terminology.hl7.org/CodeSystem/v3-ParticipationMode" + oid: "urn:oid:2.16.840.1.113883.5.1064" +- id: "mthicpc2E-AE" + description: "ICPC2E Am Engl (Metathesaurus)" + url: "http://terminology.hl7.org/CodeSystem/mthicpc2E-AE" + oid: "urn:oid:2.16.840.1.113883.6.139.3" +- id: "endpoint-connection-type" + description: "Endpoint Connection Type" + url: "http://terminology.hl7.org/CodeSystem/endpoint-connection-type" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1140" +- id: "v2-0102" + description: "delayedAcknowledgmentType" + url: "http://terminology.hl7.org/CodeSystem/v2-0102" + oid: "urn:oid:2.16.840.1.113883.18.39" +- id: "fipspub92" + description: "FIPS_SOC" + url: "http://terminology.hl7.org/CodeSystem/fipspub92" + oid: "urn:oid:2.16.840.1.113883.6.91" +- id: "v3-ActInvoiceElementModifier" + description: "ActInvoiceElementModifier" + url: "http://terminology.hl7.org/CodeSystem/v3-ActInvoiceElementModifier" + oid: "urn:oid:2.16.840.1.113883.5.1051" +- id: "v2-0417" + description: "tissueType" + url: "http://terminology.hl7.org/CodeSystem/v2-0417" + oid: "urn:oid:2.16.840.1.113883.18.259" +- id: "verificationresult-communication-method" + description: "VerificationResult Communication Method" + url: "http://terminology.hl7.org/CodeSystem/verificationresult-communication-method" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1402" +- id: "v2-0339" + description: "advancedBeneficiaryNotice" + url: "http://terminology.hl7.org/CodeSystem/v2-0339" + oid: "urn:oid:2.16.840.1.113883.18.209" +- id: "hhcc" + description: "Home Health Care" + url: "http://terminology.hl7.org/CodeSystem/hhcc" + oid: "urn:oid:2.16.840.1.113883.6.17" +- id: "icpc2E-P" + description: "ICPC2E 1998 Plus" + url: "http://terminology.hl7.org/CodeSystem/icpc2E-P" + oid: "urn:oid:2.16.840.1.113883.6.140" +- id: "v2-0505" + description: "cyclicEntryExitIndicator" + url: "http://terminology.hl7.org/CodeSystem/v2-0505" + oid: "urn:oid:2.16.840.1.113883.18.329" +- id: "v2-0155" + description: "accept-applicationAcknowledgmentConditions" + url: "http://terminology.hl7.org/CodeSystem/v2-0155" + oid: "urn:oid:2.16.840.1.113883.18.73" +- id: "v2-0440" + description: "dataTypes" + url: "http://terminology.hl7.org/CodeSystem/v2-0440" + oid: "urn:oid:2.16.840.1.113883.18.280" + +- id: "v2-0207" + description: "processingMode" + url: "http://terminology.hl7.org/CodeSystem/v2-0207" + oid: "urn:oid:2.16.840.1.113883.18.112" +- id: "v2-0657" + description: "deviceType" + url: "http://terminology.hl7.org/CodeSystem/v2-0657" + oid: "urn:oid:2.16.840.1.113883.18.382" +- id: "IC2" + description: "ICHPPC-2" + url: "http://terminology.hl7.org/CodeSystem/IC2" + oid: "urn:oid:2.16.840.1.113883.6.44" +- id: "DEEDS405" + description: "DEEDS405" + url: "http://terminology.hl7.org/CodeSystem/DEEDS405" + oid: "urn:oid:2.16.840.1.113883.6.102.4.5" +- id: "coverageeligibilityresponse-ex-auth-support" + description: "CoverageEligibilityResponse Auth Support Codes" + url: "http://terminology.hl7.org/CodeSystem/coverageeligibilityresponse-ex-auth-support" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1394" +- id: "v3-OrganizationNameType" + description: "OrganizationNameType" + url: "http://terminology.hl7.org/CodeSystem/v3-OrganizationNameType" + oid: "urn:oid:2.16.840.1.113883.5.1016" +- id: "v2-0250" + description: "relatednessAssessment" + url: "http://terminology.hl7.org/CodeSystem/v2-0250" + oid: "urn:oid:2.16.840.1.113883.18.145" +- id: "v2-0315" + description: "livingWillCodes" + url: "http://terminology.hl7.org/CodeSystem/v2-0315" + oid: "urn:oid:2.16.840.1.113883.18.190" +- id: "v3-hl7PublishingSubSection" + description: "HL7PublishingSubSection" + url: "http://terminology.hl7.org/CodeSystem/v3-hl7PublishingSubSection" + oid: "urn:oid:2.16.840.1.113883.5.1134" +- id: "v2-0895" + description: "nubc-PresentOnAdmission-cs" + url: "http://terminology.hl7.org/CodeSystem/v2-0895" + oid: "urn:oid:2.16.840.1.113883.6.301.11" +- id: "v2-0179" + description: "responseLevel" + url: "http://terminology.hl7.org/CodeSystem/v2-0179" + oid: "urn:oid:2.16.840.1.113883.18.94" +- id: "v2-0483" + description: "authorizationMode" + url: "http://terminology.hl7.org/CodeSystem/v2-0483" + oid: "urn:oid:2.16.840.1.113883.18.308" +- id: "v2-0529" + description: "precision" + url: "http://terminology.hl7.org/CodeSystem/v2-0529" + oid: "urn:oid:2.16.840.1.113883.18.345" +- id: "v3-MaterialForm" + description: "MaterialForm" + url: "http://terminology.hl7.org/CodeSystem/v3-MaterialForm" + oid: "urn:oid:2.16.840.1.113883.5.1127" +- id: "definition-use" + description: "Structure Definition Use Codes / Keywords" + url: "http://terminology.hl7.org/CodeSystem/definition-use" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1191" +- id: "v2-0616" + description: "addressExpirationReason" + url: "http://terminology.hl7.org/CodeSystem/v2-0616" + oid: "urn:oid:2.16.840.1.113883.18.374" +- id: "v3-PeriodicIntervalOfTimeAbbreviation" + description: "PeriodicIntervalOfTimeAbbreviation" + url: "http://terminology.hl7.org/CodeSystem/v3-PeriodicIntervalOfTimeAbbreviation" + oid: "urn:oid:2.16.840.1.113883.5.1021" +- id: "certainty-subcomponent-type" + description: "StatisticCertaintySubcomponentType" + url: "http://terminology.hl7.org/CodeSystem/certainty-subcomponent-type" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1360" +- id: "v2-0180" + description: "masterfileActionCode" + url: "http://terminology.hl7.org/CodeSystem/v2-0180" + oid: "urn:oid:2.16.840.1.113883.18.95" +- id: "v2-0495" + description: "bodySiteModifier" + url: "http://terminology.hl7.org/CodeSystem/v2-0495" + oid: "urn:oid:2.16.840.1.113883.18.319" +- id: "v2-0211" + description: "alternateCharacterSets" + url: "http://terminology.hl7.org/CodeSystem/v2-0211" + oid: "urn:oid:2.16.840.1.113883.18.116" +- id: "v2-0354" + description: "messageStructure" + url: "http://terminology.hl7.org/CodeSystem/v2-0354" + oid: "urn:oid:2.16.840.1.113883.18.214" +- id: "v3-hgnc" + description: "HUGO Gene Nomenclature" + url: "http://www.genenames.org" + oid: "urn:oid:2.16.840.1.113883.6.281" +- id: "v2-0092" + description: "re-admissionIndicator" + url: "http://terminology.hl7.org/CodeSystem/v2-0092" + oid: "urn:oid:2.16.840.1.113883.18.36" +- id: "url" + description: "URL" + url: "http://terminology.hl7.org/CodeSystem/url" + oid: "urn:oid:2.16.840.1.113883.6.11" +- id: "nubc-UB92" + description: "National Uniform Billing Council, UB 92" + url: "http://terminology.hl7.org/CodeSystem/nubc-UB92" + oid: "urn:oid:2.16.840.1.113883.6.21" +- id: "adverse-event-seriousness" + description: "AdverseEventSeriousness" + url: "http://terminology.hl7.org/CodeSystem/adverse-event-seriousness" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1253" +- id: "v2-0909" + description: "patientResultsReleaseCategorizationScheme" + url: "http://terminology.hl7.org/CodeSystem/v2-0909" + oid: "urn:oid:2.16.840.1.113883.18.419" +- id: "v2-0323" + description: "actionCodes" + url: "http://terminology.hl7.org/CodeSystem/v2-0323" + oid: "urn:oid:2.16.840.1.113883.18.196" +- id: "icpc2E-P-AE" + description: "ICPC2E 1998 Plus Am Engl" + url: "http://terminology.hl7.org/CodeSystem/icpc2E-P-AE" + oid: "urn:oid:2.16.840.1.113883.6.140.1" +- id: "v3-Race" + description: "Race" + url: "http://terminology.hl7.org/CodeSystem/v3-Race" + oid: "urn:oid:2.16.840.1.113883.5.104" +- id: "v3-Sequencing" + description: "Sequencing" + url: "http://terminology.hl7.org/CodeSystem/v3-Sequencing" + oid: "urn:oid:2.16.840.1.113883.5.113" +- id: "MTHMDRSPA" + description: "MTH MedDRA Spanish" + url: "http://terminology.hl7.org/CodeSystem/MTHMDRSPA" + oid: "urn:oid:2.16.840.1.113883.6.165" +- id: "v2-0548" + description: "signatorysRelationshipToSubject" + url: "http://terminology.hl7.org/CodeSystem/v2-0548" + oid: "urn:oid:2.16.840.1.113883.18.355" +- id: "benefit-network" + description: "Network Type Codes" + url: "http://terminology.hl7.org/CodeSystem/benefit-network" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1177" +- id: "v2-0374" + description: "systemInducedContaminants" + url: "http://terminology.hl7.org/CodeSystem/v2-0374" + oid: "urn:oid:2.16.840.1.113883.18.232" +- id: "consentcategorycodes" + description: "Consent Category Codes" + url: "http://terminology.hl7.org/CodeSystem/consentcategorycodes" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1226" +- id: "v3-SpecimenType" + description: "SpecimenType" + url: "http://terminology.hl7.org/CodeSystem/v3-SpecimenType" + oid: "urn:oid:2.16.840.1.113883.5.129" +- id: "v3-ContainerCap" + description: "ContainerCap" + url: "http://terminology.hl7.org/CodeSystem/v3-ContainerCap" + oid: "urn:oid:2.16.840.1.113883.5.26" +- id: "v2-0231" + description: "studentStatus" + url: "http://terminology.hl7.org/CodeSystem/v2-0231" + oid: "urn:oid:2.16.840.1.113883.18.131" +- id: "metabolicSyndrome" + description: "METABOLIC SYNDROME" + url: "http://terminology.hl7.org/CodeSystem/metabolicSyndrome" + oid: "urn:oid:2.16.840.1.113883.6.249" +- id: "v3-ISO3166-1retired" + description: "ISO 3166 2 Character Country Codes" + url: "http://terminology.hl7.org/CodeSystem/v3-ISO3166-1retired" + oid: "urn:oid:2.16.1" +- id: "supply-item-type" + description: "Supply Item Type" + url: "http://terminology.hl7.org/CodeSystem/supply-item-type" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1194" +- id: "GMDN" + description: "Global Medical Device Nomenclature" + url: "http://terminology.hl7.org/CodeSystem/GMDN" + oid: "urn:oid:2.16.840.1.113883.6.276" +- id: "failure-action" + description: "Failure-action" + url: "http://terminology.hl7.org/CodeSystem/failure-action" + oid: "urn:oid:2.16.840.1.113883.4.642.1.891" +- id: "v2-0948" + description: "v2CS-relationshipType" + url: "http://terminology.hl7.org/CodeSystem/v2-0948" + oid: "urn:oid:2.16.840.1.113883.18.448" +- id: "cdcNHSN" + description: "CDC - National Healthcare Safety Network (NHSN) code system" + url: "http://terminology.hl7.org/CodeSystem/cdcNHSN" + oid: "urn:oid:2.16.840.1.113883.6.277" +- id: "variant-state" + description: "sequenceStatus" + url: "http://terminology.hl7.org/CodeSystem/variant-state" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1085" +- id: "HL70227" + description: "PH_ManufacturersOfVaccinesMVX_CDC_NIP" + url: "http://terminology.hl7.org/CodeSystem/v2-0227" + oid: "urn:oid:2.16.840.1.113883.12.227" +- id: "v2-0227" + description: "PH_ManufacturersOfVaccinesMVX_CDC_NIP" + url: "http://terminology.hl7.org/CodeSystem/v2-0227" + oid: "urn:oid:2.16.840.1.113883.12.227" +- id: "encounter-subject-status" + description: "Encounter subject status" + url: "http://terminology.hl7.org/CodeSystem/encounter-subject-status" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1420" +- id: "v3-NullFlavor" + description: "NullFlavor" + url: "http://terminology.hl7.org/CodeSystem/v3-NullFlavor" + oid: "urn:oid:2.16.840.1.113883.5.1008" +- id: "v2-0159" + description: "dietCodeSpecificationType" + url: "http://terminology.hl7.org/CodeSystem/v2-0159" + oid: "urn:oid:2.16.840.1.113883.18.77" +- id: "v3-hc-AIGN" + description: "Active Ingredient Group Number" + url: "http://www.canada.ca/en/health-canada/services/drugs-health-products/drug-products/drug-product-database-4" + oid: "urn:oid:2.16.840.1.113883.5.1106" +- id: "dicom-audit-lifecycle" + description: null + url: "http://terminology.hl7.org/CodeSystem/dicom-audit-lifecycle" + oid: null +- id: "ex-claimsubtype" + description: "Example Claim SubType Codes" + url: "http://terminology.hl7.org/CodeSystem/ex-claimsubtype" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1158" +- id: "activity-definition-category" + description: "ActivityDefinitionCategory" + url: "http://terminology.hl7.org/CodeSystem/activity-definition-category" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1243" +- id: "v2-0335" + description: "repeatPattern" + url: "http://terminology.hl7.org/CodeSystem/v2-0335" + oid: "urn:oid:2.16.840.1.113883.18.205" +- id: "medicationrequest-status-reason" + description: "MedicationRequest Status Reason Codes" + url: "http://terminology.hl7.org/CodeSystem/medicationrequest-status-reason" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1325" +- id: "icd-o-3" + description: "International Classification of Diseases for Oncology, version 3." + url: "http://terminology.hl7.org/CodeSystem/icd-o-3" + oid: "urn:oid:2.16.840.1.113883.6.43.1" +- id: "v2-0270" + description: "documentType" + url: "http://terminology.hl7.org/CodeSystem/v2-0270" + oid: "urn:oid:2.16.840.1.113883.18.163" +- id: "v2-0437" + description: "alertDevice" + url: "http://terminology.hl7.org/CodeSystem/v2-0437" + oid: "urn:oid:2.16.840.1.113883.18.278" +- id: "conformance-expectation" + description: "ConformanceExpectation" + url: "http://terminology.hl7.org/CodeSystem/conformance-expectation" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1271" +- id: "v3-EmployeeJobClass" + description: "EmployeeJobClass" + url: "http://terminology.hl7.org/CodeSystem/v3-EmployeeJobClass" + oid: "urn:oid:2.16.840.1.113883.5.1059" +- id: "v2-0122" + description: "chargeType" + url: "http://terminology.hl7.org/CodeSystem/v2-0122" + oid: "urn:oid:2.16.840.1.113883.18.50" +- id: "v2-0572" + description: "taxStatus" + url: "http://terminology.hl7.org/CodeSystem/v2-0572" + oid: "urn:oid:2.16.840.1.113883.18.372" +- id: "entformula-additive" + description: "Enteral Formula Additive Type Code" + url: "http://terminology.hl7.org/CodeSystem/entformula-additive" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1123" +- id: "adverse-event-causality-method" + description: "AdverseEventCausalityMethod" + url: "http://terminology.hl7.org/CodeSystem/adverse-event-causality-method" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1255" +- id: "v2-0933" + description: "intendedProcedureType" + url: "http://terminology.hl7.org/CodeSystem/v2-0933" + oid: "urn:oid:2.16.840.1.113883.18.434" +- id: "icpc-SWE" + description: "International Classification of Primary Care 1993 Swedish" + url: "http://terminology.hl7.org/CodeSystem/icpc-SWE" + oid: "urn:oid:2.16.840.1.113883.6.138.13" +- id: "message-reasons-encounter" + description: "Example Message Reason Codes" + url: "http://terminology.hl7.org/CodeSystem/message-reasons-encounter" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1122" +- id: "v2-0175" + description: "masterFileIdentifierCodes" + url: "http://terminology.hl7.org/CodeSystem/v2-0175" + oid: "urn:oid:2.16.840.1.113883.18.91" +- id: "goal-acceptance-status" + description: "GoalAcceptanceStatus" + url: "http://terminology.hl7.org/CodeSystem/goal-acceptance-status" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1270" +- id: "v2-0749" + description: "drgGroupingStatus" + url: "http://terminology.hl7.org/CodeSystem/v2-0749" + oid: "urn:oid:2.16.840.1.113883.18.396" +- id: "v2-0925" + description: "phlebotomyIssue" + url: "http://terminology.hl7.org/CodeSystem/v2-0925" + oid: "urn:oid:2.16.840.1.113883.18.431" +- id: "HL70163" + description: "bodySite" + url: "http://terminology.hl7.org/CodeSystem/v2-0163" + oid: "urn:oid:2.16.840.1.113883.18.81" +- id: "v2-0163" + description: "bodySite" + url: "http://terminology.hl7.org/CodeSystem/v2-0163" + oid: "urn:oid:2.16.840.1.113883.18.81" +- id: "v2-0499" + description: "consentBypassReason" + url: "http://terminology.hl7.org/CodeSystem/v2-0499" + oid: "urn:oid:2.16.840.1.113883.18.323" +- id: "medicationknowledge-characteristic" + description: "MedicationKnowledge Characteristic Codes" + url: "http://terminology.hl7.org/CodeSystem/medicationknowledge-characteristic" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1338" +- id: "NHSNVocabulary" + description: "NHSN HAI Vocabulary" + url: "http://terminology.hl7.org/CodeSystem/NHSNVocabulary" + oid: "urn:oid:2.16.840.1.113883.6.274" + +- id: "v2-0421" + description: "severityOfIllness" + url: "http://terminology.hl7.org/CodeSystem/v2-0421" + oid: "urn:oid:2.16.840.1.113883.18.262" +- id: "v2-0564" + description: "adjustmentCategory" + url: "http://terminology.hl7.org/CodeSystem/v2-0564" + oid: "urn:oid:2.16.840.1.113883.18.366" +- id: "camncvs" + description: "CAMNCVS" + url: "http://terminology.hl7.org/CodeSystem/camncvs" + oid: "urn:oid:2.16.840.1.113883.6.19" +- id: "GCRT" + description: "GCRT" + url: "http://terminology.hl7.org/CodeSystem/GCRT" + oid: "urn:oid:2.16.840.1.113883.4.80" +- id: "v3-EntityNamePartTypeR2" + description: "EntityNamePartTypeR2" + url: "http://terminology.hl7.org/CodeSystem/v3-EntityNamePartTypeR2" + oid: "urn:oid:2.16.840.1.113883.5.1121" +- id: "v3-EntityCode" + description: "EntityCode" + url: "http://terminology.hl7.org/CodeSystem/v3-EntityCode" + oid: "urn:oid:2.16.840.1.113883.5.1060" +- id: "v2-0216" + description: "patientStatus" + url: "http://terminology.hl7.org/CodeSystem/v2-0216" + oid: "urn:oid:2.16.840.1.113883.18.120" +- id: "testscript-operation-codes" + description: "Test script operation code" + url: "http://terminology.hl7.org/CodeSystem/testscript-operation-codes" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1195" +- id: "v2-0353" + description: "cweStatuses" + url: "http://terminology.hl7.org/CodeSystem/v2-0353" + oid: "urn:oid:2.16.840.1.113883.18.213" +- id: "DEEDS414" + description: "DEEDS414" + url: "http://terminology.hl7.org/CodeSystem/DEEDS414" + oid: "urn:oid:2.16.840.1.113883.6.102.4.14" +- id: "EPSG-GeodeticParameterDataset" + description: "EPSG Geodetic Parameter Dataset" + url: "http://terminology.hl7.org/CodeSystem/EPSG-GeodeticParameterDataset" + oid: "urn:oid:2.16.840.1.113883.6.242" +- id: "v2-0187" + description: "providerBilling" + url: "http://terminology.hl7.org/CodeSystem/v2-0187" + oid: "urn:oid:2.16.840.1.113883.18.99" + +- id: "adverse-event-causality-assess" + description: "AdverseEventCausalityAssessment" + url: "http://terminology.hl7.org/CodeSystem/adverse-event-causality-assess" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1254" +- id: "v2-0538" + description: "institutionRelationshipType" + url: "http://terminology.hl7.org/CodeSystem/v2-0538" + oid: "urn:oid:2.16.840.1.113883.18.351" +- id: "v2-0168" + description: "processingPriority" + url: "http://terminology.hl7.org/CodeSystem/v2-0168" + oid: "urn:oid:2.16.840.1.113883.18.86" +- id: "NHSNBSIRiskFactors" + description: "NHSN BSI Risk Factors" + url: "http://terminology.hl7.org/CodeSystem/NHSNBSIRiskFactors" + oid: "urn:oid:2.16.840.1.113883.6.266" +- id: "v2-0492" + description: "specimenAppropriateness" + url: "http://terminology.hl7.org/CodeSystem/v2-0492" + oid: "urn:oid:2.16.840.1.113883.18.316" +- id: "v3-scptype" + description: "pan-Canadian Provider Types" + url: "https://fhir.infoway-inforoute.ca/CodeSystem/scptype" + oid: "urn:oid:2.16.840.1.113883.2.20.5.3" +- id: "v3-ParticipationSignature" + description: "ParticipationSignature" + url: "http://terminology.hl7.org/CodeSystem/v3-ParticipationSignature" + oid: "urn:oid:2.16.840.1.113883.5.89" +- id: "v2-0241" + description: "patientOutcome" + url: "http://terminology.hl7.org/CodeSystem/v2-0241" + oid: "urn:oid:2.16.840.1.113883.18.140" +- id: "DEEDS506" + description: "DEEDS506" + url: "http://terminology.hl7.org/CodeSystem/DEEDS506" + oid: "urn:oid:2.16.840.1.113883.6.102.5.6" +- id: "smart-capabilities" + description: "SmartCapabilities" + url: "http://terminology.hl7.org/CodeSystem/smart-capabilities" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1265" +- id: "CDARUS" + description: "CDA_RUS" + url: "http://terminology.hl7.org/CodeSystem/CDARUS" + oid: "urn:oid:2.16.840.1.113883.6.239" +- id: "IETF1766" + description: "IETF RFC 1766" + url: "http://terminology.hl7.org/CodeSystem/IETF1766" + oid: "urn:oid:2.16.840.1.113883.6.84" +- id: "v2-0938" + description: "collectionEvent" + url: "http://terminology.hl7.org/CodeSystem/v2-0938" + oid: "urn:oid:2.16.840.1.113883.18.441" +- id: "v3-ContextControl" + description: "ContextControl" + url: "http://terminology.hl7.org/CodeSystem/v3-ContextControl" + oid: "urn:oid:2.16.840.1.113883.5.1057" +- id: "hibccHIN" + description: "HIBCC" + url: "http://terminology.hl7.org/CodeSystem/hibccHIN" + oid: "urn:oid:2.16.840.1.113883.6.40" +- id: "v2-0191" + description: "typeOfReferencedData" + url: "http://terminology.hl7.org/CodeSystem/v2-0191" + oid: "urn:oid:2.16.840.1.113883.18.102" +- id: "v2-0484" + description: "dispenseType" + url: "http://terminology.hl7.org/CodeSystem/v2-0484" + oid: "urn:oid:2.16.840.1.113883.18.309" +- id: "v3-ParticipationType" + description: "ParticipationType" + url: "http://terminology.hl7.org/CodeSystem/v3-ParticipationType" + oid: "urn:oid:2.16.840.1.113883.5.90" +- id: "resource-type-link" + description: "PayeeResourceType" + url: "http://terminology.hl7.org/CodeSystem/resource-type-link" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1180" +- id: "ex-relatedclaimrelationship" + description: "Example Related Claim Relationship Codes" + url: "http://terminology.hl7.org/CodeSystem/ex-relatedclaimrelationship" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1159" +- id: "v2-0257" + description: "natureOfChallenge" + url: "http://terminology.hl7.org/CodeSystem/v2-0257" + oid: "urn:oid:2.16.840.1.113883.18.152" +- id: "research-study-prim-purp-type" + description: "ResearchStudyPrimaryPurposeType" + url: "http://terminology.hl7.org/CodeSystem/research-study-prim-purp-type" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1250" +- id: "v2-0742" + description: "drgStatusFinancialCalculation" + url: "http://terminology.hl7.org/CodeSystem/v2-0742" + oid: "urn:oid:2.16.840.1.113883.18.395" +- id: "v3-ActPriority" + description: "ActPriority" + url: "http://terminology.hl7.org/CodeSystem/v3-ActPriority" + oid: "urn:oid:2.16.840.1.113883.5.7" +- id: "v3-ResponseModality" + description: "ResponseModality" + url: "http://terminology.hl7.org/CodeSystem/v3-ResponseModality" + oid: "urn:oid:2.16.840.1.113883.5.109" +- id: "claimcareteamrole" + description: "Claim Care Team Role Codes" + url: "http://terminology.hl7.org/CodeSystem/claimcareteamrole" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1165" +- id: "v2-0083" + description: "outlierType" + url: "http://terminology.hl7.org/CodeSystem/v2-0083" + oid: "urn:oid:2.16.840.1.113883.18.33" +- id: "v3-EducationLevel" + description: "Education Level" + url: "http://terminology.hl7.org/CodeSystem/v3-EducationLevel" + oid: "urn:oid:2.16.840.1.113883.5.1077" +- id: "v2-0200" + description: "nameType2" + url: "http://terminology.hl7.org/CodeSystem/v2-0200" + oid: "urn:oid:2.16.840.1.113883.18.105" +- id: "DEEDS402" + description: "DEEDS402" + url: "http://terminology.hl7.org/CodeSystem/DEEDS402" + oid: "urn:oid:2.16.840.1.113883.6.102.4.2" +- id: "contractactorrole" + description: "Contract Actor Role Codes" + url: "http://terminology.hl7.org/CodeSystem/contractactorrole" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1203" +- id: "v2-0502" + description: "non-subjectConsenterReason" + url: "http://terminology.hl7.org/CodeSystem/v2-0502" + oid: "urn:oid:2.16.840.1.113883.18.326" +- id: "v3-mediaType" + description: "Media Type" + url: "http://terminology.hl7.org/CodeSystem/v3-mediaType" + oid: "urn:oid:2.16.840.1.113883.5.79" +- id: "v2-0017" + description: "transactionType" + url: "http://terminology.hl7.org/CodeSystem/v2-0017" + oid: "urn:oid:2.16.840.1.113883.18.13" +- id: "v2-0914" + description: "rootCause" + url: "http://terminology.hl7.org/CodeSystem/v2-0914" + oid: "urn:oid:2.16.840.1.113883.18.421" +- id: "v3-ActRelationshipSplit" + description: "ActRelationshipSplit" + url: "http://terminology.hl7.org/CodeSystem/v3-ActRelationshipSplit" + oid: "urn:oid:2.16.840.1.113883.5.13" +- id: "v2-0294" + description: "timeSelectionCriteriaParameterClass" + url: "http://terminology.hl7.org/CodeSystem/v2-0294" + oid: "urn:oid:2.16.840.1.113883.18.183" +- id: "standards-status" + description: "StandardsStatus" + url: "http://terminology.hl7.org/CodeSystem/standards-status" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1366" +- id: "adjudication-reason" + description: "Adjudication Reason Codes" + url: "http://terminology.hl7.org/CodeSystem/adjudication-reason" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1172" +- id: "abcCodes" + description: "ABCcodes" + url: "http://terminology.hl7.org/CodeSystem/abcCodes" + oid: "urn:oid:2.16.840.1.113883.6.25" +- id: "v3-ISO3166-2retired" + description: "ISO 3166 3 Character Country Codes" + url: "http://terminology.hl7.org/CodeSystem/v3-ISO3166-2retired" + oid: "urn:oid:2.16.2" +- id: "v2-0105" + description: "sourceOfComment" + url: "http://terminology.hl7.org/CodeSystem/v2-0105" + oid: "urn:oid:2.16.840.1.113883.18.42" +- id: "v2-0555" + description: "invoiceType" + url: "http://terminology.hl7.org/CodeSystem/v2-0555" + oid: "urn:oid:2.16.840.1.113883.18.359" +- id: "nmmds" + description: "Nursing Management Minimum Data Set" + url: "http://terminology.hl7.org/CodeSystem/nmmds" + oid: "urn:oid:2.16.840.1.113883.6.23" +- id: "v2-0806" + description: "sterilizationType" + url: "http://terminology.hl7.org/CodeSystem/v2-0806" + oid: "urn:oid:2.16.840.1.113883.18.406" +- id: "iso-21089-lifecycle" + description: null + url: "http://terminology.hl7.org/CodeSystem/iso-21089-lifecycle" + oid: null +- id: "icpc-NOR" + description: "International Classification of Primary Care 1993 Norwegian" + url: "http://terminology.hl7.org/CodeSystem/icpc-NOR" + oid: "urn:oid:2.16.840.1.113883.6.138.10" +- id: "v3-styleType" + description: "Style Type" + url: "http://terminology.hl7.org/CodeSystem/v3-styleType" + oid: "urn:oid:2.16.840.1.113883.5.1095" +- id: "v2-0739" + description: "drgStatusPatient" + url: "http://terminology.hl7.org/CodeSystem/v2-0739" + oid: "urn:oid:2.16.840.1.113883.18.394" +- id: "condition-ver-status" + description: "ConditionVerificationStatus" + url: "http://terminology.hl7.org/CodeSystem/condition-ver-status" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1075" +- id: "USZIPCODES" + description: "United States Postal Service" + url: "http://terminology.hl7.org/CodeSystem/USZIPCODES" + oid: "urn:oid:2.16.840.1.113883.6.231" +- id: "v2-0369" + description: "specimenRole" + url: "http://terminology.hl7.org/CodeSystem/v2-0369" + oid: "urn:oid:2.16.840.1.113883.18.227" +- id: "icpc-DAN" + description: "International Classification of Primary Care 1993 Danish" + url: "http://terminology.hl7.org/CodeSystem/icpc-DAN" + oid: "urn:oid:2.16.840.1.113883.6.138.2" +- id: "v2-0406" + description: "organizationUnitType" + url: "http://terminology.hl7.org/CodeSystem/v2-0406" + oid: "urn:oid:2.16.840.1.113883.18.254" +- id: "variable-role" + description: "EvidenceVariableRole" + url: "http://terminology.hl7.org/CodeSystem/variable-role" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1457" +- id: "v3-ObservationValue" + description: "ObservationValue" + url: "http://terminology.hl7.org/CodeSystem/v3-ObservationValue" + oid: "urn:oid:2.16.840.1.113883.5.1063" +- id: "ex-procedure-type" + description: "Example Procedure Type Codes" + url: "http://terminology.hl7.org/CodeSystem/ex-procedure-type" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1388" +- id: "NHSNSSILocationType" + description: "NHSN SSI Location Type" + url: "http://terminology.hl7.org/CodeSystem/NHSNSSILocationType" + oid: "urn:oid:2.16.840.1.113883.6.265" +- id: "v3-hl7Realm" + description: "HL7Realm" + url: "http://terminology.hl7.org/CodeSystem/v3-hl7Realm" + oid: "urn:oid:2.16.840.1.113883.5.1124" +- id: "icd10ae" + description: "ICD-10 American English" + url: "http://terminology.hl7.org/CodeSystem/icd10ae" + oid: "urn:oid:2.16.840.1.113883.6.3.1" +- id: "v2-0144" + description: "eligibilitySource" + url: "http://terminology.hl7.org/CodeSystem/v2-0144" + oid: "urn:oid:2.16.840.1.113883.18.65" +- id: "v3-substanceAdminSubstitution" + description: "Substance Admin Substitution" + url: "http://terminology.hl7.org/CodeSystem/v3-substanceAdminSubstitution" + oid: "urn:oid:2.16.840.1.113883.5.1070" +- id: "v2-0514" + description: "transfusionAdverseReaction" + url: "http://terminology.hl7.org/CodeSystem/v2-0514" + oid: "urn:oid:2.16.840.1.113883.18.336" +- id: "standardBillingUnit" + description: "Standard Billing Unit" + url: "http://terminology.hl7.org/CodeSystem/standardBillingUnit" + oid: "urn:oid:2.16.840.1.113883.2.13" +- id: "v2-0001" + description: "administrativeSex" + url: "http://terminology.hl7.org/CodeSystem/v2-0001" + oid: "urn:oid:2.16.840.1.113883.18.2" +- id: "validation-process" + description: "Validation-process" + url: "http://terminology.hl7.org/CodeSystem/validation-process" + oid: "urn:oid:2.16.840.1.113883.4.642.1.889" +- id: "v2-0778" + description: "itemType" + url: "http://terminology.hl7.org/CodeSystem/v2-0778" + oid: "urn:oid:2.16.840.1.113883.18.403" +- id: "v2-0282" + description: "referralDisposition" + url: "http://terminology.hl7.org/CodeSystem/v2-0282" + oid: "urn:oid:2.16.840.1.113883.18.175" +- id: "v3-ObservationInterpretation" + description: "ObservationInterpretation" + url: "http://terminology.hl7.org/CodeSystem/v3-ObservationInterpretation" + oid: "urn:oid:2.16.840.1.113883.5.83" +- id: "pclocd" + description: "pan-Canadian LOINC Observation Code Database" + url: "https://fhir.infoway-inforoute.ca/CodeSystem/pCLOCD" + oid: "urn:oid:2.16.840.1.113883.2.20.5.1" +- id: "condition-clinical" + description: "Condition Clinical Status Codes" + url: "http://terminology.hl7.org/CodeSystem/condition-clinical" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1074" +- id: "DEEDS418" + description: "DEEDS418" + url: "http://terminology.hl7.org/CodeSystem/DEEDS418" + oid: "urn:oid:2.16.840.1.113883.6.102.4.18" +- id: "can-push-updates" + description: "Can-push-updates" + url: "http://terminology.hl7.org/CodeSystem/can-push-updates" + oid: "urn:oid:2.16.840.1.113883.4.642.1.897" +- id: "goal-achievement" + description: "Goal achievement status" + url: "http://terminology.hl7.org/CodeSystem/goal-achievement" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1375" +- id: "v2-0426" + description: "bloodProduct" + url: "http://terminology.hl7.org/CodeSystem/v2-0426" + oid: "urn:oid:2.16.840.1.113883.18.267" +- id: "v2-0076" + description: "messageType" + url: "http://terminology.hl7.org/CodeSystem/v2-0076" + oid: "urn:oid:2.16.840.1.113883.18.30" +- id: "deeds-old" + description: "DEEDS(old)" + url: "http://terminology.hl7.org/CodeSystem/deeds-old" + oid: "urn:oid:2.16.840.1.113883.6.89" +- id: "v3-hl7CMETAttribution" + description: "HL7CMETAttribution" + url: "http://terminology.hl7.org/CodeSystem/v3-hl7CMETAttribution" + oid: "urn:oid:2.16.840.1.113883.5.1132" +- id: "research-subject-state-type" + description: "ResearchSubjectStateType" + url: "http://terminology.hl7.org/CodeSystem/research-subject-state-type" + oid: "urn:oid:2.16.840.1.113883.4.642.1.0" +- id: "evidence-quality" + description: "QualityOfEvidenceRating" + url: "http://terminology.hl7.org/CodeSystem/evidence-quality" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1267" +- id: "claiminformationcategory" + description: "Claim Information Category Codes" + url: "http://terminology.hl7.org/CodeSystem/claiminformationcategory" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1163" +- id: "v2-0133" + description: "procedurePractitionerIdentifierCodeType" + url: "http://terminology.hl7.org/CodeSystem/v2-0133" + oid: "urn:oid:2.16.840.1.113883.18.59" +- id: "v3-VaccineManufacturer" + description: "VaccineManufacturer" + url: "http://terminology.hl7.org/CodeSystem/v3-VaccineManufacturer" + oid: "urn:oid:2.16.840.1.113883.5.144" +- id: "v2-tables" + description: "V2 Table List" + url: "http://terminology.hl7.org/CodeSystem/v2-tables" + oid: null +- id: "v2-0922" + description: "certificationCategory" + url: "http://terminology.hl7.org/CodeSystem/v2-0922" + oid: "urn:oid:2.16.840.1.113883.18.428" +- id: "v3-TribalEntityUS" + description: "TribalEntityUS" + url: "http://terminology.hl7.org/CodeSystem/v3-TribalEntityUS" + oid: "urn:oid:2.16.840.1.113883.5.140" +- id: "immunization-evaluation-dose-status-reason" + description: "Immunization Evaluation Dose Status Reason codes" + url: "http://terminology.hl7.org/CodeSystem/immunization-evaluation-dose-status-reason" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1103" +- id: "v2-0164" + description: "administrationDevice" + url: "http://terminology.hl7.org/CodeSystem/v2-0164" + oid: "urn:oid:2.16.840.1.113883.18.82" +- id: "v2-0534" + description: "clergyNotificationType" + url: "http://terminology.hl7.org/CodeSystem/v2-0534" + oid: "urn:oid:2.16.840.1.113883.18.348" +- id: "allergyintolerance-verification" + description: "AllergyIntolerance Verification Status" + url: "http://terminology.hl7.org/CodeSystem/allergyintolerance-verification" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1371" +- id: "noc" + description: "NOC" + url: "http://terminology.hl7.org/CodeSystem/noc" + oid: "urn:oid:2.16.840.1.113883.6.16" +- id: "library-type" + description: "LibraryType" + url: "http://terminology.hl7.org/CodeSystem/library-type" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1230" +- id: "fundsreserve" + description: "Funds Reservation Codes" + url: "http://terminology.hl7.org/CodeSystem/fundsreserve" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1051" +- id: "v3-IdentifierScope" + description: "IdentifierScope" + url: "http://terminology.hl7.org/CodeSystem/v3-IdentifierScope" + oid: "urn:oid:2.16.840.1.113883.5.1116" +- id: "v2-0871" + description: "supplyRisk" + url: "http://terminology.hl7.org/CodeSystem/v2-0871" + oid: "urn:oid:2.16.840.1.113883.18.410" +- id: "v3-rxNorm" + description: "RxNorm" + url: "http://www.nlm.nih.gov/research/umls/rxnorm" + oid: "urn:oid:2.16.840.1.113883.6.88" +- id: "financialtaskcode" + description: "Financial Task Codes" + url: "http://terminology.hl7.org/CodeSystem/financialtaskcode" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1390" +- id: "v2-0488" + description: "specimenCollectionMethod" + url: "http://terminology.hl7.org/CodeSystem/v2-0488" + oid: "urn:oid:2.16.840.1.113883.18.312" +- id: "iso21000-6-2004E-RDD" + description: "ISO/IEC 21000-6:2004(E) Rights Data Dictionary" + url: "http://terminology.hl7.org/CodeSystem/iso21000-6-2004E-RDD" + oid: "urn:oid:1.0.21000.6" +- id: "v3-cci" + description: "Canadian Classification of Health Interventions" + url: "http://cihi.ca/fhir/CodeSystem/cihi-cci" + oid: "urn:oid:2.16.840.1.113883.6.95" +- id: "certainty-subcomponent-rating" + description: "StatisticCertaintySubcomponentRating" + url: "http://terminology.hl7.org/CodeSystem/certainty-subcomponent-rating" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1362" +- id: "ex-coverage-financial-exception" + description: "Example Coverage Financial Exception Codes" + url: "http://terminology.hl7.org/CodeSystem/ex-coverage-financial-exception" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1329" +- id: "v3-mdc" + description: "ISO 11073-10101 Health informatics - Point-of-care" + url: "urn:iso:std:iso:11073:10101" + oid: "urn:oid:2.16.840.1.113883.6.24" +- id: "v2-0430" + description: "arrivalMode" + url: "http://terminology.hl7.org/CodeSystem/v2-0430" + oid: "urn:oid:2.16.840.1.113883.18.271" +- id: "v3-RouteOfAdministration" + description: "RouteOfAdministration" + url: "http://terminology.hl7.org/CodeSystem/v3-RouteOfAdministration" + oid: "urn:oid:2.16.840.1.113883.5.112" +- id: "iso639-1" + description: "ISO 639-1: Codes for the representation of names of languages -- Part 1:\ + \ Alpha-2 code" + url: "http://terminology.hl7.org/CodeSystem/iso639-1" + oid: "urn:oid:1.0.639.1" +- id: "v2-0298" + description: "cpRangeType" + url: "http://terminology.hl7.org/CodeSystem/v2-0298" + oid: "urn:oid:2.16.840.1.113883.18.184" +- id: "v2-0332" + description: "sourceType" + url: "http://terminology.hl7.org/CodeSystem/v2-0332" + oid: "urn:oid:2.16.840.1.113883.18.203" +- id: "v2-0277" + description: "appointmentType" + url: "http://terminology.hl7.org/CodeSystem/v2-0277" + oid: "urn:oid:2.16.840.1.113883.18.170" +- id: "security-source-type" + description: "Audit Event Source Type" + url: "http://terminology.hl7.org/CodeSystem/security-source-type" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1137" +- id: "v3-ietf3066" + description: "Tags for the Identification of Languages" + url: "urn:ietf:bcp:47" + oid: "urn:oid:2.16.840.1.113883.6.121" +- id: "v2-0918" + description: "pcaType" + url: "http://terminology.hl7.org/CodeSystem/v2-0918" + oid: "urn:oid:2.16.840.1.113883.18.424" +- id: "chargeitem-billingcodes" + description: "ChargeItemCode" + url: "http://terminology.hl7.org/CodeSystem/chargeitem-billingcodes" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1257" +- id: "DEEDS422" + description: "DEEDS422" + url: "http://terminology.hl7.org/CodeSystem/DEEDS422" + oid: "urn:oid:2.16.840.1.113883.6.102.4.22" +- id: "v2-0365" + description: "equipmentState" + url: "http://terminology.hl7.org/CodeSystem/v2-0365" + oid: "urn:oid:2.16.840.1.113883.18.223" +- id: "v2-0220" + description: "livingArrangement" + url: "http://terminology.hl7.org/CodeSystem/v2-0220" + oid: "urn:oid:2.16.840.1.113883.18.122" +- id: "v2-0559" + description: "product-serviceStatus" + url: "http://terminology.hl7.org/CodeSystem/v2-0559" + oid: "urn:oid:2.16.840.1.113883.18.363" +- id: "v2-0109" + description: "reportPriority" + url: "http://terminology.hl7.org/CodeSystem/v2-0109" + oid: "urn:oid:2.16.840.1.113883.18.46" +- id: "v3-Confidentiality" + description: "Confidentiality" + url: "http://terminology.hl7.org/CodeSystem/v3-Confidentiality" + oid: "urn:oid:2.16.840.1.113883.5.25" +- id: "referencerange-meaning" + description: "Observation Reference Range Meaning Codes" + url: "http://terminology.hl7.org/CodeSystem/referencerange-meaning" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1124" +- id: "v2-0373" + description: "treatment" + url: "http://terminology.hl7.org/CodeSystem/v2-0373" + oid: "urn:oid:2.16.840.1.113883.18.231" +- id: "mth-icpc2-icd10-AE" + description: "ICPC2-ICD10 Thesaurus, Am Engl" + url: "http://terminology.hl7.org/CodeSystem/mth-icpc2-icd10-AE" + oid: "urn:oid:2.16.840.1.113883.6.142.3" +- id: "NHSNSpinalFusionApproach" + description: "NHSN Spinal Fusion Approach" + url: "http://terminology.hl7.org/CodeSystem/NHSNSpinalFusionApproach" + oid: "urn:oid:2.16.840.1.113883.6.262" +- id: "v2-0236" + description: "eventReportedTo" + url: "http://terminology.hl7.org/CodeSystem/v2-0236" + oid: "urn:oid:2.16.840.1.113883.18.135" +- id: "ex-visionprescriptionproduct" + description: "Example Vision Prescription Product Codes" + url: "http://terminology.hl7.org/CodeSystem/ex-visionprescriptionproduct" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1188" +- id: "need" + description: "Need" + url: "http://terminology.hl7.org/CodeSystem/need" + oid: "urn:oid:2.16.840.1.113883.4.642.1.883" +- id: "naaccrCodes" + description: "NAACCR" + url: "http://terminology.hl7.org/CodeSystem/naaccrCodes" + oid: "urn:oid:2.16.840.1.113883.6.7" +- id: "icpc-BAQ" + description: "International Classification of Primary Care 1993 Basque" + url: "http://terminology.hl7.org/CodeSystem/icpc-BAQ" + oid: "urn:oid:2.16.840.1.113883.6.138.1" +- id: "v2-0324" + description: "locationCharacteristic" + url: "http://terminology.hl7.org/CodeSystem/v2-0324" + oid: "urn:oid:2.16.840.1.113883.18.197" +- id: "v3-TableCellHorizontalAlign" + description: "TableCellHorizontalAlign" + url: "http://terminology.hl7.org/CodeSystem/v3-TableCellHorizontalAlign" + oid: "urn:oid:2.16.840.1.113883.5.131" +- id: "nddf" + description: "National Drug Data File" + url: "http://terminology.hl7.org/CodeSystem/nddf" + oid: "urn:oid:2.16.840.1.113883.6.208" +- id: "iso639-2ret" + description: "ISO 639-2 Alpha-3 Language Codes" + url: "http://terminology.hl7.org/CodeSystem/iso639-2ret" + oid: "urn:oid:2.16.840.1.113883.6.100" +- id: "v3-hl7ITSVersionCode" + description: "HL7 ITS Version Code" + url: "http://terminology.hl7.org/CodeSystem/v3-hl7ITSVersionCode" + oid: "urn:oid:2.16.840.1.113883.5.1092" +- id: "v2-0261" + description: "locationEquipment" + url: "http://terminology.hl7.org/CodeSystem/v2-0261" + oid: "urn:oid:2.16.840.1.113883.18.156" +- id: "v2-0518" + description: "overrideType" + url: "http://terminology.hl7.org/CodeSystem/v2-0518" + oid: "urn:oid:2.16.840.1.113883.18.339" +- id: "v2-0148" + description: "moneyOrPercentageIndicator" + url: "http://terminology.hl7.org/CodeSystem/v2-0148" + oid: "urn:oid:2.16.840.1.113883.18.69" +- id: "v3-DeviceAlertLevel" + description: "DeviceAlertLevel" + url: "http://terminology.hl7.org/CodeSystem/v3-DeviceAlertLevel" + oid: "urn:oid:2.16.840.1.113883.5.31" +- id: "NHSNLCBIPathways" + description: "NHSN LCBI Pathways" + url: "http://terminology.hl7.org/CodeSystem/NHSNLCBIPathways" + oid: "urn:oid:2.16.840.1.113883.6.267" +- id: "icpc-GER" + description: "International Classification of Primary Care 1993 German" + url: "http://terminology.hl7.org/CodeSystem/icpc-GER" + oid: "urn:oid:2.16.840.1.113883.6.138.6" +- id: "v2-0149" + description: "dayType" + url: "http://terminology.hl7.org/CodeSystem/v2-0149" + oid: "urn:oid:2.16.840.1.113883.18.70" +- id: "v3-QueryQuantityUnit" + description: "QueryQuantityUnit" + url: "http://terminology.hl7.org/CodeSystem/v3-QueryQuantityUnit" + oid: "urn:oid:2.16.840.1.113883.5.1066" +- id: "v2-0325" + description: "locationRelationship" + url: "http://terminology.hl7.org/CodeSystem/v2-0325" + oid: "urn:oid:2.16.840.1.113883.18.198" +- id: "v3-ReligiousAffiliation" + description: "Religious Affiliation" + url: "http://terminology.hl7.org/CodeSystem/v3-ReligiousAffiliation" + oid: "urn:oid:2.16.840.1.113883.5.1076" +- id: "v2-0260" + description: "patientLocationType" + url: "http://terminology.hl7.org/CodeSystem/v2-0260" + oid: "urn:oid:2.16.840.1.113883.18.155" +- id: "ex-tooth" + description: "Oral Site Codes" + url: "http://terminology.hl7.org/CodeSystem/ex-tooth" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1152" +- id: "v3-CalendarType" + description: "CalendarType" + url: "http://terminology.hl7.org/CodeSystem/v3-CalendarType" + oid: "urn:oid:2.16.840.1.113883.5.1017" +- id: "chromosome-human" + description: "chromosome-human" + url: "http://terminology.hl7.org/CodeSystem/chromosome-human" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1086" +- id: "immunization-origin" + description: "Immunization Origin Codes" + url: "http://terminology.hl7.org/CodeSystem/immunization-origin" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1101" +- id: "v2-0372" + description: "specimenComponent" + url: "http://terminology.hl7.org/CodeSystem/v2-0372" + oid: "urn:oid:2.16.840.1.113883.18.230" +- id: "v2-0667" + description: "deviceDataState" + url: "http://terminology.hl7.org/CodeSystem/v2-0667" + oid: "urn:oid:2.16.840.1.113883.18.384" +- id: "iso3166-1edition2" + description: "ISO 3166 Part 1 Country Codes, 2nd Edition" + url: "http://terminology.hl7.org/CodeSystem/iso3166-1edition2" + oid: "urn:oid:1.0.3166.1.2" +- id: "v2-0237" + description: "eventQualification" + url: "http://terminology.hl7.org/CodeSystem/v2-0237" + oid: "urn:oid:2.16.840.1.113883.18.136" +- id: "FDI-surface" + description: "Surface Codes" + url: "http://terminology.hl7.org/CodeSystem/FDI-surface" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1154" +- id: "contracttermsubtypecodes" + description: "Contract Term Subtype Codes" + url: "http://terminology.hl7.org/CodeSystem/contracttermsubtypecodes" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1200" +- id: "handling-condition" + description: "HandlingConditionSet" + url: "http://terminology.hl7.org/CodeSystem/handling-condition" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1259" +- id: "v2-0558" + description: "payeeRelationshipToInvoice" + url: "http://terminology.hl7.org/CodeSystem/v2-0558" + oid: "urn:oid:2.16.840.1.113883.18.362" +- id: "v2-0108" + description: "queryResultsLevel" + url: "http://terminology.hl7.org/CodeSystem/v2-0108" + oid: "urn:oid:2.16.840.1.113883.18.45" +- id: "v3-IntegrityCheckAlgorithm" + description: "IntegrityCheckAlgorithm" + url: "http://terminology.hl7.org/CodeSystem/v3-IntegrityCheckAlgorithm" + oid: "urn:oid:2.16.840.1.113883.5.1010" +- id: "v2-0364" + description: "commentType" + url: "http://terminology.hl7.org/CodeSystem/v2-0364" + oid: "urn:oid:2.16.840.1.113883.18.222" +- id: "v2-0734" + description: "grouperStatus" + url: "http://terminology.hl7.org/CodeSystem/v2-0734" + oid: "urn:oid:2.16.840.1.113883.18.393" +- id: "v3-hc-AIC" + description: "Active Ingredient Code" + url: "http://www.canada.ca/en/health-canada/services/drugs-health-products/drug-products/drug-product-database-1" + oid: "urn:oid:2.16.840.1.113883.5.1103" +- id: "copy-number-event" + description: "CopyNumberEvent" + url: "http://terminology.hl7.org/CodeSystem/copy-number-event" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1087" +- id: "ex-diagnosistype" + description: "Example Diagnosis Type Codes" + url: "http://terminology.hl7.org/CodeSystem/ex-diagnosistype" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1167" +- id: "whoSPA" + description: "WHO Adverse Reaction Terms Spanish" + url: "http://terminology.hl7.org/CodeSystem/whoSPA" + oid: "urn:oid:2.16.840.1.113883.6.230.4" +- id: "v2-0919" + description: "exclusiveTest" + url: "http://terminology.hl7.org/CodeSystem/v2-0919" + oid: "urn:oid:2.16.840.1.113883.18.425" +- id: "ICD-9DualCoding" + description: "ICD-9 Dual Coding" + url: "http://terminology.hl7.org/CodeSystem/ICD-9DualCoding" + oid: "urn:oid:2.16.840.1.113883.6.261" +- id: "v3-LanguageAbilityMode" + description: "LanguageAbilityMode" + url: "http://terminology.hl7.org/CodeSystem/v3-LanguageAbilityMode" + oid: "urn:oid:2.16.840.1.113883.5.60" +- id: "MDRDUT" + description: "MedDRA Dutch" + url: "http://terminology.hl7.org/CodeSystem/MDRDUT" + oid: "urn:oid:2.16.840.1.113883.6.163.2" +- id: "nutrition-intake-category" + description: "Nutrition intake category codes" + url: "http://terminology.hl7.org/CodeSystem/nutrition-intake-category" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1431" +- id: "icpc-HEB" + description: "International Classification of Primary Care 1993 Hebrew" + url: "http://terminology.hl7.org/CodeSystem/icpc-HEB" + oid: "urn:oid:2.16.840.1.113883.6.138.7" +- id: "v2-0763" + description: "drgProcedureRelevance" + url: "http://terminology.hl7.org/CodeSystem/v2-0763" + oid: "urn:oid:2.16.840.1.113883.18.401" +- id: "v2-0299" + description: "encoding" + url: "http://terminology.hl7.org/CodeSystem/v2-0299" + oid: "urn:oid:2.16.840.1.113883.18.185" +- id: "v2-0276" + description: "appointmentReason" + url: "http://terminology.hl7.org/CodeSystem/v2-0276" + oid: "urn:oid:2.16.840.1.113883.18.169" +- id: "financialtaskinputtype" + description: "Financial Task Input Type Codes" + url: "http://terminology.hl7.org/CodeSystem/financialtaskinputtype" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1392" +- id: "goal-relationship-type" + description: "GoalRelationshipType" + url: "http://terminology.hl7.org/CodeSystem/goal-relationship-type" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1269" +- id: "MDRPOR" + description: "MedDRA Portuguese" + url: "http://terminology.hl7.org/CodeSystem/MDRPOR" + oid: "urn:oid:2.16.840.1.113883.6.163.5" +- id: "v3-HL7CommitteeIDInRIM" + description: "HL7CommitteeIDInRIM" + url: "http://terminology.hl7.org/CodeSystem/v3-HL7CommitteeIDInRIM" + oid: "urn:oid:2.16.840.1.113883.5.54" +- id: "research-subject-milestone" + description: "ResearchSubjectMilestone" + url: "http://terminology.hl7.org/CodeSystem/research-subject-milestone" + oid: "urn:oid:2.16.840.1.113883.4.642.1.0" +- id: "v2-0061" + description: "checkDigitScheme" + url: "http://terminology.hl7.org/CodeSystem/v2-0061" + oid: "urn:oid:2.16.840.1.113883.18.22" +- id: "v2-0431" + description: "recreationalDrugType" + url: "http://terminology.hl7.org/CodeSystem/v2-0431" + oid: "urn:oid:2.16.840.1.113883.18.272" +- id: "v2-0124" + description: "transportationMode" + url: "http://terminology.hl7.org/CodeSystem/v2-0124" + oid: "urn:oid:2.16.840.1.113883.18.52" +- id: "encounter-special-arrangements" + description: "Special arrangements" + url: "http://terminology.hl7.org/CodeSystem/encounter-special-arrangements" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1090" +- id: "v3-EquipmentAlertLevel" + description: "EquipmentAlertLevel" + url: "http://terminology.hl7.org/CodeSystem/v3-EquipmentAlertLevel" + oid: "urn:oid:2.16.840.1.113883.5.49" +- id: "v2-0466" + description: "ambulatoryPaymentClassification" + url: "http://terminology.hl7.org/CodeSystem/v2-0466" + oid: "urn:oid:2.16.840.1.113883.18.296" +- id: "v2-0935" + description: "processInterruptionReason" + url: "http://terminology.hl7.org/CodeSystem/v2-0935" + oid: "urn:oid:2.16.840.1.113883.18.435" +- id: "v2-0523" + description: "computationType" + url: "http://terminology.hl7.org/CodeSystem/v2-0523" + oid: "urn:oid:2.16.840.1.113883.18.341" +- id: "medcin" + description: "MEDCIN" + url: "http://terminology.hl7.org/CodeSystem/medcin" + oid: "urn:oid:2.16.840.1.113883.6.26" +- id: "v2-0173" + description: "coordinationOfBenefits" + url: "http://terminology.hl7.org/CodeSystem/v2-0173" + oid: "urn:oid:2.16.840.1.113883.18.89" +- id: "v2-0489" + description: "risks" + url: "http://terminology.hl7.org/CodeSystem/v2-0489" + oid: "urn:oid:2.16.840.1.113883.18.313" +- id: "v3-HtmlLinkType" + description: "HtmlLinkType" + url: "http://terminology.hl7.org/CodeSystem/v3-HtmlLinkType" + oid: "urn:oid:2.16.840.1.113883.5.58" +- id: "service-category" + description: "Service category" + url: "http://terminology.hl7.org/CodeSystem/service-category" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1144" +- id: "v3-HL7DefinedRoseProperty" + description: "HL7DefinedRoseProperty" + url: "http://terminology.hl7.org/CodeSystem/v3-HL7DefinedRoseProperty" + oid: "urn:oid:2.16.840.1.113883.5.56" +- id: "v2-0923" + description: "processInterruption" + url: "http://terminology.hl7.org/CodeSystem/v2-0923" + oid: "urn:oid:2.16.840.1.113883.18.429" +- id: "v3-hl7V3Conformance" + description: "HL7V3Conformance" + url: "http://terminology.hl7.org/CodeSystem/v3-hl7V3Conformance" + oid: "urn:oid:2.16.840.1.113883.5.1125" +- id: "subscription-error" + description: "Subscription Error Codes" + url: "http://terminology.hl7.org/CodeSystem/subscription-error" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1438" +- id: "v2-0470" + description: "reimbursementType" + url: "http://terminology.hl7.org/CodeSystem/v2-0470" + oid: "urn:oid:2.16.840.1.113883.18.299" +- id: "v2-0165" + description: "administrationMethod" + url: "http://terminology.hl7.org/CodeSystem/v2-0165" + oid: "urn:oid:2.16.840.1.113883.18.83" +- id: "iso3166-1edition2numeric" + description: "ISO 3166 Part 1 Country Codes, 2nd Edition, Numeric" + url: "http://terminology.hl7.org/CodeSystem/iso3166-1edition2numeric" + oid: "urn:oid:1.0.3166.1.2.1" +- id: "v2-0535" + description: "signatureType" + url: "http://terminology.hl7.org/CodeSystem/v2-0535" + oid: "urn:oid:2.16.840.1.113883.18.349" +- id: "v2-0759" + description: "drgstatusAdmission" + url: "http://terminology.hl7.org/CodeSystem/v2-0759" + oid: "urn:oid:2.16.840.1.113883.18.399" +- id: "v2-0078" + description: "HL7-defined code system of concepts which specify a categorical assessment of an observation value." + url: "http://terminology.hl7.org/CodeSystem/v2-0078" + oid: null +- id: "v2-0309" + description: "coverageType" + url: "http://terminology.hl7.org/CodeSystem/v2-0309" + oid: "urn:oid:2.16.840.1.113883.18.188" +- id: "v2-0427" + description: "riskManagementIncident" + url: "http://terminology.hl7.org/CodeSystem/v2-0427" + oid: "urn:oid:2.16.840.1.113883.18.268" +- id: "v2-0562" + description: "processingConsideration" + url: "http://terminology.hl7.org/CodeSystem/v2-0562" + oid: "urn:oid:2.16.840.1.113883.18.365" +- id: "v2-0098" + description: "typeOfAgreement" + url: "http://terminology.hl7.org/CodeSystem/v2-0098" + oid: "urn:oid:2.16.840.1.113883.18.37" +- id: "v3-MessageCondition" + description: "MessageCondition" + url: "http://terminology.hl7.org/CodeSystem/v3-MessageCondition" + oid: "urn:oid:2.16.840.1.113883.5.80" +- id: "payeetype" + description: null + url: "http://terminology.hl7.org/CodeSystem/payeetype" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1050" +- id: "v3-QueryResponse" + description: "QueryResponse" + url: "http://terminology.hl7.org/CodeSystem/v3-QueryResponse" + oid: "urn:oid:2.16.840.1.113883.5.1067" +- id: "v2-0283" + description: "referralStatus" + url: "http://terminology.hl7.org/CodeSystem/v2-0283" + oid: "urn:oid:2.16.840.1.113883.18.176" +- id: "v3-RelationalOperator" + description: "RelationalOperator" + url: "http://terminology.hl7.org/CodeSystem/v3-RelationalOperator" + oid: "urn:oid:2.16.840.1.113883.5.105" +- id: "CDCREC" + description: "RaceAndEthnicityCDC" + url: "http://hl7.org/fhir/us/core/CodeSystem-cdcrec.html" + oid: "urn:oid:2.16.840.1.113883.6.238" +- id: "PHRaceAndEthnicityCDC" + description: "PH_RaceAndEthnicity_CDC" + url: "http://terminology.hl7.org/CodeSystem/PHRaceAndEthnicityCDC" + oid: "urn:oid:2.16.840.1.113883.6.238" +- id: "v2-0329" + description: "quantityMethod" + url: "http://terminology.hl7.org/CodeSystem/v2-0329" + oid: "urn:oid:2.16.840.1.113883.18.200" +- id: "usEPAsrs" + description: "US EPA Substance Registry System" + url: "http://terminology.hl7.org/CodeSystem/usEPAsrs" + oid: "urn:oid:2.16.840.1.113883.6.275" +- id: "v2-0145" + description: "roomType" + url: "http://terminology.hl7.org/CodeSystem/v2-0145" + oid: "urn:oid:2.16.840.1.113883.18.66" +- id: "v3-RoleLinkStatus" + description: "RoleLinkStatus" + url: "http://terminology.hl7.org/CodeSystem/v3-RoleLinkStatus" + oid: "urn:oid:2.16.840.1.113883.5.1137" +- id: "v2-0450" + description: "eventType" + url: "http://terminology.hl7.org/CodeSystem/v2-0450" + oid: "urn:oid:2.16.840.1.113883.18.286" +- id: "v3-MdfHmdMetSourceType" + description: "MdfHmdMetSourceType" + url: "http://terminology.hl7.org/CodeSystem/v3-MdfHmdMetSourceType" + oid: "urn:oid:2.16.840.1.113883.5.75" + +- id: "v2-0391" + description: "segmentGroup" + url: "http://terminology.hl7.org/CodeSystem/v2-0391" + oid: "urn:oid:2.16.840.1.113883.18.242" +- id: "v3-ObservationMethod" + description: "ObservationMethod" + url: "http://terminology.hl7.org/CodeSystem/v3-ObservationMethod" + oid: "urn:oid:2.16.840.1.113883.5.84" +- id: "v2-0368" + description: "remoteControlCommand" + url: "http://terminology.hl7.org/CodeSystem/v2-0368" + oid: "urn:oid:2.16.840.1.113883.18.226" +- id: "v3-PatientImportance" + description: "PatientImportance" + url: "http://terminology.hl7.org/CodeSystem/v3-PatientImportance" + oid: "urn:oid:2.16.840.1.113883.5.1075" +- id: "v2-0387" + description: "commandResponse" + url: "http://terminology.hl7.org/CodeSystem/v2-0387" + oid: "urn:oid:2.16.840.1.113883.18.238" +- id: "icpc2-icd10-ENG" + description: "ICPC2-ICD10 Thesaurus (English)" + url: "http://terminology.hl7.org/CodeSystem/icpc2-icd10-ENG" + oid: "urn:oid:2.16.840.1.113883.6.142.4" +- id: "insurance-plan-type" + description: "Insurance plan type" + url: "http://terminology.hl7.org/CodeSystem/insurance-plan-type" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1261" +- id: "ICD-9CM-diagnosiscodes" + description: "National Center for Health Statistics" + url: "http://terminology.hl7.org/CodeSystem/ICD-9CM-diagnosiscodes" + oid: "urn:oid:2.16.840.1.113883.6.103" +- id: "v3-EntityClass" + description: "EntityClass" + url: "http://terminology.hl7.org/CodeSystem/v3-EntityClass" + oid: "urn:oid:2.16.840.1.113883.5.41" +- id: "v2-0104" + description: "versionId" + url: "http://terminology.hl7.org/CodeSystem/v2-0104" + oid: "urn:oid:2.16.840.1.113883.18.41" +- id: "v2-0554" + description: "invoiceReason" + url: "http://terminology.hl7.org/CodeSystem/v2-0554" + oid: "urn:oid:2.16.840.1.113883.18.358" +- id: "v3-EntityNamePartQualifierR2" + description: "EntityNamePartQualifierR2" + url: "http://terminology.hl7.org/CodeSystem/v3-EntityNamePartQualifierR2" + oid: "urn:oid:2.16.840.1.113883.5.1122" +- id: "v2-0942" + description: "equipmentStateIndicator" + url: "http://terminology.hl7.org/CodeSystem/v2-0942" + oid: "urn:oid:2.16.840.1.113883.18.444" +- id: "mddid" + description: "MDDID" + url: "http://terminology.hl7.org/CodeSystem/mddid" + oid: "urn:oid:2.16.840.1.113883.6.253" +- id: "provenance-participant-type" + description: "Provenance participant type" + url: "http://terminology.hl7.org/CodeSystem/provenance-participant-type" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1131" +- id: "v2-0503" + description: "sequenceResultsFlag" + url: "http://terminology.hl7.org/CodeSystem/v2-0503" + oid: "urn:oid:2.16.840.1.113883.18.327" +- id: "v3-DataType" + description: "DataType" + url: "http://terminology.hl7.org/CodeSystem/v3-DataType" + oid: "urn:oid:2.16.840.1.113883.5.1007" +- id: "benefit-term" + description: "Benefit Term Codes" + url: "http://terminology.hl7.org/CodeSystem/benefit-term" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1179" +- id: "whoFRE" + description: "WHO Adverse Reaction Terms French" + url: "http://terminology.hl7.org/CodeSystem/whoFRE" + oid: "urn:oid:2.16.840.1.113883.6.230.1" +- id: "certainty-rating" + description: "StatisticCertaintyRating" + url: "http://terminology.hl7.org/CodeSystem/certainty-rating" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1415" +- id: "icpc2E-ENG" + description: "International Classification of Primary Care, second edition, English" + url: "http://terminology.hl7.org/CodeSystem/icpc2E-ENG" + oid: "urn:oid:2.16.840.1.113883.6.139.1" +- id: "v2-0201" + description: "telecommunicationUse" + url: "http://terminology.hl7.org/CodeSystem/v2-0201" + oid: "urn:oid:2.16.840.1.113883.18.106" +- id: "v2-0651" + description: "laborCalculationType" + url: "http://terminology.hl7.org/CodeSystem/v2-0651" + oid: "urn:oid:2.16.840.1.113883.18.380" +- id: "v3-WorkClassificationODH" + description: "Work Classification (Occupational Data for Health)" + url: "http://terminology.hl7.org/CodeSystem/v3-WorkClassificationODH" + oid: "urn:oid:2.16.840.1.113883.5.1139" +- id: "v2-0344" + description: "patientsRelationshipToInsured" + url: "http://terminology.hl7.org/CodeSystem/v2-0344" + oid: "urn:oid:2.16.840.1.113883.18.210" +- id: "common-tags" + description: "Common Tags" + url: "http://terminology.hl7.org/CodeSystem/common-tags" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1067" +- id: "v3-EncounterAcuity" + description: "Encounter Acuity" + url: "http://terminology.hl7.org/CodeSystem/v3-EncounterAcuity" + oid: "urn:oid:2.16.840.1.113883.5.1084" +- id: "list-empty-reason" + description: "List Empty Reasons" + url: "http://terminology.hl7.org/CodeSystem/list-empty-reason" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1106" +- id: "iso4217" + description: "ISO 4217 Currency Codes" + url: "http://terminology.hl7.org/CodeSystem/iso4217" + oid: "urn:oid:1.0.4217" +- id: "v2-0128" + description: "allergySeverity" + url: "http://terminology.hl7.org/CodeSystem/v2-0128" + oid: "urn:oid:2.16.840.1.113883.18.55" +- id: "v2-0256" + description: "timeDelayPostChallenge" + url: "http://terminology.hl7.org/CodeSystem/v2-0256" + oid: "urn:oid:2.16.840.1.113883.18.151" +- id: "v3-MaritalStatus" + description: "MaritalStatus" + url: "http://terminology.hl7.org/CodeSystem/v3-MaritalStatus" + oid: "urn:oid:2.16.840.1.113883.5.2" +- id: "v2-0939" + description: "communicationLocation" + url: "http://terminology.hl7.org/CodeSystem/v2-0939" + oid: "urn:oid:2.16.840.1.113883.18.442" +- id: "ICD-10DualCoding" + description: "ICD-10 Dual Coding" + url: "http://terminology.hl7.org/CodeSystem/ICD-10DualCoding" + oid: "urn:oid:2.16.840.1.113883.6.260" +- id: "v2-0190" + description: "addressType" + url: "http://terminology.hl7.org/CodeSystem/v2-0190" + oid: "urn:oid:2.16.840.1.113883.18.101" +- id: "v2-0485" + description: "extendedPriorityCodes" + url: "http://terminology.hl7.org/CodeSystem/v2-0485" + oid: "urn:oid:2.16.840.1.113883.18.310" +- id: "pnds" + description: "Perioperative Nursing Data Set" + url: "http://terminology.hl7.org/CodeSystem/pnds" + oid: "urn:oid:2.16.840.1.113883.6.22" +- id: "consentscope" + description: "Consent Scope Codes" + url: "http://terminology.hl7.org/CodeSystem/consentscope" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1228" +- id: "v3-EncounterAdmissionSource" + description: "EncounterAdmissionSource" + url: "http://terminology.hl7.org/CodeSystem/v3-EncounterAdmissionSource" + oid: "urn:oid:2.16.840.1.113883.5.37" +- id: "v2-0240" + description: "eventConsequence" + url: "http://terminology.hl7.org/CodeSystem/v2-0240" + oid: "urn:oid:2.16.840.1.113883.18.139" +- id: "v3-ConceptStatus" + description: "HL7 Coded Concept Status" + url: "http://terminology.hl7.org/CodeSystem/v3-ConceptStatus" + oid: "urn:oid:2.16.840.1.113883.5.1086" +- id: "v2-0305" + description: "personLocationType" + url: "http://terminology.hl7.org/CodeSystem/v2-0305" + oid: "urn:oid:2.16.840.1.113883.18.187" +- id: "v2-0755" + description: "drgstatusWeightAtBirth" + url: "http://terminology.hl7.org/CodeSystem/v2-0755" + oid: "urn:oid:2.16.840.1.113883.18.397" +- id: "processpriority" + description: "Process Priority Codes" + url: "http://terminology.hl7.org/CodeSystem/processpriority" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1155" +- id: "v3-ActUncertainty" + description: "ActUncertainty" + url: "http://terminology.hl7.org/CodeSystem/v3-ActUncertainty" + oid: "urn:oid:2.16.840.1.113883.5.1053" +- id: "v3-DocumentCompletion" + description: "DocumentCompletion" + url: "http://terminology.hl7.org/CodeSystem/v3-DocumentCompletion" + oid: "urn:oid:2.16.840.1.113883.5.33" +- id: "v2-0169" + description: "reportingPriority" + url: "http://terminology.hl7.org/CodeSystem/v2-0169" + oid: "urn:oid:2.16.840.1.113883.18.87" +- id: "v2-0493" + description: "specimenCondition" + url: "http://terminology.hl7.org/CodeSystem/v2-0493" + oid: "urn:oid:2.16.840.1.113883.18.317" +- id: "v3-MDFSubjectAreaPrefix" + description: "MDFSubjectAreaPrefix" + url: "http://terminology.hl7.org/CodeSystem/v3-MDFSubjectAreaPrefix" + oid: "urn:oid:2.16.840.1.113883.5.78" +- id: "v2-0217" + description: "visitPriority" + url: "http://terminology.hl7.org/CodeSystem/v2-0217" + oid: "urn:oid:2.16.840.1.113883.18.121" +- id: "oms" + description: "Omaha System" + url: "http://terminology.hl7.org/CodeSystem/oms" + oid: "urn:oid:2.16.840.1.113883.6.98" +- id: "v2-0702" + description: "cycleType" + url: "http://terminology.hl7.org/CodeSystem/v2-0702" + oid: "urn:oid:2.16.840.1.113883.18.387" +- id: "DEEDS415" + description: "DEEDS415" + url: "http://terminology.hl7.org/CodeSystem/DEEDS415" + oid: "urn:oid:2.16.840.1.113883.6.102.4.15" +- id: "supply-kind" + description: "Supply Type" + url: "http://terminology.hl7.org/CodeSystem/supply-kind" + oid: "urn:oid:2.16.840.1.113883.4.642.1.1192" +- id: "SS" + description: "United States Social Security Number" + url: "http://hl7.org/fhir/sid/us-ssn" + oid: "urn:oid:2.16.840.1.113883.4.1" +- id: "MCD" + description: "United States Medicare Number" + url: "http://hl7.org/fhir/sid/us-medicare" + oid: "urn:oid:2.16.840.1.113883.4.572" +- id: "MCR" + description: "United States Medicare Number" + url: "http://hl7.org/fhir/sid/us-medicare" + oid: "urn:oid:2.16.840.1.113883.4.572" + +- id: "MBI" + description: "Medicare Beneficiary Identifier" + url: "http://hl7.org/fhir/sid/us-mbi" + oid: "urn:oid:2.16.840.1.113883.4.927" +- id: "NPI" + description: "United States National Provider Identifier" + url: "http://hl7.org/fhir/sid/us-npi" + oid: "urn:oid:2.16.840.1.113883.4.6" +- id: "AllLanguages" + description: "languages" + url: "http://hl7.org/fhir/ValueSet/all-languages" + oid: "urn:oid:2.16.840.1.113883.4.642.3.21" + + # next two are different id notations for the same table. +- id: "HL70064" + description: "Financial Class (HL7)" + url: "https://phinvads.cdc.gov/vads/ViewCodeSystem.action?id=2.16.840.1.113883.12.64#" + oid: "urn:oid:2.16.840.1.113883.12.64" +- id: "V2-0064" + description: "Financial Class (HL7)" + url: "https://phinvads.cdc.gov/vads/ViewCodeSystem.action?id=2.16.840.1.113883.12.64#" + oid: "urn:oid:2.16.840.1.113883.12.64" + + # source-record-type-system +- id: "source-record-type-system" + url: "http://terminology.hl7.org/CodeSystem/v2-0076" + # source-event-trigger-system +- id: "source-event-trigger-system" + url: "http://terminology.hl7.org/CodeSystem/v2-0003" +- id: "ConditionClinicalStatus" + url: "http://hl7.org/fhir/ValueSet/condition-clinical" + oid: "urn:oid:2.16.840.1.113883.4.642.3.164" +- id: "ConditionVerificationStatus" + url: "http://hl7.org/fhir/ValueSet/condition-ver-status" + oid: "urn:oid:2.16.840.1.113883.4.642.3.166" + + # encounter extensions +- id: "mode-of-arrival-system" + url: "http://terminology.hl7.org/CodeSystem/v2-0430" +- id: "encounter-modeOfArrival-extension" + url: "http://hl7.org/fhir/StructureDefinition/encounter-modeOfArrival" +- id: "PatientContactRelationship" + description: "The nature of the relationship between the patient and the contact person." + url: "http://hl7.org/fhir/ValueSet/patient-contactrelationship" + oid: "urn:oid:2.16.840.1.113883.4.642.3.1130" diff --git a/prime-router/metadata/HL7/v251-elr/hl7/codesystem/ExtensionUrlMapping.yml b/prime-router/metadata/HL7/v251-elr/hl7/codesystem/ExtensionUrlMapping.yml new file mode 100644 index 00000000000..df11edf90d1 --- /dev/null +++ b/prime-router/metadata/HL7/v251-elr/hl7/codesystem/ExtensionUrlMapping.yml @@ -0,0 +1,331 @@ +## HL7 Extensions + +- id: "mothersMaidenName" + url: "http://hl7.org/fhir/StructureDefinition/patient-mothersMaidenName" +- id: "birthPlace" + url: "http://hl7.org/fhir/StructureDefinition/patient-birthPlace" +- id: "birthTime" + url: "http://hl7.org/fhir/StructureDefinition/patient-birthTime" +- id: "religion" + url: "http://hl7.org/fhir/StructureDefinition/patient-religion" +- id: "event-performerFunction" + url: "http://hl7.org/fhir/StructureDefinition/event-performerFunction" +- id: "humanname-own-prefix" + url: "http://hl7.org/fhir/StructureDefinition/humanname-own-prefix" +- id: "humanname-own-name" + url: "http://hl7.org/fhir/StructureDefinition/humanname-own-name" +- id: "humanname-partner-prefix" + url: "http://hl7.org/fhir/StructureDefinition/humanname-partner-prefix" +- id: "humanname-partner-name" + url: "http://hl7.org/fhir/StructureDefinition/humanname-partner-name" +- id: "humanname-assembly-order" + url: "http://hl7.org/fhir/StructureDefinition/humanname-assembly-order" +- id: "patient-congregation" + url: "http://hl7.org/fhir/StructureDefinition/patient-congregation" +- id: "patient-disability" + url: "http://hl7.org/fhir/StructureDefinition/patient-disability" +- id: "data-absent-reason" + url: "http://hl7.org/fhir/StructureDefinition/data-absent-reason" +- id: "contactpoint-country" + url: "http://hl7.org/fhir/StructureDefinition/contactpoint-country" +- id: "contactpoint-area" + url: "http://hl7.org/fhir/StructureDefinition/contactpoint-area" +- id: "contactpoint-local" + url: "http://hl7.org/fhir/StructureDefinition/contactpoint-local" +- id: "contactpoint-extension" + url: "http://hl7.org/fhir/StructureDefinition/contactpoint-extension" +- id: "patient-citizenship" + url: "http://hl7.org/fhir/StructureDefinition/patient-citizenship" +- id: "patient-nationality" + url: "http://hl7.org/fhir/StructureDefinition/patient-nationality" +- id: "iso21090-AD-use" + url: "http://hl7.org/fhir/StructureDefinition/iso21090-AD-use" +- id: "iso21090-ADXP-censusTract" + url: "http://hl7.org/fhir/StructureDefinition/iso21090-ADXP-censusTract" +- id: "observation-value-attachment" + url: "https://hl7.org/fhir/R5/StructureDefinition/observation-value-attachment" +- id: "identifier-check-digit" + url: "http://hl7.org/fhir/StructureDefinition/identifier-checkDigit" +- id: "naming-system-check-digit" + url: "http://hl7.org/fhir/StructureDefinition/namingsystem-checkDigit" +- id: "patient-animal" + url: "http://hl7.org/fhir/StructureDefinition/patient-animal" +- id: "relationship" + url: "https://hl7.org/fhir/StructureDefinition/relationship" + +## Datatypes + +# XON -> Organization +- id: "name-representation-code" + url: "https://reportstream.cdc.gov/fhir/StructureDefinition/name-representation-code" +- id: "identifier-location" + url: "https://reportstream.cdc.gov/fhir/StructureDefinition/identifier-location" +- id: "organization-name-type" + url: "https://reportstream.cdc.gov/fhir/StructureDefinition/organization-name-type" +- id: "xon-organization" + url: "https://reportstream.cdc.gov/fhir/StructureDefinition/xon-organization" + +# CX -> Identifier +- id: "assigning-facility" + url: "https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-facility" +- id: "cx-identifier" + url: "https://reportstream.cdc.gov/fhir/StructureDefinition/cx-identifier" + +# CE/CWE -> Coding +- id: "coding-system-oid" + url: "https://reportstream.cdc.gov/fhir/StructureDefinition/coding-system-oid" +- id: "cwe-coding" + url: "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding" +- id: "cwe-coding-system" + url: "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system" +- id: "ce-coding" + url: "https://reportstream.cdc.gov/fhir/StructureDefinition/ce-coding" +- id: "ce-coding-system" + url: "https://reportstream.cdc.gov/fhir/StructureDefinition/ce-coding-system" +- id: "cne-coding" + url: "https://reportstream.cdc.gov/fhir/StructureDefinition/cne-coding" +- id: "cne-coding-system" + url: "https://reportstream.cdc.gov/fhir/StructureDefinition/cne-coding-system" +- id: "code" + url: "https://reportstream.cdc.gov/fhir/StructureDefinition/code" + +# XTN -> ContactPoint +- id: "xtn-contact-point" + url: "https://reportstream.cdc.gov/fhir/StructureDefinition/xtn-contact-point" + +# CWE -> Annotation +- id: "cwe-annotation" + url: "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-annotation" + +# CNN -> Practitioner +- id: "cnn-practitioner" + url: "https://reportstream.cdc.gov/fhir/StructureDefinition/cnn-practitioner" + +# XAD -> Address +- id: "xad-address" + url: "https://reportstream.cdc.gov/fhir/StructureDefinition/xad-address" +- id: "sad-address-line" + url: "https://reportstream.cdc.gov/fhir/StructureDefinition/sad-address-line" + +# XCN -> Practitioner +- id: "xcn-practitioner" + url: "https://reportstream.cdc.gov/fhir/StructureDefinition/xcn-practitioner" + +# XPN -> HumanName +- id: "xpn-human-name" + url: "https://reportstream.cdc.gov/fhir/StructureDefinition/xpn-human-name" + +# PL -> Location +- id: "pl6-person-location-type" + url: "https://reportstream.cdc.gov/fhir/StructureDefinition/pl6-person-location-type" + +# DLD -> Location +- id: "dld2-effective-date" + url: "https://reportstream.cdc.gov/fhir/StructureDefinition/dld2-effective-date" + +# CQ -> Quantity +- id: "cq-units" + url: "https://reportstream.cdc.gov/fhir/StructureDefinition/cq-units" + +# EI -> ExtensionEI +- id: "entity-identifier" + url: "https://reportstream.cdc.gov/fhir/StructureDefinition/entity-identifier" +- id: "placer-assigned-identifier" + url: "https://reportstream.cdc.gov/fhir/StructureDefinition/placer-assigned-identifier" +- id: "filler-assigned-identifier" + url: "https://reportstream.cdc.gov/fhir/StructureDefinition/filler-assigned-identifier" + +# EI -> Identifier +- id: "ei-assigner-organization-type" + url: "https://reportstream.cdc.gov/fhir/StructureDefinition/ei-assigner-organization-type" + +# ID -> CodeableConcept +- id: "codeable-concept-id" + url: "https://reportstream.cdc.gov/fhir/StructureDefinition/codeable-concept-id" + +# CWE -> Organization +- id: "cwe-organization" + url: "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-organization" + +# ED -> Attachment +- id: "ed-attachment" + url: "https://reportstream.cdc.gov/fhir/StructureDefinition/ed-attachment" + +## Segments + +# MSH +- id: "encoding-characters" + url: "https://reportstream.cdc.gov/fhir/StructureDefinition/encoding-characters" +- id: "character-set" + url: "https://reportstream.cdc.gov/fhir/StructureDefinition/character-set" +- id: "msh-message-header" + url: "https://reportstream.cdc.gov/fhir/StructureDefinition/msh-message-header" + +# SFT +- id: "software-binary-id" + url: "https://reportstream.cdc.gov/fhir/StructureDefinition/software-binary-id" +- id: "source-software-description" + url: "https://reportstream.cdc.gov/fhir/StructureDefinition/source-software-description" +- id: "software-install-date" + url: "https://reportstream.cdc.gov/fhir/StructureDefinition/software-install-date" +- id: "software-vendor-org" + url: "https://reportstream.cdc.gov/fhir/StructureDefinition/software-vendor-org" + +# PID -> Patient +- id: "last-updated-facility-namespace-id" + url: "https://reportstream.cdc.gov/fhir/StructureDefinition/last-updated-facility-namespace-id" +- id: "ethnic-group" + url: "https://reportstream.cdc.gov/fhir/StructureDefinition/ethnic-group" +- id: "veteran-military-status" + url: "https://reportstream.cdc.gov/fhir/StructureDefinition/veteran-military-status" +- id: "identity-unknown" + url: "https://reportstream.cdc.gov/fhir/StructureDefinition/identity-unknown" +- id: "pid-patient" + url: "https://reportstream.cdc.gov/fhir/StructureDefinition/pid-patient" + +# PD1 -> Patient +- id: "pd1-patient-additional-demographic" + url: "https://reportstream.cdc.gov/fhir/StructureDefinition/pd1-patient-additional-demographic" +- id: "studentStatus" + url: "https://reportstream.cdc.gov/fhir/StructureDefinition/studentStatus" +- id: "livingWill" + url: "https://reportstream.cdc.gov/fhir/StructureDefinition/livingWill" + +# NTE -> Patient +- id: "patient-notes" + url: "https://reportstream.cdc.gov/fhir/StructureDefinition/patient-notes" + +# OBX -> Observation +- id: "sub-id" + url: "https://reportstream.cdc.gov/fhir/StructureDefinition/sub-id" +- id: "observation-sub-type" + url: "https://reportstream.cdc.gov/fhir/StructureDefinition/observation-sub-type" +- id: "obx-5-value-sn" + url: "https://reportstream.cdc.gov/fhir/StructureDefinition/obx-5-value-sn" +- id: "nature-of-abnormal-test" + url: "https://reportstream.cdc.gov/fhir/StructureDefinition/nature-of-abnormal-test" +- id: "analysis-date-time" + url: "https://reportstream.cdc.gov/fhir/StructureDefinition/analysis-date-time" +- id: "obx-observation" + url: "https://reportstream.cdc.gov/fhir/StructureDefinition/obx-observation" + +# SPM -> Specimen +- id: "specimen-source-site-modifier" + url: "https://reportstream.cdc.gov/fhir/StructureDefinition/specimen-source-site-modifier" +- id: "spm-specimen" + url: "https://reportstream.cdc.gov/fhir/StructureDefinition/spm-specimen" +- id: "reject-reason" + url: "https://reportstream.cdc.gov/fhir/StructureDefinition/reject-reason" +- id: "bodySiteModifier" + url: "https://reportstream.cdc.gov/fhir/StructureDefinition/bodySiteModifier" + +# NK1 -> RelatedPerson +- id: "nk1-related-person" + url: "https://reportstream.cdc.gov/fhir/StructureDefinition/nk1-related-person" +- id: "nk1-15-administrative-sex" + url: "https://reportstream.cdc.gov/fhir/StructureDefinition/nk1-15-administrative-sex" + +# ORC/OBR -> ServiceRequest/DiagnosticReport +- id: "orc-common-order" + url: "https://reportstream.cdc.gov/fhir/StructureDefinition/orc-common-order" +- id: "obr-observation-request" + url: "https://reportstream.cdc.gov/fhir/StructureDefinition/obr-observation-request" +- id: "status-modifier" + url: "https://reportstream.cdc.gov/fhir/StructureDefinition/status-modifier" +- id: "callback-number" + url: "https://reportstream.cdc.gov/fhir/StructureDefinition/callback-number" +- id: "business-event" + url: "https://reportstream.cdc.gov/fhir/StructureDefinition/business-event" + +# PV1/PV2 -> Encounter +- id: "admission-level-of-care" + url: "https://reportstream.cdc.gov/fhir/StructureDefinition/admission-level-of-care" +- id: "publicity-code" + url: "https://reportstream.cdc.gov/fhir/StructureDefinition/publicity-code" +- id: "estimated-length" + url: "https://reportstream.cdc.gov/fhir/StructureDefinition/estimated-length" +- id: "planned-discharge-date" + url: "https://reportstream.cdc.gov/fhir/StructureDefinition/planned-discharge-date" +- id: "planned-start-date" + url: "https://reportstream.cdc.gov/fhir/StructureDefinition/planned-start-date" +- id: "visit-user-code" + url: "https://reportstream.cdc.gov/fhir/StructureDefinition/visit-user-code" +- id: "temporary-location" + url: "https://hl7.org/fhir/StructureDefinition/temporary-location" +- id: "episode-of-care-name" + url: "https://reportstream.cdc.gov/fhir/StructureDefinition/episode-of-care-name" +- id: "pv1-patient-visit" + url: "https://reportstream.cdc.gov/fhir/StructureDefinition/pv1-patient-visit" +- id: "pv2-patient-visit-additional-information" + url: "https://reportstream.cdc.gov/fhir/StructureDefinition/pv2-patient-visit-additional-information" +- id: "pv1-2-patient-class" + url: "https://reportstream.cdc.gov/fhir/StructureDefinition/pv1-2-patient-class" +- id: "pv2-visit-description" + url: "https://reportstream.cdc.gov/fhir/StructureDefinition/pv2-visit-description" + +# NTE -> Annotation +- id: "note-source" + url: "https://reportstream.cdc.gov/fhir/StructureDefinition/note-source" +# Comment +- id: "note-comment" + url: "https://reportstream.cdc.gov/fhir/StructureDefinition/note-comment" +# Comment type +- id: "note-type" + url: "https://reportstream.cdc.gov/fhir/StructureDefinition/note-type" + +## Generic + +# internal indicator of sender, usable for filtering +- id: "sender-id" + url: "https://reportstream.cdc.gov/fhir/StructureDefinition/sender-id" + +# The following extensions are also used to store in the bundle where particular pieces of +# data should be placed in an HL7 message +- id: "hl7v2Segment" + url: "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Segment" +- id: "hl7v2Field" + url: "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field" +- id: "hl7v2Component" + url: "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Component" + +# Date time as hl7v2 string +# This extension exists because HL7 dates have very little restrictions (i.e. YYYY-MM, YYYY-MM-DD HH, YYYY-MM-DD HH:MM) +# are all valid, but the FHIR specs has much stricter rules. In order to reliably generate the same HL7 message, this extension +# is used to capture what was in the original HL7 message and then exclusively used when mapping FHIR->HL7 +- id: "hl7v2-date-time" + url: "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2-date-time" + +# These extensions are also used to store the unique identifiers +- id: "assigning-authority" + url: "https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority" +- id: "namespace-id" + url: "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id" +- id: "universal-id" + url: "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id" +- id: "universal-id-type" + url: "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type" +# Unknown Universal ID Type +# This extension is used when mapping specifies only populating the universal-id-type extension for certain values +- id: "universal-id-unknown-type" + url: "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-unknown-type" +- id: "location-physical-type-poc" + url: "https://reportstream.cdc.gov/fhir/StructureDefinition/location-physical-type-poc" + +## Deprecated + +# TODO: #13288 +- id: "hl7-use" + url: "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7-use" +- id: "code-index-name" + url: "https://reportstream.cdc.gov/fhir/StructureDefinition/code-index-name" + +## Used by simple report + +# NOTE: this URL is not live, but this is is what simple report sends us +# TODO: #{Ticket to work with SR to clean their FHIR bundle} +- id: "race" + url: "http://ibm.com/fhir/cdm/StructureDefinition/local-race-cd" + +# SR Extension used to convey the order effective date +- id: "order-effective-date" + url: "https://reportstream.cdc.gov/fhir/StructureDefinition/order-effective-date" diff --git a/prime-router/metadata/HL7/v251-elr/hl7/datatypes/CQ_ELR/Quantity.yml b/prime-router/metadata/HL7/v251-elr/hl7/datatypes/CQ_ELR/Quantity.yml new file mode 100644 index 00000000000..b7659fa424c --- /dev/null +++ b/prime-router/metadata/HL7/v251-elr/hl7/datatypes/CQ_ELR/Quantity.yml @@ -0,0 +1,34 @@ +# $schema: ./../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +value: + type: BIG_DECIMAL + expressionType: HL7Spec + valueOf: CQ.1 + +unit: + expressionType: nested + vars: + cwe_originalText: STRING, CQ.2.9 + expressions: + - condition: $cwe_originalText NULL + type: STRING + expressionType: HL7Spec + valueOf: CQ.2.2 + - condition: $cwe_originalText NOT_NULL + type: STRING + valueOf: $cwe_originalText + +extension: + condition: $cq2 NOT_NULL + generateList: true + expressionType: nested + vars: + cq2: STRING_ALL, CQ.2 + expressionsMap: + url: + type: SYSTEM_URL + value: 'cq-units' + valueCodeableConcept: + valueOf: datatypes/CWE_ELR/CodeableConcept + expressionType: resource + specs: CQ.2 \ No newline at end of file diff --git a/prime-router/metadata/HL7/v251-elr/hl7/datatypes/CWE_ELR/Annotation.yml b/prime-router/metadata/HL7/v251-elr/hl7/datatypes/CWE_ELR/Annotation.yml new file mode 100644 index 00000000000..f8a6292e8b8 --- /dev/null +++ b/prime-router/metadata/HL7/v251-elr/hl7/datatypes/CWE_ELR/Annotation.yml @@ -0,0 +1,19 @@ +# $schema: ./../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +text: + type: STRING_ALL + valueOf: CWE + generateList: true + expressionType: HL7Spec + +extension: + generateList: true + expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: 'cwe-annotation' + valueCodeableConcept: + valueOf: ../../datatypes/v251/hl7/datatypes/CWE/CodeableConcept + expressionType: resource + specs: CWE \ No newline at end of file diff --git a/prime-router/metadata/HL7/v251-elr/hl7/datatypes/CWE_ELR/CodeableConcept.yml b/prime-router/metadata/HL7/v251-elr/hl7/datatypes/CWE_ELR/CodeableConcept.yml new file mode 100644 index 00000000000..983acda6dde --- /dev/null +++ b/prime-router/metadata/HL7/v251-elr/hl7/datatypes/CWE_ELR/CodeableConcept.yml @@ -0,0 +1,192 @@ +# $schema: ./../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +coding: + generateList: true + expressionType: nested + vars: + code: String, CWE.1 + display: String, CWE.2 + system: SYSTEM_URL, CWE.3 + version: String, CWE.7 + expressionsMap: + code: + type: String + expressionType: HL7Spec + valueOf: CWE.1 + display: + type: String + expressionType: HL7Spec + valueOf: CWE.2 + system: + type: SYSTEM_URL + expressionType: HL7Spec + valueOf: CWE.3 + version: + type: String + expressionType: HL7Spec + valueOf: CWE.7 + extension_cwe-coding: + condition: $code NOT_NULL || $display NOT_NULL || $system NOT_NULL || $version NOT_NULL + generateList: true + expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: cwe-coding + valueString: + value: coding + extension_cwe-coding-system: + condition: $coding-system NOT_NULL + generateList: true + expressionType: nested + vars: + coding-system: String, CWE.3 + expressionsMap: + url: + type: SYSTEM_URL + value: cwe-coding-system + valueString: + value: $coding-system + +coding_alt: + generateList: true + expressionType: nested + vars: + altCode: String, CWE.4 + altDisplay: String, CWE.5 + altSystem: SYSTEM_URL, CWE.6 + altVersion: String, CWE.8 + expressionsMap: + code: + type: String + expressionType: HL7Spec + valueOf: CWE.4 + display: + type: String + expressionType: HL7Spec + valueOf: CWE.5 + system: + type: SYSTEM_URL + expressionType: HL7Spec + valueOf: CWE.6 + version: + type: String + expressionType: HL7Spec + valueOf: CWE.8 + extension_cwe-coding: + condition: $altCode NOT_NULL || $altDisplay NOT_NULL || $altSystem NOT_NULL || $altVersion NOT_NULL + generateList: true + expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: cwe-coding + valueString: + value: alt-coding + extension_cwe-coding-system: + condition: $coding-system NOT_NULL + generateList: true + expressionType: nested + vars: + coding-system: String, CWE.6 + expressionsMap: + url: + type: SYSTEM_URL + value: cwe-coding-system + valueString: + value: $coding-system + +coding_secondary-alt: + generateList: true + expressionType: nested + vars: + secondaryAltCode: String, CWE.10 + secondaryAltDisplay: String, CWE.11 + secondaryAltSystem: SYSTEM_URL, CWE.12 + secondaryAltVersion: String, CWE.13 + expressionsMap: + code: + type: String + expressionType: HL7Spec + valueOf: CWE.10 + display: + type: String + expressionType: HL7Spec + valueOf: CWE.11 + system: + type: SYSTEM_URL + expressionType: HL7Spec + valueOf: CWE.12 + version: + type: String + expressionType: HL7Spec + valueOf: CWE.13 + extension_cwe-coding: + condition: $secondaryAltCode NOT_NULL || $secondaryAltDisplay NOT_NULL || $secondaryAltSystem NOT_NULL || $secondaryAltVersion NOT_NULL + generateList: true + expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: cwe-coding + valueString: + value: secondary-alt-coding + extension_cwe-coding-system: + condition: $coding-system NOT_NULL + generateList: true + expressionType: nested + vars: + coding-system: String, CWE.12 + expressionsMap: + url: + type: SYSTEM_URL + value: cwe-coding-system + valueString: + value: $coding-system + +text: + type: STRING + expressionType: HL7Spec + valueOf: CWE.9 + +extension: + generateList: true + expressionType: nested + expressions: + # codingSystemOID + - generateList: true + expressionType: nested + condition: $codingSystemOID NOT_NULL + vars: + codingSystemOID: String, CWE.14 + expressionsMap: + url: + type: SYSTEM_URL + value: coding-system-oid + valueOid: + type: STRING + valueOf: $oidString + vars: + oidString: $oidUrlPrefix + $codingSystemOID + constants: + oidUrlPrefix: "urn:oid:" + - generateList: true + expressionType: nested + condition: $hl7v2Field NOT_NULL + expressionsMap: + url: + type: SYSTEM_URL + value: hl7v2Field + valueString: + type: STRING + valueOf: $hl7v2Field + - generateList: true + expressionType: nested + condition: $hl7v2Component NOT_NULL + expressionsMap: + url: + type: SYSTEM_URL + value: hl7v2Component + valueString: + type: STRING + valueOf: $hl7v2Component \ No newline at end of file diff --git a/prime-router/metadata/HL7/v251-elr/hl7/datatypes/CWE_ELR/Coding.yml b/prime-router/metadata/HL7/v251-elr/hl7/datatypes/CWE_ELR/Coding.yml new file mode 100644 index 00000000000..ab9a62c75ab --- /dev/null +++ b/prime-router/metadata/HL7/v251-elr/hl7/datatypes/CWE_ELR/Coding.yml @@ -0,0 +1,33 @@ +# $schema: ./../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +code: + type: STRING + expressionType: HL7Spec + valueOf: CWE.1 + +display: + type: STRING + expressionType: HL7Spec + valueOf: CWE.2 + +system: + type: STRING + expressionType: HL7Spec + valueOf: CWE.3 + +version: + type: STRING + expressionType: HL7Spec + valueOf: CWE.7 + +extension: + generateList: true + expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: 'cwe-coding' + valueCodeableConcept: + valueOf: ../../../datatypes/v251/hl7/datatypes/CWE/CodeableConcept + expressionType: resource + specs: CWE \ No newline at end of file diff --git a/prime-router/metadata/HL7/v251-elr/hl7/datatypes/CWE_ELR/Organization.yml b/prime-router/metadata/HL7/v251-elr/hl7/datatypes/CWE_ELR/Organization.yml new file mode 100644 index 00000000000..7c4516f11f7 --- /dev/null +++ b/prime-router/metadata/HL7/v251-elr/hl7/datatypes/CWE_ELR/Organization.yml @@ -0,0 +1,60 @@ +# $schema: ./../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +resourceType: Organization + +id: + type: STRING + valueOf: "GeneralUtils.generateResourceId()" + expressionType: JEXL + +identifier: + generateList: true + expressionType: nested + expressionsMap: + value: + type: STRING + expressionType: HL7Spec + valueOf: CWE.1 + system: + type: STRING + expressionType: HL7Spec + valueOf: CWE.3 + +name: + type: STRING + expressionType: HL7Spec + valueOf: CWE.2 | CWE.9 + +extension: + generateList: true + expressionType: nested + expressions: + - expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: cwe-organization + valueCodeableConcept: + expressionType: resource + valueOf: ../../datatypes/v251/hl7/datatypes/CWE/CodeableConcept + specs: $BASE_VALUE + - generateList: true + expressionType: nested + condition: $cweOrganizationHL7Field NOT_NULL + expressionsMap: + url: + type: SYSTEM_URL + value: hl7v2Field + valueString: + type: STRING + valueOf: $cweOrganizationHL7Field + - generateList: true + expressionType: nested + condition: $cweOrganizationHL7Component NOT_NULL + expressionsMap: + url: + type: SYSTEM_URL + value: hl7v2Component + valueString: + type: STRING + valueOf: $cweOrganizationHL7Component \ No newline at end of file diff --git a/prime-router/metadata/HL7/v251-elr/hl7/datatypes/CWE_ELR/Quantity.yml b/prime-router/metadata/HL7/v251-elr/hl7/datatypes/CWE_ELR/Quantity.yml new file mode 100644 index 00000000000..46bfb4911cd --- /dev/null +++ b/prime-router/metadata/HL7/v251-elr/hl7/datatypes/CWE_ELR/Quantity.yml @@ -0,0 +1,46 @@ +# $schema: ./../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +code: + condition: $identifier NOT_NULL && $nameOfCodingSystem NOT_NULL + type: STRING + expressionType: HL7Spec + valueOf: CWE.1 + vars: + identifier: CWE.1 + nameOfCodingSystem: CWE.3 + +unit: + expressionType: nested + vars: + identifier: CWE.1 + text: CWE.2 + expressions: + - condition: $text NULL && $identifier NOT_NULL + type: STRING + valueOf: CWE.1 + expressionType: HL7Spec + - condition: $text NOT_NULL + type: STRING + valueOf: CWE.2 + expressionType: HL7Spec + +system: + condition: $identifier NOT_NULL && $nameOfCodingSystem NOT_NULL + type: SYSTEM_URL + expressionType: HL7Spec + valueOf: CWE.1 + vars: + identifier: CWE.1 + nameOfCodingSystem: CWE.3 + +extension: + generateList: true + expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: 'cwe-quantity' + valueCodeableConcept: + valueOf: ../../datatypes/v251/hl7/datatypes/CWE/CodeableConcept + expressionType: resource + specs: CWE \ No newline at end of file diff --git a/prime-router/metadata/HL7/v251-elr/hl7/datatypes/PL_ELR/Location.yml b/prime-router/metadata/HL7/v251-elr/hl7/datatypes/PL_ELR/Location.yml new file mode 100644 index 00000000000..ca9a64c3bb7 --- /dev/null +++ b/prime-router/metadata/HL7/v251-elr/hl7/datatypes/PL_ELR/Location.yml @@ -0,0 +1,292 @@ +# $schema: ./../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +resourceType: Location + +id: + type: STRING + valueOf: "GeneralUtils.generateResourceId()" + expressionType: JEXL + +identifier: + generateList: true + expressionType: nested + vars: + pl3: STRING_ALL, PL.3 + pl2: STRING_ALL, PL.2 + pl1: STRING_ALL, PL.1 + pl8: STRING_ALL, PL.8 + pl7: STRING_ALL, PL.7 + pl4: STRING_ALL, PL.4 + pl10: STRING_ALL, PL.10 + pl11: STRING_ALL, PL.11 + expressions: + - expressionType: nested + generateList: true + condition: $pl3 NOT_NULL + expressions: + - expressionType: resource + valueOf: ../../datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierNamespaceId + specs: PL.3 + - expressionType: resource + valueOf: ../../datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierUniversalId + specs: PL.3 + - expressionType: resource + condition: $pl11 NULL && $pl10 NOT_NULL + valueOf: ../../datatypes/v251/hl7/datatypes/EI/Identifier-Organization + specs: PL.10 + - expressionType: resource + vars: + eiAssigningOrganization: PL.11 + condition: $pl11 NOT_NULL && $pl10 NOT_NULL + valueOf: ../../datatypes/v251/hl7/datatypes/EI/Identifier-DefaultAssigner + specs: PL.10 + - expressionType: nested + condition: $pl3 NULL && $pl2 NOT_NULL + generateList: true + expressions: + - expressionType: resource + valueOf: ../../datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierNamespaceId + specs: PL.2 + - expressionType: resource + valueOf: ../../datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierUniversalId + specs: PL.2 + - expressionType: resource + condition: $pl11 NULL && $pl10 NOT_NULL + valueOf: ../../datatypes/v251/hl7/datatypes/EI/Identifier-Organization + specs: PL.10 + - expressionType: resource + vars: + eiAssigningOrganization: PL.11 + condition: $pl11 NOT_NULL && $pl10 NOT_NULL + valueOf: ../../datatypes/v251/hl7/datatypes/EI/Identifier-DefaultAssigner + specs: PL.10 + - expressionType: nested + condition: $pl3 NULL && $pl2 NULL && $pl1 NOT_NULL + generateList: true + expressions: + - expressionType: resource + valueOf: ../../datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierNamespaceId + specs: PL.1 + - expressionType: resource + valueOf: ../../datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierUniversalId + specs: PL.1 + - expressionType: resource + condition: $pl11 NULL && $pl10 NOT_NULL + valueOf: ../../datatypes/v251/hl7/datatypes/EI/Identifier-Organization + specs: PL.10 + - expressionType: resource + vars: + eiAssigningOrganization: PL.11 + condition: $pl11 NOT_NULL && $pl10 NOT_NULL + valueOf: ../../datatypes/v251/hl7/datatypes/EI/Identifier-DefaultAssigner + specs: PL.10 + - expressionType: nested + condition: $pl3 NULL && $pl2 NULL && $pl1 NULL && $pl8 NOT_NULL + generateList: true + expressions: + - expressionType: resource + valueOf: ../../datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierNamespaceId + specs: PL.8 + - expressionType: resource + valueOf: ../../datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierUniversalId + specs: PL.8 + - expressionType: resource + condition: $pl11 NULL && $pl10 NOT_NULL + valueOf: ../../datatypes/v251/hl7/datatypes/EI/Identifier-Organization + specs: PL.10 + - expressionType: resource + vars: + eiAssigningOrganization: PL.11 + condition: $pl11 NOT_NULL && $pl10 NOT_NULL + valueOf: ../../datatypes/v251/hl7/datatypes/EI/Identifier-DefaultAssigner + specs: PL.10 + - expressionType: nested + condition: $pl3 NULL && $pl2 NULL && $pl1 NULL && $pl8 NULL && $pl7 NOT_NULL + generateList: true + expressions: + - expressionType: resource + valueOf: ../../datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierNamespaceId + specs: PL.7 + - expressionType: resource + valueOf: ../../datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierUniversalId + specs: PL.7 + - expressionType: resource + condition: $pl11 NULL && $pl10 NOT_NULL + valueOf: ../../datatypes/v251/hl7/datatypes/EI/Identifier-Organization + specs: PL.10 + - expressionType: resource + vars: + eiAssigningOrganization: PL.11 + condition: $pl11 NOT_NULL && $pl10 NOT_NULL + valueOf: ../../datatypes/v251/hl7/datatypes/EI/Identifier-DefaultAssigner + specs: PL.10 + - expressionType: nested + condition: $pl3 NULL && $pl2 NULL && $pl1 NULL && $pl8 NULL && $pl7 NULL && $pl4 NOT_NULL + generateList: true + expressions: + - expressionType: resource + valueOf: ../../datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierNamespaceId + specs: PL.4 + - expressionType: resource + valueOf: ../../datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierUniversalId + specs: PL.4 + - expressionType: resource + condition: $pl11 NULL && $pl10 NOT_NULL + valueOf: ../../datatypes/v251/hl7/datatypes/EI/Identifier-Organization + specs: PL.10 + - expressionType: resource + vars: + eiAssigningOrganization: PL.11 + condition: $pl11 NOT_NULL && $pl10 NOT_NULL + valueOf: ../../datatypes/v251/hl7/datatypes/EI/Identifier-DefaultAssigner + specs: PL.10 + +physicalType: + expressionType: nested + vars: + pl3: STRING_ALL, PL.3 + pl2: STRING_ALL, PL.2 + pl1: STRING_ALL, PL.1 + pl8: STRING_ALL, PL.8 + pl7: STRING_ALL, PL.7 + pl4: STRING_ALL, PL.4 + constants: + system: "http://terminology.hl7.org/CodeSystem/location-physical-type" + expressions: + - expressionType: nested + expressionsMap: + coding: + generateList: true + expressionType: nested + expressionsMap: + code: + valueOf: "bd" + system: + valueOf: $system + condition: $pl3 NOT_NULL + - expressionType: nested + expressionsMap: + coding: + generateList: true + expressionType: nested + expressionsMap: + code: + valueOf: "ro" + system: + valueOf: $system + condition: $pl3 NULL && $pl2 NOT_NULL + - expressionType: nested + expressionsMap: + coding: + expressionType: nested + generateList: true + expressions: + - expressionType: nested + expressionsMap: + _code: + expressionType: nested + expressionsMap: + extension: + generateList: true + expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: location-physical-type-poc + valueString: + value: "poc" + system: + type: STRING + value: "http://terminology.hl7.org/CodeSystem/location-physical-type" + condition: $pl3 NULL && $pl2 NULL && $pl1 NOT_NULL + - expressionType: nested + expressionsMap: + coding: + generateList: true + expressionType: nested + expressionsMap: + code: + valueOf: "lvl" + system: + valueOf: $system + condition: $pl3 NULL && $pl2 NULL && $pl1 NULL && $pl8 NOT_NULL + - expressionType: nested + expressionsMap: + coding: + generateList: true + expressionType: nested + expressionsMap: + code: + valueOf: "bu" + system: + valueOf: $system + condition: $pl3 NULL && $pl2 NULL && $pl1 NULL && $pl8 NULL && $pl7 NOT_NULL + - expressionType: nested + expressionsMap: + coding: + generateList: true + expressionType: nested + expressionsMap: + code: + valueOf: "si" + system: + valueOf: $system + condition: $pl3 NULL && $pl2 NULL && $pl1 NULL && $pl8 NULL && $pl7 NULL && $pl4 NOT_NULL + + +partOf: + expressionType: nested + vars: + pl3: STRING_ALL, PL.3 + pl2: STRING_ALL, PL.2 + pl1: STRING_ALL, PL.1 + pl8: STRING_ALL, PL.8 + pl7: STRING_ALL, PL.7 + pl4: STRING_ALL, PL.4 + condition: $pl3 NOT_NuLL || $pl2 NOT_NULL || $pl1 NOT_NULL || $pl8 NOT_NULL || $pl7 NOT_NULL + expressions: + - expressionType: reference + condition: $pl2 NOT_NULL + valueOf: datatypes/PL_ELR/LocationBranch1 #PL2 + specs: $BASE_VALUE + - expressionType: reference + condition: $pl2 NULL && $pl1 NOT_NULL #PL1 + valueOf: datatypes/PL_ELR/LocationBranch2 + specs: $BASE_VALUE + - expressionType: reference + condition: $pl2 NULL && $pl1 NULL && $pl8 NOT_NULL + valueOf: datatypes/PL_ELR/LocationBranch3 + specs: $BASE_VALUE + - expressionType: reference + condition: $pl2 NULL && $pl1 NULL && $pl8 NULL && $pl7 NOT_NULL + valueOf: datatypes/PL_ELR/LocationBranch4 + specs: $BASE_VALUE + - expressionType: reference + condition: $pl2 NULL && $pl1 NULL && $pl8 NULL && $pl7 NULL && $pl4 NOT_NULL + valueOf: datatypes/PL_ELR/LocationBranch5 + specs: $BASE_VALUE + +status: + expressionType: HL7Spec + valueOf: PL.5 + type: STRING + +mode: + value: "instance" + +description: + type: STRING + expressionType: HL7Spec + valueOf: PL.9 + +extension: + generateList: true + expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: pl6-person-location-type + valueString: + type: STRING + expressionType: HL7Spec + valueOf: PL.6 \ No newline at end of file diff --git a/prime-router/metadata/HL7/v251-elr/hl7/datatypes/PL_ELR/LocationBranch1.yml b/prime-router/metadata/HL7/v251-elr/hl7/datatypes/PL_ELR/LocationBranch1.yml new file mode 100644 index 00000000000..5f3c963748c --- /dev/null +++ b/prime-router/metadata/HL7/v251-elr/hl7/datatypes/PL_ELR/LocationBranch1.yml @@ -0,0 +1,182 @@ +# $schema: ./../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +resourceType: Location + +id: + type: STRING + valueOf: "GeneralUtils.generateResourceId()" + expressionType: JEXL + +identifier: + generateList: true + expressionType: nested + vars: + pl2: STRING_ALL, PL.2 + pl1: STRING_ALL, PL.1 + pl8: STRING_ALL, PL.8 + pl7: STRING_ALL, PL.7 + pl4: STRING_ALL, PL.4 + expressions: + - expressionType: nested + condition: $pl2 NOT_NULL + generateList: true + expressions: + - expressionType: resource + valueOf: ../../datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierNamespaceId + specs: PL.2 + - expressionType: resource + valueOf: ../../datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierUniversalId + specs: PL.2 + - expressionType: nested + condition: $pl2 NULL && $pl1 NOT_NULL + generateList: true + expressions: + - expressionType: resource + valueOf: ../../datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierNamespaceId + specs: PL.1 + - expressionType: resource + valueOf: ../../datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierUniversalId + specs: PL.1 + - expressionType: nested + condition: $pl2 NULL && $pl1 NULL && $pl8 NOT_NULL + generateList: true + expressions: + - expressionType: resource + valueOf: ../../datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierNamespaceId + specs: PL.8 + - expressionType: resource + valueOf: ../../datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierUniversalId + specs: PL.8 + - expressionType: nested + condition: $pl2 NULL && $pl1 NULL && $pl8 NULL && $pl7 NOT_NULL + generateList: true + expressions: + - expressionType: resource + valueOf: ../../datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierNamespaceId + specs: PL.7 + - expressionType: resource + valueOf: ../../datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierUniversalId + specs: PL.7 + - expressionType: nested + condition: $pl2 NULL && $pl1 NULL && $pl8 NULL && $pl7 NULL && $pl4 NOT_NULL + generateList: true + expressions: + - expressionType: resource + valueOf: ../../datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierNamespaceId + specs: PL.4 + - expressionType: resource + valueOf: ../../datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierUniversalId + specs: PL.4 + + + +physicalType: + expressionType: nested + vars: + pl2: STRING, PL.2 + pl1: STRING, PL.1 + pl8: STRING, PL.8 + pl7: STRING, PL.7 + pl4: STRING_ALL, PL.4 + constants: + system: "http://terminology.hl7.org/CodeSystem/location-physical-type" + expressions: + - expressionType: nested + expressionsMap: + coding: + generateList: true + expressionType: nested + expressionsMap: + code: + valueOf: "ro" + system: + valueOf: $system + condition: $pl2 NOT_NULL + - expressionType: nested + expressionsMap: + coding: + expressionType: nested + generateList: true + expressions: + - expressionType: nested + expressionsMap: + _code: + expressionType: nested + expressionsMap: + extension: + generateList: true + expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: location-physical-type-poc + valueString: + value: "poc" + system: + type: STRING + value: "http://terminology.hl7.org/CodeSystem/location-physical-type" + system: + type: STRING + valueOf: $system + condition: $pl2 NULL && $pl1 NOT_NULL + - expressionType: nested + expressionsMap: + coding: + generateList: true + expressionType: nested + expressionsMap: + code: + valueOf: "lvl" + system: + valueOf: $system + condition: $pl2 NULL && $pl1 NULL && $pl8 NOT_NULL + - expressionType: nested + expressionsMap: + coding: + generateList: true + expressionType: nested + expressionsMap: + code: + valueOf: "bu" + system: + valueOf: $system + condition: $pl2 NULL && $pl1 NULL && $pl8 NULL && $pl7 NOT_NULL + - expressionType: nested + expressionsMap: + coding: + generateList: true + expressionType: nested + expressionsMap: + code: + valueOf: "si" + system: + valueOf: $system + condition: $pl2 NULL && $pl1 NULL && $pl8 NULL && $pl7 NULL && $pl4 NOT_NULL + + +partOf: + expressionType: nested + vars: + pl2: STRING_ALL, PL.2 + pl1: STRING_ALL, PL.1 + pl8: STRING_ALL, PL.8 + pl7: STRING_ALL, PL.7 + pl4: STRING_ALL, PL.4 + condition: $pl2 NOT_NULL || $pl1 NOT_NULL || $pl8 NOT_NULL || $pl7 NOT_NULL + expressions: + - expressionType: reference + condition: $pl1 NOT_NULL #PL1 + valueOf: datatypes/PL_ELR/LocationBranch2 + specs: $BASE_VALUE + - expressionType: reference + condition: $pl1 NULL && $pl8 NOT_NULL #PL8 + valueOf: datatypes/PL_ELR/LocationBranch3 + specs: $BASE_VALUE + - expressionType: reference + condition: $pl1 NULL && $pl8 NULL && $pl7 NOT_NULL #PL7 + valueOf: datatypes/PL_ELR/LocationBranch4 + specs: $BASE_VALUE + - expressionType: reference + condition: $pl1 NULL && $pl8 NULL && $pl7 NULL && $pl4 NOT_NULL #PL4 + valueOf: datatypes/PL_ELR/LocationBranch5 + specs: $BASE_VALUE \ No newline at end of file diff --git a/prime-router/metadata/HL7/v251-elr/hl7/datatypes/PL_ELR/LocationBranch2.yml b/prime-router/metadata/HL7/v251-elr/hl7/datatypes/PL_ELR/LocationBranch2.yml new file mode 100644 index 00000000000..5910216e119 --- /dev/null +++ b/prime-router/metadata/HL7/v251-elr/hl7/datatypes/PL_ELR/LocationBranch2.yml @@ -0,0 +1,151 @@ +# $schema: ./../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +resourceType: Location + +id: + type: STRING + valueOf: "GeneralUtils.generateResourceId()" + expressionType: JEXL + +identifier: + generateList: true + expressionType: nested + vars: + pl1: STRING_ALL, PL.1 + pl8: STRING_ALL, PL.8 + pl7: STRING_ALL, PL.7 + pl4: STRING_ALL, PL.4 + expressions: + - expressionType: nested + condition: $pl1 NOT_NULL + generateList: true + expressions: + - expressionType: resource + valueOf: ../../datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierNamespaceId + specs: PL.1 + - expressionType: resource + valueOf: ../../datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierUniversalId + specs: PL.1 + - expressionType: nested + condition: $pl1 NULL && $pl8 NOT_NULL + generateList: true + expressions: + - expressionType: resource + valueOf: ../../datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierNamespaceId + specs: PL.8 + - expressionType: resource + valueOf: ../../datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierUniversalId + specs: PL.8 + - expressionType: nested + condition: $pl1 NULL && $pl8 NULL && $pl7 NOT_NULL + generateList: true + expressions: + - expressionType: resource + valueOf: ../../datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierNamespaceId + specs: PL.7 + - expressionType: resource + valueOf: ../../datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierUniversalId + specs: PL.7 + - expressionType: nested + condition: $pl1 NULL && $pl8 NULL && $pl7 NULL && $pl4 NOT_NULL + generateList: true + expressions: + - expressionType: resource + valueOf: ../../datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierNamespaceId + specs: PL.4 + - expressionType: resource + valueOf: ../../datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierUniversalId + specs: PL.4 + + + +physicalType: + expressionType: nested + vars: + pl1: STRING_ALL, PL.1 + pl8: STRING_ALL, PL.8 + pl7: STRING_ALL, PL.7 + pl4: STRING_ALL, PL.4 + constants: + system: "http://terminology.hl7.org/CodeSystem/location-physical-type" + expressions: + - expressionType: nested + expressionsMap: + coding: + expressionType: nested + generateList: true + expressions: + - expressionType: nested + expressionsMap: + _code: + expressionType: nested + expressionsMap: + extension: + generateList: true + expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: location-physical-type-poc + valueString: + value: "poc" + system: + type: STRING + value: "http://terminology.hl7.org/CodeSystem/location-physical-type" + condition: $pl1 NOT_NULL + - expressionType: nested + expressionsMap: + coding: + generateList: true + expressionType: nested + expressionsMap: + code: + valueOf: "lvl" + system: + valueOf: $system + condition: $pl1 NULL && $pl8 NOT_NULL + - expressionType: nested + expressionsMap: + coding: + generateList: true + expressionType: nested + expressionsMap: + code: + valueOf: "bu" + system: + valueOf: $system + condition: $pl1 NULL && $pl8 NULL && $pl7 NOT_NULL + - expressionType: nested + expressionsMap: + coding: + generateList: true + expressionType: nested + expressionsMap: + code: + valueOf: "si" + system: + valueOf: $system + condition: $pl1 NULL && $pl8 NULL && $pl7 NULL && $pl4 NOT_NULL + + +partOf: + expressionType: nested + vars: + pl1: STRING_ALL, PL.1 + pl8: STRING_ALL, PL.8 + pl7: STRING_ALL, PL.7 + pl4: STRING_ALL, PL.4 + condition: $pl1 NOT_NULL || $pl8 NOT_NULL || $pl7 NOT_NULL + expressions: + - expressionType: reference + condition: $pl8 NOT_NULL #PL8 + valueOf: datatypes/PL_ELR/LocationBranch3 + specs: $BASE_VALUE + - expressionType: reference + condition: $pl8 NULL && $pl7 NOT_NULL #PL7 + valueOf: datatypes/PL_ELR/LocationBranch4 + specs: $BASE_VALUE + - expressionType: reference + condition: $pl8 NULL && $pl7 NULL && $pl4 NOT_NULL #PL4 + valueOf: datatypes/PL_ELR/LocationBranch5 + specs: $BASE_VALUE \ No newline at end of file diff --git a/prime-router/metadata/HL7/v251-elr/hl7/datatypes/PL_ELR/LocationBranch3.yml b/prime-router/metadata/HL7/v251-elr/hl7/datatypes/PL_ELR/LocationBranch3.yml new file mode 100644 index 00000000000..df25fb43437 --- /dev/null +++ b/prime-router/metadata/HL7/v251-elr/hl7/datatypes/PL_ELR/LocationBranch3.yml @@ -0,0 +1,110 @@ +# $schema: ./../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +resourceType: Location + +id: + type: STRING + valueOf: "GeneralUtils.generateResourceId()" + expressionType: JEXL + +identifier: + generateList: true + expressionType: nested + vars: + pl8: STRING_ALL, PL.8 + pl7: STRING_ALL, PL.7 + pl4: STRING_ALL, PL.4 + expressions: + - expressionType: nested + condition: $pl8 NOT_NULL + generateList: true + expressions: + - expressionType: resource + valueOf: ../../datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierNamespaceId + specs: PL.8 + - expressionType: resource + valueOf: ../../datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierUniversalId + specs: PL.8 + - expressionType: nested + condition: $pl8 NULL && $pl7 NOT_NULL + generateList: true + expressions: + - expressionType: resource + valueOf: ../../datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierNamespaceId + specs: PL.7 + - expressionType: resource + valueOf: ../../datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierUniversalId + specs: PL.7 + - expressionType: nested + condition: $pl8 NULL && $pl7 NULL && $pl4 NOT_NULL + generateList: true + expressions: + - expressionType: resource + valueOf: ../../datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierNamespaceId + specs: PL.4 + - expressionType: resource + valueOf: ../../datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierUniversalId + specs: PL.4 + + + +physicalType: + expressionType: nested + vars: + pl8: STRING_ALL, PL.8 + pl7: STRING_ALL, PL.7 + pl4: STRING_ALL, PL.4 + constants: + system: "http://terminology.hl7.org/CodeSystem/location-physical-type" + expressions: + - expressionType: nested + expressionsMap: + coding: + generateList: true + expressionType: nested + expressionsMap: + code: + valueOf: "lvl" + system: + valueOf: $system + condition: $pl8 NOT_NULL + - expressionType: nested + expressionsMap: + coding: + generateList: true + expressionType: nested + expressionsMap: + code: + valueOf: "bu" + system: + valueOf: $system + condition: $pl8 NULL && $pl7 NOT_NULL + - expressionType: nested + expressionsMap: + coding: + generateList: true + expressionType: nested + expressionsMap: + code: + valueOf: "si" + system: + valueOf: $system + condition: $pl8 NULL && $pl7 NULL && $pl4 NOT_NULL + + +partOf: + expressionType: nested + vars: + pl8: STRING_ALL, PL.8 + pl7: STRING_ALL, PL.7 + pl4: STRING_ALL, PL.4 + condition: $pl8 NOT_NULL || $pl7 NOT_NULL + expressions: + - expressionType: reference + condition: $pl7 NOT_NULL #PL7 + valueOf: datatypes/PL_ELR/LocationBranch4 + specs: $BASE_VALUE + - expressionType: reference + condition: $pl7 NULL && $pl4 NOT_NULL #PL4 + valueOf: datatypes/PL_ELR/LocationBranch5 + specs: $BASE_VALUE \ No newline at end of file diff --git a/prime-router/metadata/HL7/v251-elr/hl7/datatypes/PL_ELR/LocationBranch4.yml b/prime-router/metadata/HL7/v251-elr/hl7/datatypes/PL_ELR/LocationBranch4.yml new file mode 100644 index 00000000000..562ca527bc5 --- /dev/null +++ b/prime-router/metadata/HL7/v251-elr/hl7/datatypes/PL_ELR/LocationBranch4.yml @@ -0,0 +1,82 @@ +# $schema: ./../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +resourceType: Location + +id: + type: STRING + valueOf: "GeneralUtils.generateResourceId()" + expressionType: JEXL + +identifier: + generateList: true + expressionType: nested + vars: + pl7: STRING_ALL, PL.7 + pl4: STRING_ALL, PL.4 + expressions: + - expressionType: nested + condition: $pl7 NOT_NULL + generateList: true + expressions: + - expressionType: resource + valueOf: ../../datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierNamespaceId + specs: PL.7 + - expressionType: resource + valueOf: ../../datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierUniversalId + specs: PL.7 + - expressionType: nested + condition: $pl7 NULL && $pl4 NOT_NULL + generateList: true + expressions: + - expressionType: resource + valueOf: ../../datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierNamespaceId + specs: PL.4 + - expressionType: resource + valueOf: ../../datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierUniversalId + specs: PL.4 + + + +physicalType: + expressionType: nested + vars: + pl7: STRING_ALL, PL.7 + pl4: STRING_ALL, PL.4 + constants: + system: "http://terminology.hl7.org/CodeSystem/location-physical-type" + expressions: + - expressionType: nested + expressionsMap: + coding: + generateList: true + expressionType: nested + expressionsMap: + code: + valueOf: "bu" + system: + valueOf: $system + condition: $pl7 NOT_NULL + - expressionType: nested + expressionsMap: + coding: + generateList: true + expressionType: nested + expressionsMap: + code: + valueOf: "si" + system: + valueOf: $system + condition: $pl7 NULL && $pl4 NOT_NULL + + +partOf: + expressionType: nested + vars: + pl7: STRING_ALL, PL.7 + pl4: STRING_ALL, PL.4 + condition: $pl7 NOT_NULL + expressions: + - expressionType: reference + condition: $pl4 NOT_NULL + valueOf: datatypes/PL_ELR/LocationBranch5 + specs: $BASE_VALUE \ No newline at end of file diff --git a/prime-router/metadata/HL7/v251-elr/hl7/datatypes/PL_ELR/LocationBranch5.yml b/prime-router/metadata/HL7/v251-elr/hl7/datatypes/PL_ELR/LocationBranch5.yml new file mode 100644 index 00000000000..28a80563c95 --- /dev/null +++ b/prime-router/metadata/HL7/v251-elr/hl7/datatypes/PL_ELR/LocationBranch5.yml @@ -0,0 +1,46 @@ +# $schema: ./../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +resourceType: Location + +id: + type: STRING + valueOf: "GeneralUtils.generateResourceId()" + expressionType: JEXL + +identifier: + generateList: true + expressionType: nested + vars: + pl4: STRING_ALL, PL.4 + expressions: + - expressionType: nested + condition: $pl4 NOT_NULL + generateList: true + expressions: + - expressionType: resource + valueOf: ../../datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierNamespaceId + specs: PL.4 + - expressionType: resource + valueOf: ../../datatypes/v251/hl7/datatypes/HD/Identifier/IdentifierUniversalId + specs: PL.4 + + +physicalType: + expressionType: nested + vars: + pl4: STRING_ALL, PL.4 + constants: + system: "http://terminology.hl7.org/CodeSystem/location-physical-type" + expressions: + - expressionType: nested + expressionsMap: + coding: + generateList: true + expressionType: nested + expressionsMap: + code: + valueOf: "si" + system: + valueOf: $system + condition: $pl4 NOT_NULL + diff --git a/prime-router/metadata/HL7/v251-elr/hl7/datatypes/PRL_ELR/Extension.yml b/prime-router/metadata/HL7/v251-elr/hl7/datatypes/PRL_ELR/Extension.yml new file mode 100644 index 00000000000..4161e1ac46e --- /dev/null +++ b/prime-router/metadata/HL7/v251-elr/hl7/datatypes/PRL_ELR/Extension.yml @@ -0,0 +1,46 @@ +# $schema: ./../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +url: + type: STRING + valueOf: $prlExtensionName + +extension: + generateList: true + expressionType: nested + expressions: + - vars: + prl1: STRING_ALL, PRL.1 + condition: $prl1 NOT_NULL + expressionType: nested + expressionsMap: + url: + type: STRING + value: prl-1-parent-observation-identifier + valueCodeableConcept: + valueOf: datatypes/CWE_ELR/CodeableConcept + expressionType: resource + specs: PRL.1 + - vars: + prl2: STRING, PRL.2 + condition: $prl2 NOT_NULL + expressionType: nested + expressionsMap: + url: + type: STRING + value: prl-2-parent-observation-sub-identifier + valueString: + type: STRING + expressionType: HL7Spec + valueOf: PRL.2 + - vars: + prl3: STRING, PRL.3 + condition: $prl3 NOT_NULL + expressionType: nested + expressionsMap: + url: + type: STRING + value: prl-3-parent-observation-descriptor + valueString: + type: STRING + expressionType: HL7Spec + valueOf: PRL.3 diff --git a/prime-router/metadata/HL7/v251-elr/hl7/datatypes/XPN_ELR/HumanName.yml b/prime-router/metadata/HL7/v251-elr/hl7/datatypes/XPN_ELR/HumanName.yml new file mode 100644 index 00000000000..b8ff6390f66 --- /dev/null +++ b/prime-router/metadata/HL7/v251-elr/hl7/datatypes/XPN_ELR/HumanName.yml @@ -0,0 +1,102 @@ +# $schema: ./../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +resourceType: HumanName + +family: + type: STRING + valueOf: XPN.1.1 + expressionType: HL7Spec +_family: + expressionType: resource + valueOf: ../../datatypes/v251/hl7/datatypes/FN/ExtensionHumanName-family + specs: XPN.1 + +given: + generateList: true + expressionType: nested + expressions: + - expressionType: HL7Spec + valueOf: XPN.2 + type: STRING + - expressionType: HL7Spec + valueOf: XPN.3 + type: STRING +suffix: + generateList: true + expressionType: nested + expressions: + - expressionType: HL7Spec + valueOf: XPN.4 + type: STRING + - expressionType: HL7Spec + valueOf: XPN.6 + type: STRING + - expressionType: HL7Spec + valueOf: XPN.14 + type: STRING +prefix: + type: STRING + valueOf: XPN.5 + expressionType: HL7Spec +use: + type: NAME_USE + valueOf: XPN.7 + expressionType: HL7Spec + +extension_AssemblyOrder: + vars: + xpn11: String, XPN.11 + condition: $xpn11 NOT_NULL + expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: humanname-assembly-order + valueCode: + type: STRING + valueOf: XPN.11 + expressionType: HL7Spec + +# XPN.10 is deprecated so the schema favors using XPN.12/13 if either are populated +period_2: + vars: + xpn12: String, XPN.12 + xpn13: String, XPN.13 + condition: $xpn12 NOT_NULL || $xpn13 NOT_NULL + expressionType: nested + expressionsMap: + start: + valueOf: "GeneralUtils.dateTimeWithZoneId(periodStart,ZONEID)" + expressionType: JEXL + vars: + periodStart: XPN.12 + end: + valueOf: "GeneralUtils.dateTimeWithZoneId(periodEnd,ZONEID)" + expressionType: JEXL + vars: + periodEnd: XPN.13 + +extension: + generateList: true + expressionType: nested + expressions: + - expressionType: nested + condition: $hl7v2Field NOT_NULL + expressionsMap: + url: + type: SYSTEM_URL + value: hl7v2Field + valueString: + type: STRING + valueOf: $hl7v2Field + - expressionType: nested + condition: $hl7v2Component NOT_NULL + expressionsMap: + url: + type: SYSTEM_URL + value: hl7v2Component + valueString: + type: STRING + valueOf: $hl7v2Component + - expressionType: resource + valueOf: datatypes/XPN_ELR/XPNExtension \ No newline at end of file diff --git a/prime-router/metadata/HL7/v251-elr/hl7/datatypes/XPN_ELR/XPNExtension.yml b/prime-router/metadata/HL7/v251-elr/hl7/datatypes/XPN_ELR/XPNExtension.yml new file mode 100644 index 00000000000..0ce0896b37c --- /dev/null +++ b/prime-router/metadata/HL7/v251-elr/hl7/datatypes/XPN_ELR/XPNExtension.yml @@ -0,0 +1,121 @@ +# $schema: ./../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +url: + type: SYSTEM_URL + valueOf: xpn-human-name + +extension: + vars: + xpn2: String, XPN.2 + xpn3: String, XPN.3 + xpn4: String, XPN.4 + xpn6: String, XPN.6 + xpn7: String, XPN.7 + xpn8: String, XPN.8 + xpn9: STRING_ALL, XPN.9 + xpn12: String, XPN.12 + xpn13: String, XPN.13 + xpn14: String, XPN.14 + expressionType: nested + generateList: true + expressions: + - expressionType: nested + condition: $xpn2 NOT_NULL + expressionsMap: + url: + type: STRING + valueOf: XPN.2 + valueString: + type: STRING + expressionType: HL7Spec + valueOf: XPN.2 + - expressionType: nested + condition: $xpn3 NOT_NULL + expressionsMap: + url: + type: STRING + valueOf: XPN.3 + valueString: + type: STRING + expressionType: HL7Spec + valueOf: XPN.3 + - expressionType: nested + condition: $xpn4 NOT_NULL + expressionsMap: + url: + type: STRING + valueOf: XPN.4 + valueString: + type: STRING + expressionType: HL7Spec + valueOf: XPN.4 + - expressionType: nested + condition: $xpn6 NOT_NULL + expressionsMap: + url: + type: STRING + valueOf: XPN.6 + valueString: + type: STRING + expressionType: HL7Spec + valueOf: XPN.6 + - expressionType: nested + condition: $xpn7 NOT_NULL + expressionsMap: + url: + type: STRING + valueOf: XPN.7 + valueString: + type: STRING + expressionType: HL7Spec + valueOf: XPN.7 + - expressionType: nested + condition: $xpn8 NOT_NULL + expressionsMap: + url: + type: STRING + valueOf: XPN.8 + valueString: + type: STRING + expressionType: HL7Spec + valueOf: XPN.8 + - expressionType: nested + condition: $xpn9 NOT_NULL + expressionsMap: + url: + type: STRING + value: XPN.9 + valueCodeableConcept: + valueOf: ../../datatypes/v251/hl7/datatypes/CWE/CodeableConcept + expressionType: resource + specs: XPN.9 + - expressionType: nested + condition: $xpn12 NOT_NULL + expressionsMap: + url: + type: STRING + value: XPN.12 + valueString: + type: STRING + valueOf: $xpn12 + expressionType: HL7Spec + - expressionType: nested + condition: $xpn13 NOT_NULL + expressionsMap: + url: + type: STRING + value: XPN.13 + valueString: + type: STRING + valueOf: $xpn13 + expressionType: HL7Spec + - expressionType: nested + condition: $xpn14 NOT_NULL + expressionsMap: + url: + type: STRING + valueOf: XPN.14 + valueString: + type: STRING + expressionType: HL7Spec + valueOf: XPN.14 \ No newline at end of file diff --git a/prime-router/metadata/HL7/v251-elr/hl7/extension/ExtensionHierarchicDesignator.yml b/prime-router/metadata/HL7/v251-elr/hl7/extension/ExtensionHierarchicDesignator.yml new file mode 100644 index 00000000000..d463f931b52 --- /dev/null +++ b/prime-router/metadata/HL7/v251-elr/hl7/extension/ExtensionHierarchicDesignator.yml @@ -0,0 +1,69 @@ +# $schema: ./../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +url: + condition: $urlValue NOT_NULL + type: SYSTEM_URL + valueOf: $urlValue + +extension_1-namespaceId: + condition: $value NOT_NULL + generateList: true + valueOf: extension/Extension + expressionType: resource + vars: + value: String, HD.1 + constants: + KEY_NAME_SUFFIX: String + urlValue: namespace-id + +extension_2-universalIdISO: + generateList: true + valueOf: extension/Extension + expressionType: resource + condition: $idStr NOT_NULL && $universalIdType EQUALS ISO + vars: + idStr: String, HD.2 + value: $urlPrefix + HD.2 + universalIdType: String, HD.3 + constants: + urlPrefix: "urn:oid:" + KEY_NAME_SUFFIX: Oid + urlValue: universal-id + +extension_3-universalIdUUID: + generateList: true + valueOf: extension/Extension + expressionType: resource + condition: $idStr NOT_NULL && $universalIdType EQUALS UUID + vars: + idStr: String, HD.2 + value: $urlPrefix + HD.2 + universalIdType: String, HD.3 + constants: + urlPrefix: "urn:uuid:" + KEY_NAME_SUFFIX: Uuid + urlValue: universal-id + +extension_4-universalIdNullType: + generateList: true + valueOf: extension/Extension + expressionType: resource + condition: $value NOT_NULL && $universalIdType NULL + vars: + value: String, HD.2 + universalIdType: String, HD.3 + constants: + KEY_NAME_SUFFIX: String + urlValue: universal-id + +extension_5-universalIdUnknownType: + generateList: true + valueOf: extension/Extension + expressionType: resource + condition: $value NOT_NULL && $universalIdType NOT_EQUALS ISO && $universalIdType NOT_EQUALS UUID + vars: + value: String, HD.2 + universalIdType: String, HD.3 + constants: + KEY_NAME_SUFFIX: String + urlValue: universal-id diff --git a/prime-router/metadata/HL7/v251-elr/hl7/extension/ExtensionMeta.yml b/prime-router/metadata/HL7/v251-elr/hl7/extension/ExtensionMeta.yml new file mode 100644 index 00000000000..89f4dff7db3 --- /dev/null +++ b/prime-router/metadata/HL7/v251-elr/hl7/extension/ExtensionMeta.yml @@ -0,0 +1,74 @@ +# $schema: ./../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +security: + condition: $code NOT_NULL + valueOf: datatype/Coding + expressionType: resource + vars: + code: MSH.8 + display: MSH.8 + +tag_1: + condition: $code NOT_NULL + valueOf: datatype/Coding + generateList: true + expressionType: resource + vars: + code: MSH.11.1 + constants: + system: v2-0103 + +tag_2: + condition: $code NOT_NULL + valueOf: datatype/Coding + generateList: true + expressionType: resource + vars: + code: MSH.11.2 + constants: + system: v2-0207 + +extension_1: + generateList: true + valueOf: extension/Extension + expressionType: resource + vars: + value: String, MSH.12.1 + constants: + KEY_NAME_SUFFIX: String + urlValue: source-data-model-version + +# Patient las update facility universal ID +extension_2: + generateList: true + valueOf: extension/Extension + expressionType: resource + condition: $idStr NOT_NULL && $systemStr EQUALS ISO + vars: + idStr: String, PID.34.2 + value: $oidUrlPrefix + PID.34.2 + systemStr: String, PID.34.3 + constants: + oidUrlPrefix: "urn:oid:" + KEY_NAME_SUFFIX: Oid + urlValue: last-updated-facility-universal-id + +# Patient las update facility namespace +extension_3: + generateList: true + valueOf: extension/Extension + expressionType: resource + condition: $value NOT_NULL + vars: + value: String, PID.34.1 + constants: + KEY_NAME_SUFFIX: String + urlValue: last-updated-facility-namespace-id + +# Patient last updated +lastUpdated: + type: STRING + valueOf: "GeneralUtils.dateTimeWithZoneId(dateTimeIn,ZONEID)" + expressionType: JEXL + vars: + dateTimeIn: PID.33 diff --git a/prime-router/metadata/HL7/v251-elr/hl7/message/ORU_R01.yml b/prime-router/metadata/HL7/v251-elr/hl7/message/ORU_R01.yml new file mode 100644 index 00000000000..cfe8c0da75e --- /dev/null +++ b/prime-router/metadata/HL7/v251-elr/hl7/message/ORU_R01.yml @@ -0,0 +1,99 @@ +# $schema: ./../../../../json_schema/fhir/hl7-to-fhir-mapping-message-template.json + +resources: + + - resourceName: MessageHeader + segment: MSH + resourcePath: segments/MSH/MessageHeader + repeats: false + isReferenced: true + + - resourceName: Provenance + segment: MSH + resourcePath: segments/MSH/Provenance-Source + + - resourceName: Provenance + segment: MSH + resourcePath: segments/MSH/Provenance-Transformation + + - resourceName: Patient + segment: .PID + group: PATIENT_RESULT.PATIENT + resourcePath: segments/PID/Patient + isReferenced: true + additionalSegments: + - .PD1 + - MSH + - .NTE + - .NK1 + + - resourceName: Provenance + group: PATIENT_RESULT.PATIENT + segment: .PID + resourcePath: segments/PID/Provenance-Patient + + - resourceName: RelatedPerson + segment: .NK1 + group: PATIENT_RESULT.PATIENT + resourcePath: segments/NK1/RelatedPerson + isReferenced: false + repeats: true + + - resourceName: Encounter + segment: .VISIT.PV1 + group: PATIENT_RESULT.PATIENT + resourcePath: segments/PV1/Encounter + isReferenced: true + additionalSegments: + - .PATIENT.VISIT.PV2 + - MSH + + - resourceName: Observation + segment: .ORDER_OBSERVATION.OBSERVATION.OBX + group: PATIENT_RESULT.ORDER_OBSERVATION + resourcePath: segments/OBX/Observation + repeats: true + isReferenced: true + additionalSegments: + - .OBSERVATION.NTE + - .SPECIMEN.SPM + + - resourceName: SpecimenSource + segment: .OBR + group: PATIENT_RESULT.ORDER_OBSERVATION + resourcePath: segments/ORC/Specimen + isReferenced: true + repeats: true + + - resourceName: Specimen + segment: .SPECIMEN.SPM + group: PATIENT_RESULT.ORDER_OBSERVATION + resourcePath: segments/SPM/Specimen + repeats: true + isReferenced: true + + # PATIENT_RESULT.ORDER_OBSERVATION.SPECIMEN.SPECIMEN_OBSERVATION.OBX provides access for v2.7 + # PATIENT_RESULT.ORDER_OBSERVATION.SPECIMEN.OBX provides access for v2.5.1 + - resourceName: SpecimenObservation + segment: .SPECIMEN.SPECIMEN_OBSERVATION.OBX + group: PATIENT_RESULT.ORDER_OBSERVATION + resourcePath: segments/OBX/Observation + repeats: true + + - resourceName: ServiceRequest + segment: .OBR + group: PATIENT_RESULT.ORDER_OBSERVATION + resourcePath: segments/ORC/ServiceRequest + repeats: true + isReferenced: true + additionalSegments: + - .NTE + - .ORC + + - resourceName: DiagnosticReport + segment: .OBR + group: PATIENT_RESULT.ORDER_OBSERVATION + resourcePath: segments/ORC/DiagnosticReport + repeats: true + additionalSegments: + - .ORC diff --git a/prime-router/metadata/HL7/v251-elr/hl7/resource/Common.yml b/prime-router/metadata/HL7/v251-elr/hl7/resource/Common.yml new file mode 100644 index 00000000000..0589b715d7d --- /dev/null +++ b/prime-router/metadata/HL7/v251-elr/hl7/resource/Common.yml @@ -0,0 +1,4 @@ +# $schema: ./../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +# This file exists to override what is provided in the hl7v2-converter library +# as there are no common elements currently that should get added to every FHIR resource \ No newline at end of file diff --git a/prime-router/metadata/HL7/v251-elr/hl7/segments/MSH/MSHExtension.yml b/prime-router/metadata/HL7/v251-elr/hl7/segments/MSH/MSHExtension.yml new file mode 100644 index 00000000000..ac46be1bfe7 --- /dev/null +++ b/prime-router/metadata/HL7/v251-elr/hl7/segments/MSH/MSHExtension.yml @@ -0,0 +1,119 @@ +# $schema: ./../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +url: + type: SYSTEM_URL + value: msh-message-header + +extension: + expressionType: nested + generateList: true + expressions: + - expressionType: nested + vars: + msh7: MSH.7 + condition: $msh7 NOT_NULL + expressionsMap: + url: + type: STRING + value: MSH.7 + valueString: + type: STRING + expressionType: HL7Spec + valueOf: MSH.7 + - expressionType: nested + vars: + msh10: MSH.10 + condition: $msh10 NOT_NULL + expressionsMap: + url: + type: STRING + value: MSH.10 + valueString: + type: STRING + expressionType: HL7Spec + valueOf: MSH.10 + - expressionType: nested + vars: + msh13: MSH.13 + condition: $msh13 NOT_NULL + expressionsMap: + url: + type: STRING + value: MSH.13 + valueString: + type: STRING + expressionType: HL7Spec + valueOf: MSH.13 + - expressionType: nested + vars: + msh14: MSH.14 + condition: $msh14 NOT_NULL + expressionsMap: + url: + type: STRING + value: MSH.14 + valueString: + type: STRING + expressionType: HL7Spec + valueOf: MSH.14 + - condition: $msh15 NOT_NULL + expressionType: nested + vars: + msh15: MSH.15 + expressionsMap: + url: + type: STRING + value: MSH.15 + valueString: + valueOf: MSH.15 + expressionType: HL7Spec + type: STRING + - condition: $msh16 NOT_NULL + expressionType: nested + vars: + msh16: MSH.16 + expressionsMap: + url: + type: STRING + value: MSH.16 + valueString: + type: STRING + valueOf: MSH.16 + expressionType: HL7Spec + - vars: + msh19: STRING_ALL, MSH.19 + condition: $msh19 NOT_NULL + expressionType: nested + expressionsMap: + url: + type: STRING + value: MSH.19 + valueCodeableConcept: + expressionType: resource + valueOf: ../../datatypes/v251/hl7/datatypes/CWE/CodeableConcept + specs: MSH.19 + - vars: + msh20: MSH.20 + condition: $msh20 NOT_NULL + expressionType: nested + expressionsMap: + url: + type: STRING + value: MSH.20 + valueString: + type: STRING + expressionType: HL7Spec + valueOf: MSH.20 + - expressionType: nested + vars: + $msh21: STRING_ALL, MSH.21 + condition: $msh21 NOT_NULL + generateList: true + specs: MSH.21 * + expressionsMap: + url: + type: STRING + value: MSH.21 + valueIdentifier: + valueOf: ../../datatypes/v251/hl7/datatypes/EI/Identifier + expressionType: resource diff --git a/prime-router/metadata/HL7/v251-elr/hl7/segments/MSH/MessageHeader.yml b/prime-router/metadata/HL7/v251-elr/hl7/segments/MSH/MessageHeader.yml new file mode 100644 index 00000000000..98a4383c669 --- /dev/null +++ b/prime-router/metadata/HL7/v251-elr/hl7/segments/MSH/MessageHeader.yml @@ -0,0 +1,116 @@ +# $schema: ./../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +resourceType: MessageHeader + +id: + type: NAMED_UUID + valueOf: MSH.10 + expressionType: HL7Spec + +eventCoding: + expressionType: resource + valueOf: ../../datatypes/v251/hl7/datatypes/MSG/Coding + specs: MSH.9 + required: true + +meta: + expressionType: resource + valueOf: ../../datatypes/v251/hl7/datatypes/PT/Meta + specs: MSH.11 + vars: + metaSecurity: STRING, MSH.8 + +source: + expressionType: nested + vars: + msh3: STRING_ALL, MSH.3 + expressions: + - constants: + messageHeaderSourceField: MSH.3 + condition: $msh3 NOT_NULL + valueOf: segments/MSH/datatypes/HD/Source + expressionType: resource + specs: MSH.3 + +sender: + condition: $msh4 NOT_NULL || $organizationCountry NOT_NULL + valueOf: ../../datatypes/v251/hl7/datatypes/HD/Organization + expressionType: reference + generateList: true + specs: MSH.4 + vars: + organizationCountry: MSH.17 + msh4: STRING_ALL, MSH.4 + +destination: + vars: + msh6: MSH.6 + msh5: STRING_ALL, MSH.5 + expressionType: nested + generateList: true + expressions: + - constants: + messageHeaderDestinationField: MSH.5 + condition: $msh5 NOT_NULL + expressionType: resource + valueOf: segments/MSH/datatypes/HD/Destination + specs: MSH.5 + - expressionType: nested + condition: $msh6 NOT_NULL && $msh5 NULL + constants: + hdOrganizationHL7Field: MSH.6 + expressionsMap: + receiver: + expressionType: reference + valueOf: ../../datatypes/v251/hl7/datatypes/HD/Organization + specs: MSH.6 + +language: + vars: + cwe1: MSH.19.1 + expressionType: nested + expressions: + - condition: $cwe1 NOT_NULL + valueOf: MSH.19.1 + type: STRING + expressionType: HL7Spec + - condition: $cwe1 NULL + valueOf: MSH.19.4 + type: STRING + expressionType: HL7Spec + +# MSH.10 is captured in Bundle.Identifier +# MSH.12 is hardcoded to 2.5.1 +extension_messageHeader: + generateList: true + expressionType: nested + expressions: + - condition: $msh2 NOT_NULL && $msh2 EQUALS_STRING ^~\&# + expressionType: nested + vars: + msh2: String, MSH.2 + expressionsMap: + url: + type: SYSTEM_URL + value: encoding-characters + valueString: + type: STRING + valueOf: MSH.2 + expressionType: HL7Spec + - condition: $msh18 NOT_NULL + expressionType: nested + vars: + msh18: STRING_ALL, MSH.18 + specs: MSH.18 * + generateList: true + expressionsMap: + url: + type: SYSTEM_URL + value: character-set + valueString: + generateList: true + type: STRING + valueOf: $BASE_VALUE + expressionType: HL7Spec + - expressionType: resource + valueOf: segments/MSH/MSHExtension diff --git a/prime-router/metadata/HL7/v251-elr/hl7/segments/MSH/Provenance-Source.yml b/prime-router/metadata/HL7/v251-elr/hl7/segments/MSH/Provenance-Source.yml new file mode 100644 index 00000000000..5fa2ff64eba --- /dev/null +++ b/prime-router/metadata/HL7/v251-elr/hl7/segments/MSH/Provenance-Source.yml @@ -0,0 +1,78 @@ +# $schema: ./../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +resourceType: Provenance +id: + type: STRING + valueOf: "GeneralUtils.generateResourceId()" + expressionType: JEXL + +target: + valueOf: datatype/Reference + generateList: true + expressionType: resource + specs: $MessageHeader + +agent: + expressionType: nested + generateList: true + vars: + msh4: STRING_ALL, MSH.4 + expressions: + - condition: $msh4 NOT_NULL + expressionType: nested + expressionsMap: + type: + expressionType: nested + expressionsMap: + coding: + expressionType: nested + expressionsMap: + code: + type: STRING + valueOf: "author" + system: + type: SYSTEM_URL + valueOf: "http://terminology.hl7.org/CodeSystem/provenance-participant-type" + who: + valueOf: ../../datatypes/v251/hl7/datatypes/HD/Organization + expressionType: reference + specs: MSH.4 + +recorded: + type: STRING + valueOf: "GeneralUtils.dateTimeWithZoneId(dateTimeIn,ZONEID)" + expressionType: JEXL + vars: + dateTimeIn: MSH.7 + +activity: + expressionType: nested + constants: + caret: "^" + vars: + msg1: String, MSH.9.1 + msg2: String, MSH.9.2 + msg3: String, MSH.9.3 + expressionsMap: + coding: + expressionType: nested + vars: + displayValue: $msg1 + $caret + $msg2 + $caret + $msg3 + expressionsMap: + display: + type: STRING + valueOf: $displayValue + +entity: + condition: $sft NOT_NULL + vars: + sft: SFT + expressionType: nested + expressionsMap: + what: + expressionType: reference + valueOf: segments/SFT/Device + specs: SFT + role: + type: STRING + value: "source" diff --git a/prime-router/metadata/HL7/v251-elr/hl7/segments/MSH/Provenance-Transformation.yml b/prime-router/metadata/HL7/v251-elr/hl7/segments/MSH/Provenance-Transformation.yml new file mode 100644 index 00000000000..7bc6d2a3f7b --- /dev/null +++ b/prime-router/metadata/HL7/v251-elr/hl7/segments/MSH/Provenance-Transformation.yml @@ -0,0 +1,46 @@ +# $schema: ./../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +resourceType: Provenance +id: + type: STRING + valueOf: "GeneralUtils.generateResourceId()" + expressionType: JEXL + +activity: + expressionType: nested + expressionsMap: + coding: + expressionType: nested + expressionsMap: + code: + type: STRING + valueOf: "v2-FHIR transformation" + +recorded: + type: STRING + valueOf: "GeneralUtils.getCurrentDateTimeUsingZoneId(ZONEID)" + expressionType: JEXL + +policy: + type: SYSTEM_URL + valueOf: "http://hl7.org/fhir/uv/v2mappings/message-oru-r01-to-bundle" + +agent: + expressionType: nested + generateList: true + expressionsMap: + type: + expressionType: nested + expressionsMap: + coding: + expressionType: nested + expressionsMap: + code: + type: STRING + valueOf: "assembler" + system: + type: SYSTEM_URL + valueOf: "http://terminology.hl7.org/CodeSystem/provenance-participant-type" + who: + valueOf: segments/MSH/ReportStreamOrganization + expressionType: reference diff --git a/prime-router/metadata/HL7/v251-elr/hl7/segments/MSH/ReportStreamOrganization.yml b/prime-router/metadata/HL7/v251-elr/hl7/segments/MSH/ReportStreamOrganization.yml new file mode 100644 index 00000000000..792dc695f38 --- /dev/null +++ b/prime-router/metadata/HL7/v251-elr/hl7/segments/MSH/ReportStreamOrganization.yml @@ -0,0 +1,32 @@ +# $schema: ./../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +resourceType: Organization + +id: + type: STRING + valueOf: "GeneralUtils.generateResourceId()" + expressionType: JEXL + +identifier_1: + expressionType: nested + generateList: true + expressionsMap: + value_1: + type: STRING + valueOf: "CDC PRIME - Atlanta" + +identifier_2: + expressionType: nested + generateList: true + expressionsMap: + value: + type: STRING + valueOf: "2.16.840.1.114222.4.1.237821" + type: + valueOf: ../../datatypes/v251/hl7/datatypes/ID/CodeableConceptUniversalid + generateList: true + expressionType: resource + specs: "ISO" + system: + type: STRING + valueOf: "urn:ietf:rfc:3986" diff --git a/prime-router/metadata/HL7/v251-elr/hl7/segments/MSH/datatypes/HD/Destination.yml b/prime-router/metadata/HL7/v251-elr/hl7/segments/MSH/datatypes/HD/Destination.yml new file mode 100644 index 00000000000..94dc8e4e998 --- /dev/null +++ b/prime-router/metadata/HL7/v251-elr/hl7/segments/MSH/datatypes/HD/Destination.yml @@ -0,0 +1,85 @@ +# $schema: ./../../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +name: + type: STRING + expressionType: HL7Spec + valueOf: HD.1 + +endpoint: + vars: + hd2: STRING, HD.2 + hd3: STRING, HD.3 + constants: + oidUrlPrefix: "urn:oid:" + uuidUrlPrefix: "urn:uuid:" + expressionType: nested + expressions: + - condition: $hd2 NOT_NULL && $hd3 EQUALS ISO + vars: + endpointValue: $oidUrlPrefix + $hd2 + type: STRING + valueOf: $endpointValue + - condition: $hd2 NOT_NULL && $hd3 EQUALS UUID + vars: + endpointValue: $uuidUrlPrefix + $hd2 + type: STRING + valueOf: $endpointValue + +_endpoint: + vars: + hd3: STRING, HD.3 + expressionType: nested + condition: $hd3 NULL + expressionsMap: + extension: + expressionType: nested + generateList: true + expressionsMap: + url: + type: SYSTEM_URL + value: data-absent-reason + valueCode: + value: "unknown" + +receiver: + vars: + msh6: MSH.6 + expressionType: nested + expressions: + - condition: $msh6 NOT_NULL + expressionType: reference + specs: $msh6 + valueOf: ../../datatypes/v251/hl7/datatypes/HD/Organization + constants: + hdOrganizationHL7Field: MSH.6 + + +extension: + expressionType: nested + generateList: true + expressions: + - expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: universal-id + valueString: + type: STRING + valueOf: HD.2 + expressionType: HL7Spec + - expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: universal-id-type + valueString: + type: STRING + valueOf: HD.3 + expressionType: HL7Spec + - expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: hl7v2Field + valueString: + valueOf: $messageHeaderDestinationField \ No newline at end of file diff --git a/prime-router/metadata/HL7/v251-elr/hl7/segments/MSH/datatypes/HD/Source.yml b/prime-router/metadata/HL7/v251-elr/hl7/segments/MSH/datatypes/HD/Source.yml new file mode 100644 index 00000000000..69b36aff412 --- /dev/null +++ b/prime-router/metadata/HL7/v251-elr/hl7/segments/MSH/datatypes/HD/Source.yml @@ -0,0 +1,139 @@ +# $schema: ./../../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +# Only populate name if HD.2 is not populated or it is populated and +# HD.3 is not ISO, UUID, DNS, URI +name: + vars: + hd1: STRING, HD.1 + hd2: STRING, HD.2 + hd3: STRING, HD.3 + constants: + dash: "-" + colon: ":" + expressionType: nested + expressions: + - condition: $hd2 NULL + type: STRING + valueOf: HD.1 + expressionType: HL7Spec + - condition: $hd2 NOT_NULL + expressionType: nested + vars: + nameValue: $hd1 + $dash + $hd3 + $colon + $hd2 + expressions: + - condition: $hd3 NOT_EQUALS ISO && $hd3 NOT_EQUALS UUID && $hd3 NOT_EQUALS DNS && $hd3 NOT_EQUALS URI + type: STRING + value: $nameValue + +endpoint: + vars: + hd2: STRING, HD.2 + hd3: STRING, HD.3 + constants: + oidUrlPrefix: "urn:oid:" + uuidUrlPrefix: "urn:uuid:" + dnsUrlPrefix: "urn:dns:" + uriUrlPrefix: "urn:uri:" + expressionType: nested + expressions: + - condition: $hd2 NOT_NULL && $hd3 EQUALS ISO + vars: + endpointValue: $oidUrlPrefix + $hd2 + type: STRING + valueOf: $endpointValue + - condition: $hd2 NOT_NULL && $hd3 EQUALS UUID + vars: + endpointValue: $uuidUrlPrefix + $hd2 + type: STRING + valueOf: $endpointValue + - condition: $hd2 NOT_NULL && $hd3 EQUALS DNS + vars: + endpointValue: $dnsUrlPrefix + $hd2 + type: STRING + valueOf: $endpointValue + - condition: $hd2 NOT_NULL && $hd3 EQUALS URI + vars: + endpointValue: $uriUrlPrefix + $hd2 + type: STRING + valueOf: $endpointValue + +_endpoint: + vars: + hd3: STRING, HD.3 + expressionType: nested + expressions: + - expressionType: nested + condition: $hd3 NULL + expressionsMap: + extension: + generateList: true + expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: data-absent-reason + valueCode: + value: "unknown" + - expressionType: nested + condition: $hd3 NOT_EQUALS ISO && $hd3 NOT_EQUALS UUID && $hd3 NOT_EQUALS DNS && $hd3 NOT_EQUALS URI + expressionsMap: + extension: + expressionType: nested + generateList: true + expressionsMap: + url: + type: SYSTEM_URL + value: data-absent-reason + valueCode: + value: "unknown" + + +software: + expressionType: HL7Spec + type: STRING + valueOf: SFT.3 + +version: + expressionType: HL7Spec + type: STRING + valueOf: SFT.2 + +extension: + expressionType: nested + generateList: true + expressions: + - expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: namespace-id + valueString: + type: STRING + valueOf: HD.1 + expressionType: HL7Spec + - expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: universal-id + valueString: + type: STRING + valueOf: HD.2 + expressionType: HL7Spec + - expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: universal-id-type + valueString: + type: STRING + valueOf: HD.3 + expressionType: HL7Spec + - expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: hl7v2Field + valueString: + valueOf: $messageHeaderSourceField + type: STRING diff --git a/prime-router/metadata/HL7/v251-elr/hl7/segments/MSH/segments/SFT/Source.yml b/prime-router/metadata/HL7/v251-elr/hl7/segments/MSH/segments/SFT/Source.yml new file mode 100644 index 00000000000..15d0404410d --- /dev/null +++ b/prime-router/metadata/HL7/v251-elr/hl7/segments/MSH/segments/SFT/Source.yml @@ -0,0 +1,77 @@ +# $schema: ./../../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +_endpoint: + expressionType: nested + expressionsMap: + extension: + generateList: true + expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: data-absent-reason + valueCode: + value: "unknown" + +software: + expressionType: HL7Spec + type: STRING + valueOf: SFT.3 + +version: + expressionType: HL7Spec + type: STRING + valueOf: SFT.2 + +extension: + expressionType: nested + generateList: true + expressions: + - expressionType: nested + vars: + sft4: STRING, SFT.4 + condition: $sft4 NOT_NULL + expressionsMap: + url: + type: SYSTEM_URL + value: software-binary-id + valueString: + type: STRING + expressionType: HL7Spec + valueOf: SFT.4 + - vars: + sft5: STRING, SFT.5 + condition: $sft5 NOT_NULL + expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: source-software-description + valueString: + type: STRING + expressionType: HL7Spec + valueOf: SFT.5 + - expressionType: nested + vars: + sft6: STRING, SFT.6 + condition: $sft6 NOT_NULL + expressionsMap: + url: + type: SYSTEM_URL + value: software-install-date + valueString: + type: STRING + expressionType: HL7Spec + valueOf: SFT.6 + - expressionType: nested + vars: + sft1: STRING_ALL, SFT.1 + condition: $sft1 NOT_NULL + expressionsMap: + url: + type: SYSTEM_URL + value: software-vendor-org + valueReference: + valueOf: ../../datatypes/v251/hl7/datatypes/XON/Organization + expressionType: reference + specs: SFT.1 \ No newline at end of file diff --git a/prime-router/metadata/HL7/v251-elr/hl7/segments/NK1/NK1Extension.yml b/prime-router/metadata/HL7/v251-elr/hl7/segments/NK1/NK1Extension.yml new file mode 100644 index 00000000000..171d63a8b49 --- /dev/null +++ b/prime-router/metadata/HL7/v251-elr/hl7/segments/NK1/NK1Extension.yml @@ -0,0 +1,21 @@ +# $schema: ./../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +url: + type: SYSTEM_URL + value: nk1-related-person + +extension: + generateList: true + expressionType: nested + expressions: + - expressionType: nested + generateList: true + condition: $nk1-13 NOT_NULL + specs: NK1.13 * + expressionsMap: + url: + type: STRING + value: NK1.13 + valueReference: + valueOf: ../../datatypes/v251/hl7/datatypes/XON/Organization + expressionType: reference \ No newline at end of file diff --git a/prime-router/metadata/HL7/v251-elr/hl7/segments/NK1/RelatedPerson.yml b/prime-router/metadata/HL7/v251-elr/hl7/segments/NK1/RelatedPerson.yml new file mode 100644 index 00000000000..8fdfaaaf634 --- /dev/null +++ b/prime-router/metadata/HL7/v251-elr/hl7/segments/NK1/RelatedPerson.yml @@ -0,0 +1,155 @@ +# $schema: ./../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +resourceType: RelatedPerson + +# Not implementing NK1.6: not in mapping, not in NIST +# Not implementing NK1.7: not in mapping, not in NIST +# Not implementing NK1.8: not in mapping, not in NIST +# Not implementing NK1.9: not in mapping, not in NIST +# Not implementing NK1.10: not in mapping, not in NIST +# Not implementing NK1.11: not in mapping, not in NIST +# Not implementing NK1.12: not in mapping, not in NIST +# Not implementing NK1.14: not in mapping, not in NIST +# Not implementing NK1.15: not in mapping, not in NIST +# Not implementing NK1.16: not in mapping, not in NIST +# Not implementing NK1.17: not in mapping, not in NIST +# Not implementing NK1.18: not in mapping, not in NIST +# Not implementing NK1.19: not in mapping, not in NIST +# Not implementing NK1.21: not in mapping, not in NIST +# Not implementing NK1.22: not in mapping, not in NIST +# Not implementing NK1.23: not in mapping, not in NIST +# Not implementing NK1.24: not in mapping, not in NIST +# Not implementing NK1.25: not in mapping, not in NIST +# Not implementing NK1.26: not in mapping, not in NIST +# Not implementing NK1.27: not in mapping, not in NIST +# Not implementing NK1.28: not in mapping, not in NIST +# Not implementing NK1.29: not in mapping, not in NIST +# Not implementing NK1.33: not in mapping, not in NIST +# Not implementing NK1.34: not in mapping, not in NIST +# Not implementing NK1.35: not in mapping, not in NIST +# Not implementing NK1.36: not in mapping, not in NIST +# Not implementing NK1.37: not in mapping, not in NIST +# Not implementing NK1.38: not in mapping, not in NIST +# Not implementing NK1.39: not in mapping, not in NIST +# Not implementing NK1.40: not in mapping, not in NIST +# Not implementing NK1.41: not in mapping, not in NIST + +id: + type: STRING + valueOf: "GeneralUtils.generateResourceId()" + expressionType: JEXL + +patient: + valueOf: datatype/Reference + expressionType: resource + specs: $Patient + useGroup: true + +name: + expressionType: nested + generateList: true + expressions: + - valueOf: datatypes/XPN_ELR/HumanName + expressionType: resource + condition: $nk1-2 NOT_NULL + generateList: true + vars: + nk1-2: NK1.2 + specs: NK1.2 * + constants: + hl7v2Field: "NK1.2" + - valueOf: datatypes/XPN_ELR/HumanName + expressionType: resource + condition: $nk1-30 NOT_NULL + generateList: true + vars: + nk1-30: NK1.30 + specs: NK1.30 * + constants: + hl7v2Field: "NK1.30" + +relationship: + expressionType: nested + generateList: true + expressions: + - valueOf: datatypes/CWE_ELR/CodeableConcept + expressionType: resource + condition: $nk1-3 NOT_NULL + vars: + nk1-3: NK1.3 + specs: NK1.3 + constants: + hl7v2Field: "NK1.3" + +address: + expressionType: nested + generateList: true + expressions: + - valueOf: ../../datatypes/v251/hl7/datatypes/XAD/Address + generateList: true + expressionType: resource + condition: $nk1-4 NOT_NULL + vars: + nk1-4: NK1.4 + specs: NK1.4 * + constants: + hl7v2Field: "NK1.4" + - valueOf: ../../datatypes/v251/hl7/datatypes/XAD/Address + generateList: true + expressionType: resource + condition: $nk1-32 NOT_NULL + vars: + nk1-32: NK1.32 + specs: NK1.32 * + constants: + hl7v2Field: "NK1.32" + +telecom: + expressionType: nested + generateList: true + expressions: + - condition: $valueIn NOT_NULL + valueOf: ../../datatypes/v251/hl7/datatypes/XTN/ContactPoint + generateList: true + expressionType: resource + specs: NK1.5 * + vars: + valueIn: NK1.5 + constants: + hl7v2Field: "NK1.5" + - condition: $valueIn NOT_NULL + valueOf: ../../datatypes/v251/hl7/datatypes/XTN/ContactPoint + generateList: true + expressionType: resource + specs: NK1.31 * + vars: + valueIn: NK1.31 + constants: + hl7v2Field: "NK1.31" + +communication: + expressionType: nested + vars: + nk1-20: STRING_ALL, NK1.20 + condition: $nk1-20 NOT_NULL + expressionsMap: + language: + valueOf: ../../datatypes/v251/hl7/datatypes/CWE/CodeableConcept + expressionType: resource + specs: NK1.20 + +extension: + expressionType: nested + generateList: true + vars: + nk1-13: STRING_ALL, NK1.13 + expressions: + - expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + valueOf: hl7v2Segment + valueString: + valueOf: 'NK1' + - expressionType: resource + valueOf: segments/NK1/NK1Extension \ No newline at end of file diff --git a/prime-router/metadata/HL7/v251-elr/hl7/segments/NTE/Annotation.yml b/prime-router/metadata/HL7/v251-elr/hl7/segments/NTE/Annotation.yml new file mode 100644 index 00000000000..9ba009349ce --- /dev/null +++ b/prime-router/metadata/HL7/v251-elr/hl7/segments/NTE/Annotation.yml @@ -0,0 +1,44 @@ +# $schema: ./../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +text: + type: STRING + valueOf: NTE.3 + required: true + expressionType: HL7Spec + +extension_1-noteSource: + generateList: true + expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: note-source + valueId: + valueOf: NTE.2 + expressionType: HL7Spec + type: STRING + +extension_2-noteComment: + generateList: true + expressionType: nested + specs: NTE.3 * + expressionsMap: + url: + type: SYSTEM_URL + value: note-comment + valueId: + valueOf: FT + expressionType: HL7Spec + type: STRING + +extension_3-noteType: + generateList: true + expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: note-type + valueCodeableConcept: + valueOf: datatypes/CWE_ELR/CodeableConcept + expressionType: resource + specs: NTE.4 \ No newline at end of file diff --git a/prime-router/metadata/HL7/v251-elr/hl7/segments/OBX/Device.yml b/prime-router/metadata/HL7/v251-elr/hl7/segments/OBX/Device.yml new file mode 100644 index 00000000000..64cb809a99d --- /dev/null +++ b/prime-router/metadata/HL7/v251-elr/hl7/segments/OBX/Device.yml @@ -0,0 +1,13 @@ +# $schema: ./../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +resourceType: Device + +id: + type: STRING + valueOf: "GeneralUtils.generateResourceId()" + expressionType: JEXL + +identifier: + valueOf: ../../datatypes/v251/hl7/datatypes/EI/Identifier + expressionType: resource + specs: $BASE_VALUE \ No newline at end of file diff --git a/prime-router/metadata/HL7/v251-elr/hl7/segments/OBX/OBXExtension.yml b/prime-router/metadata/HL7/v251-elr/hl7/segments/OBX/OBXExtension.yml new file mode 100644 index 00000000000..527a0cabbdb --- /dev/null +++ b/prime-router/metadata/HL7/v251-elr/hl7/segments/OBX/OBXExtension.yml @@ -0,0 +1,115 @@ +# $schema: ./../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +url: + type: SYSTEM_URL + value: obx-observation + +extension: + generateList: true + expressionType: nested + expressions: + - expressionType: nested + vars: + obx2: STRING_ALL, OBX.2 + condition: $obx2 NOT_NULL + expressionsMap: + url: + value: OBX.2 + type: STRING + valueId: + type: STRING + expressionType: HL7Spec + valueOf: OBX.2 + - expressionType: nested + vars: + obx6: STRING_ALL, OBX.6 + condition: $obx6 NOT_NULL + expressionsMap: + url: + type: STRING + value: OBX.6 + valueCodeableConcept: + valueOf: datatypes/CWE_ELR/CodeableConcept + specs: OBX.6 + expressionType: resource + - expressionType: nested + vars: + obx9: STRING_ALL, OBX.9 + condition: $obx9 NOT_NULL + expressionsMap: + url: + value: OBX.9 + type: STRING + valueString: + type: STRING + expressionType: HL7Spec + valueOf: OBX.9 + - expressionType: nested + vars: + obx11: STRING_ALL, OBX.11 + condition: $obx11 NOT_NULL + expressionsMap: + url: + value: OBX.11 + type: STRING + valueString: + type: STRING + expressionType: HL7Spec + valueOf: OBX.11 + - expressionType: nested + vars: + obx12: STRING_ALL, OBX.12 + condition: $obx12 NOT_NULL + expressionsMap: + url: + value: OBX.12 + type: STRING + valueString: + type: STRING + expressionType: HL7Spec + valueOf: OBX.12 + - expressionType: nested + vars: + obx13: STRING_ALL, OBX.13 + condition: $obx13 NOT_NULL + expressionsMap: + url: + type: STRING + value: OBX.13 + valueString: + type: STRING + expressionType: HL7Spec + specs: OBX.13 + - expressionType: nested + vars: + obx17: STRING_ALL, OBX.17 + condition: $obx17 NOT_NULL + generateList: true + specs: OBX.17 * + expressionsMap: + url: + type: STRING + value: OBX.17 + valueCodeableConcept: + valueOf: ../../datatypes/v251/hl7/datatypes/CWE/CodeableConcept + expressionType: resource + - expressionType: nested + vars: + obx18: STRING_ALL, OBX.18 + condition: $obx18 NOT_NULL + generateList: true + specs: OBX.18 * + expressionsMap: + url: + type: STRING + value: OBX.18 + valueReference: + valueOf: segments/OBX/Device + expressionType: reference + + + + + + + diff --git a/prime-router/metadata/HL7/v251-elr/hl7/segments/OBX/Observation.yml b/prime-router/metadata/HL7/v251-elr/hl7/segments/OBX/Observation.yml new file mode 100644 index 00000000000..76055d029f3 --- /dev/null +++ b/prime-router/metadata/HL7/v251-elr/hl7/segments/OBX/Observation.yml @@ -0,0 +1,503 @@ +# $schema: ./../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +resourceType: Observation + +# Not implementing OBX.5 when OBX.2 is RP as the inventory say it still needs to be resolved +# Not implementing OBX.5 when OBX.2 is CF, the type does not exist in NIST and the mapping is wrong in the inventory +# Not implementing OBX.5 when OBX.2 is NA (Numeric Array), the inventory does not specify how that should map to SampledData +# OBX.17 is repeatable but maps to method on Observation which is not, so it's all captured in OBXExtension +# OBX.18 is repeatable but maps to device on Observation which is not, so it's all captured in OBXExtension +# Not implementing OBX.20 not in mapping deprecated in NIST +# Not implementing OBX.21 not in mapping deprecated in NIST +# Not implementing OBX.22 not in mapping deprecated in NIST +# Not implementing OBX.26 not in mapping not in NIST +# Not implementing OBX.27 not in mapping not in NIST +# Not implementing OBX.28 not in mapping not in NIST +# Not implementing OBX.29 not in mapping not in NIST +# Not implementing OBX.30 not in mapping not in NIST +# Not implementing OBX.31 not in mapping not in NIST +# Not implementing OBX.32 not in mapping not in NIST +# Not implementing OBX.33 as it's not in the NIST spec the logic in the inventory cannot be implemented in the library + + +id: + type: STRING + valueOf: "GeneralUtils.generateResourceId()" + expressionType: JEXL + +code: + vars: + obx3: STRING, OBX.3 + condition: $obx3 NOT_NULL + expressionType: resource + valueOf: datatypes/CWE_ELR/CodeableConcept + specs: OBX.3 + +valueString_obx: + vars: + obx2: STRING, OBX.2 + expressionType: nested + expressions: + - condition: $obx2 EQUALS ST || $obx2 EQUALS FT || $obx2 EQUALS TX + type: STRING_ALL + valueOf: OBX.5 + expressionType: HL7Spec + - condition: $obx2 EQUALS VR + vars: + vrValue: OBX.5.1 + $dash + OBX.5.2 + constants: + dash: "-" + type: STRING + valueOf: $vrValue + - condition: $obx2 EQUALS SN && $obx53 EQUALS + + vars: + obx53: STRING, OBX.5.3 + value: OBX.5.1 + $plus + OBX.5.2 + $plus + OBX.5.3 + $plus + OBX.5.4 + constants: + plus: "+" + type: STRING + valueOf: $value + +valueCodeableConcept: + expressionType: nested + vars: + obx2: STRING, OBX.2 + expressions: + - condition: $obx2 EQUALS CNE + valueOf: ../../datatypes/v251/hl7/datatypes/CNE/CodeableConcept + specs: OBX.5 + expressionType: resource + - condition: $obx2 EQUALS CWE + valueOf: ../../datatypes/v251/hl7/datatypes/CWE/CodeableConcept + specs: OBX.5 + expressionType: resource + - condition: $obx2 EQUALS CE + valueOf: ../../datatypes/v251/hl7/datatypes/CE/CodeableConcept + specs: OBX.5 + expressionType: resource + - condition: $obx2 EQUALS IS + expressionType: nested + expressionsMap: + coding: + expressionType: nested + generateList: true + expressionsMap: + code: + type: STRING + expressionType: HL7Spec + valueOf: OBX.5 + +valuePeriod: + condition: $obx2 EQUALS DR + valueOf: ../../datatypes/v251/hl7/datatypes/DR/Period + expressionType: resource + specs: OBX.5 + vars: + obx2: STRING, OBX.2 + start: OBX.5.1 + end: OBX.5.2 + dateTimeIn: OBX.5.1 + dateTimeOut: OBX.5.2 + +valueDateTime: + condition: $obx2 EQUALS DT || $obx2 EQUALS DTM + type: STRING + valueOf: "GeneralUtils.dateTimeWithZoneId(dateTimeIn,ZONEID)" + expressionType: JEXL + vars: + dateTimeIn: OBX.5 + obx2: STRING, OBX.2 +_valueDateTime: + expressionType: nested + condition: $obx2 EQUALS DT || $obx2 EQUALS DTM + vars: + obx5: OBX.5 + obx2: STRING, OBX.2 + expressionsMap: + extension: + condition: $obx5 NOT_NULL + generateList: true + expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: hl7v2-date-time + valueString: + type: STRING + valueOf: OBX.5 + expressionType: HL7Spec + +valueTime: + condition: $obx2 EQUALS TM + type: STRING + valueOf: OBX.5 + expressionType: HL7Spec + vars: + obx2: STRING, OBX.2 + +_valueTime: + expressionType: nested + condition: $obx2 EQUALS TM + vars: + obx5: OBX.5 + obx2: STRING, OBX.2 + expressionsMap: + extension: + condition: $obx5 NOT_NULL + generateList: true + expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: hl7v2-date-time + valueString: + type: STRING + valueOf: OBX.5 + expressionType: HL7Spec + +valueRange: + vars: + obx2: STRING, OBX.2 + CWERangeUnits: OBX.6 + obx53: STRING, OBX.5.3 + expressionType: nested + specs: OBX.5 + expressions: + - condition: $obx2 EQUALS NR + valueOf: ../../datatypes/v251/hl7/datatypes/NR/Range + expressionType: resource + - condition: $obx2 EQUALS SN && $obx53 EQUALS - + valueOf: ../../datatypes/v251/hl7/datatypes/SN/Range + expressionType: resource + + +valueRatio: + vars: + obx2: STRING, OBX.2 + obx53: STRING, OBX.5.3 + CWERangeUnits: OBX.6 + condition: $obx2 EQUALS SN && ($obx53 EQUALS / || $obx53 EQUALS :) + valueOf: ../../datatypes/v251/hl7/datatypes/SN/Ratio + expressionType: resource + specs: OBX.5 + +valueQuantity: + vars: + obx2: STRING, OBX.2 + CWEQuantityUnits: OBX.6 + obx53: STRING, OBX.5.3 + expressionType: nested + expressions: + - condition: $obx2 EQUALS NM + expressionType: nested + expressionsMap: + value: + type: STRING + expressionType: HL7Spec + valueOf: OBX.5 + code: + condition: $identifier NOT_NULL && $nameOfCodingSystem NOT_NULL + type: STRING + expressionType: HL7Spec + valueOf: CWEQuantityUnits.1 + vars: + identifier: CWEQuantityUnits.1 + nameOfCodingSystem: CWEQuantityUnits.3 + unit: + expressionType: nested + vars: + identifier: CWEQuantityUnits.1 + text: CWEQuantityUnits.2 + expressions: + - condition: $text NULL && $identifier NOT_NULL + type: STRING + valueOf: CWEQuantityUnits.1 + expressionType: HL7Spec + - condition: $text NOT_NULL + type: STRING + valueOf: CWEQuantityUnits.2 + expressionType: HL7Spec + system: + condition: $identifier NOT_NULL && $nameOfCodingSystem NOT_NULL + type: STRING + expressionType: HL7Spec + valueOf: CWEQuantityUnits.3 + vars: + identifier: CWEQuantityUnits.1 + nameOfCodingSystem: CWEQuantityUnits.3 + - condition: > + $obx2 EQUALS SN && $obx53 NOT_EQUALS : && $obx53 NOT_EQUALS / && $obx53 NOT_EQUALS - && $obx53 NOT_EQUALS + + expressionType: resource + valueOf: ../../datatypes/v251/hl7/datatypes/SN/Quantity + specs: OBX.5 + +referenceRange: + vars: + obx7: STRING_ALL, OBX.7 + condition: $obx7 NOT_NULL + expressionType: nested + generateList: true + expressionsMap: + text: + expressionType: HL7Spec + type: STRING + valueOf: OBX.7 + +interpretation: + vars: + obx8: STRING_ALL, OBX.8 + condition: $obx8 NOT_NULL + generateList: true + valueOf: datatypes/CWE_ELR/CodeableConcept + expressionType: resource + specs: OBX.8 * + +status: + type: OBSERVATION_STATUS + default: unknown + valueOf: OBX.11 + expressionType: HL7Spec + +dataAbsentReason: + vars: + obx2: STRING, OBX.2 + obx5: STRING, OBX.5 + obx11: STRING, OBX.11 + constants: + system: http://terminology.hl7.org/CodeSystem/data-absent-reason + expressionType: nested + expressions: + - condition: $obx11 EQUALS X + expressionType: nested + expressionsMap: + coding: + generateList: true + expressionType: nested + expressionsMap: + code: + valueOf: cannot-be-obtained + system: + valueOf: $system + - condition: $obx11 EQUALS_STRING N + expressionType: nested + expressionsMap: + coding: + generateList: true + expressionType: nested + expressionsMap: + code: + valueOf: not-asked + system: + valueOf: $system + - condition: $obx2 EQUALS ST && ($obx5 EQUALS_STRING $emptyString || $obx5 NULL) + expressionType: nested + constants: + emptyString: "" + expressionsMap: + coding: + generateList: true + expressionType: nested + expressionsMap: + code: + valueOf: unknown + system: + valueOf: $system + +effectiveDateTime: + type: STRING + valueOf: "GeneralUtils.dateTimeWithZoneId(dateTimeIn,ZONEID)" + expressionType: JEXL + vars: + dateTimeIn: OBX.14 +_effectiveDateTime: + expressionType: nested + condition: $obx14 NOT_NULL + vars: + obx14: OBX.14 + expressionsMap: + extension_1: + generateList: true + expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: hl7v2-date-time + valueString: + type: STRING + valueOf: OBX.14 + expressionType: HL7Spec + +method: + vars: + obx17: STRING_ALL, OBX.17 + condition: $obx17 NOT_NuLL + valueOf: datatypes/CWE_ELR/CodeableConcept + expressionType: resource + specs: OBX.17 + +device: + vars: + obx18: STRING_ALL, OBX.18 + condition: $obx18 NOT_NULL + valueOf: segments/OBX/Device + expressionType: reference + specs: OBX.18 + +performer: + generateList: true + expressionType: nested + expressions: + - expressionType: reference + vars: + obx15: STRING_ALL, OBX.15 + condition: $obx15 NOT_NULL + valueOf: ../../datatypes/v251/hl7/datatypes/CWE/Organization + constants: + cweOrganizationHL7Field: OBX.15 + specs: OBX.15 + - expressionType: reference + generateList: true + specs: OBX.16 * + valueOf: segments/OBX/PractitionerRole + vars: + OBXPractitionerComponent: $BASE_VALUE + obx16: STRING_ALL, OBX.16 + condition: $obx16 NOT_NULL + constants: + OBXPractitionerRoleSystem: "http://terminology.hl7.org/CodeSystem/practitioner-role" + OBXPractitionerRoleCode: "responsibleObserver" + - expressionType: reference + vars: + obx25: STRING_ALL, OBX.25 + OBXPractitionerComponent: OBX.25 + OBXPractitionerRoleOrganization: OBX.23 + OBXPractitionerRoleOrganizationAddress: OBX.24 + condition: $obx25 NOT_NULL + valueOf: segments/OBX/PractitionerRole + constants: + OBXPractitionerRoleSystem: "http://terminology.hl7.org/CodeSystem/v2-0912" + OBXPractitionerRoleCode: "MDIR" + - expressionType: reference + vars: + obx25: STRING_ALL, OBX.25 + obx23: STRING_ALL, obx23 + XADAddress: OBX.24 + condition: $obx25 NULL && ($obx23 NOT_NULL || $XADAddress NOT_NULL) + valueOf: ../../datatypes/v251/hl7/datatypes/XON/Organization + specs: OBX.23 + constants: + XONHL7Field: OBX.25 + +extension: + generateList: true + expressionType: nested + vars: + obx2: STRING, OBX.2 + expressions: + - expressionType: nested + vars: + obx4: STRING,OBX.4 + condition: $obx4 NOT_NULL + expressionsMap: + url: + type: SYSTEM_URL + value: sub-id + valueString: + expressionType: HL7Spec + type: STRING + valueOf: OBX.4 + - expressionType: nested + vars: + obx10: STRING_ALL, OBX.10 + condition: $obx10 NOT_NULL + generateList: true + specs: OBX.10 * + expressionsMap: + url: + type: SYSTEM_URL + value: nature-of-abnormal-test + valueId: + valueOf: $BASE_VALUE + expressionType: HL7Spec + type: STRING + - expressionType: nested + vars: + obx19: STRING, OBX.19 + condition: $obx19 NOT_NULL + expressionsMap: + url: + type: SYSTEM_URL + value: analysis-date-time + valueDateTime: + type: STRING + valueOf: "GeneralUtils.dateTimeWithZoneId(dateTimeIn,ZONEID)" + expressionType: JEXL + vars: + dateTimeIn: OBX.19 + _valueDateTime: + expressionType: nested + condition: $obx19 NOT_NULL + vars: + obx19: OBX.19 + expressionsMap: + extension_1: + generateList: true + expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: hl7v2-date-time + valueString: + type: STRING + valueOf: $obx19 + expressionType: HL7Spec + - expressionType: nested + vars: + obx54: STRING, OBX.5.4 + condition: $obx2 EQUALS ED && $obx54 EQUALS Base64 + expressionsMap: + url: + type: SYSTEM_URL + value: observation-value-attachment + valueAttachment: + valueOf: ../../datatypes/v251/hl7/datatypes/ED/Attachment + expressionType: resource + specs: OBX.5 + - expressionType: resource + condition: $obx2 EQUALS SN + valueOf: ../../datatypes/v251/hl7/datatypes/SN/ExtensionSN + specs: OBX.5 + - expressionType: resource + valueOf: segments/OBX/OBXExtension + + +subject: + valueOf: datatype/Reference + expressionType: resource + specs: $Patient + +encounter: + valueOf: datatype/Reference + expressionType: resource + specs: $Encounter + +# $suppressNote is a constant that can be passed in so that a note is not generated +# This was required when we translate the SPECIMEN.OBX segment so that the created observation +# does not include notes from the OBSERVATION GROUP +# ORDER_OBSERVATION +# NTE -> Should not be included as part of the Observation created from the OBX +# SPECIMEN +# OBX +# See use here: https://github.com/CDCgov/prime-reportstream/blob/813fe6d15e780af3ea88eb61ddfbdf2a8f4462a9/prime-router/metadata/fhir_mapping/hl7/resource/ServiceRequest.yml#L380 +note_observation: + valueOf: segments/NTE/Annotation + condition: $suppressNote NULL + expressionType: resource + generateList: true + specs: NTE + +focus: + valueOf: datatype/Reference + expressionType: resource + specs: $Specimen + useGroup: true diff --git a/prime-router/metadata/HL7/v251-elr/hl7/segments/OBX/PractitionerRole.yml b/prime-router/metadata/HL7/v251-elr/hl7/segments/OBX/PractitionerRole.yml new file mode 100644 index 00000000000..5f31cbc9315 --- /dev/null +++ b/prime-router/metadata/HL7/v251-elr/hl7/segments/OBX/PractitionerRole.yml @@ -0,0 +1,36 @@ +# $schema: ./../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +resourceType: PractitionerRole + +id: + type: STRING + valueOf: "GeneralUtils.generateResourceId()" + expressionType: JEXL + +practitioner: + valueOf: ../../datatypes/v251/hl7/datatypes/XCN/Practitioner + expressionType: reference + specs: $OBXPractitionerComponent + +organization: + condition: $roleOrg NOT_NULL + valueOf: ../../datatypes/v251/hl7/datatypes/XON/Organization + expressionType: reference + specs: $OBXPractitionerRoleOrganization + vars: + XADAddress: $OBXPractitionerRoleOrganizationAddress + roleOrg: STRING_ALL, $OBXPractitionerRoleOrganization + +code: + expressionType: nested + expressionsMap: + coding: + generateList: true + expressionType: nested + expressionsMap: + system: + type: STRING + valueOf: $OBXPractitionerRoleSystem + code: + type: STRING + valueOf: $OBXPractitionerRoleCode \ No newline at end of file diff --git a/prime-router/metadata/HL7/v251-elr/hl7/segments/ORC/DiagnosticReport.yml b/prime-router/metadata/HL7/v251-elr/hl7/segments/ORC/DiagnosticReport.yml new file mode 100644 index 00000000000..9367c7d981b --- /dev/null +++ b/prime-router/metadata/HL7/v251-elr/hl7/segments/ORC/DiagnosticReport.yml @@ -0,0 +1,264 @@ +# $schema: ./../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +resourceType: DiagnosticReport + +id: + type: STRING + valueOf: "GeneralUtils.generateResourceId()" + expressionType: JEXL + +identifier: + expressionType: nested + generateList: true + vars: + obr2: STRING_ALL, OBR.2 + orc2: STRING_ALL, ORC.2 + obr3: STRING_ALL, OBR.3 + orc3: STRING_ALL, ORC.3 + orc4: STRING_ALL, ORC.4 + expressions: + - condition: $orc2 NOT_NULL + valueOf: ../../datatypes/v251/hl7/datatypes/EI/Identifier + expressionType: resource + specs: ORC.2 + constants: + code: "PLAC" + system: "http://terminology.hl7.org/CodeSystem/v2-0203" + hl7v2Field: ORC.2 + - condition: $orc2 NULL && $obr2 NOT_NULL + valueOf: ../../datatypes/v251/hl7/datatypes/EI/Identifier + expressionType: resource + specs: OBR.2 + constants: + code: "PLAC" + system: "http://terminology.hl7.org/CodeSystem/v2-0203" + hl7v2Field: OBR.2 + - condition: $orc3 NOT_NULL + valueOf: ../../datatypes/v251/hl7/datatypes/EI/Identifier + expressionType: resource + specs: ORC.3 + constants: + system: "http://terminology.hl7.org/CodeSystem/v2-0203" + code: "FILL" + display: "Filler Identifier" + - condition: $orc3 NULL && $obr3 NOT_NULL + valueOf: ../../datatypes/v251/hl7/datatypes/EI/Identifier + expressionType: resource + specs: OBR.3 + constants: + system: "http://terminology.hl7.org/CodeSystem/v2-0203" + code: "FILL" + display: "Filler Identifier" + - condition: $orc4 NOT_NULL + valueOf: ../../datatypes/v251/hl7/datatypes/EI/Identifier + expressionType: resource + specs: ORC.4 + constants: + system: "http://terminology.hl7.org/CodeSystem/v2-0203" + code: "PGN" + - condition: $orc4 NOT_NULL + valueOf: ../../datatypes/v251/hl7/datatypes/EI/Identifier + expressionType: resource + specs: ORC.4 + constants: + system: "http://terminology.hl7.org/CodeSystem/v2-0203" + code: "FGN" + +code: + valueOf: datatypes/CWE_ELR/CodeableConcept + expressionType: resource + specs: OBR.4 + +effectiveDateTime: + condition: $start NOT_NULL && $end NULL + type: STRING + valueOf: "GeneralUtils.dateTimeWithZoneId(dateTimeIn,ZONEID)" + expressionType: JEXL + vars: + dateTimeIn: OBR.7 + start: OBR.7 + end: OBR.8 +_effectiveDateTime: + expressionType: nested + condition: $start NOT_NULL && $end NULL + vars: + dateTimeIn: OBR.7 + start: OBR.7 + end: OBR.8 + expressionsMap: + extension_1: + generateList: true + expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: hl7v2-date-time + valueString: + type: STRING + valueOf: $dateTimeIn + expressionType: HL7Spec + +effectivePeriod: + condition: $startDate NOT_NULL && $endDate NOT_NULL + vars: + startDate: OBR.7 + endDate: OBR.8 + expressionType: nested + expressionsMap: + start: + valueOf: "GeneralUtils.dateTimeWithZoneId(startDate,ZONEID)" + expressionType: JEXL + _start: + expressionType: nested + condition: $startDate NOT_NULL + expressionsMap: + extension_1: + generateList: true + expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: hl7v2-date-time + valueString: + type: STRING + valueOf: $startDate + expressionType: HL7Spec + end: + valueOf: "GeneralUtils.dateTimeWithZoneId(endDate,ZONEID)" + expressionType: JEXL + _end: + expressionType: nested + condition: $endDate NOT_NULL + expressionsMap: + extension_1: + generateList: true + expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: hl7v2-date-time + valueString: + type: STRING + valueOf: $endDate + expressionType: HL7Spec + +issued: + type: STRING + valueOf: 'GeneralUtils.dateTimeWithZoneId(dateTimeIn,ZONEID)' + expressionType: JEXL + vars: + dateTimeIn: OBR.22 +_issued: + expressionType: nested + condition: $obr22 NOT_NULL + vars: + obr22: OBR.22 + expressionsMap: + extension_1: + generateList: true + expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: hl7v2-date-time + valueString: + type: STRING + valueOf: $obr22 + expressionType: HL7Spec + +category: + expressionType: resource + valueOf: ../../datatypes/v251/hl7/datatypes/ID/CodeableConcept + specs: OBR.24 + +status: + type: DIAGNOSTIC_REPORT_STATUS + valueOf: OBR.25 + expressionType: HL7Spec + required: true + +resultsInterpreter: + vars: + obr32: STRING_ALL, OBR.32 + condition: $obr32 NOT_NULL + valueOf: ../../datatypes/v251/hl7/datatypes/NDL/PractitionerRole + generateList: true + expressionType: reference + specs: OBR.32 + +performer_1-technician: + valueOf: ../../datatypes/v251/hl7/datatypes/NDL/PractitionerRole + condition: $obr34 NOT_NULL + generateList: true + expressionType: reference + specs: OBR.34 + vars: + obr34: OBR.34 + constants: + performerParticipationType: "SPRF" + +performer_2-transcriptionist: + valueOf: ../../datatypes/v251/hl7/datatypes/NDL/PractitionerRole + condition: $obr35 NOT_NULL + generateList: true + expressionType: reference + specs: OBR.35 + vars: + obr35: OBR.35 + constants: + performerParticipationType: "TRANS" + +extension: + generateList: true + expressionType: nested + expressions: + - expressionType: nested + vars: + orc16: ORC.16 + condition: $orc16 NOT_NULL + expressionsMap: + url: + type: SYSTEM_URL + value: "http://hl7.org/fhir/StructureDefinition/event-statusReason" + valueCodeableConcept: + expressionType: resource + valueOf: ../../datatypes/v251/hl7/datatypes/CWE/CodeableConcept + specs: ORC.16 + +encounter: + valueOf: datatype/Reference + expressionType: resource + specs: $Encounter + +subject: + valueOf: datatype/Reference + expressionType: resource + specs: $Patient + +basedOn: + valueOf: datatype/Reference + expressionType: resource + specs: $ServiceRequest + generateList: true + useGroup: true + +specimen: + expressionType: nested + generateList: true + expressions: + - valueOf: datatype/Reference + generateList: true + expressionType: resource + specs: $Specimen + useGroup: true + - valueOf: datatype/Reference + expressionType: resource + specs: $SpecimenSource + useGroup: true + +result: + valueOf: datatype/Reference + generateList: true + expressionType: resource + specs: $Observation + useGroup: true \ No newline at end of file diff --git a/prime-router/metadata/HL7/v251-elr/hl7/segments/ORC/OBRExtension.yml b/prime-router/metadata/HL7/v251-elr/hl7/segments/ORC/OBRExtension.yml new file mode 100644 index 00000000000..d70a7ae30c7 --- /dev/null +++ b/prime-router/metadata/HL7/v251-elr/hl7/segments/ORC/OBRExtension.yml @@ -0,0 +1,340 @@ +# $schema: ./../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +url: + type: SYSTEM_URL + value: obr-observation-request + +extension: + generateList: true + expressionType: nested + expressions: + - expressionType: nested + vars: + obr2: STRING_ALL, OBR.2 + orc2: STRING_ALL, ORC.2 + condition: $orc2 NOT_NULL && $obr2 NOT_NULL + expressionsMap: + url: + type: STRING + value: OBR.2 + valueIdentifier: + valueOf: ../../datatypes/v251/hl7/datatypes/EI/Identifier + expressionType: resource + specs: OBR.2 + - expressionType: nested + vars: + obr3: STRING_ALL, OBR.3 + orc3: STRING_ALL, ORC.3 + condition: $orc3 NOT_NULL && $obr3 NOT_NULL + expressionsMap: + url: + type: STRING + value: OBR.3 + valueIdentifier: + valueOf: ../../datatypes/v251/hl7/datatypes/EI/Identifier + expressionType: resource + specs: OBR.3 + - expressionType: nested + vars: + obr10: STRING_ALL, OBR.10 + condition: $obr10 NOT_NULL + specs: OBR.10 * + generateList: true + expressionsMap: + url: + type: STRING + value: OBR.10 + valueReference: + expressionType: reference + valueOf: ../../datatypes/v251/hl7/datatypes/XCN/Practitioner + - expressionType: nested + vars: + obr11: STRING, OBR.11 + condition: $obr11 NOT_NULL + expressionsMap: + url: + type: STRING + value: OBR.11 + valueString: + type: STRING + expressionType: HL7Spec + valueOf: OBR.11 + - expressionType: nested + vars: + obr12: STRING_ALL, OBR.12 + condition: $obr12 NOT_NULL + expressionsMap: + url: + type: STRING + value: OBR.12 + valueCodeableConcept: + expressionType: resource + valueOf: ../../datatypes/v251/hl7/datatypes/CWE/CodeableConcept + specs: OBR.12 + - expressionType: nested + vars: + obr13: STRING_ALL, OBR.13 + condition: $obr13 NOT_NULL + expressionsMap: + url: + type: STRING + value: OBR.13 + valueString: + expressionType: HL7Spec + type: STRING + valueOf: OBR.13 + - expressionType: nested + vars: + obr16: STRING_ALL, OBR.16 + condition: $obr16 NOT_NULL + specs: OBR.16 * + generateList: true + expressionsMap: + url: + type: STRING + value: OBR.16 + valueReference: + expressionType: reference + valueOf: ../../datatypes/v251/hl7/datatypes/XCN/Practitioner + - condition: $orc14 NOT_NULL && $obr17 NOT_NULL + vars: + orc14: STRING_ALL, ORC.14 + obr17: STRING_ALL, OBR.17 + expressionType: nested + specs: OBR.17 * + generateList: true + expressionsMap: + url: + type: SYSTEM_URL + value: callback-number + valueContactPoint: + valueOf: ../../datatypes/v251/hl7/datatypes/XTN/ContactPoint + expressionType: resource + constants: + hl7v2Field: "OBR.17" + - expressionType: nested + vars: + obr18: OBR.18 + condition: $obr18 NOT_NULL + expressionsMap: + url: + type: STRING + value: OBR.18 + valueString: + type: STRING + valueOf: OBR.18 + expressionType: HL7Spec + - expressionType: nested + vars: + obr19: OBR.19 + condition: $obr19 NOT_NULL + expressionsMap: + url: + type: STRING + value: OBR.19 + valueString: + type: STRING + valueOf: OBR.19 + expressionType: HL7Spec + - expressionType: nested + vars: + obr20: OBR.20 + condition: $obr20 NOT_NULL + expressionsMap: + url: + type: STRING + value: OBR.20 + valueString: + type: STRING + valueOf: OBR.20 + expressionType: HL7Spec + - expressionType: nested + vars: + obr21: OBR.21 + condition: $obr21 NOT_NULL + expressionsMap: + url: + type: STRING + value: OBR.21 + valueString: + type: STRING + valueOf: OBR.21 + expressionType: HL7Spec + - expressionType: nested + vars: + obr22: OBR.22 + condition: $obr22 NOT_NULL + expressionsMap: + url: + type: STRING + value: OBR.22 + valueString: + type: STRING + expressionType: HL7Spec + valueOf: OBR.22 + - expressionType: resource + valueOf: ../../datatypes/v251/hl7/datatypes/MOC/Extension + vars: + obr23: STRING_ALL, OBR.23 + condition: $obr23 NOT_NULL + specs: OBR.23 + constants: + mocExtensionName: OBR.23 + - expressionType: nested + vars: + obr24: OBR.24 + condition: $obr24 NOT_NULL + expressionsMap: + url: + type: STRING + value: OBR.24 + valueId: + type: STRING + expressionType: HL7Spec + valueOf: OBR.24 + - expressionType: nested + vars: + obr25: OBR.25 + condition: $obr25 NOT_NULL + expressionsMap: + url: + type: STRING + value: OBR.25 + valueId: + type: STRING + expressionType: HL7Spec + valueOf: OBR.25 + - expressionType: resource + vars: + obr26: STRING_ALL, OBR.26 + condition: $obr26 NOT_NULL + valueOf: datatypes/PRL_ELR/Extension + specs: OBR.26 + constants: + prlExtensionName: OBR.26 + - expressionType: nested + vars: + obr28: STRING_ALL, OBR.28 + condition: $obr28 NOT_NULL + specs: OBR.28 * + generateList: true + expressionsMap: + url: + type: STRING + value: OBR.28 + valueReference: + expressionType: reference + valueOf: ../../datatypes/v251/hl7/datatypes/XCN/Practitioner + - expressionType: nested + vars: + obr29: STRING_ALL, OBR.29 + condition: $obr29 NOT_NULL + expressionsMap: + url: + type: STRING + value: OBR.29 + valueIdentifier: + valueOf: ../../datatypes/v251/hl7/datatypes/EIP/Identifier-PlacerAssignedIdentifier + expressionType: resource + specs: OBR.29 + constants: + backupExtension: "filler-assigned-identifier" + - expressionType: nested + vars: + obr33: STRING_ALL, OBR.33 + condition: $obr33 NOT_NULL + specs: OBR.33 * + generateList: true + expressionsMap: + url: + type: STRING + value: OBR.33 + valueReference: + valueOf: ../../datatypes/v251/hl7/datatypes/NDL/PractitionerRole + expressionType: reference + - expressionType: nested + vars: + obr36: STRING, OBR.36 + condition: $obr36 NOT_NULL + expressionsMap: + url: + type: STRING + value: OBR.36 + valueString: + type: STRING + expressionType: HL7Spec + valueOf: OBR.36 + - expressionType: nested + vars: + obr39: STRING_ALL, OBR.39 + condition: $obr39 NOT_NULL + specs: OBR.39 * + generateList: true + expressionsMap: + url: + type: STRING + value: OBR.39 + valueCodeableConcept: + valueOf: ../../datatypes/v251/hl7/datatypes/CWE/CodeableConcept + expressionType: resource + - expressionType: nested + vars: + obr44: STRING_ALL, OBR.44 + condition: $obr44 NOT_NULL + expressionsMap: + url: + type: STRING + value: OBR.44 + valueCodeableConcept: + valueOf: ../../datatypes/v251/hl7/datatypes/CNE/CodeableConcept + expressionType: resource + specs: OBR.44 + - expressionType: nested + vars: + obr45: STRING_ALL, OBR.45 + condition: $obr45 NOT_NULL + specs: OBR.45 * + generateList: true + expressionsMap: + url: + type: STRING + value: obr-45-procedure-code-modifier + valueCodeableConcept: + valueOf: ../../datatypes/v251/hl7/datatypes/CNE/CodeableConcept + expressionType: resource + - expressionType: nested + vars: + obr48: STRING_ALL, OBR.48 + condition: $obr48 NOT_NULL + expressionsMap: + url: + type: STRING + value: OBR.48 + valueCodeableConcept: + valueOf: ../../datatypes/v251/hl7/datatypes/CWE/CodeableConcept + expressionType: resource + specs: OBR.48 + - expressionType: nested + vars: + obr49: STRING_ALL, OBR.49 + condition: $obr49 NOT_NULL + expressionsMap: + url: + type: STRING + value: OBR.49 + valueString: + type: STRING + expressionType: HL7Spec + valueOf: OBR.49 + - expressionType: nested + vars: + obr50: STRING_ALL, OBR.50 + condition: $obr50 NOT_NULL + expressionsMap: + url: + type: STRING + value: OBR.50 + valueCodeableConcept: + expressionType: resource + valueOf: ../../datatypes/v251/hl7/datatypes/CWE/CodeableConcept + specs: OBR.50 \ No newline at end of file diff --git a/prime-router/metadata/HL7/v251-elr/hl7/segments/ORC/ORCExtension.yml b/prime-router/metadata/HL7/v251-elr/hl7/segments/ORC/ORCExtension.yml new file mode 100644 index 00000000000..82183edddd6 --- /dev/null +++ b/prime-router/metadata/HL7/v251-elr/hl7/segments/ORC/ORCExtension.yml @@ -0,0 +1,235 @@ +# $schema: ./../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +url: + type: SYSTEM_URL + value: orc-common-order + +extension: + generateList: true + expressionType: nested + expressions: + - expressionType: nested + vars: + orc5: STRING_ALL, ORC.5 + condition: $orc5 NOT_NULL + expressionsMap: + url: + type: STRING + value: ORC.5 + valueString: + type: STRING + valueOf: ORC.5 + expressionType: HL7Spec + - expressionType: nested + vars: + orc6: STRING_ALL, ORC.6 + condition: $orc6 NOT_NULL + expressionsMap: + url: + type: STRING + value: ORC.6 + valueString: + type: STRING + valueOf: ORC.6 + expressionType: HL7Spec + - expressionType: nested + vars: + orc8: STRING_ALL, ORC.8 + condition: $orc8 NOT_NULL + expressionsMap: + url: + type: STRING + value: ORC.8 + valueIdentifier: + valueOf: ../../datatypes/v251/hl7/datatypes/EIP/Identifier-PlacerAssignedIdentifier + expressionType: resource + specs: ORC.8 + constants: + backupExtension: "filler-assigned-identifier" + - expressionType: nested + vars: + orc10: STRING_ALL, ORC.10 + condition: $orc10 NOT_NULL + specs: ORC.10 * + generateList: true + expressionsMap: + url: + type: STRING + value: ORC.10 + valueReference: + expressionType: reference + valueOf: ../../datatypes/v251/hl7/datatypes/XCN/Practitioner + - expressionType: nested + vars: + orc11: STRING_ALL, ORC.11 + condition: $orc11 NOT_NULL + specs: ORC.11 * + generateList: true + expressionsMap: + url: + type: STRING + value: ORC.11 + valueReference: + expressionType: reference + valueOf: ../../datatypes/v251/hl7/datatypes/XCN/Practitioner + - expressionType: nested + vars: + orc12: STRING_ALL, ORC.12 + condition: $orc12 NOT_NULL + specs: ORC.12 * + generateList: true + expressionsMap: + url: + type: STRING + value: orc-12-ordering-provider + valueReference: + expressionType: reference + valueOf: ../../datatypes/v251/hl7/datatypes/XCN/Practitioner + - expressionType: nested + vars: + orc13: STRING_ALL, ORC.13 + condition: $orc13 NOT_NULL + expressionsMap: + url: + type: STRING + value: ORC.13 + valueReference: + expressionType: reference + valueOf: ../../datatypes/v251/hl7/datatypes/PL/Location + specs: ORC.13 + - expressionType: nested + condition: $orc15 NOT_NULL + vars: + orc15: STRING, ORC.15 + expressionsMap: + url: + type: STRING + value: ORC.15 + valueString: + type: STRING + valueOf: ORC.15 + expressionType: HL7Spec + - expressionType: nested + vars: + orc17: ORC.17 + condition: $orc17 NOT_NULL + expressionsMap: + url: + type: STRING + value: ORC.17 + valueCodeableConcept: + expressionType: resource + valueOf: ../../datatypes/v251/hl7/datatypes/CWE/CodeableConcept + specs: ORC.17 + - expressionType: nested + vars: + orc17: ORC.18 + condition: $orc17 NOT_NULL + expressionsMap: + url: + type: STRING + value: ORC.18 + valueCodeableConcept: + expressionType: resource + valueOf: ../../datatypes/v251/hl7/datatypes/CWE/CodeableConcept + specs: ORC.18 + - expressionType: nested + vars: + orc19: STRING_ALL, ORC.19 + condition: $orc19 NOT_NULL + specs: ORC.19 * + generateList: true + expressionsMap: + url: + type: STRING + value: ORC.19 + valueReference: + expressionType: reference + valueOf: ../../datatypes/v251/hl7/datatypes/XCN/Practitioner + - expressionType: nested + vars: + orc21: STRING_ALL, ORC.21 + condition: $orc21 NOT_NULL + specs: ORC.21 * + generateList: true + expressionsMap: + url: + type: STRING + value: orc-21-ordering-facility-name + valueReference: + expressionType: reference + valueOf: ../../datatypes/v251/hl7/datatypes/XON/Organization + - expressionType: nested + vars: + orc22: STRING_ALL, ORC.22 + condition: $orc22 NOT_NULL + specs: ORC.22 * + generateList: true + expressionsMap: + url: + type: STRING + value: orc-22-ordering-facility-address + valueAddress: + expressionType: resource + valueOf: ../../datatypes/v251/hl7/datatypes/XAD/Address + - expressionType: nested + vars: + orc24: STRING_ALL, ORC.24 + condition: $orc24 NOT_NULL + specs: ORC.24 * + generateList: true + expressionsMap: + url: + type: STRING + value: orc-24-ordering-provider-address + valueAddress: + expressionType: resource + valueOf: ../../datatypes/v251/hl7/datatypes/XAD/Address + - expressionType: nested + vars: + orc27: ORC.27 + condition: $orc27 NOT_NULL + expressionsMap: + url: + type: STRING + value: ORC.27 + valueString: + type: STRING + expressionType: HL7Spec + valueOf: ORC.27 + - expressionType: nested + vars: + orc28: ORC.28 + condition: $orc28 NOT_NULL + expressionsMap: + url: + type: STRING + value: ORC.28 + valueCodeableConcept: + expressionType: resource + valueOf: ../../datatypes/v251/hl7/datatypes/CWE/CodeableConcept + specs: ORC.28 + - expressionType: nested + vars: + orc30: STRING_ALL, ORC.30 + condition: $orc30 NOT_NULL + expressionsMap: + url: + type: STRING + value: ORC.30 + valueCodeableConcept: + expressionType: resource + valueOf: ../../datatypes/v251/hl7/datatypes/CNE/CodeableConcept + specs: ORC.30 + - expressionType: nested + vars: + orc31: STRING_ALL, ORC.31 + condition: $orc31 NOT_NULL + expressionsMap: + url: + type: STRING + value: ORC.31 + valueCodeableConcept: + valueOf: ../../datatypes/v251/hl7/datatypes/CWE/CodeableConcept + expressionType: resource + specs: ORC.31 \ No newline at end of file diff --git a/prime-router/metadata/HL7/v251-elr/hl7/segments/ORC/PractitionerRole.yml b/prime-router/metadata/HL7/v251-elr/hl7/segments/ORC/PractitionerRole.yml new file mode 100644 index 00000000000..efb00d80959 --- /dev/null +++ b/prime-router/metadata/HL7/v251-elr/hl7/segments/ORC/PractitionerRole.yml @@ -0,0 +1,40 @@ +# $schema: ./../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +resourceType: PractitionerRole + +id: + type: STRING + valueOf: "GeneralUtils.generateResourceId()" + expressionType: JEXL + + +practitioner: + expressionType: nested + vars: + orc12: STRING_ALL, ORC.12 + obr16: STRING_ALL, OBR.16 + expressions: + - expressionType: reference + condition: $orc12 NOT_NULL + valueOf: ../../datatypes/v251/hl7/datatypes/XCN/Practitioner + specs: ORC.12 + vars: + XADAddress: ORC.24 + constants: + XCNHL7Field: ORC.12 + - expressionType: reference + condition: $orc12 NULL && $obr16 NOT_NULL + valueOf: ../../datatypes/v251/hl7/datatypes/XCN/Practitioner + specs: OBR.16 + vars: + XADAddress: ORC.24 + constants: + XCNHL7Field: OBR.16 + +organization: + vars: + XADAddress: ORC.22 + XTNTelecom: ORC.23 * + expressionType: reference + valueOf: ../../datatypes/v251/hl7/datatypes/XON/Organization + specs: ORC.21 diff --git a/prime-router/metadata/HL7/v251-elr/hl7/segments/ORC/ServiceRequest.yml b/prime-router/metadata/HL7/v251-elr/hl7/segments/ORC/ServiceRequest.yml new file mode 100644 index 00000000000..0e08b9fc9e3 --- /dev/null +++ b/prime-router/metadata/HL7/v251-elr/hl7/segments/ORC/ServiceRequest.yml @@ -0,0 +1,322 @@ +# $schema: ./../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +resourceType: ServiceRequest + +# Not Implementing +# ORC.7 not mapped, deprecated in the NIST spec +# ORC.26 not mapped, deprecated in the NIST spec +# ORC.32 not mapped, deprecated in NIST spec +# ORC.34 not mapped, deprecated in NIST spec +# OBR.5 not mapped, deprecated in NIST spec +# OBR.27 not mapped, deprecated in NIST spec +# OBR.30 not mapped, deprecated in NIST spec +# OBR.37 not mapped, deprecated in NIST spec +# OBR.38 not mapped, deprecated in NIST spec +# OBR.40 not mapped, deprecated in NIST spec +# OBR.41 not mapped, deprecated in NIST spec +# OBR.42 not mapped, deprecated in NIST spec +# OBR.43 not mapped, deprecated in NIST spec +# OBR.54 not mapped, not in NIST + +id: + type: STRING + valueOf: "GeneralUtils.generateResourceId()" + expressionType: JEXL + +status: + type: SERVICE_REQUEST_STATUS + default: "unknown" + valueOf: ORC.5 | ORC.1 + expressionType: HL7Spec + +intent: + expressionType: nested + vars: + obr11: STRING, OBR.11 + expressions: + - condition: $obr11 NOT_EQUALS G || $obr11 NOT_EQUALS A + type: STRING + value: "order" + - condition: $obr11 EQUALS A + type: STRING + value: "#add-on#" + - condition: $obr11 EQUALS G + type: STRING + value: "reflex-order" + +identifier: + expressionType: nested + generateList: true + vars: + obr2: STRING_ALL, OBR.2 + orc2: STRING_ALL, ORC.2 + obr3: STRING_ALL, OBR.3 + orc3: STRING_ALL, ORC.3 + orc4: STRING_ALL, ORC.4 + orc33: STRING_ALL, ORC.33 + expressions: + - condition: $orc2 NOT_NULL + valueOf: ../../datatypes/v251/hl7/datatypes/EI/Identifier + expressionType: resource + specs: ORC.2 + constants: + code: "PLAC" + system: "http://terminology.hl7.org/CodeSystem/v2-0203" + display: "Placer Identifier" + hl7v2Field: ORC.2 + - condition: $orc2 NULL && $obr2 NOT_NULL + valueOf: ../../datatypes/v251/hl7/datatypes/EI/Identifier + expressionType: resource + specs: OBR.2 + constants: + code: "PLAC" + system: "http://terminology.hl7.org/CodeSystem/v2-0203" + display: "Placer Identifier" + hl7v2Field: OBR.2 + - condition: $orc3 NOT_NULL + valueOf: ../../datatypes/v251/hl7/datatypes/EI/Identifier + expressionType: resource + specs: ORC.3 + constants: + system: "http://terminology.hl7.org/CodeSystem/v2-0203" + code: "FILL" + display: "Filler Identifier" + hl7v2Field: ORC.3 + - condition: $orc3 NULL && $obr3 NOT_NULL + valueOf: ../../datatypes/v251/hl7/datatypes/EI/Identifier + expressionType: resource + specs: OBR.3 + constants: + system: "http://terminology.hl7.org/CodeSystem/v2-0203" + code: "FILL" + display: "Filler Identifier" + hl7v2Field: OBR.3 + - condition: $orc4 NOT_NULL + valueOf: ../../datatypes/v251/hl7/datatypes/EI/Identifier + expressionType: resource + specs: ORC.4 + constants: + system: "http://terminology.hl7.org/CodeSystem/v2-0203" + code: "PGN" + hl7v2Field: ORC.4 + - condition: $orc4 NOT_NULL + valueOf: ../../datatypes/v251/hl7/datatypes/EI/Identifier + expressionType: resource + specs: ORC.4 + constants: + system: "http://terminology.hl7.org/CodeSystem/v2-0203" + code: "FGN" + hl7v2Field: ORC.4 + - condition: $orc33 NOT_NULL + valueOf: ../../datatypes/v251/hl7/datatypes/CX/Identifier + expressionType: resource + specs: ORC.33 * + generateList: true + constants: + system: "http://terminology.hl7.org/CodeSystem/v2-0203" + code: "PLAC" + CXIdentifierField: ORC.33 + +code: + valueOf: datatypes/CWE_ELR/CodeableConcept + expressionType: resource + specs: OBR.4 + +authoredOn: + condition: $orderControl EQUALS NW + type: STRING + valueOf: "GeneralUtils.dateTimeWithZoneId(dateTimeIn,ZONEID)" + expressionType: JEXL + vars: + dateTimeIn: ORC.9 + orderControl: String, ORC.1 +_authoredOn: + expressionType: nested + condition: $orderControl EQUALS NW && $dateTimeIn NOT_NULL + vars: + dateTimeIn: ORC.9 + orderControl: String, ORC.1 + expressionsMap: + extension_1: + generateList: true + expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: hl7v2-date-time + valueString: + type: STRING + valueOf: $dateTimeIn + expressionType: HL7Spec + +requester: + expressionType: nested + vars: + orc12: STRING_ALL, ORC.12 + obr16: STRING_ALL, OBR.16 + orc14: STRING_ALL, ORC.14 + obr17: STRING_ALL, OBR.17 + orc21: STRING_ALL, ORC.21 + orc22: STRING_ALL, ORC.22 + orc23: STRING_ALL, ORC.23 + orc24: STRING_ALL, ORC.24 + expressions: + - condition: $orc21 NOT_NULL || $orc22 NOT_NULL || $orc23 NOT_NULL + expressionType: reference + valueOf: segments/ORC/PractitionerRole + - condition: $orc21 NULL && $orc22 NULL && $orc23 NULL + expressionType: nested + expressions: + - expressionType: reference + condition: $orc12 NOT_NULL + valueOf: ../../datatypes/v251/hl7/datatypes/XCN/Practitioner + specs: ORC.12 + vars: + XADAddress: ORC.24 + constants: + XCNHL7Field: ORC.12 + - expressionType: reference + condition: $orc12 NULL && $obr16 NOT_NULL + valueOf: ../../datatypes/v251/hl7/datatypes/XCN/Practitioner + specs: OBR.16 + vars: + XADAddress: ORC.24 + constants: + XCNHL7Field: OBR.16 + +_requester: + vars: + orc14: STRING_ALL, ORC.14 + obr17: STRING_ALL, OBR.17 + expressionType: nested + expressions: + - condition: $orc14 NOT_NULL + expressionType: nested + expressionsMap: + extension: + generateList: true + specs: ORC.14 * + expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: callback-number + valueContactPoint: + valueOf: ../../datatypes/v251/hl7/datatypes/XTN/ContactPoint + expressionType: resource + constants: + hl7v2Field: ORC.14 + - condition: $orc14 NULL && $obr17 NOT_NULL + expressionType: nested + expressionsMap: + extension: + generateList: true + specs: OBR.17 * + expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: callback-number + valueContactPoint: + valueOf: ../../datatypes/v251/hl7/datatypes/XTN/ContactPoint + expressionType: resource + constants: + hl7v2Field: OBR.17 + +locationCode: + vars: + orc29: STRING_ALL, ORC.29 + condition: $orc29 NOT_NULL + expressionType: resource + valueOf: ../../datatypes/v251/hl7/datatypes/CWE/CodeableConcept + specs: ORC.29 + +reasonCode: + vars: + obr31: STRING_ALL, OBR.31 + condition: $obr31 NOT_NULL + valueOf: datatypes/CWE_ELR/CodeableConcept + generateList: true + expressionType: resource + specs: OBR.31 + +orderDetail: + generateList: true + expressionType: nested + expressions: + - expressionType: resource + vars: + obr46: STRING_ALL, OBR.46 + condition: $obr46 NOT_NULL + valueOf: ../../datatypes/v251/hl7/datatypes/CWE/CodeableConcept + specs: OBR.46 * + generateList: true + constants: + hl7v2Field: OBR.46 + - expressionType: resource + vars: + obr47: STRING_ALL, OBR.47 + condition: $obr47 NOT_NULL + valueOf: ../../datatypes/v251/hl7/datatypes/CWE/CodeableConcept + specs: OBR.47 * + generateList: true + constants: + hl7v2Field: OBR.47 + +extension: + expressionType: nested + generateList: true + expressions: + - expressionType: nested + vars: + orc1: STRING, ORC.1 + condition: $orc1 NOT_NULL + expressionsMap: + url: + type: SYSTEM_URL + value: business-event + valueCode: + type: STRING + expressionType: HL7Spec + valueOf: ORC.1 + - expressionType: nested + vars: + orc9: STRING, ORC.9 + condition: $orc9 NOT_NULL && $orc9 NOT_EQUALS NW + expressionsMap: + url: + type: SYSTEM_URL + value: business-event + valueString: + type: STRING + expressionType: HL7Spec + valueOf: ORC.9 + - expressionType: nested + vars: + orc25: ORC.25 + condition: $orc25 NOT_NULL + expressionsMap: + url: + type: SYSTEM_URL + value: status-modifier + valueCodeableConcept: + expressionType: resource + valueOf: ../../datatypes/v251/hl7/datatypes/CWE/CodeableConcept + specs: ORC.25 + # ORC data + - expressionType: resource + valueOf: segments/ORC/ORCExtension + # OBR Data + - expressionType: resource + valueOf: segments/ORC/OBRExtension + +subject: + valueOf: datatype/Reference + expressionType: resource + specs: $Patient + +note: + valueOf: segments/NTE/Annotation + expressionType: resource + generateList: true + specs: NTE diff --git a/prime-router/metadata/HL7/v251-elr/hl7/segments/ORC/Specimen.yml b/prime-router/metadata/HL7/v251-elr/hl7/segments/ORC/Specimen.yml new file mode 100644 index 00000000000..5a7d46505ba --- /dev/null +++ b/prime-router/metadata/HL7/v251-elr/hl7/segments/ORC/Specimen.yml @@ -0,0 +1,62 @@ +# $schema: ./../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +resourceType: Specimen +id: + type: STRING + valueOf: "GeneralUtils.generateResourceId()" + expressionType: JEXL + +collection: + condition: $spm7 NOT_NULL + expressionType: nested + generateList: true + expressionsMap: + collectedPeriod: + condition: $end NOT_NULL + expressionType: nested + vars: + start: OBR.7 + end: OBR.8 + dateTimeIn: OBR.7 + dateTimeOut: OBR.8 + expressions: + - valueOf: ../../datatypes/v251/hl7/datatypes/DR/Period + expressionType: resource + collectedDateTime: + expressionType: nested + vars: + dateTimeIn: OBR.7 + end: OBR.8 + expressions: + - condition: $end NULL + type: STRING + valueOf: "GeneralUtils.dateTimeWithZoneId(dateTimeIn,ZONEID)" + expressionType: JEXL + collector: + condition: $obr10 NOT_NULL + vars: + obr10: OBR.10 + expressionType: reference + valueOf: ../../datatypes/v251/hl7/datatypes/XCN/Practitioner + specs: OBR.10 + +note_collectors-comment: + condition: $obr39 NOT_NULL + generateList: true + vars: + obr39: STRING_ALL, OBR.39 + specs: OBR.39 * + valueOf: ../../datatypes/v251/hl7/datatypes/CWE/Annotation + expressionType: resource + +extension: + expressionType: nested + generateList: true + expressions: + - expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + valueOf: hl7v2Segment + valueString: + valueOf: 'OBR' \ No newline at end of file diff --git a/prime-router/metadata/HL7/v251-elr/hl7/segments/PID/PD1Extension.yml b/prime-router/metadata/HL7/v251-elr/hl7/segments/PID/PD1Extension.yml new file mode 100644 index 00000000000..308be65fdd4 --- /dev/null +++ b/prime-router/metadata/HL7/v251-elr/hl7/segments/PID/PD1Extension.yml @@ -0,0 +1,215 @@ +# $schema: ./../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +url: + type: SYSTEM_URL + value: pd1-patient-additional-demographic + +extension: + expressionType: nested + generateList: true + expressions: + - expressionType: nested + specs: PD1.1 * + condition: $pd11 NOT_NULL + generateList: true + vars: + pd11: STRING_ALL, PD1.1 + expressionsMap: + url: + type: STRING + value: PD1.1 + valueString: + type: STRING + valueOf: PD1.1 + expressionType: HL7Spec + - expressionType: nested + condition: $pd12 NOT_NULL + specs: PD1.2 + vars: + pd12: STRING_ALL, PD1.2 + expressionsMap: + url: + type: STRING + value: PD1.2 + valueString: + type: STRING + valueOf: PD1.2 + expressionType: HL7Spec + - expressionType: nested + condition: $pd18 NOT_NULL + specs: PD1.8 + vars: + pd18: STRING_ALL, PD1.8 + expressionsMap: + url: + type: STRING + value: PD1.8 + valueString: + type: STRING + valueOf: PD1.8 + expressionType: HL7Spec + - expressionType: nested + condition: $pd19 NOT_NULL + vars: + pd19: STRING_ALL, PD1.9 + expressionsMap: + url: + type: STRING + value: PD1.9 + valueString: + type: STRING + valueOf: PD1.9 + expressionType: HL7Spec + - expressionType: nested + specs: PD1.10 * + condition: $pd110 NOT_NULL + generateList: true + vars: + pd110: STRING_ALL, PD1.10 + expressionsMap: + url: + type: STRING + value: PD1.10 + valueIdentifier: + valueOf: ../../datatypes/v251/hl7/datatypes/CX/Identifier + expressionType: resource + constants: + CXIdentifierField: PD1.10 + - expressionType: nested + condition: $pd111 NOT_NULL + specs: PD1.11 + vars: + pd111: STRING_ALL, PD1.11 + expressionsMap: + url: + type: STRING + value: PD1.11 + valueCodeableConcept: + valueOf: ../../datatypes/v251/hl7/datatypes/CE/CodeableConcept + expressionType: resource + - expressionType: nested + condition: $pd112 NOT_NULL + vars: + pd112: STRING_ALL, PD1.12 + expressionsMap: + url: + type: STRING + value: PD1.12 + valueString: + type: STRING + valueOf: PD1.12 + expressionType: HL7Spec + - expressionType: nested + condition: $pd113 NOT_NULL + vars: + pd113: STRING_ALL, PD1.13 + expressionsMap: + url: + type: STRING + value: PD1.13 + valueString: + type: STRING + valueOf: PD1.13 + expressionType: HL7Spec + - expressionType: nested + vars: + pd114: STRING_ALL, PD1.14 + condition: $pd114 NOT_NULL + specs: PD1.14 * + generateList: true + expressionsMap: + url: + type: STRING + value: PD1.14 + valueReference: + valueOf: ../../datatypes/v251/hl7/datatypes/XON/Organization + expressionType: reference + - expressionType: nested + specs: PD1.15 * + condition: $pd115 NOT_NULL + generateList: true + vars: + pd115: STRING_ALL, PD1.15 + expressionsMap: + url: + type: STRING + value: PD1.15 + valueCodeableConcept: + valueOf: ../../datatypes/v251/hl7/datatypes/CE/CodeableConcept + expressionType: resource + - expressionType: nested + condition: $pd116 NOT_NULL + specs: PD1.16 + vars: + pd116: STRING_ALL, PD1.16 + expressionsMap: + url: + type: STRING + value: PD1.16 + valueString: + type: STRING + valueOf: PD1.16 + expressionType: HL7Spec + - expressionType: nested + condition: $pd117 NOT_NULL + vars: + pd117: STRING_ALL, PD1.17 + expressionsMap: + url: + type: STRING + value: PD1.17 + valueString: + type: STRING + valueOf: PD1.17 + expressionType: HL7Spec + - expressionType: nested + condition: $pd118 NOT_NULL + vars: + pd118: STRING_ALL, PD1.18 + expressionsMap: + url: + type: STRING + value: PD1.18 + valueString: + type: STRING + valueOf: PD1.18 + expressionType: HL7Spec + - expressionType: nested + condition: $pd119 NOT_NULL + specs: PD1.19 + vars: + pd119: STRING_ALL, PD1.19 + expressionsMap: + url: + type: STRING + value: PD1.19 + valueString: + type: STRING + valueOf: PD1.19 + expressionType: HL7Spec + - expressionType: nested + condition: $pd120 NOT_NULL + specs: PD1.20 + vars: + pd120: STRING_ALL, PD1.20 + expressionsMap: + url: + type: STRING + value: PD1.20 + valueString: + type: STRING + valueOf: PD1.20 + expressionType: HL7Spec + - expressionType: nested + condition: $pd121 NOT_NULL + specs: PD1.21 + vars: + pd121: STRING_ALL, PD1.21 + expressionsMap: + url: + type: STRING + value: PD1.21 + valueString: + type: STRING + valueOf: PD1.21 + expressionType: HL7Spec \ No newline at end of file diff --git a/prime-router/metadata/HL7/v251-elr/hl7/segments/PID/PIDExtension.yml b/prime-router/metadata/HL7/v251-elr/hl7/segments/PID/PIDExtension.yml new file mode 100644 index 00000000000..27e2a0a2f77 --- /dev/null +++ b/prime-router/metadata/HL7/v251-elr/hl7/segments/PID/PIDExtension.yml @@ -0,0 +1,87 @@ +# $schema: ./../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +url: + type: SYSTEM_URL + value: pid-patient + +extension: + expressionType: nested + generateList: true + expressions: + - expressionType: nested + condition: $pid8 NOT_NULL + vars: + pid8: STRING_ALL, PID.8 + expressionsMap: + url: + type: STRING + value: PID.8 + valueString: + type: STRING + valueOf: PID.8 + expressionType: HL7Spec + - expressionType: nested + specs: PID.18 + condition: $pid18 NOT_NULL + generateList: true + vars: + pid18: STRING_ALL, PID.18 + expressionsMap: + url: + type: STRING + value: PID.18 + valueIdentifier: + valueOf: ../../datatypes/v251/hl7/datatypes/CX/Identifier + expressionType: resource + constants: + CXIdentifierField: PID.18 + - expressionType: nested + condition: $pid24 NOT_NULL + vars: + pid24: STRING_ALL, PID.24 + expressionsMap: + url: + type: STRING + value: PID.24 + valueString: + type: STRING + valueOf: PID.24 + expressionType: HL7Spec + - expressionType: nested + condition: $pid30 NOT_NULL + vars: + pid30: STRING_ALL, PID.30 + expressionsMap: + url: + type: STRING + value: PID.30 + valueString: + type: STRING + valueOf: PID.30 + expressionType: HL7Spec + - expressionType: nested + specs: PID.32 * + generateList: true + condition: $pid32 NOT_NULL + vars: + pid32: STRING_ALL, PID.32 + expressionsMap: + url: + type: STRING + value: PID.32 + valueString: + type: STRING + valueOf: PID.32 + expressionType: HL7Spec + - expressionType: nested + specs: PID.38 * + condition: $pid38 NOT_NULL + vars: + pid38: STRING_ALL, PID.38 + expressionsMap: + url: + type: STRING + value: PID.38 + valueCodeableConcept: + valueOf: ../../datatypes/v251/hl7/datatypes/CWE/CodeableConcept + expressionType: resource \ No newline at end of file diff --git a/prime-router/metadata/HL7/v251-elr/hl7/segments/PID/Patient.yml b/prime-router/metadata/HL7/v251-elr/hl7/segments/PID/Patient.yml new file mode 100644 index 00000000000..7ff487fc5ff --- /dev/null +++ b/prime-router/metadata/HL7/v251-elr/hl7/segments/PID/Patient.yml @@ -0,0 +1,577 @@ +# $schema: ./../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +resourceType: Patient + +# - PID.2 is deprecated in the HL7v2.7 and NIST HL7v2.5.1 specs. Further, the HAPI v2.7 model has set both fields to +# NULLDT. Thus, this field is not being mapped. +# - PID.4 is deprecated in the HL7v2.7 and NIST HL7v2.5.1 specs. Further, the HAPI v2.7 model has set both fields to +# NULLDT. Thus, this field is not being mapped. +# - PID.6: The inventory maps the value to a `valueString` extention but `valueHumanName` is available and fully captures +# the values, so it is being used over `valueString` +# - PID.12 is deprecated in the HL7v2.7 and NIST HL7v2.5.1 specs. Further, the HAPI v2.7 model has set both +# fields to NULLDT. Thus, this field is not being mapped. +# - PID.15 allows repeats in the NIST HL7v2.5.1 specs, however the HAPI models for v2.5.1 and v2.7 do not support +# repetitions in those fields. Thus, any repetitions of the field will be ignored. +# - PID.19 and PID.20 are deprecated in the HL7v2.7 and NIST HL7v2.5.1 specs. Further, the HAPI v2.7 model has set both +# fields to NULLDT. Thus, this field is not being mapped. +# - PID.21: The inventory does not include a FHIR field on patient that this should be mapped to. We have decided to map +# to Patient.link which includes a reference to RelatedPerson + + +# - PD1.4 Deprecated in NIST, set to NullDT in HAPI. Field not mapped + +id: + type: STRING + valueOf: "GeneralUtils.generateResourceId()" + expressionType: JEXL + +contact: + vars: + nk1: NK1 + condition: $nk1 NOT_NULL + expressionType: nested + generateList: true + expressionsMap: + name: + expressionType: resource + generateList: true + specs: NK1.2 * + valueOf: datatypes/XPN_ELR/HumanName + extension: + generateList: true + expressionType: nested + specs: NK1.3 + expressionsMap: + url: + type: SYSTEM_URL + value: relationship + valueCodeableConcept: + valueOf: datatypes/CWE_ELR/CodeableConcept + expressionType: resource + address: + condition: $nk14 NOT_NULL + valueOf: ../../datatypes/v251/hl7/datatypes/XAD/Address + generateList: true + expressionType: resource + specs: NK1.4 * + vars: + nk14: STRING_ALL, NK1.4 + telecom: + expressionType: nested + generateList: true + expressions: + - condition: $nk15 NOT_NULL + valueOf: ../../datatypes/v251/hl7/datatypes/XTN/ContactPoint + generateList: true + expressionType: resource + specs: NK1.5 * + vars: + nk15: STRING_ALL, NK1.5 + organization: + condition: $XONOrganization NOT_NULL || $XPNContactName NOT_NULL || $XPNContactTelecom NOT_NULL || $XADContactAddress NOT_NULL + expressionType: reference + valueOf: ../../datatypes/v251/hl7/datatypes/XON/Organization + specs: NK1.13 + vars: + XONOrganization: NK1.13 + XPNContactName: NK1.30 + XPNContactTelecom: NK1.31 + XADContactAddress: NK1.32 + + +identifier: + expressionType: nested + generateList: true + expressions: + - condition: $pid3 NOT_NULL + expressionType: resource + specs: PID.3 * + valueOf: ../../datatypes/v251/hl7/datatypes/CX/Identifier + generateList: true + vars: + pid3: STRING_ALL, PID.3 + constants: + CXIdentifierField: PID.3 + +name: + expressionType: nested + generateList: true + expressions: + - condition: $pid5 NOT_NULL + expressionType: resource + generateList: true + specs: PID.5 * + valueOf: datatypes/XPN_ELR/HumanName + vars: + pid5: STRING_ALL, PID.5 + constants: + hl7Use: patient-name + +birthDate: + type: DATE + valueOf: PID.7 + expressionType: HL7Spec + +_birthDate: + condition: $pid7 NOT_NULL + vars: + pid7: PID.7 + dateTimeIn: PID.7, GeneralUtils.dateTimeWithZoneId(dateTimeIn,ZONEID) + isTime: PID.7, GeneralUtils.dateTimeWithZoneId(isTime,ZONEID).length() > 10 + expressionType: nested + expressionsMap: + # this extension is needed to comply with the official HL7v2-to-FHIR mapping + extension_1: + condition: $dateTimeIn NOT_NULL && $isTime EQUALS "true" + generateList: true + expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: birthTime + valueDateTime: + valueOf: $dateTimeIn + expressionType: HL7Spec + # this extension is needed to reliably translate back to HL7 from FHIR + extension_2: + generateList: true + expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: hl7v2-date-time + valueString: + type: STRING + valueOf: $pid7 + expressionType: HL7Spec + +gender: + type: ADMINISTRATIVE_GENDER + valueOf: PID.8 + expressionType: HL7Spec + +address: + condition: $pid11 NOT_NULL + valueOf: ../../datatypes/v251/hl7/datatypes/XAD/Address + generateList: true + expressionType: resource + specs: PID.11 * + vars: + pid11: STRING_ALL, PID.11 + +telecom: + expressionType: nested + generateList: true + expressions: + - condition: $pid13 NOT_NULL + valueOf: ../../datatypes/v251/hl7/datatypes/XTN/ContactPoint + generateList: true + expressionType: resource + specs: PID.13 * + vars: + pid13: STRING_ALL, PID.13 + constants: + useCode: home + - condition: $pid14 NOT_NULL + valueOf: ../../datatypes/v251/hl7/datatypes/XTN/ContactPoint + generateList: true + expressionType: resource + specs: PID.14 * + vars: + pid14: STRING_ALL, PID.14 + constants: + useCode: work + +communication: + expressionType: nested + condition: $pid15 NOT_NULL + vars: + pid15: STRING_ALL, PID.15 + expressionsMap: + language: + valueOf: ../../datatypes/v251/hl7/datatypes/CWE/CodeableConcept + expressionType: resource + specs: PID.15 + +maritalStatus: + condition: $pid16 NOT_NULL + vars: + pid16: STRING_ALL, PID.16 + valueOf: ../../datatypes/v251/hl7/datatypes/CWE/CodeableConcept + expressionType: resource + specs: PID.16 + +link: + condition: $pid21 NOT_NULL + expressionType: nested + vars: + pid21: STRING_ALL, PID.21 + specs: PID.21 * + generateList: true + expressionsMap: + other: + valueOf: ../../datatypes/v251/hl7/datatypes/CX/RelatedPerson-mother + expressionType: reference + type: + type: STRING + valueOf: "seealso" + +multipleBirthBoolean: + condition: $multipleBirthIndicator NOT_NULL && $birthOrder NULL + type: BOOLEAN + valueOf: PID.24 + expressionType: HL7Spec + vars: + multipleBirthIndicator: PID.24 + birthOrder: PID.25 + +multipleBirthInteger: + condition: $birthOrder NOT_NULL + type: INTEGER + valueOf: PID.25 + expressionType: HL7Spec + vars: + birthOrder: PID.25 + +deceasedBoolean: + condition: $deceasedBool NOT_NULL && $deceasedDateTime NULL + type: BOOLEAN + valueOf: PID.30 + expressionType: HL7Spec + vars: + deceasedBool: PID.30 + deceasedDateTime: PID.29 + +deceasedDateTime: + condition: $dateTimeIn NOT_NULL + type: STRING + valueOf: "GeneralUtils.dateTimeWithZoneId(dateTimeIn,ZONEID)" + expressionType: JEXL + vars: + dateTimeIn: PID.29 + +_deceasedDateTime: + expressionType: nested + condition: $pid29 NOT_NULL + vars: + pid29: STRING, PID.29 + expressionsMap: + extension: + generateList: true + expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: hl7v2-date-time + valueString: + type: STRING + valueOf: PID.29 + expressionType: HL7Spec + +meta: + expressionType: nested + generateList: true + expressionsMap: + lastUpdated: + type: STRING + valueOf: "GeneralUtils.dateTimeWithZoneId(dateTimeIn,ZONEID)" + expressionType: JEXL + vars: + dateTimeIn: PID.33 + _lastUpdated: + expressionType: nested + condition: $pid33 NOT_NULL + vars: + pid33: STRING, PID.33 + expressionsMap: + extension: + generateList: true + expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: hl7v2-date-time + valueString: + type: STRING + valueOf: PID.33 + expressionType: HL7Spec + extension: + generateList: true + condition: $pid34 NOT_NULL + vars: + pid34: STRING_ALL, PID.34 + expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: last-updated-facility-namespace-id + valueReference: + valueOf: ../../datatypes/v251/hl7/datatypes/HD/Organization + expressionType: reference + specs: PID.34 + +generalPractitioner_Organization: + condition: $pd13 NOT_NULL + generateList: true + specs: PD1.3 * + vars: + pd13: STRING_ALL, PD1.3 + valueOf: ../../datatypes/v251/hl7/datatypes/XON/Organization + expressionType: reference + +extension: + expressionType: nested + generateList: true + useGroup: true + expressions: + - expressionType: nested + generateList: true + specs: NTE + expressionsMap: + url: + type: SYSTEM_URL + value: patient-notes + valueAnnotation: + valueOf: segments/NTE/Annotation + expressionType: resource + - expressionType: resource + valueOf: segments/PID/PIDExtension + - expressionType: resource + valueOf: segments/PID/PD1Extension + - expressionType: nested + generateList: true + condition: $pid6 NOT_NULL + vars: + pid6: STRING_ALL, PID.6 * + specs: PID.6 * + expressionsMap: + url: + type: SYSTEM_URL + value: mothersMaidenName + valueHumanName: + valueOf: datatypes/XPN_ELR/HumanName + expressionType: resource + - condition: $pid10 NOT_NULL + expressionType: nested + specs: PID.10 * + generateList: true + vars: + pid10: STRING_ALL, PID.10 + expressionsMap: + url: + type: SYSTEM_URL + value: race + valueCodeableConcept: + valueOf: datatypes/CWE_ELR/CodeableConcept + expressionType: resource + specs: CWE + - condition: $pid17 NOT_NULL + expressionType: nested + generateList: true + vars: + pid17: STRING_ALL, PID.17 + expressionsMap: + url: + type: SYSTEM_URL + value: religion + valueCodeableConcept: + valueOf: ../../datatypes/v251/hl7/datatypes/CWE/CodeableConcept + expressionType: resource + specs: PID.17 + - condition: $pid22 NOT_NULL + expressionType: nested + generateList: true + vars: + pid22: STRING_ALL, PID.22 + specs: PID.22 * + expressionsMap: + url: + type: SYSTEM_URL + value: ethnic-group + valueCodeableConcept: + valueOf: datatypes/CWE_ELR/CodeableConcept + expressionType: resource + - condition: $pid23 NOT_NULL + expressionType: nested + generateList: true + vars: + pid23: STRING_ALL, PID.23 + expressionsMap: + url: + type: SYSTEM_URL + value: birthPlace + valueAddress: + expressionType: nested + generateList: true + expressionsMap: + text: + valueOf: PID.23 + type: STRING + expressionType: HL7Spec + - expressionType: nested + condition: $pid26 NOT_NULL + generateList: true + vars: + pid26: STRING_ALL, PID.26 + constants: + hl7v2Field: PID.26 + expressionsMap: + url: + type: SYSTEM_URL + value: patient-citizenship + extension: + generateList: true + expressionType: nested + specs: PID.26 * + expressionsMap: + url: + type: SYSTEM_URL + value: code + valueCodeableConcept: + valueOf: ../../datatypes/v251/hl7/datatypes/CWE/CodeableConcept + expressionType: resource + - expressionType: nested + condition: $pid39 NOT_NULL + generateList: true + vars: + pid39: STRING_ALL, PID.39 + constants: + hl7v2Field: PID.39 + expressionsMap: + url: + type: SYSTEM_URL + value: patient-citizenship + extension: + generateList: true + expressionType: nested + specs: PID.39 * + expressionsMap: + url: + type: SYSTEM_URL + value: code + valueCodeableConcept: + valueOf: ../../datatypes/v251/hl7/datatypes/CWE/CodeableConcept + expressionType: resource + - condition: $pid27 NOT_NULL + vars: + pid27: STRING_ALL, PID.27 + expressionType: nested + generateList: true + expressionsMap: + url: + type: SYSTEM_URL + value: veteran-military-status + valueCodeableConcept: + valueOf: ../../datatypes/v251/hl7/datatypes/CWE/CodeableConcept + expressionType: resource + specs: PID.27 + - condition: $pid31 NOT_NULL + vars: + pid31: STRING_ALL, PID.31 + expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: identity-unknown + valueString: + type: STRING + valueOf: PID.31 + expressionType: HL7Spec + - condition: $pid35 NOT_NULL || $pid36 NOT_NULL || $pid37 NOT_NULL + vars: + pid35: STRING_ALL, PID.35 + pid36: STRING_ALL, PID.36 + pid37: STRING, PID.37 + expressionType: nested + generateList: true + constants: + hl7v2Field: PID.35 + expressionsMap: + url: + type: SYSTEM_URL + value: patient-animal + extension: + generateList: true + expressionType: nested + expressions: + - condition: $pid35 NOT_NULL + expressionType: nested + expressionsMap: + url: + type: STRING + value: species + valueCodeableConcept: + valueOf: datatypes/CWE_ELR/CodeableConcept + expressionType: resource + specs: PID.35 + - condition: $pid36 NOT_NULL + expressionType: nested + expressionsMap: + url: + type: STRING + value: breed + valueCodeableConcept: + valueOf: ../../datatypes/v251/hl7/datatypes/CWE/CodeableConcept + expressionType: resource + specs: PID.36 + - condition: $pid37 NOT_NULL + expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: strain + valueString: + type: STRING + valueOf: PID.37 + expressionType: HL7Spec + - condition: $pd15 NOT_NULL + vars: + pd15: STRING_ALL, PD1.5 + expressionType: nested + generateList: true + expressionsMap: + url: + type: SYSTEM_URL + value: studentStatus + valueString: + type: STRING + valueOf: PD1.5 + expressionType: HL7Spec + - condition: $pd16 NOT_NULL + vars: + pd16: STRING_ALL, PD1.6 + expressionType: nested + generateList: true + expressionsMap: + url: + type: SYSTEM_URL + value: patient-disability + valueString: + type: STRING + valueOf: PD1.6 + expressionType: HL7Spec + - condition: $pd17 NOT_NULL + vars: + pd17: STRING_ALL, PD1.7 + expressionType: nested + generateList: true + expressionsMap: + url: + type: SYSTEM_URL + value: livingWill + valueString: + type: STRING + valueOf: PD1.7 + expressionType: HL7Spec + #Mapping inventory for XON[string] + - expressionType: nested + generateList: true + specs: PD1.14 * + expressionsMap: + url: + type: SYSTEM_URL + value: patient-congregation + valueString: + type: STRING + valueOf: XON.1 |XON.10 + expressionType: HL7Spec \ No newline at end of file diff --git a/prime-router/metadata/HL7/v251-elr/hl7/segments/PID/Provenance-Patient.yml b/prime-router/metadata/HL7/v251-elr/hl7/segments/PID/Provenance-Patient.yml new file mode 100644 index 00000000000..0d87d0aa307 --- /dev/null +++ b/prime-router/metadata/HL7/v251-elr/hl7/segments/PID/Provenance-Patient.yml @@ -0,0 +1,63 @@ +# $schema: ./../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +resourceType: Provenance +id: + type: STRING + valueOf: "GeneralUtils.generateResourceId()" + expressionType: JEXL + +target: + valueOf: datatype/Reference + generateList: true + expressionType: resource + specs: $Patient + useGroup: true + +recorded: + type: STRING + valueOf: "GeneralUtils.getCurrentDateTimeUsingZoneId(ZONEID)" + expressionType: JEXL + +activity: + expressionType: nested + expressionsMap: + coding: + expressionType: nested + expressionsMap: + code: + type: STRING + valueOf: "UPDATE" + system: + type: STRING + valueOf: "https://terminology.hl7.org/CodeSystem/v3-DataOperation" + +occurredDateTime: + type: STRING + valueOf: "GeneralUtils.dateTimeWithZoneId(dateTimeIn,ZONEID)" + expressionType: JEXL + vars: + dateTimeIn: PID.33 + +agent: + expressionType: nested + generateList: true + vars: + msh34: STRING_ALL, PID.34 + condition: $msh34 NOT_NULL + expressionsMap: + type: + expressionType: nested + expressionsMap: + coding: + expressionType: nested + expressionsMap: + code: + type: STRING + valueOf: "performer" + system: + type: SYSTEM_URL + valueOf: "http://terminology.hl7.org/CodeSystem/provenance-participant-type" + who: + valueOf: ../../datatypes/v251/hl7/datatypes/HD/Organization + expressionType: reference + specs: PID.34 diff --git a/prime-router/metadata/HL7/v251-elr/hl7/segments/PV1/Encounter.yml b/prime-router/metadata/HL7/v251-elr/hl7/segments/PV1/Encounter.yml new file mode 100644 index 00000000000..3dd7c170849 --- /dev/null +++ b/prime-router/metadata/HL7/v251-elr/hl7/segments/PV1/Encounter.yml @@ -0,0 +1,509 @@ +# $schema: ./../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +resourceType: Encounter + +# Not mapped because fields are deprecated in NIST and not in the mapping inventory +# PV1.15 +# PV1.21-29 +# PV1.40 +# PV2.2 +# PV2.4-6 +# PV2.14 +# PV2.16-20 +# PV2.24 +# PV2.27 +# PV2.28 +# PV2.30 - 37 +# PV2.39 +# PV2.41-49 +# PV1.20 is not mapped because there is no mapping for the FC datatype + +id: + type: STRING + valueOf: "GeneralUtils.generateResourceId()" + expressionType: JEXL + + +class: + type: ACT_ENCOUNTER + specs: PV1.2 + expressionType: HL7Spec + +status: + vars: + pv145: STRING, PV1.45 + expressionType: nested + expressions: + - condition: $pv145 NOT_NULL + type: STRING + value: "finished" + - condition: $pv145 NULL + type: ENCOUNTER_STATUS_CODE_FHIR + expressionType: HL7Spec + specs: PV1.2 + +_class: + vars: + pv12: STRING_ALL, PV1.2 + condition: $pv12 NOT_NULL + expressionType: nested + expressionsMap: + extension: + expressionType: nested + generateList: true + expressionsMap: + url: + type: SYSTEM_URL + value: pv1-2-patient-class + valueString: + type: STRING + expressionType: HL7Spec + valueOf: PV1.2 + +location: + generateList: true + expressionType: nested + expressions: + - expressionType: nested + vars: + pv13: String_ALL, PV1.3 + condition: $pv13 NOT_NULL + expressionsMap: + location: + valueOf: ../../datatypes/v251/hl7/datatypes/PL/Location + expressionType: reference + specs: PV1.3 + status: + expressionType: nested + vars: + pv121: STRING, PV1.2.1 + expressions: + - condition: $pv121 EQUALS P + type: STRING + value: planned + - condition: $pv121 NOT_EQUALS P || $pv121 NULL + type: STRING + value: active + extension: + generateList: true + expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: hl7v2Field + valueString: + type: STRING + value: PV1.3 + - expressionType: nested + vars: + pv16: STRING_ALL, PV1.6 + condition: $pv16 NOT_NULL + expressionsMap: + location: + expressionType: reference + valueOf: ../../datatypes/v251/hl7/datatypes/PL/Location + specs: PV1.6 + status: + type: STRING + value: completed + extension: + generateList: true + expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: hl7v2Field + valueString: + type: STRING + value: PV1.6 + - expressionType: nested + vars: + pv111: STRING_ALL, PV1.11 + condition: $pv111 NOT_NULL + expressionsMap: + location: + expressionType: reference + valueOf: ../../datatypes/v251/hl7/datatypes/PL/Location + specs: PV1.11 + status: + type: STRING + value: "active" + extension: + expressionType: nested + generateList: true + expressions: + - expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: hl7v2Field + valueString: + type: STRING + value: PV1.11 + - expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: temporary-location + valueBoolean: + type: STRING + value: "true" + - expressionType: nested + vars: + pv142: STRING_ALL, PV1.42 + condition: $pv142 NOT_NULL + expressionsMap: + location: + expressionType: reference + valueOf: ../../datatypes/v251/hl7/datatypes/PL/Location + specs: PV1.42 + status: + type: STRING + value: "planned" + extension: + expressionType: nested + generateList: true + expressions: + - expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: hl7v2Field + valueString: + type: STRING + value: PV1.42 + - expressionType: nested + vars: + pv143: STRING_ALL, PV1.43 + condition: $pv143 NOT_NULL + expressionsMap: + location: + expressionType: reference + valueOf: ../../datatypes/v251/hl7/datatypes/PL/Location + specs: PV1.43 + status: + type: STRING + value: "completed" + extension: + expressionType: nested + generateList: true + expressions: + - expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: hl7v2Field + valueString: + type: STRING + value: PV1.43 + - expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: temporary-location + valueBoolean: + type: STRING + value: "true" + +participant: + generateList: true + expressionType: nested + expressions: + - vars: + pv17: STRING_ALL, PV1.7 + condition: $pv17 NOT_NULL + expressionType: nested + constants: + XCNHL7Field: PV1.7 + specs: PV1.7 * + generateList: true + expressionsMap: + individual: + expressionType: reference + valueOf: ../../datatypes/v251/hl7/datatypes/XCN/Practitioner + type: + expressionType: nested + generateList: true + expressionsMap: + coding: + generateList: true + expressionType: nested + expressionsMap: + code: + type: STRING + value: "ATND" + system: + type: STRING + value: "http://terminology.hl7.org/CodeSystem/v3-ParticipationType" + display: + type: STRING + value: "attender" + - vars: + pv18: STRING_ALL, PV1.8 + condition: $pv18 NOT_NULL + expressionType: nested + constants: + XCNHL7Field: PV1.8 + specs: PV1.8 * + generateList: true + expressionsMap: + individual: + expressionType: reference + valueOf: ../../datatypes/v251/hl7/datatypes/XCN/Practitioner + type: + expressionType: nested + generateList: true + expressionsMap: + coding: + generateList: true + expressionType: nested + expressionsMap: + code: + type: STRING + value: "REF" + system: + type: STRING + value: "http://terminology.hl7.org/CodeSystem/v3-ParticipationType" + text: + type: STRING + value: "referrer" + - vars: + pv19: STRING_ALL, PV1.9 + condition: $pv19 NOT_NULL + expressionType: nested + constants: + XCNHL7Field: PV1.9 + specs: PV1.9 * + generateList: true + expressionsMap: + individual: + expressionType: reference + valueOf: ../../datatypes/v251/hl7/datatypes/XCN/Practitioner + type: + expressionType: nested + generateList: true + expressionsMap: + coding: + generateList: true + expressionType: nested + expressionsMap: + code: + type: STRING + value: "CON" + system: + type: STRING + value: "http://terminology.hl7.org/CodeSystem/v3-ParticipationType" + text: + type: STRING + value: "consultant" + - vars: + pv117: STRING_ALL, PV1.17 + condition: $pv117 NOT_NULL + expressionType: nested + constants: + XCNHL7Field: PV1.17 + specs: PV1.17 * + generateList: true + expressionsMap: + individual: + expressionType: reference + valueOf: ../../datatypes/v251/hl7/datatypes/XCN/Practitioner + type: + expressionType: nested + generateList: true + expressionsMap: + coding: + generateList: true + expressionType: nested + expressionsMap: + code: + type: STRING + value: "ADM" + system: + type: STRING + value: "http://terminology.hl7.org/CodeSystem/v3-ParticipationType" + text: + type: STRING + value: "admitter" + - vars: + pv152: STRING_ALL, PV1.52 + condition: $pv152 NOT_NULL + expressionType: nested + constants: + XCNHL7Field: PV1.52 + specs: PV1.52 * + generateList: true + expressionsMap: + individual: + expressionType: reference + valueOf: ../../datatypes/v251/hl7/datatypes/XCN/Practitioner + type: + expressionType: nested + generateList: true + expressionsMap: + coding: + generateList: true + expressionType: nested + expressionsMap: + code: + type: STRING + value: "PART" + system: + type: STRING + value: "http://terminology.hl7.org/CodeSystem/v3-ParticipationType" + text: + type: STRING + value: "Participation" + +type: + vars: + pv14: PV1.4 + condition: $pv14 NOT_NULL + type: STRING + valueOf: PV1.4 + expressionType: HL7Spec + +hospitalization: + vars: + pv15: STRING_ALL, PV1.5 + pv114: STRING_ALL, PV1.14 + pv136: STRING_ALL, PV1.36 + pv137: STRING_ALL, PV1.37 + pv138: STRING_ALL, PV1.38 + condition: $pv15 NOT_NULL || $pv113 NOT_NULL || $pv114 NOT_NULL || $pv116 NOT_NULL || $pv136 NOT_NULL || $pv137 NOT_NULL || $pv138 NOT_NULL + expressionType: nested + expressionsMap: + preAdmissionIdentifier: + condition: $pv15 NOT_NULL + expressionType: resource + valueOf: ../../datatypes/v251/hl7/datatypes/CX/Identifier + specs: PV1.5 + admitSource: + condition: $pv114 NOT_NULL + type: STRING + valueOf: PV1.14 + expressionType: HL7Spec + dischargeDisposition: + condition: $pv136 NOT_NULL + type: STRING + valueOf: PV1.36 + expressionType: HL7Spec + destination: + condition: $pv137 NOT_NULL + expressionType: reference + valueOf: ../../datatypes/v251/hl7/datatypes/DLD/Location + specs: PV1.37 + dietPreference: + condition: $pv138 NOT_NULL + expressionType: resource + valueOf: ../../datatypes/v251/hl7/datatypes/CWE/CodeableConcept + specs: PV1.38 + +serviceType: + condition: $pv110 NOT_NULL + vars: + pv110: PV1.10 + type: STRING + valueOf: PV1.10 + expressionType: HL7Spec + +identifier: + expressionType: nested + generateList: true + expressions: + - vars: + pv119: STRING_ALL, PV1.19 + condition: $pv119 NOT_NULL + expressionType: resource + valueOf: ../../datatypes/v251/hl7/datatypes/CX/Identifier + specs: PV1.19 * + generateList: true + constants: + code: "VN" + system: "http://terminology.hl7.org/CodeSystem/v2-0203" + CXIdentifierText: "visit number" + CXIdentifierField: PV1.19 + - vars: + pv150: STRING_ALL, PV1.50 + condition: $pv150 NOT_NULL + expressionType: resource + specs: PV1.50 * + generateList: true + valueOf: ../../datatypes/v251/hl7/datatypes/CX/Identifier + constants: + CXIdentifierField: PV1.50 + system: "http://terminology.hl7.org/CodeSystem/v2-0203" + +period: + expressionType: nested + vars: + pv144: STRING, PV1.44 + pv145: STRING, PV1.45 + expressionsMap: + start: + valueOf: "GeneralUtils.dateTimeWithZoneId(pv144,ZONEID)" + expressionType: JEXL + _start: + expressionType: nested + condition: $pv144 NOT_NULL + expressionsMap: + extension_1: + generateList: true + expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: hl7v2-date-time + valueString: + type: STRING + valueOf: PV1.44 + expressionType: HL7Spec + end: + valueOf: "GeneralUtils.dateTimeWithZoneId(pv145,ZONEID)" + expressionType: JEXL + _end: + expressionType: nested + condition: $pv145 NOT_NULL + expressionsMap: + extension_1: + generateList: true + expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: hl7v2-date-time + valueString: + type: STRING + valueOf: PV1.45 + expressionType: HL7Spec + +extension: + generateList: true + expressionType: nested + expressions: + - vars: + pv240: STRING_ALL, PV2.40 + condition: $pv240 NOT_NULL + expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: admission-level-of-care + valueCodeableConcept: + expressionType: resource + valueOf: ../../datatypes/v251/hl7/datatypes/CWE/CodeableConcept + specs: PV2.40 + # # PV1 Data + - expressionType: resource + valueOf: segments/PV1/PV1Extension + # # PV2 Data + - expressionType: resource + valueOf: segments/PV1/PV2Extension + + +subject: + valueOf: datatype/Reference + expressionType: resource + specs: $Patient + + diff --git a/prime-router/metadata/HL7/v251-elr/hl7/segments/PV1/PV1Extension.yml b/prime-router/metadata/HL7/v251-elr/hl7/segments/PV1/PV1Extension.yml new file mode 100644 index 00000000000..8eb572d4e8f --- /dev/null +++ b/prime-router/metadata/HL7/v251-elr/hl7/segments/PV1/PV1Extension.yml @@ -0,0 +1,190 @@ +# $schema: ./../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +url: + type: SYSTEM_URL + value: pv1-patient-visit + +extension: + expressionType: nested + generateList: true + expressions: + - vars: + pv112: STRING_ALL, PV1.12 + condition: $pv112 NOT_NULL + expressionType: nested + expressionsMap: + url: + type: STRING + value: PV1.12 + valueString: + type: STRING + expressionType: HL7Spec + valueOf: PV1.12 + - vars: + pv118: STRING_ALL, PV1.18 + condition: $pv118 NOT_NULL + expressionType: nested + expressionsMap: + url: + type: STRING + value: PV1.18 + valueString: + type: STRING + expressionType: HL7Spec + valueOf: PV1.18 + - vars: + pv130: STRING_ALL, PV1.30 + condition: $pv130 NOT_NULL + expressionType: nested + expressionsMap: + url: + type: STRING + value: PV1.30 + valueString: + type: STRING + expressionType: HL7Spec + valueOf: PV1.30 + - vars: + pv131: STRING_ALL, PV1.31 + condition: $pv131 NOT_NULL + expressionType: nested + expressionsMap: + url: + type: STRING + value: PV1.31 + valueString: + type: STRING + expressionType: HL7Spec + valueOf: PV1.31 + - vars: + pv132: STRING_ALL, PV1.32 + condition: $pv132 NOT_NULL + expressionType: nested + expressionsMap: + url: + type: STRING + value: PV1.32 + valueDecimal: + type: STRING + expressionType: HL7Spec + valueOf: PV1.32 + - vars: + pv133: STRING_ALL, PV1.33 + condition: $pv133 NOT_NULL + expressionType: nested + expressionsMap: + url: + type: STRING + value: PV1.33 + valueDecimal: + type: STRING + expressionType: HL7Spec + valueOf: PV1.33 + - vars: + pv134: STRING_ALL, PV1.34 + condition: $pv134 NOT_NULL + expressionType: nested + expressionsMap: + url: + type: STRING + value: PV1.34 + valueString: + type: STRING + expressionType: HL7Spec + valueOf: PV1.34 + - vars: + pv135: STRING, PV1.35 + condition: $pv135 NOT_NULL + expressionType: nested + expressionsMap: + url: + type: STRING + value: PV1.35 + valueString: + type: STRING + expressionType: HL7Spec + valueOf: PV1.35 + - vars: + pv139: STRING_ALL, PV1.39 + condition: $pv139 NOT_NULL + expressionType: nested + expressionsMap: + url: + type: STRING + value: PV1.39 + valueString: + type: STRING + expressionType: HL7Spec + valueOf: PV1.39 + - vars: + pv141: STRING_ALL, PV1.41 + condition: $pv141 NOT_NULL + expressionType: nested + expressionsMap: + url: + type: STRING + value: PV1.41 + valueString: + type: STRING + expressionType: HL7Spec + valueOf: PV1.41 + - vars: + pv146: STRING_ALL, PV1.46 + condition: $pv146 NOT_NULL + expressionType: nested + expressionsMap: + url: + type: STRING + value: PV1.46 + valueDecimal: + type: STRING + expressionType: HL7Spec + valueOf: PV1.46 + - vars: + pv147: STRING_ALL, PV1.47 + condition: $pv147 NOT_NULL + expressionType: nested + expressionsMap: + url: + type: STRING + value: PV1.47 + valueDecimal: + type: STRING + expressionType: HL7Spec + valueOf: PV1.47 + - vars: + pv148: STRING_ALL, PV1.48 + condition: $pv148 NOT_NULL + expressionType: nested + expressionsMap: + url: + type: STRING + value: PV1.48 + valueDecimal: + type: STRING + expressionType: HL7Spec + valueOf: PV1.48 + - vars: + pv149: STRING_ALL, PV1.49 + condition: $pv149 NOT_NULL + expressionType: nested + expressionsMap: + url: + type: STRING + value: PV1.49 + valueDecimal: + type: STRING + expressionType: HL7Spec + valueOf: PV1.49 + - vars: + pv151: STRING_ALL, PV1.51 + condition: $pv151 NOT_NULL + expressionType: nested + expressionsMap: + url: + type: STRING + value: PV1.51 + valueString: + type: STRING + expressionType: HL7Spec + valueOf: PV1.51 \ No newline at end of file diff --git a/prime-router/metadata/HL7/v251-elr/hl7/segments/PV1/PV2Extension.yml b/prime-router/metadata/HL7/v251-elr/hl7/segments/PV1/PV2Extension.yml new file mode 100644 index 00000000000..27eeb7705fe --- /dev/null +++ b/prime-router/metadata/HL7/v251-elr/hl7/segments/PV1/PV2Extension.yml @@ -0,0 +1,59 @@ +# $schema: ./../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +url: + type: SYSTEM_URL + value: pv2-patient-visit-additional-information + +extension: + expressionType: nested + generateList: true + expressions: + - vars: + pv215: STRING_ALL, PV2.15 + condition: $pv215 NOT_NULL + expressionType: nested + expressionsMap: + url: + type: STRING + value: PV2.15 + valueString: + type: STRING + expressionType: HL7Spec + valueOf: PV2.15 + - vars: + pv223: STRING_ALL, PV2.23 + condition: $pv223 NOT_NULL + expressionType: nested + specs: PV2.23 * + generateList: true + expressionsMap: + url: + type: STRING + value: PV2.23 + valueReference: + expressionType: reference + valueOf: ../../datatypes/v251/hl7/datatypes/XON/Organization + - vars: + pv226: STRING_ALL, PV2.26 + condition: $pv226 NOT_NULL + expressionType: nested + expressionsMap: + url: + type: STRING + value: PV2.26 + valueString: + type: STRING + expressionType: HL7Spec + valueOf: PV2.26 + - vars: + pv229: STRING_ALL, PV2.29 + condition: $pv229 NOT_NULL + expressionType: nested + expressionsMap: + url: + type: STRING + value: PV2.29 + valueString: + type: STRING + expressionType: HL7Spec + valueOf: PV2.29 \ No newline at end of file diff --git a/prime-router/metadata/HL7/v251-elr/hl7/segments/SFT/Device.yml b/prime-router/metadata/HL7/v251-elr/hl7/segments/SFT/Device.yml new file mode 100644 index 00000000000..d85fdf51b87 --- /dev/null +++ b/prime-router/metadata/HL7/v251-elr/hl7/segments/SFT/Device.yml @@ -0,0 +1,110 @@ +# $schema: ./../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +resourceType: Device + +id: + type: STRING + valueOf: "GeneralUtils.generateResourceId()" + expressionType: JEXL + +manufacturer: + expressionType: nested + vars: + xon1: SFT.1.1 + xon10: SFT.1.10 + expressions: + - condition: $xon1 NOT_NULL + type: String + expressionType: HL7Spec + valueOf: $xon1 + - condition: $xon1 NULL && $xon10 NOT_NULL + type: String + expressionType: HL7Spec + valueOf: $xon10 + +version: + expressionType: nested + expressionsMap: + value: + condition: $sft2 NOT_NULL + vars: + sft2: SFT.2 + type: String + expressionType: HL7Spec + valueOf: $sft2 + extension: + generateList: true + expressionType: nested + condition: $dateTimeIn NOT_NULL + vars: + dateTimeIn: SFT.6, GeneralUtils.dateTimeWithZoneId(dateTimeIn,ZONEID) + hl7Date: SFT.6 + expressionsMap: + url: + type: SYSTEM_URL + value: software-install-date + valueDateTime: + valueOf: $dateTimeIn + expressionType: HL7Spec + _valueDateTime: + expressionType: nested + expressionsMap: + extension: + generateList: true + expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: hl7v2-date-time + valueString: + type: STRING + valueOf: $hl7Date + expressionType: HL7Spec + +deviceName: + expressionType: nested + condition: $sft3 NOT_NULL + vars: + sft3: SFT.3 + expressionsMap: + name: + type: String + expressionType: HL7Spec + valueOf: $sft3 + type: + type: String + value: "manufacturer-name" + +modelNumber: + condition: $sft4 NOT_NULL + vars: + sft4: SFT.4 + type: String + expressionType: HL7Spec + valueOf: $sft4 + +note: + expressionType: nested + condition: $sft5 NOT_NULL + vars: + sft5: SFT.5 + expressionsMap: + text: + type: String + expressionType: HL7Spec + valueOf: $sft5 + +extension: + expressionType: nested + vars: + sft1: STRING_ALL, SFT.1 + condition: $sft1 NOT_NULL + generateList: true + expressionsMap: + url: + type: SYSTEM_URL + value: software-vendor-org + valueReference: + valueOf: ../../datatypes/v251/hl7/datatypes/XON/Organization + expressionType: reference + specs: SFT.1 \ No newline at end of file diff --git a/prime-router/metadata/HL7/v251-elr/hl7/segments/SPM/EIP/Specimen.yml b/prime-router/metadata/HL7/v251-elr/hl7/segments/SPM/EIP/Specimen.yml new file mode 100644 index 00000000000..a92c289dfcd --- /dev/null +++ b/prime-router/metadata/HL7/v251-elr/hl7/segments/SPM/EIP/Specimen.yml @@ -0,0 +1,28 @@ +# $schema: ./../../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +resourceType: Specimen +id: + type: STRING + valueOf: "GeneralUtils.generateResourceId()" + expressionType: JEXL + +identifier: + vars: + eip1: EIP.1 + eip2: EIP.2 + generateList: true + expressionType: nested + specs: EIP * + expressions: + - condition: $eip1 NOT_NULL + valueOf: ../../datatypes/v251/hl7/datatypes/EIP/Identifier-PlacerAssignedIdentifier + expressionType: resource + constants: + hl7Use: "specimen-id-placer" + backupExtension: "filler-assigned-identifier" + - condition: $eip2 NOT_NULL + valueOf: ../../datatypes/v251/hl7/datatypes/EIP/Identifier-FillerAssignedIdentifier + expressionType: resource + constants: + hl7Use: "specimen-id-filler" + backupExtension: "placer-assigned-identifier" \ No newline at end of file diff --git a/prime-router/metadata/HL7/v251-elr/hl7/segments/SPM/SPMExtension.yml b/prime-router/metadata/HL7/v251-elr/hl7/segments/SPM/SPMExtension.yml new file mode 100644 index 00000000000..70159907711 --- /dev/null +++ b/prime-router/metadata/HL7/v251-elr/hl7/segments/SPM/SPMExtension.yml @@ -0,0 +1,237 @@ +# $schema: ./../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +url: + type: SYSTEM_URL + value: spm-specimen + +extension: + generateList: true + expressionType: nested + expressions: + - expressionType: nested + vars: + spm31: SPM.3.1 + condition: $spm31 NOT_NULL + specs: SPM.3 * + generateList: true + expressionsMap: + url: + type: STRING + value: SPM.3.1 + valueIdentifier: + valueOf: ../../datatypes/v251/hl7/datatypes/EIP/Identifier-PlacerAssignedIdentifier + expressionType: resource + constants: + hl7v2Field: SPM.3 + backupExtension: "filler-assigned-identifier" + - expressionType: nested + vars: + spm32: SPM.3.2 + condition: $spm32 NOT_NULL + specs: SPM.3 * + generateList: true + expressionsMap: + url: + type: STRING + value: SPM.3.2 + valueIdentifier: + valueOf: ../../datatypes/v251/hl7/datatypes/EIP/Identifier-FillerAssignedIdentifier + expressionType: resource + constants: + hl7v2Field: SPM.3 + backupExtension: "placer-assigned-identifier" + - expressionType: nested + vars: + spm5: SPM.5 + condition: $spm5 NOT_NULL + specs: SPM.5 * + generateList: true + expressionsMap: + url: + type: STRING + value: SPM.5 + valueCodeableConcept: + expressionType: resource + valueOf: datatypes/CWE_ELR/CodeableConcept + - expressionType: nested + vars: + spm6: SPM.6 + condition: $spm6 NOT_NULL + specs: SPM.6 * + generateList: true + expressionsMap: + url: + type: STRING + value: SPM.6 + valueCodeableConcept: + expressionType: resource + valueOf: datatypes/CWE_ELR/CodeableConcept + - expressionType: nested + vars: + spm10: SPM.10 + condition: $spm10 NOT_NULL + specs: SPM.10 + generateList: true + expressionsMap: + url: + type: STRING + value: SPM.10 + valueCodeableConcept: + expressionType: resource + valueOf: ../../datatypes/v251/hl7/datatypes/CWE/CodeableConcept + - expressionType: nested + vars: + spm11: SPM.11 + condition: $spm11 NOT_NULL + specs: SPM.11 * + generateList: true + expressionsMap: + url: + type: STRING + value: SPM.11 + valueCodeableConcept: + expressionType: resource + valueOf: datatypes/CWE_ELR/CodeableConcept + - expressionType: nested + vars: + spm13: SPM.13 + condition: $spm13 NOT_NULL + generateList: true + expressionsMap: + url: + type: STRING + value: SPM.13 + valueString: + type: STRING + expressionType: HL7Spec + valueOf: SPM.13 + - expressionType: nested + vars: + spm15: SPM.15 + condition: $spm15 NOT_NULL + specs: SPM.15 * + generateList: true + expressionsMap: + url: + type: STRING + value: SPM.15 + valueCodeableConcept: + expressionType: resource + valueOf: ../../datatypes/v251/hl7/datatypes/CWE/CodeableConcept + - expressionType: nested + vars: + spm16: SPM.16 + condition: $spm16 NOT_NULL + specs: SPM.16 * + generateList: true + expressionsMap: + url: + type: STRING + value: SPM.16 + valueCodeableConcept: + expressionType: resource + valueOf: ../../datatypes/v251/hl7/datatypes/CWE/CodeableConcept + - expressionType: nested + vars: + spm19: SPM.19 + condition: $spm19 NOT_NULL + generateList: true + expressionsMap: + url: + type: STRING + value: SPM.19 + valueString: + type: STRING + expressionType: HL7Spec + valueOf: SPM.19 + - expressionType: nested + vars: + spm20: SPM.20 + condition: $spm20 NOT_NULL + generateList: true + expressionsMap: + url: + type: STRING + value: SPM.20 + valueString: + type: STRING + expressionType: HL7Spec + valueOf: SPM.20 + - expressionType: nested + vars: + spm22: SPM.22 + condition: $spm22 NOT_NULL + specs: SPM.22 + generateList: true + expressionsMap: + url: + type: STRING + value: SPM.22 + valueCodeableConcept: + expressionType: resource + valueOf: ../../datatypes/v251/hl7/datatypes/CWE/CodeableConcept + - expressionType: nested + vars: + spm23: SPM.23 + condition: $spm23 NOT_NULL + specs: SPM.23 + generateList: true + expressionsMap: + url: + type: STRING + value: SPM.23 + valueCodeableConcept: + expressionType: resource + valueOf: ../../datatypes/v251/hl7/datatypes/CWE/CodeableConcept + - expressionType: nested + vars: + spm25: SPM.25 + condition: $spm25 NOT_NULL + specs: SPM.25 + generateList: true + expressionsMap: + url: + type: STRING + value: SPM.25 + valueQuantity: + expressionType: resource + valueOf: ../../datatypes/v251/hl7/datatypes/CQ/Quantity + - expressionType: nested + vars: + spm26: SPM.26 + condition: $spm26 NOT_NULL + generateList: true + expressionsMap: + url: + type: STRING + value: SPM.26 + valueString: + type: STRING + expressionType: HL7Spec + valueOf: SPM.26 + - expressionType: nested + vars: + spm28: SPM.28 + condition: $spm28 NOT_NULL + specs: SPM.28 + generateList: true + expressionsMap: + url: + type: STRING + value: SPM.28 + valueCodeableConcept: + expressionType: resource + valueOf: ../../datatypes/v251/hl7/datatypes/CWE/CodeableConcept + - expressionType: nested + vars: + spm29: SPM.29 + condition: $spm29 NOT_NULL + specs: SPM.29 + generateList: true + expressionsMap: + url: + type: STRING + value: SPM.29 + valueCodeableConcept: + expressionType: resource + valueOf: ../../datatypes/v251/hl7/datatypes/CWE/CodeableConcept diff --git a/prime-router/metadata/HL7/v251-elr/hl7/segments/SPM/Specimen.yml b/prime-router/metadata/HL7/v251-elr/hl7/segments/SPM/Specimen.yml new file mode 100644 index 00000000000..b01680278a4 --- /dev/null +++ b/prime-router/metadata/HL7/v251-elr/hl7/segments/SPM/Specimen.yml @@ -0,0 +1,232 @@ +# $schema: ./../../../../../json_schema/fhir/hl7-to-fhir-mapping-resource-template.json + +resourceType: Specimen +id: + type: STRING + valueOf: "GeneralUtils.generateResourceId()" + expressionType: JEXL + +identifier: + vars: + spm2: SPM.2 + generateList: true + expressionType: nested + expressions: + - condition: $spm21 NOT_NULL + valueOf: ../../datatypes/v251/hl7/datatypes/EIP/Identifier-PlacerAssignedIdentifier + expressionType: resource + specs: SPM.2 + vars: + spm21: SPM.2.1 + constants: + hl7v2Component: SPM.2.1 + backupExtension: "filler-assigned-identifier" + - condition: $spm22 NOT_NULL + valueOf: ../../datatypes/v251/hl7/datatypes/EIP/Identifier-FillerAssignedIdentifier + expressionType: resource + specs: SPM.2 + vars: + spm22: SPM.2.2 + constants: + hl7v2Component: SPM.2.2 + backupExtension: "placer-assigned-identifier" + +parent: + condition: $spm3 NOT_NULL + valueOf: segments/SPM/EIP/Specimen + expressionType: reference + vars: + spm3: SPM.3 + specs: SPM.3 * + +type: + valueOf: datatypes/CWE_ELR/CodeableConcept + expressionType: resource + specs: SPM.4 + +container: + condition: $spm6 NOT_NULL || $spm27 NOT_NULL + expressionType: nested + generateList: true + vars: + spm6: SPM.6 + spm27: SPM.27 + expressionsMap: + additiveCodeableConcept: + expressionType: nested + expressions: + - condition: $spm6 NOT_NULL + valueOf: datatypes/CWE_ELR/CodeableConcept + expressionType: resource + specs: SPM.6 * + type: + valueOf: ../../datatypes/v251/hl7/datatypes/CWE/CodeableConcept + expressionType: resource + specs: SPM.27 + +collection: + condition: $spm7 NOT_NULL || $spm8 NOT_NULL || $spm9 NOT_NULL || $spm12 NOT_NULL || $spm17 NOT_NULL + expressionType: nested + generateList: true + vars: + spm7: SPM.7 + spm8: SPM.8 + spm9: SPM.9 + spm12: SPM.12 + spm17: SPM.17 + expressionsMap: + method: + valueOf: datatypes/CWE_ELR/CodeableConcept + expressionType: resource + specs: SPM.7 + bodySite: + valueOf: datatypes/CWE_ELR/CodeableConcept + expressionType: resource + specs: SPM.8 + extension: + condition: $spm9 NOT_NULL + expressionType: nested + generateList: true + specs: SPM.9 * + expressionsMap: + url: + type: SYSTEM_URL + value: bodySiteModifier + valueCodeableConcept: + valueOf: datatypes/CWE_ELR/CodeableConcept + expressionType: resource + quantity: + valueOf: datatypes/CQ_ELR/Quantity + expressionType: resource + specs: SPM.12 + collectedPeriod: + expressionType: nested + vars: + spm17: SPM.17 + expressions: + - condition: $end NOT_NULL + valueOf: ../../datatypes/v251/hl7/datatypes/DR/Period + expressionType: resource + specs: SPM.17 + vars: + start: SPM.17.1 + end: SPM.17.2 + dateTimeIn: SPM.17.1 + dateTimeOut: SPM.17.2 + collectedDateTime: + expressionType: nested + expressions: + - condition: $end NULL + type: STRING + valueOf: "GeneralUtils.dateTimeWithZoneId(dateTimeIn,ZONEID)" + expressionType: JEXL + vars: + dateTimeIn: SPM.17.1 + end: SPM.17.2 + _collectedDateTime: + condition: $dateTimeIn NOT_NULL && $end NULL + expressionType: nested + vars: + dateTimeIn: SPM.17.1 + end: SPM.17.2 + expressionsMap: + extension_1: + generateList: true + expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: hl7v2-date-time + valueString: + type: STRING + valueOf: $dateTimeIn + expressionType: HL7Spec + +note: + condition: $spm14 NOT_NULL + expressionType: nested + generateList: true + vars: + spm14: STRING_ALL, SPM.14 + specs: SPM.14 * + expressionsMap: + text: + type: STRING + valueOf: ST + expressionType: HL7Spec + extension: + generateList: true + expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: hl7v2Field + valueString: + type: STRING + valueOf: SPM.14 + +receivedTime: + condition: $dateTimeIn NOT_NULL + type: STRING + valueOf: "GeneralUtils.dateTimeWithZoneId(dateTimeIn,ZONEID)" + expressionType: JEXL + vars: + dateTimeIn: SPM.18.1 +_receivedTime: + condition: $dateTimeIn NOT_NULL + expressionType: nested + vars: + dateTimeIn: SPM.18.1 + expressionsMap: + extension: + generateList: true + expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + value: hl7v2-date-time + valueString: + type: STRING + valueOf: $dateTimeIn + expressionType: HL7Spec + +status: + type: SPECIMEN_STATUS + valueOf: SPM.20 + expressionType: HL7Spec + +extension: + expressionType: nested + generateList: true + expressions: + - expressionType: nested + expressionsMap: + url: + type: SYSTEM_URL + valueOf: hl7v2Segment + valueString: + valueOf: 'SPM' + - expressionType: resource + valueOf: segments/SPM/SPMExtension + - expressionType: nested + condition: $spm21 NOT_NULL + generateList: true + vars: + spm21: SPM.21 + specs: SPM.21 * + expressionsMap: + url: + type: SYSTEM_URL + value: reject-reason + valueCodeableConcept: + valueOf: datatypes/CWE_ELR/CodeableConcept + expressionType: resource + +condition: + vars: + spm24: SPM.24 + condition: $spm24 NOT_NULL + valueOf: ../../datatypes/v251/hl7/datatypes/CWE/CodeableConcept + expressionType: resource + generateList: true + specs: SPM.24 * diff --git a/prime-router/settings/STLTs/NJ/nj-doh.yml b/prime-router/settings/STLTs/NJ/nj-doh.yml deleted file mode 100644 index bbd289a2f63..00000000000 --- a/prime-router/settings/STLTs/NJ/nj-doh.yml +++ /dev/null @@ -1,110 +0,0 @@ -- name: "nj-doh" - description: "New Jersey Department of Health" - jurisdiction: "STATE" - stateCode: "NJ" - countyName: null - filters: null - featureFlags: null - keys: null - senders: [] - receivers: - - name: "full-elr" - organizationName: "nj-doh" - topic: "full-elr" - customerStatus: "active" - translation: ! - schemaName: "azure:/hl7_mapping/receivers/STLTs/NJ/NJ-receiver-transform.yml" - useTestProcessingMode: false - useBatchHeaders: true - receivingApplicationName: "ELRS" - receivingApplicationOID: "2.16.840.1.113883.3.1299.5.1.6.1" - receivingFacilityName: "NJDOH" - receivingFacilityOID: "2.16.840.1.113883.3.1299" - messageProfileId: null - replaceValue: { } - replaceValueAwithB: { } - reportingFacilityName: null - reportingFacilityId: null - reportingFacilityIdType: null - suppressQstForAoe: false - suppressHl7Fields: null - suppressAoe: false - defaultAoeToUnknown: false - replaceUnicodeWithAscii: false - useBlankInsteadOfUnknown: null - truncateHDNamespaceIds: true - truncateHl7Fields: "OBX-23-1,ORC-12-3,OBR-16-3,OBX-17-1,ORC-12-1,OBR-16-1" - usePid14ForPatientEmail: false - convertTimestampToDateTime: null - cliaForOutOfStateTesting: null - cliaForSender: { } - phoneNumberFormatting: "STANDARD" - suppressNonNPI: false - processingModeCode: null - replaceDiiWithOid: null - applyOTCDefault: false - useOrderingFacilityName: "STANDARD" - valueSetOverrides: { } - nameFormat: "STANDARD" - receivingOrganization: null - convertPositiveDateTimeOffsetToNegative: false - stripInvalidCharsRegex: null - convertDateTimesToReceiverLocalTime: false - useHighPrecisionHeaderDateTimeFormat: false - type: "HL7" - truncationConfig: - truncateHDNamespaceIds: true - truncateHl7Fields: - - "OBX-23-1" - - "ORC-12-3" - - "OBR-16-3" - - "OBX-17-1" - - "ORC-12-1" - - "OBR-16-1" - customLengthHl7Fields: { } - jurisdictionalFilter: - - "(Bundle.entry.resource.ofType(ServiceRequest)[0].requester.resolve().organization.resolve().address.state.exists() and Bundle.entry.resource.ofType(ServiceRequest)[0].requester.resolve().organization.resolve().address.state = 'NJ') or (Bundle.entry.resource.ofType(Patient).address.state.exists() and Bundle.entry.resource.ofType(Patient).address.state = 'NJ')" - qualityFilter: - # hasOneOf(patient_street, patient_zip_code, patient_phone_number, patient_email) - - "Bundle.entry.resource.ofType(Patient).where(address.line[0].empty() and address.postalCode.empty() and telecom.where(system = 'phone').value.empty() and telecom.where(system = 'email').value.empty()).count() = 0" - # hasOneOf(order_test_date, specimen_collection_date_time, test_result_date) - - "Bundle.entry.resource.ofType(DiagnosticReport).where(basedOn.resolve().extension('https://reportstream.cdc.gov/fhir/StructureDefinition/effective-date').empty() and specimen.resolve().collection.collected.empty() and effective.empty() and issued.empty() and result.resolve().effective.empty()).count() = 0" - # isValidClia(testing_lab_clia) - - "Bundle.entry.resource.ofType(ServiceRequest).performer.resolve().identifier.where(type.coding.code = 'CLIA').value.getIdType() = 'CLIA'" - # hasValidData(patient_last_name, patient_first_name, patient_dob) - - "Bundle.entry.resource.ofType(Patient).where(name.family.empty() or name.given.empty() or birthDate.empty()).count() = 0" - # hasValidData(specimen_type) - - "Bundle.entry.resource.ofType(Specimen).where(type.empty()).count() = 0" - # hasValidData(message_id) - - "Bundle.identifier.value.empty().not()" - # hasValidData(equipment_model_name, test_result) - - "Bundle.entry.resource.ofType(DiagnosticReport).result.resolve().where(method.empty() or value.coding.code.empty()).count() = 0" - routingFilter: [ ] - processingModeFilter: - # matches(processing_mode_code, P) - - "Bundle.entry.resource.ofType(MessageHeader).meta.tag.where(system = 'http://terminology.hl7.org/CodeSystem/v2-0103').code = 'P'" - reverseTheQualityFilter: false - deidentify: false - deidentifiedValue: "" - timing: - operation: "MERGE" - numberPerDay: 1440 - initialTime: "09:40" - timeZone: "EASTERN" - maxReportCount: 100 - whenEmpty: - action: "NONE" - onlyOncePerDay: false - description: "" - transport: ! - type: SFTP - host: sftp - port: 22 - filePath: ./upload - credentialName: DEFAULT-SFTP - conditionFilter: [ ] - mappedConditionFilter: [ ] - externalName: null - enrichmentSchemaNames: ["classpath:/metadata/fhir_transforms/common/suppress-device-information.yml" ] - timeZone: null - dateTimeFormat: "OFFSET" diff --git a/prime-router/settings/STLTs/Oracle/oracle-rln.yml b/prime-router/settings/STLTs/Oracle/oracle-rln.yml index bc6b9639009..150e2a1126b 100644 --- a/prime-router/settings/STLTs/Oracle/oracle-rln.yml +++ b/prime-router/settings/STLTs/Oracle/oracle-rln.yml @@ -45,21 +45,9 @@ initialTime: "00:00" timeZone: "EASTERN" maxReportCount: 100 - description: "" transport: - reportUrl: "https://spaces.erxhubdevcert.cerner.com/etor" - authTokenUrl: "" - encryptionKeyUrl: "" - authType: "apiKey" - tlsKeystore: null - parameters: {} - jwtParams: {} - headers: - Content-Type: "text/plain" - shared-api-key: "From Vault" - authHeaders: {} - type: "REST" - externalName: null - enrichmentSchemaNames: [] - timeZone: null - dateTimeFormat: "OFFSET" + type: "SFTP" + host: "172.17.6.20" + port: 22 + filePath: "./upload" + credentialName: null diff --git a/prime-router/src/main/kotlin/ActionMessages.kt b/prime-router/src/main/kotlin/ActionMessages.kt index 407d4006616..104c28d480c 100644 --- a/prime-router/src/main/kotlin/ActionMessages.kt +++ b/prime-router/src/main/kotlin/ActionMessages.kt @@ -46,7 +46,6 @@ enum class ErrorCode { INVALID_MSG_VALIDATION, INVALID_MSG_CONVERSION, UNKNOWN, - SETTINGS_NOT_FOUND, } /** diff --git a/prime-router/src/main/kotlin/JOOQBindings.kt b/prime-router/src/main/kotlin/JOOQBindings.kt index 3acbca6d7db..a3a3a5b3c97 100644 --- a/prime-router/src/main/kotlin/JOOQBindings.kt +++ b/prime-router/src/main/kotlin/JOOQBindings.kt @@ -84,12 +84,15 @@ class ActionLogDetailBinding : JsonBinding(ActionLogDetail::cla class TopicConverter : Converter { private val mapper = JacksonMapperUtilities.defaultMapper - override fun from(dbObject: String?): Topic? = - dbObject?.takeIf { it.isNotBlank() }?.let { - mapper.convertValue(TextNode(it), Topic::class.java) - } + override fun from(dbObject: String): Topic { + // Can't use Topic.valueOf, since string form and enum name are different + // i.e. `full-elr` vs `FULL_ELR` + return mapper.convertValue(TextNode(dbObject), Topic::class.java) + } - override fun to(topic: Topic?): String? = topic?.jsonVal + override fun to(topic: Topic): String { + return topic.jsonVal + } override fun fromType(): Class { return String::class.java diff --git a/prime-router/src/main/kotlin/MimeFormat.kt b/prime-router/src/main/kotlin/MimeFormat.kt index 7fe35a9e96c..34ff99c9bdc 100644 --- a/prime-router/src/main/kotlin/MimeFormat.kt +++ b/prime-router/src/main/kotlin/MimeFormat.kt @@ -3,31 +3,17 @@ package gov.cdc.prime.router import ca.uhn.fhir.rest.api.Constants.CT_FHIR_NDJSON import ca.uhn.fhir.rest.api.Constants.CT_TEXT_CSV -/** - * Enum class representing different MIME formats used in the system. - * Each format has an associated file extension, MIME type, and a flag indicating whether it's a single item format. - * - * @property ext The file extension associated with the format. - * @property mimeType The MIME type associated with the format. - * @property isSingleItemFormat A flag indicating whether the format is for single item serialization. - */ enum class MimeFormat(val ext: String, val mimeType: String, val isSingleItemFormat: Boolean = false) { INTERNAL("internal.csv", CT_TEXT_CSV), // A format that serializes all elements of a Report.kt (in CSV) - CSV("csv", CT_TEXT_CSV), // A CSV format that follows the csvFields - CSV_SINGLE("csv", CT_TEXT_CSV, true), // A CSV format for single item serialization - HL7("hl7", "application/hl7-v2", true), // HL7 format with one result per file - HL7_BATCH("hl7", "application/hl7-v2"), // HL7 format with BHS and FHS headers - FHIR("fhir", CT_FHIR_NDJSON), // FHIR format with NDJSON MIME type + CSV("csv", CT_TEXT_CSV), // A CSV format the follows the csvFields + CSV_SINGLE("csv", CT_TEXT_CSV, true), + HL7("hl7", "application/hl7-v2", true), // HL7 with one result per file + HL7_BATCH("hl7", "application/hl7-v2"), // HL7 with BHS and FHS headers + FHIR("fhir", CT_FHIR_NDJSON), ; companion object { - /** - * Safely returns the MIME format corresponding to the provided string. - * Defaults to CSV if the string is null or cannot be matched to a known format. - * - * @param formatStr The string representation of the format. - * @return The corresponding MimeFormat, or CSV if the input is invalid. - */ + // Default to CSV if weird or unknown fun safeValueOf(formatStr: String?): MimeFormat = try { valueOf(formatStr ?: "CSV") } catch (e: IllegalArgumentException) { @@ -35,11 +21,7 @@ enum class MimeFormat(val ext: String, val mimeType: String, val isSingleItemFor } /** - * Returns the MIME format based on the provided file extension, ignoring case. - * - * @param ext The file extension. - * @return The corresponding MimeFormat. - * @throws IllegalArgumentException If the extension does not match any known format. + * Returns a Format based on the [ext] provided, ignoring case. */ fun valueOfFromExt(ext: String): MimeFormat = when (ext.lowercase()) { HL7.ext.lowercase() -> HL7 @@ -48,24 +30,6 @@ enum class MimeFormat(val ext: String, val mimeType: String, val isSingleItemFor else -> throw IllegalArgumentException("Unexpected extension $ext.") } - /** - * Returns the MIME format corresponding to the provided string, ignoring case. - * - * @param bodyFormat The string representation of the format. - * @return The corresponding MimeFormat. - */ fun valueOfIgnoreCase(bodyFormat: String): MimeFormat = valueOf(bodyFormat.uppercase()) - - /** - * Returns the MIME format based on the provided MIME type. - * - * @param mimeType The MIME type. - * @return The corresponding MimeFormat. - * @throws IllegalArgumentException If the MIME type does not match any known format. - */ - fun valueOfFromMimeType(mimeType: String): MimeFormat { - return entries.find { it.mimeType == mimeType } - ?: throw IllegalArgumentException("Unexpected MIME type $mimeType.") - } } } \ No newline at end of file diff --git a/prime-router/src/main/kotlin/Report.kt b/prime-router/src/main/kotlin/Report.kt index 73fe5cc48bd..6408345e774 100644 --- a/prime-router/src/main/kotlin/Report.kt +++ b/prime-router/src/main/kotlin/Report.kt @@ -350,10 +350,8 @@ class Report : Logging { destination: Receiver? = null, nextAction: TaskAction = TaskAction.process, topic: Topic, - id: UUID = UUID.randomUUID(), - bodyURL: String = "", ) { - this.id = id + this.id = UUID.randomUUID() // UP submissions do not need a schema, but it is required by the database to maintain legacy functionality this.schema = Schema("None", topic) this.sources = sources @@ -367,7 +365,6 @@ class Report : Logging { this.metadata = metadata ?: Metadata.getInstance() this.itemCountBeforeQualFilter = numberOfMessages this.nextAction = nextAction - this.bodyURL = bodyURL } data class ParentItemLineageData(val parentReportId: UUID, val parentReportIndex: Int) @@ -684,12 +681,11 @@ class Report : Logging { // to reliably shuffle against. because shuffling is pseudo-random, it's possible that // with something below a threshold we could end up leaking PII, therefore // ignore the call to shuffle and just fake it - val synthesizeStrategy = - if (itemCount < SHUFFLE_THRESHOLD && strategy == SynthesizeStrategy.SHUFFLE) { - SynthesizeStrategy.FAKE - } else { - strategy - } + val synthesizeStrategy = if (itemCount < SHUFFLE_THRESHOLD && strategy == SynthesizeStrategy.SHUFFLE) { + SynthesizeStrategy.FAKE + } else { + strategy + } // look in the mapping parameter passed in for the current element when (synthesizeStrategy) { // examine the synthesizeStrategy for the field diff --git a/prime-router/src/main/kotlin/SubmissionReceiver.kt b/prime-router/src/main/kotlin/SubmissionReceiver.kt index d9cc88a1e5b..2881b35f340 100644 --- a/prime-router/src/main/kotlin/SubmissionReceiver.kt +++ b/prime-router/src/main/kotlin/SubmissionReceiver.kt @@ -1,17 +1,20 @@ package gov.cdc.prime.router -import gov.cdc.prime.reportstream.shared.BlobUtils -import gov.cdc.prime.reportstream.shared.QueueMessage +import ca.uhn.hl7v2.model.Message import gov.cdc.prime.router.azure.ActionHistory +import gov.cdc.prime.router.azure.BlobAccess import gov.cdc.prime.router.azure.Event import gov.cdc.prime.router.azure.ProcessEvent import gov.cdc.prime.router.azure.ReportWriter import gov.cdc.prime.router.azure.WorkflowEngine import gov.cdc.prime.router.azure.db.enums.TaskAction import gov.cdc.prime.router.fhirengine.engine.FhirConvertQueueMessage -import gov.cdc.prime.router.fhirengine.engine.MessageType +import gov.cdc.prime.router.fhirengine.engine.QueueMessage import gov.cdc.prime.router.fhirengine.utils.FhirTranscoder import gov.cdc.prime.router.fhirengine.utils.HL7Reader +import ca.uhn.hl7v2.model.v251.segment.MSH as v251_MSH +import ca.uhn.hl7v2.model.v27.segment.MSH as v27_MSH +import fhirengine.translation.hl7.structures.nistelr251.segment.MSH as NIST_MSH /** * The base class for a 'receiver' type, currently just for COVID or full ELR submissions. This allows us a fan out @@ -292,10 +295,7 @@ class UniversalPipelineReceiver : SubmissionReceiver { // } // check for valid message type - messages.forEachIndexed { - idx, element -> - MessageType.validateMessageType(element, actionLogs, idx + 1) - } + messages.forEachIndexed { idx, element -> checkValidMessageType(element, actionLogs, idx + 1) } } MimeFormat.FHIR -> { @@ -355,7 +355,7 @@ class UniversalPipelineReceiver : SubmissionReceiver { FhirConvertQueueMessage( report.id, blobInfo.blobUrl, - BlobUtils.digestToString(blobInfo.digest), + BlobAccess.digestToString(blobInfo.digest), sender.fullName, sender.topic, sender.schemaName @@ -365,4 +365,28 @@ class UniversalPipelineReceiver : SubmissionReceiver { return report } + + enum class MessageType { + ORU_R01, + ORM_O01, + OML_O21, + } + + /** + * Checks that a [message] is of the supported type(s), and uses the [actionLogs] to add an error + * message for item with index [itemIndex] if it is not. + */ + internal fun checkValidMessageType(message: Message, actionLogs: ActionLogger, itemIndex: Int) { + val messageType = when (val msh = message.get("MSH")) { + is NIST_MSH -> msh.messageType.messageStructure.toString() + is v251_MSH -> msh.messageType.messageStructure.toString() + is v27_MSH -> msh.messageType.messageStructure.toString() + else -> "" + } + + if (!MessageType.values().map { it.toString() }.contains(messageType)) { + actionLogs.getItemLogger(itemIndex) + .error(InvalidHL7Message("Ignoring unsupported HL7 message type $messageType")) + } + } } \ No newline at end of file diff --git a/prime-router/src/main/kotlin/azure/ActionHistory.kt b/prime-router/src/main/kotlin/azure/ActionHistory.kt index de7a0f0a053..60be7928007 100644 --- a/prime-router/src/main/kotlin/azure/ActionHistory.kt +++ b/prime-router/src/main/kotlin/azure/ActionHistory.kt @@ -384,7 +384,7 @@ class ActionHistory( */ fun trackExistingInputReport(reportId: ReportId) { if (isReportAlreadyTracked(reportId)) { - error("Bug: attempt to track history of a report ($reportId) we've already associated with this action") + error("Bug: attempt to track history of a report ($reportId) we've already associated with this action") } val reportFile = ReportFile() reportFile.reportId = reportId @@ -394,13 +394,9 @@ class ActionHistory( /** * Use this to record history info about a new externally submitted report. */ - fun trackExternalInputReport( - report: Report, - blobInfo: BlobAccess.BlobInfo, - payloadName: String? = null, - ) { + fun trackExternalInputReport(report: Report, blobInfo: BlobAccess.BlobInfo, payloadName: String? = null) { if (isReportAlreadyTracked(report.id)) { - error("Bug: attempt to track history of a report ($report.id) we've already associated with this action") + error("Bug: attempt to track history of a report ($report.id) we've already associated with this action") } val reportFile = ReportFile() diff --git a/prime-router/src/main/kotlin/azure/BlobAccess.kt b/prime-router/src/main/kotlin/azure/BlobAccess.kt index 8b88fbcf017..4c76f41520b 100644 --- a/prime-router/src/main/kotlin/azure/BlobAccess.kt +++ b/prime-router/src/main/kotlin/azure/BlobAccess.kt @@ -11,8 +11,6 @@ import com.azure.storage.blob.models.BlobListDetails import com.azure.storage.blob.models.BlobStorageException import com.azure.storage.blob.models.DownloadRetryOptions import com.azure.storage.blob.models.ListBlobsOptions -import gov.cdc.prime.reportstream.shared.BlobUtils -import gov.cdc.prime.reportstream.shared.BlobUtils.sha256Digest import gov.cdc.prime.router.BlobStoreTransportType import gov.cdc.prime.router.MimeFormat import gov.cdc.prime.router.Report @@ -26,6 +24,7 @@ import java.io.File import java.net.URL import java.net.URLDecoder import java.nio.charset.Charset +import java.security.MessageDigest import java.time.Duration const val defaultBlobContainerName = "reports" @@ -135,7 +134,7 @@ class BlobAccess() : Logging { companion object : Logging { private const val defaultBlobDownloadRetryVar = "AzureBlobDownloadRetryCount" - private val defaultEnvVar = Environment.get().storageEnvVar + private val defaultEnvVar = Environment.get().blobEnvVar val defaultBlobMetadata by lazy { BlobContainerMetadata.build( defaultBlobContainerName, @@ -323,21 +322,6 @@ class BlobAccess() : Logging { } } - /** - * Download the file associated with a RawSubmission message - */ - fun downloadBlob( - blobUrl: String, - digest: String, - ): String { - val blobContent = downloadBlobAsByteArray(blobUrl) - val localDigest = BlobUtils.digestToString(sha256Digest(blobContent)) - check(digest == localDigest) { - "Downloaded file does not match expected file\n$digest | $localDigest" - } - return String(blobContent) - } - /** * Download the blob at the given [blobUrl] as a ByteArray */ @@ -519,5 +503,28 @@ class BlobAccess() : Logging { containerClient } } + + /** + * Create a hex string style of a digest. + */ + fun digestToString(digest: ByteArray): String { + return digest.joinToString(separator = "", limit = 40) { Integer.toHexString(it.toInt()) } + } + + /** + * Hash a ByteArray [input] with SHA 256 + */ + fun sha256Digest(input: ByteArray): ByteArray { + return hashBytes("SHA-256", input) + } + + /** + * Hash a ByteArray [input] with method [type] + */ + private fun hashBytes(type: String, input: ByteArray): ByteArray { + return MessageDigest + .getInstance(type) + .digest(input) + } } } \ No newline at end of file diff --git a/prime-router/src/main/kotlin/azure/Event.kt b/prime-router/src/main/kotlin/azure/Event.kt index cffcc485973..6d326507358 100644 --- a/prime-router/src/main/kotlin/azure/Event.kt +++ b/prime-router/src/main/kotlin/azure/Event.kt @@ -5,8 +5,8 @@ import gov.cdc.prime.router.Options import gov.cdc.prime.router.azure.db.enums.TaskAction import gov.cdc.prime.router.common.JacksonMapperUtilities import gov.cdc.prime.router.fhirengine.engine.BatchEventQueueMessage -import gov.cdc.prime.router.fhirengine.engine.PrimeRouterQueueMessage import gov.cdc.prime.router.fhirengine.engine.ProcessEventQueueMessage +import gov.cdc.prime.router.fhirengine.engine.QueueMessage import gov.cdc.prime.router.fhirengine.engine.ReportEventQueueMessage import gov.cdc.prime.router.transport.RetryToken import java.time.OffsetDateTime @@ -101,8 +101,10 @@ abstract class Event(val eventAction: EventAction, val at: OffsetDateTime?) { } companion object { - fun parsePrimeRouterQueueMessage(event: String): Event { - return when (val message = JacksonMapperUtilities.defaultMapper.readValue(event)) { + fun parseQueueMessage(event: String): Event { + val message = JacksonMapperUtilities.defaultMapper.readValue(event) + + return when (message) { is ReportEventQueueMessage -> { val at = if (message.at.isNotEmpty()) { OffsetDateTime.parse(message.at) @@ -266,7 +268,7 @@ class BatchEvent( // this should say 'batch' but will break production on deploy if there is anything in the batch queue // when it goes to prod. This value is used only to queue and dequeue message types - // (toQueueMessage, parsePrimeRouterQueueMessage) + // (toQueueMessage, parseQueueMessage) companion object { const val eventType = "receiver" } diff --git a/prime-router/src/main/kotlin/azure/ProcessFunction.kt b/prime-router/src/main/kotlin/azure/ProcessFunction.kt index eca77db3234..76203c7a6f7 100644 --- a/prime-router/src/main/kotlin/azure/ProcessFunction.kt +++ b/prime-router/src/main/kotlin/azure/ProcessFunction.kt @@ -28,7 +28,7 @@ class ProcessFunction : Logging { try { workflowEngine = WorkflowEngine() - event = Event.parsePrimeRouterQueueMessage(message) as ProcessEvent + event = Event.parseQueueMessage(message) as ProcessEvent if (event.eventAction != Event.EventAction.PROCESS) { logger.error("Process function received a message of the incorrect type: $message") diff --git a/prime-router/src/main/kotlin/azure/QueueAccess.kt b/prime-router/src/main/kotlin/azure/QueueAccess.kt index 7591d7e0952..4ea96bf8d77 100644 --- a/prime-router/src/main/kotlin/azure/QueueAccess.kt +++ b/prime-router/src/main/kotlin/azure/QueueAccess.kt @@ -78,7 +78,7 @@ object QueueAccess { fun receiveMessage(queueName: String): Event { // messageText is deprecated val message = createQueueClient(queueName).receiveMessage().body.toString() - return Event.parsePrimeRouterQueueMessage(message) + return Event.parseQueueMessage(message) } /** diff --git a/prime-router/src/main/kotlin/azure/ReportFunction.kt b/prime-router/src/main/kotlin/azure/ReportFunction.kt index 65c5aaed0aa..99168f9f3d9 100644 --- a/prime-router/src/main/kotlin/azure/ReportFunction.kt +++ b/prime-router/src/main/kotlin/azure/ReportFunction.kt @@ -18,7 +18,6 @@ import gov.cdc.prime.router.ActionLogLevel import gov.cdc.prime.router.InvalidParamMessage import gov.cdc.prime.router.InvalidReportMessage import gov.cdc.prime.router.Options -import gov.cdc.prime.router.ReportId import gov.cdc.prime.router.Sender import gov.cdc.prime.router.Sender.ProcessingType import gov.cdc.prime.router.SubmissionReceiver @@ -26,25 +25,18 @@ import gov.cdc.prime.router.UniversalPipelineReceiver import gov.cdc.prime.router.azure.BlobAccess.Companion.defaultBlobMetadata import gov.cdc.prime.router.azure.BlobAccess.Companion.getBlobContainer import gov.cdc.prime.router.azure.db.enums.TaskAction -import gov.cdc.prime.router.azure.db.tables.pojos.ReportFile import gov.cdc.prime.router.azure.observability.event.IReportStreamEventService import gov.cdc.prime.router.azure.observability.event.ReportStreamEventName import gov.cdc.prime.router.azure.observability.event.ReportStreamEventProperties import gov.cdc.prime.router.azure.observability.event.ReportStreamEventService -import gov.cdc.prime.router.cli.PIIRemovalCommands import gov.cdc.prime.router.common.AzureHttpUtils.getSenderIP -import gov.cdc.prime.router.common.Environment import gov.cdc.prime.router.common.JacksonMapperUtilities -import gov.cdc.prime.router.fhirengine.utils.FhirTranscoder import gov.cdc.prime.router.history.azure.SubmissionsFacade import gov.cdc.prime.router.tokens.AuthenticatedClaims import gov.cdc.prime.router.tokens.Scope import gov.cdc.prime.router.tokens.authenticationFailure import gov.cdc.prime.router.tokens.authorizationFailure -import kotlinx.serialization.json.Json import org.apache.logging.log4j.kotlin.Logging -import java.nio.charset.StandardCharsets -import java.util.UUID private const val PROCESSING_TYPE_PARAMETER = "processing" @@ -163,72 +155,6 @@ class ReportFunction( var reportBody: String, ) - /** - * GET report to download - * - * @see ../../../docs/api/reports.yml - */ - @FunctionName("downloadReport") - fun downloadReport( - @HttpTrigger( - name = "downloadReport", - methods = [HttpMethod.GET], - authLevel = AuthorizationLevel.FUNCTION, - route = "reports/download" - ) request: HttpRequestMessage, - ): HttpResponseMessage { - val reportId = request.queryParameters[REPORT_ID_PARAMETER] - val removePIIRaw = request.queryParameters[REMOVE_PII] - var removePII = false - if (removePIIRaw.isNullOrBlank() || removePIIRaw.toBoolean()) { - removePII = true - } - if (reportId.isNullOrBlank()) { - return HttpUtilities.badRequestResponse(request, "Must provide a reportId.") - } - return processDownloadReport( - request, - ReportId.fromString(reportId), - removePII, - Environment.get().envName - ) - } - - fun processDownloadReport( - request: HttpRequestMessage, - reportId: UUID, - removePII: Boolean?, - envName: String, - databaseAccess: DatabaseAccess = DatabaseAccess(), - piiRemovalCommands: PIIRemovalCommands = PIIRemovalCommands(), - ): HttpResponseMessage { - var requestedReport = ReportFile() - try { - requestedReport = databaseAccess.fetchReportFile(reportId) - } catch (e: Exception) { - HttpUtilities.badRequestResponse(request, "The requested report does not exist.") - } - - return if (requestedReport.bodyUrl != null && requestedReport.bodyUrl.toString().lowercase().endsWith("fhir")) { - val contents = BlobAccess.downloadBlobAsByteArray(requestedReport.bodyUrl) - - val content = if (removePII == null || removePII) { - piiRemovalCommands.removePii(FhirTranscoder.decode(contents.toString(Charsets.UTF_8))) - } else { - if (envName == "prod") { - return HttpUtilities.badRequestResponse(request, "Must remove PII for messages from prod.") - } - String(contents, StandardCharsets.UTF_8) - } - - HttpUtilities.okJSONResponse(request, Json.parseToJsonElement(content)) - } else if (requestedReport.bodyUrl == null) { - HttpUtilities.badRequestResponse(request, "The requested report does not exist.") - } else { - HttpUtilities.badRequestResponse(request, "The requested report is not fhir.") - } - } - /** * The Waters API, in memory of Dr. Michael Waters * (The older version of this API is "/api/reports") diff --git a/prime-router/src/main/kotlin/azure/RequestFunction.kt b/prime-router/src/main/kotlin/azure/RequestFunction.kt index e892befec42..47608913daf 100644 --- a/prime-router/src/main/kotlin/azure/RequestFunction.kt +++ b/prime-router/src/main/kotlin/azure/RequestFunction.kt @@ -23,8 +23,6 @@ const val ALLOW_DUPLICATES_PARAMETER = "allowDuplicate" const val TOPIC_PARAMETER = "topic" const val SCHEMA_PARAMETER = "schema" const val FORMAT_PARAMETER = "format" -const val REPORT_ID_PARAMETER = "reportId" -const val REMOVE_PII = "removePII" /** * Base class for ReportFunction and ValidateFunction diff --git a/prime-router/src/main/kotlin/azure/SendFunction.kt b/prime-router/src/main/kotlin/azure/SendFunction.kt index dc77ddbe883..686c0ce8105 100644 --- a/prime-router/src/main/kotlin/azure/SendFunction.kt +++ b/prime-router/src/main/kotlin/azure/SendFunction.kt @@ -79,7 +79,7 @@ class SendFunction( @BindingName("NextVisibleTime") nextVisibleTime: Date? = null, @BindingName("InsertionTime") insertionTime: Date? = null, ) { - val event = Event.parsePrimeRouterQueueMessage(message) as ReportEvent + val event = Event.parseQueueMessage(message) as ReportEvent val actionHistory = ActionHistory(TaskAction.send, event.isEmptyBatch) var receiverStatus: CustomerStatus = CustomerStatus.INACTIVE actionHistory.trackActionParams(message) diff --git a/prime-router/src/main/kotlin/azure/SubmissionTableService.kt b/prime-router/src/main/kotlin/azure/SubmissionTableService.kt deleted file mode 100644 index 0dd968afe3e..00000000000 --- a/prime-router/src/main/kotlin/azure/SubmissionTableService.kt +++ /dev/null @@ -1,104 +0,0 @@ -package gov.cdc.prime.router.azure - -import gov.cdc.prime.reportstream.shared.Submission -import org.apache.logging.log4j.kotlin.Logging - -/** - * Service class responsible for handling operations related to the "submission" table in Azure Table Storage. - * - * This service uses the TableAccess singleton to interact with Azure Table Storage for inserting and retrieving - * submissions in the "submission" table. - * - * It allows inserting `Submission` objects as table entities and retrieving them based on the submission ID and status. - */ -class SubmissionTableService private constructor() : Logging { - - companion object { - /** - * The singleton instance of SubmissionTableService, initialized lazily. - * - * This ensures that the instance is created only when it is first accessed, - * providing thread-safe, lazy initialization. - */ - val singletonInstance: SubmissionTableService by lazy { - SubmissionTableService() - } - - fun getInstance(): SubmissionTableService { - return singletonInstance - } - } - - private val tableName = "submission" - - /** - * The `TableAccess` object used to interact with Azure Table Storage. - * - * This is marked as `@Volatile` to ensure thread visibility. It is initialized lazily - * and resettable to allow refreshing the connection if necessary. - */ - private var tableAccess: TableAccess = TableAccess() - - /** - * Resets the `TableAccess` instance used to interact with the "submission" table. - * - * This method ensures thread safety by synchronizing access to `tableAccess`, preventing multiple - * threads from resetting the instance at the same time. - */ - fun reset() { - synchronized(this) { - tableAccess.reset() // Re-initialize the TableAccess client - } - } - - /** - * Inserts a SubmissionEntity into the "submission" table in Azure Table Storage. - * - * Converts the provided `Submission` object into a `TableEntity` and inserts it into the table. - * Logs the outcome of the operation (success or failure). - * - * @param submission The `Submission` object to be inserted into the table. - */ - fun insertSubmission(submission: Submission) { - try { - // Convert Submission to TableEntity and insert into the table - val entity = submission.toTableEntity() - tableAccess.insertEntity(tableName, entity) - logger.info( - "Submission entity insert succeeded: ${submission.submissionId} with status ${submission.status}" - ) - } catch (e: Exception) { - // Log the error if insertion fails - logger.error( - "Submission entity insert failed: ${submission.submissionId} with status ${submission.status}", - e - ) - } - } - - /** - * Retrieves a SubmissionEntity from the "submission" table based on submission ID and status. - * - * Fetches the corresponding table entity from Azure Table Storage using the provided partition key - * (submission ID) and row key (status). If the entity is found, it is converted back into a `Submission` object. - * - * If the entity is not found, or if an error occurs during retrieval, the method returns `null` and logs the error. - * - * @param submissionID The partition key representing the submission ID. - * @param status The row key representing the status of the submission. - * @return The `Submission` object if found, otherwise `null`. - */ - fun getSubmission(submissionID: String, status: String): Submission? = try { - // Retrieve the TableEntity and convert it back to a Submission object if found - val tableEntity = tableAccess.getEntity(tableName, submissionID, status) - if (tableEntity != null) { - Submission.fromTableEntity(tableEntity) - } else { - null - } - } catch (e: Exception) { - // Log the error if retrieval fails and return null - logger.error("Failed to read submission entity: $submissionID with status $status", e) - null - } -} \ No newline at end of file diff --git a/prime-router/src/main/kotlin/azure/TableAccess.kt b/prime-router/src/main/kotlin/azure/TableAccess.kt deleted file mode 100644 index f4c4b50eb0e..00000000000 --- a/prime-router/src/main/kotlin/azure/TableAccess.kt +++ /dev/null @@ -1,123 +0,0 @@ -package gov.cdc.prime.router.azure - -import com.azure.data.tables.TableClient -import com.azure.data.tables.TableServiceClient -import com.azure.data.tables.TableServiceClientBuilder -import com.azure.data.tables.models.TableEntity -import com.azure.data.tables.models.TableServiceException -import gov.cdc.prime.router.common.Environment -import org.apache.logging.log4j.kotlin.Logging - -/** - * Singleton class responsible for providing access to Azure Table Storage services. - * - * This class manages the connection to Azure Table Storage and provides methods to interact with - * individual tables. The connection is established using the environment-specific connection string. - * The TableServiceClient is lazily initialized and can be re-initialized upon failures. - */ -class TableAccess : Logging { - - companion object { - - /** - * The environment variable that stores the connection string. - */ - private val defaultEnvVar = Environment.get().storageEnvVar - - /** - * Retrieves the Azure Storage connection string from environment variables. - * - * @return The connection string for Azure Storage. - */ - fun getConnectionString(): String = System.getenv(defaultEnvVar) - } - - private var tableServiceClient: TableServiceClient = buildClient() - - private fun buildClient(): TableServiceClient { - return TableServiceClientBuilder() - .connectionString(getConnectionString()) - .buildClient() - } - - fun reset() { - tableServiceClient = buildClient() - } - - /** - * Inserts a TableEntity into the specified table. - * - * If the table does not exist, it is created before inserting the entity. - * Logs the success or failure of the operation. - * - * @param tableName The name of the table where the entity will be inserted. - * @param entity The TableEntity to be inserted. - */ - @Synchronized - fun insertEntity(tableName: String, entity: TableEntity) { - try { - val tableClient = getOrCreateTableClient(tableName) - tableClient.createEntity(entity) - logger.info("Entity inserted successfully: ${entity.partitionKey} is ${entity.rowKey}") - } catch (e: TableServiceException) { - // Log the detailed error - logger.error("Failed to insert entity: ${entity.partitionKey} with ${entity.rowKey}", e) - } - } - - /** - * Retrieves a TableEntity from the specified table. - * - * This method fetches a TableEntity based on the given partition key and row key. - * If the table does not exist or an error occurs during the retrieval, the method logs the error and returns null. - * - * @param tableName The name of the table from which to retrieve the entity. - * @param partitionKey The partition key identifying the entity. - * @param rowKey The row key identifying the entity. - * @return The TableEntity if found, or null if an error occurs. - */ - @Synchronized - fun getEntity(tableName: String, partitionKey: String, rowKey: String): TableEntity? { - try { - val tableClient = getTableClient(tableName) - return tableClient?.getEntity(partitionKey, rowKey) - } catch (e: Exception) { - logger.error("Failed to find entity: $partitionKey with $rowKey", e) - return null - } - } - - /** - * Retrieves a TableClient for the specified table if it exists. - * - * This method checks if the table exists. If the table exists, it returns a TableClient for interacting with it. - * If the table does not exist or an error occurs, it logs the error and attempts to retry the operation after reinitializing the client. - * - * @param tableName The name of the table for which the client is needed. - * @return A TableClient for interacting with the specified table, or null if the table does not exist or an error occurs. - */ - private fun getTableClient(tableName: String): TableClient? { - val tableExists = tableServiceClient.listTables().any { it.name == tableName } - return if (tableExists) { - tableServiceClient.getTableClient(tableName) - } else { - null - } - } - - /** - * Retrieves or creates a TableClient for the specified table. - * - * If the table does not exist, it is created, and a TableClient is returned for the newly created table. - * - * @param tableName The name of the table for which the client is needed. - * @return A TableClient for interacting with the specified table. - */ - private fun getOrCreateTableClient(tableName: String): TableClient { - val tableClient = getTableClient(tableName) - return tableClient ?: run { - tableServiceClient.createTable(tableName) - tableServiceClient.getTableClient(tableName) - } - } -} \ No newline at end of file diff --git a/prime-router/src/main/kotlin/azure/ValidateSchemasFunctions.kt b/prime-router/src/main/kotlin/azure/ValidateSchemasFunctions.kt index 1a93cccecaa..2eb750bbfbc 100644 --- a/prime-router/src/main/kotlin/azure/ValidateSchemasFunctions.kt +++ b/prime-router/src/main/kotlin/azure/ValidateSchemasFunctions.kt @@ -29,7 +29,7 @@ class ValidateSchemasFunctions : Logging { path = "metadata/fhir_transforms/validating.txt" ) @Suppress("UNUSED_PARAMETER") content: Array, ) { - val blobConnectionString = Environment.get().storageEnvVar + val blobConnectionString = Environment.get().blobEnvVar val blobContainerMetadata: BlobAccess.BlobContainerMetadata = BlobAccess.BlobContainerMetadata.build("metadata", blobConnectionString) validateSchemaChanges(TranslationSchemaManager.SchemaType.FHIR, blobContainerMetadata) @@ -48,7 +48,7 @@ class ValidateSchemasFunctions : Logging { path = "metadata/hl7_mapping/validating.txt" ) @Suppress("UNUSED_PARAMETER") content: Array, ) { - val blobConnectionString = Environment.get().storageEnvVar + val blobConnectionString = Environment.get().blobEnvVar val blobContainerMetadata: BlobAccess.BlobContainerMetadata = BlobAccess.BlobContainerMetadata.build("metadata", blobConnectionString) validateSchemaChanges(TranslationSchemaManager.SchemaType.HL7, blobContainerMetadata) diff --git a/prime-router/src/main/kotlin/azure/WorkflowEngine.kt b/prime-router/src/main/kotlin/azure/WorkflowEngine.kt index 7f79e289a97..e8f8a5c095e 100644 --- a/prime-router/src/main/kotlin/azure/WorkflowEngine.kt +++ b/prime-router/src/main/kotlin/azure/WorkflowEngine.kt @@ -198,11 +198,7 @@ class WorkflowEngine( Event.EventAction.RECEIVE ) - actionHistory.trackExternalInputReport( - report, - blobInfo, - payloadName - ) + actionHistory.trackExternalInputReport(report, blobInfo, payloadName) return blobInfo } diff --git a/prime-router/src/main/kotlin/azure/batch/CovidBatchFunction.kt b/prime-router/src/main/kotlin/azure/batch/CovidBatchFunction.kt index 190d279d0d1..8eb1631e78c 100644 --- a/prime-router/src/main/kotlin/azure/batch/CovidBatchFunction.kt +++ b/prime-router/src/main/kotlin/azure/batch/CovidBatchFunction.kt @@ -35,7 +35,7 @@ class CovidBatchFunction( ) { try { logger.trace("CovidBatchFunction starting. Message: $message") - val event = Event.parsePrimeRouterQueueMessage(message) as BatchEvent + val event = Event.parseQueueMessage(message) as BatchEvent if (event.eventAction != Event.EventAction.BATCH) { logger.error("CovidBatchFunction received a $message") return diff --git a/prime-router/src/main/kotlin/azure/batch/UniversalBatchFunction.kt b/prime-router/src/main/kotlin/azure/batch/UniversalBatchFunction.kt index 34b13969ac6..40c579a482e 100644 --- a/prime-router/src/main/kotlin/azure/batch/UniversalBatchFunction.kt +++ b/prime-router/src/main/kotlin/azure/batch/UniversalBatchFunction.kt @@ -37,7 +37,7 @@ class UniversalBatchFunction( ) { try { logger.trace("UniversalBatchFunction starting. Message: $message") - val event = Event.parsePrimeRouterQueueMessage(message) as BatchEvent + val event = Event.parseQueueMessage(message) as BatchEvent if (event.eventAction != Event.EventAction.BATCH) { logger.error("UniversalBatchFunction received a $message") return diff --git a/prime-router/src/main/kotlin/azure/observability/event/ReportStreamEventBuilder.kt b/prime-router/src/main/kotlin/azure/observability/event/ReportStreamEventBuilder.kt index f7ed5a649e3..e309e476e3f 100644 --- a/prime-router/src/main/kotlin/azure/observability/event/ReportStreamEventBuilder.kt +++ b/prime-router/src/main/kotlin/azure/observability/event/ReportStreamEventBuilder.kt @@ -33,7 +33,7 @@ abstract class AbstractReportStreamEventBuilder( private val name: ReportStreamEventName, private val childReportId: UUID, private val childBodyUrl: String, - private val theTopic: Topic?, + private val theTopic: Topic, private val pipelineStepName: TaskAction, ) : Logging { @@ -119,7 +119,7 @@ open class ReportStreamReportEventBuilder( theName: ReportStreamEventName, childReportId: UUID, childBodyUrl: String, - theTopic: Topic?, + theTopic: Topic, pipelineStepName: TaskAction, ) : AbstractReportStreamEventBuilder( reportEventService, @@ -210,7 +210,7 @@ class ReportStreamReportProcessingErrorEventBuilder( theName: ReportStreamEventName, childReportId: UUID, childBodyUrl: String, - theTopic: Topic?, + theTopic: Topic, pipelineStepName: TaskAction, private val error: String, ) : ReportStreamReportEventBuilder( diff --git a/prime-router/src/main/kotlin/azure/observability/event/ReportStreamEventData.kt b/prime-router/src/main/kotlin/azure/observability/event/ReportStreamEventData.kt index b527e8a1466..8528915f54d 100644 --- a/prime-router/src/main/kotlin/azure/observability/event/ReportStreamEventData.kt +++ b/prime-router/src/main/kotlin/azure/observability/event/ReportStreamEventData.kt @@ -83,7 +83,6 @@ enum class ReportStreamEventName { ITEM_FILTER_FAILED, REPORT_SENT, REPORT_RECEIVED, - REPORT_NOT_RECEIVABLE, ITEM_ROUTED, REPORT_LAST_MILE_FAILURE, REPORT_NOT_PROCESSABLE, diff --git a/prime-router/src/main/kotlin/azure/observability/event/ReportStreamEventService.kt b/prime-router/src/main/kotlin/azure/observability/event/ReportStreamEventService.kt index d8c37ac8ddb..a3964c6f56f 100644 --- a/prime-router/src/main/kotlin/azure/observability/event/ReportStreamEventService.kt +++ b/prime-router/src/main/kotlin/azure/observability/event/ReportStreamEventService.kt @@ -1,7 +1,6 @@ package gov.cdc.prime.router.azure.observability.event import gov.cdc.prime.router.Report -import gov.cdc.prime.router.ReportId import gov.cdc.prime.router.Topic import gov.cdc.prime.router.azure.DatabaseAccess import gov.cdc.prime.router.azure.db.enums.TaskAction @@ -85,25 +84,6 @@ interface IReportStreamEventService { initializer: ReportStreamReportProcessingErrorEventBuilder.() -> Unit, ) - /** - * Creates a general processing error event. This is not associated with a report or item. - * - * @param eventName the business event value from [ReportStreamEventName] - * @param pipelineStepName the pipeline step that is emitting the event - * @param error the error description - * @param submissionId the report id for the incoming report - * @param bodyUrl the blob url for the incoming report - * @param initializer additional data to initialize the creation of the event. See [AbstractReportStreamEventBuilder] - */ - fun sendSubmissionProcessingError( - eventName: ReportStreamEventName, - pipelineStepName: TaskAction, - error: String, - submissionId: ReportId, - bodyUrl: String, - initializer: ReportStreamReportProcessingErrorEventBuilder.() -> Unit, - ) - /** * Creates an item event from an [Report] * @@ -172,7 +152,7 @@ interface IReportStreamEventService { * Retrieves data about the input and output report for a particular pipeline step * * @param childReportId the id of the ReportFile - * @param childBodyUrl the blob URL for the output report + * @param childBodyUrl the blob URL for the ouput report * @param parentReportId the optional parent report id. A report outputted from the ReportFunction will not have a parent * @param pipelineStepName the pipeline step that is generated the child report * @param topic the [Topic] that the report is in @@ -183,7 +163,7 @@ interface IReportStreamEventService { childBodyUrl: String, parentReportId: UUID?, pipelineStepName: TaskAction, - topic: Topic?, + topic: Topic, ): ReportEventData /** @@ -295,28 +275,6 @@ class ReportStreamEventService( ).send() } - override fun sendSubmissionProcessingError( - eventName: ReportStreamEventName, - pipelineStepName: TaskAction, - error: String, - submissionId: ReportId, - bodyUrl: String, - initializer: ReportStreamReportProcessingErrorEventBuilder.() -> Unit, - ) { - ReportStreamReportProcessingErrorEventBuilder( - this, - azureEventService, - eventName, - submissionId, - bodyUrl, - theTopic = null, - pipelineStepName, - error - ).apply( - initializer - ).send() - } - override fun sendItemEvent( eventName: ReportStreamEventName, childReport: Report, @@ -394,7 +352,7 @@ class ReportStreamEventService( childBodyUrl: String, parentReportId: UUID?, pipelineStepName: TaskAction, - topic: Topic?, + topic: Topic, ): ReportEventData { val submittedReportIds = if (parentReportId != null) { val rootReports = reportService.getRootReports(parentReportId) diff --git a/prime-router/src/main/kotlin/cli/ConvertFileCommands.kt b/prime-router/src/main/kotlin/cli/ConvertFileCommands.kt index bc3268c59cd..59f1408b7c1 100644 --- a/prime-router/src/main/kotlin/cli/ConvertFileCommands.kt +++ b/prime-router/src/main/kotlin/cli/ConvertFileCommands.kt @@ -74,8 +74,6 @@ class ConvertFileCommands( inputFile.inputStream(), FileSource(inputFile.nameWithoutExtension) ).report - // Throws exception if itemCount is null - checkNotNull(report.itemCount) { "Input file has no items" } val fields = fieldNames.split(",") val rows = mutableListOf>() for (i in 0 until report.itemCount) { diff --git a/prime-router/src/main/kotlin/cli/PIIRemovalCommands.kt b/prime-router/src/main/kotlin/cli/PIIRemovalCommands.kt index 6a9c48aac39..c74cb829cc1 100644 --- a/prime-router/src/main/kotlin/cli/PIIRemovalCommands.kt +++ b/prime-router/src/main/kotlin/cli/PIIRemovalCommands.kt @@ -1,6 +1,5 @@ package gov.cdc.prime.router.cli -import com.fasterxml.jackson.databind.json.JsonMapper import com.github.ajalt.clikt.core.CliktCommand import com.github.ajalt.clikt.core.CliktError import com.github.ajalt.clikt.parameters.options.option @@ -57,16 +56,8 @@ class PIIRemovalCommands : CliktCommand( if (inputFile.extension.uppercase() != "FHIR") { throw CliktError("File ${inputFile.absolutePath} is not a FHIR file.") } - val bundle = FhirTranscoder.decode(contents) + var bundle = FhirTranscoder.decode(contents) - // Write the output to the screen or a file. - if (outputFile != null) { - outputFile!!.writeText(removePii(bundle), Charsets.UTF_8) - } - echo("Wrote output to ${outputFile!!.absolutePath}") - } - - fun removePii(bundle: Bundle): String { bundle.entry.map { it.resource }.filterIsInstance() .forEach { patient -> patient.name.forEach { name -> @@ -85,16 +76,16 @@ class PIIRemovalCommands : CliktCommand( bundle.entry.map { it.resource }.filterIsInstance() .forEach { organization -> - organization.address.forEach { address -> - address.line = mutableListOf(StringType(getFakeValueForElementCall("STREET"))) - } - organization.telecom.forEach { telecom -> - handleTelecom(telecom) - } - organization.contact.forEach { contact -> - handleOrganizationalContact(contact) - } + organization.address.forEach { address -> + address.line = mutableListOf(StringType(getFakeValueForElementCall("STREET"))) + } + organization.telecom.forEach { telecom -> + handleTelecom(telecom) + } + organization.contact.forEach { contact -> + handleOrganizationalContact(contact) } + } bundle.entry.map { it.resource }.filterIsInstance() .forEach { practitioner -> @@ -112,14 +103,18 @@ class PIIRemovalCommands : CliktCommand( } } - val bundleAfterTransform = FhirTransformer( - "classpath:/metadata/fhir_transforms/common/remove-pii-enrichment.yml" - ).process(bundle) + bundle = FhirTransformer("classpath:/metadata/fhir_transforms/common/remove-pii-enrichment.yml").process(bundle) val jsonObject = JacksonMapperUtilities.defaultMapper - .readValue(FhirTranscoder.encode(bundleAfterTransform), Any::class.java) - val prettyText = JsonMapper.builder().build().writeValueAsString(jsonObject) - return replaceIds(bundleAfterTransform, prettyText) + .readValue(FhirTranscoder.encode(bundle), Any::class.java) + var prettyText = JacksonMapperUtilities.defaultMapper.writeValueAsString(jsonObject) + prettyText = replaceIds(bundle, prettyText) + + // Write the output to the screen or a file. + if (outputFile != null) { + outputFile!!.writeText(prettyText, Charsets.UTF_8) + } + echo("Wrote output to ${outputFile!!.absolutePath}") } /** @@ -190,10 +185,8 @@ class PIIRemovalCommands : CliktCommand( bundle, path ).forEach { resourceId -> - if (resourceId.primitiveValue() != null) { - val newIdentifier = getFakeValueForElementCall("UUID") - return prettyText.replace(resourceId.primitiveValue(), newIdentifier, true) - } + val newIdentifier = getFakeValueForElementCall("UUID") + return prettyText.replace(resourceId.primitiveValue(), newIdentifier, true) } return prettyText } diff --git a/prime-router/src/main/kotlin/cli/ProcessFhirCommands.kt b/prime-router/src/main/kotlin/cli/ProcessFhirCommands.kt index 32321a12871..95b2ebf85f4 100644 --- a/prime-router/src/main/kotlin/cli/ProcessFhirCommands.kt +++ b/prime-router/src/main/kotlin/cli/ProcessFhirCommands.kt @@ -18,13 +18,8 @@ import fhirengine.engine.CustomFhirPathFunctions import fhirengine.engine.CustomTranslationFunctions import gov.cdc.prime.router.ActionLogger import gov.cdc.prime.router.Hl7Configuration -import gov.cdc.prime.router.Metadata import gov.cdc.prime.router.MimeFormat -import gov.cdc.prime.router.Receiver import gov.cdc.prime.router.azure.BlobAccess -import gov.cdc.prime.router.azure.ConditionStamper -import gov.cdc.prime.router.azure.LookupTableConditionMapper -import gov.cdc.prime.router.cli.CommandUtilities.Companion.abort import gov.cdc.prime.router.cli.helpers.HL7DiffHelper import gov.cdc.prime.router.common.Environment import gov.cdc.prime.router.common.JacksonMapperUtilities @@ -38,7 +33,6 @@ import gov.cdc.prime.router.fhirengine.translation.hl7.utils.CustomContext import gov.cdc.prime.router.fhirengine.translation.hl7.utils.FhirPathUtils import gov.cdc.prime.router.fhirengine.utils.FhirTranscoder import gov.cdc.prime.router.fhirengine.utils.HL7Reader -import gov.cdc.prime.router.fhirengine.utils.getObservations import org.hl7.fhir.r4.model.Base import org.hl7.fhir.r4.model.Bundle import org.hl7.fhir.r4.model.Extension @@ -69,7 +63,7 @@ class ProcessFhirCommands : CliktCommand( * The format to output the data. */ private val outputFormat by option("--output-format", help = "output format") - .choice(MimeFormat.HL7.toString(), MimeFormat.FHIR.toString()) + .choice(MimeFormat.HL7.toString(), MimeFormat.FHIR.toString()).required() /** * String of file names @@ -91,27 +85,6 @@ class ProcessFhirCommands : CliktCommand( "-r", "--receiver-schema", help = "Receiver schema location. Required for HL7 output." ) - /** - * Name of the receiver settings to use - */ - private val receiverName by option( - "--receiver-name", help = "Name of the receiver settings to use" - ) - - /** - * Name of the org settings to use - */ - private val orgName by option( - "--org", help = "Name of the org settings to use" - ) - - /** - * Environment that specifies where to get the receiver settings - */ - private val environment by option( - "--receiver-setting-env", help = "Environment that specifies where to get the receiver settings" - ) - /** * Sender schema location */ @@ -130,81 +103,29 @@ class ProcessFhirCommands : CliktCommand( val actionLogger = ActionLogger() // Check on the extension of the file for supported operations val inputFileType = inputFile.extension.uppercase() - val receiver = getReceiver() - when { // HL7 to FHIR conversion - inputFileType == "HL7" && ( - outputFormat == MimeFormat.FHIR.toString() || - (receiver != null && receiver.format == MimeFormat.FHIR) - ) -> { + inputFileType == "HL7" && outputFormat == MimeFormat.FHIR.toString() -> { var fhirMessage = convertHl7ToFhir(contents).first fhirMessage = applyEnrichmentSchemas(fhirMessage) - if (receiver != null && receiver.enrichmentSchemaNames.isNotEmpty()) { - receiver.enrichmentSchemaNames.forEach { currentSchema -> - fhirMessage = FhirTransformer(currentSchema).process(fhirMessage) - } - } outputResult( handleSenderAndReceiverTransforms(fhirMessage), actionLogger ) } // FHIR to HL7 conversion - (inputFileType == "FHIR" || inputFileType == "JSON") && ( - outputFormat == MimeFormat.HL7.toString() || - (receiver != null && receiver.format == MimeFormat.HL7) - ) -> { - if (receiver == null) { - return outputResult(convertFhirToHl7(contents)) - } - - var bundle = FhirTranscoder.decode(contents) - if (receiver.enrichmentSchemaNames.isNotEmpty()) { - receiver.enrichmentSchemaNames.forEach { currentSchema -> - bundle = FhirTransformer(currentSchema).process(bundle) - } - } - outputResult( - convertFhirToHl7( - FhirTranscoder.encode(bundle), - receiver.translation as Hl7Configuration, - receiver - ) - ) + (inputFileType == "FHIR" || inputFileType == "JSON") && outputFormat == MimeFormat.HL7.toString() -> { + outputResult(convertFhirToHl7(contents)) } // FHIR to FHIR conversion - (inputFileType == "FHIR" || inputFileType == "JSON") && ( - outputFormat == MimeFormat.FHIR.toString() || - (receiver != null && receiver.format == MimeFormat.FHIR) - ) -> { - var bundle = FhirTranscoder.decode(contents) - if (receiver != null) { - if (receiver.enrichmentSchemaNames.isNotEmpty()) { - receiver.enrichmentSchemaNames.forEach { currentSchema -> - bundle = FhirTransformer(currentSchema).process(bundle) - } - } - } - outputResult(convertFhirToFhir(FhirTranscoder.encode(bundle)), actionLogger) + (inputFileType == "FHIR" || inputFileType == "JSON") && outputFormat == MimeFormat.FHIR.toString() -> { + outputResult(convertFhirToFhir(contents), actionLogger) } // HL7 to FHIR to HL7 conversion - inputFileType == "HL7" && ( - outputFormat == MimeFormat.HL7.toString() || - (receiver != null && receiver.format == MimeFormat.HL7) - ) -> { - var (bundle, inputMessage) = convertHl7ToFhir(contents) - - if (receiver != null) { - if (receiver.enrichmentSchemaNames.isNotEmpty()) { - receiver.enrichmentSchemaNames.forEach { currentSchema -> - bundle = FhirTransformer(currentSchema).process(bundle) - } - } - } - + inputFileType == "HL7" && outputFormat == MimeFormat.HL7.toString() -> { + val (bundle, inputMessage) = convertHl7ToFhir(contents) val output = convertFhirToHl7(FhirTranscoder.encode(bundle)) outputResult(output) if (diffHl7Output != null) { @@ -219,103 +140,41 @@ class ProcessFhirCommands : CliktCommand( } } - fun getReceiver(): Receiver? { - if (!environment.isNullOrBlank() && !receiverName.isNullOrBlank() && !orgName.isNullOrBlank()) { - if (!outputFormat.isNullOrBlank()) { - throw CliktError( - "Please specify either a receiver OR an output format. Not both." - ) - } - val foundEnvironment = Environment.get(environment!!) - val accessToken = OktaCommand.fetchAccessToken(foundEnvironment.oktaApp) - ?: abort( - "Invalid access token. " + - "Run ./prime login to fetch/refresh your access " + - "token for the $foundEnvironment environment." - ) - val organizations = GetMultipleSettings().getAll( - environment = foundEnvironment, - accessToken = accessToken, - specificOrg = orgName, - exactMatch = true - ) - - val receivers = organizations[0].receivers.filter { receiver -> receiver.name == receiverName } - if (receivers.isNotEmpty()) { - return receivers[0] - } - } else if (outputFormat.isNullOrBlank()) { - throw CliktError( - "Output format is required if the environment, receiver, and org " + - "are not specified. " - ) - } - return null - } - - private val defaultHL7Configuration = Hl7Configuration( - receivingApplicationOID = null, - receivingFacilityOID = null, - messageProfileId = null, - receivingApplicationName = null, - receivingFacilityName = null, - receivingOrganization = null, - ) - /** * Convert a FHIR bundle as a [jsonString] to an HL7 message. * @return an HL7 message */ - private fun convertFhirToHl7( - jsonString: String, - hl7Configuration: Hl7Configuration = defaultHL7Configuration, - receiver: Receiver? = null, - ): Message { + private fun convertFhirToHl7(jsonString: String): Message { var fhirMessage = FhirTranscoder.decode(jsonString) fhirMessage = applyEnrichmentSchemas(fhirMessage) return when { - receiverSchema == null && (receiver == null || receiver.schemaName.isBlank()) -> + receiverSchema == null -> // Receiver schema required because if it's coming out as HL7, it would be getting any transform info // for that from a receiver schema. - throw CliktError("You must specify a receiver schema using --receiver-schema.") + throw CliktError(" You must specify a receiver schema using --receiver-schema.") - receiverSchema != null -> { + else -> { val bundle = applySenderTransforms(fhirMessage) - val stamper = ConditionStamper(LookupTableConditionMapper(Metadata.getInstance())) - fhirMessage.getObservations().forEach { observation -> - stamper.stampObservation(observation) - } FhirToHl7Converter( receiverSchema!!, - BlobAccess.BlobContainerMetadata.build("metadata", Environment.get().storageEnvVar), + BlobAccess.BlobContainerMetadata.build("metadata", Environment.get().blobEnvVar), context = FhirToHl7Context( CustomFhirPathFunctions(), config = HL7TranslationConfig( - hl7Configuration, - receiver + Hl7Configuration( + receivingApplicationOID = null, + receivingFacilityOID = null, + messageProfileId = null, + receivingApplicationName = null, + receivingFacilityName = null, + receivingOrganization = null, + ), + null ), translationFunctions = CustomTranslationFunctions(), ) ).process(bundle) } - receiver != null && receiver.schemaName.isNotBlank() -> { - val bundle = applySenderTransforms(fhirMessage) - FhirToHl7Converter( - receiver.schemaName, - BlobAccess.BlobContainerMetadata.build("metadata", Environment.get().storageEnvVar), - context = FhirToHl7Context( - CustomFhirPathFunctions(), - config = HL7TranslationConfig( - hl7Configuration, - receiver - ), - translationFunctions = CustomTranslationFunctions(), - ) - ).process(bundle) - } - else -> { - throw CliktError("Error state reached when trying to apply the transforms.") - } } } @@ -324,10 +183,6 @@ class ProcessFhirCommands : CliktCommand( */ private fun convertFhirToFhir(jsonString: String): Bundle { var fhirMessage = FhirTranscoder.decode(jsonString) - val stamper = ConditionStamper(LookupTableConditionMapper(Metadata.getInstance())) - fhirMessage.getObservations().forEach { observation -> - stamper.stampObservation(observation) - } fhirMessage = applyEnrichmentSchemas(fhirMessage) if (receiverSchema == null && senderSchema == null) { // Must have at least one schema or else why are you doing this @@ -365,17 +220,10 @@ class ProcessFhirCommands : CliktCommand( } val hl7profile = HL7Reader.getMessageProfile(hl7message.toString()) // search hl7 profile map and create translator with config path if found - val fhirMessage = when (val configPath = HL7Reader.profileDirectoryMap[hl7profile]) { - null -> HL7toFhirTranslator(inputSchema).translate(hl7message) - else -> HL7toFhirTranslator(configPath).translate(hl7message) + return when (val configPath = HL7Reader.profileDirectoryMap[hl7profile]) { + null -> Pair(HL7toFhirTranslator(inputSchema).translate(hl7message), hl7message) + else -> Pair(HL7toFhirTranslator(configPath).translate(hl7message), hl7message) } - - val stamper = ConditionStamper(LookupTableConditionMapper(Metadata.getInstance())) - fhirMessage.getObservations().forEach { observation -> - stamper.stampObservation(observation) - } - - return Pair(fhirMessage, hl7message) } /** diff --git a/prime-router/src/main/kotlin/cli/SettingCommands.kt b/prime-router/src/main/kotlin/cli/SettingCommands.kt index 6df51ce8d49..676fb373112 100644 --- a/prime-router/src/main/kotlin/cli/SettingCommands.kt +++ b/prime-router/src/main/kotlin/cli/SettingCommands.kt @@ -1049,22 +1049,12 @@ class GetMultipleSettings : SettingCommand( } } - fun getAll( - environment: Environment, - accessToken: String = oktaAccessToken, - specificOrg: String? = filter, - exactMatch: Boolean = false, - ): List { + private fun getAll(environment: Environment, accessToken: String): List { // get organizations val organizationJson = getMany(environment, accessToken, SettingType.ORGANIZATION, settingName = "") var organizations = jsonMapper.readValue(organizationJson, Array::class.java) - if (specificOrg != null) { - if (!exactMatch) { - organizations = - organizations.filter { it.name.startsWith(specificOrg, ignoreCase = true) }.toTypedArray() - } else { - organizations = organizations.filter { it.name.equals(specificOrg, ignoreCase = true) }.toTypedArray() - } + if (filter != null) { + organizations = organizations.filter { it.name.startsWith(filter!!, ignoreCase = true) }.toTypedArray() } // get senders and receivers per org diff --git a/prime-router/src/main/kotlin/cli/tests/BasicTests.kt b/prime-router/src/main/kotlin/cli/tests/BasicTests.kt index 25333e9bc11..428e97c2df2 100644 --- a/prime-router/src/main/kotlin/cli/tests/BasicTests.kt +++ b/prime-router/src/main/kotlin/cli/tests/BasicTests.kt @@ -205,7 +205,7 @@ class End2EndUniversalPipeline : CoolTest() { expectedResults: List>, ): Boolean { var passed = true - val blobConnectionString = Environment.get().storageEnvVar + val blobConnectionString = Environment.get().blobEnvVar val blobContainerMetadata: BlobAccess.BlobContainerMetadata = BlobAccess.BlobContainerMetadata.build("reports", blobConnectionString) diff --git a/prime-router/src/main/kotlin/cli/tests/RemovePIITest.kt b/prime-router/src/main/kotlin/cli/tests/RemovePIITest.kt index ffe7cb3b1bb..f8ba88c2d41 100644 --- a/prime-router/src/main/kotlin/cli/tests/RemovePIITest.kt +++ b/prime-router/src/main/kotlin/cli/tests/RemovePIITest.kt @@ -16,8 +16,6 @@ import org.hl7.fhir.r4.model.ServiceRequest import org.hl7.fhir.r4.model.Specimen import java.io.File import java.nio.file.Paths -import kotlin.io.path.Path -import kotlin.io.path.deleteIfExists class RemovePIITest : CoolTest() { /** @@ -43,10 +41,9 @@ class RemovePIITest : CoolTest() { */ override suspend fun run(environment: Environment, options: CoolTestOptions): Boolean { ugly("Starting remove PII test") - val inputFilePath = Paths.get("").toAbsolutePath().toString() + - "/src/main/resources/clitests/compare-test-files/fakePII.fhir" + val inputFilePath = Paths.get("").toAbsolutePath().toString() + "/src/main/kotlin/cli/tests/fakePII.fhir" val outputFilePath = Paths.get("").toAbsolutePath().toString() + - "/src/main/resources/clitests/compare-test-files/piiRemoved.fhir" + "/src/main/kotlin/cli/tests/piiRemoved.fhir" PIIRemovalCommands().test( "-i $inputFilePath -o $outputFilePath" @@ -59,48 +56,40 @@ class RemovePIITest : CoolTest() { if (!testIdsRemoved(inputBundle, outputContent)) { ugly("Not all IDs removed. Test failed.") - Path(outputFilePath).deleteIfExists() return false } if (!testPatientPIIRemoved(inputBundle, outputBundle)) { ugly("Not all patient PII removed. Test failed.") - Path(outputFilePath).deleteIfExists() return false } if (!testOrganizationPIIRemoved(inputBundle, outputBundle)) { ugly("Not all organization PII removed. Test failed.") - Path(outputFilePath).deleteIfExists() return false } if (!testPractitionerPIIRemoved(inputBundle, outputBundle)) { ugly("Not all practitioner PII removed. Test failed.") - Path(outputFilePath).deleteIfExists() return false } if (!testServiceRequestPIIRemoved(inputBundle, outputBundle)) { ugly("Not all service request PII removed. Test failed.") - Path(outputFilePath).deleteIfExists() return false } if (!testObservationPIIRemoved(inputBundle, outputBundle)) { ugly("Not all observation PII removed. Test failed.") - Path(outputFilePath).deleteIfExists() return false } if (!testSpecimenPIIRemoved(inputBundle, outputBundle)) { ugly("Not all specimen PII removed. Test failed.") - Path(outputFilePath).deleteIfExists() return false } ugly("PII removal test passed") - Path(outputFilePath).deleteIfExists() return true } diff --git a/prime-router/src/main/kotlin/cli/tests/SyncTranslationSchemasTest.kt b/prime-router/src/main/kotlin/cli/tests/SyncTranslationSchemasTest.kt index 6c40638fb58..1e752c9f71b 100644 --- a/prime-router/src/main/kotlin/cli/tests/SyncTranslationSchemasTest.kt +++ b/prime-router/src/main/kotlin/cli/tests/SyncTranslationSchemasTest.kt @@ -30,15 +30,13 @@ class SyncTranslationSchemasTest : CoolTest() { private val destinationConnectionString = "DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;" + "AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;" + - "BlobEndpoint=http://localhost:10000/devstoreaccount1;QueueEndpoint=http://localhost:10001/devstoreaccount1;" + - "TableEndpoint=http://127.0.0.1:10002/devstoreaccount1;" + "BlobEndpoint=http://localhost:10000/devstoreaccount1;QueueEndpoint=http://localhost:10001/devstoreaccount1;" @Suppress("ktlint:standard:max-line-length") private val sourceConnectionString = "DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;" + "AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;" + - "BlobEndpoint=http://localhost:11000/devstoreaccount1;QueueEndpoint=http://localhost:11001/devstoreaccount1;" + - "TableEndpoint=http://127.0.0.1:10002/devstoreaccount1;" + "BlobEndpoint=http://localhost:11000/devstoreaccount1;QueueEndpoint=http://localhost:11001/devstoreaccount1;" private fun setupCleanState( sourceBlobContainerMetadata: BlobAccess.BlobContainerMetadata, diff --git a/prime-router/src/main/resources/clitests/compare-test-files/fakePII.fhir b/prime-router/src/main/kotlin/cli/tests/fakePII.fhir similarity index 100% rename from prime-router/src/main/resources/clitests/compare-test-files/fakePII.fhir rename to prime-router/src/main/kotlin/cli/tests/fakePII.fhir diff --git a/prime-router/src/main/kotlin/common/AzureHttpUtils.kt b/prime-router/src/main/kotlin/common/AzureHttpUtils.kt index 211fd6a8c4c..ec9e3f89d7e 100644 --- a/prime-router/src/main/kotlin/common/AzureHttpUtils.kt +++ b/prime-router/src/main/kotlin/common/AzureHttpUtils.kt @@ -3,19 +3,8 @@ package gov.cdc.prime.router.common import com.microsoft.azure.functions.HttpRequestMessage import gov.cdc.prime.router.azure.db.Tables -/** - * Utility object that provides methods for handling Azure HTTP requests. - * This object contains helper functions to extract the sender's IP address - * from HTTP request headers. - */ object AzureHttpUtils { - /** - * Retrieves the sender's IP address from an [HttpRequestMessage]. - * - * @param request The HTTP request message from which to extract the sender's IP address. - * @return The sender's IP address as a [String], or `null` if not found. - */ fun getSenderIP(request: HttpRequestMessage<*>): String? { return ( ( @@ -24,19 +13,4 @@ object AzureHttpUtils { )?.take(Tables.ACTION.SENDER_IP.dataType.length()) ?: request.headers["x-azure-clientip"] ) } - - /** - * Retrieves the sender's IP address from a map of HTTP headers. - * - * @param headers A map of HTTP headers from which to extract the sender's IP address. - * @return The sender's IP address as a [String], or `null` if not found. - */ - fun getSenderIP(headers: Map): String? { - return ( - ( - headers["x-forwarded-for"]?.split(",") - ?.firstOrNull() - )?.take(Tables.ACTION.SENDER_IP.dataType.length()) ?: headers["x-azure-clientip"] - ) - } } \ No newline at end of file diff --git a/prime-router/src/main/kotlin/common/Environment.kt b/prime-router/src/main/kotlin/common/Environment.kt index 2cae4d3c817..2ca09e075f0 100644 --- a/prime-router/src/main/kotlin/common/Environment.kt +++ b/prime-router/src/main/kotlin/common/Environment.kt @@ -12,7 +12,7 @@ enum class Environment( val envName: String, val url: URL, val oktaApp: OktaCommand.OktaApp? = null, - val storageEnvVar: String = "AzureWebJobsStorage", + val blobEnvVar: String = "AzureWebJobsStorage", ) { LOCAL( "local", diff --git a/prime-router/src/main/kotlin/common/piiremoved.json b/prime-router/src/main/kotlin/common/piiremoved.json deleted file mode 100644 index 13866b5888f..00000000000 --- a/prime-router/src/main/kotlin/common/piiremoved.json +++ /dev/null @@ -1,1930 +0,0 @@ -{ - "resourceType": { - "isString": true, - "content": "Bundle", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "identifier": { - "value": { - "isString": true, - "content": "e9941fc2-6096-48a6-8b75-15e91dc80ca7", - "coerceToInlineType$kotlinx_serialization_json": null - } - }, - "type": { - "isString": true, - "content": "message", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "timestamp": { - "isString": true, - "content": "2023-10-18T22:20:22.347Z", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "entry": [ - { - "fullUrl": { - "isString": true, - "content": "MessageHeader/c7414da3-edc1-4a3e-9c5c-8d7a8e5cf775", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "resource": { - "resourceType": { - "isString": true, - "content": "MessageHeader", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "id": { - "isString": true, - "content": "c7414da3-edc1-4a3e-9c5c-8d7a8e5cf775", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "meta": { - "tag": [ - { - "system": { - "isString": true, - "content": "http://terminology.hl7.org/CodeSystem/v2-0103", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "code": { - "isString": true, - "content": "T", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "display": { - "isString": true, - "content": "Training", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ] - }, - "eventCoding": { - "system": { - "isString": true, - "content": "http://terminology.hl7.org/CodeSystem/v2-0003", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "code": { - "isString": true, - "content": "R01", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "display": { - "isString": true, - "content": "ORU/ACK - Unsolicited transmission of an observation message", - "coerceToInlineType$kotlinx_serialization_json": null - } - }, - "destination": [ - { - "name": { - "isString": true, - "content": "PRIME ReportStream", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "endpoint": { - "isString": true, - "content": "https://prime.cdc.gov/api/reports?option=SkipInvalidItems", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ], - "sender": { - "reference": { - "isString": true, - "content": "Organization/9e22cfde-e704-4922-a247-b1a6ac0f43bc", - "coerceToInlineType$kotlinx_serialization_json": null - } - }, - "source": { - "extension": [ - { - "url": { - "isString": true, - "content": "https://reportstream.cdc.gov/fhir/StructureDefinition/software-binary-id", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "valueString": { - "isString": true, - "content": "e3d085e", - "coerceToInlineType$kotlinx_serialization_json": null - } - }, - { - "url": { - "isString": true, - "content": "https://reportstream.cdc.gov/fhir/StructureDefinition/software-install-date", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "valueInstant": { - "isString": true, - "content": "2023-10-18T21:06:03Z", - "coerceToInlineType$kotlinx_serialization_json": null - } - }, - { - "url": { - "isString": true, - "content": "https://reportstream.cdc.gov/fhir/StructureDefinition/software-vendor-org", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "valueReference": { - "reference": { - "isString": true, - "content": "Organization/07640c5d-87cd-488b-9343-a226c5166539", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - } - ], - "software": { - "isString": true, - "content": "PRIME SimpleReport", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "version": { - "isString": true, - "content": "e3d085e", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "endpoint": { - "isString": true, - "content": "https://simplereport.gov", - "coerceToInlineType$kotlinx_serialization_json": null - } - }, - "focus": [ - { - "reference": { - "isString": true, - "content": "Provenance/cad7f8ea-6bd0-417f-8efd-7154228654e8", - "coerceToInlineType$kotlinx_serialization_json": null - } - }, - { - "reference": { - "isString": true, - "content": "DiagnosticReport/e9941fc2-6096-48a6-8b75-15e91dc80ca7", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ] - } - }, - { - "fullUrl": { - "isString": true, - "content": "Provenance/cad7f8ea-6bd0-417f-8efd-7154228654e8", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "resource": { - "resourceType": { - "isString": true, - "content": "Provenance", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "id": { - "isString": true, - "content": "cad7f8ea-6bd0-417f-8efd-7154228654e8", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "recorded": { - "isString": true, - "content": "2023-10-18T22:20:22.347Z", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "activity": { - "coding": [ - { - "system": { - "isString": true, - "content": "http://terminology.hl7.org/CodeSystem/v2-0003", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "code": { - "isString": true, - "content": "R01", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "display": { - "isString": true, - "content": "ORU/ACK - Unsolicited transmission of an observation message", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ] - }, - "agent": [ - { - "who": { - "reference": { - "isString": true, - "content": "Organization/9e22cfde-e704-4922-a247-b1a6ac0f43bc", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - } - ] - } - }, - { - "fullUrl": { - "isString": true, - "content": "DiagnosticReport/e9941fc2-6096-48a6-8b75-15e91dc80ca7", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "resource": { - "resourceType": { - "isString": true, - "content": "DiagnosticReport", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "id": { - "isString": true, - "content": "e9941fc2-6096-48a6-8b75-15e91dc80ca7", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "identifier": [ - { - "value": { - "isString": true, - "content": "e9941fc2-6096-48a6-8b75-15e91dc80ca7", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ], - "basedOn": [ - { - "reference": { - "isString": true, - "content": "ServiceRequest/b0ba1f7e-f36e-4fc6-9f88-5ee8b3de58a1", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ], - "status": { - "isString": true, - "content": "final", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "code": { - "coding": [ - { - "system": { - "isString": true, - "content": "http://loinc.org", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "code": { - "isString": true, - "content": "95941-1", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ] - }, - "subject": { - "reference": { - "isString": true, - "content": "Patient/f23cff4a-971b-48d9-8d99-3890d390c3a4", - "coerceToInlineType$kotlinx_serialization_json": null - } - }, - "effectiveDateTime": { - "isString": true, - "content": "2023-10-18T22:05:20+00:00", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "issued": { - "isString": true, - "content": "2023-10-18T22:20:22+00:00", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "specimen": [ - { - "reference": { - "isString": true, - "content": "Specimen/52a582e4-d389-42d0-b738-bee51cf5244d", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ], - "result": [ - { - "reference": { - "isString": true, - "content": "Observation/29574070-adfc-4d53-a48f-5ddcc382614e", - "coerceToInlineType$kotlinx_serialization_json": null - } - }, - { - "reference": { - "isString": true, - "content": "Observation/99a3d501-90c1-467b-b4a3-568f5af5178d", - "coerceToInlineType$kotlinx_serialization_json": null - } - }, - { - "reference": { - "isString": true, - "content": "Observation/e7fdd44c-9625-469d-b891-7a7e706680a0", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ] - } - }, - { - "fullUrl": { - "isString": true, - "content": "Patient/f23cff4a-971b-48d9-8d99-3890d390c3a4", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "resource": { - "resourceType": { - "isString": true, - "content": "Patient", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "id": { - "isString": true, - "content": "f23cff4a-971b-48d9-8d99-3890d390c3a4", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "extension": [ - { - "url": { - "isString": true, - "content": "http://ibm.com/fhir/cdm/StructureDefinition/local-race-cd", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "valueCodeableConcept": { - "coding": [ - { - "system": { - "isString": true, - "content": "http://terminology.hl7.org/CodeSystem/v3-NullFlavor", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "code": { - "isString": true, - "content": "ASKU", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ], - "text": { - "isString": true, - "content": "refused", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - }, - { - "url": { - "isString": true, - "content": "https://reportstream.cdc.gov/fhir/StructureDefinition/ethnic-group", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "valueCodeableConcept": { - "coding": [ - { - "system": { - "isString": true, - "content": "http://terminology.hl7.org/CodeSystem/v2-0189", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "code": { - "isString": true, - "content": "N", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "display": { - "isString": true, - "content": "Not Hispanic or Latino", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ], - "text": { - "isString": true, - "content": "Not Hispanic or Latino", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - } - ], - "identifier": [ - { - "value": { - "isString": true, - "content": "f23cff4a-971b-48d9-8d99-3890d390c3a4", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ], - "name": [ - { - "family": { - "isString": true, - "content": " Feil", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "given": [ - { - "isString": true, - "content": "Meghann", - "coerceToInlineType$kotlinx_serialization_json": null - } - ] - } - ], - "telecom": [ - { - "system": { - "isString": true, - "content": "phone", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "value": { - "isString": true, - "content": "12755593677", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "use": { - "isString": true, - "content": "home", - "coerceToInlineType$kotlinx_serialization_json": null - } - }, - { - "system": { - "isString": true, - "content": "email", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "value": { - "isString": true, - "content": "AdrienneOlson@gmail.com", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "use": { - "isString": true, - "content": "home", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ], - "gender": { - "isString": true, - "content": "female", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "birthDate": { - "isString": true, - "content": "1968-01-20", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "address": [ - { - "line": [ - { - "isString": true, - "content": "3177 Purdy Hills", - "coerceToInlineType$kotlinx_serialization_json": null - } - ], - "city": { - "isString": true, - "content": "Boonville", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "district": { - "isString": true, - "content": "Dallas", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "state": { - "isString": true, - "content": "MO", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "postalCode": { - "isString": true, - "content": "65704", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "country": { - "isString": true, - "content": "USA", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ], - "managingOrganization": { - "reference": { - "isString": true, - "content": "Organization/9e22cfde-e704-4922-a247-b1a6ac0f43bc", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - } - }, - { - "fullUrl": { - "isString": true, - "content": "Organization/9e22cfde-e704-4922-a247-b1a6ac0f43bc", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "resource": { - "resourceType": { - "isString": true, - "content": "Organization", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "id": { - "isString": true, - "content": "9e22cfde-e704-4922-a247-b1a6ac0f43bc", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "identifier": [ - { - "use": { - "isString": true, - "content": "official", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "type": { - "coding": [ - { - "system": { - "isString": true, - "content": "http://terminology.hl7.org/CodeSystem/v2-0301", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "code": { - "isString": true, - "content": "CLIA", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ] - }, - "value": { - "isString": true, - "content": "12D3456789", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ], - "name": { - "isString": true, - "content": "Carl Potts", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "telecom": [ - { - "system": { - "isString": true, - "content": "phone", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "value": { - "isString": true, - "content": "12779455296", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "use": { - "isString": true, - "content": "work", - "coerceToInlineType$kotlinx_serialization_json": null - } - }, - { - "system": { - "isString": true, - "content": "email", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "value": { - "isString": true, - "content": "JacquettaShields@gmail.com", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "use": { - "isString": true, - "content": "work", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ], - "address": [ - { - "line": [ - { - "isString": true, - "content": "51877 Deckow Freeway", - "coerceToInlineType$kotlinx_serialization_json": null - } - ], - "city": { - "isString": true, - "content": "Chaffee", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "district": { - "isString": true, - "content": "Atchison", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "state": { - "isString": true, - "content": "MO", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "postalCode": { - "isString": true, - "content": "64504", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "country": { - "isString": true, - "content": "USA", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ] - } - }, - { - "fullUrl": { - "isString": true, - "content": "Practitioner/48db8ab7-c884-4cf7-9a4f-b5fe6efb37da", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "resource": { - "resourceType": { - "isString": true, - "content": "Practitioner", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "id": { - "isString": true, - "content": "48db8ab7-c884-4cf7-9a4f-b5fe6efb37da", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "name": [ - { - "family": { - "isString": true, - "content": " II", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "given": [ - { - "isString": true, - "content": "Scottie", - "coerceToInlineType$kotlinx_serialization_json": null - } - ] - } - ], - "telecom": [ - { - "system": { - "isString": true, - "content": "phone", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "value": { - "isString": true, - "content": "12122221722", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "use": { - "isString": true, - "content": "work", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ], - "address": [ - { - "line": [ - { - "isString": true, - "content": "781 Freddie Union", - "coerceToInlineType$kotlinx_serialization_json": null - } - ], - "city": { - "isString": true, - "content": "Fair play", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "district": { - "isString": true, - "content": "Grundy", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "state": { - "isString": true, - "content": "MO", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "postalCode": { - "isString": true, - "content": "63742", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "country": { - "isString": true, - "content": "USA", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ] - } - }, - { - "fullUrl": { - "isString": true, - "content": "Specimen/52a582e4-d389-42d0-b738-bee51cf5244d", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "resource": { - "resourceType": { - "isString": true, - "content": "Specimen", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "id": { - "isString": true, - "content": "52a582e4-d389-42d0-b738-bee51cf5244d", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "identifier": [ - { - "value": { - "isString": true, - "content": "7fc4aee2-c426-4b2b-953c-86c877ff9bd0", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ], - "type": { - "coding": [ - { - "system": { - "isString": true, - "content": "http://snomed.info/sct", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "code": { - "isString": true, - "content": "697989009", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ], - "text": { - "isString": true, - "content": "Anterior nares swab", - "coerceToInlineType$kotlinx_serialization_json": null - } - }, - "subject": { - "reference": { - "isString": true, - "content": "Patient/f23cff4a-971b-48d9-8d99-3890d390c3a4", - "coerceToInlineType$kotlinx_serialization_json": null - } - }, - "receivedTime": { - "isString": true, - "content": "2023-10-18T22:05:20+00:00", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "collection": { - "collectedDateTime": { - "isString": true, - "content": "2023-10-18T22:05:20+00:00", - "coerceToInlineType$kotlinx_serialization_json": null - } - }, - "note": [ - { - "text": { - "isString": true, - "content": "I am some random text", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ] - } - }, - { - "fullUrl": { - "isString": true, - "content": "ServiceRequest/b0ba1f7e-f36e-4fc6-9f88-5ee8b3de58a1", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "resource": { - "resourceType": { - "isString": true, - "content": "ServiceRequest", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "id": { - "isString": true, - "content": "b0ba1f7e-f36e-4fc6-9f88-5ee8b3de58a1", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "extension": [ - { - "url": { - "isString": true, - "content": "https://reportstream.cdc.gov/fhir/StructureDefinition/order-control", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "valueCodeableConcept": { - "coding": [ - { - "system": { - "isString": true, - "content": "http://terminology.hl7.org/CodeSystem/v2-0119", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "code": { - "isString": true, - "content": "RE", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ] - } - }, - { - "url": { - "isString": true, - "content": "https://reportstream.cdc.gov/fhir/StructureDefinition/order-effective-date", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "valueDateTime": { - "isString": true, - "content": "2023-10-18T22:20:20+00:00", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ], - "status": { - "isString": true, - "content": "completed", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "intent": { - "isString": true, - "content": "order", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "code": { - "coding": [ - { - "system": { - "isString": true, - "content": "http://loinc.org", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "code": { - "isString": true, - "content": "95941-1", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ] - }, - "subject": { - "reference": { - "isString": true, - "content": "Patient/f23cff4a-971b-48d9-8d99-3890d390c3a4", - "coerceToInlineType$kotlinx_serialization_json": null - } - }, - "requester": { - "reference": { - "isString": true, - "content": "PractitionerRole/2d79a27c-2a8f-4f4c-a913-da434cac0203", - "coerceToInlineType$kotlinx_serialization_json": null - } - }, - "performer": [ - { - "reference": { - "isString": true, - "content": "Organization/9e22cfde-e704-4922-a247-b1a6ac0f43bc", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ], - "supportingInfo": [ - { - "reference": { - "isString": true, - "content": "Observation/2ddc518f-ee1c-3cf2-8126-de380f388293", - "coerceToInlineType$kotlinx_serialization_json": null - } - }, - { - "reference": { - "isString": true, - "content": "Observation/71280434-d4a7-3488-bc8b-5a0b76f71437", - "coerceToInlineType$kotlinx_serialization_json": null - } - }, - { - "reference": { - "isString": true, - "content": "Observation/efd7b2e6-7f1b-3e6f-a970-bcf20941cd6a", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ], - "note": [ - { - "text": { - "isString": true, - "content": "I am some random text", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ] - } - }, - { - "fullUrl": { - "isString": true, - "content": "Device/a72e8edb-bb54-47b1-83ed-938aaed01122", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "resource": { - "resourceType": { - "isString": true, - "content": "Device", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "id": { - "isString": true, - "content": "a72e8edb-bb54-47b1-83ed-938aaed01122", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "identifier": [ - { - "value": { - "isString": true, - "content": "00884999048034", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ], - "manufacturer": { - "isString": true, - "content": "Abbott", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "deviceName": [ - { - "name": { - "isString": true, - "content": "Alinity m", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "type": { - "isString": true, - "content": "model-name", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ] - } - }, - { - "fullUrl": { - "isString": true, - "content": "PractitionerRole/2d79a27c-2a8f-4f4c-a913-da434cac0203", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "resource": { - "resourceType": { - "isString": true, - "content": "PractitionerRole", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "id": { - "isString": true, - "content": "2d79a27c-2a8f-4f4c-a913-da434cac0203", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "practitioner": { - "reference": { - "isString": true, - "content": "Practitioner/48db8ab7-c884-4cf7-9a4f-b5fe6efb37da", - "coerceToInlineType$kotlinx_serialization_json": null - } - }, - "organization": { - "reference": { - "isString": true, - "content": "Organization/9e22cfde-e704-4922-a247-b1a6ac0f43bc", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - } - }, - { - "fullUrl": { - "isString": true, - "content": "Organization/07640c5d-87cd-488b-9343-a226c5166539", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "resource": { - "resourceType": { - "isString": true, - "content": "Organization", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "id": { - "isString": true, - "content": "07640c5d-87cd-488b-9343-a226c5166539", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "name": { - "isString": true, - "content": "SimpleReport", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - }, - { - "fullUrl": { - "isString": true, - "content": "Observation/29574070-adfc-4d53-a48f-5ddcc382614e", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "resource": { - "resourceType": { - "isString": true, - "content": "Observation", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "id": { - "isString": true, - "content": "29574070-adfc-4d53-a48f-5ddcc382614e", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "status": { - "isString": true, - "content": "final", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "code": { - "coding": [ - { - "system": { - "isString": true, - "content": "http://loinc.org", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "code": { - "isString": true, - "content": "85477-8", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ], - "text": { - "isString": true, - "content": "Flu A", - "coerceToInlineType$kotlinx_serialization_json": null - } - }, - "subject": { - "reference": { - "isString": true, - "content": "Patient/f23cff4a-971b-48d9-8d99-3890d390c3a4", - "coerceToInlineType$kotlinx_serialization_json": null - } - }, - "effectiveDateTime": { - "isString": true, - "content": "1972-09-06T05:50:13.070Z", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "issued": { - "isString": true, - "content": "1979-09-18T13:15:22.544Z", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "performer": [ - { - "reference": { - "isString": true, - "content": "Organization/9e22cfde-e704-4922-a247-b1a6ac0f43bc", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ], - "valueCodeableConcept": { - "coding": [ - { - "system": { - "isString": true, - "content": "http://snomed.info/sct", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "code": { - "isString": true, - "content": "260373001", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "display": { - "isString": true, - "content": "Detected", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ] - }, - "interpretation": [ - { - "coding": [ - { - "system": { - "isString": true, - "content": "http://terminology.hl7.org/CodeSystem/v2-0078", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "code": { - "isString": true, - "content": "A", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "display": { - "isString": true, - "content": "Abnormal", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ] - } - ], - "note": [ - { - "text": { - "isString": true, - "content": "I am some random text", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ], - "method": { - "extension": [ - { - "url": { - "isString": true, - "content": "https://reportstream.cdc.gov/fhir/StructureDefinition/testkit-name-id", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "valueCoding": { - "code": { - "isString": true, - "content": "Alinity m Resp-4-Plex_Abbott Molecular Inc.", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - } - ], - "coding": [ - { - "display": { - "isString": true, - "content": "Alinity m", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ] - }, - "specimen": { - "reference": { - "isString": true, - "content": "Specimen/52a582e4-d389-42d0-b738-bee51cf5244d", - "coerceToInlineType$kotlinx_serialization_json": null - } - }, - "device": { - "reference": { - "isString": true, - "content": "Device/a72e8edb-bb54-47b1-83ed-938aaed01122", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - } - }, - { - "fullUrl": { - "isString": true, - "content": "Observation/99a3d501-90c1-467b-b4a3-568f5af5178d", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "resource": { - "resourceType": { - "isString": true, - "content": "Observation", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "id": { - "isString": true, - "content": "99a3d501-90c1-467b-b4a3-568f5af5178d", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "status": { - "isString": true, - "content": "final", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "code": { - "coding": [ - { - "system": { - "isString": true, - "content": "http://loinc.org", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "code": { - "isString": true, - "content": "85478-6", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ], - "text": { - "isString": true, - "content": "Flu B", - "coerceToInlineType$kotlinx_serialization_json": null - } - }, - "subject": { - "reference": { - "isString": true, - "content": "Patient/f23cff4a-971b-48d9-8d99-3890d390c3a4", - "coerceToInlineType$kotlinx_serialization_json": null - } - }, - "effectiveDateTime": { - "isString": true, - "content": "2009-02-11T21:43:11.728Z", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "issued": { - "isString": true, - "content": "2013-05-28T23:49:42.304Z", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "performer": [ - { - "reference": { - "isString": true, - "content": "Organization/9e22cfde-e704-4922-a247-b1a6ac0f43bc", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ], - "valueCodeableConcept": { - "coding": [ - { - "system": { - "isString": true, - "content": "http://snomed.info/sct", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "code": { - "isString": true, - "content": "260373001", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "display": { - "isString": true, - "content": "Detected", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ] - }, - "interpretation": [ - { - "coding": [ - { - "system": { - "isString": true, - "content": "http://terminology.hl7.org/CodeSystem/v2-0078", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "code": { - "isString": true, - "content": "A", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "display": { - "isString": true, - "content": "Abnormal", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ] - } - ], - "note": [ - { - "text": { - "isString": true, - "content": "I am some random text", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ], - "method": { - "extension": [ - { - "url": { - "isString": true, - "content": "https://reportstream.cdc.gov/fhir/StructureDefinition/testkit-name-id", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "valueCoding": { - "code": { - "isString": true, - "content": "Alinity m Resp-4-Plex_Abbott Molecular Inc.", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - } - ], - "coding": [ - { - "display": { - "isString": true, - "content": "Alinity m", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ] - }, - "specimen": { - "reference": { - "isString": true, - "content": "Specimen/52a582e4-d389-42d0-b738-bee51cf5244d", - "coerceToInlineType$kotlinx_serialization_json": null - } - }, - "device": { - "reference": { - "isString": true, - "content": "Device/a72e8edb-bb54-47b1-83ed-938aaed01122", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - } - }, - { - "fullUrl": { - "isString": true, - "content": "Observation/e7fdd44c-9625-469d-b891-7a7e706680a0", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "resource": { - "resourceType": { - "isString": true, - "content": "Observation", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "id": { - "isString": true, - "content": "e7fdd44c-9625-469d-b891-7a7e706680a0", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "status": { - "isString": true, - "content": "final", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "code": { - "coding": [ - { - "system": { - "isString": true, - "content": "http://loinc.org", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "code": { - "isString": true, - "content": "94500-6", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ], - "text": { - "isString": true, - "content": "COVID-19", - "coerceToInlineType$kotlinx_serialization_json": null - } - }, - "subject": { - "reference": { - "isString": true, - "content": "Patient/f23cff4a-971b-48d9-8d99-3890d390c3a4", - "coerceToInlineType$kotlinx_serialization_json": null - } - }, - "effectiveDateTime": { - "isString": true, - "content": "1958-10-15T17:14:24.631Z", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "issued": { - "isString": true, - "content": "2020-06-14T10:13:51.979Z", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "performer": [ - { - "reference": { - "isString": true, - "content": "Organization/9e22cfde-e704-4922-a247-b1a6ac0f43bc", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ], - "valueCodeableConcept": { - "coding": [ - { - "system": { - "isString": true, - "content": "http://snomed.info/sct", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "code": { - "isString": true, - "content": "260373001", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "display": { - "isString": true, - "content": "Detected", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ] - }, - "interpretation": [ - { - "coding": [ - { - "system": { - "isString": true, - "content": "http://terminology.hl7.org/CodeSystem/v2-0078", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "code": { - "isString": true, - "content": "A", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "display": { - "isString": true, - "content": "Abnormal", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ] - } - ], - "note": [ - { - "text": { - "isString": true, - "content": "I am some random text", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ], - "method": { - "coding": [ - { - "display": { - "isString": true, - "content": "Alinity m", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ] - }, - "specimen": { - "reference": { - "isString": true, - "content": "Specimen/52a582e4-d389-42d0-b738-bee51cf5244d", - "coerceToInlineType$kotlinx_serialization_json": null - } - }, - "device": { - "reference": { - "isString": true, - "content": "Device/a72e8edb-bb54-47b1-83ed-938aaed01122", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - } - }, - { - "fullUrl": { - "isString": true, - "content": "Observation/2ddc518f-ee1c-3cf2-8126-de380f388293", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "resource": { - "resourceType": { - "isString": true, - "content": "Observation", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "id": { - "isString": true, - "content": "2ddc518f-ee1c-3cf2-8126-de380f388293", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "identifier": [ - { - "use": { - "isString": true, - "content": "official", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "type": { - "coding": [ - { - "system": { - "isString": true, - "content": "http://loinc.org", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "code": { - "isString": true, - "content": "81959-9", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "display": { - "isString": true, - "content": "Public health laboratory ask at order entry panel", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ] - } - } - ], - "status": { - "isString": true, - "content": "final", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "code": { - "coding": [ - { - "system": { - "isString": true, - "content": "http://loinc.org", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "code": { - "isString": true, - "content": "95419-8", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "display": { - "isString": true, - "content": "Has symptoms related to condition of interest", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ], - "text": { - "isString": true, - "content": "Has symptoms related to condition of interest", - "coerceToInlineType$kotlinx_serialization_json": null - } - }, - "subject": { - "reference": { - "isString": true, - "content": "Patient/f23cff4a-971b-48d9-8d99-3890d390c3a4", - "coerceToInlineType$kotlinx_serialization_json": null - } - }, - "effectiveDateTime": { - "isString": true, - "content": "1950-12-04T07:15:53.646Z", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "issued": { - "isString": true, - "content": "2003-04-14T14:47:13.472Z", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "valueCodeableConcept": { - "coding": [ - { - "system": { - "isString": true, - "content": "http://terminology.hl7.org/CodeSystem/v3-NullFlavor", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "code": { - "isString": true, - "content": "UNK", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "display": { - "isString": true, - "content": "unknown", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ] - }, - "note": [ - { - "text": { - "isString": true, - "content": "I am some random text", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ] - } - }, - { - "fullUrl": { - "isString": true, - "content": "Observation/71280434-d4a7-3488-bc8b-5a0b76f71437", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "resource": { - "resourceType": { - "isString": true, - "content": "Observation", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "id": { - "isString": true, - "content": "71280434-d4a7-3488-bc8b-5a0b76f71437", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "identifier": [ - { - "use": { - "isString": true, - "content": "official", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "type": { - "coding": [ - { - "system": { - "isString": true, - "content": "http://loinc.org", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "code": { - "isString": true, - "content": "81959-9", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "display": { - "isString": true, - "content": "Public health laboratory ask at order entry panel", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ] - } - } - ], - "status": { - "isString": true, - "content": "final", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "code": { - "coding": [ - { - "system": { - "isString": true, - "content": "http://loinc.org", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "code": { - "isString": true, - "content": "95418-0", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "display": { - "isString": true, - "content": "Employed in a healthcare setting", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ], - "text": { - "isString": true, - "content": "Employed in a healthcare setting", - "coerceToInlineType$kotlinx_serialization_json": null - } - }, - "subject": { - "reference": { - "isString": true, - "content": "Patient/f23cff4a-971b-48d9-8d99-3890d390c3a4", - "coerceToInlineType$kotlinx_serialization_json": null - } - }, - "effectiveDateTime": { - "isString": true, - "content": "2009-02-09T19:25:29.132Z", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "issued": { - "isString": true, - "content": "2013-01-21T12:13:59.159Z", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "valueCodeableConcept": { - "coding": [ - { - "system": { - "isString": true, - "content": "http://terminology.hl7.org/ValueSet/v2-0136", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "code": { - "isString": true, - "content": "N", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "display": { - "isString": true, - "content": "No", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ] - }, - "note": [ - { - "text": { - "isString": true, - "content": "I am some random text", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ] - } - }, - { - "fullUrl": { - "isString": true, - "content": "Observation/efd7b2e6-7f1b-3e6f-a970-bcf20941cd6a", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "resource": { - "resourceType": { - "isString": true, - "content": "Observation", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "id": { - "isString": true, - "content": "efd7b2e6-7f1b-3e6f-a970-bcf20941cd6a", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "identifier": [ - { - "use": { - "isString": true, - "content": "official", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "type": { - "coding": [ - { - "system": { - "isString": true, - "content": "http://loinc.org", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "code": { - "isString": true, - "content": "81959-9", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "display": { - "isString": true, - "content": "Public health laboratory ask at order entry panel", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ] - } - } - ], - "status": { - "isString": true, - "content": "final", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "code": { - "coding": [ - { - "system": { - "isString": true, - "content": "http://loinc.org", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "code": { - "isString": true, - "content": "95421-4", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "display": { - "isString": true, - "content": "Resides in a congregate care setting", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ], - "text": { - "isString": true, - "content": "Resides in a congregate care setting", - "coerceToInlineType$kotlinx_serialization_json": null - } - }, - "subject": { - "reference": { - "isString": true, - "content": "Patient/f23cff4a-971b-48d9-8d99-3890d390c3a4", - "coerceToInlineType$kotlinx_serialization_json": null - } - }, - "effectiveDateTime": { - "isString": true, - "content": "1961-11-19T07:14:16.093Z", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "issued": { - "isString": true, - "content": "2019-10-20T16:00:22.324Z", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "valueCodeableConcept": { - "coding": [ - { - "system": { - "isString": true, - "content": "http://terminology.hl7.org/ValueSet/v2-0136", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "code": { - "isString": true, - "content": "N", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "display": { - "isString": true, - "content": "No", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ] - }, - "note": [ - { - "text": { - "isString": true, - "content": "I am some random text", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ] - } - } - ] -} \ No newline at end of file diff --git a/prime-router/src/main/kotlin/common/piithere.json b/prime-router/src/main/kotlin/common/piithere.json deleted file mode 100644 index 0fa1f11ae26..00000000000 --- a/prime-router/src/main/kotlin/common/piithere.json +++ /dev/null @@ -1,1930 +0,0 @@ -{ - "resourceType": { - "isString": true, - "content": "Bundle", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "identifier": { - "value": { - "isString": true, - "content": "ac108756-2162-470c-8a00-a189b3e94a54", - "coerceToInlineType$kotlinx_serialization_json": null - } - }, - "type": { - "isString": true, - "content": "message", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "timestamp": { - "isString": true, - "content": "2023-10-18T22:20:22.347Z", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "entry": [ - { - "fullUrl": { - "isString": true, - "content": "MessageHeader/c7414da3-edc1-4a3e-9c5c-8d7a8e5cf775", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "resource": { - "resourceType": { - "isString": true, - "content": "MessageHeader", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "id": { - "isString": true, - "content": "c7414da3-edc1-4a3e-9c5c-8d7a8e5cf775", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "meta": { - "tag": [ - { - "system": { - "isString": true, - "content": "http://terminology.hl7.org/CodeSystem/v2-0103", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "code": { - "isString": true, - "content": "T", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "display": { - "isString": true, - "content": "Training", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ] - }, - "eventCoding": { - "system": { - "isString": true, - "content": "http://terminology.hl7.org/CodeSystem/v2-0003", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "code": { - "isString": true, - "content": "R01", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "display": { - "isString": true, - "content": "ORU/ACK - Unsolicited transmission of an observation message", - "coerceToInlineType$kotlinx_serialization_json": null - } - }, - "destination": [ - { - "name": { - "isString": true, - "content": "PRIME ReportStream", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "endpoint": { - "isString": true, - "content": "https://prime.cdc.gov/api/reports?option=SkipInvalidItems", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ], - "sender": { - "reference": { - "isString": true, - "content": "Organization/9e22cfde-e704-4922-a247-b1a6ac0f43bc", - "coerceToInlineType$kotlinx_serialization_json": null - } - }, - "source": { - "extension": [ - { - "url": { - "isString": true, - "content": "https://reportstream.cdc.gov/fhir/StructureDefinition/software-binary-id", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "valueString": { - "isString": true, - "content": "e3d085e", - "coerceToInlineType$kotlinx_serialization_json": null - } - }, - { - "url": { - "isString": true, - "content": "https://reportstream.cdc.gov/fhir/StructureDefinition/software-install-date", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "valueInstant": { - "isString": true, - "content": "2023-10-18T21:06:03Z", - "coerceToInlineType$kotlinx_serialization_json": null - } - }, - { - "url": { - "isString": true, - "content": "https://reportstream.cdc.gov/fhir/StructureDefinition/software-vendor-org", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "valueReference": { - "reference": { - "isString": true, - "content": "Organization/07640c5d-87cd-488b-9343-a226c5166539", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - } - ], - "software": { - "isString": true, - "content": "PRIME SimpleReport", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "version": { - "isString": true, - "content": "e3d085e", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "endpoint": { - "isString": true, - "content": "https://simplereport.gov", - "coerceToInlineType$kotlinx_serialization_json": null - } - }, - "focus": [ - { - "reference": { - "isString": true, - "content": "Provenance/cad7f8ea-6bd0-417f-8efd-7154228654e8", - "coerceToInlineType$kotlinx_serialization_json": null - } - }, - { - "reference": { - "isString": true, - "content": "DiagnosticReport/ac108756-2162-470c-8a00-a189b3e94a54", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ] - } - }, - { - "fullUrl": { - "isString": true, - "content": "Provenance/cad7f8ea-6bd0-417f-8efd-7154228654e8", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "resource": { - "resourceType": { - "isString": true, - "content": "Provenance", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "id": { - "isString": true, - "content": "cad7f8ea-6bd0-417f-8efd-7154228654e8", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "recorded": { - "isString": true, - "content": "2023-10-18T22:20:22.347Z", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "activity": { - "coding": [ - { - "system": { - "isString": true, - "content": "http://terminology.hl7.org/CodeSystem/v2-0003", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "code": { - "isString": true, - "content": "R01", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "display": { - "isString": true, - "content": "ORU/ACK - Unsolicited transmission of an observation message", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ] - }, - "agent": [ - { - "who": { - "reference": { - "isString": true, - "content": "Organization/9e22cfde-e704-4922-a247-b1a6ac0f43bc", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - } - ] - } - }, - { - "fullUrl": { - "isString": true, - "content": "DiagnosticReport/ac108756-2162-470c-8a00-a189b3e94a54", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "resource": { - "resourceType": { - "isString": true, - "content": "DiagnosticReport", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "id": { - "isString": true, - "content": "ac108756-2162-470c-8a00-a189b3e94a54", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "identifier": [ - { - "value": { - "isString": true, - "content": "ac108756-2162-470c-8a00-a189b3e94a54", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ], - "basedOn": [ - { - "reference": { - "isString": true, - "content": "ServiceRequest/b0ba1f7e-f36e-4fc6-9f88-5ee8b3de58a1", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ], - "status": { - "isString": true, - "content": "final", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "code": { - "coding": [ - { - "system": { - "isString": true, - "content": "http://loinc.org", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "code": { - "isString": true, - "content": "95941-1", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ] - }, - "subject": { - "reference": { - "isString": true, - "content": "Patient/283f16c8-0a61-487f-af1b-50fe0dbdb2a8", - "coerceToInlineType$kotlinx_serialization_json": null - } - }, - "effectiveDateTime": { - "isString": true, - "content": "2023-10-18T22:05:20+00:00", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "issued": { - "isString": true, - "content": "2023-10-18T22:20:22+00:00", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "specimen": [ - { - "reference": { - "isString": true, - "content": "Specimen/52a582e4-d389-42d0-b738-bee51cf5244d", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ], - "result": [ - { - "reference": { - "isString": true, - "content": "Observation/29574070-adfc-4d53-a48f-5ddcc382614e", - "coerceToInlineType$kotlinx_serialization_json": null - } - }, - { - "reference": { - "isString": true, - "content": "Observation/99a3d501-90c1-467b-b4a3-568f5af5178d", - "coerceToInlineType$kotlinx_serialization_json": null - } - }, - { - "reference": { - "isString": true, - "content": "Observation/e7fdd44c-9625-469d-b891-7a7e706680a0", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ] - } - }, - { - "fullUrl": { - "isString": true, - "content": "Patient/283f16c8-0a61-487f-af1b-50fe0dbdb2a8", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "resource": { - "resourceType": { - "isString": true, - "content": "Patient", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "id": { - "isString": true, - "content": "283f16c8-0a61-487f-af1b-50fe0dbdb2a8", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "extension": [ - { - "url": { - "isString": true, - "content": "http://ibm.com/fhir/cdm/StructureDefinition/local-race-cd", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "valueCodeableConcept": { - "coding": [ - { - "system": { - "isString": true, - "content": "http://terminology.hl7.org/CodeSystem/v3-NullFlavor", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "code": { - "isString": true, - "content": "ASKU", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ], - "text": { - "isString": true, - "content": "refused", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - }, - { - "url": { - "isString": true, - "content": "https://reportstream.cdc.gov/fhir/StructureDefinition/ethnic-group", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "valueCodeableConcept": { - "coding": [ - { - "system": { - "isString": true, - "content": "http://terminology.hl7.org/CodeSystem/v2-0189", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "code": { - "isString": true, - "content": "N", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "display": { - "isString": true, - "content": "Not Hispanic or Latino", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ], - "text": { - "isString": true, - "content": "Not Hispanic or Latino", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - } - ], - "identifier": [ - { - "value": { - "isString": true, - "content": "283f16c8-0a61-487f-af1b-50fe0dbdb2a8", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ], - "name": [ - { - "family": { - "isString": true, - "content": " I", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "given": [ - { - "isString": true, - "content": "Deane", - "coerceToInlineType$kotlinx_serialization_json": null - } - ] - } - ], - "telecom": [ - { - "system": { - "isString": true, - "content": "phone", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "value": { - "isString": true, - "content": "12124126721", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "use": { - "isString": true, - "content": "home", - "coerceToInlineType$kotlinx_serialization_json": null - } - }, - { - "system": { - "isString": true, - "content": "email", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "value": { - "isString": true, - "content": "ChongDenesik@gmail.com", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "use": { - "isString": true, - "content": "home", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ], - "gender": { - "isString": true, - "content": "female", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "birthDate": { - "isString": true, - "content": "2017-01-30", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "address": [ - { - "line": [ - { - "isString": true, - "content": "863 Glady Rue", - "coerceToInlineType$kotlinx_serialization_json": null - } - ], - "city": { - "isString": true, - "content": "Myrtle", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "district": { - "isString": true, - "content": "Texas", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "state": { - "isString": true, - "content": "MO", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "postalCode": { - "isString": true, - "content": "65263", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "country": { - "isString": true, - "content": "USA", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ], - "managingOrganization": { - "reference": { - "isString": true, - "content": "Organization/9e22cfde-e704-4922-a247-b1a6ac0f43bc", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - } - }, - { - "fullUrl": { - "isString": true, - "content": "Organization/9e22cfde-e704-4922-a247-b1a6ac0f43bc", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "resource": { - "resourceType": { - "isString": true, - "content": "Organization", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "id": { - "isString": true, - "content": "9e22cfde-e704-4922-a247-b1a6ac0f43bc", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "identifier": [ - { - "use": { - "isString": true, - "content": "official", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "type": { - "coding": [ - { - "system": { - "isString": true, - "content": "http://terminology.hl7.org/CodeSystem/v2-0301", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "code": { - "isString": true, - "content": "CLIA", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ] - }, - "value": { - "isString": true, - "content": "12D3456789", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ], - "name": { - "isString": true, - "content": "Carl Potts", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "telecom": [ - { - "system": { - "isString": true, - "content": "phone", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "value": { - "isString": true, - "content": "12505245506", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "use": { - "isString": true, - "content": "work", - "coerceToInlineType$kotlinx_serialization_json": null - } - }, - { - "system": { - "isString": true, - "content": "email", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "value": { - "isString": true, - "content": "MozelleMarksIII@gmail.com", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "use": { - "isString": true, - "content": "work", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ], - "address": [ - { - "line": [ - { - "isString": true, - "content": "661 Ondricka Point", - "coerceToInlineType$kotlinx_serialization_json": null - } - ], - "city": { - "isString": true, - "content": "Avilla", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "district": { - "isString": true, - "content": "Lawrence", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "state": { - "isString": true, - "content": "MO", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "postalCode": { - "isString": true, - "content": "64126", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "country": { - "isString": true, - "content": "USA", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ] - } - }, - { - "fullUrl": { - "isString": true, - "content": "Practitioner/48db8ab7-c884-4cf7-9a4f-b5fe6efb37da", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "resource": { - "resourceType": { - "isString": true, - "content": "Practitioner", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "id": { - "isString": true, - "content": "48db8ab7-c884-4cf7-9a4f-b5fe6efb37da", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "name": [ - { - "family": { - "isString": true, - "content": " Graham", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "given": [ - { - "isString": true, - "content": "Ashleigh", - "coerceToInlineType$kotlinx_serialization_json": null - } - ] - } - ], - "telecom": [ - { - "system": { - "isString": true, - "content": "phone", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "value": { - "isString": true, - "content": "12040411872", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "use": { - "isString": true, - "content": "work", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ], - "address": [ - { - "line": [ - { - "isString": true, - "content": "168 Moore Groves", - "coerceToInlineType$kotlinx_serialization_json": null - } - ], - "city": { - "isString": true, - "content": "Rosendale", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "district": { - "isString": true, - "content": "Iron", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "state": { - "isString": true, - "content": "MO", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "postalCode": { - "isString": true, - "content": "64145", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "country": { - "isString": true, - "content": "USA", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ] - } - }, - { - "fullUrl": { - "isString": true, - "content": "Specimen/52a582e4-d389-42d0-b738-bee51cf5244d", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "resource": { - "resourceType": { - "isString": true, - "content": "Specimen", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "id": { - "isString": true, - "content": "52a582e4-d389-42d0-b738-bee51cf5244d", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "identifier": [ - { - "value": { - "isString": true, - "content": "7fc4aee2-c426-4b2b-953c-86c877ff9bd0", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ], - "type": { - "coding": [ - { - "system": { - "isString": true, - "content": "http://snomed.info/sct", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "code": { - "isString": true, - "content": "697989009", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ], - "text": { - "isString": true, - "content": "Anterior nares swab", - "coerceToInlineType$kotlinx_serialization_json": null - } - }, - "subject": { - "reference": { - "isString": true, - "content": "Patient/283f16c8-0a61-487f-af1b-50fe0dbdb2a8", - "coerceToInlineType$kotlinx_serialization_json": null - } - }, - "receivedTime": { - "isString": true, - "content": "2023-10-18T22:05:20+00:00", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "collection": { - "collectedDateTime": { - "isString": true, - "content": "2023-10-18T22:05:20+00:00", - "coerceToInlineType$kotlinx_serialization_json": null - } - }, - "note": [ - { - "text": { - "isString": true, - "content": "I am some random text", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ] - } - }, - { - "fullUrl": { - "isString": true, - "content": "ServiceRequest/b0ba1f7e-f36e-4fc6-9f88-5ee8b3de58a1", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "resource": { - "resourceType": { - "isString": true, - "content": "ServiceRequest", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "id": { - "isString": true, - "content": "b0ba1f7e-f36e-4fc6-9f88-5ee8b3de58a1", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "extension": [ - { - "url": { - "isString": true, - "content": "https://reportstream.cdc.gov/fhir/StructureDefinition/order-control", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "valueCodeableConcept": { - "coding": [ - { - "system": { - "isString": true, - "content": "http://terminology.hl7.org/CodeSystem/v2-0119", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "code": { - "isString": true, - "content": "RE", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ] - } - }, - { - "url": { - "isString": true, - "content": "https://reportstream.cdc.gov/fhir/StructureDefinition/order-effective-date", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "valueDateTime": { - "isString": true, - "content": "2023-10-18T22:20:20+00:00", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ], - "status": { - "isString": true, - "content": "completed", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "intent": { - "isString": true, - "content": "order", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "code": { - "coding": [ - { - "system": { - "isString": true, - "content": "http://loinc.org", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "code": { - "isString": true, - "content": "95941-1", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ] - }, - "subject": { - "reference": { - "isString": true, - "content": "Patient/283f16c8-0a61-487f-af1b-50fe0dbdb2a8", - "coerceToInlineType$kotlinx_serialization_json": null - } - }, - "requester": { - "reference": { - "isString": true, - "content": "PractitionerRole/2d79a27c-2a8f-4f4c-a913-da434cac0203", - "coerceToInlineType$kotlinx_serialization_json": null - } - }, - "performer": [ - { - "reference": { - "isString": true, - "content": "Organization/9e22cfde-e704-4922-a247-b1a6ac0f43bc", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ], - "supportingInfo": [ - { - "reference": { - "isString": true, - "content": "Observation/2ddc518f-ee1c-3cf2-8126-de380f388293", - "coerceToInlineType$kotlinx_serialization_json": null - } - }, - { - "reference": { - "isString": true, - "content": "Observation/71280434-d4a7-3488-bc8b-5a0b76f71437", - "coerceToInlineType$kotlinx_serialization_json": null - } - }, - { - "reference": { - "isString": true, - "content": "Observation/efd7b2e6-7f1b-3e6f-a970-bcf20941cd6a", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ], - "note": [ - { - "text": { - "isString": true, - "content": "I am some random text", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ] - } - }, - { - "fullUrl": { - "isString": true, - "content": "Device/a72e8edb-bb54-47b1-83ed-938aaed01122", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "resource": { - "resourceType": { - "isString": true, - "content": "Device", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "id": { - "isString": true, - "content": "a72e8edb-bb54-47b1-83ed-938aaed01122", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "identifier": [ - { - "value": { - "isString": true, - "content": "00884999048034", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ], - "manufacturer": { - "isString": true, - "content": "Abbott", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "deviceName": [ - { - "name": { - "isString": true, - "content": "Alinity m", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "type": { - "isString": true, - "content": "model-name", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ] - } - }, - { - "fullUrl": { - "isString": true, - "content": "PractitionerRole/2d79a27c-2a8f-4f4c-a913-da434cac0203", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "resource": { - "resourceType": { - "isString": true, - "content": "PractitionerRole", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "id": { - "isString": true, - "content": "2d79a27c-2a8f-4f4c-a913-da434cac0203", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "practitioner": { - "reference": { - "isString": true, - "content": "Practitioner/48db8ab7-c884-4cf7-9a4f-b5fe6efb37da", - "coerceToInlineType$kotlinx_serialization_json": null - } - }, - "organization": { - "reference": { - "isString": true, - "content": "Organization/9e22cfde-e704-4922-a247-b1a6ac0f43bc", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - } - }, - { - "fullUrl": { - "isString": true, - "content": "Organization/07640c5d-87cd-488b-9343-a226c5166539", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "resource": { - "resourceType": { - "isString": true, - "content": "Organization", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "id": { - "isString": true, - "content": "07640c5d-87cd-488b-9343-a226c5166539", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "name": { - "isString": true, - "content": "SimpleReport", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - }, - { - "fullUrl": { - "isString": true, - "content": "Observation/29574070-adfc-4d53-a48f-5ddcc382614e", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "resource": { - "resourceType": { - "isString": true, - "content": "Observation", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "id": { - "isString": true, - "content": "29574070-adfc-4d53-a48f-5ddcc382614e", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "status": { - "isString": true, - "content": "final", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "code": { - "coding": [ - { - "system": { - "isString": true, - "content": "http://loinc.org", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "code": { - "isString": true, - "content": "85477-8", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ], - "text": { - "isString": true, - "content": "Flu A", - "coerceToInlineType$kotlinx_serialization_json": null - } - }, - "subject": { - "reference": { - "isString": true, - "content": "Patient/283f16c8-0a61-487f-af1b-50fe0dbdb2a8", - "coerceToInlineType$kotlinx_serialization_json": null - } - }, - "effectiveDateTime": { - "isString": true, - "content": "2003-12-25T07:46:58.110Z", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "issued": { - "isString": true, - "content": "1991-08-11T15:05:25.378Z", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "performer": [ - { - "reference": { - "isString": true, - "content": "Organization/9e22cfde-e704-4922-a247-b1a6ac0f43bc", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ], - "valueCodeableConcept": { - "coding": [ - { - "system": { - "isString": true, - "content": "http://snomed.info/sct", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "code": { - "isString": true, - "content": "260373001", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "display": { - "isString": true, - "content": "Detected", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ] - }, - "interpretation": [ - { - "coding": [ - { - "system": { - "isString": true, - "content": "http://terminology.hl7.org/CodeSystem/v2-0078", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "code": { - "isString": true, - "content": "A", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "display": { - "isString": true, - "content": "Abnormal", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ] - } - ], - "note": [ - { - "text": { - "isString": true, - "content": "I am some random text", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ], - "method": { - "extension": [ - { - "url": { - "isString": true, - "content": "https://reportstream.cdc.gov/fhir/StructureDefinition/testkit-name-id", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "valueCoding": { - "code": { - "isString": true, - "content": "Alinity m Resp-4-Plex_Abbott Molecular Inc.", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - } - ], - "coding": [ - { - "display": { - "isString": true, - "content": "Alinity m", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ] - }, - "specimen": { - "reference": { - "isString": true, - "content": "Specimen/52a582e4-d389-42d0-b738-bee51cf5244d", - "coerceToInlineType$kotlinx_serialization_json": null - } - }, - "device": { - "reference": { - "isString": true, - "content": "Device/a72e8edb-bb54-47b1-83ed-938aaed01122", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - } - }, - { - "fullUrl": { - "isString": true, - "content": "Observation/99a3d501-90c1-467b-b4a3-568f5af5178d", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "resource": { - "resourceType": { - "isString": true, - "content": "Observation", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "id": { - "isString": true, - "content": "99a3d501-90c1-467b-b4a3-568f5af5178d", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "status": { - "isString": true, - "content": "final", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "code": { - "coding": [ - { - "system": { - "isString": true, - "content": "http://loinc.org", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "code": { - "isString": true, - "content": "85478-6", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ], - "text": { - "isString": true, - "content": "Flu B", - "coerceToInlineType$kotlinx_serialization_json": null - } - }, - "subject": { - "reference": { - "isString": true, - "content": "Patient/283f16c8-0a61-487f-af1b-50fe0dbdb2a8", - "coerceToInlineType$kotlinx_serialization_json": null - } - }, - "effectiveDateTime": { - "isString": true, - "content": "1996-05-19T23:25:45.871Z", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "issued": { - "isString": true, - "content": "1961-11-24T16:11:02.627Z", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "performer": [ - { - "reference": { - "isString": true, - "content": "Organization/9e22cfde-e704-4922-a247-b1a6ac0f43bc", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ], - "valueCodeableConcept": { - "coding": [ - { - "system": { - "isString": true, - "content": "http://snomed.info/sct", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "code": { - "isString": true, - "content": "260373001", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "display": { - "isString": true, - "content": "Detected", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ] - }, - "interpretation": [ - { - "coding": [ - { - "system": { - "isString": true, - "content": "http://terminology.hl7.org/CodeSystem/v2-0078", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "code": { - "isString": true, - "content": "A", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "display": { - "isString": true, - "content": "Abnormal", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ] - } - ], - "note": [ - { - "text": { - "isString": true, - "content": "I am some random text", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ], - "method": { - "extension": [ - { - "url": { - "isString": true, - "content": "https://reportstream.cdc.gov/fhir/StructureDefinition/testkit-name-id", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "valueCoding": { - "code": { - "isString": true, - "content": "Alinity m Resp-4-Plex_Abbott Molecular Inc.", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - } - ], - "coding": [ - { - "display": { - "isString": true, - "content": "Alinity m", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ] - }, - "specimen": { - "reference": { - "isString": true, - "content": "Specimen/52a582e4-d389-42d0-b738-bee51cf5244d", - "coerceToInlineType$kotlinx_serialization_json": null - } - }, - "device": { - "reference": { - "isString": true, - "content": "Device/a72e8edb-bb54-47b1-83ed-938aaed01122", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - } - }, - { - "fullUrl": { - "isString": true, - "content": "Observation/e7fdd44c-9625-469d-b891-7a7e706680a0", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "resource": { - "resourceType": { - "isString": true, - "content": "Observation", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "id": { - "isString": true, - "content": "e7fdd44c-9625-469d-b891-7a7e706680a0", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "status": { - "isString": true, - "content": "final", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "code": { - "coding": [ - { - "system": { - "isString": true, - "content": "http://loinc.org", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "code": { - "isString": true, - "content": "94500-6", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ], - "text": { - "isString": true, - "content": "COVID-19", - "coerceToInlineType$kotlinx_serialization_json": null - } - }, - "subject": { - "reference": { - "isString": true, - "content": "Patient/283f16c8-0a61-487f-af1b-50fe0dbdb2a8", - "coerceToInlineType$kotlinx_serialization_json": null - } - }, - "effectiveDateTime": { - "isString": true, - "content": "1966-10-31T11:23:28.181Z", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "issued": { - "isString": true, - "content": "1971-05-26T06:18:40.872Z", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "performer": [ - { - "reference": { - "isString": true, - "content": "Organization/9e22cfde-e704-4922-a247-b1a6ac0f43bc", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ], - "valueCodeableConcept": { - "coding": [ - { - "system": { - "isString": true, - "content": "http://snomed.info/sct", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "code": { - "isString": true, - "content": "260373001", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "display": { - "isString": true, - "content": "Detected", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ] - }, - "interpretation": [ - { - "coding": [ - { - "system": { - "isString": true, - "content": "http://terminology.hl7.org/CodeSystem/v2-0078", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "code": { - "isString": true, - "content": "A", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "display": { - "isString": true, - "content": "Abnormal", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ] - } - ], - "note": [ - { - "text": { - "isString": true, - "content": "I am some random text", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ], - "method": { - "coding": [ - { - "display": { - "isString": true, - "content": "Alinity m", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ] - }, - "specimen": { - "reference": { - "isString": true, - "content": "Specimen/52a582e4-d389-42d0-b738-bee51cf5244d", - "coerceToInlineType$kotlinx_serialization_json": null - } - }, - "device": { - "reference": { - "isString": true, - "content": "Device/a72e8edb-bb54-47b1-83ed-938aaed01122", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - } - }, - { - "fullUrl": { - "isString": true, - "content": "Observation/2ddc518f-ee1c-3cf2-8126-de380f388293", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "resource": { - "resourceType": { - "isString": true, - "content": "Observation", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "id": { - "isString": true, - "content": "2ddc518f-ee1c-3cf2-8126-de380f388293", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "identifier": [ - { - "use": { - "isString": true, - "content": "official", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "type": { - "coding": [ - { - "system": { - "isString": true, - "content": "http://loinc.org", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "code": { - "isString": true, - "content": "81959-9", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "display": { - "isString": true, - "content": "Public health laboratory ask at order entry panel", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ] - } - } - ], - "status": { - "isString": true, - "content": "final", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "code": { - "coding": [ - { - "system": { - "isString": true, - "content": "http://loinc.org", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "code": { - "isString": true, - "content": "95419-8", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "display": { - "isString": true, - "content": "Has symptoms related to condition of interest", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ], - "text": { - "isString": true, - "content": "Has symptoms related to condition of interest", - "coerceToInlineType$kotlinx_serialization_json": null - } - }, - "subject": { - "reference": { - "isString": true, - "content": "Patient/283f16c8-0a61-487f-af1b-50fe0dbdb2a8", - "coerceToInlineType$kotlinx_serialization_json": null - } - }, - "effectiveDateTime": { - "isString": true, - "content": "1999-10-19T14:50:51.489Z", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "issued": { - "isString": true, - "content": "1981-08-18T12:23:05.985Z", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "valueCodeableConcept": { - "coding": [ - { - "system": { - "isString": true, - "content": "http://terminology.hl7.org/CodeSystem/v3-NullFlavor", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "code": { - "isString": true, - "content": "UNK", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "display": { - "isString": true, - "content": "unknown", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ] - }, - "note": [ - { - "text": { - "isString": true, - "content": "I am some random text", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ] - } - }, - { - "fullUrl": { - "isString": true, - "content": "Observation/71280434-d4a7-3488-bc8b-5a0b76f71437", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "resource": { - "resourceType": { - "isString": true, - "content": "Observation", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "id": { - "isString": true, - "content": "71280434-d4a7-3488-bc8b-5a0b76f71437", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "identifier": [ - { - "use": { - "isString": true, - "content": "official", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "type": { - "coding": [ - { - "system": { - "isString": true, - "content": "http://loinc.org", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "code": { - "isString": true, - "content": "81959-9", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "display": { - "isString": true, - "content": "Public health laboratory ask at order entry panel", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ] - } - } - ], - "status": { - "isString": true, - "content": "final", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "code": { - "coding": [ - { - "system": { - "isString": true, - "content": "http://loinc.org", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "code": { - "isString": true, - "content": "95418-0", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "display": { - "isString": true, - "content": "Employed in a healthcare setting", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ], - "text": { - "isString": true, - "content": "Employed in a healthcare setting", - "coerceToInlineType$kotlinx_serialization_json": null - } - }, - "subject": { - "reference": { - "isString": true, - "content": "Patient/283f16c8-0a61-487f-af1b-50fe0dbdb2a8", - "coerceToInlineType$kotlinx_serialization_json": null - } - }, - "effectiveDateTime": { - "isString": true, - "content": "1967-06-09T22:05:58.750Z", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "issued": { - "isString": true, - "content": "1975-10-23T13:33:40.186Z", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "valueCodeableConcept": { - "coding": [ - { - "system": { - "isString": true, - "content": "http://terminology.hl7.org/ValueSet/v2-0136", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "code": { - "isString": true, - "content": "N", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "display": { - "isString": true, - "content": "No", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ] - }, - "note": [ - { - "text": { - "isString": true, - "content": "I am some random text", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ] - } - }, - { - "fullUrl": { - "isString": true, - "content": "Observation/efd7b2e6-7f1b-3e6f-a970-bcf20941cd6a", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "resource": { - "resourceType": { - "isString": true, - "content": "Observation", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "id": { - "isString": true, - "content": "efd7b2e6-7f1b-3e6f-a970-bcf20941cd6a", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "identifier": [ - { - "use": { - "isString": true, - "content": "official", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "type": { - "coding": [ - { - "system": { - "isString": true, - "content": "http://loinc.org", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "code": { - "isString": true, - "content": "81959-9", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "display": { - "isString": true, - "content": "Public health laboratory ask at order entry panel", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ] - } - } - ], - "status": { - "isString": true, - "content": "final", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "code": { - "coding": [ - { - "system": { - "isString": true, - "content": "http://loinc.org", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "code": { - "isString": true, - "content": "95421-4", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "display": { - "isString": true, - "content": "Resides in a congregate care setting", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ], - "text": { - "isString": true, - "content": "Resides in a congregate care setting", - "coerceToInlineType$kotlinx_serialization_json": null - } - }, - "subject": { - "reference": { - "isString": true, - "content": "Patient/283f16c8-0a61-487f-af1b-50fe0dbdb2a8", - "coerceToInlineType$kotlinx_serialization_json": null - } - }, - "effectiveDateTime": { - "isString": true, - "content": "1946-04-06T02:01:36.795Z", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "issued": { - "isString": true, - "content": "1983-07-07T22:56:38.488Z", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "valueCodeableConcept": { - "coding": [ - { - "system": { - "isString": true, - "content": "http://terminology.hl7.org/ValueSet/v2-0136", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "code": { - "isString": true, - "content": "N", - "coerceToInlineType$kotlinx_serialization_json": null - }, - "display": { - "isString": true, - "content": "No", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ] - }, - "note": [ - { - "text": { - "isString": true, - "content": "I am some random text", - "coerceToInlineType$kotlinx_serialization_json": null - } - } - ] - } - } - ] -} \ No newline at end of file diff --git a/prime-router/src/main/kotlin/fhirengine/azure/FHIRFunctions.kt b/prime-router/src/main/kotlin/fhirengine/azure/FHIRFunctions.kt index 3d50e1bf9e9..b4ae24f5c31 100644 --- a/prime-router/src/main/kotlin/fhirengine/azure/FHIRFunctions.kt +++ b/prime-router/src/main/kotlin/fhirengine/azure/FHIRFunctions.kt @@ -4,7 +4,6 @@ import com.microsoft.azure.functions.annotation.BindingName import com.microsoft.azure.functions.annotation.FunctionName import com.microsoft.azure.functions.annotation.QueueTrigger import com.microsoft.azure.functions.annotation.StorageAccount -import gov.cdc.prime.reportstream.shared.QueueMessage import gov.cdc.prime.router.ActionLogger import gov.cdc.prime.router.azure.ActionHistory import gov.cdc.prime.router.azure.DataAccessTransaction @@ -16,13 +15,10 @@ import gov.cdc.prime.router.common.BaseEngine import gov.cdc.prime.router.fhirengine.engine.FHIRConverter import gov.cdc.prime.router.fhirengine.engine.FHIRDestinationFilter import gov.cdc.prime.router.fhirengine.engine.FHIREngine -import gov.cdc.prime.router.fhirengine.engine.FHIRReceiver import gov.cdc.prime.router.fhirengine.engine.FHIRReceiverFilter import gov.cdc.prime.router.fhirengine.engine.FHIRTranslator -import gov.cdc.prime.router.fhirengine.engine.FhirReceiveQueueMessage -import gov.cdc.prime.router.fhirengine.engine.PrimeRouterQueueMessage +import gov.cdc.prime.router.fhirengine.engine.QueueMessage import gov.cdc.prime.router.fhirengine.engine.ReportPipelineMessage -import gov.cdc.prime.router.fhirengine.engine.initializeQueueMessages import org.apache.commons.lang3.StringUtils import org.apache.logging.log4j.kotlin.Logging @@ -33,23 +29,6 @@ class FHIRFunctions( private val queueAccess: QueueAccess = QueueAccess, ) : Logging { - /** - * An azure function for ingesting and recording submissions - */ - @FunctionName("receive-fhir") - @StorageAccount("AzureWebJobsStorage") - fun receive( - @QueueTrigger(name = "message", queueName = QueueMessage.elrReceiveQueueName) - message: String, - // Number of times this message has been dequeued - @BindingName("DequeueCount") dequeueCount: Int = 1, - ) { - logger.info( - "message consumed from elr-fhir-receive queue" - ) - process(message, dequeueCount, FHIRReceiver(), ActionHistory(TaskAction.receive)) - } - /** * An azure function for ingesting full-ELR HL7 data and converting it to FHIR */ @@ -120,7 +99,7 @@ class FHIRFunctions( ) { val messagesToDispatch = runFhirEngine(message, dequeueCount, fhirEngine, actionHistory) messagesToDispatch.forEach { - (it as PrimeRouterQueueMessage).send(queueAccess) + it.send(queueAccess) } } @@ -158,23 +137,8 @@ class FHIRFunctions( logger.debug( "${StringUtils.removeEnd(engineType, "e")}ing message: $message for the $dequeueCount time" ) - // initialize the json types in PrimeRouterQueueMessage - initializeQueueMessages() - return when (val queueMessage = QueueMessage.deserialize(message)) { - is QueueMessage.ReceiveQueueMessage -> { - FhirReceiveQueueMessage( - queueMessage.reportId, - queueMessage.blobURL, - queueMessage.digest, - queueMessage.blobSubFolderName, - queueMessage.headers - ) - } - else -> { - queueMessage as ReportPipelineMessage - } - } + return QueueMessage.deserialize(message) as ReportPipelineMessage } /** diff --git a/prime-router/src/main/kotlin/fhirengine/engine/FHIRConverter.kt b/prime-router/src/main/kotlin/fhirengine/engine/FHIRConverter.kt index a831daa3b7d..319e485e2d6 100644 --- a/prime-router/src/main/kotlin/fhirengine/engine/FHIRConverter.kt +++ b/prime-router/src/main/kotlin/fhirengine/engine/FHIRConverter.kt @@ -11,8 +11,6 @@ import fhirengine.engine.CustomFhirPathFunctions import fhirengine.engine.IProcessedItem import fhirengine.engine.ProcessedFHIRItem import fhirengine.engine.ProcessedHL7Item -import gov.cdc.prime.reportstream.shared.BlobUtils -import gov.cdc.prime.reportstream.shared.QueueMessage import gov.cdc.prime.router.ActionLogDetail import gov.cdc.prime.router.ActionLogScope import gov.cdc.prime.router.ActionLogger @@ -94,19 +92,22 @@ class FHIRConverter( message: T, actionLogger: ActionLogger, actionHistory: ActionHistory, - ): List = when (message) { - is FhirConvertQueueMessage -> { - fhirEngineRunResults(message, message.schemaName, actionLogger, actionHistory) - } - else -> { - throw RuntimeException( - "Message was not a FhirConvert and cannot be processed: $message" - ) + ): List { + return when (message) { + is FhirConvertQueueMessage -> { + fhirEngineRunResults(message, message.schemaName, actionLogger, actionHistory) + } + + else -> { + throw RuntimeException( + "Message was not a FhirConvert and cannot be processed: $message" + ) + } } } private fun fhirEngineRunResults( - queueMessage: FhirConvertQueueMessage, + queueMessage: ReportPipelineMessage, schemaName: String, actionLogger: ActionLogger, actionHistory: ActionHistory, @@ -261,14 +262,14 @@ class FHIRConverter( ) } - FHIREngineRunResult( + FHIREngineRunResult( routeEvent, report, blobInfo.blobUrl, FhirDestinationFilterQueueMessage( report.id, blobInfo.blobUrl, - BlobUtils.digestToString(blobInfo.digest), + BlobAccess.digestToString(blobInfo.digest), queueMessage.blobSubFolderName, queueMessage.topic ) @@ -350,12 +351,12 @@ class FHIRConverter( */ internal fun process( format: MimeFormat, - queueMessage: FhirConvertQueueMessage, + queueMessage: ReportPipelineMessage, actionLogger: ActionLogger, routeReportWithInvalidItems: Boolean = true, ): List> { val validator = queueMessage.topic.validator - val rawReport = BlobAccess.downloadBlob(queueMessage.blobURL, queueMessage.digest) + val rawReport = queueMessage.downloadContent() return if (rawReport.isBlank()) { actionLogger.error(InvalidReportMessage("Provided raw data is empty.")) emptyList() @@ -645,7 +646,8 @@ class FHIRConverter( * Using this function instead of calling the constructor directly simplifies the process of mocking the * transformer in tests. */ - fun getTransformerFromSchema(schemaName: String): FhirTransformer? = if (schemaName.isNotBlank()) { + fun getTransformerFromSchema(schemaName: String): FhirTransformer? { + return if (schemaName.isNotBlank()) { withLoggingContext(mapOf("schemaName" to schemaName)) { logger.info("Apply a sender transform to the items in the report") } @@ -653,4 +655,5 @@ class FHIRConverter( } else { null } + } } \ No newline at end of file diff --git a/prime-router/src/main/kotlin/fhirengine/engine/FHIRDestinationFilter.kt b/prime-router/src/main/kotlin/fhirengine/engine/FHIRDestinationFilter.kt index e834b6feea4..d8120485d4b 100644 --- a/prime-router/src/main/kotlin/fhirengine/engine/FHIRDestinationFilter.kt +++ b/prime-router/src/main/kotlin/fhirengine/engine/FHIRDestinationFilter.kt @@ -1,8 +1,6 @@ package gov.cdc.prime.router.fhirengine.engine import fhirengine.engine.CustomFhirPathFunctions -import gov.cdc.prime.reportstream.shared.BlobUtils -import gov.cdc.prime.reportstream.shared.QueueMessage import gov.cdc.prime.router.ActionLogger import gov.cdc.prime.router.CustomerStatus import gov.cdc.prime.router.Metadata @@ -90,7 +88,7 @@ class FHIRDestinationFilter( * [actionHistory] ensures all activities are logged. */ private fun fhirEngineRunResults( - queueMessage: FhirDestinationFilterQueueMessage, + queueMessage: ReportPipelineMessage, actionHistory: ActionHistory, ): List { val contextMap = mapOf( @@ -108,7 +106,7 @@ class FHIRDestinationFilter( val fhirJson = LogMeasuredTime.measureAndLogDurationWithReturnedValue( "Downloaded content from queue message" ) { - BlobAccess.downloadBlob(queueMessage.blobURL, queueMessage.digest) + queueMessage.downloadContent() } val bundle = FhirTranscoder.decode(fhirJson) val bodyString = FhirTranscoder.encode(bundle) @@ -209,7 +207,7 @@ class FHIRDestinationFilter( FhirReceiverFilterQueueMessage( report.id, blobInfo.blobUrl, - BlobUtils.digestToString(blobInfo.digest), + BlobAccess.digestToString(blobInfo.digest), queueMessage.blobSubFolderName, queueMessage.topic, receiver.fullName diff --git a/prime-router/src/main/kotlin/fhirengine/engine/FHIREngine.kt b/prime-router/src/main/kotlin/fhirengine/engine/FHIREngine.kt index 6ec0e6dabdc..e498f806a3c 100644 --- a/prime-router/src/main/kotlin/fhirengine/engine/FHIREngine.kt +++ b/prime-router/src/main/kotlin/fhirengine/engine/FHIREngine.kt @@ -1,6 +1,5 @@ package gov.cdc.prime.router.fhirengine.engine -import gov.cdc.prime.reportstream.shared.QueueMessage import gov.cdc.prime.router.ActionLogger import gov.cdc.prime.router.InvalidReportMessage import gov.cdc.prime.router.Metadata @@ -123,14 +122,6 @@ abstract class FHIREngine( // create the correct FHIREngine type for the action being taken return when (taskAction) { - TaskAction.receive -> FHIRReceiver( - metadata ?: Metadata.getInstance(), - settingsProvider!!, - databaseAccess ?: databaseAccessSingleton, - blobAccess ?: BlobAccess(), - azureEventService ?: AzureEventServiceImpl(), - reportService ?: ReportService(), - ) TaskAction.process -> FHIRConverter( metadata ?: Metadata.getInstance(), settingsProvider!!, diff --git a/prime-router/src/main/kotlin/fhirengine/engine/FHIRReceiver.kt b/prime-router/src/main/kotlin/fhirengine/engine/FHIRReceiver.kt deleted file mode 100644 index 2a12444e552..00000000000 --- a/prime-router/src/main/kotlin/fhirengine/engine/FHIRReceiver.kt +++ /dev/null @@ -1,378 +0,0 @@ -package gov.cdc.prime.router.fhirengine.engine - -import ca.uhn.hl7v2.model.Message -import com.microsoft.azure.functions.HttpStatus -import gov.cdc.prime.reportstream.shared.QueueMessage -import gov.cdc.prime.reportstream.shared.Submission -import gov.cdc.prime.router.ActionLogger -import gov.cdc.prime.router.ClientSource -import gov.cdc.prime.router.CustomerStatus -import gov.cdc.prime.router.InvalidParamMessage -import gov.cdc.prime.router.InvalidReportMessage -import gov.cdc.prime.router.Metadata -import gov.cdc.prime.router.MimeFormat -import gov.cdc.prime.router.Options -import gov.cdc.prime.router.Report -import gov.cdc.prime.router.Sender -import gov.cdc.prime.router.SettingsProvider -import gov.cdc.prime.router.azure.ActionHistory -import gov.cdc.prime.router.azure.BlobAccess -import gov.cdc.prime.router.azure.DatabaseAccess -import gov.cdc.prime.router.azure.Event -import gov.cdc.prime.router.azure.ProcessEvent -import gov.cdc.prime.router.azure.SubmissionTableService -import gov.cdc.prime.router.azure.db.Tables -import gov.cdc.prime.router.azure.db.enums.TaskAction -import gov.cdc.prime.router.azure.observability.context.MDCUtils -import gov.cdc.prime.router.azure.observability.context.withLoggingContext -import gov.cdc.prime.router.azure.observability.event.AzureEventService -import gov.cdc.prime.router.azure.observability.event.AzureEventServiceImpl -import gov.cdc.prime.router.azure.observability.event.ReportStreamEventName -import gov.cdc.prime.router.azure.observability.event.ReportStreamEventProperties -import gov.cdc.prime.router.common.AzureHttpUtils.getSenderIP -import gov.cdc.prime.router.fhirengine.utils.FhirTranscoder -import gov.cdc.prime.router.fhirengine.utils.HL7Reader -import gov.cdc.prime.router.report.ReportService -import org.jooq.Field -import java.time.OffsetDateTime - -/** - * FHIRReceiver is responsible for processing messages from the elr-fhir-receive azure queue - * and storing them for the next step in the pipeline. - * - * @param metadata Mockable metadata instance. - * @param settings Mockable settings provider. - * @param db Mockable database access. - * @param blob Mockable blob storage access. - * @param azureEventService Service for handling Azure events. - * @param reportService Service for handling report-related operations. - * @param submissionTableService Service for inserting to the submission azure storage table. - */ -class FHIRReceiver( - metadata: Metadata = Metadata.getInstance(), - settings: SettingsProvider = this.settingsProviderSingleton, - db: DatabaseAccess = this.databaseAccessSingleton, - blob: BlobAccess = BlobAccess(), - azureEventService: AzureEventService = AzureEventServiceImpl(), - reportService: ReportService = ReportService(), - val submissionTableService: SubmissionTableService = SubmissionTableService.getInstance(), -) : FHIREngine(metadata, settings, db, blob, azureEventService, reportService) { - - override val finishedField: Field = Tables.TASK.PROCESSED_AT - - override val engineType: String = "Receive" - - private val clientIdHeader = "client_id" - private val contentTypeHeader = "content-type" - - /** - * Processes a message of type [QueueMessage]. This message can be in either HL7 or FHIR format and will be placed - * on a queue for further processing. - * - * @param message The incoming message to be logged and processed. - * @param actionLogger Logger to track actions and errors. - * @param actionHistory Tracks the history of actions performed. - * @return A list of results from the FHIR engine run. - */ - override fun doWork( - message: T, - actionLogger: ActionLogger, - actionHistory: ActionHistory, - ): List = when (message) { - is FhirReceiveQueueMessage -> processFhirReceiveQueueMessage(message, actionLogger, actionHistory) - else -> throw RuntimeException("Message was not a FhirReceive and cannot be processed: $message") - } - - /** - * Processes the FHIR receive queue message. - * - * @param queueMessage The queue message containing details about the report. - * @param actionLogger The logger used to track actions and errors. - * @param actionHistory The action history related to receiving the report. - * @return A list of FHIR engine run results. - */ - private fun processFhirReceiveQueueMessage( - queueMessage: FhirReceiveQueueMessage, - actionLogger: ActionLogger, - actionHistory: ActionHistory, - ): List { - val contextMap = createLoggingContextMap(queueMessage, actionHistory) - // Use the logging context for tracing - withLoggingContext(contextMap) { - actionLogger.setReportId(queueMessage.reportId) - val sender = getSender(queueMessage, actionLogger, actionHistory) ?: return emptyList() - - // Process the message if no errors occurred - return handleSuccessfulProcessing(queueMessage, sender, actionLogger, actionHistory) - } - } - - /** - * Creates the logging context map. - * - * @param queueMessage The queue message containing details about the report. - * @param actionHistory The action history related to receiving the report. - * @return The logging context map. - */ - private fun createLoggingContextMap( - queueMessage: FhirReceiveQueueMessage, - actionHistory: ActionHistory, - ): Map = mapOf( - MDCUtils.MDCProperty.ACTION_NAME to actionHistory.action.actionName.name, - MDCUtils.MDCProperty.REPORT_ID to queueMessage.reportId, - MDCUtils.MDCProperty.BLOB_URL to queueMessage.blobURL, - ) - - /** - * Retrieves the sender based on the queue message and logs any relevant errors. - * - * @param queueMessage The queue message containing details about the report. - * @param actionLogger The logger used to track actions and errors. - * @param actionHistory The action history related to receiving the report. - * @return The sender, or null if the sender was not found or is inactive. - */ - private fun getSender( - queueMessage: FhirReceiveQueueMessage, - actionLogger: ActionLogger, - actionHistory: ActionHistory, - ): Sender? { - val clientId = queueMessage.headers[clientIdHeader] - val sender = clientId?.takeIf { it.isNotBlank() }?.let { settings.findSender(it) } - - actionHistory.trackActionParams(queueMessage.headers.toString()) - - // Handle case where sender is not found - return if (sender == null) { - // Send an error event - reportEventService.sendSubmissionProcessingError( - ReportStreamEventName.REPORT_NOT_RECEIVABLE, - TaskAction.receive, - "Sender is not found in matching client id: ${queueMessage.headers[clientIdHeader]}.", - queueMessage.reportId, - queueMessage.blobURL - ) { - params( - actionLogger.errors.associateBy { ReportStreamEventProperties.PROCESSING_ERROR } - .plus( - mapOf( - ReportStreamEventProperties.REQUEST_PARAMETERS to queueMessage.headers.toString(), - ) - ) - ) - } - - // Insert the rejection into the submission table - val submission = - Submission( - queueMessage.reportId.toString(), "Rejected", - queueMessage.blobURL, - "Sender not found matching client_id: ${queueMessage.headers[clientIdHeader]}" - ) - submissionTableService.insertSubmission(submission) - null - } else { - // Handle case where sender is inactive - if (sender.customerStatus == CustomerStatus.INACTIVE) { - // Track the action result and log the error - actionHistory.trackActionResult(HttpStatus.NOT_ACCEPTABLE) - actionLogger.error( - InvalidParamMessage("Sender has customer status INACTIVE: " + queueMessage.headers[clientIdHeader]) - ) - } - - // Track sender information - actionHistory.trackActionSenderInfo(sender.fullName, queueMessage.headers["payloadname"]) - actionHistory.trackActionResult(HttpStatus.CREATED) - sender - } - } - - /** - * Handles successful processing of the queue message. - * - * @param queueMessage The queue message containing details about the report. - * @param sender The sender information. - * @param actionHistory The action history related to receiving the report. - * @return A list of FHIR engine run results. - */ - private fun handleSuccessfulProcessing( - queueMessage: FhirReceiveQueueMessage, - sender: Sender, - actionLogger: ActionLogger, - actionHistory: ActionHistory, - ): List { - // Get content from blob storage and create report - val report = validateSubmissionMessage(sender, actionLogger, queueMessage) ?: return emptyList() - - // Determine the mime format of the message - val mimeFormat = - MimeFormat.valueOfFromMimeType( - queueMessage.headers[contentTypeHeader]?.substringBefore(';') ?: "" - ) - - val blobInfo = BlobAccess.BlobInfo( - mimeFormat, - queueMessage.blobURL, - queueMessage.digest.toByteArray() - ) - - actionHistory.trackExternalInputReport( - report, - blobInfo - ) - - // Send an event indicating the report was received - reportEventService.sendReportEvent( - eventName = ReportStreamEventName.REPORT_RECEIVED, - childReport = report, - pipelineStepName = TaskAction.receive - ) { - params( - listOfNotNull( - ReportStreamEventProperties.REQUEST_PARAMETERS to queueMessage.headers.toString(), - ReportStreamEventProperties.SENDER_NAME to sender.fullName, - ReportStreamEventProperties.FILE_LENGTH to queueMessage.headers["content-length"].toString(), - getSenderIP(queueMessage.headers)?.let { ReportStreamEventProperties.SENDER_IP to it }, - ReportStreamEventProperties.ITEM_FORMAT to mimeFormat - ).toMap() - ) - } - - // Insert the acceptance into the submissions table - val tableEntity = Submission( - queueMessage.reportId.toString(), - "Accepted", - queueMessage.blobURL, - actionLogger.errors.takeIf { it.isNotEmpty() }?.map { it.detail.message }?.toString() - ) - submissionTableService.insertSubmission(tableEntity) - - return if (actionLogger.errors.isNotEmpty()) { - // Send an event indicating the report was received - reportEventService.sendReportProcessingError( - ReportStreamEventName.REPORT_NOT_PROCESSABLE, - report, - TaskAction.receive, - "Submitted report was either empty or could not be parsed." - ) { - params( - actionLogger.errors.associateBy { ReportStreamEventProperties.PROCESSING_ERROR } - .plus( - mapOf( - ReportStreamEventProperties.REQUEST_PARAMETERS to queueMessage.headers.toString(), - ) - ) - ) - } - emptyList() - } else { - // Create a route event - val routeEvent = ProcessEvent(Event.EventAction.CONVERT, report.id, Options.None, emptyMap(), emptyList()) - - // Return the result of the FHIR engine run - listOf( - FHIREngineRunResult( - routeEvent, - report, - queueMessage.blobURL, - FhirConvertQueueMessage( - report.id, - queueMessage.blobURL, - queueMessage.digest, - queueMessage.blobSubFolderName, - sender.topic, - sender.schemaName - ) - ) - ) - } - } - - private fun validateSubmissionMessage( - sender: Sender, - actionLogger: ActionLogger, - queueMessage: FhirReceiveQueueMessage, - ): Report? { - val rawReport = BlobAccess.downloadBlob(queueMessage.blobURL, queueMessage.digest) - return if (rawReport.isBlank()) { - actionLogger.error(InvalidReportMessage("Provided raw data is empty.")) - null - } else { - val report: Report - val sources = listOf(ClientSource(organization = sender.organizationName, client = sender.name)) - - when (sender.format) { - MimeFormat.HL7 -> { - val messages: List = HL7Reader(actionLogger).getMessages(rawReport) - val isBatch: Boolean = HL7Reader(actionLogger).isBatch(rawReport, messages.size) - // create a Report for this incoming HL7 message to use for tracking in the database - - report = Report( - if (isBatch) MimeFormat.HL7_BATCH else MimeFormat.HL7, - sources, - messages.size, - metadata = metadata, - nextAction = TaskAction.convert, - topic = sender.topic, - id = queueMessage.reportId, - bodyURL = queueMessage.blobURL - ) - - // check for valid message type - messages.forEachIndexed { idx, element -> - MessageType.validateMessageType(element, actionLogger, idx + 1) - } - } - - MimeFormat.FHIR -> { - val bundles = FhirTranscoder.getBundles(rawReport, actionLogger) - report = Report( - MimeFormat.FHIR, - sources, - bundles.size, - metadata = metadata, - nextAction = TaskAction.convert, - topic = sender.topic, - id = queueMessage.reportId, - bodyURL = queueMessage.blobURL - ) - } - - else -> { - actionLogger.error(InvalidReportMessage("Unsupported sender format: ${sender.format}")) - reportEventService.sendSubmissionProcessingError( - ReportStreamEventName.REPORT_NOT_PROCESSABLE, - TaskAction.receive, - "Unsupported sender format ${sender.format}.", - queueMessage.reportId, - queueMessage.blobURL - ) { - params( - actionLogger.errors.associateBy { ReportStreamEventProperties.PROCESSING_ERROR } - .plus( - mapOf( - ReportStreamEventProperties.REQUEST_PARAMETERS to queueMessage.headers.toString(), - ReportStreamEventProperties.SENDER_NAME to sender.fullName, - ReportStreamEventProperties.FILE_LENGTH to queueMessage.headers["content-length"] - .toString(), - ReportStreamEventProperties.SENDER_IP to (getSenderIP(queueMessage.headers) ?: ""), - ReportStreamEventProperties.ITEM_FORMAT to sender.format - ) - ) - ) - } - // Insert the acceptance into the submissions table - val tableEntity = Submission( - queueMessage.reportId.toString(), - "Rejected", - queueMessage.blobURL, - actionLogger.errors.takeIf { it.isNotEmpty() }?.map { it.detail.message }?.toString() - ) - submissionTableService.insertSubmission(tableEntity) - throw IllegalStateException("Unsupported sender format: ${sender.format}") - } - } - report - } - } -} \ No newline at end of file diff --git a/prime-router/src/main/kotlin/fhirengine/engine/FHIRReceiverFilter.kt b/prime-router/src/main/kotlin/fhirengine/engine/FHIRReceiverFilter.kt index cc732026df9..eb6313974b0 100644 --- a/prime-router/src/main/kotlin/fhirengine/engine/FHIRReceiverFilter.kt +++ b/prime-router/src/main/kotlin/fhirengine/engine/FHIRReceiverFilter.kt @@ -2,8 +2,6 @@ package gov.cdc.prime.router.fhirengine.engine import com.fasterxml.jackson.annotation.JsonProperty import fhirengine.engine.CustomFhirPathFunctions -import gov.cdc.prime.reportstream.shared.BlobUtils -import gov.cdc.prime.reportstream.shared.QueueMessage import gov.cdc.prime.router.ActionLogDetail import gov.cdc.prime.router.ActionLogScope import gov.cdc.prime.router.ActionLogger @@ -342,7 +340,7 @@ class FHIRReceiverFilter( // download and parse FHIR document val fhirJson = LogMeasuredTime.measureAndLogDurationWithReturnedValue( "Downloaded content from queue message" - ) { BlobAccess.downloadBlob(queueMessage.blobURL, queueMessage.digest) } + ) { queueMessage.downloadContent() } val bundle = FhirTranscoder.decode(fhirJson) actionHistory.trackActionReceiverInfo(receiver.organizationName, receiver.name) @@ -391,7 +389,7 @@ class FHIRReceiverFilter( FhirTranslateQueueMessage( report.id, blobInfo.blobUrl, - BlobUtils.digestToString(blobInfo.digest), + BlobAccess.digestToString(blobInfo.digest), queueMessage.blobSubFolderName, queueMessage.topic, receiver.fullName diff --git a/prime-router/src/main/kotlin/fhirengine/engine/FHIRTranslator.kt b/prime-router/src/main/kotlin/fhirengine/engine/FHIRTranslator.kt index 506c9b2cfd7..7e31a8a7e50 100644 --- a/prime-router/src/main/kotlin/fhirengine/engine/FHIRTranslator.kt +++ b/prime-router/src/main/kotlin/fhirengine/engine/FHIRTranslator.kt @@ -6,7 +6,6 @@ import ca.uhn.hl7v2.model.Segment import ca.uhn.hl7v2.util.Terser import fhirengine.engine.CustomFhirPathFunctions import fhirengine.engine.CustomTranslationFunctions -import gov.cdc.prime.reportstream.shared.QueueMessage import gov.cdc.prime.router.ActionLogger import gov.cdc.prime.router.CustomerStatus import gov.cdc.prime.router.Hl7Configuration @@ -64,17 +63,18 @@ class FHIRTranslator( actionLogger: ActionLogger, actionHistory: ActionHistory, ): List { - when (message) { - is FhirTranslateQueueMessage -> { - val contextMap = mapOf( - MDCUtils.MDCProperty.ACTION_NAME to actionHistory.action.actionName.name, - MDCUtils.MDCProperty.REPORT_ID to message.reportId, - MDCUtils.MDCProperty.TOPIC to message.topic, - MDCUtils.MDCProperty.BLOB_URL to message.blobURL - ) - withLoggingContext(contextMap) { - logger.trace("Starting translate work") - actionHistory.trackExistingInputReport(message.reportId) + message as ReportPipelineMessage + val contextMap = mapOf( + MDCUtils.MDCProperty.ACTION_NAME to actionHistory.action.actionName.name, + MDCUtils.MDCProperty.REPORT_ID to message.reportId, + MDCUtils.MDCProperty.TOPIC to message.topic, + MDCUtils.MDCProperty.BLOB_URL to message.blobURL + ) + withLoggingContext(contextMap) { + logger.trace("Starting translate work") + actionHistory.trackExistingInputReport(message.reportId) + when (message) { + is FhirTranslateQueueMessage -> { val receiver = settings.findReceiver(message.receiverFullName) ?: throw RuntimeException("Receiver with name ${message.receiverFullName} was not found") actionHistory.trackActionReceiverInfo(receiver.organizationName, receiver.name) @@ -84,13 +84,13 @@ class FHIRTranslator( listOf(sendTranslated(message, receiver, actionHistory)) } } - } - else -> { - // Handle the case where casting failed - throw RuntimeException( - "Message was not a FhirTranslateQueueMessage and cannot be " + - "processed by FHIRTranslator: $message" - ) + + else -> { + throw RuntimeException( + "Message was not a FhirTranslateQueueMessage and cannot be " + + "processed by FHIRTranslator: $message" + ) + } } } } @@ -145,10 +145,7 @@ class FHIRTranslator( actionHistory: ActionHistory, ): FHIREngineRunResult { logger.trace("Preparing to send translated message") - val bodyBytes = - getByteArrayFromBundle( - receiver, FhirTranscoder.decode(BlobAccess.downloadBlob(message.blobURL, message.digest)) - ) + val bodyBytes = getByteArrayFromBundle(receiver, FhirTranscoder.decode(message.downloadContent())) val (report, event, blobInfo) = Report.generateReportAndUploadBlob( Event.EventAction.BATCH, @@ -224,7 +221,7 @@ class FHIRTranslator( val converter = FhirToHl7Converter( receiver.schemaName, - BlobAccess.BlobContainerMetadata.build("metadata", Environment.get().storageEnvVar), + BlobAccess.BlobContainerMetadata.build("metadata", Environment.get().blobEnvVar), context = FhirToHl7Context(CustomFhirPathFunctions(), config, CustomTranslationFunctions()) ) val hl7Message = converter.process(bundle) diff --git a/prime-router/src/main/kotlin/fhirengine/engine/MessageType.kt b/prime-router/src/main/kotlin/fhirengine/engine/MessageType.kt deleted file mode 100644 index 7251f9d5460..00000000000 --- a/prime-router/src/main/kotlin/fhirengine/engine/MessageType.kt +++ /dev/null @@ -1,64 +0,0 @@ -package gov.cdc.prime.router.fhirengine.engine - -import ca.uhn.hl7v2.model.Message -import gov.cdc.prime.router.ActionLogger -import gov.cdc.prime.router.InvalidHL7Message -import fhirengine.translation.hl7.structures.nistelr251.segment.MSH as NIST_MSH - -/** - * Class representing a specific HL7 message type. - * - * This class is used to validate that a given HL7 message matches the expected message type. - * - * @property expectedType The HL7 message type this instance represents. - */ -enum class MessageType { - - ORU_R01, - ORM_O01, - OML_O21, - ; - - companion object { - - /** - * Creates a MessageType instance from a string representation. - * - * @param type The string representation of the HL7 message type. - * @return The corresponding MessageType instance, or null if the type is unsupported. - */ - private fun fromString(type: String): MessageType? { - return when (type) { - "ORU_R01" -> ORU_R01 - "ORM_O01" -> ORM_O01 - "OML_O21" -> OML_O21 - else -> null - } - } - - /** - * Validates the type of the given message. - * - * This method retrieves the message type from the message and checks if it matches any of the supported types. - * If the type is unsupported, an error is logged. - * - * @param message The HL7 message to be validated. - * @param actionLogs Logger to record the result of the validation. - * @param itemIndex The index of the item being processed, used for logging. - */ - fun validateMessageType(message: Message, actionLogs: ActionLogger, itemIndex: Int) { - // Determine the message type string from the MSH segment - val messageTypeStr = when (val msh = message.get("MSH")) { - is NIST_MSH -> msh.messageType.messageStructure.toString() - is ca.uhn.hl7v2.model.v251.segment.MSH -> msh.messageType.messageStructure.toString() - is ca.uhn.hl7v2.model.v27.segment.MSH -> msh.messageType.messageStructure.toString() - else -> "" - } - - // Convert the string representation to a MessageType instance and validate it - val messageType = fromString(messageTypeStr) - messageType ?: actionLogs.getItemLogger(itemIndex) - .error(InvalidHL7Message("Ignoring unsupported HL7 message type $messageType")) - } - } -} \ No newline at end of file diff --git a/prime-router/src/main/kotlin/fhirengine/engine/PrimeRouterQueueMessage.kt b/prime-router/src/main/kotlin/fhirengine/engine/QueueMessage.kt similarity index 51% rename from prime-router/src/main/kotlin/fhirengine/engine/PrimeRouterQueueMessage.kt rename to prime-router/src/main/kotlin/fhirengine/engine/QueueMessage.kt index 6350a676a33..032ce14fc5c 100644 --- a/prime-router/src/main/kotlin/fhirengine/engine/PrimeRouterQueueMessage.kt +++ b/prime-router/src/main/kotlin/fhirengine/engine/QueueMessage.kt @@ -3,14 +3,24 @@ package gov.cdc.prime.router.fhirengine.engine import com.fasterxml.jackson.annotation.JsonSubTypes import com.fasterxml.jackson.annotation.JsonTypeInfo import com.fasterxml.jackson.annotation.JsonTypeName -import gov.cdc.prime.reportstream.shared.QueueMessage +import com.fasterxml.jackson.databind.DeserializationFeature +import com.fasterxml.jackson.databind.json.JsonMapper +import com.fasterxml.jackson.databind.jsontype.BasicPolymorphicTypeValidator +import com.fasterxml.jackson.module.kotlin.jacksonMapperBuilder +import com.fasterxml.jackson.module.kotlin.readValue import gov.cdc.prime.router.Options import gov.cdc.prime.router.ReportId import gov.cdc.prime.router.Topic +import gov.cdc.prime.router.azure.BlobAccess import gov.cdc.prime.router.azure.Event import gov.cdc.prime.router.azure.QueueAccess +import java.util.Base64 import java.util.UUID +// This is a size limit dictated by our infrastructure in azure +// https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-azure-and-service-bus-queues-compared-contrasted +private const val MESSAGE_SIZE_LIMIT = 64 * 1000 + /** * An interface for Messages to be put on an Azure Queue */ @@ -24,39 +34,84 @@ import java.util.UUID JsonSubTypes.Type(ProcessEventQueueMessage::class, name = "process"), JsonSubTypes.Type(ReportEventQueueMessage::class, name = "report") ) -abstract class PrimeRouterQueueMessage : QueueMessage { +abstract class QueueMessage { + abstract val messageQueueName: String + fun send(queueAccess: QueueAccess) { if (this.messageQueueName.isNotEmpty()) { queueAccess.sendMessage(this.messageQueueName, serialize()) } } + + fun serialize(): String { + val bytes = mapper.writeValueAsBytes(this) + check(bytes.size < MESSAGE_SIZE_LIMIT) { "Message is too big for the queue." } + return String(Base64.getEncoder().encode(bytes)) + } + + companion object { + private val ptv = BasicPolymorphicTypeValidator.builder() + .build() + val mapper: JsonMapper = jacksonMapperBuilder() + .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false) + .polymorphicTypeValidator(ptv) + .activateDefaultTyping(ptv) + .build() + + fun deserialize(s: String): QueueMessage { + return mapper.readValue(s) + } + + const val elrConvertQueueName = "elr-fhir-convert" + const val elrDestinationFilterQueueName = "elr-fhir-destination-filter" + const val elrReceiverFilterQueueName = "elr-fhir-receiver-filter" + const val elrTranslationQueueName = "elr-fhir-translate" + const val elrSendQueueName = "send" + } + + override fun toString(): String { + return mapper.writeValueAsString(this) + } } -abstract class ReportPipelineMessage : - QueueMessage.ReportInformation, - PrimeRouterQueueMessage() +interface WithDownloadableReport { + val blobURL: String + val digest: String -@JsonTypeName("receive") -data class FhirReceiveQueueMessage( - override val reportId: ReportId, - override val blobURL: String, - override val digest: String, - override val blobSubFolderName: String, - override val headers: Map = emptyMap(), -) : ReportPipelineMessage(), QueueMessage.ReceiveInformation { - override val messageQueueName = QueueMessage.Companion.elrReceiveQueueName + /** + * Download the file associated with a RawSubmission message + */ + fun downloadContent(): String { + val blobContent = BlobAccess.downloadBlobAsByteArray(this.blobURL) + val localDigest = BlobAccess.digestToString(BlobAccess.sha256Digest(blobContent)) + check(this.digest == localDigest) { + "FHIR - Downloaded file does not match expected file\n${this.digest} | $localDigest" + } + return String(blobContent) + } +} + +interface ReportIdentifyingInformation { + val blobSubFolderName: String + val reportId: ReportId + val topic: Topic } +abstract class ReportPipelineMessage : + ReportIdentifyingInformation, + WithDownloadableReport, + QueueMessage() + @JsonTypeName("convert") data class FhirConvertQueueMessage( override val reportId: ReportId, override val blobURL: String, override val digest: String, override val blobSubFolderName: String, - var topic: Topic, - var schemaName: String = "", + override val topic: Topic, + val schemaName: String = "", ) : ReportPipelineMessage() { - override val messageQueueName = QueueMessage.Companion.elrConvertQueueName + override val messageQueueName = elrConvertQueueName } @JsonTypeName("destination-filter") @@ -65,9 +120,9 @@ data class FhirDestinationFilterQueueMessage( override val blobURL: String, override val digest: String, override val blobSubFolderName: String, - val topic: Topic, + override val topic: Topic, ) : ReportPipelineMessage() { - override val messageQueueName = QueueMessage.Companion.elrDestinationFilterQueueName + override val messageQueueName = elrDestinationFilterQueueName } @JsonTypeName("receiver-filter") @@ -76,10 +131,10 @@ data class FhirReceiverFilterQueueMessage( override val blobURL: String, override val digest: String, override val blobSubFolderName: String, - val topic: Topic, + override val topic: Topic, val receiverFullName: String, ) : ReportPipelineMessage() { - override val messageQueueName = QueueMessage.Companion.elrReceiverFilterQueueName + override val messageQueueName = elrReceiverFilterQueueName } @JsonTypeName("translate") @@ -88,13 +143,13 @@ data class FhirTranslateQueueMessage( override val blobURL: String, override val digest: String, override val blobSubFolderName: String, - val topic: Topic, + override val topic: Topic, val receiverFullName: String, ) : ReportPipelineMessage() { - override val messageQueueName = QueueMessage.Companion.elrTranslationQueueName + override val messageQueueName = elrTranslationQueueName } -abstract class WithEventAction : PrimeRouterQueueMessage() { +abstract class WithEventAction : QueueMessage() { abstract val eventAction: Event.EventAction } @@ -115,7 +170,7 @@ data class ReportEventQueueMessage( val reportId: UUID, val at: String, ) : WithEventAction() { - override val messageQueueName = QueueMessage.Companion.elrSendQueueName + override val messageQueueName = elrSendQueueName } @JsonTypeName("process") @@ -128,22 +183,4 @@ data class ProcessEventQueueMessage( val at: String, ) : WithEventAction() { override val messageQueueName = "" -} - -// Register submodule subtypes -fun registerPrimeRouterQueueMessageSubtypes() { - QueueMessage.ObjectMapperProvider.registerSubtypes( - FhirConvertQueueMessage::class.java, - FhirDestinationFilterQueueMessage::class.java, - FhirReceiverFilterQueueMessage::class.java, - FhirTranslateQueueMessage::class.java, - BatchEventQueueMessage::class.java, - ProcessEventQueueMessage::class.java, - ReportEventQueueMessage::class.java - ) -} - -// Call this function at the appropriate initialization point -fun initializeQueueMessages() { - registerPrimeRouterQueueMessageSubtypes() } \ No newline at end of file diff --git a/prime-router/src/main/kotlin/fhirengine/translation/hl7/FhirTransformer.kt b/prime-router/src/main/kotlin/fhirengine/translation/hl7/FhirTransformer.kt index ecfe4571007..8720b3ed611 100644 --- a/prime-router/src/main/kotlin/fhirengine/translation/hl7/FhirTransformer.kt +++ b/prime-router/src/main/kotlin/fhirengine/translation/hl7/FhirTransformer.kt @@ -36,7 +36,7 @@ class FhirTransformer( schema: String, blobConnectionInfo: BlobAccess.BlobContainerMetadata = BlobAccess.BlobContainerMetadata.build( "metadata", - Environment.get().storageEnvVar + Environment.get().blobEnvVar ), ) : this( schemaRef = fhirTransformSchemaFromFile(schema, blobConnectionInfo), diff --git a/prime-router/src/main/kotlin/transport/RESTTransport.kt b/prime-router/src/main/kotlin/transport/RESTTransport.kt index 7f7f0c8e448..46bc89ce262 100644 --- a/prime-router/src/main/kotlin/transport/RESTTransport.kt +++ b/prime-router/src/main/kotlin/transport/RESTTransport.kt @@ -113,7 +113,6 @@ class RESTTransport(private val httpClient: HttpClient? = null) : ITransport { if (restTransportInfo.authType == "apiKey") { val apiKeyCredential = credential as UserApiKeyCredential - httpHeaders["shared-api-key"] = apiKeyCredential.apiKey httpHeaders["System_ID"] = apiKeyCredential.user httpHeaders["Key"] = apiKeyCredential.apiKey accessToken = apiKeyCredential.apiKey diff --git a/prime-router/src/main/resources/metadata/fhir_transforms/common/remove-pii-address.yml b/prime-router/src/main/resources/metadata/fhir_transforms/common/remove-pii-address.yml index 4f3244f0067..52117eab502 100644 --- a/prime-router/src/main/resources/metadata/fhir_transforms/common/remove-pii-address.yml +++ b/prime-router/src/main/resources/metadata/fhir_transforms/common/remove-pii-address.yml @@ -2,9 +2,8 @@ elements: # removing the street address is more complicated because it is a list so we will do this in code - name: pii-removal-street-address2 - condition: '%resource.extension("https://reportstream.cdc.gov/fhir/StructureDefinition/xad-address").extension.where(url = "XAD.2").empty().not()' value: [ 'getFakeValueForElement("STREET_ADDRESS_2")' ] - bundleProperty: '%resource.extension("https://reportstream.cdc.gov/fhir/StructureDefinition/xad-address").extension.where(url = "XAD.2").value' + bundleProperty: '%resource.extension(%`rsext-xad-address`).extension.where(url = "XAD.2").value' - name: pii-removal-city value: [ 'getFakeValueForElement("CITY",%resource.state)' ] diff --git a/prime-router/src/main/resources/metadata/fhir_transforms/common/remove-pii-name.yml b/prime-router/src/main/resources/metadata/fhir_transforms/common/remove-pii-name.yml index 546e4581574..4968f5eac5a 100644 --- a/prime-router/src/main/resources/metadata/fhir_transforms/common/remove-pii-name.yml +++ b/prime-router/src/main/resources/metadata/fhir_transforms/common/remove-pii-name.yml @@ -6,6 +6,5 @@ elements: # removing a given name is more complicated because it is a list so we will do this in code - name: pii-removal-middle-name - condition: '%resource.extension("https://reportstream.cdc.gov/fhir/StructureDefinition/xpn-human-name").exists()' value: [ 'getFakeValueForElement("PERSON_GIVEN_NAME")' ] - bundleProperty: '%resource.extension("https://reportstream.cdc.gov/fhir/StructureDefinition/xpn-human-name").extension("XPN.2").value[x]' \ No newline at end of file + bundleProperty: '%resource.extension(%`rsext-xpn-human-name`).extension.where(url="XPN.3").value' \ No newline at end of file diff --git a/prime-router/src/main/resources/metadata/fhir_transforms/common/remove-pii-telecom.yml b/prime-router/src/main/resources/metadata/fhir_transforms/common/remove-pii-telecom.yml index ce9dc465a8b..fef6b43d8a6 100644 --- a/prime-router/src/main/resources/metadata/fhir_transforms/common/remove-pii-telecom.yml +++ b/prime-router/src/main/resources/metadata/fhir_transforms/common/remove-pii-telecom.yml @@ -2,7 +2,7 @@ elements: - name: pii-removal-phone-area-code condition: "%resource.where(system = 'phone')" value: [ 'getFakeValueForElement("TELEPHONE").substring(0,3)' ] - bundleProperty: '%resource.extension(`https://reportstream.cdc.gov/fhir/StructureDefinition/contactpoint-area`).value[x]' + bundleProperty: '%resource.extension(%`ext-contactpoint-area`).value' - name: pii-removal-local-phone condition: "%resource.where(system = 'phone')" diff --git a/prime-router/src/main/resources/metadata/fhir_transforms/common/suppress-device-information.yml b/prime-router/src/main/resources/metadata/fhir_transforms/common/suppress-device-information.yml deleted file mode 100644 index f3d3ffdb557..00000000000 --- a/prime-router/src/main/resources/metadata/fhir_transforms/common/suppress-device-information.yml +++ /dev/null @@ -1,27 +0,0 @@ -## Suppresses Device information OBX-18-1,OBX-18-2,OBX-18-3 -elements: - ##OBX-18-1 - - name: suppress-device-name - resource: 'Bundle.entry.resource.ofType(Device).identifier' - value: [ '""' ] - bundleProperty: '%resource.value' - - ##OBX-18-2 - - name: suppess-device-namespace_id - resource: 'Bundle.entry.resource.ofType(Device).identifier' - condition: '%resource.extension("https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority").extension("https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id").exists()' - bundleProperty: '%resource.extension("https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority").extension("https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id").value[x]' - value: [ '""' ] - - ##OBX-18-3 - - name: suppress-device-universal-id - resource: 'Bundle.entry.resource.ofType(Device).identifier' - condition: '%resource.extension("https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority").extension("https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id").exists()' - bundleProperty: '%resource.extension("https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority").extension("https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id").value[x]' - value: [ '""' ] - - ##OBX-18-3 different mappings - - name: suppress-device-type-id - resource: 'Bundle.entry.resource.ofType(Device).identifier' - bundleProperty: '%resource.type.coding.code' - value: [ '""' ] \ No newline at end of file diff --git a/prime-router/src/main/resources/metadata/hl7_mapping/receivers/Common/observation-to-nte/unwanted-conditions-to-notes.yml b/prime-router/src/main/resources/metadata/hl7_mapping/receivers/Common/observation-to-nte/unwanted-conditions-to-notes.yml deleted file mode 100644 index 072c2eb82a4..00000000000 --- a/prime-router/src/main/resources/metadata/hl7_mapping/receivers/Common/observation-to-nte/unwanted-conditions-to-notes.yml +++ /dev/null @@ -1,42 +0,0 @@ -# $schema: ./../../../../../../../../metadata/json_schema/fhir/fhir-to-hl7-mapping.json - -constants: - commentCondition: '%resource.code.coding.code.exists() and %resource.code.text.exists()' - -elements: - - name: note-id - value: [ '%noteIndex + 1' ] - hl7Spec: [ '%{hl7NotePath}/NTE(%{noteIndex})-1' ] - - - name: note-source - value: [ '%resource.extension(%`rsext-note-source`).value' ] - hl7Spec: [ '%{hl7NotePath}/NTE(%{noteIndex})-2' ] - - - name: unwanted-condition-source - condition: '%commentCondition' - value: ['"O"'] - hl7Spec: [ '%{hl7NotePath}/NTE(%{noteIndex})-2' ] - - - name: unwanted-condition-comment-string - condition: '%commentCondition' - value: [ '"OBX filtered for identifier = " + %resource.code.coding.code + " - " + %resource.code.text + "; value = " + %resource.value.coding.code + " - " + %resource.value.coding.display + ". OBX was removed due to your jurisdictional reporting rules indicating this result is not reportable."' ] - hl7Spec: [ '%{hl7NotePath}/NTE(%{noteIndex})-3' ] - - - name: note-comment - condition: '%context.author.exists().not() or (%context.author.exists() and %context.author.is(string).not())' - resource: '%resource.text.union(%resource.extension(%`rsext-note-comment`).tail().value)' - resourceIndex: stIndex - constants: - stField: '%{hl7NotePath}/NTE(%{noteIndex})-3(%{stIndex})' - schema: classpath:/metadata/hl7_mapping/datatypes/annotation/ST.yml - - - name: note-comment-author-string - condition: '%resource.author.exists() and %resource.author.is(string)' - value: [ '%resource.text + " Authored by: " + %resource.author' ] - hl7Spec: [ '%{hl7NotePath}/NTE(%{noteIndex})-3' ] - - - name: note-comment-type-identifier - resource: '%resource.extension(%`rsext-note-type`).value' - constants: - cweField: '%{hl7NotePath}/NTE(%{noteIndex})-4' - schema: classpath:/metadata/hl7_mapping/datatypes/codeableConcept/CWE.yml diff --git a/prime-router/src/main/resources/metadata/hl7_mapping/receivers/STLTs/NJ/NJ-receiver-transform.yml b/prime-router/src/main/resources/metadata/hl7_mapping/receivers/STLTs/NJ/NJ-receiver-transform.yml deleted file mode 100644 index 197d135adfb..00000000000 --- a/prime-router/src/main/resources/metadata/hl7_mapping/receivers/STLTs/NJ/NJ-receiver-transform.yml +++ /dev/null @@ -1,59 +0,0 @@ -hl7Class: ca.uhn.hl7v2.model.v251.message.ORU_R01 - -extends: classpath:/metadata/hl7_mapping/ORU_R01/ORU_R01-base.yml -elements: - # MSH 3-1 - - name: nj-sending-application-namespace-id - value: [ '"CDC PRIME - Atlanta, Georgia (Dekalb)"' ] - hl7Spec: [ MSH-3-1 ] - - # MSH 3-2 - - name: nj-sending-application-universal-id - value: [ '"2.16.840.1.114222.4.1.237821"' ] - hl7Spec: [ MSH-3-2 ] - - # MSH 3-3 - - name: nj-sending-application-universal-id-type - value: [ '"ISO"' ] - hl7Spec: [ MSH-3-3 ] - - # MSH 4-1 - - name: nj-reporting-facility-name - value: [ '"CDC PRIME"' ] - hl7Spec: [ MSH-4-1 ] - - # MSH 4-2 - - name: nj-reporting-facility-id - value: [ '"11D2030855"' ] - hl7Spec: [ MSH-4-2 ] - - # MSH 4-3 - - name: nj-reporting-facility-id-type - value: [ '"CLIA"' ] - hl7Spec: [ MSH-4-3 ] - - # MSH 5 - - name: nj-receiving-application-namespace-id - value: [ '"ELRS"' ] - hl7Spec: [ MSH-5-1 ] - - - name: nj-receiving-application-universal-id - value: [ '"2.16.840.1.113883.3.1299.5.1.6.1"' ] - hl7Spec: [ MSH-5-2 ] - - - name: nj-receiving-application-universal-id-type - value: [ '"ISO"' ] - hl7Spec: [ MSH-5-3 ] - - # MSH 6 - - name: nj-receiving-facility-namespace-id - value: [ '"NJDOH"' ] - hl7Spec: [ MSH-6-1 ] - - - name: nj-receiving-facility-universal-id - value: [ '"2.16.840.1.113883.3.1299"' ] - hl7Spec: [ MSH-6-2 ] - - - name: nj-receiving-facility-universal-id-type - value: [ '"ISO"' ] - hl7Spec: [ MSH-6-3 ] \ No newline at end of file diff --git a/prime-router/src/main/resources/metadata/hl7_mapping/receivers/STLTs/Test/test-receiver-transform.yml b/prime-router/src/main/resources/metadata/hl7_mapping/receivers/STLTs/Test/test-receiver-transform.yml deleted file mode 100644 index 54f92f330cc..00000000000 --- a/prime-router/src/main/resources/metadata/hl7_mapping/receivers/STLTs/Test/test-receiver-transform.yml +++ /dev/null @@ -1,15 +0,0 @@ -hl7Class: ca.uhn.hl7v2.model.v251.message.ORU_R01 - -extends: classpath:/metadata/hl7_mapping/ORU_R01/ORU_R01-base.yml - -elements: - - - name: observation-result-with-aoe - resource: "%resource.result.resolve().where(code.coding.extension('https://reportstream.cdc.gov/fhir/StructureDefinition/condition-code').value.where(code in ('55735004' | '840539006'))) | %resource.basedOn.resolve().supportingInfo.resolve()" - - - name: order-note - resource: "%resource.basedOn.resolve().note | %resource.result.resolve().where(code.coding.extension('https://reportstream.cdc.gov/fhir/StructureDefinition/condition-code').value.where(code in ('55735004' | '840539006')).exists().not())" - schema: classpath:/metadata/hl7_mapping/receivers/Common/observation-to-nte/unwanted-conditions-to-notes.yml - - - diff --git a/prime-router/src/test/kotlin/SubmissionReceiverTests.kt b/prime-router/src/test/kotlin/SubmissionReceiverTests.kt index 5f3b70619fa..981269d6625 100644 --- a/prime-router/src/test/kotlin/SubmissionReceiverTests.kt +++ b/prime-router/src/test/kotlin/SubmissionReceiverTests.kt @@ -3,7 +3,6 @@ package gov.cdc.prime.router import assertk.assertFailure import assertk.assertThat import assertk.assertions.isInstanceOf -import gov.cdc.prime.reportstream.shared.QueueMessage import gov.cdc.prime.router.azure.ActionHistory import gov.cdc.prime.router.azure.BlobAccess import gov.cdc.prime.router.azure.DatabaseAccess @@ -12,6 +11,7 @@ import gov.cdc.prime.router.azure.ReportWriter import gov.cdc.prime.router.azure.WorkflowEngine import gov.cdc.prime.router.azure.db.enums.TaskAction import gov.cdc.prime.router.common.BaseEngine +import gov.cdc.prime.router.fhirengine.engine.QueueMessage import gov.cdc.prime.router.serializers.CsvSerializer import gov.cdc.prime.router.serializers.Hl7Serializer import gov.cdc.prime.router.serializers.ReadResult diff --git a/prime-router/src/test/kotlin/azure/ActionHistoryTests.kt b/prime-router/src/test/kotlin/azure/ActionHistoryTests.kt index 1d23f1c0356..93f9f67c299 100644 --- a/prime-router/src/test/kotlin/azure/ActionHistoryTests.kt +++ b/prime-router/src/test/kotlin/azure/ActionHistoryTests.kt @@ -9,7 +9,6 @@ import assertk.assertions.isNotNull import assertk.assertions.isNull import assertk.assertions.isTrue import com.microsoft.azure.functions.HttpMethod -import gov.cdc.prime.reportstream.shared.BlobUtils import gov.cdc.prime.router.ActionLog import gov.cdc.prime.router.ActionLogLevel import gov.cdc.prime.router.ClientSource @@ -130,11 +129,7 @@ class ActionHistoryTests { val actionHistory1 = ActionHistory(TaskAction.receive) val blobInfo1 = BlobAccess.BlobInfo(MimeFormat.CSV, "myUrl", byteArrayOf(0x11, 0x22)) val payloadName = "quux" - actionHistory1.trackExternalInputReport( - report1, - blobInfo1, - payloadName - ) + actionHistory1.trackExternalInputReport(report1, blobInfo1, payloadName) assertNotNull(actionHistory1.reportsReceived[report1.id]) val reportFile = actionHistory1.reportsReceived[report1.id]!! assertThat(reportFile.schemaName).isEqualTo("one") @@ -148,12 +143,7 @@ class ActionHistoryTests { assertThat(actionHistory1.action.externalName).isEqualTo(payloadName) // not allowed to track the same report twice. - assertFailure { - actionHistory1.trackExternalInputReport( - report1, - blobInfo1 - ) - } + assertFailure { actionHistory1.trackExternalInputReport(report1, blobInfo1) } } @Test @@ -455,10 +445,9 @@ class ActionHistoryTests { OffsetDateTime.now() ) mockkObject(BlobAccess.Companion) - mockkObject(BlobUtils) val blobUrls = mutableListOf() every { BlobAccess.uploadBlob(capture(blobUrls), any()) } returns "http://blobUrl" - every { BlobUtils.sha256Digest(any()) } returns byteArrayOf() + every { BlobAccess.sha256Digest(any()) } returns byteArrayOf() every { BlobAccess.uploadBody(any(), any(), any(), any(), Event.EventAction.NONE) } answers { callOriginal() } val header = mockk() every { @@ -695,10 +684,9 @@ class ActionHistoryTests { OffsetDateTime.now() ) mockkObject(BlobAccess.Companion) - mockkObject(BlobUtils) val blobUrls = mutableListOf() every { BlobAccess.uploadBlob(capture(blobUrls), any()) } returns "http://blobUrl" - every { BlobUtils.sha256Digest(any()) } returns byteArrayOf() + every { BlobAccess.sha256Digest(any()) } returns byteArrayOf() every { BlobAccess.uploadBody(any(), any(), any(), any(), Event.EventAction.NONE) } answers { callOriginal() } val header = mockk() every { diff --git a/prime-router/src/test/kotlin/azure/BlobAccessTests.kt b/prime-router/src/test/kotlin/azure/BlobAccessTests.kt index bdda5a8abdd..31a90ac3a25 100644 --- a/prime-router/src/test/kotlin/azure/BlobAccessTests.kt +++ b/prime-router/src/test/kotlin/azure/BlobAccessTests.kt @@ -20,7 +20,6 @@ import com.azure.storage.blob.BlobServiceClientBuilder import com.azure.storage.blob.models.BlobDownloadContentResponse import com.azure.storage.blob.models.BlobDownloadResponse import com.azure.storage.blob.models.BlobItem -import gov.cdc.prime.reportstream.shared.BlobUtils import gov.cdc.prime.router.BlobStoreTransportType import gov.cdc.prime.router.Metadata import gov.cdc.prime.router.MimeFormat @@ -550,14 +549,14 @@ class BlobAccessTests { Event.EventAction.NONE ) } returns - BlobAccess.BlobInfo(report1.bodyFormat, testUrl, BlobUtils.sha256Digest(testBytes)) + BlobAccess.BlobInfo(report1.bodyFormat, testUrl, BlobAccess.sha256Digest(testBytes)) val testBlob = BlobAccess() val result = testBlob.uploadReport(report1, testBytes) assertThat(result.format).isEqualTo(testFormat) assertThat(result.blobUrl).isEqualTo(testUrl) - assertThat(result.digest).isEqualTo(BlobUtils.sha256Digest(testBytes)) + assertThat(result.digest).isEqualTo(BlobAccess.sha256Digest(testBytes)) } @Test @@ -598,7 +597,7 @@ class BlobAccessTests { assertThat(result.format).isEqualTo(testFormat) // test blobUrl is as expected for the EventAction assertThat(result.blobUrl).contains(BlobAccess.directoryForAction(it)) - assertThat(result.digest).isEqualTo(BlobUtils.sha256Digest(testBytes)) + assertThat(result.digest).isEqualTo(BlobAccess.sha256Digest(testBytes)) } } @@ -778,7 +777,7 @@ class BlobAccessTests { @Test fun `test build container metadata`() { - val defaultEnvVar = Environment.get().storageEnvVar + val defaultEnvVar = Environment.get().blobEnvVar val testEnvVar = "testenv" val testContainer = "testcontainer" diff --git a/prime-router/src/test/kotlin/azure/EventTest.kt b/prime-router/src/test/kotlin/azure/EventTest.kt index 58c66f86f45..63080779d27 100644 --- a/prime-router/src/test/kotlin/azure/EventTest.kt +++ b/prime-router/src/test/kotlin/azure/EventTest.kt @@ -12,7 +12,7 @@ class EventTest { fun `test reportEvent encode and decode`() { val event = ReportEvent(Event.EventAction.SEND, UUID.randomUUID(), false) val message = event.toQueueMessage() - val returnEvent = Event.parsePrimeRouterQueueMessage(message) + val returnEvent = Event.parseQueueMessage(message) assertThat(returnEvent).isEqualTo(event) } @@ -20,7 +20,7 @@ class EventTest { fun `test reportEvent encode and decode with time`() { val event = ReportEvent(Event.EventAction.SEND, UUID.randomUUID(), false, OffsetDateTime.now()) val message = event.toQueueMessage() - val returnEvent = Event.parsePrimeRouterQueueMessage(message) + val returnEvent = Event.parseQueueMessage(message) assertThat(returnEvent).isEqualTo(event) } @@ -28,7 +28,7 @@ class EventTest { fun `test reportEvent encode and decode as empty`() { val event = ReportEvent(Event.EventAction.SEND, UUID.randomUUID(), true) val message = event.toQueueMessage() - val returnEvent = Event.parsePrimeRouterQueueMessage(message) + val returnEvent = Event.parseQueueMessage(message) assertThat(returnEvent).isEqualTo(event) } @@ -36,7 +36,7 @@ class EventTest { fun `test reportEvent encode and decode as empty with time`() { val event = ReportEvent(Event.EventAction.SEND, UUID.randomUUID(), true, OffsetDateTime.now()) val message = event.toQueueMessage() - val returnEvent = Event.parsePrimeRouterQueueMessage(message) + val returnEvent = Event.parseQueueMessage(message) assertThat(returnEvent).isEqualTo(event) } @@ -44,7 +44,7 @@ class EventTest { fun `test receiverEvent encode and decode`() { val event = BatchEvent(Event.EventAction.BATCH, "test", false) val message = event.toQueueMessage() - val returnEvent = Event.parsePrimeRouterQueueMessage(message) + val returnEvent = Event.parseQueueMessage(message) assertThat(returnEvent).isEqualTo(event) } @@ -52,7 +52,7 @@ class EventTest { fun `test batchEvent encode and decode with time`() { val event = BatchEvent(Event.EventAction.BATCH, "test", false, OffsetDateTime.now()) val message = event.toQueueMessage() - val returnEvent = Event.parsePrimeRouterQueueMessage(message) + val returnEvent = Event.parseQueueMessage(message) assertThat(returnEvent).isEqualTo(event) } @@ -60,7 +60,7 @@ class EventTest { fun `test batchEvent encode and decode as empty`() { val event = BatchEvent(Event.EventAction.BATCH, "test", true) val message = event.toQueueMessage() - val returnEvent = Event.parsePrimeRouterQueueMessage(message) + val returnEvent = Event.parseQueueMessage(message) assertThat(returnEvent).isEqualTo(event) } @@ -68,7 +68,7 @@ class EventTest { fun `test batchEvent encode and decode as empty with time`() { val event = BatchEvent(Event.EventAction.BATCH, "test", true, OffsetDateTime.now()) val message = event.toQueueMessage() - val returnEvent = Event.parsePrimeRouterQueueMessage(message) + val returnEvent = Event.parseQueueMessage(message) assertThat(returnEvent).isEqualTo(event) } @@ -78,7 +78,7 @@ class EventTest { val reportId = UUID.randomUUID() val event = ProcessEvent(Event.EventAction.PROCESS, reportId, Options.None, emptyMap(), emptyList(), at) val message = event.toQueueMessage() - val returnEvent = Event.parsePrimeRouterQueueMessage(message) + val returnEvent = Event.parseQueueMessage(message) assertThat(returnEvent).isEqualTo(event) } } \ No newline at end of file diff --git a/prime-router/src/test/kotlin/azure/ReportFunctionTests.kt b/prime-router/src/test/kotlin/azure/ReportFunctionTests.kt index c431198cd5f..74ed50419a3 100644 --- a/prime-router/src/test/kotlin/azure/ReportFunctionTests.kt +++ b/prime-router/src/test/kotlin/azure/ReportFunctionTests.kt @@ -34,8 +34,6 @@ import gov.cdc.prime.router.TopicReceiver import gov.cdc.prime.router.UniversalPipelineSender import gov.cdc.prime.router.azure.BlobAccess.BlobContainerMetadata import gov.cdc.prime.router.azure.db.enums.TaskAction -import gov.cdc.prime.router.azure.db.tables.pojos.ReportFile -import gov.cdc.prime.router.cli.PIIRemovalCommands import gov.cdc.prime.router.history.DetailedSubmissionHistory import gov.cdc.prime.router.history.azure.SubmissionsFacade import gov.cdc.prime.router.serializers.Hl7Serializer @@ -844,139 +842,4 @@ class ReportFunctionTests { ) + "]" ) } - - @Test - fun `No report`() { - val mockDb = mockk() - val reportId = UUID.randomUUID() - every { mockDb.fetchReportFile(reportId, null, null) } throws (IllegalStateException()) - val metadata = UnitTestUtils.simpleMetadata - val settings = FileSettings().loadOrganizations(oneOrganization) - val actionHistory = spyk(ActionHistory(TaskAction.receive)) - val result = ReportFunction( - makeEngine(metadata, settings), - actionHistory - ).processDownloadReport( - MockHttpRequestMessage(), - reportId, - true, - "local", - mockDb - ) - assert(result.status.value() == 400) - } - - @Test - fun `Report found, PII removal`() { - val reportFile = ReportFile() - reportFile.bodyUrl = "fakeurl.fhir" - mockkObject(AuthenticatedClaims) - val mockDb = mockk() - mockkClass(BlobAccess::class) - mockkObject(BlobAccess.Companion) - every { BlobAccess.Companion.getBlobConnection(any()) } returns "testconnection" - val blobConnectionInfo = mockk() - every { blobConnectionInfo.getBlobEndpoint() } returns "http://endpoint/metadata" - every { BlobAccess.downloadBlobAsByteArray(any()) } returns fhirReport.toByteArray(Charsets.UTF_8) - val reportId = UUID.randomUUID() - every { mockDb.fetchReportFile(reportId, null, null) } returns reportFile - val piiRemovalCommands = mockkClass(PIIRemovalCommands::class) - every { piiRemovalCommands.removePii(any()) } returns fhirReport - - val metadata = UnitTestUtils.simpleMetadata - val settings = FileSettings().loadOrganizations(oneOrganization) - val actionHistory = spyk(ActionHistory(TaskAction.receive)) - - val result = ReportFunction(makeEngine(metadata, settings), actionHistory).processDownloadReport( - MockHttpRequestMessage(), - reportId, - true, - "local", - mockDb, - piiRemovalCommands - ) - - assert(result.body.toString().contains("1667861767830636000.7db38d22-b713-49fc-abfa-2edba9c12347")) - } - - @Test - fun `Report found, asked for no removal on prod`() { - val reportFile = ReportFile() - reportFile.bodyUrl = "fakeurl.fhir" - mockkObject(AuthenticatedClaims) - val mockDb = mockk() - mockkClass(BlobAccess::class) - mockkObject(BlobAccess.Companion) - every { BlobAccess.Companion.getBlobConnection(any()) } returns "testconnection" - val blobConnectionInfo = mockk() - every { blobConnectionInfo.getBlobEndpoint() } returns "http://endpoint/metadata" - every { BlobAccess.downloadBlobAsByteArray(any()) } returns fhirReport.toByteArray(Charsets.UTF_8) - every { mockDb.fetchReportFile(reportId = any(), null, null) } returns reportFile - - val metadata = UnitTestUtils.simpleMetadata - val settings = FileSettings().loadOrganizations(oneOrganization) - val actionHistory = spyk(ActionHistory(TaskAction.receive)) - - val result = ReportFunction(makeEngine(metadata, settings), actionHistory).processDownloadReport( - MockHttpRequestMessage(), - UUID.randomUUID(), - false, - "prod", - mockDb - ) - - assert(result.status.equals(HttpStatus.BAD_REQUEST)) - } - - @Test - fun `valid access token, report found, no PII removal`() { - val reportFile = ReportFile() - reportFile.bodyUrl = "fakeurl.fhir" - mockkObject(AuthenticatedClaims) - val mockDb = mockk() - mockkClass(BlobAccess::class) - mockkObject(BlobAccess.Companion) - every { BlobAccess.Companion.getBlobConnection(any()) } returns "testconnection" - val blobConnectionInfo = mockk() - every { blobConnectionInfo.getBlobEndpoint() } returns "http://endpoint/metadata" - every { BlobAccess.downloadBlobAsByteArray(any()) } returns fhirReport.toByteArray(Charsets.UTF_8) - every { mockDb.fetchReportFile(reportId = any(), null, null) } returns reportFile - - val metadata = UnitTestUtils.simpleMetadata - val settings = FileSettings().loadOrganizations(oneOrganization) - val actionHistory = spyk(ActionHistory(TaskAction.receive)) - - val result = ReportFunction(makeEngine(metadata, settings), actionHistory).processDownloadReport( - MockHttpRequestMessage(), - UUID.randomUUID(), - false, - "local", - mockDb - ) - - assert(result.body.toString().contains("1667861767830636000.7db38d22-b713-49fc-abfa-2edba9c12347")) - } - - @Test - fun `valid access token, report found, body URL not FHIR`() { - val reportFile = ReportFile() - reportFile.bodyUrl = "fakeurl.hl7" - mockkObject(AuthenticatedClaims) - val mockDb = mockk() - every { mockDb.fetchReportFile(reportId = any(), null, null) } returns reportFile - - val metadata = UnitTestUtils.simpleMetadata - val settings = FileSettings().loadOrganizations(oneOrganization) - val actionHistory = spyk(ActionHistory(TaskAction.receive)) - - val result = ReportFunction(makeEngine(metadata, settings), actionHistory).processDownloadReport( - MockHttpRequestMessage(), - UUID.randomUUID(), - false, - "local", - mockDb - ) - - assert(result.status.equals(HttpStatus.BAD_REQUEST)) - } } \ No newline at end of file diff --git a/prime-router/src/test/kotlin/azure/WorkflowEngineTests.kt b/prime-router/src/test/kotlin/azure/WorkflowEngineTests.kt index a3cb73ffe24..65967d70739 100644 --- a/prime-router/src/test/kotlin/azure/WorkflowEngineTests.kt +++ b/prime-router/src/test/kotlin/azure/WorkflowEngineTests.kt @@ -221,13 +221,13 @@ class WorkflowEngineTests { Event.EventAction.RECEIVE ) }.returns(BlobAccess.BlobInfo(MimeFormat.CSV, "http://anyblob.com", "".toByteArray())) - every { actionHistory.trackExternalInputReport(any(), any(), any()) }.returns(Unit) + every { actionHistory.trackExternalInputReport(any(), any()) }.returns(Unit) val engine = makeEngine(metadata, settings) engine.recordReceivedReport(report1, "body".toByteArray(), sender, actionHistory) verify(exactly = 1) { - actionHistory.trackExternalInputReport(any(), any(), any()) + actionHistory.trackExternalInputReport(any(), any()) BlobAccess.Companion.uploadBody(any(), any(), any(), any(), any()) } confirmVerified(blobMock) diff --git a/prime-router/src/test/kotlin/common/UniversalPipelineTestUtils.kt b/prime-router/src/test/kotlin/common/UniversalPipelineTestUtils.kt index 7a40dd6272b..1d64542a0e4 100644 --- a/prime-router/src/test/kotlin/common/UniversalPipelineTestUtils.kt +++ b/prime-router/src/test/kotlin/common/UniversalPipelineTestUtils.kt @@ -173,13 +173,6 @@ object UniversalPipelineTestUtils { topic = Topic.FULL_ELR, schemaName = "classpath:/metadata/fhir_transforms/senders/test-sender-transform.yml" ) - val csvSenderWithNoTransform = UniversalPipelineSender( - "elr-csv-sender", - "phd", - MimeFormat.CSV, - CustomerStatus.ACTIVE, - topic = Topic.FULL_ELR, - ) val hl7SenderWithNoTransform = UniversalPipelineSender( "hl7-elr-no-transform", "phd", @@ -201,12 +194,6 @@ object UniversalPipelineTestUtils { CustomerStatus.ACTIVE, topic = Topic.FULL_ELR, ) - val fhirSenderWithNoTransformInactive = UniversalPipelineSender( - "fhir-elr-no-transform-inactive", - "phd", - MimeFormat.FHIR, - topic = Topic.FULL_ELR, - ) val fhirSenderWithSendOriginal = UniversalPipelineSender( "fhir-elr-send_original", "phd", @@ -226,10 +213,8 @@ object UniversalPipelineTestUtils { senders = listOf( hl7Sender, fhirSender, - csvSenderWithNoTransform, hl7SenderWithNoTransform, fhirSenderWithNoTransform, - fhirSenderWithNoTransformInactive, senderWithValidation ), receivers = listOf( @@ -275,7 +260,6 @@ object UniversalPipelineTestUtils { assertThat(itemLineages).hasSize(expected) assertThat(itemLineages.map { it.childIndex }).isEqualTo(MutableList(expected) { 1 }) - // itemCount is on the report created by the test. It will not be null. if (parent.itemCount > 1) { assertThat(itemLineages.map { it.parentIndex }).isEqualTo((1..expected).toList()) } else { diff --git a/prime-router/src/test/kotlin/fhirengine/azure/FHIRConverterIntegrationTests.kt b/prime-router/src/test/kotlin/fhirengine/azure/FHIRConverterIntegrationTests.kt index a7e9795e1cf..194cf38f3dc 100644 --- a/prime-router/src/test/kotlin/fhirengine/azure/FHIRConverterIntegrationTests.kt +++ b/prime-router/src/test/kotlin/fhirengine/azure/FHIRConverterIntegrationTests.kt @@ -7,8 +7,6 @@ import assertk.assertions.hasSize import assertk.assertions.isEqualTo import assertk.assertions.isEqualToIgnoringGivenProperties import assertk.assertions.matchesPredicate -import gov.cdc.prime.reportstream.shared.BlobUtils -import gov.cdc.prime.reportstream.shared.QueueMessage import gov.cdc.prime.router.FileSettings import gov.cdc.prime.router.Metadata import gov.cdc.prime.router.MimeFormat @@ -64,6 +62,7 @@ import gov.cdc.prime.router.db.ReportStreamTestDatabaseContainer import gov.cdc.prime.router.db.ReportStreamTestDatabaseSetupExtension import gov.cdc.prime.router.fhirengine.engine.FHIRConverter import gov.cdc.prime.router.fhirengine.engine.FhirDestinationFilterQueueMessage +import gov.cdc.prime.router.fhirengine.engine.QueueMessage import gov.cdc.prime.router.fhirengine.utils.FhirTranscoder import gov.cdc.prime.router.history.DetailedActionLog import gov.cdc.prime.router.metadata.LookupTable @@ -129,28 +128,18 @@ class FHIRConverterIntegrationTests { ) } - private fun generateQueueMessage( - report: Report, - blobContents: String, - sender: Sender, - headers: Map? = null, - ): String { - val headersString = headers?.entries?.joinToString(separator = ",\n") { (key, value) -> - """"$key": "$value"""" - } ?: "" - + private fun generateQueueMessage(report: Report, blobContents: String, sender: Sender): String { return """ - { - "type": "convert", - "reportId": "${report.id}", - "blobURL": "${report.bodyURL}", - "digest": "${BlobUtils.digestToString(BlobUtils.sha256Digest(blobContents.toByteArray()))}", - "blobSubFolderName": "${sender.fullName}", - "topic": "${sender.topic.jsonVal}", - "schemaName": "${sender.schemaName}" - ${if (headersString.isNotEmpty()) ",\n$headersString" else ""} - } - """.trimIndent() + { + "type": "convert", + "reportId": "${report.id}", + "blobURL": "${report.bodyURL}", + "digest": "${BlobAccess.digestToString(BlobAccess.sha256Digest(blobContents.toByteArray()))}", + "blobSubFolderName": "${sender.fullName}", + "topic": "${sender.topic.jsonVal}", + "schemaName": "${sender.schemaName}" + } + """.trimIndent() } @BeforeEach @@ -309,7 +298,7 @@ class FHIRConverterIntegrationTests { FhirDestinationFilterQueueMessage( report.reportId, report.bodyUrl, - BlobUtils.digestToString(BlobUtils.sha256Digest(fhirBundle)), + BlobAccess.digestToString(BlobAccess.sha256Digest(fhirBundle)), hl7SenderWithNoTransform.fullName, hl7SenderWithNoTransform.topic ) @@ -474,7 +463,7 @@ class FHIRConverterIntegrationTests { FhirDestinationFilterQueueMessage( report.reportId, report.bodyUrl, - BlobUtils.digestToString(BlobUtils.sha256Digest(fhirBundle.toByteArray())), + BlobAccess.digestToString(BlobAccess.sha256Digest(fhirBundle.toByteArray())), fhirSenderWithNoTransform.fullName, fhirSenderWithNoTransform.topic ) @@ -625,7 +614,7 @@ class FHIRConverterIntegrationTests { FhirDestinationFilterQueueMessage( report.reportId, report.bodyUrl, - BlobUtils.digestToString(BlobUtils.sha256Digest(fhirBundle)), + BlobAccess.digestToString(BlobAccess.sha256Digest(fhirBundle)), senderWithValidation.fullName, senderWithValidation.topic ) @@ -677,7 +666,6 @@ class FHIRConverterIntegrationTests { "phd.marsotc-hl7-sender" ) ) - @Suppress("ktlint:standard:max-line-length") assertThat(event.params).isEqualTo( mapOf( ReportStreamEventProperties.ITEM_FORMAT to MimeFormat.HL7, @@ -748,7 +736,7 @@ class FHIRConverterIntegrationTests { FhirDestinationFilterQueueMessage( report.reportId, report.bodyUrl, - BlobUtils.digestToString(BlobUtils.sha256Digest(fhirBundle)), + BlobAccess.digestToString(BlobAccess.sha256Digest(fhirBundle)), hl7Sender.fullName, hl7Sender.topic ) diff --git a/prime-router/src/test/kotlin/fhirengine/azure/FHIRDestinationFilterIntegrationTests.kt b/prime-router/src/test/kotlin/fhirengine/azure/FHIRDestinationFilterIntegrationTests.kt index 0d7aa55ebed..c34a3f04caa 100644 --- a/prime-router/src/test/kotlin/fhirengine/azure/FHIRDestinationFilterIntegrationTests.kt +++ b/prime-router/src/test/kotlin/fhirengine/azure/FHIRDestinationFilterIntegrationTests.kt @@ -8,8 +8,6 @@ import assertk.assertions.isEqualTo import assertk.assertions.isEqualToIgnoringGivenProperties import assertk.assertions.isInstanceOf import assertk.assertions.isNull -import gov.cdc.prime.reportstream.shared.BlobUtils -import gov.cdc.prime.reportstream.shared.QueueMessage import gov.cdc.prime.router.ActionLog import gov.cdc.prime.router.CustomerStatus import gov.cdc.prime.router.DeepOrganization @@ -42,6 +40,7 @@ import gov.cdc.prime.router.db.ReportStreamTestDatabaseContainer import gov.cdc.prime.router.db.ReportStreamTestDatabaseSetupExtension import gov.cdc.prime.router.fhirengine.engine.FHIRDestinationFilter import gov.cdc.prime.router.fhirengine.engine.FhirReceiverFilterQueueMessage +import gov.cdc.prime.router.fhirengine.engine.QueueMessage import gov.cdc.prime.router.fhirengine.utils.FhirTranscoder import gov.cdc.prime.router.history.db.ReportGraph import gov.cdc.prime.router.metadata.LookupTable @@ -129,7 +128,7 @@ class FHIRDestinationFilterIntegrationTests : Logging { "type": "${action.literal}", "reportId": "${report.id}", "blobURL": "${report.bodyURL}", - "digest": "${BlobUtils.digestToString(BlobUtils.sha256Digest(blobContents.toByteArray()))}", + "digest": "${BlobAccess.digestToString(BlobAccess.sha256Digest(blobContents.toByteArray()))}", "blobSubFolderName": "${sender.fullName}", "topic": "${sender.topic.jsonVal}", "schemaName": "${sender.schemaName}" @@ -227,7 +226,7 @@ class FHIRDestinationFilterIntegrationTests : Logging { FhirReceiverFilterQueueMessage( report.reportId, report.bodyUrl, - BlobUtils.digestToString(report.blobDigest), + BlobAccess.digestToString(report.blobDigest), "phd.fhir-elr-no-transform", UniversalPipelineTestUtils.fhirSenderWithNoTransform.topic, "phd.x" @@ -235,7 +234,7 @@ class FHIRDestinationFilterIntegrationTests : Logging { FhirReceiverFilterQueueMessage( report.reportId, report.bodyUrl, - BlobUtils.digestToString(report.blobDigest), + BlobAccess.digestToString(report.blobDigest), "phd.fhir-elr-no-transform", UniversalPipelineTestUtils.fhirSenderWithNoTransform.topic, "phd.y" @@ -318,7 +317,7 @@ class FHIRDestinationFilterIntegrationTests : Logging { val expectedQueueMessage = FhirReceiverFilterQueueMessage( routedReport.reportId, routedReport.bodyUrl, - BlobUtils.digestToString(routedReport.blobDigest), + BlobAccess.digestToString(routedReport.blobDigest), "phd.fhir-elr-no-transform", UniversalPipelineTestUtils.fhirSenderWithNoTransform.topic, "phd.x" diff --git a/prime-router/src/test/kotlin/fhirengine/azure/FHIRReceiverFilterIntegrationTests.kt b/prime-router/src/test/kotlin/fhirengine/azure/FHIRReceiverFilterIntegrationTests.kt index bc73514cff2..6c765de0b73 100644 --- a/prime-router/src/test/kotlin/fhirengine/azure/FHIRReceiverFilterIntegrationTests.kt +++ b/prime-router/src/test/kotlin/fhirengine/azure/FHIRReceiverFilterIntegrationTests.kt @@ -9,8 +9,6 @@ import assertk.assertions.isInstanceOf import assertk.assertions.isNull import assertk.assertions.isZero import assertk.assertions.matchesPredicate -import gov.cdc.prime.reportstream.shared.BlobUtils -import gov.cdc.prime.reportstream.shared.QueueMessage import gov.cdc.prime.router.ActionLog import gov.cdc.prime.router.ActionLogLevel import gov.cdc.prime.router.ActionLogScope @@ -48,6 +46,7 @@ import gov.cdc.prime.router.db.ReportStreamTestDatabaseContainer import gov.cdc.prime.router.db.ReportStreamTestDatabaseSetupExtension import gov.cdc.prime.router.fhirengine.engine.FHIRReceiverFilter import gov.cdc.prime.router.fhirengine.engine.FhirTranslateQueueMessage +import gov.cdc.prime.router.fhirengine.engine.QueueMessage import gov.cdc.prime.router.fhirengine.utils.FhirTranscoder import gov.cdc.prime.router.fhirengine.utils.deleteResource import gov.cdc.prime.router.fhirengine.utils.getObservations @@ -228,7 +227,7 @@ class FHIRReceiverFilterIntegrationTests : Logging { "type": "${TaskAction.receiver_filter.literal}", "reportId": "${report.id}", "blobURL": "${report.bodyURL}", - "digest": "${BlobUtils.digestToString(BlobUtils.sha256Digest(blobContents.toByteArray()))}", + "digest": "${BlobAccess.digestToString(BlobAccess.sha256Digest(blobContents.toByteArray()))}", "blobSubFolderName": "${sender.fullName}", "topic": "${sender.topic.jsonVal}", "receiverFullName": "$receiverName" @@ -305,7 +304,7 @@ class FHIRReceiverFilterIntegrationTests : Logging { val expectedRouteQueueMessage = FhirTranslateQueueMessage( routedReport.reportId, routedReport.bodyUrl, - BlobUtils.digestToString(routedReport.blobDigest), + BlobAccess.digestToString(routedReport.blobDigest), "phd.fhir-elr-no-transform", Topic.FULL_ELR, receiver.fullName @@ -477,7 +476,7 @@ class FHIRReceiverFilterIntegrationTests : Logging { val expectedQueueMessage = FhirTranslateQueueMessage( routedReport.reportId, routedReport.bodyUrl, - BlobUtils.digestToString(routedReport.blobDigest), + BlobAccess.digestToString(routedReport.blobDigest), "phd.fhir-elr-no-transform", Topic.FULL_ELR, receiver.fullName @@ -667,7 +666,7 @@ class FHIRReceiverFilterIntegrationTests : Logging { val expectedRouteQueueMessage = FhirTranslateQueueMessage( routedReport.reportId, routedReport.bodyUrl, - BlobUtils.digestToString(routedReport.blobDigest), + BlobAccess.digestToString(routedReport.blobDigest), "phd.fhir-elr-no-transform", Topic.FULL_ELR, receiver.fullName @@ -953,7 +952,7 @@ class FHIRReceiverFilterIntegrationTests : Logging { val expectedRouteQueueMessage = FhirTranslateQueueMessage( routedReport.reportId, routedReport.bodyUrl, - BlobUtils.digestToString(routedReport.blobDigest), + BlobAccess.digestToString(routedReport.blobDigest), "phd.fhir-elr-no-transform", Topic.FULL_ELR, receiver.fullName @@ -1028,7 +1027,7 @@ class FHIRReceiverFilterIntegrationTests : Logging { val expectedRouteQueueMessage = FhirTranslateQueueMessage( routedReport.reportId, routedReport.bodyUrl, - BlobUtils.digestToString(routedReport.blobDigest), + BlobAccess.digestToString(routedReport.blobDigest), "phd.fhir-elr-no-transform", Topic.FULL_ELR, "phd.x" diff --git a/prime-router/src/test/kotlin/fhirengine/azure/FHIRReceiverIntegrationTests.kt b/prime-router/src/test/kotlin/fhirengine/azure/FHIRReceiverIntegrationTests.kt deleted file mode 100644 index 763a1f03a7b..00000000000 --- a/prime-router/src/test/kotlin/fhirengine/azure/FHIRReceiverIntegrationTests.kt +++ /dev/null @@ -1,872 +0,0 @@ -package gov.cdc.prime.router.fhirengine.azure - -import assertk.assertThat -import assertk.assertions.hasSize -import assertk.assertions.isEmpty -import assertk.assertions.isEqualTo -import assertk.assertions.isEqualToIgnoringGivenProperties -import assertk.assertions.isNull -import gov.cdc.prime.reportstream.shared.BlobUtils -import gov.cdc.prime.router.FileSettings -import gov.cdc.prime.router.MimeFormat -import gov.cdc.prime.router.Sender -import gov.cdc.prime.router.Topic -import gov.cdc.prime.router.azure.ActionHistory -import gov.cdc.prime.router.azure.BlobAccess -import gov.cdc.prime.router.azure.QueueAccess -import gov.cdc.prime.router.azure.SubmissionTableService -import gov.cdc.prime.router.azure.TableAccess -import gov.cdc.prime.router.azure.WorkflowEngine -import gov.cdc.prime.router.azure.db.Tables -import gov.cdc.prime.router.azure.db.enums.ActionLogType -import gov.cdc.prime.router.azure.db.enums.TaskAction -import gov.cdc.prime.router.azure.db.tables.pojos.ReportFile -import gov.cdc.prime.router.azure.observability.event.LocalAzureEventServiceImpl -import gov.cdc.prime.router.azure.observability.event.ReportEventData -import gov.cdc.prime.router.azure.observability.event.ReportStreamEventName -import gov.cdc.prime.router.azure.observability.event.ReportStreamEventProperties -import gov.cdc.prime.router.azure.observability.event.ReportStreamReportEvent -import gov.cdc.prime.router.common.TestcontainersUtils -import gov.cdc.prime.router.common.UniversalPipelineTestUtils.csvSenderWithNoTransform -import gov.cdc.prime.router.common.UniversalPipelineTestUtils.fhirSenderWithNoTransform -import gov.cdc.prime.router.common.UniversalPipelineTestUtils.fhirSenderWithNoTransformInactive -import gov.cdc.prime.router.common.UniversalPipelineTestUtils.hl7SenderWithNoTransform -import gov.cdc.prime.router.common.UniversalPipelineTestUtils.universalPipelineOrganization -import gov.cdc.prime.router.common.cleanHL7Record -import gov.cdc.prime.router.common.invalidMalformedFHIRRecord -import gov.cdc.prime.router.common.unparseableHL7Record -import gov.cdc.prime.router.common.validFHIRRecord1 -import gov.cdc.prime.router.db.ReportStreamTestDatabaseContainer -import gov.cdc.prime.router.db.ReportStreamTestDatabaseSetupExtension -import gov.cdc.prime.router.fhirengine.engine.FHIRReceiver -import gov.cdc.prime.router.history.DetailedActionLog -import gov.cdc.prime.router.history.DetailedReport -import gov.cdc.prime.router.unittest.UnitTestUtils -import io.mockk.clearAllMocks -import io.mockk.every -import io.mockk.mockkObject -import io.mockk.unmockkAll -import io.mockk.verify -import org.jooq.impl.DSL -import org.junit.jupiter.api.AfterEach -import org.junit.jupiter.api.BeforeEach -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import org.testcontainers.junit.jupiter.Container -import org.testcontainers.junit.jupiter.Testcontainers -import java.time.OffsetDateTime -import java.util.UUID -import kotlin.test.assertNotNull - -@Testcontainers -@ExtendWith(ReportStreamTestDatabaseSetupExtension::class) -class FHIRReceiverIntegrationTests { - - @Container - val azuriteContainer = TestcontainersUtils.createAzuriteContainer( - customImageName = "azurite_fhirreceiverintegration", - customEnv = mapOf( - "AZURITE_ACCOUNTS" to "devstoreaccount1:keydevstoreaccount1" - ) - ) - - private val azureEventService = LocalAzureEventServiceImpl() - private lateinit var submissionTableService: SubmissionTableService - - private fun createFHIRFunctionsInstance(): FHIRFunctions { - val settings = FileSettings().loadOrganizations(universalPipelineOrganization) - val metadata = UnitTestUtils.simpleMetadata - val workflowEngine = WorkflowEngine - .Builder() - .metadata(metadata) - .settingsProvider(settings) - .databaseAccess(ReportStreamTestDatabaseContainer.testDatabaseAccess) - .build() - return FHIRFunctions(workflowEngine, databaseAccess = ReportStreamTestDatabaseContainer.testDatabaseAccess) - } - - private fun createFHIRReceiver(): FHIRReceiver { - val settings = FileSettings().loadOrganizations(universalPipelineOrganization) - val metadata = UnitTestUtils.simpleMetadata - return FHIRReceiver( - metadata, - settings, - ReportStreamTestDatabaseContainer.testDatabaseAccess, - azureEventService = azureEventService, - submissionTableService = submissionTableService - ) - } - - private fun generateReceiveQueueMessage( - reportId: String, - blobURL: String, - blobContents: String, - sender: Sender, - headers: Map, - ): String { - val headersStringMap = headers.entries.joinToString(separator = ",\n") { (key, value) -> - """"$key": "$value"""" - } - val headersString = "[\"java.util.LinkedHashMap\",{$headersStringMap}]" - - return """{"type":"receive-fhir","blobURL":"$blobURL", - "digest":"${BlobUtils.digestToString(BlobUtils.sha256Digest(blobContents.toByteArray()))}", - "blobSubFolderName":"${sender.fullName}","reportId":"$reportId","headers":$headersString} - """.trimIndent() - } - - @BeforeEach - fun beforeEach() { - clearAllMocks() - mockkObject(QueueAccess) - every { QueueAccess.sendMessage(any(), any()) } returns Unit - mockkObject(BlobAccess) - every { BlobAccess getProperty "defaultBlobMetadata" } returns getBlobContainerMetadata() - mockkObject(BlobAccess.BlobContainerMetadata) - every { BlobAccess.BlobContainerMetadata.build(any(), any()) } returns getBlobContainerMetadata() - - mockkObject(TableAccess) - every { TableAccess.getConnectionString() } returns getConnString() - - submissionTableService = SubmissionTableService.getInstance() - submissionTableService.reset() - } - - @AfterEach - fun afterEach() { - unmockkAll() - } - - private fun getBlobContainerMetadata(): BlobAccess.BlobContainerMetadata = BlobAccess.BlobContainerMetadata( - "container1", - getConnString() - ) - - private fun getConnString(): String { - @Suppress("ktlint:standard:max-line-length") - return """DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;AccountKey=keydevstoreaccount1;BlobEndpoint=http://${azuriteContainer.host}:${azuriteContainer.getMappedPort(10000)}/devstoreaccount1;QueueEndpoint=http://${azuriteContainer.host}:${azuriteContainer.getMappedPort(10001)}/devstoreaccount1;TableEndpoint=http://${azuriteContainer.host}:${azuriteContainer.getMappedPort(10002)}/devstoreaccount1;""" - } - - @Test - fun `should handle inactive sender gracefully`() { - val receivedReportContents = - listOf(validFHIRRecord1) - .joinToString("\n") - val receiveBlobUrl = BlobAccess.uploadBlob( - "receive/happy-path.fhir", - receivedReportContents.toByteArray(), - getBlobContainerMetadata() - ) - - val reportId = UUID.randomUUID() - val headers = mapOf( - "content-type" to "application/fhir+ndjson;test", - "x-azure-clientip" to "0.0.0.0", - "payloadname" to "test_message", - "client_id" to fhirSenderWithNoTransformInactive.fullName, - "content-length" to "100" - ) - - val receiveQueueMessage = generateReceiveQueueMessage( - reportId.toString(), - receiveBlobUrl, - receivedReportContents, - fhirSenderWithNoTransformInactive, - headers = headers - ) - - val fhirFunctions = createFHIRFunctionsInstance() - - fhirFunctions.process( - receiveQueueMessage, - 1, - createFHIRReceiver(), - ActionHistory(TaskAction.receive) - ) - - ReportStreamTestDatabaseContainer.testDatabaseAccess.transact { txn -> - - val actionLogs = DSL.using(txn).select(Tables.ACTION_LOG.asterisk()) - .from(Tables.ACTION_LOG) - .where(Tables.ACTION_LOG.REPORT_ID.eq(reportId)) - .and(Tables.ACTION_LOG.TYPE.eq(ActionLogType.error)) - .fetchInto(DetailedActionLog::class.java) - - assertThat(actionLogs.first()).transform { it.detail.message } - .isEqualTo("Sender has customer status INACTIVE: phd.fhir-elr-no-transform-inactive") - - val reportFile = DSL.using(txn).select(Tables.REPORT_FILE.asterisk()) - .from(Tables.REPORT_FILE) - .where(Tables.REPORT_FILE.REPORT_ID.eq(reportId)) - .fetchInto(DetailedReport::class.java) - - assertThat(actionLogs.count()).isEqualTo(1) - assertThat(reportFile.count()).isEqualTo(1) - } - - verify(exactly = 0) { - QueueAccess.sendMessage(any(), any()) - } - - val tableRow = submissionTableService.getSubmission(reportId.toString(), "Accepted") - - assertNotNull(tableRow) - assertThat(tableRow.detail).isEqualTo( - "[Sender has customer status INACTIVE: phd.fhir-elr-no-transform-inactive]" - ) - assertThat(tableRow.bodyURL).isEqualTo(receiveBlobUrl) - - assertThat(azureEventService.reportStreamEvents[ReportStreamEventName.REPORT_RECEIVED]!!).hasSize(1) - val event = - azureEventService - .reportStreamEvents[ReportStreamEventName.REPORT_RECEIVED]!!.last() as ReportStreamReportEvent - assertThat(event.reportEventData).isEqualToIgnoringGivenProperties( - ReportEventData( - reportId, - null, - emptyList(), - Topic.FULL_ELR, - receiveBlobUrl, - TaskAction.receive, - OffsetDateTime.now() - ), - ReportEventData::timestamp - ) - assertThat(event.params).isEqualTo( - mapOf( - ReportStreamEventProperties.ITEM_FORMAT to MimeFormat.FHIR, - ReportStreamEventProperties.SENDER_NAME to fhirSenderWithNoTransformInactive.fullName, - ReportStreamEventProperties.FILE_LENGTH to headers["content-length"], - ReportStreamEventProperties.SENDER_IP to headers["x-azure-clientip"], - ReportStreamEventProperties.REQUEST_PARAMETERS to headers.toString() - ) - ) - - assertThat(azureEventService.reportStreamEvents[ReportStreamEventName.REPORT_NOT_PROCESSABLE]!!).hasSize(1) - val notProcessableEvent = - azureEventService - .reportStreamEvents[ReportStreamEventName.REPORT_NOT_PROCESSABLE]!!.last() as ReportStreamReportEvent - assertThat(notProcessableEvent.reportEventData).isEqualToIgnoringGivenProperties( - ReportEventData( - reportId, - null, - emptyList(), - Topic.FULL_ELR, - receiveBlobUrl, - TaskAction.receive, - OffsetDateTime.now() - ), - ReportEventData::timestamp - ) - assertThat(notProcessableEvent.params).isEqualTo( - mapOf( - ReportStreamEventProperties.PROCESSING_ERROR to - "Submitted report was either empty or could not be parsed.", - ReportStreamEventProperties.REQUEST_PARAMETERS to headers.toString() - ) - ) - } - - @Test - fun `should handle sender not found gracefully`() { - val submissionMessageContents = validFHIRRecord1 - val submissionBlobUrl = "http://anyblob.com" - - val reportId = UUID.randomUUID() - val headers = mapOf( - "content-type" to "application/fhir+ndjson;test", - "x-azure-clientip" to "0.0.0.0", - "payloadname" to "test_message", - "client_id" to "unknown_sender", - "content-length" to "100" - ) - - val receiveQueueMessage = generateReceiveQueueMessage( - reportId.toString(), - submissionBlobUrl, - submissionMessageContents, - fhirSenderWithNoTransformInactive, - headers = headers - ) - - val fhirFunctions = createFHIRFunctionsInstance() - - fhirFunctions.process( - receiveQueueMessage, - 1, - createFHIRReceiver(), - ActionHistory(TaskAction.receive) - ) - - ReportStreamTestDatabaseContainer.testDatabaseAccess.transact { txn -> - val actionLogs = DSL.using(txn).select(Tables.ACTION_LOG.asterisk()) - .from(Tables.ACTION_LOG) - .where(Tables.ACTION_LOG.TYPE.eq(ActionLogType.error)) - .fetchInto(DetailedActionLog::class.java) - - assertThat(actionLogs).isEmpty() - - val reportFile = DSL.using(txn).select(Tables.REPORT_FILE.asterisk()) - .from(Tables.REPORT_FILE) - .where(Tables.REPORT_FILE.REPORT_ID.eq(reportId)) - .fetchInto(DetailedReport::class.java) - - assertThat(reportFile).isEmpty() - } - - verify(exactly = 0) { - QueueAccess.sendMessage(any(), any()) - } - - val tableRow = submissionTableService.getSubmission( - reportId.toString(), - "Rejected" - ) - - assertNotNull(tableRow) - assertThat(tableRow.detail).isEqualTo("Sender not found matching client_id: unknown_sender") - assertThat(tableRow.bodyURL).isEqualTo(submissionBlobUrl) - - assertThat(azureEventService.reportStreamEvents[ReportStreamEventName.REPORT_NOT_RECEIVABLE]!!).hasSize(1) - val event = - azureEventService - .reportStreamEvents[ReportStreamEventName.REPORT_NOT_RECEIVABLE]!!.last() as ReportStreamReportEvent - assertThat(event.reportEventData).isEqualToIgnoringGivenProperties( - ReportEventData( - reportId, - null, - emptyList(), - null, - submissionBlobUrl, - TaskAction.receive, - OffsetDateTime.now() - ), - ReportEventData::timestamp - ) - assertThat(event.params).isEqualTo( - mapOf( - ReportStreamEventProperties.PROCESSING_ERROR to - "Sender is not found in matching client id: unknown_sender.", - ReportStreamEventProperties.REQUEST_PARAMETERS to headers.toString() - ) - ) - } - - @Test - fun `should successfully process valid FHIR message`() { - val receivedReportContents = - listOf(validFHIRRecord1) - .joinToString("\n") - val receiveBlobUrl = BlobAccess.uploadBlob( - "receive/happy-path.fhir", - receivedReportContents.toByteArray(), - getBlobContainerMetadata() - ) - - val reportId = UUID.randomUUID() - val headers = mapOf( - "content-type" to "application/fhir+ndjson;test", - "x-azure-clientip" to "0.0.0.0", - "payloadname" to "test_message", - "client_id" to fhirSenderWithNoTransform.fullName, - "content-length" to "100" - ) - - val receiveQueueMessage = generateReceiveQueueMessage( - reportId.toString(), - receiveBlobUrl, - receivedReportContents, - fhirSenderWithNoTransform, - headers = headers - ) - - val fhirFunctions = createFHIRFunctionsInstance() - - fhirFunctions.process( - receiveQueueMessage, - 1, - createFHIRReceiver(), - ActionHistory(TaskAction.receive) - ) - - ReportStreamTestDatabaseContainer.testDatabaseAccess.transact { txn -> - val actionLogs = DSL.using(txn).select(Tables.ACTION_LOG.asterisk()) - .from(Tables.ACTION_LOG) - .where(Tables.ACTION_LOG.REPORT_ID.eq(reportId)) - .and(Tables.ACTION_LOG.TYPE.eq(ActionLogType.error)) - .fetchInto(DetailedActionLog::class.java) - - assertThat(actionLogs).isEmpty() - - val reportFile = DSL.using(txn).select(Tables.REPORT_FILE.asterisk()) - .from(Tables.REPORT_FILE) - .where(Tables.REPORT_FILE.REPORT_ID.eq(reportId)) - .fetchInto(ReportFile::class.java) - - assertThat(reportFile).hasSize(1) - reportFile.first().apply { - assertThat(nextAction).isEqualTo(TaskAction.convert) - assertThat(receivingOrg).isEqualTo(null) - assertThat(receivingOrgSvc).isEqualTo(null) - assertThat(schemaName).isEqualTo("None") - assertThat(schemaTopic).isEqualTo(Topic.FULL_ELR) - assertThat(bodyFormat).isEqualTo("FHIR") - assertThat(sendingOrg).isEqualTo("phd") - assertThat(sendingOrgClient).isEqualTo("fhir-elr-no-transform") - } - } - - verify(exactly = 1) { - QueueAccess.sendMessage(any(), any()) - } - - val tableRow = submissionTableService.getSubmission( - reportId.toString(), - "Accepted" - ) - - assertNotNull(tableRow) - assertThat(tableRow.bodyURL).isEqualTo(receiveBlobUrl) - assertThat(tableRow.detail).isNull() - - assertThat(azureEventService.reportStreamEvents[ReportStreamEventName.REPORT_RECEIVED]!!).hasSize(1) - val event = - azureEventService - .reportStreamEvents[ReportStreamEventName.REPORT_RECEIVED]!!.last() as ReportStreamReportEvent - assertThat(event.reportEventData).isEqualToIgnoringGivenProperties( - ReportEventData( - reportId, - null, - emptyList(), - Topic.FULL_ELR, - receiveBlobUrl, - TaskAction.receive, - OffsetDateTime.now() - ), - ReportEventData::timestamp - ) - assertThat(event.params).isEqualTo( - mapOf( - ReportStreamEventProperties.ITEM_FORMAT to MimeFormat.FHIR, - ReportStreamEventProperties.SENDER_NAME to fhirSenderWithNoTransform.fullName, - ReportStreamEventProperties.FILE_LENGTH to headers["content-length"], - ReportStreamEventProperties.SENDER_IP to headers["x-azure-clientip"], - ReportStreamEventProperties.REQUEST_PARAMETERS to headers.toString() - ) - ) - } - - @Test - fun `should successfully process valid HL7 message`() { - val receivedReportContents = - listOf(cleanHL7Record) - .joinToString("\n") - val receiveBlobUrl = BlobAccess.uploadBlob( - "receive/happy-path.hl7", - receivedReportContents.toByteArray(), - getBlobContainerMetadata() - ) - - val reportId = UUID.randomUUID() - val headers = mapOf( - "content-type" to "application/hl7-v2;test", - "x-azure-clientip" to "0.0.0.0", - "payloadname" to "test_message", - "client_id" to hl7SenderWithNoTransform.fullName, - "content-length" to "100" - ) - val receiveQueueMessage = generateReceiveQueueMessage( - reportId.toString(), - receiveBlobUrl, - receivedReportContents, - hl7SenderWithNoTransform, - headers - ) - - val fhirFunctions = createFHIRFunctionsInstance() - - fhirFunctions.process( - receiveQueueMessage, - 1, - createFHIRReceiver(), - ActionHistory(TaskAction.receive) - ) - - ReportStreamTestDatabaseContainer.testDatabaseAccess.transact { txn -> - val actionLogs = DSL.using(txn).select(Tables.ACTION_LOG.asterisk()) - .from(Tables.ACTION_LOG) - .where(Tables.ACTION_LOG.REPORT_ID.eq(reportId)) - .and(Tables.ACTION_LOG.TYPE.eq(ActionLogType.error)) - .fetchInto(DetailedActionLog::class.java) - - assertThat(actionLogs).isEmpty() - - val reportFile = DSL.using(txn).select(Tables.REPORT_FILE.asterisk()) - .from(Tables.REPORT_FILE) - .where(Tables.REPORT_FILE.REPORT_ID.eq(reportId)) - .fetchInto(ReportFile::class.java) - - assertThat(reportFile).hasSize(1) - reportFile.first().apply { - assertThat(nextAction).isEqualTo(TaskAction.convert) - assertThat(receivingOrg).isEqualTo(null) - assertThat(receivingOrgSvc).isEqualTo(null) - assertThat(schemaName).isEqualTo("None") - assertThat(schemaTopic).isEqualTo(Topic.FULL_ELR) - assertThat(bodyFormat).isEqualTo("HL7") - assertThat(sendingOrg).isEqualTo("phd") - assertThat(sendingOrgClient).isEqualTo("hl7-elr-no-transform") - } - } - - verify(exactly = 1) { - QueueAccess.sendMessage(any(), any()) - } - - val tableRow = submissionTableService.getSubmission( - reportId.toString(), - "Accepted" - ) - - assertNotNull(tableRow) - assertThat(tableRow.bodyURL).isEqualTo(receiveBlobUrl) - assertThat(tableRow.detail).isNull() - - assertThat(azureEventService.reportStreamEvents[ReportStreamEventName.REPORT_RECEIVED]!!).hasSize(1) - val event = - azureEventService - .reportStreamEvents[ReportStreamEventName.REPORT_RECEIVED]!!.last() as ReportStreamReportEvent - assertThat(event.reportEventData).isEqualToIgnoringGivenProperties( - ReportEventData( - reportId, - null, - emptyList(), - Topic.FULL_ELR, - receiveBlobUrl, - TaskAction.receive, - OffsetDateTime.now() - ), - ReportEventData::timestamp - ) - assertThat(event.params).isEqualTo( - mapOf( - ReportStreamEventProperties.ITEM_FORMAT to MimeFormat.HL7, - ReportStreamEventProperties.SENDER_NAME to hl7SenderWithNoTransform.fullName, - ReportStreamEventProperties.FILE_LENGTH to headers["content-length"], - ReportStreamEventProperties.SENDER_IP to headers["x-azure-clientip"], - ReportStreamEventProperties.REQUEST_PARAMETERS to headers.toString() - ) - ) - } - - @Test - fun `test process invalid FHIR message`() { - val invalidReceivedReportContents = - listOf(invalidMalformedFHIRRecord) - .joinToString("\n") - val receiveBlobUrl = BlobAccess.uploadBlob( - "receive/fail-path.fhir", - invalidReceivedReportContents.toByteArray(), - getBlobContainerMetadata() - ) - - val reportId = UUID.randomUUID() - val headers = mapOf( - "content-type" to "application/fhir+ndjson;test", - "x-azure-clientip" to "0.0.0.0", - "payloadname" to "test_message", - "client_id" to fhirSenderWithNoTransform.fullName, - "content-length" to "100" - ) - - val receiveQueueMessage = generateReceiveQueueMessage( - reportId.toString(), - receiveBlobUrl, - invalidReceivedReportContents, - fhirSenderWithNoTransform, - headers = headers - ) - - val fhirFunctions = createFHIRFunctionsInstance() - - fhirFunctions.process( - receiveQueueMessage, - 1, - createFHIRReceiver(), - ActionHistory(TaskAction.receive) - ) - - ReportStreamTestDatabaseContainer.testDatabaseAccess.transact { txn -> - val actionLogs = DSL.using(txn).select(Tables.ACTION_LOG.asterisk()) - .from(Tables.ACTION_LOG) - .where(Tables.ACTION_LOG.REPORT_ID.eq(reportId)) - .and(Tables.ACTION_LOG.TYPE.eq(ActionLogType.error)) - .fetchInto(DetailedActionLog::class.java) - - assertThat(actionLogs.count()).isEqualTo(1) - assertThat(actionLogs.first().detail.message).isEqualTo("1: Unable to parse FHIR data.") - - val reportFile = DSL.using(txn).select(Tables.REPORT_FILE.asterisk()) - .from(Tables.REPORT_FILE) - .where(Tables.REPORT_FILE.REPORT_ID.eq(reportId)) - .fetchInto(ReportFile::class.java) - - assertThat(reportFile).hasSize(1) - reportFile.first().apply { - assertThat(nextAction).isEqualTo(TaskAction.convert) - assertThat(receivingOrg).isEqualTo(null) - assertThat(receivingOrgSvc).isEqualTo(null) - assertThat(schemaName).isEqualTo("None") - assertThat(schemaTopic).isEqualTo(Topic.FULL_ELR) - assertThat(bodyFormat).isEqualTo("FHIR") - assertThat(sendingOrg).isEqualTo("phd") - assertThat(sendingOrgClient).isEqualTo("fhir-elr-no-transform") - } - } - - verify(exactly = 0) { - QueueAccess.sendMessage(any(), any()) - } - - val tableRow = submissionTableService.getSubmission( - reportId.toString(), - "Accepted" - ) - - assertNotNull(tableRow) - assertThat(tableRow.bodyURL).isEqualTo(receiveBlobUrl) - assertThat(tableRow.detail).isEqualTo("[1: Unable to parse FHIR data.]") - - assertThat(azureEventService.reportStreamEvents[ReportStreamEventName.REPORT_RECEIVED]!!).hasSize(1) - val event = - azureEventService - .reportStreamEvents[ReportStreamEventName.REPORT_RECEIVED]!!.last() as ReportStreamReportEvent - assertThat(event.reportEventData).isEqualToIgnoringGivenProperties( - ReportEventData( - reportId, - null, - emptyList(), - Topic.FULL_ELR, - receiveBlobUrl, - TaskAction.receive, - OffsetDateTime.now() - ), - ReportEventData::timestamp - ) - assertThat(event.params).isEqualTo( - mapOf( - ReportStreamEventProperties.ITEM_FORMAT to MimeFormat.FHIR, - ReportStreamEventProperties.SENDER_NAME to fhirSenderWithNoTransform.fullName, - ReportStreamEventProperties.FILE_LENGTH to headers["content-length"], - ReportStreamEventProperties.SENDER_IP to headers["x-azure-clientip"], - ReportStreamEventProperties.REQUEST_PARAMETERS to headers.toString() - ) - ) - } - - @Test - fun `test process invalid HL7 message`() { - val invalidReceivedReportContents = - listOf(unparseableHL7Record) - .joinToString("\n") - val receiveBlobUrl = BlobAccess.uploadBlob( - "receive/fail-path.hl7", - invalidReceivedReportContents.toByteArray(), - getBlobContainerMetadata() - ) - - val reportId = UUID.randomUUID() - val headers = mapOf( - "content-type" to "application/hl7-v2;test", - "x-azure-clientip" to "0.0.0.0", - "payloadname" to "test_message", - "client_id" to hl7SenderWithNoTransform.fullName, - "content-length" to "100" - ) - - val receiveQueueMessage = generateReceiveQueueMessage( - reportId.toString(), - receiveBlobUrl, - invalidReceivedReportContents, - hl7SenderWithNoTransform, - headers = headers - ) - - val fhirFunctions = createFHIRFunctionsInstance() - - fhirFunctions.process( - receiveQueueMessage, - 1, - createFHIRReceiver(), - ActionHistory(TaskAction.receive) - ) - - ReportStreamTestDatabaseContainer.testDatabaseAccess.transact { txn -> - val actionLogs = DSL.using(txn).select(Tables.ACTION_LOG.asterisk()) - .from(Tables.ACTION_LOG) - .where(Tables.ACTION_LOG.REPORT_ID.eq(reportId)) - .and(Tables.ACTION_LOG.TYPE.eq(ActionLogType.error)) - .fetchInto(DetailedActionLog::class.java) - - assertThat(actionLogs.count()).isEqualTo(2) - - val reportFile = DSL.using(txn).select(Tables.REPORT_FILE.asterisk()) - .from(Tables.REPORT_FILE) - .where(Tables.REPORT_FILE.REPORT_ID.eq(reportId)) - .fetchInto(ReportFile::class.java) - - assertThat(reportFile).hasSize(1) - reportFile.first().apply { - assertThat(nextAction).isEqualTo(TaskAction.convert) - assertThat(receivingOrg).isEqualTo(null) - assertThat(receivingOrgSvc).isEqualTo(null) - assertThat(schemaName).isEqualTo("None") - assertThat(schemaTopic).isEqualTo(Topic.FULL_ELR) - assertThat(bodyFormat).isEqualTo("HL7") - assertThat(sendingOrg).isEqualTo("phd") - assertThat(sendingOrgClient).isEqualTo("hl7-elr-no-transform") - } - } - - verify(exactly = 0) { - QueueAccess.sendMessage(any(), any()) - } - - val tableRow = submissionTableService.getSubmission( - reportId.toString(), - "Accepted" - ) - - assertNotNull(tableRow) - assertThat(tableRow.bodyURL).isEqualTo(receiveBlobUrl) - assertThat(tableRow.detail).isEqualTo("[Failed to parse message, Failed to parse message]") - - assertThat(azureEventService.reportStreamEvents[ReportStreamEventName.REPORT_RECEIVED]!!).hasSize(1) - val event = - azureEventService - .reportStreamEvents[ReportStreamEventName.REPORT_RECEIVED]!!.last() as ReportStreamReportEvent - assertThat(event.reportEventData).isEqualToIgnoringGivenProperties( - ReportEventData( - reportId, - null, - emptyList(), - Topic.FULL_ELR, - receiveBlobUrl, - TaskAction.receive, - OffsetDateTime.now() - ), - ReportEventData::timestamp - ) - assertThat(event.params).isEqualTo( - mapOf( - ReportStreamEventProperties.ITEM_FORMAT to MimeFormat.HL7, - ReportStreamEventProperties.SENDER_NAME to hl7SenderWithNoTransform.fullName, - ReportStreamEventProperties.FILE_LENGTH to headers["content-length"], - ReportStreamEventProperties.SENDER_IP to headers["x-azure-clientip"], - ReportStreamEventProperties.REQUEST_PARAMETERS to headers.toString() - ) - ) - } - - @Test - fun `test process CSV message`() { - val invalidReceivedReportContents = - listOf(unparseableHL7Record) - .joinToString("\n") - val receiveBlobUrl = BlobAccess.uploadBlob( - "receive/fail-path.hl7", - invalidReceivedReportContents.toByteArray(), - getBlobContainerMetadata() - ) - - val reportId = UUID.randomUUID() - val headers = mapOf( - "content-type" to "application/hl7-v2;test", - "x-azure-clientip" to "0.0.0.0", - "payloadname" to "test_message", - "client_id" to csvSenderWithNoTransform.fullName, - "content-length" to "100" - ) - - val receiveQueueMessage = generateReceiveQueueMessage( - reportId.toString(), - receiveBlobUrl, - invalidReceivedReportContents, - csvSenderWithNoTransform, - headers = headers - ) - - val fhirFunctions = createFHIRFunctionsInstance() - - var exception: Exception? = null - try { - fhirFunctions.process( - receiveQueueMessage, - 1, - createFHIRReceiver(), - ActionHistory(TaskAction.receive) - ) - } catch (e: Exception) { - exception = e - } - - assertThat(exception!!.javaClass.name).isEqualTo("java.lang.IllegalStateException") - - ReportStreamTestDatabaseContainer.testDatabaseAccess.transact { txn -> - val actionLogs = DSL.using(txn).select(Tables.ACTION_LOG.asterisk()) - .from(Tables.ACTION_LOG) - .where(Tables.ACTION_LOG.REPORT_ID.eq(reportId)) - .and(Tables.ACTION_LOG.TYPE.eq(ActionLogType.error)) - .fetchInto(DetailedActionLog::class.java) - - assertThat(actionLogs.count()).isEqualTo(0) - - val reportFile = DSL.using(txn).select(Tables.REPORT_FILE.asterisk()) - .from(Tables.REPORT_FILE) - .where(Tables.REPORT_FILE.REPORT_ID.eq(reportId)) - .fetchInto(ReportFile::class.java) - - assertThat(reportFile).isEmpty() - } - - verify(exactly = 0) { - QueueAccess.sendMessage(any(), any()) - } - - val tableRow = submissionTableService.getSubmission( - reportId.toString(), - "Rejected" - ) - - assertNotNull(tableRow) - assertThat(tableRow.bodyURL).isEqualTo(receiveBlobUrl) - assertThat(tableRow.detail).isEqualTo("[Unsupported sender format: CSV]") - - assertThat(azureEventService.reportStreamEvents[ReportStreamEventName.REPORT_NOT_PROCESSABLE]!!).hasSize(1) - val event = - azureEventService - .reportStreamEvents[ReportStreamEventName.REPORT_NOT_PROCESSABLE]!!.last() as ReportStreamReportEvent - assertThat(event.reportEventData).isEqualToIgnoringGivenProperties( - ReportEventData( - reportId, - null, - emptyList(), - null, - receiveBlobUrl, - TaskAction.receive, - OffsetDateTime.now() - ), - ReportEventData::timestamp - ) - assertThat(event.params).isEqualTo( - mapOf( - ReportStreamEventProperties.ITEM_FORMAT to MimeFormat.CSV, - ReportStreamEventProperties.SENDER_NAME to csvSenderWithNoTransform.fullName, - ReportStreamEventProperties.FILE_LENGTH to headers["content-length"], - ReportStreamEventProperties.SENDER_IP to headers["x-azure-clientip"], - ReportStreamEventProperties.REQUEST_PARAMETERS to headers.toString(), - ReportStreamEventProperties.PROCESSING_ERROR to "Unsupported sender format CSV." - ) - ) - } -} \ No newline at end of file diff --git a/prime-router/src/test/kotlin/fhirengine/azure/FHIRTranslatorIntegrationTests.kt b/prime-router/src/test/kotlin/fhirengine/azure/FHIRTranslatorIntegrationTests.kt index d4d3d517d6b..d203856028e 100644 --- a/prime-router/src/test/kotlin/fhirengine/azure/FHIRTranslatorIntegrationTests.kt +++ b/prime-router/src/test/kotlin/fhirengine/azure/FHIRTranslatorIntegrationTests.kt @@ -6,8 +6,6 @@ import assertk.assertions.isNotEqualTo import assertk.assertions.isNotNull import assertk.assertions.isNull import assertk.assertions.isTrue -import gov.cdc.prime.reportstream.shared.BlobUtils -import gov.cdc.prime.reportstream.shared.QueueMessage import gov.cdc.prime.router.DeepOrganization import gov.cdc.prime.router.FileSettings import gov.cdc.prime.router.MimeFormat @@ -29,6 +27,7 @@ import gov.cdc.prime.router.common.UniversalPipelineTestUtils.fetchChildReports import gov.cdc.prime.router.db.ReportStreamTestDatabaseContainer import gov.cdc.prime.router.db.ReportStreamTestDatabaseSetupExtension import gov.cdc.prime.router.fhirengine.engine.FHIRTranslator +import gov.cdc.prime.router.fhirengine.engine.QueueMessage import gov.cdc.prime.router.history.db.ReportGraph import gov.cdc.prime.router.metadata.LookupTable import gov.cdc.prime.router.report.ReportService @@ -117,7 +116,7 @@ class FHIRTranslatorIntegrationTests : Logging { "type": "${TaskAction.translate.literal}", "reportId": "${report.id}", "blobURL": "${report.bodyURL}", - "digest": "${BlobUtils.digestToString(BlobUtils.sha256Digest(blobContents.toByteArray()))}", + "digest": "${BlobAccess.digestToString(BlobAccess.sha256Digest(blobContents.toByteArray()))}", "blobSubFolderName": "${sender.fullName}", "topic": "${sender.topic.jsonVal}", "receiverFullName": "$receiverName" diff --git a/prime-router/src/test/kotlin/fhirengine/azure/SubmissionTableServiceIntegrationTests.kt b/prime-router/src/test/kotlin/fhirengine/azure/SubmissionTableServiceIntegrationTests.kt deleted file mode 100644 index 75790e601cc..00000000000 --- a/prime-router/src/test/kotlin/fhirengine/azure/SubmissionTableServiceIntegrationTests.kt +++ /dev/null @@ -1,107 +0,0 @@ -package gov.cdc.prime.router.fhirengine.azure - -import gov.cdc.prime.reportstream.shared.Submission -import gov.cdc.prime.router.azure.SubmissionTableService -import gov.cdc.prime.router.azure.TableAccess -import gov.cdc.prime.router.common.TestcontainersUtils -import io.mockk.clearAllMocks -import io.mockk.every -import io.mockk.mockkObject -import io.mockk.unmockkAll -import org.junit.jupiter.api.AfterEach -import org.junit.jupiter.api.Assertions.assertEquals -import org.junit.jupiter.api.BeforeEach -import org.junit.jupiter.api.Test -import org.testcontainers.junit.jupiter.Container -import org.testcontainers.junit.jupiter.Testcontainers -import java.util.UUID -import kotlin.test.assertNotNull - -@Testcontainers -class SubmissionTableServiceIntegrationTests { - - @Container - val azuriteContainer = TestcontainersUtils.createAzuriteContainer( - customImageName = "azurite_fhirreceiverintegration", - customEnv = mapOf( - "AZURITE_ACCOUNTS" to "devstoreaccount1:keydevstoreaccount1" - ) - ) - - private lateinit var submissionTableService: SubmissionTableService - - @BeforeEach - fun beforeEach() { - clearAllMocks() - - mockkObject(TableAccess) - every { TableAccess.getConnectionString() } returns getConnString() - - submissionTableService = SubmissionTableService.getInstance() - submissionTableService.reset() - } - - @AfterEach - fun afterEach() { - unmockkAll() - } - - private fun getConnString(): String { - @Suppress("ktlint:standard:max-line-length") - return """DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;AccountKey=keydevstoreaccount1;BlobEndpoint=http://${azuriteContainer.host}:${azuriteContainer.getMappedPort(10000)}/devstoreaccount1;QueueEndpoint=http://${azuriteContainer.host}:${azuriteContainer.getMappedPort(10001)}/devstoreaccount1;TableEndpoint=http://${azuriteContainer.host}:${azuriteContainer.getMappedPort(10002)}/devstoreaccount1;""" - } - - /** - * Test to ensure that multiple submissions can be inserted and retrieved correctly - * in a thread-safe manner. - * - * 10 different submissions will be inserted concurrently, followed by retrievals to ensure - * that all submissions were properly stored and retrieved from the "submission" table. - */ - @Test - fun `test concurrent reset and submissions with simple threads`() { - // List to hold submission objects - val submissions = List(10) { - val submissionId = UUID.randomUUID().toString() - val status = "Accepted" - val url = "https://anyblob.com" - Submission(submissionId, status, url) // Create new Submission instance - } - - // List to hold the created threads - val threads = mutableListOf() - - // Create and start 50 threads - for (i in 1..50) { - val thread = Thread { - // Each thread randomly picks one of the submissions to insert - val submission = submissions.random() - - try { - submissionTableService.insertSubmission(submission) - submissionTableService.reset() // Reset `tableAccess` - println("Thread ${Thread.currentThread().name} inserted and reset successfully") - } catch (e: Exception) { - println("Thread ${Thread.currentThread().name} encountered an error: ${e.message}") - } - } - thread.start() - threads.add(thread) // Keep track of the thread - } - - // Wait for all threads to complete using `join()` - for (thread in threads) { - thread.join() - } - - // After all threads complete, verify that submissions were inserted successfully - submissions.forEach { submission -> - val retrievedSubmission = submissionTableService.getSubmission(submission.submissionId, submission.status) - assertNotNull(retrievedSubmission, "Submission should not be null") - assertEquals(submission.submissionId, retrievedSubmission.submissionId) - assertEquals(submission.status, retrievedSubmission.status) - } - - println("Test passed! Concurrent submission and reset operations are thread-safe.") - } -} \ No newline at end of file diff --git a/prime-router/src/test/kotlin/fhirengine/engine/FHIRReceiverTests.kt b/prime-router/src/test/kotlin/fhirengine/engine/FHIRReceiverTests.kt deleted file mode 100644 index 8edc912f5f1..00000000000 --- a/prime-router/src/test/kotlin/fhirengine/engine/FHIRReceiverTests.kt +++ /dev/null @@ -1,273 +0,0 @@ -package gov.cdc.prime.router.fhirengine.engine - -import assertk.assertThat -import assertk.assertions.hasSize -import assertk.assertions.isEqualTo -import com.microsoft.azure.functions.HttpStatus -import gov.cdc.prime.reportstream.shared.Submission -import gov.cdc.prime.router.ActionLog -import gov.cdc.prime.router.ActionLogDetail -import gov.cdc.prime.router.ActionLogger -import gov.cdc.prime.router.CovidSender -import gov.cdc.prime.router.CustomerStatus -import gov.cdc.prime.router.DeepOrganization -import gov.cdc.prime.router.FileSettings -import gov.cdc.prime.router.InvalidParamMessage -import gov.cdc.prime.router.Metadata -import gov.cdc.prime.router.MimeFormat -import gov.cdc.prime.router.Organization -import gov.cdc.prime.router.Receiver -import gov.cdc.prime.router.Schema -import gov.cdc.prime.router.SettingsProvider -import gov.cdc.prime.router.Topic -import gov.cdc.prime.router.azure.ActionHistory -import gov.cdc.prime.router.azure.BlobAccess -import gov.cdc.prime.router.azure.DatabaseAccess -import gov.cdc.prime.router.azure.SubmissionTableService -import gov.cdc.prime.router.azure.db.enums.TaskAction -import gov.cdc.prime.router.azure.db.tables.pojos.Action -import gov.cdc.prime.router.common.cleanHL7Record -import gov.cdc.prime.router.report.ReportService -import io.mockk.clearAllMocks -import io.mockk.every -import io.mockk.mockk -import io.mockk.mockkClass -import io.mockk.mockkObject -import io.mockk.spyk -import io.mockk.unmockkAll -import io.mockk.verify -import org.jooq.tools.jdbc.MockConnection -import org.jooq.tools.jdbc.MockDataProvider -import org.jooq.tools.jdbc.MockResult -import org.junit.jupiter.api.AfterEach -import org.junit.jupiter.api.BeforeEach -import java.util.UUID -import kotlin.test.Test - -class FHIRReceiverTest { - - // Common mock objects and setup - val dataProvider = MockDataProvider { emptyArray() } - val connection = MockConnection(dataProvider) - val accessSpy = spyk(DatabaseAccess(connection)) - val blobMock = mockkClass(BlobAccess::class) - val reportService: ReportService = mockk() - private val submissionTableService: SubmissionTableService = mockk() - - val oneOrganization = DeepOrganization( - "co-phd", - "test", - Organization.Jurisdiction.FEDERAL, - receivers = listOf(Receiver("elr", "co-phd", Topic.TEST, CustomerStatus.INACTIVE, "one")) - ) - val settings = FileSettings().loadOrganizations(oneOrganization) - val one = Schema(name = "None", topic = Topic.FULL_ELR, elements = emptyList()) - val metadata = Metadata(schema = one) - - private fun makeFhirReceiver(metadata: Metadata, settings: SettingsProvider): FHIRReceiver { - return FHIRReceiver( - metadata, - settings, - accessSpy, - blobMock, - reportService = reportService, - submissionTableService = submissionTableService - ) - -// FHIREngine.Builder().metadata(metadata).settingsProvider(settings).databaseAccess(accessSpy) -// .reportService(reportService).blobAccess(blobMock).build(taskAction) - } - - @BeforeEach - fun reset() { - clearAllMocks() - } - - @AfterEach - fun tearDown() { - unmockkAll() - } - - data class FHIRTestSetup( - val engine: FHIRReceiver, - val actionLogger: ActionLogger, - val actionHistory: ActionHistory, - val message: FhirReceiveQueueMessage, - ) - - private fun setupMocksForProcessingTest( - clientId: String, - contentType: String, - customerStatus: CustomerStatus, - hasErrors: Boolean, - reportID: UUID = UUID.randomUUID(), - - ): FHIRTestSetup { - mockkObject(BlobAccess) - val actionHistory = mockk() - val actionLogger = mockk() - val sender = CovidSender( - "Test Sender", - "test", - MimeFormat.HL7, - schemaName = "one", - customerStatus = customerStatus - ) - - val engine = spyk(makeFhirReceiver(metadata, settings)) - val message = mockk(relaxed = true) - val action = Action() - action.actionName = TaskAction.receive - - val headers = mapOf( - "x-azure-clientip" to "0.0.0.0", - "payloadname" to "test_message", - "client_id" to clientId, - "content-type" to contentType - ) - - every { message.headers } returns headers - every { message.reportId } returns reportID - every { actionLogger.hasErrors() } returns hasErrors - every { actionLogger.setReportId(any()) } returns actionLogger - every { actionLogger.error(any()) } returns Unit - every { engine.settings.findSender(any()) } returns sender - every { actionHistory.trackActionResult(any()) } returns Unit - every { actionHistory.trackActionParams(any()) } returns Unit - every { actionHistory.trackActionSenderInfo(any(), any()) } returns Unit - every { actionHistory.trackExternalInputReport(any(), any()) } returns Unit - every { actionHistory.trackLogs(any>()) } returns Unit - every { submissionTableService.insertSubmission(any()) } returns Unit - every { actionHistory.action } returns action - every { BlobAccess.downloadBlob(any(), any()) }.returns(cleanHL7Record) - - return FHIRTestSetup(engine, actionLogger, actionHistory, message) - } - - @Test - fun `test handle sender not found`() { - val fhirSetup = - setupMocksForProcessingTest( - "unknown_client_id", - "application/hl7-v2;test", - CustomerStatus.ACTIVE, - true - ) - val engine = fhirSetup.engine - val queueMessage = fhirSetup.message - val actionLogger = ActionLogger() - val actionHistory = fhirSetup.actionHistory - - every { engine.settings.findSender(any()) } returns null - - accessSpy.transact { txn -> - engine.run(queueMessage, actionLogger, actionHistory, txn) - } - - assertThat(actionLogger.errors).hasSize(0) - - val reportId = queueMessage.reportId.toString() - val blobURL = queueMessage.blobURL - verify(exactly = 1) { - Submission( - reportId, - "Rejected", - blobURL, - "Sender not found matching client_id: unknown_client_id" - ) - submissionTableService.insertSubmission(any()) - } - } - - @Test - fun `test handle inactive sender`() { - val fhirSetup = - setupMocksForProcessingTest( - "known_client_id", - "application/hl7-v2;test", - CustomerStatus.INACTIVE, - true - ) - val engine = fhirSetup.engine - val queueMessage = fhirSetup.message - val actionLogger = ActionLogger() - val actionHistory = fhirSetup.actionHistory - - accessSpy.transact { txn -> - engine.run(queueMessage, actionLogger, actionHistory, txn) - } - - assertThat(actionLogger.errors).hasSize(1) - - assertThat( - actionLogger.errors[0].equals( - actionLogger.errors[0].equals( - InvalidParamMessage("Sender has customer status INACTIVE: unknown_client_id") - ) - ) - ) - - verify(exactly = 1) { - submissionTableService.insertSubmission(any()) - actionHistory.trackActionResult(HttpStatus.NOT_ACCEPTABLE) - actionHistory.trackActionSenderInfo("test.Test Sender", "test_message") - } - } - - @Test - fun `test successful processing`() { - val reportID = UUID.randomUUID() - val fhirSetup = - setupMocksForProcessingTest( - "known_client_id", - "application/hl7-v2;test", - CustomerStatus.ACTIVE, - false, - reportID - ) - val engine = fhirSetup.engine - val queueMessage = fhirSetup.message - val actionLogger = fhirSetup.actionLogger - val actionHistory = fhirSetup.actionHistory - every { actionLogger.errors } returns emptyList() - - accessSpy.transact { txn -> - engine.run(queueMessage, actionLogger, actionHistory, txn) - } - - verify(exactly = 1) { - actionHistory.trackActionResult(HttpStatus.CREATED) - actionHistory.trackActionSenderInfo("test.Test Sender", "test_message") - actionHistory.trackExternalInputReport(any(), any()) - submissionTableService.insertSubmission(any()) - } - } - - @Test - fun `test invalid MIME type`() { - val fhirSetup = - setupMocksForProcessingTest( - "known_client_id", - "invalid/mime-type", - CustomerStatus.ACTIVE, - true - ) - val engine = fhirSetup.engine - val queueMessage = fhirSetup.message - val actionLogger = ActionLogger() - val actionHistory = fhirSetup.actionHistory - - var exception: Exception? = null - try { - accessSpy.transact { txn -> - engine.run(queueMessage, actionLogger, actionHistory, txn) - } - } catch (e: Exception) { - exception = e - } - - assertThat(exception!!.javaClass.name).isEqualTo("java.lang.IllegalArgumentException") - assertThat(actionLogger.errors).hasSize(1) - assertThat(actionLogger.errors[0].detail.message).isEqualTo("Unexpected MIME type invalid/mime-type.") - } -} \ No newline at end of file diff --git a/prime-router/src/test/kotlin/fhirengine/engine/FhirConverterTests.kt b/prime-router/src/test/kotlin/fhirengine/engine/FhirConverterTests.kt index 6b48d2e7260..b0f4a4025e4 100644 --- a/prime-router/src/test/kotlin/fhirengine/engine/FhirConverterTests.kt +++ b/prime-router/src/test/kotlin/fhirengine/engine/FhirConverterTests.kt @@ -172,7 +172,7 @@ class FhirConverterTests { val engine = spyk(makeFhirEngine(metadata, settings, TaskAction.process) as FHIRConverter) val message = spyk( FhirConvertQueueMessage( - UUID.randomUUID(), BLOB_URL, "test", BLOB_SUB_FOLDER_NAME, Topic.FULL_ELR, + UUID.randomUUID(), BLOB_URL, "test", BLOB_SUB_FOLDER_NAME, topic = Topic.FULL_ELR, SCHEMA_NAME ) ) @@ -184,7 +184,7 @@ class FhirConverterTests { every { actionLogger.getItemLogger(any(), any()) } returns actionLogger every { actionLogger.warn(any>()) } just runs every { actionLogger.setReportId(any()) } returns actionLogger - every { BlobAccess.downloadBlob(any(), any()) }.returns(validHl7) + every { message.downloadContent() }.returns(validHl7) every { Report.getFormatFromBlobURL(message.blobURL) } returns MimeFormat.HL7 every { BlobAccess.Companion.uploadBlob(any(), any()) } returns "test" every { accessSpy.insertTask(any(), bodyFormat.toString(), bodyUrl, any()) }.returns(Unit) @@ -227,7 +227,7 @@ class FhirConverterTests { BLOB_FHIR_URL, "test", BLOB_SUB_FOLDER_NAME, - Topic.FULL_ELR, + topic = Topic.FULL_ELR, SCHEMA_NAME ) ) @@ -239,7 +239,7 @@ class FhirConverterTests { every { actionLogger.getItemLogger(any(), any()) } returns actionLogger every { actionLogger.warn(any>()) } just runs every { actionLogger.setReportId(any()) } returns actionLogger - every { BlobAccess.downloadBlob(any(), any()) } + every { message.downloadContent() } .returns(File(VALID_DATA_URL).readText()) every { Report.getFormatFromBlobURL(message.blobURL) } returns MimeFormat.FHIR every { BlobAccess.Companion.uploadBlob(any(), any()) } returns "test" @@ -296,7 +296,7 @@ class FhirConverterTests { val engine = spyk(makeFhirEngine(metadata, settings, TaskAction.process) as FHIRConverter) val message = spyk( FhirConvertQueueMessage( - UUID.randomUUID(), BLOB_FHIR_URL, "test", BLOB_SUB_FOLDER_NAME, Topic.FULL_ELR, + UUID.randomUUID(), BLOB_FHIR_URL, "test", BLOB_SUB_FOLDER_NAME, topic = Topic.FULL_ELR, SCHEMA_NAME ) ) @@ -306,7 +306,7 @@ class FhirConverterTests { every { actionLogger.hasErrors() } returns false every { actionLogger.setReportId(any()) } returns actionLogger - every { BlobAccess.downloadBlob(any(), any()) } + every { message.downloadContent() } .returns(File("src/test/resources/fhirengine/engine/bundle_multiple_bundles.fhir").readText()) every { Report.getFormatFromBlobURL(message.blobURL) } returns MimeFormat.FHIR every { BlobAccess.Companion.uploadBlob(any(), any()) } returns "test" @@ -386,7 +386,7 @@ class FhirConverterTests { BLOB_FHIR_URL, "test", BLOB_SUB_FOLDER_NAME, - Topic.FULL_ELR, + topic = Topic.FULL_ELR, SCHEMA_NAME ) ) @@ -398,7 +398,7 @@ class FhirConverterTests { every { actionLogger.getItemLogger(any(), any()) } returns actionLogger every { actionLogger.warn(any>()) } just runs every { actionLogger.setReportId(any()) } returns actionLogger - every { BlobAccess.downloadBlob(any(), any()) } returns (fhirRecord) + every { message.downloadContent() } returns (fhirRecord) every { Report.getFormatFromBlobURL(message.blobURL) } returns MimeFormat.FHIR every { BlobAccess.Companion.uploadBlob(any(), any()) } returns "test" every { accessSpy.insertTask(any(), bodyFormat.toString(), bodyUrl, any()) }.returns(Unit) @@ -477,7 +477,7 @@ class FhirConverterTests { BLOB_FHIR_URL, "test", BLOB_SUB_FOLDER_NAME, - Topic.FULL_ELR, + topic = Topic.FULL_ELR, SCHEMA_NAME ) ) @@ -489,7 +489,7 @@ class FhirConverterTests { every { actionLogger.getItemLogger(any(), any()) } returns actionLogger every { actionLogger.warn(any>()) } just runs every { actionLogger.setReportId(any()) } returns actionLogger - every { BlobAccess.downloadBlob(any(), any()) } returns (fhirData) + every { message.downloadContent() } returns (fhirData) every { Report.getFormatFromBlobURL(message.blobURL) } returns MimeFormat.FHIR every { BlobAccess.Companion.uploadBlob(any(), any()) } returns "test" every { accessSpy.insertTask(any(), bodyFormat.toString(), bodyUrl, any()) }.returns(Unit) @@ -556,12 +556,11 @@ class FhirConverterTests { @Test fun `should log an error and return no bundles if the message is empty`() { - mockkObject(BlobAccess) val engine = spyk(makeFhirEngine(metadata, settings, TaskAction.process) as FHIRConverter) val actionLogger = ActionLogger() - val mockMessage = mockk(relaxed = true) + val mockMessage = mockk() every { mockMessage.topic } returns Topic.FULL_ELR - every { BlobAccess.downloadBlob(any(), any()) } returns "" + every { mockMessage.downloadContent() } returns "" val bundles = engine.process(MimeFormat.FHIR, mockMessage, actionLogger) assertThat(bundles).isEmpty() assertThat(actionLogger.errors.map { it.detail.message }).contains("Provided raw data is empty.") @@ -570,7 +569,6 @@ class FhirConverterTests { @Test fun `should handle a parse failure for the entire HL7 batch`() { mockkConstructor(Hl7InputStreamMessageStringIterator::class) - mockkObject(BlobAccess) every { anyConstructed().hasNext() } throws Hl7InputStreamMessageStringIterator.ParseFailureError( @@ -580,10 +578,12 @@ class FhirConverterTests { val engine = spyk(makeFhirEngine(metadata, settings, TaskAction.process) as FHIRConverter) val actionLogger = ActionLogger() - val mockMessage = mockk(relaxed = true) + val mockMessage = mockk() every { mockMessage.topic } returns Topic.FULL_ELR every { mockMessage.reportId } returns UUID.randomUUID() - every { BlobAccess.downloadBlob(any(), any()) } returns simpleHL7 + every { + mockMessage.downloadContent() + } returns simpleHL7 val bundles = engine.process(MimeFormat.HL7, mockMessage, actionLogger) assertThat(bundles).isEmpty() assertThat( @@ -595,13 +595,12 @@ class FhirConverterTests { @Test fun `should log an error and return no bundles if the format is not supported`() { - mockkObject(BlobAccess) val engine = spyk(makeFhirEngine(metadata, settings, TaskAction.process) as FHIRConverter) val actionLogger = ActionLogger() - val mockMessage = mockk(relaxed = true) + val mockMessage = mockk() every { mockMessage.topic } returns Topic.FULL_ELR every { mockMessage.reportId } returns UUID.randomUUID() - every { BlobAccess.downloadBlob(any(), any()) } returns "test,1,2" + every { mockMessage.downloadContent() } returns "test,1,2" val bundles = engine.process(MimeFormat.CSV, mockMessage, actionLogger) assertThat(bundles).isEmpty() assertThat(actionLogger.errors.map { it.detail.message }) @@ -610,13 +609,12 @@ class FhirConverterTests { @Test fun `should a log FHIR parse error and not return a bundle`() { - mockkObject(BlobAccess) val engine = spyk(makeFhirEngine(metadata, settings, TaskAction.process) as FHIRConverter) val actionLogger = ActionLogger() - val mockMessage = mockk(relaxed = true) + val mockMessage = mockk() every { mockMessage.topic } returns Topic.FULL_ELR every { mockMessage.reportId } returns UUID.randomUUID() - every { BlobAccess.downloadBlob(any(), any()) } returns "{\"id\":}" + every { mockMessage.downloadContent() } returns "{\"id\":}" val processedItems = engine.process(MimeFormat.FHIR, mockMessage, actionLogger) assertThat(processedItems).hasSize(1) assertThat(processedItems.first().bundle).isNull() @@ -628,7 +626,6 @@ class FhirConverterTests { @Test fun `should log a FHIR validation error and not return a bundle`() { - mockkObject(BlobAccess) val fhirValidationResult = mockk() val message = SingleValidationMessage() message.severity = ResultSeverityEnum.ERROR @@ -642,11 +639,11 @@ class FhirConverterTests { val engine = spyk(makeFhirEngine(metadata, settings, TaskAction.process) as FHIRConverter) val actionLogger = ActionLogger() - val mockMessage = mockk(relaxed = true) + val mockMessage = mockk() every { mockMessage.topic } returns Topic.FULL_ELR every { mockMessage.reportId } returns UUID.randomUUID() - every { BlobAccess.downloadBlob(any(), any()) } returns "{\"id\":\"1\", \"resourceType\":\"Bundle\"}" + every { mockMessage.downloadContent() } returns "{\"id\":\"1\", \"resourceType\":\"Bundle\"}" val processedItems = engine.process(MimeFormat.FHIR, mockMessage, actionLogger) assertThat(processedItems).hasSize(1) assertThat(processedItems.first().bundle).isNull() @@ -657,14 +654,13 @@ class FhirConverterTests { @Test fun `should log an HL7 parse error and not return a bundle`() { - mockkObject(BlobAccess) val engine = spyk(makeFhirEngine(metadata, settings, TaskAction.process) as FHIRConverter) val actionLogger = ActionLogger() - val mockMessage = mockk(relaxed = true) + val mockMessage = mockk() every { mockMessage.topic } returns Topic.FULL_ELR every { mockMessage.reportId } returns UUID.randomUUID() every { - BlobAccess.downloadBlob(any(), any()) + mockMessage.downloadContent() } returns unparseableHL7 val processedItems = engine.process(MimeFormat.HL7, mockMessage, actionLogger) assertThat(processedItems).hasSize(1) @@ -681,7 +677,6 @@ class FhirConverterTests { @Test fun `should log a HL7 validation error and not return a bundle`() { - mockkObject(BlobAccess) val mockValidation = mockk() val mockEntry = mockk() every { mockEntry.classification } returns AbstractItemValidator.ERROR_CLASSIFICATION @@ -695,11 +690,11 @@ class FhirConverterTests { val engine = spyk(makeFhirEngine(metadata, settings, TaskAction.process) as FHIRConverter) val actionLogger = ActionLogger() - val mockMessage = mockk(relaxed = true) + val mockMessage = mockk() every { mockMessage.topic } returns Topic.FULL_ELR every { mockMessage.reportId } returns UUID.randomUUID() every { - BlobAccess.downloadBlob(any(), any()) + mockMessage.downloadContent() } returns simpleHL7 val processedItems = engine.process(MimeFormat.HL7, mockMessage, actionLogger) assertThat(processedItems).hasSize(1) @@ -716,7 +711,6 @@ class FhirConverterTests { @Test fun `should log a HL7 conversion error and not return a bundle`() { - mockkObject(BlobAccess) mockkObject(HL7toFhirTranslator) val mockHL7toFhirTranslator = mockk() every { mockHL7toFhirTranslator.translate(any()) } throws RuntimeException("Conversion error") @@ -724,11 +718,11 @@ class FhirConverterTests { val engine = spyk(makeFhirEngine(metadata, settings, TaskAction.process) as FHIRConverter) val actionLogger = ActionLogger() - val mockMessage = mockk(relaxed = true) + val mockMessage = mockk() every { mockMessage.topic } returns Topic.FULL_ELR every { mockMessage.reportId } returns UUID.randomUUID() every { - BlobAccess.downloadBlob(any(), any()) + mockMessage.downloadContent() } returns simpleHL7 val processedItems = engine.process(MimeFormat.HL7, mockMessage, actionLogger) assertThat(processedItems).hasSize(1) @@ -745,14 +739,13 @@ class FhirConverterTests { @Test fun `should optionally support routing some or no items when routeMessageWithInvalidItems is set`() { - mockkObject(BlobAccess) val engine = spyk(makeFhirEngine(metadata, settings, TaskAction.process) as FHIRConverter) val actionLogger = ActionLogger() - val mockMessage = mockk(relaxed = true) + val mockMessage = mockk() every { mockMessage.topic } returns Topic.FULL_ELR every { mockMessage.reportId } returns UUID.randomUUID() every { - BlobAccess.downloadBlob(any(), any()) + mockMessage.downloadContent() } returns """{\"id\":} {"id":"1", "resourceType":"Bundle"} """.trimMargin() @@ -773,15 +766,14 @@ class FhirConverterTests { @Test fun `should process an HL7 message`() { - mockkObject(BlobAccess) val engine = spyk(makeFhirEngine(metadata, settings, TaskAction.process) as FHIRConverter) val actionLogger = ActionLogger() - val mockMessage = mockk(relaxed = true) + val mockMessage = mockk() every { mockMessage.topic } returns Topic.FULL_ELR every { mockMessage.reportId } returns UUID.randomUUID() every { - BlobAccess.downloadBlob(any(), any()) + mockMessage.downloadContent() } returns simpleHL7 val bundles = engine.process(MimeFormat.HL7, mockMessage, actionLogger) assertThat(bundles).hasSize(1) @@ -790,18 +782,17 @@ class FhirConverterTests { @Test fun `should process items in parallel`() { - mockkObject(BlobAccess) mockkObject(BaseEngine.Companion) every { BaseEngine.Companion getProperty "sequentialLimit" } returns 2 val engine = spyk(makeFhirEngine(metadata, settings, TaskAction.process) as FHIRConverter) val actionLogger = ActionLogger() - val mockMessage = mockk(relaxed = true) + val mockMessage = mockk() every { mockMessage.topic } returns Topic.FULL_ELR every { mockMessage.reportId } returns UUID.randomUUID() every { - BlobAccess.downloadBlob(any(), any()) + mockMessage.downloadContent() } returns simpleHL7 + "\n" + simpleHL7 + "\n" + simpleHL7 val bundles = engine.process(MimeFormat.HL7, mockMessage, actionLogger) assertThat(bundles).hasSize(3) @@ -812,7 +803,6 @@ class FhirConverterTests { @Test fun `should process an HL7 message with a registered profile`() { - mockkObject(BlobAccess) mockkObject(HL7Reader.Companion) every { HL7Reader.Companion.messageToConfigMap } returns mapOf( HL7Reader.Companion.HL7MessageType( @@ -827,12 +817,12 @@ class FhirConverterTests { val engine = spyk(makeFhirEngine(metadata, settings, TaskAction.process) as FHIRConverter) val actionLogger = ActionLogger() - val mockMessage = mockk(relaxed = true) + val mockMessage = mockk() every { mockMessage.topic } returns Topic.FULL_ELR every { mockMessage.reportId } returns UUID.randomUUID() every { - BlobAccess.downloadBlob(any(), any()) + mockMessage.downloadContent() } returns simpleHL7 val bundles = engine.process(MimeFormat.HL7, mockMessage, actionLogger) assertThat(bundles).hasSize(1) diff --git a/prime-router/src/test/kotlin/fhirengine/engine/FhirDestinationFilterTests.kt b/prime-router/src/test/kotlin/fhirengine/engine/FhirDestinationFilterTests.kt index cac3f90e718..6e53616a3eb 100644 --- a/prime-router/src/test/kotlin/fhirengine/engine/FhirDestinationFilterTests.kt +++ b/prime-router/src/test/kotlin/fhirengine/engine/FhirDestinationFilterTests.kt @@ -282,7 +282,7 @@ class FhirDestinationFilterTests { // mock setup mockkObject(BlobAccess) - every { BlobAccess.downloadBlob(any(), any()) }.returns(File(VALID_FHIR_URL).readText()) + every { message.downloadContent() }.returns(File(VALID_FHIR_URL).readText()) every { BlobAccess.uploadBlob(any(), any()) } returns "test" every { accessSpy.insertTask(any(), MimeFormat.FHIR.toString(), BODY_URL, any()) }.returns(Unit) @@ -312,7 +312,7 @@ class FhirDestinationFilterTests { // mock setup mockkObject(BlobAccess) - every { BlobAccess.downloadBlob(any(), any()) }.returns(File(VALID_FHIR_URL).readText()) + every { message.downloadContent() }.returns(File(VALID_FHIR_URL).readText()) every { BlobAccess.uploadBlob(any(), any()) } returns "test" every { accessSpy.insertTask(any(), MimeFormat.FHIR.toString(), BODY_URL, any()) }.returns(Unit) @@ -440,7 +440,7 @@ class FhirDestinationFilterTests { // data + mock setup val fhirData = File(VALID_FHIR_URL).readText() mockkObject(BlobAccess) - every { BlobAccess.downloadBlob(any(), any()) }.returns(fhirData) + every { message.downloadContent() }.returns(fhirData) every { BlobAccess.uploadBlob(any(), any()) } returns "test" every { accessSpy.insertTask(any(), MimeFormat.FHIR.toString(), BODY_URL, any()) }.returns(Unit) @@ -477,7 +477,7 @@ class FhirDestinationFilterTests { // mock setup mockkObject(BlobAccess) - every { BlobAccess.downloadBlob(any(), any()) }.returns(File(VALID_FHIR_URL).readText()) + every { message.downloadContent() }.returns(File(VALID_FHIR_URL).readText()) every { BlobAccess.uploadBlob(any(), any()) } returns "test" every { accessSpy.insertTask(any(), MimeFormat.FHIR.toString(), BODY_URL, any()) }.returns(Unit) every { engine.findTopicReceivers(any()) } returns emptyList() diff --git a/prime-router/src/test/kotlin/fhirengine/engine/FhirReceiverFilterTests.kt b/prime-router/src/test/kotlin/fhirengine/engine/FhirReceiverFilterTests.kt index 950f828eea0..b9b59aaf7f8 100644 --- a/prime-router/src/test/kotlin/fhirengine/engine/FhirReceiverFilterTests.kt +++ b/prime-router/src/test/kotlin/fhirengine/engine/FhirReceiverFilterTests.kt @@ -172,7 +172,6 @@ class FhirReceiverFilterTests { actionHistory.reportsOut.clear() actionHistory.actionLogs.clear() azureEventService.clear() - mockkObject(BlobAccess) clearAllMocks() } @@ -206,7 +205,7 @@ class FhirReceiverFilterTests { // act on each message (with assert) messages.forEach { message -> - every { BlobAccess.downloadBlob(any(), any()) }.returns(fhirData) + every { message.downloadContent() }.returns(fhirData) // act + assert accessSpy.transact { txn -> val results = engine.run(message, actionLogger, actionHistory, txn) @@ -259,7 +258,7 @@ class FhirReceiverFilterTests { // act messages.forEach { message -> - every { BlobAccess.downloadBlob(any(), any()) }.returns(fhirData) + every { message.downloadContent() }.returns(fhirData) accessSpy.transact { txn -> val results = engine.run(message, actionLogger, actionHistory, txn) assertThat(results).isEmpty() @@ -311,7 +310,7 @@ class FhirReceiverFilterTests { // act on each message (with assert) messages.forEach { message -> - every { BlobAccess.downloadBlob(any(), any()) }.returns(fhirData) + every { message.downloadContent() }.returns(fhirData) // act + assert accessSpy.transact { txn -> val results = engine.run(message, actionLogger, actionHistory, txn) @@ -365,7 +364,7 @@ class FhirReceiverFilterTests { // act on each message (with assert) messages.forEach { message -> - every { BlobAccess.downloadBlob(any(), any()) }.returns(fhirData) + every { message.downloadContent() }.returns(fhirData) // act + assert accessSpy.transact { txn -> val results = engine.run(message, actionLogger, actionHistory, txn) @@ -412,7 +411,7 @@ class FhirReceiverFilterTests { // mock setup mockkObject(BlobAccess) - every { BlobAccess.downloadBlob(any(), any()) }.returns(File(VALID_FHIR_FILEPATH).readText()) + every { message.downloadContent() }.returns(File(VALID_FHIR_FILEPATH).readText()) every { BlobAccess.uploadBlob(any(), any()) } returns "test" every { accessSpy.insertTask(any(), MimeFormat.FHIR.toString(), BODY_URL, any()) }.returns(Unit) @@ -476,7 +475,7 @@ class FhirReceiverFilterTests { // mock setup mockkObject(BlobAccess) - every { BlobAccess.downloadBlob(any(), any()) }.returns(FhirTranscoder.encode(bundle)) + every { message.downloadContent() }.returns(FhirTranscoder.encode(bundle)) every { BlobAccess.uploadBlob(any(), any()) } returns "test" every { accessSpy.insertTask(any(), MimeFormat.FHIR.toString(), BODY_URL, any()) }.returns(Unit) @@ -537,7 +536,7 @@ class FhirReceiverFilterTests { // act on each message (with assert) messages.forEachIndexed { i, message -> - every { BlobAccess.downloadBlob(any(), any()) }.returns(FhirTranscoder.encode(bundle)) + every { message.downloadContent() }.returns(FhirTranscoder.encode(bundle)) // act + assert accessSpy.transact { txn -> val results = engine.run(message, actionLogger, actionHistory, txn) @@ -585,7 +584,7 @@ class FhirReceiverFilterTests { // mock setup mockkObject(BlobAccess) - every { BlobAccess.downloadBlob(any(), any()) }.returns(fhirData) + every { message.downloadContent() }.returns(fhirData) every { BlobAccess.uploadBlob(any(), any()) } returns "test" every { accessSpy.insertTask(any(), MimeFormat.FHIR.toString(), BODY_URL, any()) }.returns(Unit) @@ -644,7 +643,7 @@ class FhirReceiverFilterTests { // mock setup mockkObject(BlobAccess) - every { BlobAccess.downloadBlob(any(), any()) }.returns(FhirTranscoder.encode(bundle)) + every { message.downloadContent() }.returns(FhirTranscoder.encode(bundle)) every { BlobAccess.uploadBlob(any(), any()) } returns "test" every { accessSpy.insertTask(any(), MimeFormat.FHIR.toString(), BODY_URL, any()) }.returns(Unit) @@ -689,7 +688,7 @@ class FhirReceiverFilterTests { // mock setup mockkObject(BlobAccess) - every { BlobAccess.downloadBlob(any(), any()) }.returns(fhirData) + every { message.downloadContent() }.returns(fhirData) every { BlobAccess.uploadBlob(any(), any()) } returns "test" every { accessSpy.insertTask(any(), MimeFormat.FHIR.toString(), BODY_URL, any()) }.returns(Unit) @@ -730,7 +729,7 @@ class FhirReceiverFilterTests { // mock setup mockkObject(BlobAccess) mockkStatic(Bundle::filterObservations) - every { BlobAccess.downloadBlob(any(), any()) }.returns(fhirData) + every { message.downloadContent() }.returns(fhirData) every { BlobAccess.uploadBlob(any(), any()) } returns "test" every { accessSpy.insertTask(any(), MimeFormat.FHIR.toString(), BODY_URL, any()) }.returns(Unit) every { any().filterObservations(any(), any()) } returns FhirTranscoder.decode(fhirData) @@ -796,7 +795,7 @@ class FhirReceiverFilterTests { } // mock setup - every { BlobAccess.downloadBlob(any(), any()) }.returns(FhirTranscoder.encode(bundle)) + every { message.downloadContent() }.returns(FhirTranscoder.encode(bundle)) // act + assert accessSpy.transact { txn -> @@ -839,7 +838,7 @@ class FhirReceiverFilterTests { ) // mock setup - every { BlobAccess.downloadBlob(any(), any()) }.returns(File(VALID_FHIR_FILEPATH).readText()) + every { message.downloadContent() }.returns(File(VALID_FHIR_FILEPATH).readText()) // act + assert accessSpy.transact { txn -> @@ -876,7 +875,7 @@ class FhirReceiverFilterTests { ) // mock setup - every { BlobAccess.downloadBlob(any(), any()) }.returns(File(VALID_FHIR_FILEPATH).readText()) + every { message.downloadContent() }.returns(File(VALID_FHIR_FILEPATH).readText()) // act + assert accessSpy.transact { diff --git a/prime-router/src/test/kotlin/fhirengine/engine/FhirTranslatorTests.kt b/prime-router/src/test/kotlin/fhirengine/engine/FhirTranslatorTests.kt index b6944b9dce9..382781c60e8 100644 --- a/prime-router/src/test/kotlin/fhirengine/engine/FhirTranslatorTests.kt +++ b/prime-router/src/test/kotlin/fhirengine/engine/FhirTranslatorTests.kt @@ -122,7 +122,7 @@ class FhirTranslatorTests { val bodyUrl = BODY_URL every { actionLogger.hasErrors() } returns false - every { BlobAccess.downloadBlob(any(), any()) } + every { message.downloadContent() } .returns(File(VALID_DATA_URL).readText()) every { BlobAccess.Companion.uploadBlob(any(), any()) } returns "test" every { @@ -196,7 +196,7 @@ class FhirTranslatorTests { val bodyFormat = MimeFormat.FHIR val bodyUrl = BODY_URL every { actionLogger.hasErrors() } returns false - every { BlobAccess.downloadBlob(any(), any()) } + every { message.downloadContent() } .returns(File(VALID_DATA_URL).readText()) every { BlobAccess.Companion.uploadBlob(any(), any()) } returns "test" every { @@ -491,7 +491,7 @@ class FhirTranslatorTests { every { actionLogger.hasErrors() } returns false every { actionLogger.error(any()) } returns Unit - every { BlobAccess.downloadBlob(any(), any()) } + every { message.downloadContent() } .returns(File("src/test/resources/fhirengine/engine/valid_data_with_extensions.fhir").readText()) every { BlobAccess.Companion.uploadBlob(any(), any()) } returns "test" every { accessSpy.insertTask(any(), bodyFormat.toString(), bodyUrl, any()) }.returns(Unit) diff --git a/prime-router/src/testIntegration/kotlin/datatests/mappinginventory/v251/CNNtoPractitionerTests.kt b/prime-router/src/testIntegration/kotlin/datatests/mappinginventory/v251/CNNtoPractitionerTests.kt new file mode 100644 index 00000000000..3e1bc05ce60 --- /dev/null +++ b/prime-router/src/testIntegration/kotlin/datatests/mappinginventory/v251/CNNtoPractitionerTests.kt @@ -0,0 +1,17 @@ +package gov.cdc.prime.router.datatests.mappinginventory.v251 + +import gov.cdc.prime.router.datatests.mappinginventory.verifyHL7ToFHIRToHL7Mapping +import org.junit.jupiter.api.Test + +class CNNtoPractitionerTests { + @Test + fun `test correctly handles ISO universal id type`() { + assert( + verifyHL7ToFHIRToHL7Mapping( + "v251/cnn/cnn-to-Practitioner", + profile = "./metadata/HL7/v251-elr", + outputSchema = "classpath:/metadata/hl7_mapping/v251-elr/ORU_R01.yml", + ).passed + ) + } +} \ No newline at end of file diff --git a/prime-router/src/testIntegration/kotlin/datatests/mappinginventory/v251/CWEtoCodeableConceptTests.kt b/prime-router/src/testIntegration/kotlin/datatests/mappinginventory/v251/CWEtoCodeableConceptTests.kt new file mode 100644 index 00000000000..6453e38099f --- /dev/null +++ b/prime-router/src/testIntegration/kotlin/datatests/mappinginventory/v251/CWEtoCodeableConceptTests.kt @@ -0,0 +1,105 @@ +package gov.cdc.prime.router.datatests.mappinginventory.v251 + +import gov.cdc.prime.router.datatests.mappinginventory.verifyHL7ToFHIRToHL7Mapping +import org.junit.jupiter.api.Test + +class CWEtoCodeableConceptTests { + @Test + fun `test value in CWE-1`() { + assert( + verifyHL7ToFHIRToHL7Mapping( + "v251/cwe/codeable-concept/cwe-3-test-value-cwe1", + profile = "./metadata/HL7/v251-elr", + outputSchema = "classpath:/metadata/hl7_mapping/v251-elr/ORU_R01.yml", + ).passed + ) + } + + @Test + fun `test value in CWE-2`() { + assert( + verifyHL7ToFHIRToHL7Mapping( + "v251/cwe/codeable-concept/cwe-4-test-value-cwe2", + profile = "./metadata/HL7/v251-elr", + outputSchema = "classpath:/metadata/hl7_mapping/v251-elr/ORU_R01.yml", + ).passed + ) + } + + @Test + fun `test value in CWE-3`() { + assert( + verifyHL7ToFHIRToHL7Mapping( + "v251/cwe/codeable-concept/cwe-5-test-value-cwe3", + profile = "./metadata/HL7/v251-elr", + outputSchema = "classpath:/metadata/hl7_mapping/v251-elr/ORU_R01.yml", + ).passed + ) + } + + @Test + fun `test value in CWE-4`() { + assert( + verifyHL7ToFHIRToHL7Mapping( + "v251/cwe/codeable-concept/cwe-6-test-value-cwe4", + profile = "./metadata/HL7/v251-elr", + outputSchema = "classpath:/metadata/hl7_mapping/v251-elr/ORU_R01.yml", + ).passed + ) + } + + @Test + fun `test value in CWE-5`() { + assert( + verifyHL7ToFHIRToHL7Mapping( + "v251/cwe/codeable-concept/cwe-7-test-value-cwe5", + profile = "./metadata/HL7/v251-elr", + outputSchema = "classpath:/metadata/hl7_mapping/v251-elr/ORU_R01.yml", + ).passed + ) + } + + @Test + fun `test value in CWE-6`() { + assert( + verifyHL7ToFHIRToHL7Mapping( + "v251/cwe/codeable-concept/cwe-8-test-value-cwe6", + profile = "./metadata/HL7/v251-elr", + outputSchema = "classpath:/metadata/hl7_mapping/v251-elr/ORU_R01.yml", + ).passed + ) + } + + @Test + fun `test value in CWE-7`() { + assert( + verifyHL7ToFHIRToHL7Mapping( + "v251/cwe/codeable-concept/cwe-9-test-value-cwe7", + profile = "./metadata/HL7/v251-elr", + outputSchema = "classpath:/metadata/hl7_mapping/v251-elr/ORU_R01.yml", + ).passed + ) + } + + @Test + fun `test value in CWE-8`() { + assert( + verifyHL7ToFHIRToHL7Mapping( + "v251/cwe/codeable-concept/cwe-10-test-value-cwe8", + profile = "./metadata/HL7/v251-elr", + outputSchema = "classpath:/metadata/hl7_mapping/v251-elr/ORU_R01.yml", + ).passed + ) + } + + @Test + fun `test value in CWE-9`() { + assert( + verifyHL7ToFHIRToHL7Mapping( + "v251/cwe/codeable-concept/cwe-11-test-value-cwe9", + profile = "./metadata/HL7/v251-elr", + outputSchema = "classpath:/metadata/hl7_mapping/v251-elr/ORU_R01.yml", + ).passed + ) + } +} \ No newline at end of file diff --git a/prime-router/src/testIntegration/kotlin/datatests/mappinginventory/v251/NDLtoPractitionerRoleTests.kt b/prime-router/src/testIntegration/kotlin/datatests/mappinginventory/v251/NDLtoPractitionerRoleTests.kt new file mode 100644 index 00000000000..2d2328918f0 --- /dev/null +++ b/prime-router/src/testIntegration/kotlin/datatests/mappinginventory/v251/NDLtoPractitionerRoleTests.kt @@ -0,0 +1,17 @@ +package gov.cdc.prime.router.datatests.mappinginventory.v251 + +import gov.cdc.prime.router.datatests.mappinginventory.verifyHL7ToFHIRToHL7Mapping +import org.junit.jupiter.api.Test + +class NDLtoPractitionerRoleTests { + @Test + fun `test translate to NDL to PractitionerRole to NDL`() { + assert( + verifyHL7ToFHIRToHL7Mapping( + "v251/ndl/NDL-to-PractitionerRole", + profile = "./metadata/HL7/v251-elr", + outputSchema = "classpath:/metadata/hl7_mapping/v251-elr/ORU_R01.yml", + ).passed + ) + } +} \ No newline at end of file diff --git a/prime-router/src/testIntegration/kotlin/datatests/mappinginventory/v251/XADtoAddressTests.kt b/prime-router/src/testIntegration/kotlin/datatests/mappinginventory/v251/XADtoAddressTests.kt new file mode 100644 index 00000000000..ebfa8d4dd9d --- /dev/null +++ b/prime-router/src/testIntegration/kotlin/datatests/mappinginventory/v251/XADtoAddressTests.kt @@ -0,0 +1,17 @@ +package gov.cdc.prime.router.datatests.mappinginventory.v251 + +import gov.cdc.prime.router.datatests.mappinginventory.verifyHL7ToFHIRToHL7Mapping +import org.junit.jupiter.api.Test + +class XADtoAddressTests { + @Test + fun `xad to address`() { + assert( + verifyHL7ToFHIRToHL7Mapping( + "v251/xad/xad-to-address", + profile = "./metadata/HL7/v251-elr", + outputSchema = "classpath:/metadata/hl7_mapping/v251-elr/ORU_R01.yml", + ).passed + ) + } +} \ No newline at end of file diff --git a/prime-router/src/testIntegration/kotlin/datatests/mappinginventory/v251/XTNToContactPointTests.kt b/prime-router/src/testIntegration/kotlin/datatests/mappinginventory/v251/XTNToContactPointTests.kt new file mode 100644 index 00000000000..538c578a618 --- /dev/null +++ b/prime-router/src/testIntegration/kotlin/datatests/mappinginventory/v251/XTNToContactPointTests.kt @@ -0,0 +1,17 @@ +package gov.cdc.prime.router.datatests.mappinginventory.v251 + +import gov.cdc.prime.router.datatests.mappinginventory.verifyHL7ToFHIRToHL7Mapping +import org.junit.jupiter.api.Test + +class XTNToContactPointTests { + @Test + fun `xtn to contact point`() { + assert( + verifyHL7ToFHIRToHL7Mapping( + "v251/xtn/xtn-to-contact-point", + profile = "./metadata/HL7/v251-elr", + outputSchema = "classpath:/metadata/hl7_mapping/v251-elr/ORU_R01.yml", + ).passed + ) + } +} \ No newline at end of file diff --git a/prime-router/src/testIntegration/kotlin/datatests/mappinginventory/v251elr/CQELRtoQuantityTest.kt b/prime-router/src/testIntegration/kotlin/datatests/mappinginventory/v251elr/CQELRtoQuantityTest.kt new file mode 100644 index 00000000000..328e1892fa2 --- /dev/null +++ b/prime-router/src/testIntegration/kotlin/datatests/mappinginventory/v251elr/CQELRtoQuantityTest.kt @@ -0,0 +1,17 @@ +package gov.cdc.prime.router.datatests.mappinginventory.v251elr + +import gov.cdc.prime.router.datatests.mappinginventory.verifyHL7ToFHIRToHL7Mapping +import org.junit.jupiter.api.Test + +class CQELRtoQuantityTest { + @Test + fun `test value for CQ_ELR`() { + assert( + verifyHL7ToFHIRToHL7Mapping( + "v251-elr/cq/cq-to-quantity", + profile = "./metadata/HL7/v251-elr", + outputSchema = "classpath:/metadata/hl7_mapping/v251-elr/ORU_R01.yml", + ).passed + ) + } +} \ No newline at end of file diff --git a/prime-router/src/testIntegration/kotlin/datatests/mappinginventory/v251elr/CWEELRtoCodeableConceptTests.kt b/prime-router/src/testIntegration/kotlin/datatests/mappinginventory/v251elr/CWEELRtoCodeableConceptTests.kt new file mode 100644 index 00000000000..264592d3853 --- /dev/null +++ b/prime-router/src/testIntegration/kotlin/datatests/mappinginventory/v251elr/CWEELRtoCodeableConceptTests.kt @@ -0,0 +1,160 @@ +package gov.cdc.prime.router.datatests.mappinginventory.v251elr + +import gov.cdc.prime.router.datatests.mappinginventory.verifyHL7ToFHIRToHL7Mapping +import org.junit.jupiter.api.Test + +class CWEELRtoCodeableConceptTests { + @Test + fun `test value in CWE-1`() { + assert( + verifyHL7ToFHIRToHL7Mapping( + "v251-elr/cwe/codeable-concept/cwe-3-test-value-cwe1", + profile = "./metadata/HL7/v251-elr", + outputSchema = "classpath:/metadata/hl7_mapping/v251-elr/ORU_R01.yml", + ).passed + ) + } + + @Test + fun `test value in CWE-2`() { + assert( + verifyHL7ToFHIRToHL7Mapping( + "v251-elr/cwe/codeable-concept/cwe-4-test-value-cwe2", + profile = "./metadata/HL7/v251-elr", + outputSchema = "classpath:/metadata/hl7_mapping/v251-elr/ORU_R01.yml", + ).passed + ) + } + + @Test + fun `test value in CWE-3`() { + assert( + verifyHL7ToFHIRToHL7Mapping( + "v251-elr/cwe/codeable-concept/cwe-5-test-value-cwe3", + profile = "./metadata/HL7/v251-elr", + outputSchema = "classpath:/metadata/hl7_mapping/v251-elr/ORU_R01.yml", + ).passed + ) + } + + @Test + fun `test value in CWE-4`() { + assert( + verifyHL7ToFHIRToHL7Mapping( + "v251-elr/cwe/codeable-concept/cwe-6-test-value-cwe4", + profile = "./metadata/HL7/v251-elr", + outputSchema = "classpath:/metadata/hl7_mapping/v251-elr/ORU_R01.yml", + ).passed + ) + } + + @Test + fun `test value in CWE-5`() { + assert( + verifyHL7ToFHIRToHL7Mapping( + "v251-elr/cwe/codeable-concept/cwe-7-test-value-cwe5", + profile = "./metadata/HL7/v251-elr", + outputSchema = "classpath:/metadata/hl7_mapping/v251-elr/ORU_R01.yml", + ).passed + ) + } + + @Test + fun `test value in CWE-6`() { + assert( + verifyHL7ToFHIRToHL7Mapping( + "v251-elr/cwe/codeable-concept/cwe-8-test-value-cwe6", + profile = "./metadata/HL7/v251-elr", + outputSchema = "classpath:/metadata/hl7_mapping/v251-elr/ORU_R01.yml", + ).passed + ) + } + + @Test + fun `test value in CWE-7`() { + assert( + verifyHL7ToFHIRToHL7Mapping( + "v251-elr/cwe/codeable-concept/cwe-9-test-value-cwe7", + profile = "./metadata/HL7/v251-elr", + outputSchema = "classpath:/metadata/hl7_mapping/v251-elr/ORU_R01.yml", + ).passed + ) + } + + @Test + fun `test value in CWE-8`() { + assert( + verifyHL7ToFHIRToHL7Mapping( + "v251-elr/cwe/codeable-concept/cwe-10-test-value-cwe8", + profile = "./metadata/HL7/v251-elr", + outputSchema = "classpath:/metadata/hl7_mapping/v251-elr/ORU_R01.yml", + ).passed + ) + } + + @Test + fun `test value in CWE-9`() { + assert( + verifyHL7ToFHIRToHL7Mapping( + "v251-elr/cwe/codeable-concept/cwe-11-test-value-cwe9", + profile = "./metadata/HL7/v251-elr", + outputSchema = "classpath:/metadata/hl7_mapping/v251-elr/ORU_R01.yml", + ).passed + ) + } + + @Test + fun `test value in CWE-10`() { + assert( + verifyHL7ToFHIRToHL7Mapping( + "v251-elr/cwe/codeable-concept/cwe-12-test-value-cwe10", + profile = "./metadata/HL7/v251-elr", + outputSchema = "classpath:/metadata/hl7_mapping/v251-elr/ORU_R01.yml", + ).passed + ) + } + + @Test + fun `test value in CWE-11`() { + assert( + verifyHL7ToFHIRToHL7Mapping( + "v251-elr/cwe/codeable-concept/cwe-13-test-value-cwe11", + profile = "./metadata/HL7/v251-elr", + outputSchema = "classpath:/metadata/hl7_mapping/v251-elr/ORU_R01.yml", + ).passed + ) + } + + @Test + fun `test value in CWE-12`() { + assert( + verifyHL7ToFHIRToHL7Mapping( + "v251-elr/cwe/codeable-concept/cwe-14-test-value-cwe12", + profile = "./metadata/HL7/v251-elr", + outputSchema = "classpath:/metadata/hl7_mapping/v251-elr/ORU_R01.yml", + ).passed + ) + } + + @Test + fun `test value in CWE-13`() { + assert( + verifyHL7ToFHIRToHL7Mapping( + "v251-elr/cwe/codeable-concept/cwe-15-test-value-cwe13", + profile = "./metadata/HL7/v251-elr", + outputSchema = "classpath:/metadata/hl7_mapping/v251-elr/ORU_R01.yml", + ).passed + ) + } + + @Test + fun `test value in CWE-14`() { + assert( + verifyHL7ToFHIRToHL7Mapping( + "v251-elr/cwe/codeable-concept/cwe-16-test-value-cwe14", + profile = "./metadata/HL7/v251-elr", + outputSchema = "classpath:/metadata/hl7_mapping/v251-elr/ORU_R01.yml", + ).passed + ) + } +} \ No newline at end of file diff --git a/prime-router/src/testIntegration/kotlin/datatests/mappinginventory/v251elr/ORUR01ELRFullTest.kt b/prime-router/src/testIntegration/kotlin/datatests/mappinginventory/v251elr/ORUR01ELRFullTest.kt new file mode 100644 index 00000000000..69a67c1d832 --- /dev/null +++ b/prime-router/src/testIntegration/kotlin/datatests/mappinginventory/v251elr/ORUR01ELRFullTest.kt @@ -0,0 +1,17 @@ +package gov.cdc.prime.router.datatests.mappinginventory.v251elr + +import gov.cdc.prime.router.datatests.mappinginventory.verifyHL7ToFHIRToHL7Mapping +import org.junit.jupiter.api.Test + +class ORUR01ELRFullTest { + @Test + fun `test ORU_R01 all segments`() { + assert( + verifyHL7ToFHIRToHL7Mapping( + "v251-elr/orur01/oru_r01-full", + profile = "./metadata/HL7/v251-elr", + outputSchema = "classpath:/metadata/hl7_mapping/v251-elr/ORU_R01.yml", + ).passed + ) + } +} \ No newline at end of file diff --git a/prime-router/src/testIntegration/kotlin/datatests/mappinginventory/v251elr/PRLELRtoServiceRequestTest.kt b/prime-router/src/testIntegration/kotlin/datatests/mappinginventory/v251elr/PRLELRtoServiceRequestTest.kt new file mode 100644 index 00000000000..9d42644564d --- /dev/null +++ b/prime-router/src/testIntegration/kotlin/datatests/mappinginventory/v251elr/PRLELRtoServiceRequestTest.kt @@ -0,0 +1,17 @@ +package gov.cdc.prime.router.datatests.mappinginventory.v251elr + +import gov.cdc.prime.router.datatests.mappinginventory.verifyHL7ToFHIRToHL7Mapping +import org.junit.jupiter.api.Test + +class PRLELRtoServiceRequestTest { + @Test + fun `test value for PRL_ELR`() { + assert( + verifyHL7ToFHIRToHL7Mapping( + "v251-elr/prl/prl-to-servicerequest", + profile = "./metadata/HL7/v251-elr", + outputSchema = "classpath:/metadata/hl7_mapping/v251-elr/ORU_R01.yml", + ).passed + ) + } +} \ No newline at end of file diff --git a/prime-router/src/testIntegration/kotlin/datatests/mappinginventory/v251elr/XPNELRtoHumanNameTests.kt b/prime-router/src/testIntegration/kotlin/datatests/mappinginventory/v251elr/XPNELRtoHumanNameTests.kt new file mode 100644 index 00000000000..9d9c6d6a165 --- /dev/null +++ b/prime-router/src/testIntegration/kotlin/datatests/mappinginventory/v251elr/XPNELRtoHumanNameTests.kt @@ -0,0 +1,17 @@ +package gov.cdc.prime.router.datatests.mappinginventory.v251elr + +import gov.cdc.prime.router.datatests.mappinginventory.verifyHL7ToFHIRToHL7Mapping +import org.junit.jupiter.api.Test + +class XPNELRtoHumanNameTests { + @Test + fun `test translate to HL7 to FHIR to HL7`() { + assert( + verifyHL7ToFHIRToHL7Mapping( + "v251-elr/xpn/xpn-to-humanname-xpn12-13-populated-xpn10-empty", + profile = "./metadata/HL7/v251-elr", + outputSchema = "classpath:/metadata/hl7_mapping/v251-elr/ORU_R01.yml", + ).passed + ) + } +} \ No newline at end of file diff --git a/prime-router/src/testIntegration/kotlin/transport/RESTTransportIntegrationTests.kt b/prime-router/src/testIntegration/kotlin/transport/RESTTransportIntegrationTests.kt index a78b3729a53..94a523c8179 100644 --- a/prime-router/src/testIntegration/kotlin/transport/RESTTransportIntegrationTests.kt +++ b/prime-router/src/testIntegration/kotlin/transport/RESTTransportIntegrationTests.kt @@ -977,64 +977,6 @@ hnm8COa8Kr+bnTqzScpQuOfujHcFEtfcYUGfSS6HusxidwXx+lYi1A== assertThat(retryItems).isNull() } - // Epic localhost end-to-end testing - private val oracleRlNRestTransport = RESTTransportType( - "https://sendURL", - "", - authType = "apiKey", - headers = mapOf( - "Content-Type" to "text/plain", - "shared-api-key" to "From Vault" - ) - ) - - val expectedHttpHeaders = mapOf( - "Content-Type" to "text/plain", - "shared-api-key" to "oracle123", - "System_ID" to "test-user", - "Key" to "oracle123" - ) - - @Test - fun `test transport postReport with valid message to oracle-rln--etor-nbs-results`() { - val header = makeHeader() - val mockRestTransport = spyk(RESTTransport(mockClientAuthOk())) - - // Given: - // lookupDefaultCredential returns mock UserApiKeyCredential object to allow - // the getAuthTokenWIthUserApiKey() to be called. - every { mockRestTransport.lookupDefaultCredential(any()) }.returns( - UserApiKeyCredential( - "test-user", - "oracle123" - ) - ) - - // When: - // RESTTransport is called WITH flexionRestTransportType which has transport.parameters - val retryItems = mockRestTransport.send( - oracleRlNRestTransport, header, reportId, "test", null, - context, actionHistory, mockk(relaxed = true) - ) - - // Then: - // postReport should be called with correct httpheaders' values as given. - verify { - runBlocking { - mockRestTransport.postReport( - any(), - any(), - any(), - expectedHttpHeaders, - any(), - any(), - any() - ) - } - } - assertThat(retryItems).isNull() - } - @Test fun `test post vs put http client`() { val logger = mockkClass(Logger::class) diff --git a/prime-router/src/testIntegration/resources/datatests/FHIR_to_HL7/mars_unwanted_condition_to_notes.fhir b/prime-router/src/testIntegration/resources/datatests/FHIR_to_HL7/mars_unwanted_condition_to_notes.fhir deleted file mode 100644 index f983d2590d8..00000000000 --- a/prime-router/src/testIntegration/resources/datatests/FHIR_to_HL7/mars_unwanted_condition_to_notes.fhir +++ /dev/null @@ -1 +0,0 @@ -{"resourceType":"Bundle","identifier":{"value":"ecfbc6c0-0c32-4cf8-adc2-9134281110d8"},"type":"message","timestamp":"2024-08-26T22:40:38.928Z","entry":[{"fullUrl":"MessageHeader/c2bc4735-f7b6-44f7-8b4b-471bbd7920c2","resource":{"resourceType":"MessageHeader","id":"c2bc4735-f7b6-44f7-8b4b-471bbd7920c2","meta":{"tag":[{"system":"http://terminology.hl7.org/CodeSystem/v2-0103","code":"P","display":"Production"}]},"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/msh-message-header","extension":[{"url":"MSH.15","valueString":"NE"},{"url":"MSH.16","valueString":"NE"},{"url":"MSH.19","valueCodeableConcept":{"coding":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding","valueString":"coding"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system","valueString":"ISO"}],"code":"ENG","display":"English"}]}},{"url":"MSH.21","valueIdentifier":{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority","extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id","valueString":"ELR_Receiver"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id","valueString":"2.16.840.1.113883.9.11"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type","valueString":"ISO"}]}],"value":"PHLabReport-NoAck"}},{"url":"MSH.7","valueInstant":"2024-08-26T22:40:38.928Z"}]},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/character-set","valueString":"UNICODE UTF-8"}],"eventCoding":{"system":"http://terminology.hl7.org/CodeSystem/v2-0003","code":"R01","display":"ORU^R01^ORU_R01"},"destination":[{"name":"PRIME ReportStream","endpoint":"https://prime.cdc.gov/api/reports?option=SkipInvalidItems"}],"sender":{"reference":"Organization/719ec8ad-cf59-405a-9832-c4065945c130"},"source":{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/software-binary-id","valueString":"0.2-SNAPSHOT"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/software-install-date","valueInstant":"2024-08-26T16:13:26Z"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/software-vendor-org","valueReference":{"reference":"Organization/07640c5d-87cd-488b-9343-a226c5166539"}},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id","valueString":"CDC PRIME - Atlanta"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id","valueString":"2.16.840.1.114222.4.1.237821"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type","valueString":"ISO"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field","valueString":"MSH.3"}],"name":"CDC PRIME - Atlanta: 2.16.840.1.114222.4.1.237821","software":"PRIME ReportStream","version":"0.2-SNAPSHOT","endpoint":"urn:oid:2.16.840.1.114222.4.1.237821"},"focus":[{"reference":"Provenance/5da4765d-f330-4c39-98b9-2e44de1b9732"},{"reference":"DiagnosticReport/ecfbc6c0-0c32-4cf8-adc2-9134281110d8"}]}},{"fullUrl":"Provenance/5da4765d-f330-4c39-98b9-2e44de1b9732","resource":{"resourceType":"Provenance","id":"5da4765d-f330-4c39-98b9-2e44de1b9732","recorded":"2024-08-26T22:40:38.928Z","activity":{"coding":[{"system":"http://terminology.hl7.org/CodeSystem/v2-0003","code":"R01","display":"ORU/ACK - Unsolicited transmission of an observation message"}]},"agent":[{"who":{"reference":"Organization/719ec8ad-cf59-405a-9832-c4065945c130"}}]}},{"fullUrl":"DiagnosticReport/ecfbc6c0-0c32-4cf8-adc2-9134281110d8","resource":{"resourceType":"DiagnosticReport","id":"ecfbc6c0-0c32-4cf8-adc2-9134281110d8","identifier":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority","extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id","valueString":"Testing Lab"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id","valueString":"12D4567890"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type","valueCode":"CLIA"}]},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field","valueString":"ORC.3"}],"type":{"coding":[{"code":"FILL"}]},"value":"ecfbc6c0-0c32-4cf8-adc2-9134281110d8"},{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field","valueString":"ORC.2"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority","extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id","valueString":"Testing Lab"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id","valueString":"12D4567890"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type","valueCode":"CLIA"}]}],"type":{"coding":[{"system":"http://terminology.hl7.org/CodeSystem/v2-0203","code":"PLAC"}]},"value":"ecfbc6c0-0c32-4cf8-adc2-9134281110d8"}],"basedOn":[{"reference":"ServiceRequest/1c658bf1-fb14-4701-8cb9-98f17956262f"}],"status":"final","code":{"coding":[{"system":"http://loinc.org","code":"97099-6"}]},"subject":{"reference":"Patient/6b9b4aa8-f333-4ea5-8dfa-2a3cd6b4fd86"},"effectiveDateTime":"2024-08-26T22:25:30+00:00","_effectiveDateTime":{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2-date-time","valueDateTime":"2024-08-26T22:25:30+00:00"}]},"issued":"2024-08-26T22:40:38+00:00","_issued":{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2-date-time","valueInstant":"2024-08-26T22:40:38+00:00"}]},"specimen":[{"reference":"Specimen/dc7af370-fc07-4b00-abc7-9b5dd87cf4d2"}],"result":[{"reference":"Observation/e234fc85-245d-4c25-a109-fa025ad77eb5"},{"reference":"Observation/fda8a9e5-092c-4235-b44b-362e0e01c73d"},{"reference":"Observation/83df8f91-e907-4fb9-ab5c-c81816b8e10b"}]}},{"fullUrl":"Patient/6b9b4aa8-f333-4ea5-8dfa-2a3cd6b4fd86","resource":{"resourceType":"Patient","id":"6b9b4aa8-f333-4ea5-8dfa-2a3cd6b4fd86","extension":[{"url":"http://ibm.com/fhir/cdm/StructureDefinition/local-race-cd","valueCodeableConcept":{"coding":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding","valueString":"coding"}],"system":"http://terminology.hl7.org/CodeSystem/v3-Race","version":"2.5.1","code":"1002-5","display":"native"}],"text":"native"}},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/ethnic-group","valueCodeableConcept":{"coding":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding","valueString":"coding"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system","valueString":"HL70189"}],"system":"http://terminology.hl7.org/CodeSystem/v2-0189","version":"2.9","code":"N","display":"Not Hispanic or Latino"}],"text":"Not Hispanic or Latino"}}],"identifier":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field","valueString":"PID.3"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cx-identifier","extension":[{"url":"CX.5","valueString":"PI"}]},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-facility","valueReference":{"reference":"Organization/719ec8ad-cf59-405a-9832-c4065945c130"}}],"value":"6b9b4aa8-f333-4ea5-8dfa-2a3cd6b4fd86","assigner":{"reference":"Organization/719ec8ad-cf59-405a-9832-c4065945c130"}}],"name":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/xpn-human-name","extension":[{"url":"XPN.2","valueString":"Adolin"}]}],"use":"official","family":"Kholin","given":["Adolin"]}],"telecom":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/xtn-contact-point","extension":[{"url":"XTN.1","valueString":"(540) 867 5309"},{"url":"XTN.2","valueString":"PRS"},{"url":"XTN.3","valueString":"CP"},{"url":"XTN.7","valueInteger":8675309},{"url":"XTN.12","valueString":"(540) 867 5309"}]},{"url":"http://hl7.org/fhir/StructureDefinition/contactpoint-country","valueInteger":1},{"url":"http://hl7.org/fhir/StructureDefinition/contactpoint-area","valueInteger":540}],"system":"phone","value":"(540) 867 5309","use":"mobile"}],"gender":"male","birthDate":"2003-12-10","deceasedBoolean":false,"address":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/xad-address","extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/sad-address-line","extension":[{"url":"SAD.1","valueString":"2251 Airport Rd"}]}]}],"line":["2251 Airport Rd"],"city":"Greenfield","district":"Adair","state":"IA","postalCode":"50849-8101","country":"USA"}],"managingOrganization":{"reference":"Organization/719ec8ad-cf59-405a-9832-c4065945c130"}}},{"fullUrl":"Organization/719ec8ad-cf59-405a-9832-c4065945c130","resource":{"resourceType":"Organization","id":"719ec8ad-cf59-405a-9832-c4065945c130","extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/organization-name-type","valueCoding":{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding","valueCodeableConcept":{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field","valueString":"XON.2"}],"coding":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding","valueString":"coding"}],"code":"L"}]}}],"code":"L"}},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field","valueString":"OBX.25"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field","valueString":"OBX.15"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field","valueString":"OBX.15"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field","valueString":"OBX.15"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field","valueString":"OBX.15"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field","valueString":"OBX.15"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field","valueString":"OBX.15"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field","valueString":"OBX.15"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-organization","valueCodeableConcept":{"coding":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system","valueCode":"CLIA"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding","valueString":"coding"}],"code":"12D4567890","display":"Testing Lab"}]}},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/xon-organization","extension":[{"url":"XON.10","valueString":"12D4567890"}]}],"identifier":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field","valueString":"HD.2,HD.3"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority","extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id","valueString":"2.16.840.1.113883.4.7"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type","valueString":"ISO"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id","valueString":"CLIA"}]},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/coding-system","valueCodeableConcept":{"coding":[{"code":"CLIA"}]}}],"use":"official","type":{"coding":[{"system":"http://terminology.hl7.org/CodeSystem/v2-0301","code":"CLIA"}]},"value":"12D4567890"},{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field","valueString":"HD.1"}],"type":{"coding":[{"system":"http://terminology.hl7.org/CodeSystem/v2-0203","code":"XX"}]},"value":"Testing Lab"}],"name":"Testing Lab","telecom":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/xtn-contact-point","extension":[{"url":"XTN.1","valueString":"(530) 867 5309"},{"url":"XTN.2","valueString":"WPN"},{"url":"XTN.3","valueString":"PH"},{"url":"XTN.7","valueInteger":8675309},{"url":"XTN.12","valueString":"(530) 867 5309"}]},{"url":"http://hl7.org/fhir/StructureDefinition/contactpoint-country","valueInteger":1},{"url":"http://hl7.org/fhir/StructureDefinition/contactpoint-area","valueInteger":530}],"system":"phone","value":"(530) 867 5309","use":"work"}],"address":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/xad-address","extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/sad-address-line","extension":[{"url":"SAD.1","valueString":"123 Beach Way"}]}]}],"line":["123 Beach Way"],"city":"Denver","state":"CO","postalCode":"80210","country":"USA"}]}},{"fullUrl":"Practitioner/ee29ccf5-631d-4b35-a6d4-30a61c0eb8d9","resource":{"resourceType":"Practitioner","id":"ee29ccf5-631d-4b35-a6d4-30a61c0eb8d9","extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/xcn-practitioner","extension":[{"url":"XCN.10","valueString":"L"},{"url":"XCN.3","valueString":"Phil"}]},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field","valueString":"ORC.12"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority","extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id","valueString":"NPI"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id","valueString":"2.16.840.1.113883.4.6"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type","valueString":"ISO"}]}],"identifier":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id","valueString":"NPI"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id","valueString":"urn:oid:2.16.840.1.113883.4.6"}],"type":{"coding":[{"code":"NPI"}]},"system":"NPI","value":"1245319599"}],"name":[{"family":"McTester","given":["Phil"]}],"telecom":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/xtn-contact-point","extension":[{"url":"XTN.1","valueString":"(530) 867 5309"},{"url":"XTN.2","valueString":"WPN"},{"url":"XTN.3","valueString":"PH"},{"url":"XTN.7","valueInteger":8675309},{"url":"XTN.12","valueString":"(530) 867 5309"}]},{"url":"http://hl7.org/fhir/StructureDefinition/contactpoint-country","valueInteger":1},{"url":"http://hl7.org/fhir/StructureDefinition/contactpoint-area","valueInteger":530}],"system":"phone","value":"(530) 867 5309","use":"work"}],"address":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/xad-address","extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/sad-address-line","extension":[{"url":"SAD.1","valueString":"321 Ocean Drive"}]}]}],"line":["321 Ocean Drive"],"city":"Denver","state":"CO","postalCode":"80210","country":"USA"}]}},{"fullUrl":"Specimen/dc7af370-fc07-4b00-abc7-9b5dd87cf4d2","resource":{"resourceType":"Specimen","id":"dc7af370-fc07-4b00-abc7-9b5dd87cf4d2","identifier":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id","valueString":"Testing Lab"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id","valueString":"12D4567890"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type","valueCode":"CLIA"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Component","valueString":"SPM.2.1"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/filler-assigned-identifier","extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/entity-identifier","valueId":"ecfbc6c0-0c32-4cf8-adc2-9134281110d8"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id","valueString":"Testing Lab"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id","valueString":"12D4567890"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type","valueCode":"CLIA"}]}],"type":{"coding":[{"system":"http://terminology.hl7.org/CodeSystem/v2-0203","code":"PGN"}]},"value":"ecfbc6c0-0c32-4cf8-adc2-9134281110d8"}],"type":{"coding":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding","valueString":"coding"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system","valueString":"SCT"}],"system":"http://snomed.info/sct","version":"2.67","code":"258500001","display":"Nasopharyngeal swab"}],"text":"Nasopharyngeal swab"},"subject":{"reference":"Patient/6b9b4aa8-f333-4ea5-8dfa-2a3cd6b4fd86"},"receivedTime":"2024-08-26T22:25:30+00:00","collection":{"collectedDateTime":"2024-08-26T22:25:30+00:00","bodySite":{"coding":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding","valueString":"coding"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system","valueString":"SCT"}],"system":"http://snomed.info/sct","code":"87100004","display":"Topography unknown (body structure)"}],"text":"Topography unknown (body structure)"}}}},{"fullUrl":"ServiceRequest/1c658bf1-fb14-4701-8cb9-98f17956262f","resource":{"resourceType":"ServiceRequest","id":"1c658bf1-fb14-4701-8cb9-98f17956262f","extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/order-control","valueCodeableConcept":{"coding":[{"system":"http://terminology.hl7.org/CodeSystem/v2-0119","code":"RE"}]}},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/order-effective-date","valueDateTime":"2024-08-26T22:40:30+00:00"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/business-event","valueCode":"RE"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/obr-observation-request","extension":[{"url":"OBR.2","valueIdentifier":{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field","valueString":"ORC.2"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority","extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id","valueString":"Testing Lab"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id","valueString":"12D4567890"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type","valueCode":"CLIA"}]}],"type":{"coding":[{"system":"http://terminology.hl7.org/CodeSystem/v2-0203","code":"PLAC"}]},"value":"ecfbc6c0-0c32-4cf8-adc2-9134281110d8"}},{"url":"OBR.3","valueIdentifier":{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority","extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id","valueString":"Testing Lab"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id","valueString":"12D4567890"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type","valueCode":"CLIA"}]},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field","valueString":"ORC.3"}],"type":{"coding":[{"code":"FILL"}]},"value":"ecfbc6c0-0c32-4cf8-adc2-9134281110d8"}},{"url":"OBR.16","valueReference":{"reference":"Practitioner/ee29ccf5-631d-4b35-a6d4-30a61c0eb8d9"}},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/callback-number","valueContactPoint":{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/xtn-contact-point","extension":[{"url":"XTN.1","valueString":"(530) 867 5309"},{"url":"XTN.2","valueString":"WPN"},{"url":"XTN.3","valueString":"PH"},{"url":"XTN.7","valueInteger":8675309},{"url":"XTN.12","valueString":"(530) 867 5309"}]},{"url":"http://hl7.org/fhir/StructureDefinition/contactpoint-country","valueInteger":1},{"url":"http://hl7.org/fhir/StructureDefinition/contactpoint-area","valueInteger":530},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field","valueString":"ORC.14"}],"system":"phone","value":"(530) 867 5309","use":"work"}},{"url":"OBR.25","valueString":"F"}]},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/orc-common-order","extension":[{"url":"ORC.15","valueDateTime":"2024-08-26T22:40:30+00:00"}]}],"identifier":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field","valueString":"ORC.2"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority","extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id","valueString":"Testing Lab"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id","valueString":"12D4567890"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type","valueCode":"CLIA"}]}],"type":{"coding":[{"system":"http://terminology.hl7.org/CodeSystem/v2-0203","code":"PLAC"}]},"value":"ecfbc6c0-0c32-4cf8-adc2-9134281110d8"},{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority","extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id","valueString":"Testing Lab"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id","valueString":"12D4567890"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type","valueCode":"CLIA"}]},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field","valueString":"ORC.3"}],"type":{"coding":[{"code":"FILL"}]},"value":"ecfbc6c0-0c32-4cf8-adc2-9134281110d8"}],"status":"completed","intent":"order","code":{"coding":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding","valueString":"coding"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system","valueString":"LN"}],"system":"http://loinc.org","code":"97099-6","display":"Influenza virus A and B and SARS-CoV-2 (COVID-19) Ag panel - Upper respiratory specimen by Rapid immunoassay"}]},"subject":{"reference":"Patient/6b9b4aa8-f333-4ea5-8dfa-2a3cd6b4fd86"},"requester":{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/callback-number","valueContactPoint":{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/xtn-contact-point","extension":[{"url":"XTN.1","valueString":"(530) 867 5309"},{"url":"XTN.2","valueString":"WPN"},{"url":"XTN.3","valueString":"PH"},{"url":"XTN.7","valueInteger":8675309},{"url":"XTN.12","valueString":"(530) 867 5309"}]},{"url":"http://hl7.org/fhir/StructureDefinition/contactpoint-country","valueInteger":1},{"url":"http://hl7.org/fhir/StructureDefinition/contactpoint-area","valueInteger":530},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field","valueString":"ORC.14"}],"system":"phone","value":"(530) 867 5309","use":"work"}}],"reference":"PractitionerRole/cec65045-6920-44e3-bc1d-b36321f72acd"},"performer":[{"reference":"Organization/719ec8ad-cf59-405a-9832-c4065945c130"}],"supportingInfo":[{"reference":"Observation/ec574855-130e-31a7-9d65-229619169035"},{"reference":"Observation/19288d48-f396-3faa-ab84-a632afb15403"},{"reference":"Observation/c556ead4-b9db-3e23-8a3a-c3803a981c08"},{"reference":"Observation/a0ead307-da3e-3371-96e2-f6b15f80f6ac"},{"reference":"Observation/51e39366-4c8d-3343-83ae-bc833d8aa0ed"}],"note":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/note-type","valueCodeableConcept":{"coding":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/code-index-name","valueString":"identifier"}],"system":"HL70364","version":"2.5.1","code":"RE","display":"Remark"}]}}],"text":"This is a note"}]}},{"fullUrl":"Device/157d550a-a12a-4367-b80e-53d75ca29053","resource":{"resourceType":"Device","id":"157d550a-a12a-4367-b80e-53d75ca29053","identifier":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority","extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id","valueCode":"MNI"}]}],"value":"BD Veritor Plus System_Becton Dickinson"},{"type":{"coding":[{"code":"MNI"}]}}],"manufacturer":"Becton, Dickinson and Company (BD)","deviceName":[{"name":"BD Veritor System for Rapid Detection of SARS-CoV-2 & Flu A+B","type":"model-name"}]}},{"fullUrl":"PractitionerRole/cec65045-6920-44e3-bc1d-b36321f72acd","resource":{"resourceType":"PractitionerRole","id":"cec65045-6920-44e3-bc1d-b36321f72acd","practitioner":{"reference":"Practitioner/ee29ccf5-631d-4b35-a6d4-30a61c0eb8d9"},"organization":{"reference":"Organization/719ec8ad-cf59-405a-9832-c4065945c130"}}},{"fullUrl":"Organization/07640c5d-87cd-488b-9343-a226c5166539","resource":{"resourceType":"Organization","id":"07640c5d-87cd-488b-9343-a226c5166539","name":"Centers for Disease Control and Prevention"}},{"fullUrl":"Observation/e234fc85-245d-4c25-a109-fa025ad77eb5","resource":{"resourceType":"Observation","id":"e234fc85-245d-4c25-a109-fa025ad77eb5","extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/obx-observation","extension":[{"url":"OBX.2","valueString":"CWE"},{"url":"OBX.11","valueString":"F"},{"url":"OBX.17","valueCodeableConcept":{"coding":[{"display":"BD Veritor System for Rapid Detection of SARS-CoV-2 & Flu A+B"}]}}]},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/analysis-date-time","valueInstant":"2024-08-26T22:40:30.132Z","_valueInstant":{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2-date-time","valueInstant":"2024-08-26T22:40:30.132Z"}]}}],"status":"final","code":{"coding":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/condition-code","valueCoding":{"system":"SNOMEDCT","code":"6142004","display":"Influenza (disorder)"}},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/condition-code","valueCoding":{"system":"SNOMEDCT","code":"541131000124102","display":"Infection caused by novel Influenza A virus variant (disorder)"}},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding","valueString":"coding"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system","valueString":"LN"}],"system":"http://loinc.org","code":"80382-5","display":"Influenza virus A Ag [Presence] in Upper respiratory specimen by Rapid immunoassay"}],"text":"Flu A"},"subject":{"reference":"Patient/6b9b4aa8-f333-4ea5-8dfa-2a3cd6b4fd86"},"effectiveDateTime":"2024-08-26T22:25:30+00:00","_effectiveDateTime":{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2-date-time","valueDateTime":"2024-08-26T22:25:30+00:00"}]},"issued":"2024-08-26T22:40:30.132Z","performer":[{"reference":"Organization/719ec8ad-cf59-405a-9832-c4065945c130"}],"valueCodeableConcept":{"coding":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding","valueString":"coding"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system","valueString":"SCT"}],"system":"http://snomed.info/sct","code":"260373001","display":"Detected"}]},"interpretation":[{"coding":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding","valueString":"coding"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system","valueString":"HL70078"}],"system":"http://terminology.hl7.org/CodeSystem/v2-0078","version":"2.7","code":"A","display":"Abnormal"}]}],"method":{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/testkit-name-id","valueCoding":{"code":"BD Veritor System for Rapid Detection of SARS-CoV-2 & Flu A+B_Becton, Dickinson and Company (BD)"}}],"coding":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding","valueString":"coding"}],"code":"BD Veritor System for Rapid Detection of SARS-CoV-2 & Flu A+B_Becton, Dickinson and Company (BD)","display":"BD Veritor System for Rapid Detection of SARS-CoV-2 & Flu A+B"}],"text":"BD Veritor System for Rapid Detection of SARS-CoV-2 & Flu A+B_Becton, Dickinson and Company (BD)"},"specimen":{"reference":"Specimen/dc7af370-fc07-4b00-abc7-9b5dd87cf4d2"},"device":{"reference":"Device/157d550a-a12a-4367-b80e-53d75ca29053"}}},{"fullUrl":"Observation/fda8a9e5-092c-4235-b44b-362e0e01c73d","resource":{"resourceType":"Observation","id":"fda8a9e5-092c-4235-b44b-362e0e01c73d","extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/obx-observation","extension":[{"url":"OBX.2","valueString":"CWE"},{"url":"OBX.11","valueString":"F"},{"url":"OBX.17","valueCodeableConcept":{"coding":[{"display":"BD Veritor System for Rapid Detection of SARS-CoV-2 & Flu A+B"}]}}]},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/analysis-date-time","valueInstant":"2024-08-26T22:40:30.132Z","_valueInstant":{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2-date-time","valueInstant":"2024-08-26T22:40:30.132Z"}]}}],"status":"final","code":{"coding":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/condition-code","valueCoding":{"system":"SNOMEDCT","code":"6142004","display":"Influenza (disorder)"}},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding","valueString":"coding"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system","valueString":"LN"}],"system":"http://loinc.org","code":"80383-3","display":"Influenza virus B Ag [Presence] in Upper respiratory specimen by Rapid immunoassay"}],"text":"Flu B"},"subject":{"reference":"Patient/6b9b4aa8-f333-4ea5-8dfa-2a3cd6b4fd86"},"effectiveDateTime":"2024-08-26T22:25:30+00:00","_effectiveDateTime":{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2-date-time","valueDateTime":"2024-08-26T22:25:30+00:00"}]},"issued":"2024-08-26T22:40:30.132Z","performer":[{"reference":"Organization/719ec8ad-cf59-405a-9832-c4065945c130"}],"valueCodeableConcept":{"coding":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding","valueString":"coding"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system","valueString":"SCT"}],"system":"http://snomed.info/sct","code":"260415000","display":"Not detected"}]},"interpretation":[{"coding":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding","valueString":"coding"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system","valueString":"HL70078"}],"system":"http://terminology.hl7.org/CodeSystem/v2-0078","version":"2.7","code":"N","display":"Normal"}]}],"method":{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/testkit-name-id","valueCoding":{"code":"BD Veritor System for Rapid Detection of SARS-CoV-2 & Flu A+B_Becton, Dickinson and Company (BD)"}}],"coding":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding","valueString":"coding"}],"code":"BD Veritor System for Rapid Detection of SARS-CoV-2 & Flu A+B_Becton, Dickinson and Company (BD)","display":"BD Veritor System for Rapid Detection of SARS-CoV-2 & Flu A+B"}],"text":"BD Veritor System for Rapid Detection of SARS-CoV-2 & Flu A+B_Becton, Dickinson and Company (BD)"},"specimen":{"reference":"Specimen/dc7af370-fc07-4b00-abc7-9b5dd87cf4d2"},"device":{"reference":"Device/157d550a-a12a-4367-b80e-53d75ca29053"}}},{"fullUrl":"Observation/83df8f91-e907-4fb9-ab5c-c81816b8e10b","resource":{"resourceType":"Observation","id":"83df8f91-e907-4fb9-ab5c-c81816b8e10b","extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/obx-observation","extension":[{"url":"OBX.2","valueString":"CWE"},{"url":"OBX.11","valueString":"F"},{"url":"OBX.17","valueCodeableConcept":{"coding":[{"display":"BD Veritor System for Rapid Detection of SARS-CoV-2 & Flu A+B"}]}}]},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/analysis-date-time","valueInstant":"2024-08-26T22:40:30.132Z","_valueInstant":{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2-date-time","valueInstant":"2024-08-26T22:40:30.132Z"}]}}],"status":"final","code":{"coding":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/condition-code","valueCoding":{"system":"SNOMEDCT","code":"840539006","display":"Disease caused by severe acute respiratory syndrome coronavirus 2 (disorder)"}},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding","valueString":"coding"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system","valueString":"LN"}],"system":"http://loinc.org","code":"97097-0","display":"SARS-CoV-2 (COVID-19) Ag [Presence] in Upper respiratory specimen by Rapid immunoassay"}],"text":"COVID-19"},"subject":{"reference":"Patient/6b9b4aa8-f333-4ea5-8dfa-2a3cd6b4fd86"},"effectiveDateTime":"2024-08-26T22:25:30+00:00","_effectiveDateTime":{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2-date-time","valueDateTime":"2024-08-26T22:25:30+00:00"}]},"issued":"2024-08-26T22:40:30.132Z","performer":[{"reference":"Organization/719ec8ad-cf59-405a-9832-c4065945c130"}],"valueCodeableConcept":{"coding":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding","valueString":"coding"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system","valueString":"SCT"}],"system":"http://snomed.info/sct","code":"260373001","display":"Detected"}]},"interpretation":[{"coding":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding","valueString":"coding"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system","valueString":"HL70078"}],"system":"http://terminology.hl7.org/CodeSystem/v2-0078","version":"2.7","code":"A","display":"Abnormal"}]}],"method":{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/testkit-name-id","valueCoding":{"code":"BD Veritor System for Rapid Detection of SARS-CoV-2 & Flu A+B_Becton, Dickinson and Company (BD)"}}],"coding":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding","valueString":"coding"}],"code":"BD Veritor System for Rapid Detection of SARS-CoV-2 & Flu A+B_Becton, Dickinson and Company (BD)","display":"BD Veritor System for Rapid Detection of SARS-CoV-2 & Flu A+B"}],"text":"BD Veritor System for Rapid Detection of SARS-CoV-2 & Flu A+B_Becton, Dickinson and Company (BD)"},"specimen":{"reference":"Specimen/dc7af370-fc07-4b00-abc7-9b5dd87cf4d2"},"device":{"reference":"Device/157d550a-a12a-4367-b80e-53d75ca29053"}}},{"fullUrl":"Observation/ec574855-130e-31a7-9d65-229619169035","resource":{"resourceType":"Observation","id":"ec574855-130e-31a7-9d65-229619169035","meta":{"tag":[{"code":"AOE"}]},"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/obx-observation","extension":[{"url":"OBX.2","valueString":"CWE"},{"url":"OBX.11","valueString":"F"},{"url":"OBX.29","valueString":"QST"}]}],"identifier":[{"use":"official","type":{"coding":[{"system":"http://loinc.org","code":"81959-9","display":"Public health laboratory ask at order entry panel"}]}}],"status":"final","code":{"coding":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/condition-code","valueCoding":{"system":"ReportStream","code":"AOE","display":"Ask at order entry question"}},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/condition-code","valueCoding":{"system":"ReportStream","code":"AOE","display":"Ask at order entry question"}},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding","valueString":"coding"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system","valueString":"LN"}],"system":"http://loinc.org","version":"2.69","code":"95419-8","display":"Has symptoms related to condition of interest"}],"text":"Has symptoms related to condition of interest"},"subject":{"reference":"Patient/6b9b4aa8-f333-4ea5-8dfa-2a3cd6b4fd86"},"effectiveDateTime":"2024-08-26T22:25:30+00:00","_effectiveDateTime":{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2-date-time","valueDateTime":"2024-08-26T22:25:30+00:00"}]},"performer":[{"reference":"Organization/719ec8ad-cf59-405a-9832-c4065945c130"}],"valueCodeableConcept":{"coding":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding","valueString":"coding"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system","valueString":"HL70136"}],"system":"http://terminology.hl7.org/ValueSet/v2-0136","code":"N","display":"No"}]},"interpretation":[{"coding":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding","valueString":"coding"}]}]}],"method":{"coding":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding","valueString":"coding"}]}]}}},{"fullUrl":"Observation/19288d48-f396-3faa-ab84-a632afb15403","resource":{"resourceType":"Observation","id":"19288d48-f396-3faa-ab84-a632afb15403","meta":{"tag":[{"code":"AOE"}]},"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/obx-observation","extension":[{"url":"OBX.2","valueString":"CWE"},{"url":"OBX.11","valueString":"F"},{"url":"OBX.29","valueString":"QST"}]}],"identifier":[{"use":"official","type":{"coding":[{"system":"http://loinc.org","code":"81959-9","display":"Public health laboratory ask at order entry panel"}]}}],"status":"final","code":{"coding":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/condition-code","valueCoding":{"system":"ReportStream","code":"AOE","display":"Ask at order entry question"}},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding","valueString":"coding"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system","valueString":"LN"}],"system":"http://loinc.org","version":"2.68","code":"82810-3","display":"Pregnancy status"}],"text":"Pregnancy status"},"subject":{"reference":"Patient/6b9b4aa8-f333-4ea5-8dfa-2a3cd6b4fd86"},"effectiveDateTime":"2024-08-26T22:25:30+00:00","_effectiveDateTime":{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2-date-time","valueDateTime":"2024-08-26T22:25:30+00:00"}]},"performer":[{"reference":"Organization/719ec8ad-cf59-405a-9832-c4065945c130"}],"valueCodeableConcept":{"coding":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding","valueString":"coding"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system","valueString":"SCT"}],"system":"http://snomed.info/sct","code":"60001007","display":"Not pregnant"}]},"interpretation":[{"coding":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding","valueString":"coding"}]}]}],"method":{"coding":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding","valueString":"coding"}]}]}}},{"fullUrl":"Observation/c556ead4-b9db-3e23-8a3a-c3803a981c08","resource":{"resourceType":"Observation","id":"c556ead4-b9db-3e23-8a3a-c3803a981c08","meta":{"tag":[{"code":"AOE"}]},"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/obx-observation","extension":[{"url":"OBX.2","valueString":"CWE"},{"url":"OBX.11","valueString":"F"},{"url":"OBX.29","valueString":"QST"}]}],"identifier":[{"use":"official","type":{"coding":[{"system":"http://loinc.org","code":"81959-9","display":"Public health laboratory ask at order entry panel"}]}}],"status":"final","code":{"coding":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/condition-code","valueCoding":{"system":"ReportStream","code":"AOE","display":"Ask at order entry question"}},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/condition-code","valueCoding":{"system":"ReportStream","code":"AOE","display":"Ask at order entry question"}},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding","valueString":"coding"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system","valueString":"LN"}],"system":"http://loinc.org","version":"2.69","code":"95418-0","display":"Employed in a healthcare setting"}],"text":"Employed in a healthcare setting"},"subject":{"reference":"Patient/6b9b4aa8-f333-4ea5-8dfa-2a3cd6b4fd86"},"effectiveDateTime":"2024-08-26T22:25:30+00:00","_effectiveDateTime":{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2-date-time","valueDateTime":"2024-08-26T22:25:30+00:00"}]},"performer":[{"reference":"Organization/719ec8ad-cf59-405a-9832-c4065945c130"}],"valueCodeableConcept":{"coding":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding","valueString":"coding"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system","valueString":"HL70136"}],"system":"http://terminology.hl7.org/ValueSet/v2-0136","code":"Y","display":"Yes"}]},"interpretation":[{"coding":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding","valueString":"coding"}]}]}],"method":{"coding":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding","valueString":"coding"}]}]}}},{"fullUrl":"Observation/a0ead307-da3e-3371-96e2-f6b15f80f6ac","resource":{"resourceType":"Observation","id":"a0ead307-da3e-3371-96e2-f6b15f80f6ac","meta":{"tag":[{"code":"AOE"}]},"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/obx-observation","extension":[{"url":"OBX.2","valueString":"CWE"},{"url":"OBX.11","valueString":"F"},{"url":"OBX.29","valueString":"QST"}]}],"identifier":[{"use":"official","type":{"coding":[{"system":"http://loinc.org","code":"81959-9","display":"Public health laboratory ask at order entry panel"}]}}],"status":"final","code":{"coding":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/condition-code","valueCoding":{"system":"ReportStream","code":"AOE","display":"Ask at order entry question"}},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/condition-code","valueCoding":{"system":"ReportStream","code":"AOE","display":"Ask at order entry question"}},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding","valueString":"coding"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system","valueString":"LN"}],"system":"http://loinc.org","version":"2.69","code":"95421-4","display":"Resides in a congregate care setting"}],"text":"Resides in a congregate care setting"},"subject":{"reference":"Patient/6b9b4aa8-f333-4ea5-8dfa-2a3cd6b4fd86"},"effectiveDateTime":"2024-08-26T22:25:30+00:00","_effectiveDateTime":{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2-date-time","valueDateTime":"2024-08-26T22:25:30+00:00"}]},"performer":[{"reference":"Organization/719ec8ad-cf59-405a-9832-c4065945c130"}],"valueCodeableConcept":{"coding":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding","valueString":"coding"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system","valueString":"HL70136"}],"system":"http://terminology.hl7.org/ValueSet/v2-0136","code":"N","display":"No"}]},"interpretation":[{"coding":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding","valueString":"coding"}]}]}],"method":{"coding":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding","valueString":"coding"}]}]}}},{"fullUrl":"Observation/51e39366-4c8d-3343-83ae-bc833d8aa0ed","resource":{"resourceType":"Observation","id":"51e39366-4c8d-3343-83ae-bc833d8aa0ed","meta":{"tag":[{"code":"AOE"}]},"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/obx-observation","extension":[{"url":"OBX.2","valueString":"CWE"},{"url":"OBX.11","valueString":"F"},{"url":"OBX.29","valueString":"QST"}]}],"identifier":[{"use":"official","type":{"coding":[{"system":"http://loinc.org","code":"81959-9","display":"Public health laboratory ask at order entry panel"}]}}],"status":"final","code":{"coding":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/condition-code","valueCoding":{"system":"ReportStream","code":"AOE","display":"Ask at order entry question"}},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding","valueString":"coding"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system","valueString":"LN"}],"system":"http://loinc.org","code":"76691-5","display":"Gender identity"}],"text":"Gender identity"},"subject":{"reference":"Patient/6b9b4aa8-f333-4ea5-8dfa-2a3cd6b4fd86"},"effectiveDateTime":"2024-08-26T22:25:30+00:00","_effectiveDateTime":{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2-date-time","valueDateTime":"2024-08-26T22:25:30+00:00"}]},"performer":[{"reference":"Organization/719ec8ad-cf59-405a-9832-c4065945c130"}],"valueCodeableConcept":{"coding":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding","valueString":"coding"},{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system","valueString":"SCT"}],"system":"http://snomed.info/sct","code":"446131000124102","display":"Non-binary gender identity"}]},"interpretation":[{"coding":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding","valueString":"coding"}]}]}],"method":{"coding":[{"extension":[{"url":"https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding","valueString":"coding"}]}]}}}]} \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/FHIR_to_HL7/mars_unwanted_condition_to_notes.hl7 b/prime-router/src/testIntegration/resources/datatests/FHIR_to_HL7/mars_unwanted_condition_to_notes.hl7 deleted file mode 100644 index 55972b4236c..00000000000 --- a/prime-router/src/testIntegration/resources/datatests/FHIR_to_HL7/mars_unwanted_condition_to_notes.hl7 +++ /dev/null @@ -1,15 +0,0 @@ -MSH|^~\&|CDC PRIME - Atlanta^2.16.840.1.114222.4.1.237821^ISO|Testing Lab^12D4567890^CLIA|||20240826224038+0000||ORU^R01^ORU_R01|ecfbc6c0-0c32-4cf8-adc2-9134281110d8|P|2.5.1|||NE|NE|USA|UNICODE UTF-8|ENG^English^ISO||PHLabReport-NoAck^ELR_Receiver^2.16.840.1.113883.9.11^ISO -SFT|Centers for Disease Control and Prevention|0.2-SNAPSHOT|PRIME ReportStream|0.2-SNAPSHOT||20240826161326+0000 -PID|1||6b9b4aa8-f333-4ea5-8dfa-2a3cd6b4fd86^^^Testing Lab&12D4567890&CLIA^PI^Testing Lab&12D4567890&CLIA||Kholin^Adolin^^^^^L||20031210|M||1002-5^native^^^^^2.5.1^^native|2251 Airport Rd^^Greenfield^IA^50849-8101^USA^^^Adair||(540) 867 5309^PRS^CP^^1^540^8675309^^^^^(540) 867 5309|||||||||N^Not Hispanic or Latino^HL70189^^^^2.9^^Not Hispanic or Latino||||||||N -ORC|RE|ecfbc6c0-0c32-4cf8-adc2-9134281110d8^Testing Lab^12D4567890^CLIA|ecfbc6c0-0c32-4cf8-adc2-9134281110d8^Testing Lab^12D4567890^CLIA|||||||||1245319599^McTester^Phil^^^^^^NPI&2.16.840.1.113883.4.6&ISO^L^^^NPI||(530) 867 5309^WPN^PH^^1^530^8675309^^^^^(530) 867 5309|20240826224030+0000||||||Testing Lab^L^^^^CLIA&2.16.840.1.113883.4.7&ISO^XX^^^12D4567890|123 Beach Way^^Denver^CO^80210^USA|(530) 867 5309^WPN^PH^^1^530^8675309^^^^^(530) 867 5309|321 Ocean Drive^^Denver^CO^80210^USA -OBR|1|ecfbc6c0-0c32-4cf8-adc2-9134281110d8^Testing Lab^12D4567890^CLIA|ecfbc6c0-0c32-4cf8-adc2-9134281110d8^Testing Lab^12D4567890^CLIA|97099-6^Influenza virus A and B and SARS-CoV-2 (COVID-19) Ag panel - Upper respiratory specimen by Rapid immunoassay^LN|||20240826222530+0000|||||||||1245319599^McTester^Phil^^^^^^NPI&2.16.840.1.113883.4.6&ISO^L^^^NPI|(530) 867 5309^WPN^PH^^1^530^8675309^^^^^(530) 867 5309|||||20240826224038+0000|||F -NTE|1||This is a note -NTE|2|O|OBX filtered for identifier = 80382-5 - Flu A; value = 260373001 - Detected. OBX was removed due to your jurisdictional reporting rules indicating this result is not reportable. -NTE|3|O|OBX filtered for identifier = 80383-3 - Flu B; value = 260415000 - Not detected. OBX was removed due to your jurisdictional reporting rules indicating this result is not reportable. -OBX|1|CWE|97097-0^SARS-CoV-2 (COVID-19) Ag [Presence] in Upper respiratory specimen by Rapid immunoassay^LN^^^^^^COVID-19||260373001^Detected^SCT|||A^Abnormal^HL70078^^^^2.7|||F|||20240826222530+0000|12D4567890^Testing Lab^CLIA||BD Veritor System for Rapid Detection of SARS-CoV-2 \T\ Flu A+B_Becton, Dickinson and Company (BD)^BD Veritor System for Rapid Detection of SARS-CoV-2 \T\ Flu A+B^^^^^^^BD Veritor System for Rapid Detection of SARS-CoV-2 \T\ Flu A+B_Becton, Dickinson and Company (BD)|BD Veritor Plus System_Becton Dickinson^^MNI|20240826224030+0000||||Testing Lab^L^^^^CLIA&2.16.840.1.113883.4.7&ISO^XX^^^12D4567890|123 Beach Way^^Denver^CO^80210^USA -OBX|2|CWE|95419-8^Has symptoms related to condition of interest^LN^^^^2.69^^Has symptoms related to condition of interest||N^No^HL70136|||^^^^^^2.7|||F|||20240826222530+0000|12D4567890^Testing Lab^CLIA||||||||Testing Lab^L^^^^CLIA&2.16.840.1.113883.4.7&ISO^XX^^^12D4567890|123 Beach Way^^Denver^CO^80210^USA|||||QST -OBX|3|CWE|82810-3^Pregnancy status^LN^^^^2.68^^Pregnancy status||60001007^Not pregnant^SCT|||^^^^^^2.7|||F|||20240826222530+0000|12D4567890^Testing Lab^CLIA||||||||Testing Lab^L^^^^CLIA&2.16.840.1.113883.4.7&ISO^XX^^^12D4567890|123 Beach Way^^Denver^CO^80210^USA|||||QST -OBX|4|CWE|95418-0^Employed in a healthcare setting^LN^^^^2.69^^Employed in a healthcare setting||Y^Yes^HL70136|||^^^^^^2.7|||F|||20240826222530+0000|12D4567890^Testing Lab^CLIA||||||||Testing Lab^L^^^^CLIA&2.16.840.1.113883.4.7&ISO^XX^^^12D4567890|123 Beach Way^^Denver^CO^80210^USA|||||QST -OBX|5|CWE|95421-4^Resides in a congregate care setting^LN^^^^2.69^^Resides in a congregate care setting||N^No^HL70136|||^^^^^^2.7|||F|||20240826222530+0000|12D4567890^Testing Lab^CLIA||||||||Testing Lab^L^^^^CLIA&2.16.840.1.113883.4.7&ISO^XX^^^12D4567890|123 Beach Way^^Denver^CO^80210^USA|||||QST -OBX|6|CWE|76691-5^Gender identity^LN^^^^^^Gender identity||446131000124102^Non-binary gender identity^SCT|||^^^^^^2.7|||F|||20240826222530+0000|12D4567890^Testing Lab^CLIA||||||||Testing Lab^L^^^^CLIA&2.16.840.1.113883.4.7&ISO^XX^^^12D4567890|123 Beach Way^^Denver^CO^80210^USA|||||QST -SPM|1|ecfbc6c0-0c32-4cf8-adc2-9134281110d8&Testing Lab&12D4567890&CLIA^ecfbc6c0-0c32-4cf8-adc2-9134281110d8&Testing Lab&12D4567890&CLIA||258500001^Nasopharyngeal swab^SCT^^^^2.67^^Nasopharyngeal swab||||87100004^Topography unknown (body structure)^SCT^^^^^^Topography unknown (body structure)|||||||||20240826222530+0000|20240826222530+0000 \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/FHIR_to_HL7/sample_NJ_20240719-0001.fhir b/prime-router/src/testIntegration/resources/datatests/FHIR_to_HL7/sample_NJ_20240719-0001.fhir deleted file mode 100644 index e78bc968699..00000000000 --- a/prime-router/src/testIntegration/resources/datatests/FHIR_to_HL7/sample_NJ_20240719-0001.fhir +++ /dev/null @@ -1 +0,0 @@ -{ "resourceType": "Bundle", "identifier": { "value": "3ad338c6-125d-4141-9ce1-6040481304ab" }, "type": "message", "timestamp": "2024-02-14T21:06:46.577Z", "entry": [ { "fullUrl": "MessageHeader/2a8ffce6-daa1-43e2-9236-e38bbb59892a", "resource": { "resourceType": "MessageHeader", "id": "2a8ffce6-daa1-43e2-9236-e38bbb59892a", "meta": { "tag": [ { "system": "http://terminology.hl7.org/CodeSystem/v2-0103", "code": "P", "display": "Production" } ] }, "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/msh-message-header", "extension": [ { "url": "MSH.15", "valueString": "NE" }, { "url": "MSH.16", "valueString": "NE" }, { "url": "MSH.19", "valueCodeableConcept": { "coding": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", "valueString": "coding" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", "valueString": "ISO" } ], "code": "ENG", "display": "English" } ] } }, { "url": "MSH.21", "valueIdentifier": { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority", "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", "valueString": "ELR_Receiver" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", "valueString": "2.16.840.1.113883.9.11" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", "valueString": "ISO" } ] } ], "value": "PHLabReport-NoAck" } }, { "url": "MSH.7", "valueInstant": "2024-02-14T21:06:46.577Z" } ] }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/character-set", "valueString": "UNICODE UTF-8" } ], "eventCoding": { "system": "http://terminology.hl7.org/CodeSystem/v2-0003", "code": "R01", "display": "ORU^R01^ORU_R01" }, "destination": [ { "name": "PRIME ReportStream", "endpoint": "https://prime.cdc.gov/api/reports?option=SkipInvalidItems" } ], "sender": { "reference": "Organization/719ec8ad-cf59-405a-9832-c4065945c130" }, "source": { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/software-binary-id", "valueString": "0.2-SNAPSHOT" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/software-install-date", "valueInstant": "2024-02-14T16:38:56Z" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/software-vendor-org", "valueReference": { "reference": "Organization/07640c5d-87cd-488b-9343-a226c5166539" } }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", "valueString": "CDC PRIME - Atlanta" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", "valueString": "2.16.840.1.114222.4.1.237821" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", "valueString": "ISO" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", "valueString": "MSH.3" } ], "name": "CDC PRIME - Atlanta: 2.16.840.1.114222.4.1.237821", "software": "PRIME ReportStream", "version": "0.2-SNAPSHOT", "endpoint": "urn:oid:2.16.840.1.114222.4.1.237821" }, "focus": [ { "reference": "Provenance/b344d9a8-399a-4607-b10e-9bf86f27a1bf" }, { "reference": "DiagnosticReport/3ad338c6-125d-4141-9ce1-6040481304ab" } ] } }, { "fullUrl": "Provenance/b344d9a8-399a-4607-b10e-9bf86f27a1bf", "resource": { "resourceType": "Provenance", "id": "b344d9a8-399a-4607-b10e-9bf86f27a1bf", "recorded": "2024-02-14T21:06:46.577Z", "activity": { "coding": [ { "system": "http://terminology.hl7.org/CodeSystem/v2-0003", "code": "R01", "display": "ORU/ACK - Unsolicited transmission of an observation message" } ] }, "agent": [ { "who": { "reference": "Organization/719ec8ad-cf59-405a-9832-c4065945c130" } } ] } }, { "fullUrl": "DiagnosticReport/3ad338c6-125d-4141-9ce1-6040481304ab", "resource": { "resourceType": "DiagnosticReport", "id": "3ad338c6-125d-4141-9ce1-6040481304ab", "identifier": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority", "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", "valueString": "Testing Lab" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", "valueString": "12D4567890" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", "valueCode": "CLIA" } ] }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", "valueString": "ORC.3" } ], "type": { "coding": [ { "code": "FILL" } ] }, "value": "3ad338c6-125d-4141-9ce1-6040481304ab" }, { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", "valueString": 123 }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority", "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", "valueString": "Testing Lab" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", "valueString": "12D4567890" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", "valueCode": "CLIA" } ] } ], "type": { "coding": [ { "system": "http://terminology.hl7.org/CodeSystem/v2-0203", "code": "PLAC" } ] }, "value": "3ad338c6-125d-4141-9ce1-6040481304ab" } ], "basedOn": [ { "reference": "ServiceRequest/c62aa5a7-4624-4b00-9ad6-e089c1aa29c5" } ], "status": "final", "code": { "coding": [ { "system": "http://loinc.org", "code": "95941-1" } ] }, "subject": { "reference": "Patient/3551359f-bd1c-411e-b930-789ac694e75f" }, "effectiveDateTime": "2024-02-14T20:51:46+00:00", "_effectiveDateTime": { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2-date-time", "valueDateTime": "2024-02-14T20:51:46+00:00" } ] }, "issued": "2024-02-14T21:06:46+00:00", "_issued": { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2-date-time", "valueInstant": "2024-02-14T21:06:46+00:00" } ] }, "specimen": [ { "reference": "Specimen/dc7af370-fc07-4b00-abc7-9b5dd87cf4d2" } ], "result": [ { "reference": "Observation/a8d3dfac-dd32-4e10-877b-407da556266e" }, { "reference": "Observation/06735b3b-a15d-4249-9ff6-6df8f7aab822" }, { "reference": "Observation/a6655d89-f7ea-4192-be69-92e772c4b8a6" } ] } }, { "fullUrl": "Patient/3551359f-bd1c-411e-b930-789ac694e75f", "resource": { "resourceType": "Patient", "id": "3551359f-bd1c-411e-b930-789ac694e75f", "extension": [ { "url": "http://ibm.com/fhir/cdm/StructureDefinition/local-race-cd", "valueCodeableConcept": { "coding": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", "valueString": "coding" } ], "system": "http://terminology.hl7.org/CodeSystem/v3-Race", "version": "2.5.1", "code": "2076-8", "display": "pacific" } ], "text": "pacific" } }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/ethnic-group", "valueCodeableConcept": { "coding": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", "valueString": "coding" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", "valueString": "HL70189" } ], "system": "http://terminology.hl7.org/CodeSystem/v2-0189", "version": "2.9", "code": "N", "display": "Not Hispanic or Latino" } ], "text": "Not Hispanic or Latino" } }, { "url": "https://hl7.org/fhir/R4/extension-patient-genderidentity.html", "valueCoding": { "system": "https://hl7.org/fhir/R4/valueset-gender-identity.html", "code": "male", "display": "male" } } ], "identifier": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", "valueString": "PID.3" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cx-identifier", "extension": [ { "url": "CX.5", "valueString": "PI" } ] }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-facility", "valueReference": { "reference": "Organization/719ec8ad-cf59-405a-9832-c4065945c130" } } ], "value": "3551359f-bd1c-411e-b930-789ac694e75f", "assigner": { "reference": "Organization/719ec8ad-cf59-405a-9832-c4065945c130" } } ], "name": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/xpn-human-name", "extension": [ { "url": "XPN.2", "valueString": "Cedrick" }, { "url": "XPN.3", "valueString": "Charles" } ] } ], "use": "official", "family": "Diggory", "given": [ "Cedrick", "Charles" ] } ], "telecom": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/xtn-contact-point", "extension": [ { "url": "XTN.1", "valueString": "(340) 555 5555" }, { "url": "XTN.2", "valueString": "PRS" }, { "url": "XTN.3", "valueString": "CP" }, { "url": "XTN.7", "valueInteger": 5555555 }, { "url": "XTN.12", "valueString": "(340) 555 5555" } ] }, { "url": "http://hl7.org/fhir/StructureDefinition/contactpoint-country", "valueInteger": 1 }, { "url": "http://hl7.org/fhir/StructureDefinition/contactpoint-area", "valueInteger": 340 } ], "system": "phone", "value": "(340) 555 5555", "use": "mobile" } ], "gender": "male", "birthDate": "2000-12-18", "deceasedBoolean": false, "address": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/xad-address", "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/sad-address-line", "extension": [ { "url": "SAD.1", "valueString": "123 Main St" } ] } ] } ], "line": [ "123 Main St" ], "city": "Anchorage", "district": "Anchorage", "state": "NJ", "postalCode": "99501", "country": "USA" } ], "managingOrganization": { "reference": "Organization/719ec8ad-cf59-405a-9832-c4065945c130" } } }, { "fullUrl": "Organization/719ec8ad-cf59-405a-9832-c4065945c130", "resource": { "resourceType": "Organization", "id": "719ec8ad-cf59-405a-9832-c4065945c130", "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/organization-name-type", "valueCoding": { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", "valueCodeableConcept": { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", "valueString": "XON.2" } ], "coding": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", "valueString": "coding" } ], "code": "L" } ] } } ], "code": "L" } }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", "valueString": "OBX.25" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", "valueString": "OBX.15" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-organization", "valueCodeableConcept": { "coding": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", "valueCode": "CLIA" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", "valueString": "coding" } ], "code": "12D4567890", "display": "Testing Lab" } ] } }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/xon-organization", "extension": [ { "url": "XON.10", "valueString": "12D4567890" } ] } ], "identifier": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", "valueString": "HD.2,HD.3" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority", "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", "valueString": "2.16.840.1.113883.4.7" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", "valueString": "ISO" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", "valueString": "CLIA" } ] }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/coding-system", "valueCodeableConcept": { "coding": [ { "code": "CLIA" } ] } } ], "use": "official", "type": { "coding": [ { "system": "http://terminology.hl7.org/CodeSystem/v2-0301", "code": "CLIA" } ] }, "value": "12D4567890" }, { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", "valueString": "HD.1" } ], "type": { "coding": [ { "system": "http://terminology.hl7.org/CodeSystem/v2-0203", "code": "XX" } ] }, "value": "Testing Lab" } ], "name": "Testing Lab", "telecom": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/xtn-contact-point", "extension": [ { "url": "XTN.1", "valueString": "(530) 867 5309" }, { "url": "XTN.2", "valueString": "WPN" }, { "url": "XTN.3", "valueString": "PH" }, { "url": "XTN.7", "valueInteger": 8675309 }, { "url": "XTN.12", "valueString": "(530) 867 5309" } ] }, { "url": "http://hl7.org/fhir/StructureDefinition/contactpoint-country", "valueInteger": 1 }, { "url": "http://hl7.org/fhir/StructureDefinition/contactpoint-area", "valueInteger": 530 } ], "system": "phone", "value": "(530) 867 5309", "use": "work" } ], "address": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/xad-address", "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/sad-address-line", "extension": [ { "url": "SAD.1", "valueString": "123 Beach Way" } ] } ] } ], "line": [ "123 Beach Way" ], "city": "Houston", "state": "NJ", "postalCode": "77001", "country": "USA" } ] } }, { "fullUrl": "Practitioner/ee29ccf5-631d-4b35-a6d4-30a61c0eb8d9", "resource": { "resourceType": "Practitioner", "id": "ee29ccf5-631d-4b35-a6d4-30a61c0eb8d9", "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/xcn-practitioner", "extension": [ { "url": "XCN.10", "valueString": "L" }, { "url": "XCN.3", "valueString": "Phil" } ] }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", "valueString": "ORC.12" } ], "identifier": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", "valueString": "NPI" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", "valueString": "urn:oid:2.16.840.1.113883.4.6" } ], "system": "http://hl7.org/fhir/sid/us-npi", "value": "1245319599" } ], "name": [ { "family": "McTester", "given": [ "Phil" ] } ], "telecom": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/xtn-contact-point", "extension": [ { "url": "XTN.1", "valueString": "(530) 867 5309" }, { "url": "XTN.2", "valueString": "WPN" }, { "url": "XTN.3", "valueString": "PH" }, { "url": "XTN.7", "valueInteger": 8675309 }, { "url": "XTN.12", "valueString": "(530) 867 5309" } ] }, { "url": "http://hl7.org/fhir/StructureDefinition/contactpoint-country", "valueInteger": 1 }, { "url": "http://hl7.org/fhir/StructureDefinition/contactpoint-area", "valueInteger": 530 }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", "valueString": "ORC.14" } ], "system": "phone", "value": "(530) 867 5309", "use": "work" } ], "address": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/xad-address", "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/sad-address-line", "extension": [ { "url": "SAD.1", "valueString": "321 Ocean Drive" } ] } ] } ], "line": [ "321 Ocean Drive" ], "city": "Houston", "state": "NJ", "postalCode": "77001", "country": "USA" } ] } }, { "fullUrl": "Specimen/dc7af370-fc07-4b00-abc7-9b5dd87cf4d2", "resource": { "resourceType": "Specimen", "id": "dc7af370-fc07-4b00-abc7-9b5dd87cf4d2", "identifier": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", "valueString": "Testing Lab" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", "valueString": "12D4567890" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", "valueCode": "CLIA" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Component", "valueString": "SPM.2.1" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/filler-assigned-identifier", "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/entity-identifier", "valueId": "3ad338c6-125d-4141-9ce1-6040481304ab" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", "valueString": "Testing Lab" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", "valueString": "12D4567890" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", "valueCode": "CLIA" } ] } ], "type": { "coding": [ { "system": "http://terminology.hl7.org/CodeSystem/v2-0203", "code": "PGN" } ] }, "value": "3ad338c6-125d-4141-9ce1-6040481304ab" } ], "type": { "coding": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", "valueString": "coding" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", "valueString": "SCT" } ], "system": "http://snomed.info/sct", "version": "2.67", "code": "258500001", "display": "Nasopharyngeal swab" } ], "text": "Nasopharyngeal swab" }, "subject": { "reference": "Patient/3551359f-bd1c-411e-b930-789ac694e75f" }, "receivedTime": "2024-02-14T20:51:46+00:00", "collection": { "collectedDateTime": "2024-02-14T20:51:46+00:00", "bodySite": { "coding": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", "valueString": "coding" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", "valueString": "SCT" } ], "system": "http://snomed.info/sct", "code": "87100004", "display": "Topography unknown (body structure)" } ], "text": "Topography unknown (body structure)" } } } }, { "fullUrl": "ServiceRequest/c62aa5a7-4624-4b00-9ad6-e089c1aa29c5", "resource": { "resourceType": "ServiceRequest", "id": "c62aa5a7-4624-4b00-9ad6-e089c1aa29c5", "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/order-control", "valueCodeableConcept": { "coding": [ { "system": "http://terminology.hl7.org/CodeSystem/v2-0119", "code": "RE" } ] } }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/order-effective-date", "valueDateTime": "2024-02-14T21:06:46+00:00" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/business-event", "valueCode": "RE" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/obr-observation-request", "extension": [ { "url": "OBR.2", "valueIdentifier": { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", "valueString": "ORC.2" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority", "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", "valueString": "Testing Lab" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", "valueString": "12D4567890" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", "valueCode": "CLIA" } ] } ], "type": { "coding": [ { "system": "http://terminology.hl7.org/CodeSystem/v2-0203", "code": "PLAC" } ] }, "value": "3ad338c6-125d-4141-9ce1-6040481304ab" } }, { "url": "OBR.3", "valueIdentifier": { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority", "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", "valueString": "Testing Lab" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", "valueString": "12D4567890" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", "valueCode": "CLIA" } ] }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", "valueString": "ORC.3" } ], "type": { "coding": [ { "code": "FILL" } ] }, "value": "3ad338c6-125d-4141-9ce1-6040481304ab" } }, { "url": "OBR.16", "valueReference": { "reference": "Practitioner/ee29ccf5-631d-4b35-a6d4-30a61c0eb8d9" } }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/callback-number", "valueContactPoint": { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/xtn-contact-point", "extension": [ { "url": "XTN.1", "valueString": "(530) 867 5309" }, { "url": "XTN.2", "valueString": "WPN" }, { "url": "XTN.3", "valueString": "PH" }, { "url": "XTN.7", "valueInteger": 8675309 }, { "url": "XTN.12", "valueString": "(530) 867 5309" } ] }, { "url": "http://hl7.org/fhir/StructureDefinition/contactpoint-country", "valueInteger": 1 }, { "url": "http://hl7.org/fhir/StructureDefinition/contactpoint-area", "valueInteger": 530 }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", "valueString": "ORC.14" } ], "system": "phone", "value": "(530) 867 5309", "use": "work" } } ] }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/orc-common-order", "extension": [ { "url": "ORC.15", "valueDateTime": "2024-02-14T21:06:46+00:00" } ] } ], "identifier": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", "valueString": "ORC.2" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority", "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", "valueString": "Testing Lab" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", "valueString": "12D4567890" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", "valueCode": "CLIA" } ] } ], "type": { "coding": [ { "system": "http://terminology.hl7.org/CodeSystem/v2-0203", "code": "PLAC" } ] }, "value": "3ad338c6-125d-4141-9ce1-6040481304ab" }, { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority", "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", "valueString": "Testing Lab" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", "valueString": "12D4567890" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", "valueCode": "CLIA" } ] }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", "valueString": "ORC.3" } ], "type": { "coding": [ { "code": "FILL" } ] }, "value": "3ad338c6-125d-4141-9ce1-6040481304ab" } ], "status": "completed", "intent": "order", "code": { "coding": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", "valueString": "coding" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", "valueString": "LN" } ], "system": "http://loinc.org", "code": "95941-1", "display": "Influenza virus A and B and SARS-CoV-2 (COVID-19) and Respiratory syncytial virus RNA panel - Respiratory system specimen by NAA with probe detection" } ] }, "subject": { "reference": "Patient/3551359f-bd1c-411e-b930-789ac694e75f" }, "requester": { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/callback-number", "valueContactPoint": { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/xtn-contact-point", "extension": [ { "url": "XTN.1", "valueString": "(530) 867 5309" }, { "url": "XTN.2", "valueString": "WPN" }, { "url": "XTN.3", "valueString": "PH" }, { "url": "XTN.7", "valueInteger": 8675309 }, { "url": "XTN.12", "valueString": "(530) 867 5309" } ] }, { "url": "http://hl7.org/fhir/StructureDefinition/contactpoint-country", "valueInteger": 1 }, { "url": "http://hl7.org/fhir/StructureDefinition/contactpoint-area", "valueInteger": 530 }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", "valueString": "ORC.14" } ], "system": "phone", "value": "(530) 867 5309", "use": "work" } } ], "reference": "PractitionerRole/d31bb3bb-3e5d-4bb3-ba73-13e5b2e96927" }, "performer": [ { "reference": "Organization/719ec8ad-cf59-405a-9832-c4065945c130" } ], "supportingInfo": [ { "reference": "Observation/81fd6b57-6808-32f6-b4e4-bdace1ea0e26" }, { "reference": "Observation/91dbef95-254a-3398-a8ee-c5eba59121b1" }, { "reference": "Observation/57f557ee-1009-397e-bae5-15d2cd3484fe" }, { "reference": "Observation/f186e153-e06a-32f1-b5f5-38be1fa13345" }, { "reference": "Observation/623a1a02-6925-3595-affd-271175822707" } ] } }, { "fullUrl": "Device/b83b1f5f-b62c-43aa-98f6-0ce34ab41927", "resource": { "resourceType": "Device", "id": "b83b1f5f-b62c-43aa-98f6-0ce34ab41927", "identifier": [ { "value": "00884999048034" }, { "type": { "coding": [ { "code": "DII" } ] } } ], "manufacturer": "Abbott", "deviceName": [ { "name": "Alinity m", "type": "model-name" } ] } }, { "fullUrl": "PractitionerRole/d31bb3bb-3e5d-4bb3-ba73-13e5b2e96927", "resource": { "resourceType": "PractitionerRole", "id": "d31bb3bb-3e5d-4bb3-ba73-13e5b2e96927", "practitioner": { "reference": "Practitioner/ee29ccf5-631d-4b35-a6d4-30a61c0eb8d9" }, "organization": { "reference": "Organization/719ec8ad-cf59-405a-9832-c4065945c130" } } }, { "fullUrl": "Organization/07640c5d-87cd-488b-9343-a226c5166539", "resource": { "resourceType": "Organization", "id": "07640c5d-87cd-488b-9343-a226c5166539", "name": "Centers for Disease Control and Prevention" } }, { "fullUrl": "Observation/a8d3dfac-dd32-4e10-877b-407da556266e", "resource": { "resourceType": "Observation", "id": "a8d3dfac-dd32-4e10-877b-407da556266e", "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/obx-observation", "extension": [ { "url": "OBX.2", "valueString": "CWE" }, { "url": "OBX.11", "valueString": "F" } ] }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/analysis-date-time", "valueInstant": "2024-02-14T21:06:46.490Z", "_valueInstant": { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2-date-time", "valueInstant": "2024-02-14T21:06:46.490Z" } ] } } ], "status": "final", "code": { "coding": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", "valueString": "coding" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", "valueString": "LN" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/condition-code", "valueCoding": { "system": "SNOMEDCT", "code": "55735004", "display": "Respiratory syncytial virus infection (disorder)" } } ], "system": "http://loinc.org", "code": "85479-4", "display": "Respiratory syncytial virus RNA [Presence] in Upper respiratory specimen by NAA with probe detection" } ], "text": "RSV" }, "subject": { "reference": "Patient/3551359f-bd1c-411e-b930-789ac694e75f" }, "effectiveDateTime": "2024-02-14T20:51:46+00:00", "_effectiveDateTime": { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2-date-time", "valueDateTime": "2024-02-14T20:51:46+00:00" } ] }, "issued": "2024-02-14T21:06:46.490Z", "performer": [ { "reference": "Organization/719ec8ad-cf59-405a-9832-c4065945c130" } ], "valueCodeableConcept": { "coding": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", "valueString": "coding" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", "valueString": "SCT" } ], "system": "http://snomed.info/sct", "code": "260373001", "display": "Detected" } ] }, "interpretation": [ { "coding": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", "valueString": "coding" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", "valueString": "HL70078" } ], "system": "http://terminology.hl7.org/CodeSystem/v2-0078", "version": "2.7", "code": "A", "display": "Abnormal" } ] } ], "method": { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/testkit-name-id", "valueCoding": { "code": "Alinity m Resp-4-Plex_Abbott Molecular Inc." } } ], "coding": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", "valueString": "coding" } ], "display": "Alinity m" } ] }, "specimen": { "reference": "Specimen/dc7af370-fc07-4b00-abc7-9b5dd87cf4d2" }, "device": { "reference": "Device/b83b1f5f-b62c-43aa-98f6-0ce34ab41927" } } }, { "fullUrl": "Observation/06735b3b-a15d-4249-9ff6-6df8f7aab822", "resource": { "resourceType": "Observation", "id": "06735b3b-a15d-4249-9ff6-6df8f7aab822", "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/obx-observation", "extension": [ { "url": "OBX.2", "valueString": "CWE" }, { "url": "OBX.11", "valueString": "F" } ] }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/analysis-date-time", "valueInstant": "2024-02-14T21:06:46.490Z", "_valueInstant": { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2-date-time", "valueInstant": "2024-02-14T21:06:46.490Z" } ] } } ], "status": "final", "code": { "coding": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", "valueString": "coding" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", "valueString": "LN" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/condition-code", "valueCoding": { "system": "SNOMEDCT", "code": "840539006", "display": "Disease caused by severe acute respiratory syndrome coronavirus 2 (disorder)" } } ], "system": "http://loinc.org", "code": "94500-6", "display": "SARS-CoV-2 (COVID-19) RNA [Presence] in Respiratory system specimen by NAA with probe detection" } ], "text": "COVID-19" }, "subject": { "reference": "Patient/3551359f-bd1c-411e-b930-789ac694e75f" }, "effectiveDateTime": "2024-02-14T20:51:46+00:00", "_effectiveDateTime": { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2-date-time", "valueDateTime": "2024-02-14T20:51:46+00:00" } ] }, "issued": "2024-02-14T21:06:46.490Z", "performer": [ { "reference": "Organization/719ec8ad-cf59-405a-9832-c4065945c130" } ], "valueCodeableConcept": { "coding": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", "valueString": "coding" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", "valueString": "SCT" } ], "system": "http://snomed.info/sct", "code": "260373001", "display": "Detected" } ] }, "interpretation": [ { "coding": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", "valueString": "coding" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", "valueString": "HL70078" } ], "system": "http://terminology.hl7.org/CodeSystem/v2-0078", "version": "2.7", "code": "A", "display": "Abnormal" } ] } ], "method": { "coding": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", "valueString": "coding" } ], "display": "Alinity m" } ] }, "specimen": { "reference": "Specimen/dc7af370-fc07-4b00-abc7-9b5dd87cf4d2" }, "device": { "reference": "Device/b83b1f5f-b62c-43aa-98f6-0ce34ab41927" } } }, { "fullUrl": "Observation/a6655d89-f7ea-4192-be69-92e772c4b8a6", "resource": { "resourceType": "Observation", "id": "a6655d89-f7ea-4192-be69-92e772c4b8a6", "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/obx-observation", "extension": [ { "url": "OBX.2", "valueString": "CWE" }, { "url": "OBX.11", "valueString": "F" } ] }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/analysis-date-time", "valueInstant": "2024-02-14T21:06:46.490Z", "_valueInstant": { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2-date-time", "valueInstant": "2024-02-14T21:06:46.490Z" } ] } } ], "status": "final", "code": { "coding": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", "valueString": "coding" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", "valueString": "LN" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/condition-code", "valueCoding": { "system": "SNOMEDCT", "code": "5.41E+14", "display": "Infection caused by novel Influenza A virus variant (disorder)" } } ], "system": "http://loinc.org", "code": "85478-6", "display": "Influenza virus B RNA [Presence] in Upper respiratory specimen by NAA with probe detection" } ], "text": "Flu B" }, "subject": { "reference": "Patient/3551359f-bd1c-411e-b930-789ac694e75f" }, "effectiveDateTime": "2024-02-14T20:51:46+00:00", "_effectiveDateTime": { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2-date-time", "valueDateTime": "2024-02-14T20:51:46+00:00" } ] }, "issued": "2024-02-14T21:06:46.490Z", "performer": [ { "reference": "Organization/719ec8ad-cf59-405a-9832-c4065945c130" } ], "valueCodeableConcept": { "coding": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", "valueString": "coding" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", "valueString": "SCT" } ], "system": "http://snomed.info/sct", "code": "260373001", "display": "Detected" } ] }, "interpretation": [ { "coding": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", "valueString": "coding" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", "valueString": "HL70078" } ], "system": "http://terminology.hl7.org/CodeSystem/v2-0078", "version": "2.7", "code": "A", "display": "Abnormal" } ] } ], "method": { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/testkit-name-id", "valueCoding": { "code": "Alinity m Resp-4-Plex_Abbott Molecular Inc." } } ], "coding": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", "valueString": "coding" } ], "display": "Alinity m" } ] }, "specimen": { "reference": "Specimen/dc7af370-fc07-4b00-abc7-9b5dd87cf4d2" }, "device": { "reference": "Device/b83b1f5f-b62c-43aa-98f6-0ce34ab41927" } } }, { "fullUrl": "Observation/81fd6b57-6808-32f6-b4e4-bdace1ea0e26", "resource": { "resourceType": "Observation", "id": "81fd6b57-6808-32f6-b4e4-bdace1ea0e26", "meta": { "tag": [ { "code": "AOE" } ] }, "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/obx-observation", "extension": [ { "url": "OBX.2", "valueString": "CWE" }, { "url": "OBX.11", "valueString": "F" } ] } ], "identifier": [ { "use": "official", "type": { "coding": [ { "system": "http://loinc.org", "code": "81959-9", "display": "Public health laboratory ask at order entry panel" } ] } } ], "status": "final", "code": { "coding": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", "valueString": "coding" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", "valueString": "LN" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/condition-code", "valueCoding": { "system": "ReportStream", "code": "AOE", "display": "Ask at order entry question" } } ], "system": "http://loinc.org", "version": "2.69", "code": "95419-8", "display": "Has symptoms related to condition of interest" } ], "text": "Has symptoms related to condition of interest" }, "subject": { "reference": "Patient/3551359f-bd1c-411e-b930-789ac694e75f" }, "effectiveDateTime": "2024-02-14T20:51:46+00:00", "_effectiveDateTime": { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2-date-time", "valueDateTime": "2024-02-14T20:51:46+00:00" } ] }, "performer": [ { "reference": "Organization/719ec8ad-cf59-405a-9832-c4065945c130" } ], "valueCodeableConcept": { "coding": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", "valueString": "coding" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", "valueString": "HL70136" } ], "system": "http://terminology.hl7.org/ValueSet/v2-0136", "code": "Y", "display": "Yes" } ] }, "interpretation": [ { "coding": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", "valueString": "coding" } ] } ] } ], "method": { "coding": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", "valueString": "coding" } ] } ] } } }, { "fullUrl": "Observation/91dbef95-254a-3398-a8ee-c5eba59121b1", "resource": { "resourceType": "Observation", "id": "91dbef95-254a-3398-a8ee-c5eba59121b1", "meta": { "tag": [ { "code": "AOE" } ] }, "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/obx-observation", "extension": [ { "url": "OBX.2", "valueString": "DT" }, { "url": "OBX.11", "valueString": "F" } ] } ], "identifier": [ { "use": "official", "type": { "coding": [ { "system": "http://loinc.org", "code": "81959-9", "display": "Public health laboratory ask at order entry panel" } ] } } ], "status": "final", "code": { "coding": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", "valueString": "coding" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", "valueString": "LN" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/condition-code", "valueCoding": { "system": "ReportStream", "code": "AOE", "display": "Ask at order entry question" } } ], "system": "http://loinc.org", "code": "11368-8", "display": "Illness or injury onset date and time" } ], "text": "Illness or injury onset date and time" }, "subject": { "reference": "Patient/3551359f-bd1c-411e-b930-789ac694e75f" }, "effectiveDateTime": "2024-02-14T20:51:46+00:00", "_effectiveDateTime": { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2-date-time", "valueDateTime": "2024-02-14T20:51:46+00:00" } ] }, "performer": [ { "reference": "Organization/719ec8ad-cf59-405a-9832-c4065945c130" } ], "valueDateTime": "2024-02-13", "_valueDateTime": { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2-date-time", "valueDateTime": "2024-02-13" } ] }, "interpretation": [ { "coding": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", "valueString": "coding" } ] } ] } ], "method": { "coding": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", "valueString": "coding" } ] } ] } } }, { "fullUrl": "Observation/57f557ee-1009-397e-bae5-15d2cd3484fe", "resource": { "resourceType": "Observation", "id": "57f557ee-1009-397e-bae5-15d2cd3484fe", "meta": { "tag": [ { "code": "AOE" } ] }, "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/obx-observation", "extension": [ { "url": "OBX.2", "valueString": "CWE" }, { "url": "OBX.11", "valueString": "F" } ] } ], "identifier": [ { "use": "official", "type": { "coding": [ { "system": "http://loinc.org", "code": "81959-9", "display": "Public health laboratory ask at order entry panel" } ] } } ], "status": "final", "code": { "coding": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", "valueString": "coding" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", "valueString": "LN" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/condition-code", "valueCoding": { "system": "ReportStream", "code": "AOE", "display": "Ask at order entry question" } } ], "system": "http://loinc.org", "version": "2.68", "code": "82810-3", "display": "Pregnancy status" } ], "text": "Pregnancy status" }, "subject": { "reference": "Patient/3551359f-bd1c-411e-b930-789ac694e75f" }, "effectiveDateTime": "2024-02-14T20:51:46+00:00", "_effectiveDateTime": { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2-date-time", "valueDateTime": "2024-02-14T20:51:46+00:00" } ] }, "performer": [ { "reference": "Organization/719ec8ad-cf59-405a-9832-c4065945c130" } ], "valueCodeableConcept": { "coding": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", "valueString": "coding" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", "valueString": "SCT" } ], "system": "http://snomed.info/sct", "code": "60001007", "display": "Not pregnant" } ] }, "interpretation": [ { "coding": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", "valueString": "coding" } ] } ] } ], "method": { "coding": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", "valueString": "coding" } ] } ] } } }, { "fullUrl": "Observation/f186e153-e06a-32f1-b5f5-38be1fa13345", "resource": { "resourceType": "Observation", "id": "f186e153-e06a-32f1-b5f5-38be1fa13345", "meta": { "tag": [ { "code": "AOE" } ] }, "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/obx-observation", "extension": [ { "url": "OBX.2", "valueString": "CWE" }, { "url": "OBX.11", "valueString": "F" } ] } ], "identifier": [ { "use": "official", "type": { "coding": [ { "system": "http://loinc.org", "code": "81959-9", "display": "Public health laboratory ask at order entry panel" } ] } } ], "status": "final", "code": { "coding": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", "valueString": "coding" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", "valueString": "LN" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/condition-code", "valueCoding": { "system": "ReportStream", "code": "AOE", "display": "Ask at order entry question" } } ], "system": "http://loinc.org", "version": "2.69", "code": "95418-0", "display": "Employed in a healthcare setting" } ], "text": "Employed in a healthcare setting" }, "subject": { "reference": "Patient/3551359f-bd1c-411e-b930-789ac694e75f" }, "effectiveDateTime": "2024-02-14T20:51:46+00:00", "_effectiveDateTime": { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2-date-time", "valueDateTime": "2024-02-14T20:51:46+00:00" } ] }, "performer": [ { "reference": "Organization/719ec8ad-cf59-405a-9832-c4065945c130" } ], "valueCodeableConcept": { "coding": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", "valueString": "coding" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", "valueString": "HL70136" } ], "system": "http://terminology.hl7.org/ValueSet/v2-0136", "code": "N", "display": "No" } ] }, "interpretation": [ { "coding": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", "valueString": "coding" } ] } ] } ], "method": { "coding": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", "valueString": "coding" } ] } ] } } }, { "fullUrl": "Observation/623a1a02-6925-3595-affd-271175822707", "resource": { "resourceType": "Observation", "id": "623a1a02-6925-3595-affd-271175822707", "meta": { "tag": [ { "code": "AOE" } ] }, "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/obx-observation", "extension": [ { "url": "OBX.2", "valueString": "CWE" }, { "url": "OBX.11", "valueString": "F" } ] } ], "identifier": [ { "use": "official", "type": { "coding": [ { "system": "http://loinc.org", "code": "81959-9", "display": "Public health laboratory ask at order entry panel" } ] } } ], "status": "final", "code": { "coding": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", "valueString": "coding" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", "valueString": "LN" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/condition-code", "valueCoding": { "system": "ReportStream", "code": "AOE", "display": "Ask at order entry question" } } ], "system": "http://loinc.org", "version": "2.69", "code": "95421-4", "display": "Resides in a congregate care setting" } ], "text": "Resides in a congregate care setting" }, "subject": { "reference": "Patient/3551359f-bd1c-411e-b930-789ac694e75f" }, "effectiveDateTime": "2024-02-14T20:51:46+00:00", "_effectiveDateTime": { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2-date-time", "valueDateTime": "2024-02-14T20:51:46+00:00" } ] }, "performer": [ { "reference": "Organization/719ec8ad-cf59-405a-9832-c4065945c130" } ], "valueCodeableConcept": { "coding": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", "valueString": "coding" }, { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", "valueString": "HL70136" } ], "system": "http://terminology.hl7.org/ValueSet/v2-0136", "code": "N", "display": "No" } ] }, "interpretation": [ { "coding": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", "valueString": "coding" } ] } ] } ], "method": { "coding": [ { "extension": [ { "url": "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", "valueString": "coding" } ] } ] } } } ] } \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/FHIR_to_HL7/sample_NJ_20240719-0001.hl7 b/prime-router/src/testIntegration/resources/datatests/FHIR_to_HL7/sample_NJ_20240719-0001.hl7 deleted file mode 100644 index 4110ce8f2f1..00000000000 --- a/prime-router/src/testIntegration/resources/datatests/FHIR_to_HL7/sample_NJ_20240719-0001.hl7 +++ /dev/null @@ -1,14 +0,0 @@ -MSH|^~\&|CDC PRIME - Atlanta,^2.16.840.1.114222.4.1.237821^ISO|CDC PRIME^11D2030855^CLIA|ELRS^2.16.840.1.113883.3.1299.5.1.6.1^ISO|NJDOH^2.16.840.1.113883.3.1299^ISO|20240214210646+0000||ORU^R01^ORU_R01|3ad338c6-125d-4141-9ce1-6040481304ab|P|2.5.1|||NE|NE|USA|UNICODE UTF-8|ENG^English^ISO||PHLabReport-NoAck^ELR_Receiver^2.16.840.1.113883.9.11^ISO -SFT|Centers for Disease Control and Prevention|0.2-SNAPSHOT|PRIME ReportStream|0.2-SNAPSHOT||20240214163856+0000 -PID|1||3551359f-bd1c-411e-b930-789ac694e75f^^^Testing Lab&12D4567890&CLIA^PI^Testing Lab&12D4567890&CLIA||Diggory^Cedrick^Charles^^^^L||20001218|M||2076-8^pacific^^^^^2.5.1^^pacific|123 Main St^^Anchorage^NJ^99501^USA^^^Anchorage||(340) 555 5555^PRS^CP^^1^340^5555555^^^^^(340) 555 5555|||||||||N^Not Hispanic or Latino^HL70189^^^^2.9^^Not Hispanic or Latino||||||||N -ORC|RE|3ad338c6-125d-4141-9ce1-6040481304ab^Testing Lab^12D4567890^CLIA|3ad338c6-125d-4141-9ce1-6040481304ab^Testing Lab^12D4567890^CLIA|||||||||1245319599^McTester^Phil^^^^^^NPI&2.16.840.1.113883.4.6&ISO^L^^^NPI||(530) 867 5309^WPN^PH^^1^530^8675309^^^^^(530) 867 5309|20240214210646+0000||||||Testing Lab^L^^^^CLIA&2.16.840.1.113883.4.7&ISO^XX^^^12D4567890|123 Beach Way^^Houston^NJ^77001^USA|(530) 867 5309^WPN^PH^^1^530^8675309^^^^^(530) 867 5309|321 Ocean Drive^^Houston^NJ^77001^USA -OBR|1|3ad338c6-125d-4141-9ce1-6040481304ab^Testing Lab^12D4567890^CLIA|3ad338c6-125d-4141-9ce1-6040481304ab^Testing Lab^12D4567890^CLIA|95941-1^Influenza virus A and B and SARS-CoV-2 (COVID-19) and Respiratory syncytial virus RNA panel - Respiratory system specimen by NAA with probe detection^LN|||20240214205146+0000|||||||||1245319599^McTester^Phil^^^^^^NPI&2.16.840.1.113883.4.6&ISO^L^^^NPI|(530) 867 5309^WPN^PH^^1^530^8675309^^^^^(530) 867 5309|||||20240214210646+0000|||F -OBX|1|CWE|85479-4^Respiratory syncytial virus RNA [Presence] in Upper respiratory specimen by NAA with probe detection^LN^^^^^^RSV||260373001^Detected^SCT|||A^Abnormal^HL70078^^^^2.7|||F|||20240214205146+0000|12D4567890^Testing Lab^CLIA||Alinity m Resp-4-Ple^Alinity m^^^^^^^Alinity m Resp-4-Plex_Abbott Molecular Inc.||20240214210646+0000||||Testing Lab^L^^^^CLIA&2.16.840.1.113883.4.7&ISO^XX^^^12D4567890|123 Beach Way^^Houston^NJ^77001^USA -OBX|2|CWE|94500-6^SARS-CoV-2 (COVID-19) RNA [Presence] in Respiratory system specimen by NAA with probe detection^LN^^^^^^COVID-19||260373001^Detected^SCT|||A^Abnormal^HL70078^^^^2.7|||F|||20240214205146+0000|12D4567890^Testing Lab^CLIA||^Alinity m||20240214210646+0000||||Testing Lab^L^^^^CLIA&2.16.840.1.113883.4.7&ISO^XX^^^12D4567890|123 Beach Way^^Houston^NJ^77001^USA -OBX|3|CWE|85478-6^Influenza virus B RNA [Presence] in Upper respiratory specimen by NAA with probe detection^LN^^^^^^Flu B||260373001^Detected^SCT|||A^Abnormal^HL70078^^^^2.7|||F|||20240214205146+0000|12D4567890^Testing Lab^CLIA||Alinity m Resp-4-Ple^Alinity m^^^^^^^Alinity m Resp-4-Plex_Abbott Molecular Inc.||20240214210646+0000||||Testing Lab^L^^^^CLIA&2.16.840.1.113883.4.7&ISO^XX^^^12D4567890|123 Beach Way^^Houston^NJ^77001^USA -OBX|4|CWE|95419-8^Has symptoms related to condition of interest^LN^^^^2.69^^Has symptoms related to condition of interest||Y^Yes^HL70136|||^^^^^^2.7|||F|||20240214205146+0000|12D4567890^Testing Lab^CLIA||||||||Testing Lab^L^^^^CLIA&2.16.840.1.113883.4.7&ISO^XX^^^12D4567890|123 Beach Way^^Houston^NJ^77001^USA|||||QST -OBX|5|DT|11368-8^Illness or injury onset date and time^LN^^^^^^Illness or injury onset date and time||20240213000000+0000|||^^^^^^2.7|||F|||20240214205146+0000|12D4567890^Testing Lab^CLIA||||||||Testing Lab^L^^^^CLIA&2.16.840.1.113883.4.7&ISO^XX^^^12D4567890|123 Beach Way^^Houston^NJ^77001^USA|||||QST -OBX|6|CWE|82810-3^Pregnancy status^LN^^^^2.68^^Pregnancy status||60001007^Not pregnant^SCT|||^^^^^^2.7|||F|||20240214205146+0000|12D4567890^Testing Lab^CLIA||||||||Testing Lab^L^^^^CLIA&2.16.840.1.113883.4.7&ISO^XX^^^12D4567890|123 Beach Way^^Houston^NJ^77001^USA|||||QST -OBX|7|CWE|95418-0^Employed in a healthcare setting^LN^^^^2.69^^Employed in a healthcare setting||N^No^HL70136|||^^^^^^2.7|||F|||20240214205146+0000|12D4567890^Testing Lab^CLIA||||||||Testing Lab^L^^^^CLIA&2.16.840.1.113883.4.7&ISO^XX^^^12D4567890|123 Beach Way^^Houston^NJ^77001^USA|||||QST -OBX|8|CWE|95421-4^Resides in a congregate care setting^LN^^^^2.69^^Resides in a congregate care setting||N^No^HL70136|||^^^^^^2.7|||F|||20240214205146+0000|12D4567890^Testing Lab^CLIA||||||||Testing Lab^L^^^^CLIA&2.16.840.1.113883.4.7&ISO^XX^^^12D4567890|123 Beach Way^^Houston^NJ^77001^USA|||||QST -SPM|1|3ad338c6-125d-4141-9ce1-6040481304ab&Testing Lab&12D4567890&CLIA^3ad338c6-125d-4141-9ce1-6040481304ab&Testing Lab&12D4567890&CLIA||258500001^Nasopharyngeal swab^SCT^^^^2.67^^Nasopharyngeal swab||||87100004^Topography unknown (body structure)^SCT^^^^^^Topography unknown (body structure)|||||||||20240214205146+0000|20240214205146+0000 diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cq/cq-to-quantity.fhir b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cq/cq-to-quantity.fhir new file mode 100644 index 00000000000..eb3f5decdbd --- /dev/null +++ b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cq/cq-to-quantity.fhir @@ -0,0 +1,259 @@ +{ + "resourceType" : "Bundle", + "id" : "1713403029141816000.d1ff92b0-51ab-4c76-84d1-de6aee6b66c4", + "meta" : { + "lastUpdated" : "2024-04-17T19:17:09.151-06:00" + }, + "identifier" : { + "system" : "https://reportstream.cdc.gov/prime-router", + "value" : "12345" + }, + "type" : "message", + "timestamp" : "2023-05-01T08:25:31.000-06:00", + "entry" : [ { + "fullUrl" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b", + "resource" : { + "resourceType" : "MessageHeader", + "id" : "827ccb0e-ea8a-306c-8c34-a16891f84e7b", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/encoding-characters", + "valueString" : "^~\\&#" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/character-set", + "valueString" : "UNICODE UTF-8" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/msh-message-header", + "extension" : [ { + "url" : "MSH.7", + "valueString" : "20230501102531-0400" + }, { + "url" : "MSH.10", + "valueString" : "12345" + } ] + } ], + "eventCoding" : { + "system" : "http://terminology.hl7.org/CodeSystem/v2-0003", + "code" : "R01", + "display" : "ORU^R01^ORU_R01" + }, + "sender" : { + "reference" : "Organization/1713403029242616000.10c1427f-969a-4ef8-88f0-cdacb885f392" + } + } + }, { + "fullUrl" : "Organization/1713403029242616000.10c1427f-969a-4ef8-88f0-cdacb885f392", + "resource" : { + "resourceType" : "Organization", + "id" : "1713403029242616000.10c1427f-969a-4ef8-88f0-cdacb885f392", + "address" : [ { + "country" : "USA" + } ] + } + }, { + "fullUrl" : "Provenance/1713403029775863000.7cb12d62-b747-49d8-a949-bdeac15f7a00", + "resource" : { + "resourceType" : "Provenance", + "id" : "1713403029775863000.7cb12d62-b747-49d8-a949-bdeac15f7a00", + "target" : [ { + "reference" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b" + }, { + "reference" : "DiagnosticReport/1713403030132492000.260ba99f-27ad-4e5a-a581-a84fb9a75e5c" + } ], + "recorded" : "2023-05-01T10:25:31-04:00", + "activity" : { + "coding" : [ { + "display" : "ORU^R01^ORU_R01" + } ] + } + } + }, { + "fullUrl" : "Provenance/1713403029790190000.3d26679e-e908-4f04-b7b0-81bb315e714e", + "resource" : { + "resourceType" : "Provenance", + "id" : "1713403029790190000.3d26679e-e908-4f04-b7b0-81bb315e714e", + "recorded" : "2024-04-17T19:17:09Z", + "policy" : [ "http://hl7.org/fhir/uv/v2mappings/message-oru-r01-to-bundle" ], + "activity" : { + "coding" : [ { + "code" : "v2-FHIR transformation" + } ] + }, + "agent" : [ { + "type" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/provenance-participant-type", + "code" : "assembler" + } ] + }, + "who" : { + "reference" : "Organization/1713403029788752000.9f7db772-7ff5-499d-b45b-d51faafe5bbc" + } + } ] + } + }, { + "fullUrl" : "Organization/1713403029788752000.9f7db772-7ff5-499d-b45b-d51faafe5bbc", + "resource" : { + "resourceType" : "Organization", + "id" : "1713403029788752000.9f7db772-7ff5-499d-b45b-d51faafe5bbc", + "identifier" : [ { + "value" : "CDC PRIME - Atlanta" + }, { + "type" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/v2-0301" + } ] + }, + "system" : "urn:ietf:rfc:3986", + "value" : "2.16.840.1.114222.4.1.237821" + } ] + } + }, { + "fullUrl" : "Patient/1713403029815669000.fbda1219-5e0b-4c16-b9a7-45b40e30b4ac", + "resource" : { + "resourceType" : "Patient", + "id" : "1713403029815669000.fbda1219-5e0b-4c16-b9a7-45b40e30b4ac" + } + }, { + "fullUrl" : "Provenance/1713403029816912000.d951d3ea-7ec1-48e3-b360-841b21872c90", + "resource" : { + "resourceType" : "Provenance", + "id" : "1713403029816912000.d951d3ea-7ec1-48e3-b360-841b21872c90", + "target" : [ { + "reference" : "Patient/1713403029815669000.fbda1219-5e0b-4c16-b9a7-45b40e30b4ac" + } ], + "recorded" : "2024-04-17T19:17:09Z", + "activity" : { + "coding" : [ { + "system" : "https://terminology.hl7.org/CodeSystem/v3-DataOperation", + "code" : "UPDATE" + } ] + } + } + }, { + "fullUrl" : "Specimen/1713403029819193000.539e1518-2f7a-4bfc-8ac1-a2435b39a705", + "resource" : { + "resourceType" : "Specimen", + "id" : "1713403029819193000.539e1518-2f7a-4bfc-8ac1-a2435b39a705", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Segment", + "valueString" : "OBR" + } ] + } + }, { + "fullUrl" : "Specimen/1713403030109000000.b832f4a5-5538-4472-a97d-15354b755333", + "resource" : { + "resourceType" : "Specimen", + "id" : "1713403030109000000.b832f4a5-5538-4472-a97d-15354b755333", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Segment", + "valueString" : "SPM" + } ], + "collection" : { + "quantity" : { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cq-units", + "valueCodeableConcept" : { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/coding-system-oid", + "valueOid" : "urn:oid:TEST1234" + } ], + "coding" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", + "valueString" : "coding" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", + "valueString" : "LN" + } ], + "system" : "http://loinc.org", + "version" : "PrimaryVersion", + "code" : "PrimaryCode", + "display" : "Primary Code Display" + }, { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", + "valueString" : "secondary-alt-coding" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", + "valueString" : "L" + } ], + "system" : "https://terminology.hl7.org/CodeSystem-v2-0396.html#v2-0396-99zzzorL", + "version" : "SecondaryAltVersion", + "code" : "SecondaryAltCode", + "display" : "SecondaryAltText" + }, { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", + "valueString" : "alt-coding" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", + "valueString" : "L" + } ], + "system" : "https://terminology.hl7.org/CodeSystem-v2-0396.html#v2-0396-99zzzorL", + "version" : "AltVersion", + "code" : "AltCode", + "display" : "AltText" + } ], + "text" : "OriginalText" + } + } ], + "value" : 1, + "unit" : "OriginalText" + } + } + } + }, { + "fullUrl" : "ServiceRequest/1713403030125371000.27df5449-e8c3-4686-8f21-4cec242d3fb6", + "resource" : { + "resourceType" : "ServiceRequest", + "id" : "1713403030125371000.27df5449-e8c3-4686-8f21-4cec242d3fb6", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/obr-observation-request", + "extension" : [ { + "url" : "OBR.25", + "valueId" : "F" + } ] + } ], + "status" : "unknown", + "code" : { + "coding" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", + "valueString" : "coding" + } ], + "code" : "TEST" + } ] + }, + "subject" : { + "reference" : "Patient/1713403029815669000.fbda1219-5e0b-4c16-b9a7-45b40e30b4ac" + } + } + }, { + "fullUrl" : "DiagnosticReport/1713403030132492000.260ba99f-27ad-4e5a-a581-a84fb9a75e5c", + "resource" : { + "resourceType" : "DiagnosticReport", + "id" : "1713403030132492000.260ba99f-27ad-4e5a-a581-a84fb9a75e5c", + "basedOn" : [ { + "reference" : "ServiceRequest/1713403030125371000.27df5449-e8c3-4686-8f21-4cec242d3fb6" + } ], + "status" : "final", + "code" : { + "coding" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", + "valueString" : "coding" + } ], + "code" : "TEST" + } ] + }, + "subject" : { + "reference" : "Patient/1713403029815669000.fbda1219-5e0b-4c16-b9a7-45b40e30b4ac" + }, + "specimen" : [ { + "reference" : "Specimen/1713403030109000000.b832f4a5-5538-4472-a97d-15354b755333" + }, { + "reference" : "Specimen/1713403029819193000.539e1518-2f7a-4bfc-8ac1-a2435b39a705" + } ] + } + } ] +} \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cq/cq-to-quantity.hl7 b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cq/cq-to-quantity.hl7 new file mode 100644 index 00000000000..77ebe056c3b --- /dev/null +++ b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cq/cq-to-quantity.hl7 @@ -0,0 +1,4 @@ +MSH|^~\&#|||||20230501102531-0400||ORU^R01^ORU_R01|12345||2.5.1|||||USA|UNICODE UTF-8 +PID|1 +OBR|1|||TEST|||||||||||||||||||||F +SPM|1|||||||||||1^PrimaryCode&Primary Code Display&LN&AltCode&AltText&L&PrimaryVersion&AltVersion&OriginalText&SecondaryAltCode&SecondaryAltText&L&SecondaryAltVersion&TEST1234 \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/CWE-to-CodeableConcept.csv b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/CWE-to-CodeableConcept.csv new file mode 100644 index 00000000000..851665d6c57 --- /dev/null +++ b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/CWE-to-CodeableConcept.csv @@ -0,0 +1,25 @@ +HL7 v2,,,,,,Condition (IF True),,,HL7 FHIR,,,,,,,,,Comments +Sort Order,Identifier,Name,Data Type,Cardinality - Min,Cardinality - Max,Computable ANTLR,Computable FHIRPath,Narrative,FHIR Attribute/ Data Type,,Data Type,Cardinality - Min,Cardinality - Max,Data Type Mapping,"Vocabulary Mapping +(IS, ID, CE, CNE, CWE)",Assignment,, +1,CWE.1,Identifier,ST,0,1,,,"If mapped to FHIR, use Code System and Display",coding[1].code,,code,0,1,,,,, +2,CWE.2,Text,ST,0,1,,,,coding[1].display,,string,0,1,,,,, +3,CWE.3,Name of Coding System,ID,0,1,,,,coding[1].system,,uri,0,1,,,,,This is only an indirect mapping in that the vocabulary table will give the actual uri. +4,CWE.4,Alternate Identifier,ST,0,1,,,,coding[2].code,,code,0,1,,,,, +5,CWE.5,Alternate Text,ST,0,1,,,,coding[2].display,,string,0,1,,,,, +6,CWE.6,Name of Alternate Coding System,ID,0,1,,,,coding[2].system,,uri,0,1,,,,,This is only an indirect mapping in that the vocabulary table will give the actual uri +7,CWE.7,Coding System Version ID,ST,0,1,,,,coding[1].version,,string,0,1,,,,, +8,CWE.8,Alternate Coding System Version ID,ST,0,1,,,,coding[2].version,,string,0,1,,,,, +9,CWE.9,Original Text,ST,0,1,,,,text,,string,0,1,,,,, +10,CWE.10,Second Alternate Identifier,ST,0,1,,,,coding[3].code,,code,0,1,,,,, +11,CWE.11,Second Alternate Text,ST,0,1,,,,coding[3].display,,string,0,1,,,,, +12,CWE.12,Name of Second Alternate Coding System,ID,0,1,,,,coding[3].system,,uri,0,1,,,,, +13,CWE.13,Second Alternate Coding System Version ID,ST,0,1,,,,coding[3].version,,string,0,1,,,,,This is only an indirect mapping in that the vocabulary table will give the actual uri. +14,CWE.14,Coding System OID,ST,0,1,,,,,,,,,,,,, +15,CWE.15,Value Set OID,ST,0,1,,,,,,,,,,,,, +16,CWE.16,Value Set Version ID,DTM,0,1,,,,,,,,,,,,, +17,CWE.17,Alternate Coding System OID,ST,0,1,,,,,,,,,,,,, +18,CWE.18,Alternate Value Set OID,ST,0,1,,,,,,,,,,,,, +19,CWE.19,Alternate Value Set Version ID,DTM,0,1,,,,,,,,,,,,, +20,CWE.20,Second Alternate Coding System OID,ST,0,1,,,,,,,,,,,,, +21,CWE.21,Second Alternate Value Set OID,ST,0,1,,,,,,,,,,,,, +22,CWE.22,Second Alternate Value Set Version ID,DTM,0,1,,,,,,,,,,,,, \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-10-test-value-cwe8.fhir b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-10-test-value-cwe8.fhir new file mode 100644 index 00000000000..15292f52dd4 --- /dev/null +++ b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-10-test-value-cwe8.fhir @@ -0,0 +1,143 @@ +{ + "resourceType" : "Bundle", + "id" : "1713403200456908000.a3e6fb64-ecd0-45cd-bbaa-0542fe3e3d4f", + "meta" : { + "lastUpdated" : "2024-04-17T19:20:00.466-06:00" + }, + "identifier" : { + "system" : "https://reportstream.cdc.gov/prime-router", + "value" : "12345" + }, + "type" : "message", + "timestamp" : "2023-05-01T08:25:31.000-06:00", + "entry" : [ { + "fullUrl" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b", + "resource" : { + "resourceType" : "MessageHeader", + "id" : "827ccb0e-ea8a-306c-8c34-a16891f84e7b", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/encoding-characters", + "valueString" : "^~\\&#" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/character-set", + "valueString" : "UNICODE UTF-8" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/msh-message-header", + "extension" : [ { + "url" : "MSH.7", + "valueString" : "20230501102531-0400" + }, { + "url" : "MSH.10", + "valueString" : "12345" + } ] + } ], + "eventCoding" : { + "system" : "http://terminology.hl7.org/CodeSystem/v2-0003", + "code" : "R01", + "display" : "ORU^R01^ORU_R01" + }, + "sender" : { + "reference" : "Organization/1713403200559851000.8d9c7bf0-5a61-40fb-8c02-e9b5377157fb" + } + } + }, { + "fullUrl" : "Organization/1713403200559851000.8d9c7bf0-5a61-40fb-8c02-e9b5377157fb", + "resource" : { + "resourceType" : "Organization", + "id" : "1713403200559851000.8d9c7bf0-5a61-40fb-8c02-e9b5377157fb", + "address" : [ { + "country" : "USA" + } ] + } + }, { + "fullUrl" : "Provenance/1713403201074832000.5df2c9b6-efc7-4e25-93aa-05b827b639b8", + "resource" : { + "resourceType" : "Provenance", + "id" : "1713403201074832000.5df2c9b6-efc7-4e25-93aa-05b827b639b8", + "target" : [ { + "reference" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b" + } ], + "recorded" : "2023-05-01T10:25:31-04:00", + "activity" : { + "coding" : [ { + "display" : "ORU^R01^ORU_R01" + } ] + } + } + }, { + "fullUrl" : "Provenance/1713403201087347000.d5d5300a-5a81-413a-9dfe-2a3357800a45", + "resource" : { + "resourceType" : "Provenance", + "id" : "1713403201087347000.d5d5300a-5a81-413a-9dfe-2a3357800a45", + "recorded" : "2024-04-17T19:20:01Z", + "policy" : [ "http://hl7.org/fhir/uv/v2mappings/message-oru-r01-to-bundle" ], + "activity" : { + "coding" : [ { + "code" : "v2-FHIR transformation" + } ] + }, + "agent" : [ { + "type" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/provenance-participant-type", + "code" : "assembler" + } ] + }, + "who" : { + "reference" : "Organization/1713403201086319000.b914c2fb-1d32-4a73-8f31-02159bfb22cb" + } + } ] + } + }, { + "fullUrl" : "Organization/1713403201086319000.b914c2fb-1d32-4a73-8f31-02159bfb22cb", + "resource" : { + "resourceType" : "Organization", + "id" : "1713403201086319000.b914c2fb-1d32-4a73-8f31-02159bfb22cb", + "identifier" : [ { + "value" : "CDC PRIME - Atlanta" + }, { + "type" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/v2-0301" + } ] + }, + "system" : "urn:ietf:rfc:3986", + "value" : "2.16.840.1.114222.4.1.237821" + } ] + } + }, { + "fullUrl" : "Patient/1713403201112944000.aa776c63-0d50-4202-9ccf-961a873229e6", + "resource" : { + "resourceType" : "Patient", + "id" : "1713403201112944000.aa776c63-0d50-4202-9ccf-961a873229e6", + "extension" : [ { + "url" : "http://ibm.com/fhir/cdm/StructureDefinition/local-race-cd", + "valueCodeableConcept" : { + "coding" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", + "valueString" : "alt-coding" + } ], + "version" : "AltVersion" + } ] + } + } ] + } + }, { + "fullUrl" : "Provenance/1713403201114667000.02154068-dc9b-48ac-af0a-105a107febd5", + "resource" : { + "resourceType" : "Provenance", + "id" : "1713403201114667000.02154068-dc9b-48ac-af0a-105a107febd5", + "target" : [ { + "reference" : "Patient/1713403201112944000.aa776c63-0d50-4202-9ccf-961a873229e6" + } ], + "recorded" : "2024-04-17T19:20:01Z", + "activity" : { + "coding" : [ { + "system" : "https://terminology.hl7.org/CodeSystem/v3-DataOperation", + "code" : "UPDATE" + } ] + } + } + } ] +} \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-10-test-value-cwe8.hl7 b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-10-test-value-cwe8.hl7 new file mode 100644 index 00000000000..ed304d5183d --- /dev/null +++ b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-10-test-value-cwe8.hl7 @@ -0,0 +1,2 @@ +MSH|^~\&#|||||20230501102531-0400||ORU^R01^ORU_R01|12345||2.5.1|||||USA|UNICODE UTF-8 +PID|1|||||||||^^^^^^^AltVersion \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-11-test-value-cwe9.fhir b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-11-test-value-cwe9.fhir new file mode 100644 index 00000000000..4589805e1c8 --- /dev/null +++ b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-11-test-value-cwe9.fhir @@ -0,0 +1,137 @@ +{ + "resourceType" : "Bundle", + "id" : "1713403220122904000.f8bd4094-3752-4a19-aeee-f19b3472c4ba", + "meta" : { + "lastUpdated" : "2024-04-17T19:20:20.133-06:00" + }, + "identifier" : { + "system" : "https://reportstream.cdc.gov/prime-router", + "value" : "12345" + }, + "type" : "message", + "timestamp" : "2023-05-01T08:25:31.000-06:00", + "entry" : [ { + "fullUrl" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b", + "resource" : { + "resourceType" : "MessageHeader", + "id" : "827ccb0e-ea8a-306c-8c34-a16891f84e7b", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/encoding-characters", + "valueString" : "^~\\&#" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/character-set", + "valueString" : "UNICODE UTF-8" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/msh-message-header", + "extension" : [ { + "url" : "MSH.7", + "valueString" : "20230501102531-0400" + }, { + "url" : "MSH.10", + "valueString" : "12345" + } ] + } ], + "eventCoding" : { + "system" : "http://terminology.hl7.org/CodeSystem/v2-0003", + "code" : "R01", + "display" : "ORU^R01^ORU_R01" + }, + "sender" : { + "reference" : "Organization/1713403220231429000.933b17a3-378f-4d34-89c9-47865edd1c37" + } + } + }, { + "fullUrl" : "Organization/1713403220231429000.933b17a3-378f-4d34-89c9-47865edd1c37", + "resource" : { + "resourceType" : "Organization", + "id" : "1713403220231429000.933b17a3-378f-4d34-89c9-47865edd1c37", + "address" : [ { + "country" : "USA" + } ] + } + }, { + "fullUrl" : "Provenance/1713403220766953000.e8cadaec-d3df-45b4-8ccd-3aafd77cb739", + "resource" : { + "resourceType" : "Provenance", + "id" : "1713403220766953000.e8cadaec-d3df-45b4-8ccd-3aafd77cb739", + "target" : [ { + "reference" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b" + } ], + "recorded" : "2023-05-01T10:25:31-04:00", + "activity" : { + "coding" : [ { + "display" : "ORU^R01^ORU_R01" + } ] + } + } + }, { + "fullUrl" : "Provenance/1713403220779417000.66b6b06d-0f77-47f7-baef-8fa57da1dc06", + "resource" : { + "resourceType" : "Provenance", + "id" : "1713403220779417000.66b6b06d-0f77-47f7-baef-8fa57da1dc06", + "recorded" : "2024-04-17T19:20:20Z", + "policy" : [ "http://hl7.org/fhir/uv/v2mappings/message-oru-r01-to-bundle" ], + "activity" : { + "coding" : [ { + "code" : "v2-FHIR transformation" + } ] + }, + "agent" : [ { + "type" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/provenance-participant-type", + "code" : "assembler" + } ] + }, + "who" : { + "reference" : "Organization/1713403220778417000.6f9261db-c196-4d12-b7d5-8936aec5932f" + } + } ] + } + }, { + "fullUrl" : "Organization/1713403220778417000.6f9261db-c196-4d12-b7d5-8936aec5932f", + "resource" : { + "resourceType" : "Organization", + "id" : "1713403220778417000.6f9261db-c196-4d12-b7d5-8936aec5932f", + "identifier" : [ { + "value" : "CDC PRIME - Atlanta" + }, { + "type" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/v2-0301" + } ] + }, + "system" : "urn:ietf:rfc:3986", + "value" : "2.16.840.1.114222.4.1.237821" + } ] + } + }, { + "fullUrl" : "Patient/1713403220801742000.0a696b9d-41c0-4ab6-821a-d6524f9c697a", + "resource" : { + "resourceType" : "Patient", + "id" : "1713403220801742000.0a696b9d-41c0-4ab6-821a-d6524f9c697a", + "extension" : [ { + "url" : "http://ibm.com/fhir/cdm/StructureDefinition/local-race-cd", + "valueCodeableConcept" : { + "text" : "OriginalText" + } + } ] + } + }, { + "fullUrl" : "Provenance/1713403220802992000.d4f67c35-19cb-452a-9c40-9d43ec969499", + "resource" : { + "resourceType" : "Provenance", + "id" : "1713403220802992000.d4f67c35-19cb-452a-9c40-9d43ec969499", + "target" : [ { + "reference" : "Patient/1713403220801742000.0a696b9d-41c0-4ab6-821a-d6524f9c697a" + } ], + "recorded" : "2024-04-17T19:20:20Z", + "activity" : { + "coding" : [ { + "system" : "https://terminology.hl7.org/CodeSystem/v3-DataOperation", + "code" : "UPDATE" + } ] + } + } + } ] +} \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-11-test-value-cwe9.hl7 b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-11-test-value-cwe9.hl7 new file mode 100644 index 00000000000..38c215f4fa3 --- /dev/null +++ b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-11-test-value-cwe9.hl7 @@ -0,0 +1,2 @@ +MSH|^~\&#|||||20230501102531-0400||ORU^R01^ORU_R01|12345||2.5.1|||||USA|UNICODE UTF-8 +PID|1|||||||||^^^^^^^^OriginalText \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-12-test-value-cwe10.fhir b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-12-test-value-cwe10.fhir new file mode 100644 index 00000000000..3feeb9d12a7 --- /dev/null +++ b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-12-test-value-cwe10.fhir @@ -0,0 +1,143 @@ +{ + "resourceType" : "Bundle", + "id" : "1713403238639454000.785747c6-2555-421d-a676-e0f8cce8ba95", + "meta" : { + "lastUpdated" : "2024-04-17T19:20:38.649-06:00" + }, + "identifier" : { + "system" : "https://reportstream.cdc.gov/prime-router", + "value" : "12345" + }, + "type" : "message", + "timestamp" : "2023-05-01T08:25:31.000-06:00", + "entry" : [ { + "fullUrl" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b", + "resource" : { + "resourceType" : "MessageHeader", + "id" : "827ccb0e-ea8a-306c-8c34-a16891f84e7b", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/encoding-characters", + "valueString" : "^~\\&#" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/character-set", + "valueString" : "UNICODE UTF-8" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/msh-message-header", + "extension" : [ { + "url" : "MSH.7", + "valueString" : "20230501102531-0400" + }, { + "url" : "MSH.10", + "valueString" : "12345" + } ] + } ], + "eventCoding" : { + "system" : "http://terminology.hl7.org/CodeSystem/v2-0003", + "code" : "R01", + "display" : "ORU^R01^ORU_R01" + }, + "sender" : { + "reference" : "Organization/1713403238744562000.a7a8c8d6-2fd5-484d-9a85-b290817235f7" + } + } + }, { + "fullUrl" : "Organization/1713403238744562000.a7a8c8d6-2fd5-484d-9a85-b290817235f7", + "resource" : { + "resourceType" : "Organization", + "id" : "1713403238744562000.a7a8c8d6-2fd5-484d-9a85-b290817235f7", + "address" : [ { + "country" : "USA" + } ] + } + }, { + "fullUrl" : "Provenance/1713403239274942000.35993555-b3f1-4f19-867a-2d7e4670e81e", + "resource" : { + "resourceType" : "Provenance", + "id" : "1713403239274942000.35993555-b3f1-4f19-867a-2d7e4670e81e", + "target" : [ { + "reference" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b" + } ], + "recorded" : "2023-05-01T10:25:31-04:00", + "activity" : { + "coding" : [ { + "display" : "ORU^R01^ORU_R01" + } ] + } + } + }, { + "fullUrl" : "Provenance/1713403239286222000.50ec95aa-c3b8-47de-9ad5-f6f1a60ac070", + "resource" : { + "resourceType" : "Provenance", + "id" : "1713403239286222000.50ec95aa-c3b8-47de-9ad5-f6f1a60ac070", + "recorded" : "2024-04-17T19:20:39Z", + "policy" : [ "http://hl7.org/fhir/uv/v2mappings/message-oru-r01-to-bundle" ], + "activity" : { + "coding" : [ { + "code" : "v2-FHIR transformation" + } ] + }, + "agent" : [ { + "type" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/provenance-participant-type", + "code" : "assembler" + } ] + }, + "who" : { + "reference" : "Organization/1713403239285198000.ee23f116-7270-4103-aa59-299b6504c314" + } + } ] + } + }, { + "fullUrl" : "Organization/1713403239285198000.ee23f116-7270-4103-aa59-299b6504c314", + "resource" : { + "resourceType" : "Organization", + "id" : "1713403239285198000.ee23f116-7270-4103-aa59-299b6504c314", + "identifier" : [ { + "value" : "CDC PRIME - Atlanta" + }, { + "type" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/v2-0301" + } ] + }, + "system" : "urn:ietf:rfc:3986", + "value" : "2.16.840.1.114222.4.1.237821" + } ] + } + }, { + "fullUrl" : "Patient/1713403239308132000.85a8f511-f905-4ace-ac0b-95d9641b5b34", + "resource" : { + "resourceType" : "Patient", + "id" : "1713403239308132000.85a8f511-f905-4ace-ac0b-95d9641b5b34", + "extension" : [ { + "url" : "http://ibm.com/fhir/cdm/StructureDefinition/local-race-cd", + "valueCodeableConcept" : { + "coding" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", + "valueString" : "secondary-alt-coding" + } ], + "code" : "SecondaryAltCode" + } ] + } + } ] + } + }, { + "fullUrl" : "Provenance/1713403239309723000.0861eb88-cbc4-49a7-a737-ae7331354d86", + "resource" : { + "resourceType" : "Provenance", + "id" : "1713403239309723000.0861eb88-cbc4-49a7-a737-ae7331354d86", + "target" : [ { + "reference" : "Patient/1713403239308132000.85a8f511-f905-4ace-ac0b-95d9641b5b34" + } ], + "recorded" : "2024-04-17T19:20:39Z", + "activity" : { + "coding" : [ { + "system" : "https://terminology.hl7.org/CodeSystem/v3-DataOperation", + "code" : "UPDATE" + } ] + } + } + } ] +} \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-12-test-value-cwe10.hl7 b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-12-test-value-cwe10.hl7 new file mode 100644 index 00000000000..4341d2830be --- /dev/null +++ b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-12-test-value-cwe10.hl7 @@ -0,0 +1,2 @@ +MSH|^~\&#|||||20230501102531-0400||ORU^R01^ORU_R01|12345||2.5.1|||||USA|UNICODE UTF-8 +PID|1|||||||||^^^^^^^^^SecondaryAltCode \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-13-test-value-cwe11.fhir b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-13-test-value-cwe11.fhir new file mode 100644 index 00000000000..95f11db186a --- /dev/null +++ b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-13-test-value-cwe11.fhir @@ -0,0 +1,143 @@ +{ + "resourceType" : "Bundle", + "id" : "1713403256912019000.b65b8407-cf06-483a-97eb-219c7bf218f5", + "meta" : { + "lastUpdated" : "2024-04-17T19:20:56.921-06:00" + }, + "identifier" : { + "system" : "https://reportstream.cdc.gov/prime-router", + "value" : "12345" + }, + "type" : "message", + "timestamp" : "2023-05-01T08:25:31.000-06:00", + "entry" : [ { + "fullUrl" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b", + "resource" : { + "resourceType" : "MessageHeader", + "id" : "827ccb0e-ea8a-306c-8c34-a16891f84e7b", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/encoding-characters", + "valueString" : "^~\\&#" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/character-set", + "valueString" : "UNICODE UTF-8" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/msh-message-header", + "extension" : [ { + "url" : "MSH.7", + "valueString" : "20230501102531-0400" + }, { + "url" : "MSH.10", + "valueString" : "12345" + } ] + } ], + "eventCoding" : { + "system" : "http://terminology.hl7.org/CodeSystem/v2-0003", + "code" : "R01", + "display" : "ORU^R01^ORU_R01" + }, + "sender" : { + "reference" : "Organization/1713403257012157000.4e32c868-ee2f-457d-aeb9-688e8ff28487" + } + } + }, { + "fullUrl" : "Organization/1713403257012157000.4e32c868-ee2f-457d-aeb9-688e8ff28487", + "resource" : { + "resourceType" : "Organization", + "id" : "1713403257012157000.4e32c868-ee2f-457d-aeb9-688e8ff28487", + "address" : [ { + "country" : "USA" + } ] + } + }, { + "fullUrl" : "Provenance/1713403257532857000.face4ba9-0511-494a-b97a-fd317b4c569e", + "resource" : { + "resourceType" : "Provenance", + "id" : "1713403257532857000.face4ba9-0511-494a-b97a-fd317b4c569e", + "target" : [ { + "reference" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b" + } ], + "recorded" : "2023-05-01T10:25:31-04:00", + "activity" : { + "coding" : [ { + "display" : "ORU^R01^ORU_R01" + } ] + } + } + }, { + "fullUrl" : "Provenance/1713403257545395000.7fcceea3-cab0-4f49-a614-fb9920b67eab", + "resource" : { + "resourceType" : "Provenance", + "id" : "1713403257545395000.7fcceea3-cab0-4f49-a614-fb9920b67eab", + "recorded" : "2024-04-17T19:20:57Z", + "policy" : [ "http://hl7.org/fhir/uv/v2mappings/message-oru-r01-to-bundle" ], + "activity" : { + "coding" : [ { + "code" : "v2-FHIR transformation" + } ] + }, + "agent" : [ { + "type" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/provenance-participant-type", + "code" : "assembler" + } ] + }, + "who" : { + "reference" : "Organization/1713403257544001000.682a351e-afba-46c2-8fe3-2c5a062e89c3" + } + } ] + } + }, { + "fullUrl" : "Organization/1713403257544001000.682a351e-afba-46c2-8fe3-2c5a062e89c3", + "resource" : { + "resourceType" : "Organization", + "id" : "1713403257544001000.682a351e-afba-46c2-8fe3-2c5a062e89c3", + "identifier" : [ { + "value" : "CDC PRIME - Atlanta" + }, { + "type" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/v2-0301" + } ] + }, + "system" : "urn:ietf:rfc:3986", + "value" : "2.16.840.1.114222.4.1.237821" + } ] + } + }, { + "fullUrl" : "Patient/1713403257571576000.965a6601-af4e-457c-b059-599cc5d55ca8", + "resource" : { + "resourceType" : "Patient", + "id" : "1713403257571576000.965a6601-af4e-457c-b059-599cc5d55ca8", + "extension" : [ { + "url" : "http://ibm.com/fhir/cdm/StructureDefinition/local-race-cd", + "valueCodeableConcept" : { + "coding" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", + "valueString" : "secondary-alt-coding" + } ], + "display" : "SecondaryAltText" + } ] + } + } ] + } + }, { + "fullUrl" : "Provenance/1713403257574021000.ac0f531d-82b5-497f-bda9-2ca03b85aa27", + "resource" : { + "resourceType" : "Provenance", + "id" : "1713403257574021000.ac0f531d-82b5-497f-bda9-2ca03b85aa27", + "target" : [ { + "reference" : "Patient/1713403257571576000.965a6601-af4e-457c-b059-599cc5d55ca8" + } ], + "recorded" : "2024-04-17T19:20:57Z", + "activity" : { + "coding" : [ { + "system" : "https://terminology.hl7.org/CodeSystem/v3-DataOperation", + "code" : "UPDATE" + } ] + } + } + } ] +} \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-13-test-value-cwe11.hl7 b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-13-test-value-cwe11.hl7 new file mode 100644 index 00000000000..56a3ba9a867 --- /dev/null +++ b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-13-test-value-cwe11.hl7 @@ -0,0 +1,2 @@ +MSH|^~\&#|||||20230501102531-0400||ORU^R01^ORU_R01|12345||2.5.1|||||USA|UNICODE UTF-8 +PID|1|||||||||^^^^^^^^^^SecondaryAltText \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-14-test-value-cwe12.fhir b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-14-test-value-cwe12.fhir new file mode 100644 index 00000000000..86e2249bf64 --- /dev/null +++ b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-14-test-value-cwe12.fhir @@ -0,0 +1,146 @@ +{ + "resourceType" : "Bundle", + "id" : "1713403276221244000.d8d624f5-14a9-48cf-bd9a-d1448ec86845", + "meta" : { + "lastUpdated" : "2024-04-17T19:21:16.233-06:00" + }, + "identifier" : { + "system" : "https://reportstream.cdc.gov/prime-router", + "value" : "12345" + }, + "type" : "message", + "timestamp" : "2023-05-01T08:25:31.000-06:00", + "entry" : [ { + "fullUrl" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b", + "resource" : { + "resourceType" : "MessageHeader", + "id" : "827ccb0e-ea8a-306c-8c34-a16891f84e7b", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/encoding-characters", + "valueString" : "^~\\&#" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/character-set", + "valueString" : "UNICODE UTF-8" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/msh-message-header", + "extension" : [ { + "url" : "MSH.7", + "valueString" : "20230501102531-0400" + }, { + "url" : "MSH.10", + "valueString" : "12345" + } ] + } ], + "eventCoding" : { + "system" : "http://terminology.hl7.org/CodeSystem/v2-0003", + "code" : "R01", + "display" : "ORU^R01^ORU_R01" + }, + "sender" : { + "reference" : "Organization/1713403276330045000.5d9a2693-893f-4d38-a021-475a40e390e6" + } + } + }, { + "fullUrl" : "Organization/1713403276330045000.5d9a2693-893f-4d38-a021-475a40e390e6", + "resource" : { + "resourceType" : "Organization", + "id" : "1713403276330045000.5d9a2693-893f-4d38-a021-475a40e390e6", + "address" : [ { + "country" : "USA" + } ] + } + }, { + "fullUrl" : "Provenance/1713403276909467000.399a11a2-3e1d-41c3-aadf-5e1d966b1586", + "resource" : { + "resourceType" : "Provenance", + "id" : "1713403276909467000.399a11a2-3e1d-41c3-aadf-5e1d966b1586", + "target" : [ { + "reference" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b" + } ], + "recorded" : "2023-05-01T10:25:31-04:00", + "activity" : { + "coding" : [ { + "display" : "ORU^R01^ORU_R01" + } ] + } + } + }, { + "fullUrl" : "Provenance/1713403276925023000.704d041c-fcc1-4a19-b121-5d3beb4f5cd2", + "resource" : { + "resourceType" : "Provenance", + "id" : "1713403276925023000.704d041c-fcc1-4a19-b121-5d3beb4f5cd2", + "recorded" : "2024-04-17T19:21:16Z", + "policy" : [ "http://hl7.org/fhir/uv/v2mappings/message-oru-r01-to-bundle" ], + "activity" : { + "coding" : [ { + "code" : "v2-FHIR transformation" + } ] + }, + "agent" : [ { + "type" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/provenance-participant-type", + "code" : "assembler" + } ] + }, + "who" : { + "reference" : "Organization/1713403276923527000.63739625-b689-4b22-9dc7-7628e23260ed" + } + } ] + } + }, { + "fullUrl" : "Organization/1713403276923527000.63739625-b689-4b22-9dc7-7628e23260ed", + "resource" : { + "resourceType" : "Organization", + "id" : "1713403276923527000.63739625-b689-4b22-9dc7-7628e23260ed", + "identifier" : [ { + "value" : "CDC PRIME - Atlanta" + }, { + "type" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/v2-0301" + } ] + }, + "system" : "urn:ietf:rfc:3986", + "value" : "2.16.840.1.114222.4.1.237821" + } ] + } + }, { + "fullUrl" : "Patient/1713403276952611000.f5505959-d8c4-4055-8a39-520d735054b0", + "resource" : { + "resourceType" : "Patient", + "id" : "1713403276952611000.f5505959-d8c4-4055-8a39-520d735054b0", + "extension" : [ { + "url" : "http://ibm.com/fhir/cdm/StructureDefinition/local-race-cd", + "valueCodeableConcept" : { + "coding" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", + "valueString" : "secondary-alt-coding" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", + "valueString" : "L" + } ], + "system" : "https://terminology.hl7.org/CodeSystem-v2-0396.html#v2-0396-99zzzorL" + } ] + } + } ] + } + }, { + "fullUrl" : "Provenance/1713403276954675000.9ae80c04-b945-464d-9616-1fe82deac0f7", + "resource" : { + "resourceType" : "Provenance", + "id" : "1713403276954675000.9ae80c04-b945-464d-9616-1fe82deac0f7", + "target" : [ { + "reference" : "Patient/1713403276952611000.f5505959-d8c4-4055-8a39-520d735054b0" + } ], + "recorded" : "2024-04-17T19:21:16Z", + "activity" : { + "coding" : [ { + "system" : "https://terminology.hl7.org/CodeSystem/v3-DataOperation", + "code" : "UPDATE" + } ] + } + } + } ] +} \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-14-test-value-cwe12.hl7 b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-14-test-value-cwe12.hl7 new file mode 100644 index 00000000000..4ae37cef8d7 --- /dev/null +++ b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-14-test-value-cwe12.hl7 @@ -0,0 +1,2 @@ +MSH|^~\&#|||||20230501102531-0400||ORU^R01^ORU_R01|12345||2.5.1|||||USA|UNICODE UTF-8 +PID|1|||||||||^^^^^^^^^^^L \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-15-test-value-cwe13.fhir b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-15-test-value-cwe13.fhir new file mode 100644 index 00000000000..e30b37765bb --- /dev/null +++ b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-15-test-value-cwe13.fhir @@ -0,0 +1,143 @@ +{ + "resourceType" : "Bundle", + "id" : "1713403297713864000.d073d008-db83-44bd-83df-cbb14a938aa0", + "meta" : { + "lastUpdated" : "2024-04-17T19:21:37.724-06:00" + }, + "identifier" : { + "system" : "https://reportstream.cdc.gov/prime-router", + "value" : "12345" + }, + "type" : "message", + "timestamp" : "2023-05-01T08:25:31.000-06:00", + "entry" : [ { + "fullUrl" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b", + "resource" : { + "resourceType" : "MessageHeader", + "id" : "827ccb0e-ea8a-306c-8c34-a16891f84e7b", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/encoding-characters", + "valueString" : "^~\\&#" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/character-set", + "valueString" : "UNICODE UTF-8" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/msh-message-header", + "extension" : [ { + "url" : "MSH.7", + "valueString" : "20230501102531-0400" + }, { + "url" : "MSH.10", + "valueString" : "12345" + } ] + } ], + "eventCoding" : { + "system" : "http://terminology.hl7.org/CodeSystem/v2-0003", + "code" : "R01", + "display" : "ORU^R01^ORU_R01" + }, + "sender" : { + "reference" : "Organization/1713403297826697000.cbf7948b-cb60-40d4-a78b-ddcc18399042" + } + } + }, { + "fullUrl" : "Organization/1713403297826697000.cbf7948b-cb60-40d4-a78b-ddcc18399042", + "resource" : { + "resourceType" : "Organization", + "id" : "1713403297826697000.cbf7948b-cb60-40d4-a78b-ddcc18399042", + "address" : [ { + "country" : "USA" + } ] + } + }, { + "fullUrl" : "Provenance/1713403298421036000.afee0d57-0e74-4ecb-bae8-e2f2943e0d08", + "resource" : { + "resourceType" : "Provenance", + "id" : "1713403298421036000.afee0d57-0e74-4ecb-bae8-e2f2943e0d08", + "target" : [ { + "reference" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b" + } ], + "recorded" : "2023-05-01T10:25:31-04:00", + "activity" : { + "coding" : [ { + "display" : "ORU^R01^ORU_R01" + } ] + } + } + }, { + "fullUrl" : "Provenance/1713403298444735000.9ed2d77d-a8ea-43d9-9692-1a990713b745", + "resource" : { + "resourceType" : "Provenance", + "id" : "1713403298444735000.9ed2d77d-a8ea-43d9-9692-1a990713b745", + "recorded" : "2024-04-17T19:21:38Z", + "policy" : [ "http://hl7.org/fhir/uv/v2mappings/message-oru-r01-to-bundle" ], + "activity" : { + "coding" : [ { + "code" : "v2-FHIR transformation" + } ] + }, + "agent" : [ { + "type" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/provenance-participant-type", + "code" : "assembler" + } ] + }, + "who" : { + "reference" : "Organization/1713403298443182000.2fd8fbd5-f7b2-4dde-940f-c8e5de070758" + } + } ] + } + }, { + "fullUrl" : "Organization/1713403298443182000.2fd8fbd5-f7b2-4dde-940f-c8e5de070758", + "resource" : { + "resourceType" : "Organization", + "id" : "1713403298443182000.2fd8fbd5-f7b2-4dde-940f-c8e5de070758", + "identifier" : [ { + "value" : "CDC PRIME - Atlanta" + }, { + "type" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/v2-0301" + } ] + }, + "system" : "urn:ietf:rfc:3986", + "value" : "2.16.840.1.114222.4.1.237821" + } ] + } + }, { + "fullUrl" : "Patient/1713403298471313000.5f5b87d6-2822-4967-8209-d6ea09137215", + "resource" : { + "resourceType" : "Patient", + "id" : "1713403298471313000.5f5b87d6-2822-4967-8209-d6ea09137215", + "extension" : [ { + "url" : "http://ibm.com/fhir/cdm/StructureDefinition/local-race-cd", + "valueCodeableConcept" : { + "coding" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", + "valueString" : "secondary-alt-coding" + } ], + "version" : "SecondaryAltVersion" + } ] + } + } ] + } + }, { + "fullUrl" : "Provenance/1713403298472875000.27c55c78-0385-4eeb-9f70-367c39446b4f", + "resource" : { + "resourceType" : "Provenance", + "id" : "1713403298472875000.27c55c78-0385-4eeb-9f70-367c39446b4f", + "target" : [ { + "reference" : "Patient/1713403298471313000.5f5b87d6-2822-4967-8209-d6ea09137215" + } ], + "recorded" : "2024-04-17T19:21:38Z", + "activity" : { + "coding" : [ { + "system" : "https://terminology.hl7.org/CodeSystem/v3-DataOperation", + "code" : "UPDATE" + } ] + } + } + } ] +} \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-15-test-value-cwe13.hl7 b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-15-test-value-cwe13.hl7 new file mode 100644 index 00000000000..39772a4adcb --- /dev/null +++ b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-15-test-value-cwe13.hl7 @@ -0,0 +1,2 @@ +MSH|^~\&#|||||20230501102531-0400||ORU^R01^ORU_R01|12345||2.5.1|||||USA|UNICODE UTF-8 +PID|1|||||||||^^^^^^^^^^^^SecondaryAltVersion \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-16-test-value-cwe14.fhir b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-16-test-value-cwe14.fhir new file mode 100644 index 00000000000..fb877731490 --- /dev/null +++ b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-16-test-value-cwe14.fhir @@ -0,0 +1,140 @@ +{ + "resourceType" : "Bundle", + "id" : "1713403318694290000.f2538ca4-7cf1-41d0-a0e0-3421116cc109", + "meta" : { + "lastUpdated" : "2024-04-17T19:21:58.705-06:00" + }, + "identifier" : { + "system" : "https://reportstream.cdc.gov/prime-router", + "value" : "12345" + }, + "type" : "message", + "timestamp" : "2023-05-01T08:25:31.000-06:00", + "entry" : [ { + "fullUrl" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b", + "resource" : { + "resourceType" : "MessageHeader", + "id" : "827ccb0e-ea8a-306c-8c34-a16891f84e7b", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/encoding-characters", + "valueString" : "^~\\&#" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/character-set", + "valueString" : "UNICODE UTF-8" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/msh-message-header", + "extension" : [ { + "url" : "MSH.7", + "valueString" : "20230501102531-0400" + }, { + "url" : "MSH.10", + "valueString" : "12345" + } ] + } ], + "eventCoding" : { + "system" : "http://terminology.hl7.org/CodeSystem/v2-0003", + "code" : "R01", + "display" : "ORU^R01^ORU_R01" + }, + "sender" : { + "reference" : "Organization/1713403318801955000.4678319a-d306-4ce7-9376-a2608366c01a" + } + } + }, { + "fullUrl" : "Organization/1713403318801955000.4678319a-d306-4ce7-9376-a2608366c01a", + "resource" : { + "resourceType" : "Organization", + "id" : "1713403318801955000.4678319a-d306-4ce7-9376-a2608366c01a", + "address" : [ { + "country" : "USA" + } ] + } + }, { + "fullUrl" : "Provenance/1713403319378244000.599dd6ae-9552-465a-8ffe-ebcf38cbd6cf", + "resource" : { + "resourceType" : "Provenance", + "id" : "1713403319378244000.599dd6ae-9552-465a-8ffe-ebcf38cbd6cf", + "target" : [ { + "reference" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b" + } ], + "recorded" : "2023-05-01T10:25:31-04:00", + "activity" : { + "coding" : [ { + "display" : "ORU^R01^ORU_R01" + } ] + } + } + }, { + "fullUrl" : "Provenance/1713403319391303000.2068fab6-cb87-43db-8a54-235b378d0bfe", + "resource" : { + "resourceType" : "Provenance", + "id" : "1713403319391303000.2068fab6-cb87-43db-8a54-235b378d0bfe", + "recorded" : "2024-04-17T19:21:59Z", + "policy" : [ "http://hl7.org/fhir/uv/v2mappings/message-oru-r01-to-bundle" ], + "activity" : { + "coding" : [ { + "code" : "v2-FHIR transformation" + } ] + }, + "agent" : [ { + "type" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/provenance-participant-type", + "code" : "assembler" + } ] + }, + "who" : { + "reference" : "Organization/1713403319390076000.bf51d399-c244-4dca-984c-81bf10311c0d" + } + } ] + } + }, { + "fullUrl" : "Organization/1713403319390076000.bf51d399-c244-4dca-984c-81bf10311c0d", + "resource" : { + "resourceType" : "Organization", + "id" : "1713403319390076000.bf51d399-c244-4dca-984c-81bf10311c0d", + "identifier" : [ { + "value" : "CDC PRIME - Atlanta" + }, { + "type" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/v2-0301" + } ] + }, + "system" : "urn:ietf:rfc:3986", + "value" : "2.16.840.1.114222.4.1.237821" + } ] + } + }, { + "fullUrl" : "Patient/1713403319416958000.7b82fc9c-a8b4-42ef-8b1e-d027eb067853", + "resource" : { + "resourceType" : "Patient", + "id" : "1713403319416958000.7b82fc9c-a8b4-42ef-8b1e-d027eb067853", + "extension" : [ { + "url" : "http://ibm.com/fhir/cdm/StructureDefinition/local-race-cd", + "valueCodeableConcept" : { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/coding-system-oid", + "valueOid" : "urn:oid:TEST1234" + } ] + } + } ] + } + }, { + "fullUrl" : "Provenance/1713403319418460000.85dbbede-9f30-48ef-b228-9fe89ebfb4b0", + "resource" : { + "resourceType" : "Provenance", + "id" : "1713403319418460000.85dbbede-9f30-48ef-b228-9fe89ebfb4b0", + "target" : [ { + "reference" : "Patient/1713403319416958000.7b82fc9c-a8b4-42ef-8b1e-d027eb067853" + } ], + "recorded" : "2024-04-17T19:21:59Z", + "activity" : { + "coding" : [ { + "system" : "https://terminology.hl7.org/CodeSystem/v3-DataOperation", + "code" : "UPDATE" + } ] + } + } + } ] +} \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-16-test-value-cwe14.hl7 b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-16-test-value-cwe14.hl7 new file mode 100644 index 00000000000..655d4dcbffb --- /dev/null +++ b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-16-test-value-cwe14.hl7 @@ -0,0 +1,2 @@ +MSH|^~\&#|||||20230501102531-0400||ORU^R01^ORU_R01|12345||2.5.1|||||USA|UNICODE UTF-8 +PID|1|||||||||^^^^^^^^^^^^^TEST1234 \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-3-test-value-cwe1.fhir b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-3-test-value-cwe1.fhir new file mode 100644 index 00000000000..58907013516 --- /dev/null +++ b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-3-test-value-cwe1.fhir @@ -0,0 +1,143 @@ +{ + "resourceType" : "Bundle", + "id" : "1713403339112570000.edd6d69d-919c-4670-a758-58676f3edbaf", + "meta" : { + "lastUpdated" : "2024-04-17T19:22:19.123-06:00" + }, + "identifier" : { + "system" : "https://reportstream.cdc.gov/prime-router", + "value" : "12345" + }, + "type" : "message", + "timestamp" : "2023-05-01T08:25:31.000-06:00", + "entry" : [ { + "fullUrl" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b", + "resource" : { + "resourceType" : "MessageHeader", + "id" : "827ccb0e-ea8a-306c-8c34-a16891f84e7b", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/encoding-characters", + "valueString" : "^~\\&#" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/character-set", + "valueString" : "UNICODE UTF-8" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/msh-message-header", + "extension" : [ { + "url" : "MSH.7", + "valueString" : "20230501102531-0400" + }, { + "url" : "MSH.10", + "valueString" : "12345" + } ] + } ], + "eventCoding" : { + "system" : "http://terminology.hl7.org/CodeSystem/v2-0003", + "code" : "R01", + "display" : "ORU^R01^ORU_R01" + }, + "sender" : { + "reference" : "Organization/1713403339222547000.ce8c98d1-5732-4ddf-9fdd-f6849384e1a1" + } + } + }, { + "fullUrl" : "Organization/1713403339222547000.ce8c98d1-5732-4ddf-9fdd-f6849384e1a1", + "resource" : { + "resourceType" : "Organization", + "id" : "1713403339222547000.ce8c98d1-5732-4ddf-9fdd-f6849384e1a1", + "address" : [ { + "country" : "USA" + } ] + } + }, { + "fullUrl" : "Provenance/1713403339804199000.85d17102-1b50-4689-bad9-adcbbf545578", + "resource" : { + "resourceType" : "Provenance", + "id" : "1713403339804199000.85d17102-1b50-4689-bad9-adcbbf545578", + "target" : [ { + "reference" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b" + } ], + "recorded" : "2023-05-01T10:25:31-04:00", + "activity" : { + "coding" : [ { + "display" : "ORU^R01^ORU_R01" + } ] + } + } + }, { + "fullUrl" : "Provenance/1713403339818818000.aa3d6196-9d12-4adf-8ee9-71134e43be14", + "resource" : { + "resourceType" : "Provenance", + "id" : "1713403339818818000.aa3d6196-9d12-4adf-8ee9-71134e43be14", + "recorded" : "2024-04-17T19:22:19Z", + "policy" : [ "http://hl7.org/fhir/uv/v2mappings/message-oru-r01-to-bundle" ], + "activity" : { + "coding" : [ { + "code" : "v2-FHIR transformation" + } ] + }, + "agent" : [ { + "type" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/provenance-participant-type", + "code" : "assembler" + } ] + }, + "who" : { + "reference" : "Organization/1713403339817619000.32932d4b-4caa-44ec-9b7e-6e38f5e5b551" + } + } ] + } + }, { + "fullUrl" : "Organization/1713403339817619000.32932d4b-4caa-44ec-9b7e-6e38f5e5b551", + "resource" : { + "resourceType" : "Organization", + "id" : "1713403339817619000.32932d4b-4caa-44ec-9b7e-6e38f5e5b551", + "identifier" : [ { + "value" : "CDC PRIME - Atlanta" + }, { + "type" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/v2-0301" + } ] + }, + "system" : "urn:ietf:rfc:3986", + "value" : "2.16.840.1.114222.4.1.237821" + } ] + } + }, { + "fullUrl" : "Patient/1713403339844399000.2f9222d0-48e6-4674-b7c6-9106b2f65f5e", + "resource" : { + "resourceType" : "Patient", + "id" : "1713403339844399000.2f9222d0-48e6-4674-b7c6-9106b2f65f5e", + "extension" : [ { + "url" : "http://ibm.com/fhir/cdm/StructureDefinition/local-race-cd", + "valueCodeableConcept" : { + "coding" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", + "valueString" : "coding" + } ], + "code" : "PrimaryCode" + } ] + } + } ] + } + }, { + "fullUrl" : "Provenance/1713403339846196000.abfc2480-a0fb-46ed-a7c4-e6dd98ff4aa2", + "resource" : { + "resourceType" : "Provenance", + "id" : "1713403339846196000.abfc2480-a0fb-46ed-a7c4-e6dd98ff4aa2", + "target" : [ { + "reference" : "Patient/1713403339844399000.2f9222d0-48e6-4674-b7c6-9106b2f65f5e" + } ], + "recorded" : "2024-04-17T19:22:19Z", + "activity" : { + "coding" : [ { + "system" : "https://terminology.hl7.org/CodeSystem/v3-DataOperation", + "code" : "UPDATE" + } ] + } + } + } ] +} \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-3-test-value-cwe1.hl7 b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-3-test-value-cwe1.hl7 new file mode 100644 index 00000000000..ad77148beb8 --- /dev/null +++ b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-3-test-value-cwe1.hl7 @@ -0,0 +1,2 @@ +MSH|^~\&#|||||20230501102531-0400||ORU^R01^ORU_R01|12345||2.5.1|||||USA|UNICODE UTF-8 +PID|1|||||||||PrimaryCode \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-4-test-value-cwe2.fhir b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-4-test-value-cwe2.fhir new file mode 100644 index 00000000000..148f7a07a3b --- /dev/null +++ b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-4-test-value-cwe2.fhir @@ -0,0 +1,143 @@ +{ + "resourceType" : "Bundle", + "id" : "1713403359728506000.43ea1e28-d96b-424a-ba86-06aee397ab29", + "meta" : { + "lastUpdated" : "2024-04-17T19:22:39.739-06:00" + }, + "identifier" : { + "system" : "https://reportstream.cdc.gov/prime-router", + "value" : "12345" + }, + "type" : "message", + "timestamp" : "2023-05-01T08:25:31.000-06:00", + "entry" : [ { + "fullUrl" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b", + "resource" : { + "resourceType" : "MessageHeader", + "id" : "827ccb0e-ea8a-306c-8c34-a16891f84e7b", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/encoding-characters", + "valueString" : "^~\\&#" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/character-set", + "valueString" : "UNICODE UTF-8" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/msh-message-header", + "extension" : [ { + "url" : "MSH.7", + "valueString" : "20230501102531-0400" + }, { + "url" : "MSH.10", + "valueString" : "12345" + } ] + } ], + "eventCoding" : { + "system" : "http://terminology.hl7.org/CodeSystem/v2-0003", + "code" : "R01", + "display" : "ORU^R01^ORU_R01" + }, + "sender" : { + "reference" : "Organization/1713403359840864000.749d4472-f21c-4867-a087-d84b14622371" + } + } + }, { + "fullUrl" : "Organization/1713403359840864000.749d4472-f21c-4867-a087-d84b14622371", + "resource" : { + "resourceType" : "Organization", + "id" : "1713403359840864000.749d4472-f21c-4867-a087-d84b14622371", + "address" : [ { + "country" : "USA" + } ] + } + }, { + "fullUrl" : "Provenance/1713403360427575000.3087116f-b901-4c70-89cd-f113371358ce", + "resource" : { + "resourceType" : "Provenance", + "id" : "1713403360427575000.3087116f-b901-4c70-89cd-f113371358ce", + "target" : [ { + "reference" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b" + } ], + "recorded" : "2023-05-01T10:25:31-04:00", + "activity" : { + "coding" : [ { + "display" : "ORU^R01^ORU_R01" + } ] + } + } + }, { + "fullUrl" : "Provenance/1713403360441247000.3d29620d-2ac7-4458-a070-07e5089dd6ad", + "resource" : { + "resourceType" : "Provenance", + "id" : "1713403360441247000.3d29620d-2ac7-4458-a070-07e5089dd6ad", + "recorded" : "2024-04-17T19:22:40Z", + "policy" : [ "http://hl7.org/fhir/uv/v2mappings/message-oru-r01-to-bundle" ], + "activity" : { + "coding" : [ { + "code" : "v2-FHIR transformation" + } ] + }, + "agent" : [ { + "type" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/provenance-participant-type", + "code" : "assembler" + } ] + }, + "who" : { + "reference" : "Organization/1713403360439904000.f39f56d7-a811-4e95-884d-d3a279ab3934" + } + } ] + } + }, { + "fullUrl" : "Organization/1713403360439904000.f39f56d7-a811-4e95-884d-d3a279ab3934", + "resource" : { + "resourceType" : "Organization", + "id" : "1713403360439904000.f39f56d7-a811-4e95-884d-d3a279ab3934", + "identifier" : [ { + "value" : "CDC PRIME - Atlanta" + }, { + "type" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/v2-0301" + } ] + }, + "system" : "urn:ietf:rfc:3986", + "value" : "2.16.840.1.114222.4.1.237821" + } ] + } + }, { + "fullUrl" : "Patient/1713403360467504000.54c5745d-9561-439f-b3ba-5a75a0c81d36", + "resource" : { + "resourceType" : "Patient", + "id" : "1713403360467504000.54c5745d-9561-439f-b3ba-5a75a0c81d36", + "extension" : [ { + "url" : "http://ibm.com/fhir/cdm/StructureDefinition/local-race-cd", + "valueCodeableConcept" : { + "coding" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", + "valueString" : "coding" + } ], + "display" : "PrimaryText" + } ] + } + } ] + } + }, { + "fullUrl" : "Provenance/1713403360469191000.bdb981b5-43d8-45af-8bd1-b34be2715aad", + "resource" : { + "resourceType" : "Provenance", + "id" : "1713403360469191000.bdb981b5-43d8-45af-8bd1-b34be2715aad", + "target" : [ { + "reference" : "Patient/1713403360467504000.54c5745d-9561-439f-b3ba-5a75a0c81d36" + } ], + "recorded" : "2024-04-17T19:22:40Z", + "activity" : { + "coding" : [ { + "system" : "https://terminology.hl7.org/CodeSystem/v3-DataOperation", + "code" : "UPDATE" + } ] + } + } + } ] +} \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-4-test-value-cwe2.hl7 b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-4-test-value-cwe2.hl7 new file mode 100644 index 00000000000..85a78b797f3 --- /dev/null +++ b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-4-test-value-cwe2.hl7 @@ -0,0 +1,2 @@ +MSH|^~\&#|||||20230501102531-0400||ORU^R01^ORU_R01|12345||2.5.1|||||USA|UNICODE UTF-8 +PID|1|||||||||^PrimaryText \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-5-test-value-cwe3.fhir b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-5-test-value-cwe3.fhir new file mode 100644 index 00000000000..60b7be17a15 --- /dev/null +++ b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-5-test-value-cwe3.fhir @@ -0,0 +1,146 @@ +{ + "resourceType" : "Bundle", + "id" : "1713403380679523000.db2e06dd-216a-48a2-a1ca-ae8f0fdf8736", + "meta" : { + "lastUpdated" : "2024-04-17T19:23:00.689-06:00" + }, + "identifier" : { + "system" : "https://reportstream.cdc.gov/prime-router", + "value" : "12345" + }, + "type" : "message", + "timestamp" : "2023-05-01T08:25:31.000-06:00", + "entry" : [ { + "fullUrl" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b", + "resource" : { + "resourceType" : "MessageHeader", + "id" : "827ccb0e-ea8a-306c-8c34-a16891f84e7b", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/encoding-characters", + "valueString" : "^~\\&#" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/character-set", + "valueString" : "UNICODE UTF-8" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/msh-message-header", + "extension" : [ { + "url" : "MSH.7", + "valueString" : "20230501102531-0400" + }, { + "url" : "MSH.10", + "valueString" : "12345" + } ] + } ], + "eventCoding" : { + "system" : "http://terminology.hl7.org/CodeSystem/v2-0003", + "code" : "R01", + "display" : "ORU^R01^ORU_R01" + }, + "sender" : { + "reference" : "Organization/1713403380785870000.e0894b9d-480e-4a75-b354-de3521dcca69" + } + } + }, { + "fullUrl" : "Organization/1713403380785870000.e0894b9d-480e-4a75-b354-de3521dcca69", + "resource" : { + "resourceType" : "Organization", + "id" : "1713403380785870000.e0894b9d-480e-4a75-b354-de3521dcca69", + "address" : [ { + "country" : "USA" + } ] + } + }, { + "fullUrl" : "Provenance/1713403381370445000.f9db9ebf-1549-4433-a230-6e08655bcc6b", + "resource" : { + "resourceType" : "Provenance", + "id" : "1713403381370445000.f9db9ebf-1549-4433-a230-6e08655bcc6b", + "target" : [ { + "reference" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b" + } ], + "recorded" : "2023-05-01T10:25:31-04:00", + "activity" : { + "coding" : [ { + "display" : "ORU^R01^ORU_R01" + } ] + } + } + }, { + "fullUrl" : "Provenance/1713403381383417000.9e3e72a5-37f1-4784-89e7-aae93bc44af0", + "resource" : { + "resourceType" : "Provenance", + "id" : "1713403381383417000.9e3e72a5-37f1-4784-89e7-aae93bc44af0", + "recorded" : "2024-04-17T19:23:01Z", + "policy" : [ "http://hl7.org/fhir/uv/v2mappings/message-oru-r01-to-bundle" ], + "activity" : { + "coding" : [ { + "code" : "v2-FHIR transformation" + } ] + }, + "agent" : [ { + "type" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/provenance-participant-type", + "code" : "assembler" + } ] + }, + "who" : { + "reference" : "Organization/1713403381382077000.50ca072c-7c3b-441a-b303-2cef61acf076" + } + } ] + } + }, { + "fullUrl" : "Organization/1713403381382077000.50ca072c-7c3b-441a-b303-2cef61acf076", + "resource" : { + "resourceType" : "Organization", + "id" : "1713403381382077000.50ca072c-7c3b-441a-b303-2cef61acf076", + "identifier" : [ { + "value" : "CDC PRIME - Atlanta" + }, { + "type" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/v2-0301" + } ] + }, + "system" : "urn:ietf:rfc:3986", + "value" : "2.16.840.1.114222.4.1.237821" + } ] + } + }, { + "fullUrl" : "Patient/1713403381407837000.bec3d625-32fd-4a2f-b45d-05df13df8981", + "resource" : { + "resourceType" : "Patient", + "id" : "1713403381407837000.bec3d625-32fd-4a2f-b45d-05df13df8981", + "extension" : [ { + "url" : "http://ibm.com/fhir/cdm/StructureDefinition/local-race-cd", + "valueCodeableConcept" : { + "coding" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", + "valueString" : "coding" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", + "valueString" : "LN" + } ], + "system" : "http://loinc.org" + } ] + } + } ] + } + }, { + "fullUrl" : "Provenance/1713403381409401000.edb3ccb6-a09b-4549-9b65-cfba32757a84", + "resource" : { + "resourceType" : "Provenance", + "id" : "1713403381409401000.edb3ccb6-a09b-4549-9b65-cfba32757a84", + "target" : [ { + "reference" : "Patient/1713403381407837000.bec3d625-32fd-4a2f-b45d-05df13df8981" + } ], + "recorded" : "2024-04-17T19:23:01Z", + "activity" : { + "coding" : [ { + "system" : "https://terminology.hl7.org/CodeSystem/v3-DataOperation", + "code" : "UPDATE" + } ] + } + } + } ] +} \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-5-test-value-cwe3.hl7 b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-5-test-value-cwe3.hl7 new file mode 100644 index 00000000000..80e3d774df2 --- /dev/null +++ b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-5-test-value-cwe3.hl7 @@ -0,0 +1,2 @@ +MSH|^~\&#|||||20230501102531-0400||ORU^R01^ORU_R01|12345||2.5.1|||||USA|UNICODE UTF-8 +PID|1|||||||||^^LN \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-6-test-value-cwe4.fhir b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-6-test-value-cwe4.fhir new file mode 100644 index 00000000000..62335ea84bd --- /dev/null +++ b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-6-test-value-cwe4.fhir @@ -0,0 +1,143 @@ +{ + "resourceType" : "Bundle", + "id" : "1713403401349528000.cde165bf-abb6-4d40-a95c-bd1ab331b14e", + "meta" : { + "lastUpdated" : "2024-04-17T19:23:21.360-06:00" + }, + "identifier" : { + "system" : "https://reportstream.cdc.gov/prime-router", + "value" : "12345" + }, + "type" : "message", + "timestamp" : "2023-05-01T08:25:31.000-06:00", + "entry" : [ { + "fullUrl" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b", + "resource" : { + "resourceType" : "MessageHeader", + "id" : "827ccb0e-ea8a-306c-8c34-a16891f84e7b", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/encoding-characters", + "valueString" : "^~\\&#" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/character-set", + "valueString" : "UNICODE UTF-8" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/msh-message-header", + "extension" : [ { + "url" : "MSH.7", + "valueString" : "20230501102531-0400" + }, { + "url" : "MSH.10", + "valueString" : "12345" + } ] + } ], + "eventCoding" : { + "system" : "http://terminology.hl7.org/CodeSystem/v2-0003", + "code" : "R01", + "display" : "ORU^R01^ORU_R01" + }, + "sender" : { + "reference" : "Organization/1713403401461244000.e80cffc2-8b81-4fd4-9da5-c35da7499842" + } + } + }, { + "fullUrl" : "Organization/1713403401461244000.e80cffc2-8b81-4fd4-9da5-c35da7499842", + "resource" : { + "resourceType" : "Organization", + "id" : "1713403401461244000.e80cffc2-8b81-4fd4-9da5-c35da7499842", + "address" : [ { + "country" : "USA" + } ] + } + }, { + "fullUrl" : "Provenance/1713403402041048000.ee072e3a-3a20-4ae6-8503-05412bebf042", + "resource" : { + "resourceType" : "Provenance", + "id" : "1713403402041048000.ee072e3a-3a20-4ae6-8503-05412bebf042", + "target" : [ { + "reference" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b" + } ], + "recorded" : "2023-05-01T10:25:31-04:00", + "activity" : { + "coding" : [ { + "display" : "ORU^R01^ORU_R01" + } ] + } + } + }, { + "fullUrl" : "Provenance/1713403402055070000.d0fca609-cb01-48e4-96bc-9d39a769409e", + "resource" : { + "resourceType" : "Provenance", + "id" : "1713403402055070000.d0fca609-cb01-48e4-96bc-9d39a769409e", + "recorded" : "2024-04-17T19:23:22Z", + "policy" : [ "http://hl7.org/fhir/uv/v2mappings/message-oru-r01-to-bundle" ], + "activity" : { + "coding" : [ { + "code" : "v2-FHIR transformation" + } ] + }, + "agent" : [ { + "type" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/provenance-participant-type", + "code" : "assembler" + } ] + }, + "who" : { + "reference" : "Organization/1713403402054017000.30aab337-4bc3-4daa-acc2-99c0504c7fd3" + } + } ] + } + }, { + "fullUrl" : "Organization/1713403402054017000.30aab337-4bc3-4daa-acc2-99c0504c7fd3", + "resource" : { + "resourceType" : "Organization", + "id" : "1713403402054017000.30aab337-4bc3-4daa-acc2-99c0504c7fd3", + "identifier" : [ { + "value" : "CDC PRIME - Atlanta" + }, { + "type" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/v2-0301" + } ] + }, + "system" : "urn:ietf:rfc:3986", + "value" : "2.16.840.1.114222.4.1.237821" + } ] + } + }, { + "fullUrl" : "Patient/1713403402080948000.b71f5da1-09a6-46e0-891a-15d944285408", + "resource" : { + "resourceType" : "Patient", + "id" : "1713403402080948000.b71f5da1-09a6-46e0-891a-15d944285408", + "extension" : [ { + "url" : "http://ibm.com/fhir/cdm/StructureDefinition/local-race-cd", + "valueCodeableConcept" : { + "coding" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", + "valueString" : "alt-coding" + } ], + "code" : "AltCode" + } ] + } + } ] + } + }, { + "fullUrl" : "Provenance/1713403402082318000.e34bd1b0-8605-4da0-911c-8c625cf6bce0", + "resource" : { + "resourceType" : "Provenance", + "id" : "1713403402082318000.e34bd1b0-8605-4da0-911c-8c625cf6bce0", + "target" : [ { + "reference" : "Patient/1713403402080948000.b71f5da1-09a6-46e0-891a-15d944285408" + } ], + "recorded" : "2024-04-17T19:23:22Z", + "activity" : { + "coding" : [ { + "system" : "https://terminology.hl7.org/CodeSystem/v3-DataOperation", + "code" : "UPDATE" + } ] + } + } + } ] +} \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-6-test-value-cwe4.hl7 b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-6-test-value-cwe4.hl7 new file mode 100644 index 00000000000..202d873be63 --- /dev/null +++ b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-6-test-value-cwe4.hl7 @@ -0,0 +1,2 @@ +MSH|^~\&#|||||20230501102531-0400||ORU^R01^ORU_R01|12345||2.5.1|||||USA|UNICODE UTF-8 +PID|1|||||||||^^^AltCode \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-7-test-value-cwe5.fhir b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-7-test-value-cwe5.fhir new file mode 100644 index 00000000000..08c61954c97 --- /dev/null +++ b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-7-test-value-cwe5.fhir @@ -0,0 +1,143 @@ +{ + "resourceType" : "Bundle", + "id" : "1713403423039330000.0f5107c6-7a2b-4fb7-b3d3-0bedc6fb61b6", + "meta" : { + "lastUpdated" : "2024-04-17T19:23:43.050-06:00" + }, + "identifier" : { + "system" : "https://reportstream.cdc.gov/prime-router", + "value" : "12345" + }, + "type" : "message", + "timestamp" : "2023-05-01T08:25:31.000-06:00", + "entry" : [ { + "fullUrl" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b", + "resource" : { + "resourceType" : "MessageHeader", + "id" : "827ccb0e-ea8a-306c-8c34-a16891f84e7b", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/encoding-characters", + "valueString" : "^~\\&#" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/character-set", + "valueString" : "UNICODE UTF-8" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/msh-message-header", + "extension" : [ { + "url" : "MSH.7", + "valueString" : "20230501102531-0400" + }, { + "url" : "MSH.10", + "valueString" : "12345" + } ] + } ], + "eventCoding" : { + "system" : "http://terminology.hl7.org/CodeSystem/v2-0003", + "code" : "R01", + "display" : "ORU^R01^ORU_R01" + }, + "sender" : { + "reference" : "Organization/1713403423150405000.00b478a8-fd47-4eb6-9e3f-92ab183d3613" + } + } + }, { + "fullUrl" : "Organization/1713403423150405000.00b478a8-fd47-4eb6-9e3f-92ab183d3613", + "resource" : { + "resourceType" : "Organization", + "id" : "1713403423150405000.00b478a8-fd47-4eb6-9e3f-92ab183d3613", + "address" : [ { + "country" : "USA" + } ] + } + }, { + "fullUrl" : "Provenance/1713403423760358000.d5a126a6-4e7f-4288-b2d0-d92db61052f3", + "resource" : { + "resourceType" : "Provenance", + "id" : "1713403423760358000.d5a126a6-4e7f-4288-b2d0-d92db61052f3", + "target" : [ { + "reference" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b" + } ], + "recorded" : "2023-05-01T10:25:31-04:00", + "activity" : { + "coding" : [ { + "display" : "ORU^R01^ORU_R01" + } ] + } + } + }, { + "fullUrl" : "Provenance/1713403423777580000.4edc191a-af55-4042-a106-57d89345b4d1", + "resource" : { + "resourceType" : "Provenance", + "id" : "1713403423777580000.4edc191a-af55-4042-a106-57d89345b4d1", + "recorded" : "2024-04-17T19:23:43Z", + "policy" : [ "http://hl7.org/fhir/uv/v2mappings/message-oru-r01-to-bundle" ], + "activity" : { + "coding" : [ { + "code" : "v2-FHIR transformation" + } ] + }, + "agent" : [ { + "type" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/provenance-participant-type", + "code" : "assembler" + } ] + }, + "who" : { + "reference" : "Organization/1713403423775819000.e3720102-2332-47c1-8ade-f454b501650a" + } + } ] + } + }, { + "fullUrl" : "Organization/1713403423775819000.e3720102-2332-47c1-8ade-f454b501650a", + "resource" : { + "resourceType" : "Organization", + "id" : "1713403423775819000.e3720102-2332-47c1-8ade-f454b501650a", + "identifier" : [ { + "value" : "CDC PRIME - Atlanta" + }, { + "type" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/v2-0301" + } ] + }, + "system" : "urn:ietf:rfc:3986", + "value" : "2.16.840.1.114222.4.1.237821" + } ] + } + }, { + "fullUrl" : "Patient/1713403423808443000.cc74a919-c42b-45fa-9a12-bedbf03b3f10", + "resource" : { + "resourceType" : "Patient", + "id" : "1713403423808443000.cc74a919-c42b-45fa-9a12-bedbf03b3f10", + "extension" : [ { + "url" : "http://ibm.com/fhir/cdm/StructureDefinition/local-race-cd", + "valueCodeableConcept" : { + "coding" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", + "valueString" : "alt-coding" + } ], + "display" : "AltText" + } ] + } + } ] + } + }, { + "fullUrl" : "Provenance/1713403423810606000.299e921a-6e86-422a-a679-0792f0f297ea", + "resource" : { + "resourceType" : "Provenance", + "id" : "1713403423810606000.299e921a-6e86-422a-a679-0792f0f297ea", + "target" : [ { + "reference" : "Patient/1713403423808443000.cc74a919-c42b-45fa-9a12-bedbf03b3f10" + } ], + "recorded" : "2024-04-17T19:23:43Z", + "activity" : { + "coding" : [ { + "system" : "https://terminology.hl7.org/CodeSystem/v3-DataOperation", + "code" : "UPDATE" + } ] + } + } + } ] +} \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-7-test-value-cwe5.hl7 b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-7-test-value-cwe5.hl7 new file mode 100644 index 00000000000..dcde04d370a --- /dev/null +++ b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-7-test-value-cwe5.hl7 @@ -0,0 +1,2 @@ +MSH|^~\&#|||||20230501102531-0400||ORU^R01^ORU_R01|12345||2.5.1|||||USA|UNICODE UTF-8 +PID|1|||||||||^^^^AltText \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-8-test-value-cwe6.fhir b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-8-test-value-cwe6.fhir new file mode 100644 index 00000000000..55b6592255d --- /dev/null +++ b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-8-test-value-cwe6.fhir @@ -0,0 +1,146 @@ +{ + "resourceType" : "Bundle", + "id" : "1713403444709377000.15845bf8-a5db-427b-a53e-3b45a830d7cb", + "meta" : { + "lastUpdated" : "2024-04-17T19:24:04.719-06:00" + }, + "identifier" : { + "system" : "https://reportstream.cdc.gov/prime-router", + "value" : "12345" + }, + "type" : "message", + "timestamp" : "2023-05-01T08:25:31.000-06:00", + "entry" : [ { + "fullUrl" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b", + "resource" : { + "resourceType" : "MessageHeader", + "id" : "827ccb0e-ea8a-306c-8c34-a16891f84e7b", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/encoding-characters", + "valueString" : "^~\\&#" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/character-set", + "valueString" : "UNICODE UTF-8" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/msh-message-header", + "extension" : [ { + "url" : "MSH.7", + "valueString" : "20230501102531-0400" + }, { + "url" : "MSH.10", + "valueString" : "12345" + } ] + } ], + "eventCoding" : { + "system" : "http://terminology.hl7.org/CodeSystem/v2-0003", + "code" : "R01", + "display" : "ORU^R01^ORU_R01" + }, + "sender" : { + "reference" : "Organization/1713403444819081000.d7f4d552-1ac2-48ad-a953-e3352fc318d0" + } + } + }, { + "fullUrl" : "Organization/1713403444819081000.d7f4d552-1ac2-48ad-a953-e3352fc318d0", + "resource" : { + "resourceType" : "Organization", + "id" : "1713403444819081000.d7f4d552-1ac2-48ad-a953-e3352fc318d0", + "address" : [ { + "country" : "USA" + } ] + } + }, { + "fullUrl" : "Provenance/1713403445427495000.2514114f-8e8f-4d0f-aeee-a13449a2c209", + "resource" : { + "resourceType" : "Provenance", + "id" : "1713403445427495000.2514114f-8e8f-4d0f-aeee-a13449a2c209", + "target" : [ { + "reference" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b" + } ], + "recorded" : "2023-05-01T10:25:31-04:00", + "activity" : { + "coding" : [ { + "display" : "ORU^R01^ORU_R01" + } ] + } + } + }, { + "fullUrl" : "Provenance/1713403445442019000.2f759e9e-f1d8-46e8-b3a3-599e85819a6a", + "resource" : { + "resourceType" : "Provenance", + "id" : "1713403445442019000.2f759e9e-f1d8-46e8-b3a3-599e85819a6a", + "recorded" : "2024-04-17T19:24:05Z", + "policy" : [ "http://hl7.org/fhir/uv/v2mappings/message-oru-r01-to-bundle" ], + "activity" : { + "coding" : [ { + "code" : "v2-FHIR transformation" + } ] + }, + "agent" : [ { + "type" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/provenance-participant-type", + "code" : "assembler" + } ] + }, + "who" : { + "reference" : "Organization/1713403445440385000.0cc2d648-0fda-41eb-a530-fdcc9a36d3e7" + } + } ] + } + }, { + "fullUrl" : "Organization/1713403445440385000.0cc2d648-0fda-41eb-a530-fdcc9a36d3e7", + "resource" : { + "resourceType" : "Organization", + "id" : "1713403445440385000.0cc2d648-0fda-41eb-a530-fdcc9a36d3e7", + "identifier" : [ { + "value" : "CDC PRIME - Atlanta" + }, { + "type" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/v2-0301" + } ] + }, + "system" : "urn:ietf:rfc:3986", + "value" : "2.16.840.1.114222.4.1.237821" + } ] + } + }, { + "fullUrl" : "Patient/1713403445468998000.dd2c021a-a861-4253-b5ad-801ed89134fe", + "resource" : { + "resourceType" : "Patient", + "id" : "1713403445468998000.dd2c021a-a861-4253-b5ad-801ed89134fe", + "extension" : [ { + "url" : "http://ibm.com/fhir/cdm/StructureDefinition/local-race-cd", + "valueCodeableConcept" : { + "coding" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", + "valueString" : "alt-coding" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", + "valueString" : "L" + } ], + "system" : "https://terminology.hl7.org/CodeSystem-v2-0396.html#v2-0396-99zzzorL" + } ] + } + } ] + } + }, { + "fullUrl" : "Provenance/1713403445471153000.e959285d-ec02-4343-9ebe-1090a68193c6", + "resource" : { + "resourceType" : "Provenance", + "id" : "1713403445471153000.e959285d-ec02-4343-9ebe-1090a68193c6", + "target" : [ { + "reference" : "Patient/1713403445468998000.dd2c021a-a861-4253-b5ad-801ed89134fe" + } ], + "recorded" : "2024-04-17T19:24:05Z", + "activity" : { + "coding" : [ { + "system" : "https://terminology.hl7.org/CodeSystem/v3-DataOperation", + "code" : "UPDATE" + } ] + } + } + } ] +} \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-8-test-value-cwe6.hl7 b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-8-test-value-cwe6.hl7 new file mode 100644 index 00000000000..334cc0adab3 --- /dev/null +++ b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-8-test-value-cwe6.hl7 @@ -0,0 +1,2 @@ +MSH|^~\&#|||||20230501102531-0400||ORU^R01^ORU_R01|12345||2.5.1|||||USA|UNICODE UTF-8 +PID|1|||||||||^^^^^L \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-9-test-value-cwe7.fhir b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-9-test-value-cwe7.fhir new file mode 100644 index 00000000000..b950f4145fb --- /dev/null +++ b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-9-test-value-cwe7.fhir @@ -0,0 +1,143 @@ +{ + "resourceType" : "Bundle", + "id" : "1713403466089727000.c986b703-e397-4e6f-baf8-278376575309", + "meta" : { + "lastUpdated" : "2024-04-17T19:24:26.101-06:00" + }, + "identifier" : { + "system" : "https://reportstream.cdc.gov/prime-router", + "value" : "12345" + }, + "type" : "message", + "timestamp" : "2023-05-01T08:25:31.000-06:00", + "entry" : [ { + "fullUrl" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b", + "resource" : { + "resourceType" : "MessageHeader", + "id" : "827ccb0e-ea8a-306c-8c34-a16891f84e7b", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/encoding-characters", + "valueString" : "^~\\&#" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/character-set", + "valueString" : "UNICODE UTF-8" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/msh-message-header", + "extension" : [ { + "url" : "MSH.7", + "valueString" : "20230501102531-0400" + }, { + "url" : "MSH.10", + "valueString" : "12345" + } ] + } ], + "eventCoding" : { + "system" : "http://terminology.hl7.org/CodeSystem/v2-0003", + "code" : "R01", + "display" : "ORU^R01^ORU_R01" + }, + "sender" : { + "reference" : "Organization/1713403466204066000.535f073a-a5f9-4b12-8ce9-87780b847d19" + } + } + }, { + "fullUrl" : "Organization/1713403466204066000.535f073a-a5f9-4b12-8ce9-87780b847d19", + "resource" : { + "resourceType" : "Organization", + "id" : "1713403466204066000.535f073a-a5f9-4b12-8ce9-87780b847d19", + "address" : [ { + "country" : "USA" + } ] + } + }, { + "fullUrl" : "Provenance/1713403466809125000.83225b49-3606-4f9a-be2a-aefd9bd971ab", + "resource" : { + "resourceType" : "Provenance", + "id" : "1713403466809125000.83225b49-3606-4f9a-be2a-aefd9bd971ab", + "target" : [ { + "reference" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b" + } ], + "recorded" : "2023-05-01T10:25:31-04:00", + "activity" : { + "coding" : [ { + "display" : "ORU^R01^ORU_R01" + } ] + } + } + }, { + "fullUrl" : "Provenance/1713403466823618000.ad1b7c2f-547d-4a4b-88d0-10da8f006664", + "resource" : { + "resourceType" : "Provenance", + "id" : "1713403466823618000.ad1b7c2f-547d-4a4b-88d0-10da8f006664", + "recorded" : "2024-04-17T19:24:26Z", + "policy" : [ "http://hl7.org/fhir/uv/v2mappings/message-oru-r01-to-bundle" ], + "activity" : { + "coding" : [ { + "code" : "v2-FHIR transformation" + } ] + }, + "agent" : [ { + "type" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/provenance-participant-type", + "code" : "assembler" + } ] + }, + "who" : { + "reference" : "Organization/1713403466822104000.021a069a-18dc-4777-a4ff-2027e6ca443f" + } + } ] + } + }, { + "fullUrl" : "Organization/1713403466822104000.021a069a-18dc-4777-a4ff-2027e6ca443f", + "resource" : { + "resourceType" : "Organization", + "id" : "1713403466822104000.021a069a-18dc-4777-a4ff-2027e6ca443f", + "identifier" : [ { + "value" : "CDC PRIME - Atlanta" + }, { + "type" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/v2-0301" + } ] + }, + "system" : "urn:ietf:rfc:3986", + "value" : "2.16.840.1.114222.4.1.237821" + } ] + } + }, { + "fullUrl" : "Patient/1713403466850207000.9ba45630-fed9-412c-b5c3-cf216449f827", + "resource" : { + "resourceType" : "Patient", + "id" : "1713403466850207000.9ba45630-fed9-412c-b5c3-cf216449f827", + "extension" : [ { + "url" : "http://ibm.com/fhir/cdm/StructureDefinition/local-race-cd", + "valueCodeableConcept" : { + "coding" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", + "valueString" : "coding" + } ], + "version" : "PrimaryVersion" + } ] + } + } ] + } + }, { + "fullUrl" : "Provenance/1713403466851693000.522a71a5-ffa7-444b-a13a-aebff8b146e6", + "resource" : { + "resourceType" : "Provenance", + "id" : "1713403466851693000.522a71a5-ffa7-444b-a13a-aebff8b146e6", + "target" : [ { + "reference" : "Patient/1713403466850207000.9ba45630-fed9-412c-b5c3-cf216449f827" + } ], + "recorded" : "2024-04-17T19:24:26Z", + "activity" : { + "coding" : [ { + "system" : "https://terminology.hl7.org/CodeSystem/v3-DataOperation", + "code" : "UPDATE" + } ] + } + } + } ] +} \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-9-test-value-cwe7.hl7 b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-9-test-value-cwe7.hl7 new file mode 100644 index 00000000000..5f3ffea2208 --- /dev/null +++ b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/cwe/codeable-concept/cwe-9-test-value-cwe7.hl7 @@ -0,0 +1,2 @@ +MSH|^~\&#|||||20230501102531-0400||ORU^R01^ORU_R01|12345||2.5.1|||||USA|UNICODE UTF-8 +PID|1|||||||||^^^^^^PrimaryVersion \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/orur01/oru_r01-full.fhir b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/orur01/oru_r01-full.fhir new file mode 100644 index 00000000000..2b6f801d879 --- /dev/null +++ b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/orur01/oru_r01-full.fhir @@ -0,0 +1,3206 @@ +{ + "resourceType" : "Bundle", + "id" : "1713403050231945000.37598ff5-3c2e-4da0-8f9e-b72147aa17b9", + "meta" : { + "lastUpdated" : "2024-04-17T19:17:30.243-06:00" + }, + "identifier" : { + "system" : "https://reportstream.cdc.gov/prime-router", + "value" : "3015894743_04608717_11184" + }, + "type" : "message", + "timestamp" : "2023-08-02T16:08:02.000-06:00", + "entry" : [ { + "fullUrl" : "MessageHeader/8565cf64-832b-3438-bb11-99d9ac964bc1", + "resource" : { + "resourceType" : "MessageHeader", + "id" : "8565cf64-832b-3438-bb11-99d9ac964bc1", + "meta" : { + "tag" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/v2-0103", + "code" : "T" + } ] + }, + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/encoding-characters", + "valueString" : "^~\\&#" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/msh-message-header", + "extension" : [ { + "url" : "MSH.7", + "valueString" : "20230802180802-0400" + }, { + "url" : "MSH.10", + "valueString" : "3015894743_04608717_11184" + }, { + "url" : "MSH.15", + "valueString" : "NE" + }, { + "url" : "MSH.16", + "valueString" : "NE" + }, { + "url" : "MSH.21", + "valueIdentifier" : { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", + "valueString" : "PHIN" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", + "valueString" : "2.16.840.1.113883.9.11" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", + "valueCode" : "ISO" + } ] + } ], + "value" : "PHLabReport-NoAck" + } + } ] + } ], + "eventCoding" : { + "system" : "http://terminology.hl7.org/CodeSystem/v2-0003", + "code" : "R01", + "display" : "ORU^R01^ORU_R01" + }, + "destination" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", + "valueString" : "2.16.840.1.114222.4.3.3.10.1.1" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", + "valueString" : "ISO" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", + "valueString" : "MSH.5" + } ], + "name" : "CDPH CA CALREDIE", + "endpoint" : "urn:oid:2.16.840.1.114222.4.3.3.10.1.1", + "receiver" : { + "reference" : "Organization/1713403050343101000.3dbdf426-2aae-472e-ad3a-f0f2641895f9" + } + } ], + "sender" : { + "reference" : "Organization/1713403050331033000.32003012-401a-42a0-a78b-2baea0650751" + }, + "source" : { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", + "valueString" : "STARLIMS.CDC.Stag" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", + "valueString" : "2.16.840.1.114222.4.3.3.2.1.2" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", + "valueString" : "ISO" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", + "valueString" : "MSH.3" + } ], + "software" : "STARLIMS", + "version" : "ELIMS V11", + "endpoint" : "urn:oid:2.16.840.1.114222.4.3.3.2.1.2" + } + } + }, { + "fullUrl" : "Organization/1713403050331033000.32003012-401a-42a0-a78b-2baea0650751", + "resource" : { + "resourceType" : "Organization", + "id" : "1713403050331033000.32003012-401a-42a0-a78b-2baea0650751", + "identifier" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", + "valueString" : "HD.1" + } ], + "value" : "CDC Atlanta" + }, { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", + "valueString" : "HD.2,HD.3" + } ], + "type" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/v2-0301", + "code" : "CLIA" + } ] + }, + "value" : "11D0668319" + } ], + "address" : [ { + "country" : "USA" + } ] + } + }, { + "fullUrl" : "Organization/1713403050343101000.3dbdf426-2aae-472e-ad3a-f0f2641895f9", + "resource" : { + "resourceType" : "Organization", + "id" : "1713403050343101000.3dbdf426-2aae-472e-ad3a-f0f2641895f9", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", + "valueString" : "MSH.6" + } ], + "identifier" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", + "valueString" : "HD.1" + } ], + "value" : "CDPH_CID" + }, { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", + "valueString" : "HD.2,HD.3" + } ], + "type" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/v2-0301", + "code" : "ISO" + } ] + }, + "system" : "urn:ietf:rfc:3986", + "value" : "2.16.840.1.114222.4.1.2.14104" + } ] + } + }, { + "fullUrl" : "Provenance/1713403050863906000.1ffcec14-c987-4f63-b117-0a799879de4f", + "resource" : { + "resourceType" : "Provenance", + "id" : "1713403050863906000.1ffcec14-c987-4f63-b117-0a799879de4f", + "target" : [ { + "reference" : "MessageHeader/8565cf64-832b-3438-bb11-99d9ac964bc1" + }, { + "reference" : "DiagnosticReport/1713403051336018000.fd7f6056-c0f8-40c2-b300-271da14337dc" + }, { + "reference" : "DiagnosticReport/1713403051340875000.6f3e2afa-c3c0-4a44-9fec-ccd43571021d" + } ], + "recorded" : "2023-08-02T18:08:02-04:00", + "activity" : { + "coding" : [ { + "display" : "ORU^R01^ORU_R01" + } ] + }, + "agent" : [ { + "type" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/provenance-participant-type", + "code" : "author" + } ] + }, + "who" : { + "reference" : "Organization/1713403050862373000.078a14c9-f572-42b5-a717-8bb5bb271c39" + } + } ], + "entity" : [ { + "role" : "source", + "what" : { + "reference" : "Device/1713403050870543000.d0f12caf-fc2c-4820-9d6d-35b7f5036190" + } + } ] + } + }, { + "fullUrl" : "Organization/1713403050862373000.078a14c9-f572-42b5-a717-8bb5bb271c39", + "resource" : { + "resourceType" : "Organization", + "id" : "1713403050862373000.078a14c9-f572-42b5-a717-8bb5bb271c39", + "identifier" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", + "valueString" : "HD.1" + } ], + "value" : "CDC Atlanta" + }, { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", + "valueString" : "HD.2,HD.3" + } ], + "type" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/v2-0301", + "code" : "CLIA" + } ] + }, + "value" : "11D0668319" + } ] + } + }, { + "fullUrl" : "Organization/1713403050869960000.0fcb853f-2d22-4349-89c8-398049128d87", + "resource" : { + "resourceType" : "Organization", + "id" : "1713403050869960000.0fcb853f-2d22-4349-89c8-398049128d87", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/xon-organization", + "extension" : [ { + "url" : "XON.10", + "valueString" : "CDC CLIA" + } ] + } ], + "identifier" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", + "valueString" : "CDC" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", + "valueString" : "2.16.840.1.114222.4" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", + "valueCode" : "ISO" + } ] + } ], + "type" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/v2-0203", + "code" : "XX" + } ] + }, + "value" : "CDC CLIA" + } ], + "name" : "CDC" + } + }, { + "fullUrl" : "Device/1713403050870543000.d0f12caf-fc2c-4820-9d6d-35b7f5036190", + "resource" : { + "resourceType" : "Device", + "id" : "1713403050870543000.d0f12caf-fc2c-4820-9d6d-35b7f5036190", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/software-vendor-org", + "valueReference" : { + "reference" : "Organization/1713403050869960000.0fcb853f-2d22-4349-89c8-398049128d87" + } + } ], + "manufacturer" : "CDC", + "deviceName" : [ { + "name" : "STARLIMS", + "type" : "manufacturer-name" + } ], + "modelNumber" : "Binary ID unknown", + "version" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/software-install-date", + "valueDateTime" : "2023-08-02T18:08:02-04:00", + "_valueDateTime" : { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2-date-time", + "valueString" : "20230802180802-0400" + } ] + } + } ], + "value" : "ELIMS V11" + } ], + "note" : [ { + "text" : "test" + } ] + } + }, { + "fullUrl" : "Provenance/1713403050882896000.41cd7cce-74c7-4c60-a5a4-e75f0fa0f7fe", + "resource" : { + "resourceType" : "Provenance", + "id" : "1713403050882896000.41cd7cce-74c7-4c60-a5a4-e75f0fa0f7fe", + "recorded" : "2024-04-17T19:17:30Z", + "policy" : [ "http://hl7.org/fhir/uv/v2mappings/message-oru-r01-to-bundle" ], + "activity" : { + "coding" : [ { + "code" : "v2-FHIR transformation" + } ] + }, + "agent" : [ { + "type" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/provenance-participant-type", + "code" : "assembler" + } ] + }, + "who" : { + "reference" : "Organization/1713403050882208000.5d10a164-3502-4cbf-83fb-9ec0dd5c9a4b" + } + } ] + } + }, { + "fullUrl" : "Organization/1713403050882208000.5d10a164-3502-4cbf-83fb-9ec0dd5c9a4b", + "resource" : { + "resourceType" : "Organization", + "id" : "1713403050882208000.5d10a164-3502-4cbf-83fb-9ec0dd5c9a4b", + "identifier" : [ { + "value" : "CDC PRIME - Atlanta" + }, { + "type" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/v2-0301" + } ] + }, + "system" : "urn:ietf:rfc:3986", + "value" : "2.16.840.1.114222.4.1.237821" + } ] + } + }, { + "fullUrl" : "Patient/1713403050914425000.2377f845-bff3-4cc8-993f-4c9af35a7a0f", + "resource" : { + "resourceType" : "Patient", + "id" : "1713403050914425000.2377f845-bff3-4cc8-993f-4c9af35a7a0f", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/patient-notes", + "valueAnnotation" : { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/note-type", + "valueCodeableConcept" : { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/coding-system-oid", + "valueOid" : "urn:oid:2.16.840.1.113883.12.364" + } ], + "coding" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", + "valueString" : "coding" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", + "valueString" : "HL70364" + } ], + "version" : "2.5.1", + "code" : "RE", + "display" : "Remark" + } ] + } + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/note-comment", + "valueId" : "Accession level coment." + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/note-source", + "valueId" : "L" + } ], + "text" : "Accession level coment." + } + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/patient-notes", + "valueAnnotation" : { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/note-type", + "valueCodeableConcept" : { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/coding-system-oid", + "valueOid" : "urn:oid:2.16.840.1.113883.12.364" + } ], + "coding" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", + "valueString" : "coding" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", + "valueString" : "HL70364" + } ], + "version" : "2.5.1", + "code" : "RE", + "display" : "Remark" + } ] + } + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/note-comment", + "valueId" : "SPHL Submitter: CDPH, Viral and Rickettsial Disease Laboratory, Submitter ID: SPHL-000048, Address: 850 Marina Bay Parkway Rm. E-361 Richmond, California 94804 United States, Email: VRDL.Mail@cdph.ca.gov, Submitter Patient ID: PID123, Submitter Alt Patient ID: AltPID1234, Submitter Specimen ID: Specimen123, Submitter Alt Specimen ID: AltSP1234" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/note-source", + "valueId" : "L" + } ], + "text" : "SPHL Submitter: CDPH, Viral and Rickettsial Disease Laboratory, Submitter ID: SPHL-000048, Address: 850 Marina Bay Parkway Rm. E-361 Richmond, California 94804 United States, Email: VRDL.Mail@cdph.ca.gov, Submitter Patient ID: PID123, Submitter Alt Patient ID: AltPID1234, Submitter Specimen ID: Specimen123, Submitter Alt Specimen ID: AltSP1234" + } + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/pid-patient", + "extension" : [ { + "url" : "PID.8", + "valueString" : "F" + } ] + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/studentStatus", + "valueString" : "F" + }, { + "url" : "http://hl7.org/fhir/StructureDefinition/patient-disability", + "valueString" : "T" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/livingWill", + "valueString" : "F" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/pd1-patient-additional-demographic", + "extension" : [ { + "url" : "PD1.1", + "valueString" : "C" + }, { + "url" : "PD1.2", + "valueString" : "A" + }, { + "url" : "PD1.8", + "valueString" : "F" + }, { + "url" : "PD1.9", + "valueString" : "N" + } ] + } ], + "identifier" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cx-identifier", + "extension" : [ { + "url" : "CX.5", + "valueString" : "PI" + } ] + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", + "valueString" : "PID.3" + } ], + "type" : { + "coding" : [ { + "code" : "PI" + } ] + }, + "system" : "STARLIMS.CDC.Stag", + "_system" : { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", + "valueString" : "STARLIMS.CDC.Stag" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", + "valueString" : "2.16.840.1.114222.4.3.3.2.1.2" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", + "valueString" : "ISO" + } ] + }, + "value" : "test" + }, { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cx-identifier", + "extension" : [ { + "url" : "CX.5", + "valueString" : "PI" + } ] + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", + "valueString" : "PID.3" + } ], + "type" : { + "coding" : [ { + "code" : "PI" + } ] + }, + "system" : "SPHL-000048", + "_system" : { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", + "valueString" : "SPHL-000048" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", + "valueString" : "2.16.840.1.114222.4.1.10765" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", + "valueString" : "ISO" + } ] + }, + "value" : "PID123" + } ], + "name" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/xpn-human-name", + "extension" : [ { + "url" : "XPN.2", + "valueString" : "HL7" + }, { + "url" : "XPN.3", + "valueString" : "MI" + }, { + "url" : "XPN.7", + "valueString" : "L" + } ] + } ], + "use" : "official", + "family" : "Mega", + "given" : [ "HL7", "MI" ] + } ], + "gender" : "female", + "_birthDate" : { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2-date-time", + "valueString" : "0000" + } ] + }, + "address" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/xad-address", + "extension" : [ { + "url" : "XAD.6", + "valueString" : "USA" + }, { + "url" : "XAD.7", + "valueCode" : "H" + } ] + } ], + "use" : "home", + "country" : "USA" + } ], + "contact" : [ { + "extension" : [ { + "url" : "https://hl7.org/fhir/StructureDefinition/relationship", + "valueCodeableConcept" : { + "coding" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", + "valueString" : "coding" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", + "valueString" : "HL70131" + } ], + "code" : "N", + "display" : "Next-of-Kin" + } ] + } + }, { + "url" : "https://hl7.org/fhir/StructureDefinition/relationship", + "valueCodeableConcept" : { + "coding" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", + "valueString" : "coding" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", + "valueString" : "HL70131" + } ], + "code" : "N", + "display" : "Next-of-Kin" + } ] + } + } ], + "name" : { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/xpn-human-name", + "extension" : [ { + "url" : "XPN.2", + "valueString" : "Leia" + } ] + } ], + "family" : "Organa", + "given" : [ "Leia" ] + } + } ], + "generalPractitioner" : [ { + "reference" : "Organization/1713403050895828000.a4ed17ae-0bda-46b0-8c64-2fff7bc74ff1" + }, { + "reference" : "Organization/1713403050898442000.21adeac7-d800-4cd9-b344-af1a98cf6bcc" + } ] + } + }, { + "fullUrl" : "Location/1713403050894716000.d2a03df1-45d8-40cf-8e84-00497cd987c8", + "resource" : { + "resourceType" : "Location", + "id" : "1713403050894716000.d2a03df1-45d8-40cf-8e84-00497cd987c8", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", + "valueCode" : "ISO" + } ], + "identifier" : [ { + "value" : "2.16.840.1.113883.9.11" + } ], + "name" : "Hospital A", + "physicalType" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/location-physical-type", + "code" : "si" + } ] + } + } + }, { + "fullUrl" : "Organization/1713403050895828000.a4ed17ae-0bda-46b0-8c64-2fff7bc74ff1", + "resource" : { + "resourceType" : "Organization", + "id" : "1713403050895828000.a4ed17ae-0bda-46b0-8c64-2fff7bc74ff1", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/organization-name-type", + "valueString" : "X" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/name-representation-code", + "valueString" : "NameRepCode" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/xon-organization", + "extension" : [ { + "url" : "XON.3", + "valueString" : "123" + }, { + "url" : "XON.10", + "valueString" : "OrgIdentifier" + } ] + } ], + "identifier" : [ { + "extension" : [ { + "url" : "http://hl7.org/fhir/StructureDefinition/identifier-checkDigit", + "valueString" : "Check Digit" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", + "valueString" : "Assigning Authority" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", + "valueString" : "2.1.4.1" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", + "valueCode" : "ISO" + } ] + }, { + "url" : "http://hl7.org/fhir/StructureDefinition/namingsystem-checkDigit", + "valueCode" : "C1" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/identifier-location", + "valueReference" : { + "reference" : "Location/1713403050894716000.d2a03df1-45d8-40cf-8e84-00497cd987c8" + } + } ], + "type" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/v2-0203", + "code" : "MD" + } ] + }, + "value" : "OrgIdentifier" + } ], + "name" : "Ordering Facility" + } + }, { + "fullUrl" : "Location/1713403050897351000.fbb0e514-9816-4355-8f9d-6a3e59f9b9e5", + "resource" : { + "resourceType" : "Location", + "id" : "1713403050897351000.fbb0e514-9816-4355-8f9d-6a3e59f9b9e5", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", + "valueCode" : "ISO" + } ], + "identifier" : [ { + "value" : "2.16.840.1.113883.9.11" + } ], + "name" : "Hospital A", + "physicalType" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/location-physical-type", + "code" : "si" + } ] + } + } + }, { + "fullUrl" : "Organization/1713403050898442000.21adeac7-d800-4cd9-b344-af1a98cf6bcc", + "resource" : { + "resourceType" : "Organization", + "id" : "1713403050898442000.21adeac7-d800-4cd9-b344-af1a98cf6bcc", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/organization-name-type", + "valueString" : "X" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/name-representation-code", + "valueString" : "NameRepCode" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/xon-organization", + "extension" : [ { + "url" : "XON.3", + "valueString" : "123" + }, { + "url" : "XON.10", + "valueString" : "OrgIdentifier" + } ] + } ], + "identifier" : [ { + "extension" : [ { + "url" : "http://hl7.org/fhir/StructureDefinition/identifier-checkDigit", + "valueString" : "Check Digit" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", + "valueString" : "Assigning Authority" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", + "valueString" : "2.1.4.1" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", + "valueCode" : "ISO" + } ] + }, { + "url" : "http://hl7.org/fhir/StructureDefinition/namingsystem-checkDigit", + "valueCode" : "C1" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/identifier-location", + "valueReference" : { + "reference" : "Location/1713403050897351000.fbb0e514-9816-4355-8f9d-6a3e59f9b9e5" + } + } ], + "type" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/v2-0203", + "code" : "MD" + } ] + }, + "value" : "OrgIdentifier" + } ], + "name" : "Ordering Facility" + } + }, { + "fullUrl" : "Provenance/1713403050924731000.deeb0618-78d4-4c66-b374-ec32bb2509b1", + "resource" : { + "resourceType" : "Provenance", + "id" : "1713403050924731000.deeb0618-78d4-4c66-b374-ec32bb2509b1", + "target" : [ { + "reference" : "Patient/1713403050914425000.2377f845-bff3-4cc8-993f-4c9af35a7a0f" + } ], + "recorded" : "2024-04-17T19:17:30Z", + "activity" : { + "coding" : [ { + "system" : "https://terminology.hl7.org/CodeSystem/v3-DataOperation", + "code" : "UPDATE" + } ] + } + } + }, { + "fullUrl" : "RelatedPerson/1713403050927052000.386f7345-bc28-44bf-9f8f-acccfd9f9060", + "resource" : { + "resourceType" : "RelatedPerson", + "id" : "1713403050927052000.386f7345-bc28-44bf-9f8f-acccfd9f9060", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Segment", + "valueString" : "NK1" + } ], + "patient" : { + "reference" : "Patient/1713403050914425000.2377f845-bff3-4cc8-993f-4c9af35a7a0f" + }, + "relationship" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", + "valueString" : "NK1.3" + } ], + "coding" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", + "valueString" : "coding" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", + "valueString" : "HL70131" + } ], + "code" : "N", + "display" : "Next-of-Kin" + } ] + } ], + "name" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", + "valueString" : "NK1.2" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/xpn-human-name", + "extension" : [ { + "url" : "XPN.2", + "valueString" : "Leia" + } ] + } ], + "family" : "Organa", + "given" : [ "Leia" ] + } ] + } + }, { + "fullUrl" : "RelatedPerson/1713403050929112000.442ffb28-e33e-46bd-ae07-a9ed338659b2", + "resource" : { + "resourceType" : "RelatedPerson", + "id" : "1713403050929112000.442ffb28-e33e-46bd-ae07-a9ed338659b2", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Segment", + "valueString" : "NK1" + } ], + "patient" : { + "reference" : "Patient/1713403050914425000.2377f845-bff3-4cc8-993f-4c9af35a7a0f" + }, + "relationship" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", + "valueString" : "NK1.3" + } ], + "coding" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", + "valueString" : "coding" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", + "valueString" : "HL70131" + } ], + "code" : "N", + "display" : "Next-of-Kin" + } ] + } ], + "name" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", + "valueString" : "NK1.2" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/xpn-human-name", + "extension" : [ { + "url" : "XPN.2", + "valueString" : "Liz" + } ] + } ], + "family" : "Navarro", + "given" : [ "Liz" ] + } ] + } + }, { + "fullUrl" : "Encounter/1713403050935347000.29dad495-b015-407e-b9d2-6932551884bc", + "resource" : { + "resourceType" : "Encounter", + "id" : "1713403050935347000.29dad495-b015-407e-b9d2-6932551884bc", + "subject" : { + "reference" : "Patient/1713403050914425000.2377f845-bff3-4cc8-993f-4c9af35a7a0f" + }, + "location" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", + "valueString" : "PV1.6" + } ], + "location" : { + "reference" : "Location/1713403050935076000.9d241b09-eb74-4b9c-b9c1-b3edf87edd08" + }, + "status" : "completed" + } ] + } + }, { + "fullUrl" : "Organization/1713403050934505000.6c008ec6-42f1-4ca4-bd70-d29ea8db8023", + "resource" : { + "resourceType" : "Organization", + "id" : "1713403050934505000.6c008ec6-42f1-4ca4-bd70-d29ea8db8023", + "identifier" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", + "valueString" : "EI.2" + } ], + "value" : "NAME" + }, { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", + "valueString" : "EI.3,EI.4" + } ], + "type" : { + "coding" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/codeable-concept-id", + "valueBoolean" : true + } ], + "code" : "ISO" + } ] + }, + "value" : "UNI" + } ] + } + }, { + "fullUrl" : "Location/1713403050935076000.9d241b09-eb74-4b9c-b9c1-b3edf87edd08", + "resource" : { + "resourceType" : "Location", + "id" : "1713403050935076000.9d241b09-eb74-4b9c-b9c1-b3edf87edd08", + "identifier" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", + "valueString" : "HD.1" + } ], + "value" : "Hospital A" + }, { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", + "valueString" : "HD.2,HD.3" + } ], + "type" : { + "coding" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/codeable-concept-id", + "valueBoolean" : true + } ], + "code" : "ISO" + } ] + }, + "value" : "2.4.4.4" + }, { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/ei-assigner-organization-type", + "valueString" : "default" + } ], + "value" : "Entity ID", + "assigner" : { + "reference" : "Organization/1713403050934505000.6c008ec6-42f1-4ca4-bd70-d29ea8db8023" + } + } ], + "mode" : "instance", + "physicalType" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/location-physical-type", + "code" : "si" + } ] + } + } + }, { + "fullUrl" : "Observation/1713403051220745000.63ea27ea-0464-4655-af30-fb9bec820cd7", + "resource" : { + "resourceType" : "Observation", + "id" : "1713403051220745000.63ea27ea-0464-4655-af30-fb9bec820cd7", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/obx-observation", + "extension" : [ { + "url" : "OBX.2", + "valueId" : "CWE" + }, { + "url" : "OBX.11", + "valueString" : "F" + } ] + } ], + "status" : "final", + "code" : { + "coding" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", + "valueString" : "coding" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", + "valueString" : "LN" + } ], + "system" : "http://loinc.org", + "code" : "80383-3", + "display" : "Flu B" + } ] + }, + "subject" : { + "reference" : "Patient/1713403050914425000.2377f845-bff3-4cc8-993f-4c9af35a7a0f" + }, + "encounter" : { + "reference" : "Encounter/1713403050935347000.29dad495-b015-407e-b9d2-6932551884bc" + }, + "performer" : [ { + "reference" : "Organization/1713403051221822000.58493b41-e902-412c-a597-ae70d2ad2958" + }, { + "reference" : "Organization/1713403051224115000.9bd8da63-880c-4132-a775-7fddca3d01e1" + } ], + "valueCodeableConcept" : { + "coding" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", + "valueString" : "coding" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", + "valueString" : "SCT" + } ], + "system" : "http://snomed.info/sct", + "code" : "260415000", + "display" : "Not detected" + } ] + }, + "interpretation" : [ { + "coding" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", + "valueString" : "coding" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", + "valueString" : "HL70078" + } ], + "version" : "2.7", + "code" : "N", + "display" : "Normal" + } ] + } ] + } + }, { + "fullUrl" : "Organization/1713403051221822000.58493b41-e902-412c-a597-ae70d2ad2958", + "resource" : { + "resourceType" : "Organization", + "id" : "1713403051221822000.58493b41-e902-412c-a597-ae70d2ad2958", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-organization", + "valueCodeableConcept" : { + "coding" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", + "valueString" : "coding" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", + "valueString" : "CLIA" + } ], + "code" : "11D1111111", + "display" : "CSV uploads" + } ] + } + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", + "valueString" : "OBX.15" + } ], + "identifier" : [ { + "system" : "CLIA", + "value" : "11D1111111" + } ], + "name" : "CSV uploads" + } + }, { + "fullUrl" : "Organization/1713403051224115000.9bd8da63-880c-4132-a775-7fddca3d01e1", + "resource" : { + "resourceType" : "Organization", + "id" : "1713403051224115000.9bd8da63-880c-4132-a775-7fddca3d01e1", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/organization-name-type", + "valueString" : "L" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/xon-organization", + "extension" : [ { + "url" : "XON.10", + "valueString" : "11D1111111" + } ] + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", + "valueString" : "OBX.25" + } ], + "identifier" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", + "valueString" : "CLIA" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", + "valueString" : "2.16.840.1.113883.4.7" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", + "valueCode" : "ISO" + } ] + } ], + "type" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/v2-0203", + "code" : "XX" + } ] + }, + "value" : "11D1111111" + } ], + "name" : "CSV uploads-11D1111111", + "address" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/xad-address", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/sad-address-line", + "extension" : [ { + "url" : "SAD.1", + "valueString" : "123 Main St" + } ] + }, { + "url" : "XAD.6", + "valueString" : "USA" + } ] + } ], + "line" : [ "123 Main St" ], + "state" : "CA", + "postalCode" : "94553", + "country" : "USA" + } ] + } + }, { + "fullUrl" : "Observation/1713403051229443000.1250993d-331f-4cd5-9245-785817d2b937", + "resource" : { + "resourceType" : "Observation", + "id" : "1713403051229443000.1250993d-331f-4cd5-9245-785817d2b937", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/obx-observation", + "extension" : [ { + "url" : "OBX.2", + "valueId" : "CWE" + }, { + "url" : "OBX.11", + "valueString" : "F" + }, { + "url" : "OBX.17", + "valueCodeableConcept" : { + "text" : "BD Veritor System for Rapid Detection of SARS-CoV-2 & Flu A+B*" + } + } ] + } ], + "status" : "final", + "code" : { + "coding" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", + "valueString" : "coding" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", + "valueString" : "LN" + } ], + "system" : "http://loinc.org", + "code" : "80382-5", + "display" : "Flu A" + } ] + }, + "subject" : { + "reference" : "Patient/1713403050914425000.2377f845-bff3-4cc8-993f-4c9af35a7a0f" + }, + "encounter" : { + "reference" : "Encounter/1713403050935347000.29dad495-b015-407e-b9d2-6932551884bc" + }, + "performer" : [ { + "reference" : "Organization/1713403051230793000.6f20095e-6f2a-43a7-9979-d9c59d5cef26" + }, { + "reference" : "Organization/1713403051232819000.52237f95-65b3-4ed2-80e5-c391e40c0145" + } ], + "valueCodeableConcept" : { + "coding" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", + "valueString" : "coding" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", + "valueString" : "SCT" + } ], + "system" : "http://snomed.info/sct", + "code" : "260373001", + "display" : "Detected" + } ] + }, + "interpretation" : [ { + "coding" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", + "valueString" : "coding" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", + "valueString" : "HL70078" + } ], + "version" : "2.7", + "code" : "A", + "display" : "Abnormal" + } ] + } ], + "method" : { + "text" : "BD Veritor System for Rapid Detection of SARS-CoV-2 & Flu A+B*" + } + } + }, { + "fullUrl" : "Organization/1713403051230793000.6f20095e-6f2a-43a7-9979-d9c59d5cef26", + "resource" : { + "resourceType" : "Organization", + "id" : "1713403051230793000.6f20095e-6f2a-43a7-9979-d9c59d5cef26", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-organization", + "valueCodeableConcept" : { + "coding" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", + "valueString" : "coding" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", + "valueString" : "CLIA" + } ], + "code" : "11D1111111", + "display" : "CSV uploads" + } ] + } + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", + "valueString" : "OBX.15" + } ], + "identifier" : [ { + "system" : "CLIA", + "value" : "11D1111111" + } ], + "name" : "CSV uploads" + } + }, { + "fullUrl" : "Organization/1713403051232819000.52237f95-65b3-4ed2-80e5-c391e40c0145", + "resource" : { + "resourceType" : "Organization", + "id" : "1713403051232819000.52237f95-65b3-4ed2-80e5-c391e40c0145", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/organization-name-type", + "valueString" : "L" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/xon-organization", + "extension" : [ { + "url" : "XON.10", + "valueString" : "11D1111111" + } ] + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", + "valueString" : "OBX.25" + } ], + "identifier" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", + "valueString" : "CLIA" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", + "valueString" : "2.16.840.1.113883.4.7" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", + "valueCode" : "ISO" + } ] + } ], + "type" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/v2-0203", + "code" : "XX" + } ] + }, + "value" : "11D1111111" + } ], + "name" : "CSV uploads-11D1111111", + "address" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/xad-address", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/sad-address-line", + "extension" : [ { + "url" : "SAD.1", + "valueString" : "123 Main St" + } ] + }, { + "url" : "XAD.6", + "valueString" : "USA" + } ] + } ], + "line" : [ "123 Main St" ], + "state" : "CA", + "postalCode" : "94553", + "country" : "USA" + } ] + } + }, { + "fullUrl" : "Observation/1713403051238711000.862015cc-9666-45f1-abcb-072c55b08a5e", + "resource" : { + "resourceType" : "Observation", + "id" : "1713403051238711000.862015cc-9666-45f1-abcb-072c55b08a5e", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/sub-id", + "valueString" : "ZZYGNAUM-1" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/analysis-date-time", + "valueDateTime" : "2023-07-27T18:30:17-04:00", + "_valueDateTime" : { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2-date-time", + "valueString" : "20230727183017-0400" + } ] + } + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/obx-observation", + "extension" : [ { + "url" : "OBX.2", + "valueId" : "CWE" + }, { + "url" : "OBX.11", + "valueString" : "F" + } ] + } ], + "status" : "final", + "code" : { + "coding" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", + "valueString" : "coding" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", + "valueString" : "LN" + } ], + "system" : "http://loinc.org", + "version" : "2.74", + "code" : "100383-9", + "display" : "MVPX DNA Spec Ql NAA+probe" + }, { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", + "valueString" : "alt-coding" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", + "valueString" : "L" + } ], + "system" : "https://terminology.hl7.org/CodeSystem-v2-0396.html#v2-0396-99zzzorL", + "version" : "v_unknown", + "code" : "3900", + "display" : "Monkeypox generic" + } ], + "text" : "Monkeypox generic" + }, + "subject" : { + "reference" : "Patient/1713403050914425000.2377f845-bff3-4cc8-993f-4c9af35a7a0f" + }, + "encounter" : { + "reference" : "Encounter/1713403050935347000.29dad495-b015-407e-b9d2-6932551884bc" + }, + "effectiveDateTime" : "2023-07-24T15:24:00Z", + "_effectiveDateTime" : { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2-date-time", + "valueString" : "202307241524" + } ] + }, + "performer" : [ { + "reference" : "Organization/1713403051239999000.eef9dde6-46ec-41c1-903c-ec65f3ae7995" + }, { + "reference" : "PractitionerRole/1713403051240496000.525c59cd-acee-4a4a-a87c-2a9913e46736" + }, { + "reference" : "Organization/1713403051243854000.07213aa7-9756-42de-9e29-b0017559ce92" + } ], + "valueCodeableConcept" : { + "coding" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", + "valueString" : "coding" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", + "valueString" : "SCT" + } ], + "system" : "http://snomed.info/sct", + "version" : "09012018", + "code" : "10828004", + "display" : "Positive" + } ], + "text" : "Positive" + }, + "note" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/note-type", + "valueCodeableConcept" : { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/coding-system-oid", + "valueOid" : "urn:oid:2.16.840.1.113883.12.364" + } ], + "coding" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", + "valueString" : "coding" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", + "valueString" : "HL70364" + } ], + "version" : "2.5.1", + "code" : "RE", + "display" : "Remark" + } ] + } + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/note-comment", + "valueId" : "Run level Comment" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/note-source", + "valueId" : "L" + } ], + "text" : "Run level Comment" + }, { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/note-type", + "valueCodeableConcept" : { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/coding-system-oid", + "valueOid" : "urn:oid:2.16.840.1.113883.12.364" + } ], + "coding" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", + "valueString" : "coding" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", + "valueString" : "HL70364" + } ], + "version" : "2.5.1", + "code" : "RE", + "display" : "Remark" + } ] + } + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/note-comment", + "valueId" : "Result level Comment." + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/note-source", + "valueId" : "L" + } ], + "text" : "Result level Comment." + } ] + } + }, { + "fullUrl" : "Organization/1713403051239999000.eef9dde6-46ec-41c1-903c-ec65f3ae7995", + "resource" : { + "resourceType" : "Organization", + "id" : "1713403051239999000.eef9dde6-46ec-41c1-903c-ec65f3ae7995", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-organization", + "valueCodeableConcept" : { + "coding" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", + "valueString" : "coding" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", + "valueString" : "CLIA" + } ], + "code" : "11D0668319", + "display" : "Centers for Disease Control and Prevention" + }, { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", + "valueString" : "alt-coding" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", + "valueString" : "L" + } ], + "system" : "https://terminology.hl7.org/CodeSystem-v2-0396.html#v2-0396-99zzzorL", + "code" : "47", + "display" : "Poxvirus Laboratory/Poxvirus and Rabies Branch" + } ] + } + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", + "valueString" : "OBX.15" + } ], + "identifier" : [ { + "system" : "CLIA", + "value" : "11D0668319" + } ], + "name" : "Centers for Disease Control and Prevention" + } + }, { + "fullUrl" : "Practitioner/1713403051241480000.0ed7f46b-85b6-41c7-b385-d19389df5f92", + "resource" : { + "resourceType" : "Practitioner", + "id" : "1713403051241480000.0ed7f46b-85b6-41c7-b385-d19389df5f92", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/xcn-practitioner", + "extension" : [ { + "url" : "XCN.3", + "valueString" : "Christopher" + } ] + } ], + "identifier" : [ { + "value" : "NXQ0@cdc.gov" + } ], + "name" : [ { + "family" : "Anderson", + "given" : [ "Christopher" ] + } ] + } + }, { + "fullUrl" : "PractitionerRole/1713403051240496000.525c59cd-acee-4a4a-a87c-2a9913e46736", + "resource" : { + "resourceType" : "PractitionerRole", + "id" : "1713403051240496000.525c59cd-acee-4a4a-a87c-2a9913e46736", + "practitioner" : { + "reference" : "Practitioner/1713403051241480000.0ed7f46b-85b6-41c7-b385-d19389df5f92" + }, + "code" : [ { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/practitioner-role", + "code" : "responsibleObserver" + } ] + } ] + } + }, { + "fullUrl" : "Organization/1713403051243854000.07213aa7-9756-42de-9e29-b0017559ce92", + "resource" : { + "resourceType" : "Organization", + "id" : "1713403051243854000.07213aa7-9756-42de-9e29-b0017559ce92", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/organization-name-type", + "valueString" : "L" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/xon-organization", + "extension" : [ { + "url" : "XON.10", + "valueString" : "11D0668319" + } ] + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", + "valueString" : "OBX.25" + } ], + "identifier" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", + "valueString" : "CLIA" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", + "valueString" : "2.16.840.1.113883.4.7" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", + "valueCode" : "ISO" + } ] + } ], + "type" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/v2-0203", + "code" : "XX" + } ] + }, + "value" : "11D0668319" + } ], + "name" : "Centers for Disease Control and Prevention", + "address" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/xad-address", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/sad-address-line", + "extension" : [ { + "url" : "SAD.1", + "valueString" : "1600 Clifton Rd" + } ] + }, { + "url" : "XAD.6", + "valueString" : "USA" + }, { + "url" : "XAD.7", + "valueCode" : "B" + } ] + } ], + "use" : "work", + "line" : [ "1600 Clifton Rd" ], + "city" : "Atlanta", + "state" : "GA", + "postalCode" : "30329", + "country" : "USA" + } ] + } + }, { + "fullUrl" : "Specimen/1713403051254672000.92ee87d5-8ebf-4178-8a57-345571255c97", + "resource" : { + "resourceType" : "Specimen", + "id" : "1713403051254672000.92ee87d5-8ebf-4178-8a57-345571255c97", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Segment", + "valueString" : "OBR" + } ] + } + }, { + "fullUrl" : "Specimen/1713403051254890000.304173c5-92a5-4aa7-bd9c-b2246c6c9e75", + "resource" : { + "resourceType" : "Specimen", + "id" : "1713403051254890000.304173c5-92a5-4aa7-bd9c-b2246c6c9e75", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Segment", + "valueString" : "OBR" + } ] + } + }, { + "fullUrl" : "Specimen/1713403051257732000.6da0d711-68e7-48bd-b43e-5d77757fe708", + "resource" : { + "resourceType" : "Specimen", + "id" : "1713403051257732000.6da0d711-68e7-48bd-b43e-5d77757fe708", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Segment", + "valueString" : "SPM" + } ], + "identifier" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", + "valueString" : "SPHL-000048" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", + "valueString" : "2.16.840.1.114222.4.1.10765" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", + "valueString" : "ISO" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/filler-assigned-identifier", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/entity-identifier", + "valueString" : "3015894743" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", + "valueString" : "STARLIMS.CDC.Stag" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", + "valueString" : "2.16.840.1.114222.4.3.3.2.1.2" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", + "valueString" : "ISO" + } ] + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Component", + "valueString" : "SPM.2.1" + } ], + "type" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/v2-0203", + "code" : "PGN" + } ] + }, + "value" : "Specimen123" + }, { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", + "valueString" : "STARLIMS.CDC.Stag" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", + "valueString" : "2.16.840.1.114222.4.3.3.2.1.2" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", + "valueString" : "ISO" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/placer-assigned-identifier", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/entity-identifier", + "valueString" : "Specimen123" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", + "valueString" : "SPHL-000048" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", + "valueString" : "2.16.840.1.114222.4.1.10765" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", + "valueString" : "ISO" + } ] + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Component", + "valueString" : "SPM.2.2" + } ], + "type" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/v2-0203", + "code" : "FGN" + } ] + }, + "value" : "3015894743" + } ], + "type" : { + "coding" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", + "valueString" : "coding" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", + "valueString" : "SCT" + } ], + "system" : "http://snomed.info/sct", + "version" : "0912017", + "code" : "119297000", + "display" : "Blood specimen" + }, { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", + "valueString" : "alt-coding" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", + "valueString" : "L" + } ], + "system" : "https://terminology.hl7.org/CodeSystem-v2-0396.html#v2-0396-99zzzorL", + "version" : "Adobe_Code", + "code" : "BLD", + "display" : "Blood" + } ], + "text" : "Blood" + } + } + }, { + "fullUrl" : "Specimen/1713403051260879000.9cc26fd8-4137-4d80-849e-7b530ee8c24b", + "resource" : { + "resourceType" : "Specimen", + "id" : "1713403051260879000.9cc26fd8-4137-4d80-849e-7b530ee8c24b", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Segment", + "valueString" : "SPM" + } ], + "identifier" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", + "valueString" : "SPHL-000048" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", + "valueString" : "2.16.840.1.114222.4.1.10765" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", + "valueString" : "ISO" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/filler-assigned-identifier", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/entity-identifier", + "valueString" : "3015894743" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", + "valueString" : "STARLIMS.CDC.Stag" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", + "valueString" : "2.16.840.1.114222.4.3.3.2.1.2" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", + "valueString" : "ISO" + } ] + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Component", + "valueString" : "SPM.2.1" + } ], + "type" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/v2-0203", + "code" : "PGN" + } ] + }, + "value" : "Specimen123" + }, { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", + "valueString" : "STARLIMS.CDC.Stag" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", + "valueString" : "2.16.840.1.114222.4.3.3.2.1.2" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", + "valueString" : "ISO" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/placer-assigned-identifier", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/entity-identifier", + "valueString" : "Specimen123" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", + "valueString" : "SPHL-000048" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", + "valueString" : "2.16.840.1.114222.4.1.10765" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", + "valueString" : "ISO" + } ] + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Component", + "valueString" : "SPM.2.2" + } ], + "type" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/v2-0203", + "code" : "FGN" + } ] + }, + "value" : "3015894743" + } ], + "type" : { + "coding" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", + "valueString" : "coding" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", + "valueString" : "SCT" + } ], + "system" : "http://snomed.info/sct", + "version" : "0912017", + "code" : "119297000", + "display" : "Blood specimen" + }, { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", + "valueString" : "alt-coding" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", + "valueString" : "L" + } ], + "system" : "https://terminology.hl7.org/CodeSystem-v2-0396.html#v2-0396-99zzzorL", + "version" : "Adobe_Code", + "code" : "BLD", + "display" : "Blood" + } ], + "text" : "Blood" + } + } + }, { + "fullUrl" : "Observation/1713403051282055000.772aa683-9875-4d56-80ff-2d2b7b654051", + "resource" : { + "resourceType" : "Observation", + "id" : "1713403051282055000.772aa683-9875-4d56-80ff-2d2b7b654051", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/analysis-date-time", + "valueDateTime" : "2023-07-27T18:30:17Z", + "_valueDateTime" : { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2-date-time", + "valueString" : "20230727183017" + } ] + } + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/obx-5-value-sn", + "extension" : [ { + "url" : "SN.2", + "valueString" : "28" + } ] + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/obx-observation", + "extension" : [ { + "url" : "OBX.2", + "valueId" : "SN" + }, { + "url" : "OBX.6", + "valueCodeableConcept" : { + "coding" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", + "valueString" : "coding" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", + "valueString" : "UCUM" + } ], + "system" : "http://unitsofmeasure.org", + "version" : "2.1", + "code" : "a", + "display" : "Year" + } ] + } + }, { + "url" : "OBX.11", + "valueString" : "F" + } ] + } ], + "status" : "final", + "code" : { + "coding" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", + "valueString" : "coding" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", + "valueString" : "LN" + } ], + "system" : "http://loinc.org", + "version" : "2.61", + "code" : "21612-7", + "display" : "Reported Patient Age!!!" + } ] + }, + "subject" : { + "reference" : "Patient/1713403050914425000.2377f845-bff3-4cc8-993f-4c9af35a7a0f" + }, + "focus" : [ { + "reference" : "Specimen/1713403051257732000.6da0d711-68e7-48bd-b43e-5d77757fe708" + } ], + "encounter" : { + "reference" : "Encounter/1713403050935347000.29dad495-b015-407e-b9d2-6932551884bc" + }, + "effectiveDateTime" : "2023-07-24T15:24:00Z", + "_effectiveDateTime" : { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2-date-time", + "valueString" : "202307241524" + } ] + }, + "performer" : [ { + "reference" : "Organization/1713403051282826000.884371b3-052e-48b8-9bbe-a96cf87b2452" + }, { + "reference" : "Organization/1713403051284384000.6bbcbf89-8e13-48ea-a003-f77ebcffdd89" + } ] + } + }, { + "fullUrl" : "Organization/1713403051282826000.884371b3-052e-48b8-9bbe-a96cf87b2452", + "resource" : { + "resourceType" : "Organization", + "id" : "1713403051282826000.884371b3-052e-48b8-9bbe-a96cf87b2452", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-organization", + "valueCodeableConcept" : { + "coding" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", + "valueString" : "coding" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", + "valueString" : "CLIA" + } ], + "code" : "11D0668319", + "display" : "Centers for Disease Control and Prevention" + } ] + } + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", + "valueString" : "OBX.15" + } ], + "identifier" : [ { + "system" : "CLIA", + "value" : "11D0668319" + } ], + "name" : "Centers for Disease Control and Prevention" + } + }, { + "fullUrl" : "Organization/1713403051284384000.6bbcbf89-8e13-48ea-a003-f77ebcffdd89", + "resource" : { + "resourceType" : "Organization", + "id" : "1713403051284384000.6bbcbf89-8e13-48ea-a003-f77ebcffdd89", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/organization-name-type", + "valueString" : "L" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/xon-organization", + "extension" : [ { + "url" : "XON.10", + "valueString" : "11D0668319" + } ] + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", + "valueString" : "OBX.25" + } ], + "identifier" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", + "valueString" : "CLIA" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", + "valueString" : "2.16.840.1.113883.4.7" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", + "valueCode" : "ISO" + } ] + } ], + "type" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/v2-0203", + "code" : "XX" + } ] + }, + "value" : "11D0668319" + } ], + "name" : "Centers for Disease Control and Prevention", + "address" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/xad-address", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/sad-address-line", + "extension" : [ { + "url" : "SAD.1", + "valueString" : "1600 Clifton Road" + } ] + }, { + "url" : "XAD.6", + "valueString" : "USA" + }, { + "url" : "XAD.7", + "valueCode" : "B" + } ] + } ], + "use" : "work", + "line" : [ "1600 Clifton Road" ], + "city" : "Atlanta", + "state" : "GA", + "postalCode" : "30329", + "country" : "USA" + } ] + } + }, { + "fullUrl" : "Observation/1713403051288757000.7c43b4b9-e42b-432c-9431-1f3e316a977d", + "resource" : { + "resourceType" : "Observation", + "id" : "1713403051288757000.7c43b4b9-e42b-432c-9431-1f3e316a977d", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/analysis-date-time", + "valueDateTime" : "2023-07-27T18:30:17Z", + "_valueDateTime" : { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2-date-time", + "valueString" : "20230727183017" + } ] + } + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/obx-5-value-sn", + "extension" : [ { + "url" : "SN.2", + "valueString" : "28" + } ] + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/obx-observation", + "extension" : [ { + "url" : "OBX.2", + "valueId" : "SN" + }, { + "url" : "OBX.6", + "valueCodeableConcept" : { + "coding" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", + "valueString" : "coding" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", + "valueString" : "UCUM" + } ], + "system" : "http://unitsofmeasure.org", + "version" : "2.1", + "code" : "a", + "display" : "Year" + } ] + } + }, { + "url" : "OBX.11", + "valueString" : "F" + } ] + } ], + "status" : "final", + "code" : { + "coding" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", + "valueString" : "coding" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", + "valueString" : "LN" + } ], + "system" : "http://loinc.org", + "version" : "2.61", + "code" : "21612-7", + "display" : "Reported Patient Age???" + } ] + }, + "subject" : { + "reference" : "Patient/1713403050914425000.2377f845-bff3-4cc8-993f-4c9af35a7a0f" + }, + "focus" : [ { + "reference" : "Specimen/1713403051260879000.9cc26fd8-4137-4d80-849e-7b530ee8c24b" + } ], + "encounter" : { + "reference" : "Encounter/1713403050935347000.29dad495-b015-407e-b9d2-6932551884bc" + }, + "effectiveDateTime" : "2023-07-24T15:24:00Z", + "_effectiveDateTime" : { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2-date-time", + "valueString" : "202307241524" + } ] + }, + "performer" : [ { + "reference" : "Organization/1713403051289434000.87081c61-ca98-4f52-a551-ddbeb0b9950f" + }, { + "reference" : "Organization/1713403051290977000.694fec14-37dd-495e-a438-49217de44e6a" + } ] + } + }, { + "fullUrl" : "Organization/1713403051289434000.87081c61-ca98-4f52-a551-ddbeb0b9950f", + "resource" : { + "resourceType" : "Organization", + "id" : "1713403051289434000.87081c61-ca98-4f52-a551-ddbeb0b9950f", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-organization", + "valueCodeableConcept" : { + "coding" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", + "valueString" : "coding" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", + "valueString" : "CLIA" + } ], + "code" : "11D0668319", + "display" : "Centers for Disease Control and Prevention" + } ] + } + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", + "valueString" : "OBX.15" + } ], + "identifier" : [ { + "system" : "CLIA", + "value" : "11D0668319" + } ], + "name" : "Centers for Disease Control and Prevention" + } + }, { + "fullUrl" : "Organization/1713403051290977000.694fec14-37dd-495e-a438-49217de44e6a", + "resource" : { + "resourceType" : "Organization", + "id" : "1713403051290977000.694fec14-37dd-495e-a438-49217de44e6a", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/organization-name-type", + "valueString" : "L" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/xon-organization", + "extension" : [ { + "url" : "XON.10", + "valueString" : "11D0668319" + } ] + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", + "valueString" : "OBX.25" + } ], + "identifier" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", + "valueString" : "CLIA" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", + "valueString" : "2.16.840.1.113883.4.7" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", + "valueCode" : "ISO" + } ] + } ], + "type" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/v2-0203", + "code" : "XX" + } ] + }, + "value" : "11D0668319" + } ], + "name" : "Centers for Disease Control and Prevention", + "address" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/xad-address", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/sad-address-line", + "extension" : [ { + "url" : "SAD.1", + "valueString" : "1600 Clifton Road" + } ] + }, { + "url" : "XAD.6", + "valueString" : "USA" + }, { + "url" : "XAD.7", + "valueCode" : "B" + } ] + } ], + "use" : "work", + "line" : [ "1600 Clifton Road" ], + "city" : "Atlanta", + "state" : "GA", + "postalCode" : "30329", + "country" : "USA" + } ] + } + }, { + "fullUrl" : "ServiceRequest/1713403051315096000.4d4ce9d4-f17b-4580-a279-ad9d07a3b157", + "resource" : { + "resourceType" : "ServiceRequest", + "id" : "1713403051315096000.4d4ce9d4-f17b-4580-a279-ad9d07a3b157", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/business-event", + "valueCode" : "RE" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/business-event", + "valueString" : "20230725" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/orc-common-order", + "extension" : [ { + "url" : "orc-21-ordering-facility-name", + "valueReference" : { + "reference" : "Organization/1713403051307596000.fe9adc52-30d6-4893-b844-8770aa74ffce" + } + }, { + "url" : "orc-22-ordering-facility-address", + "valueAddress" : { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/xad-address", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/sad-address-line", + "extension" : [ { + "url" : "SAD.1", + "valueString" : "850 Marina Bay Parkway" + } ] + }, { + "url" : "XAD.2", + "valueString" : "Rm. E-361" + }, { + "url" : "XAD.6", + "valueString" : "USA" + }, { + "url" : "XAD.7", + "valueCode" : "M" + } ] + } ], + "type" : "postal", + "line" : [ "850 Marina Bay Parkway", "Rm. E-361" ], + "city" : "Richmond", + "state" : "CA", + "postalCode" : "94804", + "country" : "USA" + } + }, { + "url" : "orc-24-ordering-provider-address", + "valueAddress" : { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/xad-address", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/sad-address-line", + "extension" : [ { + "url" : "SAD.1", + "valueString" : "11475 C Avenue" + } ] + }, { + "url" : "XAD.6", + "valueString" : "USA" + }, { + "url" : "XAD.7", + "valueCode" : "M" + } ] + } ], + "type" : "postal", + "line" : [ "11475 C Avenue" ], + "city" : "Auburn", + "state" : "CA", + "postalCode" : "95603", + "country" : "USA" + } + }, { + "url" : "orc-12-ordering-provider", + "valueReference" : { + "reference" : "Practitioner/1713403051310754000.092f4ce9-ce97-43ab-85c7-2462a78d5b63" + } + } ] + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/obr-observation-request", + "extension" : [ { + "url" : "OBR.2", + "valueIdentifier" : { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", + "valueString" : "SPHL-000048" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", + "valueString" : "2.16.840.1.114222.4.1.10765" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", + "valueCode" : "ISO" + } ] + } ], + "value" : "Specimen123" + } + }, { + "url" : "OBR.3", + "valueIdentifier" : { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", + "valueString" : "STARLIMS.CDC.Stag" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", + "valueString" : "2.16.840.1.114222.4.3.3.2.1.2" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", + "valueCode" : "ISO" + } ] + } ], + "value" : "3015894743_04608717" + } + }, { + "url" : "OBR.22", + "valueString" : "202308021808-0400" + }, { + "url" : "OBR.25", + "valueId" : "F" + }, { + "url" : "OBR.16", + "valueReference" : { + "reference" : "Practitioner/1713403051313210000.38644508-d849-4ad0-813e-d29a136f3430" + } + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/callback-number", + "valueContactPoint" : { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/xtn-contact-point", + "extension" : [ { + "url" : "XTN.2", + "valueString" : "NET" + }, { + "url" : "XTN.3", + "valueString" : "Internet" + }, { + "url" : "XTN.4", + "valueString" : "MWaKabon@placer.ca.gov" + } ] + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", + "valueString" : "OBR.17" + } ], + "system" : "email", + "value" : "MWaKabon@placer.ca.gov" + } + } ] + } ], + "identifier" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", + "valueString" : "ORC.2" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", + "valueString" : "SPHL-000048" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", + "valueString" : "2.16.840.1.114222.4.1.10765" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", + "valueCode" : "ISO" + } ] + } ], + "type" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/v2-0203", + "code" : "PLAC" + } ] + }, + "value" : "Specimen123" + }, { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", + "valueString" : "ORC.3" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", + "valueString" : "STARLIMS.CDC.Stag" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", + "valueString" : "2.16.840.1.114222.4.3.3.2.1.2" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", + "valueCode" : "ISO" + } ] + } ], + "type" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/v2-0203", + "code" : "FILL" + } ] + }, + "value" : "3015894743_04608717" + } ], + "status" : "unknown", + "code" : { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/coding-system-oid", + "valueOid" : "urn:oid:2.16.840.1.113883.6.1" + } ], + "coding" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", + "valueString" : "coding" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", + "valueString" : "LN" + } ], + "system" : "http://loinc.org", + "version" : "2.74", + "code" : "68991-9", + "display" : "Epidemiologically Important Information" + }, { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", + "valueString" : "secondary-alt-coding" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", + "valueString" : "L" + } ], + "system" : "https://terminology.hl7.org/CodeSystem-v2-0396.html#v2-0396-99zzzorL", + "code" : "CDC-10515", + "display" : "Poxvirus Molecular Detection" + } ] + }, + "subject" : { + "reference" : "Patient/1713403050914425000.2377f845-bff3-4cc8-993f-4c9af35a7a0f" + }, + "requester" : { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/callback-number", + "valueContactPoint" : { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/xtn-contact-point", + "extension" : [ { + "url" : "XTN.2", + "valueString" : "NET" + }, { + "url" : "XTN.3", + "valueString" : "Internet" + }, { + "url" : "XTN.4", + "valueString" : "MWaKabon@placer.ca.gov" + } ] + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", + "valueString" : "ORC.14" + } ], + "system" : "email", + "value" : "MWaKabon@placer.ca.gov" + } + } ], + "reference" : "PractitionerRole/1713403051297888000.7e7fdefa-22cf-4bc0-a1d5-4f9e3adf048f" + } + } + }, { + "fullUrl" : "Practitioner/1713403051300732000.ca1fde96-a996-49ab-a06b-58899ec84bc0", + "resource" : { + "resourceType" : "Practitioner", + "id" : "1713403051300732000.ca1fde96-a996-49ab-a06b-58899ec84bc0", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", + "valueString" : "STARLIMS.CDC.Stag" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", + "valueString" : "2.16.840.1.114222.4.3.3.2.1.2" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", + "valueCode" : "ISO" + } ] + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", + "valueString" : "ORC.12" + } ], + "identifier" : [ { + "type" : { + "coding" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/codeable-concept-id", + "valueBoolean" : true + } ], + "code" : "XX" + } ] + }, + "system" : "STARLIMS.CDC.Stag", + "value" : "SPHL-000098" + } ], + "name" : [ { + "family" : "CA-Placer County Public Health Laboratory" + } ], + "address" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/xad-address", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/sad-address-line", + "extension" : [ { + "url" : "SAD.1", + "valueString" : "11475 C Avenue" + } ] + }, { + "url" : "XAD.6", + "valueString" : "USA" + }, { + "url" : "XAD.7", + "valueCode" : "M" + } ] + } ], + "type" : "postal", + "line" : [ "11475 C Avenue" ], + "city" : "Auburn", + "state" : "CA", + "postalCode" : "95603", + "country" : "USA" + } ] + } + }, { + "fullUrl" : "Organization/1713403051303441000.ac745efa-b697-43c8-88d3-54b02b0f742c", + "resource" : { + "resourceType" : "Organization", + "id" : "1713403051303441000.ac745efa-b697-43c8-88d3-54b02b0f742c", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/organization-name-type", + "valueString" : "D" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/xon-organization", + "extension" : [ { + "url" : "XON.10", + "valueString" : "SPHL-000048" + } ] + } ], + "identifier" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", + "valueString" : "STARLIMS.CDC.Stag" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", + "valueString" : "2.16.840.1.114222.4.3.3.2.1.2" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", + "valueCode" : "ISO" + } ] + } ], + "type" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/v2-0203", + "code" : "XX" + } ] + }, + "value" : "SPHL-000048" + } ], + "name" : "CDPH, Viral and Rickettsial Disease Laboratory", + "telecom" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/xtn-contact-point", + "extension" : [ { + "url" : "XTN.2", + "valueString" : "WPN" + }, { + "url" : "XTN.3", + "valueString" : "Internet" + }, { + "url" : "XTN.4", + "valueString" : "VRDL.Mail@cdph.ca.gov" + } ] + } ], + "system" : "email", + "value" : "VRDL.Mail@cdph.ca.gov", + "use" : "work" + } ], + "address" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/xad-address", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/sad-address-line", + "extension" : [ { + "url" : "SAD.1", + "valueString" : "850 Marina Bay Parkway" + } ] + }, { + "url" : "XAD.2", + "valueString" : "Rm. E-361" + }, { + "url" : "XAD.6", + "valueString" : "USA" + }, { + "url" : "XAD.7", + "valueCode" : "M" + } ] + } ], + "type" : "postal", + "line" : [ "850 Marina Bay Parkway", "Rm. E-361" ], + "city" : "Richmond", + "state" : "CA", + "postalCode" : "94804", + "country" : "USA" + } ] + } + }, { + "fullUrl" : "PractitionerRole/1713403051297888000.7e7fdefa-22cf-4bc0-a1d5-4f9e3adf048f", + "resource" : { + "resourceType" : "PractitionerRole", + "id" : "1713403051297888000.7e7fdefa-22cf-4bc0-a1d5-4f9e3adf048f", + "practitioner" : { + "reference" : "Practitioner/1713403051300732000.ca1fde96-a996-49ab-a06b-58899ec84bc0" + }, + "organization" : { + "reference" : "Organization/1713403051303441000.ac745efa-b697-43c8-88d3-54b02b0f742c" + } + } + }, { + "fullUrl" : "Organization/1713403051307596000.fe9adc52-30d6-4893-b844-8770aa74ffce", + "resource" : { + "resourceType" : "Organization", + "id" : "1713403051307596000.fe9adc52-30d6-4893-b844-8770aa74ffce", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/organization-name-type", + "valueString" : "D" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/xon-organization", + "extension" : [ { + "url" : "XON.10", + "valueString" : "SPHL-000048" + } ] + } ], + "identifier" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", + "valueString" : "STARLIMS.CDC.Stag" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", + "valueString" : "2.16.840.1.114222.4.3.3.2.1.2" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", + "valueCode" : "ISO" + } ] + } ], + "type" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/v2-0203", + "code" : "XX" + } ] + }, + "value" : "SPHL-000048" + } ], + "name" : "CDPH, Viral and Rickettsial Disease Laboratory" + } + }, { + "fullUrl" : "Practitioner/1713403051310754000.092f4ce9-ce97-43ab-85c7-2462a78d5b63", + "resource" : { + "resourceType" : "Practitioner", + "id" : "1713403051310754000.092f4ce9-ce97-43ab-85c7-2462a78d5b63", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", + "valueString" : "STARLIMS.CDC.Stag" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", + "valueString" : "2.16.840.1.114222.4.3.3.2.1.2" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", + "valueCode" : "ISO" + } ] + } ], + "identifier" : [ { + "type" : { + "coding" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/codeable-concept-id", + "valueBoolean" : true + } ], + "code" : "XX" + } ] + }, + "system" : "STARLIMS.CDC.Stag", + "value" : "SPHL-000098" + } ], + "name" : [ { + "family" : "CA-Placer County Public Health Laboratory" + } ] + } + }, { + "fullUrl" : "Practitioner/1713403051313210000.38644508-d849-4ad0-813e-d29a136f3430", + "resource" : { + "resourceType" : "Practitioner", + "id" : "1713403051313210000.38644508-d849-4ad0-813e-d29a136f3430", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", + "valueString" : "STARLIMS.CDC.Stag" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", + "valueString" : "2.16.840.1.114222.4.3.3.2.1.2" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", + "valueCode" : "ISO" + } ] + } ], + "identifier" : [ { + "type" : { + "coding" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/codeable-concept-id", + "valueBoolean" : true + } ], + "code" : "XX" + } ] + }, + "system" : "STARLIMS.CDC.Stag", + "value" : "SPHL-000098" + } ], + "name" : [ { + "family" : "CA-Placer County Public Health Laboratory" + } ] + } + }, { + "fullUrl" : "ServiceRequest/1713403051325184000.acd11243-7f94-4a11-ad81-17196251a85b", + "resource" : { + "resourceType" : "ServiceRequest", + "id" : "1713403051325184000.acd11243-7f94-4a11-ad81-17196251a85b", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/obr-observation-request", + "extension" : [ { + "url" : "OBR.22", + "valueString" : "202308021726-0400" + }, { + "url" : "OBR.25", + "valueId" : "F" + }, { + "url" : "OBR.16", + "valueReference" : { + "reference" : "Practitioner/1713403051323578000.9e4eca2d-6a64-478a-88a1-b46674023702" + } + } ] + } ], + "identifier" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", + "valueString" : "OBR.2" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", + "valueString" : "SPHL-000048" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", + "valueString" : "2.16.840.1.114222.4.1.10765" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", + "valueCode" : "ISO" + } ] + } ], + "type" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/v2-0203", + "code" : "PLAC" + } ] + }, + "value" : "Specimen123" + }, { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", + "valueString" : "OBR.3" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", + "valueString" : "STARLIMS.CDC.Stag" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", + "valueString" : "2.16.840.1.114222.4.3.3.2.1.2" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", + "valueCode" : "ISO" + } ] + } ], + "type" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/v2-0203", + "code" : "FILL" + } ] + }, + "value" : "47_3015894743_04608717_1233" + } ], + "status" : "unknown", + "code" : { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/coding-system-oid", + "valueOid" : "urn:oid:2.16.840.1.113883.6.1" + } ], + "coding" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", + "valueString" : "coding" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", + "valueString" : "LN" + } ], + "system" : "http://loinc.org", + "version" : "2.74", + "code" : "10383-9", + "display" : "MVPX DNA Spec Ql NAA+probe" + }, { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", + "valueString" : "secondary-alt-coding" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", + "valueString" : "L" + } ], + "system" : "https://terminology.hl7.org/CodeSystem-v2-0396.html#v2-0396-99zzzorL", + "code" : "CDC-10515", + "display" : "Poxvirus Molecular Detection" + }, { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", + "valueString" : "alt-coding" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", + "valueString" : "L" + } ], + "system" : "https://terminology.hl7.org/CodeSystem-v2-0396.html#v2-0396-99zzzorL", + "version" : "v unknown", + "code" : "1233", + "display" : "Monkeypox generic" + } ] + }, + "subject" : { + "reference" : "Patient/1713403050914425000.2377f845-bff3-4cc8-993f-4c9af35a7a0f" + }, + "requester" : { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/callback-number", + "valueContactPoint" : { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/xtn-contact-point", + "extension" : [ { + "url" : "XTN.2", + "valueString" : "NET" + }, { + "url" : "XTN.3", + "valueString" : "Internet" + }, { + "url" : "XTN.4", + "valueString" : "MWaKabon@placer.ca.gov" + } ] + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", + "valueString" : "OBR.17" + } ], + "system" : "email", + "value" : "MWaKabon@placer.ca.gov" + } + } ], + "reference" : "Practitioner/1713403051317150000.5dcf8ff2-157d-49e8-bd38-a6c8195e6db7" + }, + "note" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/note-type", + "valueCodeableConcept" : { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/coding-system-oid", + "valueOid" : "urn:oid:2.16.840.1.113883.12.364" + } ], + "coding" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", + "valueString" : "coding" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", + "valueString" : "HL70364" + } ], + "version" : "2.5.1", + "code" : "RE", + "display" : "Remark" + } ] + } + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/note-comment", + "valueId" : "Accession level coment." + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/note-source", + "valueId" : "L" + } ], + "text" : "Accession level coment." + }, { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/note-type", + "valueCodeableConcept" : { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/coding-system-oid", + "valueOid" : "urn:oid:2.16.840.1.113883.12.364" + } ], + "coding" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", + "valueString" : "coding" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", + "valueString" : "HL70364" + } ], + "version" : "2.5.1", + "code" : "RE", + "display" : "Remark" + } ] + } + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/note-comment", + "valueId" : "Test level comment." + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/note-source", + "valueId" : "L" + } ], + "text" : "Test level comment." + } ] + } + }, { + "fullUrl" : "Practitioner/1713403051317150000.5dcf8ff2-157d-49e8-bd38-a6c8195e6db7", + "resource" : { + "resourceType" : "Practitioner", + "id" : "1713403051317150000.5dcf8ff2-157d-49e8-bd38-a6c8195e6db7", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", + "valueString" : "STARLIMS.CDC.Stag" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", + "valueString" : "2.16.840.1.114222.4.3.3.2.1.2" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", + "valueCode" : "ISO" + } ] + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", + "valueString" : "OBR.16" + } ], + "identifier" : [ { + "type" : { + "coding" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/codeable-concept-id", + "valueBoolean" : true + } ], + "code" : "XX" + } ] + }, + "system" : "STARLIMS.CDC.Stag", + "value" : "SPHL-000098" + } ], + "name" : [ { + "family" : "CA-Placer County Public Health Laboratory" + } ] + } + }, { + "fullUrl" : "Practitioner/1713403051323578000.9e4eca2d-6a64-478a-88a1-b46674023702", + "resource" : { + "resourceType" : "Practitioner", + "id" : "1713403051323578000.9e4eca2d-6a64-478a-88a1-b46674023702", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", + "valueString" : "STARLIMS.CDC.Stag" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", + "valueString" : "2.16.840.1.114222.4.3.3.2.1.2" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", + "valueCode" : "ISO" + } ] + } ], + "identifier" : [ { + "type" : { + "coding" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/codeable-concept-id", + "valueBoolean" : true + } ], + "code" : "XX" + } ] + }, + "system" : "STARLIMS.CDC.Stag", + "value" : "SPHL-000098" + } ], + "name" : [ { + "family" : "CA-Placer County Public Health Laboratory" + } ] + } + }, { + "fullUrl" : "DiagnosticReport/1713403051336018000.fd7f6056-c0f8-40c2-b300-271da14337dc", + "resource" : { + "resourceType" : "DiagnosticReport", + "id" : "1713403051336018000.fd7f6056-c0f8-40c2-b300-271da14337dc", + "identifier" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", + "valueString" : "ORC.2" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", + "valueString" : "SPHL-000048" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", + "valueString" : "2.16.840.1.114222.4.1.10765" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", + "valueCode" : "ISO" + } ] + } ], + "type" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/v2-0203", + "code" : "PLAC" + } ] + }, + "value" : "Specimen123" + }, { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", + "valueString" : "STARLIMS.CDC.Stag" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", + "valueString" : "2.16.840.1.114222.4.3.3.2.1.2" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", + "valueCode" : "ISO" + } ] + } ], + "type" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/v2-0203", + "code" : "FILL" + } ] + }, + "value" : "3015894743_04608717" + } ], + "basedOn" : [ { + "reference" : "ServiceRequest/1713403051315096000.4d4ce9d4-f17b-4580-a279-ad9d07a3b157" + } ], + "status" : "final", + "code" : { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/coding-system-oid", + "valueOid" : "urn:oid:2.16.840.1.113883.6.1" + } ], + "coding" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", + "valueString" : "coding" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", + "valueString" : "LN" + } ], + "system" : "http://loinc.org", + "version" : "2.74", + "code" : "68991-9", + "display" : "Epidemiologically Important Information" + }, { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", + "valueString" : "secondary-alt-coding" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", + "valueString" : "L" + } ], + "system" : "https://terminology.hl7.org/CodeSystem-v2-0396.html#v2-0396-99zzzorL", + "code" : "CDC-10515", + "display" : "Poxvirus Molecular Detection" + } ] + }, + "subject" : { + "reference" : "Patient/1713403050914425000.2377f845-bff3-4cc8-993f-4c9af35a7a0f" + }, + "encounter" : { + "reference" : "Encounter/1713403050935347000.29dad495-b015-407e-b9d2-6932551884bc" + }, + "effectiveDateTime" : "2023-07-24T15:24:00Z", + "_effectiveDateTime" : { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2-date-time", + "valueString" : "202307241524" + } ] + }, + "issued" : "2023-08-02T18:08:00-04:00", + "_issued" : { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2-date-time", + "valueString" : "202308021808-0400" + } ] + }, + "specimen" : [ { + "reference" : "Specimen/1713403051257732000.6da0d711-68e7-48bd-b43e-5d77757fe708" + }, { + "reference" : "Specimen/1713403051254672000.92ee87d5-8ebf-4178-8a57-345571255c97" + } ], + "result" : [ { + "reference" : "Observation/1713403051220745000.63ea27ea-0464-4655-af30-fb9bec820cd7" + }, { + "reference" : "Observation/1713403051229443000.1250993d-331f-4cd5-9245-785817d2b937" + } ] + } + }, { + "fullUrl" : "DiagnosticReport/1713403051340875000.6f3e2afa-c3c0-4a44-9fec-ccd43571021d", + "resource" : { + "resourceType" : "DiagnosticReport", + "id" : "1713403051340875000.6f3e2afa-c3c0-4a44-9fec-ccd43571021d", + "identifier" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", + "valueString" : "OBR.2" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", + "valueString" : "SPHL-000048" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", + "valueString" : "2.16.840.1.114222.4.1.10765" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", + "valueCode" : "ISO" + } ] + } ], + "type" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/v2-0203", + "code" : "PLAC" + } ] + }, + "value" : "Specimen123" + }, { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", + "valueString" : "STARLIMS.CDC.Stag" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", + "valueString" : "2.16.840.1.114222.4.3.3.2.1.2" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", + "valueCode" : "ISO" + } ] + } ], + "type" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/v2-0203", + "code" : "FILL" + } ] + }, + "value" : "47_3015894743_04608717_1233" + } ], + "basedOn" : [ { + "reference" : "ServiceRequest/1713403051325184000.acd11243-7f94-4a11-ad81-17196251a85b" + } ], + "status" : "final", + "code" : { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/coding-system-oid", + "valueOid" : "urn:oid:2.16.840.1.113883.6.1" + } ], + "coding" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", + "valueString" : "coding" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", + "valueString" : "LN" + } ], + "system" : "http://loinc.org", + "version" : "2.74", + "code" : "10383-9", + "display" : "MVPX DNA Spec Ql NAA+probe" + }, { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", + "valueString" : "secondary-alt-coding" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", + "valueString" : "L" + } ], + "system" : "https://terminology.hl7.org/CodeSystem-v2-0396.html#v2-0396-99zzzorL", + "code" : "CDC-10515", + "display" : "Poxvirus Molecular Detection" + }, { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", + "valueString" : "alt-coding" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", + "valueString" : "L" + } ], + "system" : "https://terminology.hl7.org/CodeSystem-v2-0396.html#v2-0396-99zzzorL", + "version" : "v unknown", + "code" : "1233", + "display" : "Monkeypox generic" + } ] + }, + "subject" : { + "reference" : "Patient/1713403050914425000.2377f845-bff3-4cc8-993f-4c9af35a7a0f" + }, + "encounter" : { + "reference" : "Encounter/1713403050935347000.29dad495-b015-407e-b9d2-6932551884bc" + }, + "effectiveDateTime" : "2023-07-24T15:24:00Z", + "_effectiveDateTime" : { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2-date-time", + "valueString" : "202307241524" + } ] + }, + "issued" : "2023-08-02T17:26:00-04:00", + "_issued" : { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2-date-time", + "valueString" : "202308021726-0400" + } ] + }, + "specimen" : [ { + "reference" : "Specimen/1713403051260879000.9cc26fd8-4137-4d80-849e-7b530ee8c24b" + }, { + "reference" : "Specimen/1713403051254890000.304173c5-92a5-4aa7-bd9c-b2246c6c9e75" + } ], + "result" : [ { + "reference" : "Observation/1713403051238711000.862015cc-9666-45f1-abcb-072c55b08a5e" + } ] + } + } ] +} \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/orur01/oru_r01-full.hl7 b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/orur01/oru_r01-full.hl7 new file mode 100644 index 00000000000..29752353cf3 --- /dev/null +++ b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/orur01/oru_r01-full.hl7 @@ -0,0 +1,23 @@ +MSH|^~\&#|STARLIMS.CDC.Stag^2.16.840.1.114222.4.3.3.2.1.2^ISO|CDC Atlanta^11D0668319^CLIA|CDPH CA CALREDIE^2.16.840.1.114222.4.3.3.10.1.1^ISO|CDPH_CID^2.16.840.1.114222.4.1.2.14104^ISO|20230802180802-0400||ORU^R01^ORU_R01|3015894743_04608717_11184|T|2.5.1|||NE|NE|USA||||PHLabReport-NoAck^PHIN^2.16.840.1.113883.9.11^ISO +SFT|CDC^^^^^CDC&2.16.840.1.114222.4&ISO^XX^^^CDC CLIA|ELIMS V11|STARLIMS|Binary ID unknown|test|20230802180802-0400 +PID|1||test^^^STARLIMS.CDC.Stag&2.16.840.1.114222.4.3.3.2.1.2&ISO^PI~PID123^^^SPHL-000048&2.16.840.1.114222.4.1.10765&ISO^PI||Mega^HL7^MI^^^^L||0000|F|||^^^^^USA^H +PD1|C|A|Ordering Facility^X^123^Check Digit^C1^Assigning Authority&2.1.4.1&ISO^MD^Hospital A&2.16.840.1.113883.9.11&ISO^NameRepCode^OrgIdentifier~Ordering Facility^X^123^Check Digit^C1^Assigning Authority&2.1.4.1&ISO^MD^Hospital A&2.16.840.1.113883.9.11&ISO^NameRepCode^OrgIdentifier||F|T|F|F|N +NTE|1|L|Accession level coment.|RE^Remark^HL70364^^^^2.5.1^^^^^^^2.16.840.1.113883.12.364 +NTE|2|L|SPHL Submitter: CDPH, Viral and Rickettsial Disease Laboratory, Submitter ID: SPHL-000048, Address: 850 Marina Bay Parkway Rm. E-361 Richmond, California 94804 United States, Email: VRDL.Mail@cdph.ca.gov, Submitter Patient ID: PID123, Submitter Alt Patient ID: AltPID1234, Submitter Specimen ID: Specimen123, Submitter Alt Specimen ID: AltSP1234|RE^Remark^HL70364^^^^2.5.1^^^^^^^2.16.840.1.113883.12.364 +NK1|1|Organa^Leia|N^Next-of-Kin^HL70131 +NK1|2|Navarro^Liz|N^Next-of-Kin^HL70131 +PV1|1|||||^^^Hospital A&2.4.4.4&ISO^^^^^^Entity ID&NAME&UNI&ISO +ORC|RE|Specimen123^SPHL-000048^2.16.840.1.114222.4.1.10765^ISO|3015894743_04608717^STARLIMS.CDC.Stag^2.16.840.1.114222.4.3.3.2.1.2^ISO||||||20230725|||SPHL-000098^CA-Placer County Public Health Laboratory^^^^^^^STARLIMS.CDC.Stag&2.16.840.1.114222.4.3.3.2.1.2&ISO^^^^XX||^NET^Internet^MWaKabon@placer.ca.gov|||||||CDPH, Viral and Rickettsial Disease Laboratory^D^^^^STARLIMS.CDC.Stag&2.16.840.1.114222.4.3.3.2.1.2&ISO^XX^^^SPHL-000048|850 Marina Bay Parkway^Rm. E-361^Richmond^CA^94804^USA^M|^WPN^Internet^VRDL.Mail@cdph.ca.gov|11475 C Avenue^^Auburn^CA^95603^USA^M +OBR|1|Specimen123^SPHL-000048^2.16.840.1.114222.4.1.10765^ISO|3015894743_04608717^STARLIMS.CDC.Stag^2.16.840.1.114222.4.3.3.2.1.2^ISO|68991-9^Epidemiologically Important Information^LN^^^^2.74^^^CDC-10515^Poxvirus Molecular Detection^L^^2.16.840.1.113883.6.1|||202307241524|||||||||SPHL-000098^CA-Placer County Public Health Laboratory^^^^^^^STARLIMS.CDC.Stag&2.16.840.1.114222.4.3.3.2.1.2&ISO^^^^XX|^NET^Internet^MWaKabon@placer.ca.gov|||||202308021808-0400|||F +OBX|1|CWE|80383-3^Flu B^LN||260415000^Not detected^SCT|||N^Normal^HL70078^^^^2.7|||F||||11D1111111^CSV uploads^CLIA||||||||CSV uploads-11D1111111^L^^^^CLIA&2.16.840.1.113883.4.7&ISO^XX^^^11D1111111|123 Main St^^^CA^94553^USA +OBX|2|CWE|80382-5^Flu A^LN||260373001^Detected^SCT|||A^Abnormal^HL70078^^^^2.7|||F||||11D1111111^CSV uploads^CLIA||^^^^^^^^BD Veritor System for Rapid Detection of SARS-CoV-2 \T\ Flu A+B*||||||CSV uploads-11D1111111^L^^^^CLIA&2.16.840.1.113883.4.7&ISO^XX^^^11D1111111|123 Main St^^^CA^94553^USA +SPM|1|Specimen123&SPHL-000048&2.16.840.1.114222.4.1.10765&ISO^3015894743&STARLIMS.CDC.Stag&2.16.840.1.114222.4.3.3.2.1.2&ISO||119297000^Blood specimen^SCT^BLD^Blood^L^0912017^Adobe_Code^Blood +OBX|1|SN|21612-7^Reported Patient Age!!!^LN^^^^2.61||^28|a^Year^UCUM^^^^2.1|||||F|||202307241524|11D0668319^Centers for Disease Control and Prevention^CLIA||||20230727183017||||Centers for Disease Control and Prevention^L^^^^CLIA&2.16.840.1.113883.4.7&ISO^XX^^^11D0668319|1600 Clifton Road^^Atlanta^GA^30329^USA^B +OBR|2|Specimen123^SPHL-000048^2.16.840.1.114222.4.1.10765^ISO|47_3015894743_04608717_1233^STARLIMS.CDC.Stag^2.16.840.1.114222.4.3.3.2.1.2^ISO|10383-9^MVPX DNA Spec Ql NAA+probe^LN^1233^Monkeypox generic^L^2.74^v unknown^^CDC-10515^Poxvirus Molecular Detection^L^^2.16.840.1.113883.6.1|||202307241524|||||||||SPHL-000098^CA-Placer County Public Health Laboratory^^^^^^^STARLIMS.CDC.Stag&2.16.840.1.114222.4.3.3.2.1.2&ISO^^^^XX|^NET^Internet^MWaKabon@placer.ca.gov|||||202308021726-0400|||F +NTE|1|L|Accession level coment.|RE^Remark^HL70364^^^^2.5.1^^^^^^^2.16.840.1.113883.12.364 +NTE|2|L|Test level comment.|RE^Remark^HL70364^^^^2.5.1^^^^^^^2.16.840.1.113883.12.364 +OBX|1|CWE|100383-9^MVPX DNA Spec Ql NAA+probe^LN^3900^Monkeypox generic^L^2.74^v_unknown^Monkeypox generic|ZZYGNAUM-1|10828004^Positive^SCT^^^^09012018^^Positive||||||F|||202307241524|11D0668319^Centers for Disease Control and Prevention^CLIA^47^Poxvirus Laboratory/Poxvirus and Rabies Branch^L|NXQ0@cdc.gov^Anderson^Christopher|||20230727183017-0400||||Centers for Disease Control and Prevention^L^^^^CLIA&2.16.840.1.113883.4.7&ISO^XX^^^11D0668319|1600 Clifton Rd^^Atlanta^GA^30329^USA^B +NTE|1|L|Run level Comment|RE^Remark^HL70364^^^^2.5.1^^^^^^^2.16.840.1.113883.12.364 +NTE|2|L|Result level Comment.|RE^Remark^HL70364^^^^2.5.1^^^^^^^2.16.840.1.113883.12.364 +SPM|1|Specimen123&SPHL-000048&2.16.840.1.114222.4.1.10765&ISO^3015894743&STARLIMS.CDC.Stag&2.16.840.1.114222.4.3.3.2.1.2&ISO||119297000^Blood specimen^SCT^BLD^Blood^L^0912017^Adobe_Code^Blood +OBX|1|SN|21612-7^Reported Patient Age???^LN^^^^2.61||^28|a^Year^UCUM^^^^2.1|||||F|||202307241524|11D0668319^Centers for Disease Control and Prevention^CLIA||||20230727183017||||Centers for Disease Control and Prevention^L^^^^CLIA&2.16.840.1.113883.4.7&ISO^XX^^^11D0668319|1600 Clifton Road^^Atlanta^GA^30329^USA^B \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/prl/prl-to-servicerequest.fhir b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/prl/prl-to-servicerequest.fhir new file mode 100644 index 00000000000..055e346026e --- /dev/null +++ b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/prl/prl-to-servicerequest.fhir @@ -0,0 +1,234 @@ +{ + "resourceType" : "Bundle", + "id" : "1713403066467353000.db3dd9c8-cefe-4ef4-a631-8d601c455f45", + "meta" : { + "lastUpdated" : "2024-04-17T19:17:46.477-06:00" + }, + "identifier" : { + "system" : "https://reportstream.cdc.gov/prime-router", + "value" : "20230816123358" + }, + "type" : "message", + "timestamp" : "2023-08-16T11:33:58.000-06:00", + "entry" : [ { + "fullUrl" : "MessageHeader/bb504ecd-c2ab-3be3-91d8-6065e2bce435", + "resource" : { + "resourceType" : "MessageHeader", + "id" : "bb504ecd-c2ab-3be3-91d8-6065e2bce435", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/encoding-characters", + "valueString" : "^~\\&#" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/msh-message-header", + "extension" : [ { + "url" : "MSH.7", + "valueString" : "20230816123358-0500" + }, { + "url" : "MSH.10", + "valueString" : "20230816123358" + } ] + } ], + "eventCoding" : { + "system" : "http://terminology.hl7.org/CodeSystem/v2-0003", + "code" : "R01", + "display" : "ORU^R01^ORU_R01" + } + } + }, { + "fullUrl" : "Provenance/1713403067097619000.41f6404f-e4eb-4803-87af-ce80c0661269", + "resource" : { + "resourceType" : "Provenance", + "id" : "1713403067097619000.41f6404f-e4eb-4803-87af-ce80c0661269", + "target" : [ { + "reference" : "MessageHeader/bb504ecd-c2ab-3be3-91d8-6065e2bce435" + }, { + "reference" : "DiagnosticReport/1713403067434929000.bf17a0a5-8df2-46be-999b-0e91503ec3d8" + } ], + "recorded" : "2023-08-16T12:33:58-05:00", + "activity" : { + "coding" : [ { + "display" : "ORU^R01^ORU_R01" + } ] + } + } + }, { + "fullUrl" : "Provenance/1713403067110774000.2084408c-8bcf-4abe-af89-f69f4ed604e7", + "resource" : { + "resourceType" : "Provenance", + "id" : "1713403067110774000.2084408c-8bcf-4abe-af89-f69f4ed604e7", + "recorded" : "2024-04-17T19:17:47Z", + "policy" : [ "http://hl7.org/fhir/uv/v2mappings/message-oru-r01-to-bundle" ], + "activity" : { + "coding" : [ { + "code" : "v2-FHIR transformation" + } ] + }, + "agent" : [ { + "type" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/provenance-participant-type", + "code" : "assembler" + } ] + }, + "who" : { + "reference" : "Organization/1713403067109354000.2aa64311-8f6c-4f5a-a1cd-a058f2bf1586" + } + } ] + } + }, { + "fullUrl" : "Organization/1713403067109354000.2aa64311-8f6c-4f5a-a1cd-a058f2bf1586", + "resource" : { + "resourceType" : "Organization", + "id" : "1713403067109354000.2aa64311-8f6c-4f5a-a1cd-a058f2bf1586", + "identifier" : [ { + "value" : "CDC PRIME - Atlanta" + }, { + "type" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/v2-0301" + } ] + }, + "system" : "urn:ietf:rfc:3986", + "value" : "2.16.840.1.114222.4.1.237821" + } ] + } + }, { + "fullUrl" : "Patient/1713403067133980000.f6f45975-3b95-409a-b584-49a6516ca231", + "resource" : { + "resourceType" : "Patient", + "id" : "1713403067133980000.f6f45975-3b95-409a-b584-49a6516ca231" + } + }, { + "fullUrl" : "Provenance/1713403067134963000.8b4ba600-f324-4fa2-ab8c-f8aaff6e921b", + "resource" : { + "resourceType" : "Provenance", + "id" : "1713403067134963000.8b4ba600-f324-4fa2-ab8c-f8aaff6e921b", + "target" : [ { + "reference" : "Patient/1713403067133980000.f6f45975-3b95-409a-b584-49a6516ca231" + } ], + "recorded" : "2024-04-17T19:17:47Z", + "activity" : { + "coding" : [ { + "system" : "https://terminology.hl7.org/CodeSystem/v3-DataOperation", + "code" : "UPDATE" + } ] + } + } + }, { + "fullUrl" : "Specimen/1713403067137132000.3341d0e4-bad1-41ac-9912-0564150a65d9", + "resource" : { + "resourceType" : "Specimen", + "id" : "1713403067137132000.3341d0e4-bad1-41ac-9912-0564150a65d9", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Segment", + "valueString" : "OBR" + } ] + } + }, { + "fullUrl" : "ServiceRequest/1713403067428256000.a1e57096-485b-4336-a61a-7c5aa6e19fb1", + "resource" : { + "resourceType" : "ServiceRequest", + "id" : "1713403067428256000.a1e57096-485b-4336-a61a-7c5aa6e19fb1", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/obr-observation-request", + "extension" : [ { + "url" : "OBR.25", + "valueId" : "F" + }, { + "url" : "OBR.26", + "extension" : [ { + "url" : "prl-1-parent-observation-identifier", + "valueCodeableConcept" : { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/coding-system-oid", + "valueOid" : "urn:oid:TEST1234" + } ], + "coding" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", + "valueString" : "coding" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", + "valueString" : "LN" + } ], + "system" : "http://loinc.org", + "version" : "PrimaryVersion", + "code" : "PrimaryCode", + "display" : "Primary Code Display" + }, { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", + "valueString" : "secondary-alt-coding" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", + "valueString" : "L" + } ], + "system" : "https://terminology.hl7.org/CodeSystem-v2-0396.html#v2-0396-99zzzorL", + "version" : "SecondaryAltVersion", + "code" : "SecondaryAltCode", + "display" : "SecondaryAltText" + }, { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", + "valueString" : "alt-coding" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", + "valueString" : "L" + } ], + "system" : "https://terminology.hl7.org/CodeSystem-v2-0396.html#v2-0396-99zzzorL", + "version" : "AltVersion", + "code" : "AltCode", + "display" : "AltText" + } ], + "text" : "OriginalText" + } + }, { + "url" : "prl-2-parent-observation-sub-identifier", + "valueString" : "Test1" + }, { + "url" : "prl-3-parent-observation-descriptor", + "valueString" : "Test2" + } ] + } ] + } ], + "status" : "unknown", + "code" : { + "coding" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", + "valueString" : "coding" + } ], + "code" : "TEST" + } ] + }, + "subject" : { + "reference" : "Patient/1713403067133980000.f6f45975-3b95-409a-b584-49a6516ca231" + } + } + }, { + "fullUrl" : "DiagnosticReport/1713403067434929000.bf17a0a5-8df2-46be-999b-0e91503ec3d8", + "resource" : { + "resourceType" : "DiagnosticReport", + "id" : "1713403067434929000.bf17a0a5-8df2-46be-999b-0e91503ec3d8", + "basedOn" : [ { + "reference" : "ServiceRequest/1713403067428256000.a1e57096-485b-4336-a61a-7c5aa6e19fb1" + } ], + "status" : "final", + "code" : { + "coding" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", + "valueString" : "coding" + } ], + "code" : "TEST" + } ] + }, + "subject" : { + "reference" : "Patient/1713403067133980000.f6f45975-3b95-409a-b584-49a6516ca231" + }, + "specimen" : [ { + "reference" : "Specimen/1713403067137132000.3341d0e4-bad1-41ac-9912-0564150a65d9" + } ] + } + } ] +} \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/prl/prl-to-servicerequest.hl7 b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/prl/prl-to-servicerequest.hl7 new file mode 100644 index 00000000000..392f83dfeef --- /dev/null +++ b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/prl/prl-to-servicerequest.hl7 @@ -0,0 +1,3 @@ +MSH|^~\&#|||||20230816123358-0500||ORU^R01^ORU_R01|20230816123358||2.5.1 +PID|1 +OBR|1|||TEST|||||||||||||||||||||F|PrimaryCode&Primary Code Display&LN&AltCode&AltText&L&PrimaryVersion&AltVersion&OriginalText&SecondaryAltCode&SecondaryAltText&L&SecondaryAltVersion&TEST1234^Test1^Test2 \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/xpn/xpn-to-humanname-xpn12-13-populated-xpn10-empty.fhir b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/xpn/xpn-to-humanname-xpn12-13-populated-xpn10-empty.fhir new file mode 100644 index 00000000000..a47b99e3615 --- /dev/null +++ b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/xpn/xpn-to-humanname-xpn12-13-populated-xpn10-empty.fhir @@ -0,0 +1,254 @@ +{ + "resourceType" : "Bundle", + "id" : "1713403085477795000.87b249cb-cffd-42d4-a0c6-1bc849ef19e1", + "meta" : { + "lastUpdated" : "2024-04-17T19:18:05.487-06:00" + }, + "identifier" : { + "system" : "https://reportstream.cdc.gov/prime-router", + "value" : "3003786103_4988249_33033" + }, + "type" : "message", + "timestamp" : "2023-05-01T08:25:31.000-06:00", + "entry" : [ { + "fullUrl" : "MessageHeader/0993dd0b-6ce5-3caf-a177-0b81cc780c18", + "resource" : { + "resourceType" : "MessageHeader", + "id" : "0993dd0b-6ce5-3caf-a177-0b81cc780c18", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/encoding-characters", + "valueString" : "^~\\&#" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/msh-message-header", + "extension" : [ { + "url" : "MSH.7", + "valueString" : "20230501102531-0400" + }, { + "url" : "MSH.10", + "valueString" : "3003786103_4988249_33033" + } ] + } ], + "eventCoding" : { + "system" : "http://terminology.hl7.org/CodeSystem/v2-0003", + "code" : "R01", + "display" : "ORU^R01^ORU_R01" + } + } + }, { + "fullUrl" : "Provenance/1713403086125556000.56cddc76-997e-4010-bc99-8b72195af802", + "resource" : { + "resourceType" : "Provenance", + "id" : "1713403086125556000.56cddc76-997e-4010-bc99-8b72195af802", + "target" : [ { + "reference" : "MessageHeader/0993dd0b-6ce5-3caf-a177-0b81cc780c18" + } ], + "recorded" : "2023-05-01T10:25:31-04:00", + "activity" : { + "coding" : [ { + "display" : "ORU^R01^ORU_R01" + } ] + } + } + }, { + "fullUrl" : "Provenance/1713403086138867000.16053c96-7e09-45c1-be9e-5d973827c9e3", + "resource" : { + "resourceType" : "Provenance", + "id" : "1713403086138867000.16053c96-7e09-45c1-be9e-5d973827c9e3", + "recorded" : "2024-04-17T19:18:06Z", + "policy" : [ "http://hl7.org/fhir/uv/v2mappings/message-oru-r01-to-bundle" ], + "activity" : { + "coding" : [ { + "code" : "v2-FHIR transformation" + } ] + }, + "agent" : [ { + "type" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/provenance-participant-type", + "code" : "assembler" + } ] + }, + "who" : { + "reference" : "Organization/1713403086137725000.e57452f6-eedc-4aa0-8f3f-cb85dfdf3ef5" + } + } ] + } + }, { + "fullUrl" : "Organization/1713403086137725000.e57452f6-eedc-4aa0-8f3f-cb85dfdf3ef5", + "resource" : { + "resourceType" : "Organization", + "id" : "1713403086137725000.e57452f6-eedc-4aa0-8f3f-cb85dfdf3ef5", + "identifier" : [ { + "value" : "CDC PRIME - Atlanta" + }, { + "type" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/v2-0301" + } ] + }, + "system" : "urn:ietf:rfc:3986", + "value" : "2.16.840.1.114222.4.1.237821" + } ] + } + }, { + "fullUrl" : "Patient/1713403086172163000.32b3c4a9-e0e4-459c-a443-a028753bd407", + "resource" : { + "resourceType" : "Patient", + "id" : "1713403086172163000.32b3c4a9-e0e4-459c-a443-a028753bd407", + "contact" : [ { + "name" : { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/xpn-human-name", + "extension" : [ { + "url" : "XPN.2", + "valueString" : "LUDWIG" + }, { + "url" : "XPN.3", + "valueString" : "B" + }, { + "url" : "XPN.4", + "valueString" : "2ND" + }, { + "url" : "XPN.6", + "valueString" : "MD" + }, { + "url" : "XPN.7", + "valueString" : "B" + }, { + "url" : "XPN.8", + "valueString" : "A" + }, { + "url" : "XPN.12", + "valueString" : "20220501102531-0400" + }, { + "url" : "XPN.13", + "valueString" : "20230501102531-0400" + }, { + "url" : "XPN.14", + "valueString" : "MD" + } ] + }, { + "url" : "http://hl7.org/fhir/StructureDefinition/humanname-assembly-order", + "valueCode" : "F" + } ], + "use" : "official", + "family" : "BEETHOVEN", + "_family" : { + "extension" : [ { + "url" : "http://hl7.org/fhir/StructureDefinition/humanname-own-prefix", + "valueString" : "VAN" + }, { + "url" : "http://hl7.org/fhir/StructureDefinition/humanname-own-name", + "valueString" : "BEETHOVEN" + }, { + "url" : "http://hl7.org/fhir/StructureDefinition/humanname-partner-prefix", + "valueString" : "VAL" + }, { + "url" : "http://hl7.org/fhir/StructureDefinition/humanname-partner-name", + "valueString" : "ROGER" + } ] + }, + "given" : [ "LUDWIG", "B" ], + "prefix" : [ "DR" ], + "suffix" : [ "2ND", "MD", "MD" ], + "period" : { + "start" : "2022-05-01T10:25:31-04:00", + "end" : "2023-05-01T10:25:31-04:00" + } + } + } ] + } + }, { + "fullUrl" : "Provenance/1713403086175184000.c6e7782b-d236-4380-9c66-45736f2b2b04", + "resource" : { + "resourceType" : "Provenance", + "id" : "1713403086175184000.c6e7782b-d236-4380-9c66-45736f2b2b04", + "target" : [ { + "reference" : "Patient/1713403086172163000.32b3c4a9-e0e4-459c-a443-a028753bd407" + } ], + "recorded" : "2024-04-17T19:18:06Z", + "activity" : { + "coding" : [ { + "system" : "https://terminology.hl7.org/CodeSystem/v3-DataOperation", + "code" : "UPDATE" + } ] + } + } + }, { + "fullUrl" : "RelatedPerson/1713403086181253000.8d5b84f7-90b0-4865-976d-6ecf7f60e4b7", + "resource" : { + "resourceType" : "RelatedPerson", + "id" : "1713403086181253000.8d5b84f7-90b0-4865-976d-6ecf7f60e4b7", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Segment", + "valueString" : "NK1" + } ], + "patient" : { + "reference" : "Patient/1713403086172163000.32b3c4a9-e0e4-459c-a443-a028753bd407" + }, + "name" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", + "valueString" : "NK1.2" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/xpn-human-name", + "extension" : [ { + "url" : "XPN.2", + "valueString" : "LUDWIG" + }, { + "url" : "XPN.3", + "valueString" : "B" + }, { + "url" : "XPN.4", + "valueString" : "2ND" + }, { + "url" : "XPN.6", + "valueString" : "MD" + }, { + "url" : "XPN.7", + "valueString" : "B" + }, { + "url" : "XPN.8", + "valueString" : "A" + }, { + "url" : "XPN.12", + "valueString" : "20220501102531-0400" + }, { + "url" : "XPN.13", + "valueString" : "20230501102531-0400" + }, { + "url" : "XPN.14", + "valueString" : "MD" + } ] + }, { + "url" : "http://hl7.org/fhir/StructureDefinition/humanname-assembly-order", + "valueCode" : "F" + } ], + "use" : "official", + "family" : "BEETHOVEN", + "_family" : { + "extension" : [ { + "url" : "http://hl7.org/fhir/StructureDefinition/humanname-own-prefix", + "valueString" : "VAN" + }, { + "url" : "http://hl7.org/fhir/StructureDefinition/humanname-own-name", + "valueString" : "BEETHOVEN" + }, { + "url" : "http://hl7.org/fhir/StructureDefinition/humanname-partner-prefix", + "valueString" : "VAL" + }, { + "url" : "http://hl7.org/fhir/StructureDefinition/humanname-partner-name", + "valueString" : "ROGER" + } ] + }, + "given" : [ "LUDWIG", "B" ], + "prefix" : [ "DR" ], + "suffix" : [ "2ND", "MD", "MD" ], + "period" : { + "start" : "2022-05-01T10:25:31-04:00", + "end" : "2023-05-01T10:25:31-04:00" + } + } ] + } + } ] +} \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/xpn/xpn-to-humanname-xpn12-13-populated-xpn10-empty.hl7 b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/xpn/xpn-to-humanname-xpn12-13-populated-xpn10-empty.hl7 new file mode 100644 index 00000000000..11e1ff57dac --- /dev/null +++ b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251-elr/xpn/xpn-to-humanname-xpn12-13-populated-xpn10-empty.hl7 @@ -0,0 +1,3 @@ +MSH|^~\&#|||||20230501102531-0400||ORU^R01^ORU_R01|3003786103_4988249_33033||2.5.1 +PID|1 +NK1|1|BEETHOVEN&VAN&BEETHOVEN&VAL&ROGER^LUDWIG^B^2ND^DR^MD^B^A^^^F^20220501102531-0400^20230501102531-0400^MD \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cnn/cnn-to-Practitioner.csv b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cnn/cnn-to-Practitioner.csv new file mode 100644 index 00000000000..7ccebe332e0 --- /dev/null +++ b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cnn/cnn-to-Practitioner.csv @@ -0,0 +1,14 @@ +HL7 v2,,,,,,Condition (IF True),,,HL7 FHIR,,,,,,,,,Comments +Sort Order,Identifier,Name,Data Type,Cardinality - Min,Cardinality - Max,Computable ANTLR,Computable FHIRPath,Narrative,FHIR Attribute/ Data Type,,Data Type,Cardinality - Min,Cardinality - Max,Data Type Mapping,"Vocabulary Mapping +(IS, ID, CE, CNE, CWE)",Assignment,, +1,CNN.1,ID Number,ST,0,1,,,,identifier.value,,string,0,1,,,,, +2,CNN.2,Family Name,ST,0,1,,,,name.family,,string,0,1,,,,, +3,CNN.3,Given Name,ST,0,1,,,,name.given[1],,string,0,-1,,,,, +4,CNN.4,Second and Further Given Names or Initials Thereof,ST,0,1,,,,name.given[2],,string,0,-1,,,,, +5,CNN.5,"Suffix (e.g., JR or III)",ST,0,1,,,,name.suffix[1],,string,0,-1,,,,, +6,CNN.6,"Prefix (e.g., DR)",ST,0,1,,,,name.prefix,,string,0,-1,,,,, +7,CNN.7,"Degree (e.g., MD)",IS,0,1,,,,name.suffix[2],,string,0,-1,,,,, +8,CNN.8,Source Table,IS,0,1,,,,,,,,,,,,, +9,CNN.9,Assigning Authority- Namespace ID,IS,0,1,,,,,identifier.extension??-assigningauthority.nameSpaceID,string,0,1,,,,, +10,CNN.10,Assigning Authority- Universal ID,ST,0,1,,,,,identifier.extension??-assigningauthority.universalID,string,0,1,,,,, +11,CNN.11,Assigning Authority- Universal ID Type,ID,0,1,,,,,identifier.extension??-assigningauthority.univeralIDType,code,0,1,,,,, \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cnn/cnn-to-Practitioner.fhir b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cnn/cnn-to-Practitioner.fhir new file mode 100644 index 00000000000..65c15654828 --- /dev/null +++ b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cnn/cnn-to-Practitioner.fhir @@ -0,0 +1,235 @@ +{ + "resourceType" : "Bundle", + "id" : "1713393880004309000.b59a8aad-38c3-4243-be7c-45114f95fed9", + "meta" : { + "lastUpdated" : "2024-04-17T16:44:40.014-06:00" + }, + "identifier" : { + "system" : "https://reportstream.cdc.gov/prime-router", + "value" : "12345" + }, + "type" : "message", + "timestamp" : "2023-05-01T08:25:31.000-06:00", + "entry" : [ { + "fullUrl" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b", + "resource" : { + "resourceType" : "MessageHeader", + "id" : "827ccb0e-ea8a-306c-8c34-a16891f84e7b", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/encoding-characters", + "valueString" : "^~\\&#" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/character-set", + "valueString" : "UNICODE UTF-8" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/msh-message-header", + "extension" : [ { + "url" : "MSH.7", + "valueString" : "20230501102531-0400" + }, { + "url" : "MSH.10", + "valueString" : "12345" + } ] + } ], + "eventCoding" : { + "system" : "http://terminology.hl7.org/CodeSystem/v2-0003", + "code" : "R01", + "display" : "ORU^R01^ORU_R01" + }, + "sender" : { + "reference" : "Organization/1713393880112498000.f7f0e7e8-aaa8-4e0d-98df-6094345361fc" + } + } + }, { + "fullUrl" : "Organization/1713393880112498000.f7f0e7e8-aaa8-4e0d-98df-6094345361fc", + "resource" : { + "resourceType" : "Organization", + "id" : "1713393880112498000.f7f0e7e8-aaa8-4e0d-98df-6094345361fc", + "address" : [ { + "country" : "USA" + } ] + } + }, { + "fullUrl" : "Provenance/1713393880626524000.24529ecb-5e2d-42e2-a8b3-665dff92963b", + "resource" : { + "resourceType" : "Provenance", + "id" : "1713393880626524000.24529ecb-5e2d-42e2-a8b3-665dff92963b", + "target" : [ { + "reference" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b" + }, { + "reference" : "DiagnosticReport/1713393880899669000.c3855133-7bd8-4ea9-9e2a-2dae6bb5d58f" + } ], + "recorded" : "2023-05-01T10:25:31-04:00", + "activity" : { + "coding" : [ { + "display" : "ORU^R01^ORU_R01" + } ] + } + } + }, { + "fullUrl" : "Provenance/1713393880639311000.226a0bac-5c56-4652-8e9d-254fa905911c", + "resource" : { + "resourceType" : "Provenance", + "id" : "1713393880639311000.226a0bac-5c56-4652-8e9d-254fa905911c", + "recorded" : "2024-04-17T16:44:40Z", + "policy" : [ "http://hl7.org/fhir/uv/v2mappings/message-oru-r01-to-bundle" ], + "activity" : { + "coding" : [ { + "code" : "v2-FHIR transformation" + } ] + }, + "agent" : [ { + "type" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/provenance-participant-type", + "code" : "assembler" + } ] + }, + "who" : { + "reference" : "Organization/1713393880637824000.5cde0298-0f1b-46de-9e4e-d3b2900f7709" + } + } ] + } + }, { + "fullUrl" : "Organization/1713393880637824000.5cde0298-0f1b-46de-9e4e-d3b2900f7709", + "resource" : { + "resourceType" : "Organization", + "id" : "1713393880637824000.5cde0298-0f1b-46de-9e4e-d3b2900f7709", + "identifier" : [ { + "value" : "CDC PRIME - Atlanta" + }, { + "type" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/v2-0301" + } ] + }, + "system" : "urn:ietf:rfc:3986", + "value" : "2.16.840.1.114222.4.1.237821" + } ] + } + }, { + "fullUrl" : "Patient/1713393880658662000.8bba09eb-f326-4227-b606-ea2c18e1408b", + "resource" : { + "resourceType" : "Patient", + "id" : "1713393880658662000.8bba09eb-f326-4227-b606-ea2c18e1408b" + } + }, { + "fullUrl" : "Provenance/1713393880659653000.e1c2c5d7-d3c6-4706-bc5c-cb29449306db", + "resource" : { + "resourceType" : "Provenance", + "id" : "1713393880659653000.e1c2c5d7-d3c6-4706-bc5c-cb29449306db", + "target" : [ { + "reference" : "Patient/1713393880658662000.8bba09eb-f326-4227-b606-ea2c18e1408b" + } ], + "recorded" : "2024-04-17T16:44:40Z", + "activity" : { + "coding" : [ { + "system" : "https://terminology.hl7.org/CodeSystem/v3-DataOperation", + "code" : "UPDATE" + } ] + } + } + }, { + "fullUrl" : "Specimen/1713393880661409000.d1daeccb-38a5-4dd8-80ec-15092d564bbb", + "resource" : { + "resourceType" : "Specimen", + "id" : "1713393880661409000.d1daeccb-38a5-4dd8-80ec-15092d564bbb", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Segment", + "valueString" : "OBR" + } ] + } + }, { + "fullUrl" : "ServiceRequest/1713393880890702000.ba50d503-0a22-4ab3-8fcc-badd79e63838", + "resource" : { + "resourceType" : "ServiceRequest", + "id" : "1713393880890702000.ba50d503-0a22-4ab3-8fcc-badd79e63838", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/obr-observation-request", + "extension" : [ { + "url" : "OBR.25", + "valueId" : "F" + } ] + } ], + "status" : "unknown", + "subject" : { + "reference" : "Patient/1713393880658662000.8bba09eb-f326-4227-b606-ea2c18e1408b" + } + } + }, { + "fullUrl" : "DiagnosticReport/1713393880899669000.c3855133-7bd8-4ea9-9e2a-2dae6bb5d58f", + "resource" : { + "resourceType" : "DiagnosticReport", + "id" : "1713393880899669000.c3855133-7bd8-4ea9-9e2a-2dae6bb5d58f", + "basedOn" : [ { + "reference" : "ServiceRequest/1713393880890702000.ba50d503-0a22-4ab3-8fcc-badd79e63838" + } ], + "status" : "final", + "subject" : { + "reference" : "Patient/1713393880658662000.8bba09eb-f326-4227-b606-ea2c18e1408b" + }, + "resultsInterpreter" : [ { + "reference" : "PractitionerRole/1713393880898126000.4772e730-ae2c-44d0-9aff-a2b65a8076e5" + } ], + "specimen" : [ { + "reference" : "Specimen/1713393880661409000.d1daeccb-38a5-4dd8-80ec-15092d564bbb" + } ] + } + }, { + "fullUrl" : "Practitioner/1713393880896316000.bb4bb5ef-9184-496a-ad51-2621b4310570", + "resource" : { + "resourceType" : "Practitioner", + "id" : "1713393880896316000.bb4bb5ef-9184-496a-ad51-2621b4310570", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cnn-practitioner", + "extension" : [ { + "url" : "CNN.3", + "valueString" : "JAMISON" + }, { + "url" : "CNN.4", + "valueString" : "S" + }, { + "url" : "CNN.5", + "valueString" : "ESQ" + }, { + "url" : "CNN.7", + "valueString" : "MD" + }, { + "url" : "CNN.8", + "valueString" : "X" + } ] + } ], + "identifier" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", + "valueString" : "Assigning Authority" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", + "valueString" : "2.1.4.1" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", + "valueCode" : "ISO" + } ] + } ], + "value" : "123" + } ], + "name" : [ { + "family" : "DOE", + "given" : [ "JAMISON", "S" ], + "prefix" : [ "DR" ], + "suffix" : [ "ESQ", "MD" ] + } ] + } + }, { + "fullUrl" : "PractitionerRole/1713393880898126000.4772e730-ae2c-44d0-9aff-a2b65a8076e5", + "resource" : { + "resourceType" : "PractitionerRole", + "id" : "1713393880898126000.4772e730-ae2c-44d0-9aff-a2b65a8076e5", + "practitioner" : { + "reference" : "Practitioner/1713393880896316000.bb4bb5ef-9184-496a-ad51-2621b4310570" + } + } + } ] +} \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cnn/cnn-to-Practitioner.hl7 b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cnn/cnn-to-Practitioner.hl7 new file mode 100644 index 00000000000..189e58ec19d --- /dev/null +++ b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cnn/cnn-to-Practitioner.hl7 @@ -0,0 +1,3 @@ +MSH|^~\&#|||||20230501102531-0400||ORU^R01^ORU_R01|12345||2.5.1|||||USA|UNICODE UTF-8 +PID|1 +OBR|1||||||||||||||||||||||||F|||||||123&DOE&JAMISON&S&ESQ&DR&MD&X&Assigning Authority&2.1.4.1&ISO diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-10-test-value-cwe8.fhir b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-10-test-value-cwe8.fhir new file mode 100644 index 00000000000..58176145db5 --- /dev/null +++ b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-10-test-value-cwe8.fhir @@ -0,0 +1,150 @@ +{ + "resourceType" : "Bundle", + "id" : "1713394837210696000.6d4364a4-0e4f-48fb-9f58-6eea07911f37", + "meta" : { + "lastUpdated" : "2024-04-17T17:00:37.220-06:00" + }, + "identifier" : { + "system" : "https://reportstream.cdc.gov/prime-router", + "value" : "12345" + }, + "type" : "message", + "timestamp" : "2023-05-01T08:25:31.000-06:00", + "entry" : [ { + "fullUrl" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b", + "resource" : { + "resourceType" : "MessageHeader", + "id" : "827ccb0e-ea8a-306c-8c34-a16891f84e7b", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/encoding-characters", + "valueString" : "^~\\&#" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/character-set", + "valueString" : "UNICODE UTF-8" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/msh-message-header", + "extension" : [ { + "url" : "MSH.7", + "valueString" : "20230501102531-0400" + }, { + "url" : "MSH.10", + "valueString" : "12345" + } ] + } ], + "eventCoding" : { + "system" : "http://terminology.hl7.org/CodeSystem/v2-0003", + "code" : "R01", + "display" : "ORU^R01^ORU_R01" + }, + "sender" : { + "reference" : "Organization/1713394837313897000.aa92f5d6-b2d5-44c4-8891-b59a96255af6" + } + } + }, { + "fullUrl" : "Organization/1713394837313897000.aa92f5d6-b2d5-44c4-8891-b59a96255af6", + "resource" : { + "resourceType" : "Organization", + "id" : "1713394837313897000.aa92f5d6-b2d5-44c4-8891-b59a96255af6", + "address" : [ { + "country" : "USA" + } ] + } + }, { + "fullUrl" : "Provenance/1713394837829159000.d43ae37a-2985-4dd4-8a11-1ae513d53dde", + "resource" : { + "resourceType" : "Provenance", + "id" : "1713394837829159000.d43ae37a-2985-4dd4-8a11-1ae513d53dde", + "target" : [ { + "reference" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b" + } ], + "recorded" : "2023-05-01T10:25:31-04:00", + "activity" : { + "coding" : [ { + "display" : "ORU^R01^ORU_R01" + } ] + } + } + }, { + "fullUrl" : "Provenance/1713394837842282000.add5d0d0-e321-4626-a06f-9bc5040c2b86", + "resource" : { + "resourceType" : "Provenance", + "id" : "1713394837842282000.add5d0d0-e321-4626-a06f-9bc5040c2b86", + "recorded" : "2024-04-17T17:00:37Z", + "policy" : [ "http://hl7.org/fhir/uv/v2mappings/message-oru-r01-to-bundle" ], + "activity" : { + "coding" : [ { + "code" : "v2-FHIR transformation" + } ] + }, + "agent" : [ { + "type" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/provenance-participant-type", + "code" : "assembler" + } ] + }, + "who" : { + "reference" : "Organization/1713394837841300000.5a813ac7-38a9-4344-a047-48bea62df89b" + } + } ] + } + }, { + "fullUrl" : "Organization/1713394837841300000.5a813ac7-38a9-4344-a047-48bea62df89b", + "resource" : { + "resourceType" : "Organization", + "id" : "1713394837841300000.5a813ac7-38a9-4344-a047-48bea62df89b", + "identifier" : [ { + "value" : "CDC PRIME - Atlanta" + }, { + "type" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/v2-0301" + } ] + }, + "system" : "urn:ietf:rfc:3986", + "value" : "2.16.840.1.114222.4.1.237821" + } ] + } + }, { + "fullUrl" : "Patient/1713394837869503000.9be92edb-e84e-45d7-86a6-1d0efef26c80", + "resource" : { + "resourceType" : "Patient", + "id" : "1713394837869503000.9be92edb-e84e-45d7-86a6-1d0efef26c80", + "extension" : [ { + "url" : "http://hl7.org/fhir/StructureDefinition/patient-citizenship", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/code", + "valueCodeableConcept" : { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", + "valueString" : "PID.39" + } ], + "coding" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", + "valueString" : "alt-coding" + } ], + "version" : "AltVersion" + } ] + } + } ] + } ] + } + }, { + "fullUrl" : "Provenance/1713394837870856000.b345411b-f8a4-4974-862a-b2068d7b09b2", + "resource" : { + "resourceType" : "Provenance", + "id" : "1713394837870856000.b345411b-f8a4-4974-862a-b2068d7b09b2", + "target" : [ { + "reference" : "Patient/1713394837869503000.9be92edb-e84e-45d7-86a6-1d0efef26c80" + } ], + "recorded" : "2024-04-17T17:00:37Z", + "activity" : { + "coding" : [ { + "system" : "https://terminology.hl7.org/CodeSystem/v3-DataOperation", + "code" : "UPDATE" + } ] + } + } + } ] +} \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-10-test-value-cwe8.hl7 b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-10-test-value-cwe8.hl7 new file mode 100644 index 00000000000..882e62bbe8b --- /dev/null +++ b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-10-test-value-cwe8.hl7 @@ -0,0 +1,2 @@ +MSH|^~\&#|||||20230501102531-0400||ORU^R01^ORU_R01|12345||2.5.1|||||USA|UNICODE UTF-8 +PID|1||||||||||||||||||||||||||||||||||||||^^^^^^^AltVersion \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-11-test-value-cwe9.fhir b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-11-test-value-cwe9.fhir new file mode 100644 index 00000000000..83f17c7f07b --- /dev/null +++ b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-11-test-value-cwe9.fhir @@ -0,0 +1,144 @@ +{ + "resourceType" : "Bundle", + "id" : "1713394852853645000.7333fe01-15d1-4dcb-89a1-24111f862e76", + "meta" : { + "lastUpdated" : "2024-04-17T17:00:52.865-06:00" + }, + "identifier" : { + "system" : "https://reportstream.cdc.gov/prime-router", + "value" : "12345" + }, + "type" : "message", + "timestamp" : "2023-05-01T08:25:31.000-06:00", + "entry" : [ { + "fullUrl" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b", + "resource" : { + "resourceType" : "MessageHeader", + "id" : "827ccb0e-ea8a-306c-8c34-a16891f84e7b", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/encoding-characters", + "valueString" : "^~\\&#" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/character-set", + "valueString" : "UNICODE UTF-8" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/msh-message-header", + "extension" : [ { + "url" : "MSH.7", + "valueString" : "20230501102531-0400" + }, { + "url" : "MSH.10", + "valueString" : "12345" + } ] + } ], + "eventCoding" : { + "system" : "http://terminology.hl7.org/CodeSystem/v2-0003", + "code" : "R01", + "display" : "ORU^R01^ORU_R01" + }, + "sender" : { + "reference" : "Organization/1713394852955892000.e4773570-28b7-4b33-9d00-f7c4bd9e68b0" + } + } + }, { + "fullUrl" : "Organization/1713394852955892000.e4773570-28b7-4b33-9d00-f7c4bd9e68b0", + "resource" : { + "resourceType" : "Organization", + "id" : "1713394852955892000.e4773570-28b7-4b33-9d00-f7c4bd9e68b0", + "address" : [ { + "country" : "USA" + } ] + } + }, { + "fullUrl" : "Provenance/1713394853486820000.7349c98d-11a8-4752-9627-e763ad1cd896", + "resource" : { + "resourceType" : "Provenance", + "id" : "1713394853486820000.7349c98d-11a8-4752-9627-e763ad1cd896", + "target" : [ { + "reference" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b" + } ], + "recorded" : "2023-05-01T10:25:31-04:00", + "activity" : { + "coding" : [ { + "display" : "ORU^R01^ORU_R01" + } ] + } + } + }, { + "fullUrl" : "Provenance/1713394853500088000.28e9b60d-9721-4b1a-9f2d-fa10719db7ff", + "resource" : { + "resourceType" : "Provenance", + "id" : "1713394853500088000.28e9b60d-9721-4b1a-9f2d-fa10719db7ff", + "recorded" : "2024-04-17T17:00:53Z", + "policy" : [ "http://hl7.org/fhir/uv/v2mappings/message-oru-r01-to-bundle" ], + "activity" : { + "coding" : [ { + "code" : "v2-FHIR transformation" + } ] + }, + "agent" : [ { + "type" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/provenance-participant-type", + "code" : "assembler" + } ] + }, + "who" : { + "reference" : "Organization/1713394853498977000.ca6803ad-9104-4ef5-9f5b-638cb0d32529" + } + } ] + } + }, { + "fullUrl" : "Organization/1713394853498977000.ca6803ad-9104-4ef5-9f5b-638cb0d32529", + "resource" : { + "resourceType" : "Organization", + "id" : "1713394853498977000.ca6803ad-9104-4ef5-9f5b-638cb0d32529", + "identifier" : [ { + "value" : "CDC PRIME - Atlanta" + }, { + "type" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/v2-0301" + } ] + }, + "system" : "urn:ietf:rfc:3986", + "value" : "2.16.840.1.114222.4.1.237821" + } ] + } + }, { + "fullUrl" : "Patient/1713394853525700000.4afe1c09-b4e0-4b4f-9035-c6ef01cd7e15", + "resource" : { + "resourceType" : "Patient", + "id" : "1713394853525700000.4afe1c09-b4e0-4b4f-9035-c6ef01cd7e15", + "extension" : [ { + "url" : "http://hl7.org/fhir/StructureDefinition/patient-citizenship", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/code", + "valueCodeableConcept" : { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", + "valueString" : "PID.39" + } ], + "text" : "OriginalText" + } + } ] + } ] + } + }, { + "fullUrl" : "Provenance/1713394853527127000.d034a7e7-f80f-4ded-ac8c-32753d81d7e8", + "resource" : { + "resourceType" : "Provenance", + "id" : "1713394853527127000.d034a7e7-f80f-4ded-ac8c-32753d81d7e8", + "target" : [ { + "reference" : "Patient/1713394853525700000.4afe1c09-b4e0-4b4f-9035-c6ef01cd7e15" + } ], + "recorded" : "2024-04-17T17:00:53Z", + "activity" : { + "coding" : [ { + "system" : "https://terminology.hl7.org/CodeSystem/v3-DataOperation", + "code" : "UPDATE" + } ] + } + } + } ] +} \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-11-test-value-cwe9.hl7 b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-11-test-value-cwe9.hl7 new file mode 100644 index 00000000000..104007c7aaf --- /dev/null +++ b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-11-test-value-cwe9.hl7 @@ -0,0 +1,2 @@ +MSH|^~\&#|||||20230501102531-0400||ORU^R01^ORU_R01|12345||2.5.1|||||USA|UNICODE UTF-8 +PID|1||||||||||||||||||||||||||||||||||||||^^^^^^^^OriginalText \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-3-test-value-cwe1.fhir b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-3-test-value-cwe1.fhir new file mode 100644 index 00000000000..fd93060f804 --- /dev/null +++ b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-3-test-value-cwe1.fhir @@ -0,0 +1,150 @@ +{ + "resourceType" : "Bundle", + "id" : "1713394868669158000.9e444cc7-01cc-4bb3-ae8e-e6c7d3cb4d68", + "meta" : { + "lastUpdated" : "2024-04-17T17:01:08.679-06:00" + }, + "identifier" : { + "system" : "https://reportstream.cdc.gov/prime-router", + "value" : "12345" + }, + "type" : "message", + "timestamp" : "2023-05-01T08:25:31.000-06:00", + "entry" : [ { + "fullUrl" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b", + "resource" : { + "resourceType" : "MessageHeader", + "id" : "827ccb0e-ea8a-306c-8c34-a16891f84e7b", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/encoding-characters", + "valueString" : "^~\\&#" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/character-set", + "valueString" : "UNICODE UTF-8" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/msh-message-header", + "extension" : [ { + "url" : "MSH.7", + "valueString" : "20230501102531-0400" + }, { + "url" : "MSH.10", + "valueString" : "12345" + } ] + } ], + "eventCoding" : { + "system" : "http://terminology.hl7.org/CodeSystem/v2-0003", + "code" : "R01", + "display" : "ORU^R01^ORU_R01" + }, + "sender" : { + "reference" : "Organization/1713394868772588000.ead2307e-0bcb-4cd7-8bb2-f4d0254ce141" + } + } + }, { + "fullUrl" : "Organization/1713394868772588000.ead2307e-0bcb-4cd7-8bb2-f4d0254ce141", + "resource" : { + "resourceType" : "Organization", + "id" : "1713394868772588000.ead2307e-0bcb-4cd7-8bb2-f4d0254ce141", + "address" : [ { + "country" : "USA" + } ] + } + }, { + "fullUrl" : "Provenance/1713394869306994000.79f1c6fb-9444-4167-b47b-9f1f2e0b3eb1", + "resource" : { + "resourceType" : "Provenance", + "id" : "1713394869306994000.79f1c6fb-9444-4167-b47b-9f1f2e0b3eb1", + "target" : [ { + "reference" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b" + } ], + "recorded" : "2023-05-01T10:25:31-04:00", + "activity" : { + "coding" : [ { + "display" : "ORU^R01^ORU_R01" + } ] + } + } + }, { + "fullUrl" : "Provenance/1713394869319060000.573ef371-46e1-4c57-b3e8-f2c8288e8113", + "resource" : { + "resourceType" : "Provenance", + "id" : "1713394869319060000.573ef371-46e1-4c57-b3e8-f2c8288e8113", + "recorded" : "2024-04-17T17:01:09Z", + "policy" : [ "http://hl7.org/fhir/uv/v2mappings/message-oru-r01-to-bundle" ], + "activity" : { + "coding" : [ { + "code" : "v2-FHIR transformation" + } ] + }, + "agent" : [ { + "type" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/provenance-participant-type", + "code" : "assembler" + } ] + }, + "who" : { + "reference" : "Organization/1713394869318006000.d15bc0ac-9d93-413c-871b-6ff60b1b3e31" + } + } ] + } + }, { + "fullUrl" : "Organization/1713394869318006000.d15bc0ac-9d93-413c-871b-6ff60b1b3e31", + "resource" : { + "resourceType" : "Organization", + "id" : "1713394869318006000.d15bc0ac-9d93-413c-871b-6ff60b1b3e31", + "identifier" : [ { + "value" : "CDC PRIME - Atlanta" + }, { + "type" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/v2-0301" + } ] + }, + "system" : "urn:ietf:rfc:3986", + "value" : "2.16.840.1.114222.4.1.237821" + } ] + } + }, { + "fullUrl" : "Patient/1713394869340318000.022c7d88-fd33-489c-8067-cbf9e030f17c", + "resource" : { + "resourceType" : "Patient", + "id" : "1713394869340318000.022c7d88-fd33-489c-8067-cbf9e030f17c", + "extension" : [ { + "url" : "http://hl7.org/fhir/StructureDefinition/patient-citizenship", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/code", + "valueCodeableConcept" : { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", + "valueString" : "PID.39" + } ], + "coding" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", + "valueString" : "coding" + } ], + "code" : "PrimaryCode" + } ] + } + } ] + } ] + } + }, { + "fullUrl" : "Provenance/1713394869341705000.f66a1601-3434-4439-9080-84876088c32e", + "resource" : { + "resourceType" : "Provenance", + "id" : "1713394869341705000.f66a1601-3434-4439-9080-84876088c32e", + "target" : [ { + "reference" : "Patient/1713394869340318000.022c7d88-fd33-489c-8067-cbf9e030f17c" + } ], + "recorded" : "2024-04-17T17:01:09Z", + "activity" : { + "coding" : [ { + "system" : "https://terminology.hl7.org/CodeSystem/v3-DataOperation", + "code" : "UPDATE" + } ] + } + } + } ] +} \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-3-test-value-cwe1.hl7 b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-3-test-value-cwe1.hl7 new file mode 100644 index 00000000000..b0cb36f233d --- /dev/null +++ b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-3-test-value-cwe1.hl7 @@ -0,0 +1,2 @@ +MSH|^~\&#|||||20230501102531-0400||ORU^R01^ORU_R01|12345||2.5.1|||||USA|UNICODE UTF-8 +PID|1||||||||||||||||||||||||||||||||||||||PrimaryCode \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-4-test-value-cwe2.fhir b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-4-test-value-cwe2.fhir new file mode 100644 index 00000000000..41658edf0ab --- /dev/null +++ b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-4-test-value-cwe2.fhir @@ -0,0 +1,150 @@ +{ + "resourceType" : "Bundle", + "id" : "1713394884120918000.1ff35302-4750-4b4a-aee0-606ec95a67fb", + "meta" : { + "lastUpdated" : "2024-04-17T17:01:24.131-06:00" + }, + "identifier" : { + "system" : "https://reportstream.cdc.gov/prime-router", + "value" : "12345" + }, + "type" : "message", + "timestamp" : "2023-05-01T08:25:31.000-06:00", + "entry" : [ { + "fullUrl" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b", + "resource" : { + "resourceType" : "MessageHeader", + "id" : "827ccb0e-ea8a-306c-8c34-a16891f84e7b", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/encoding-characters", + "valueString" : "^~\\&#" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/character-set", + "valueString" : "UNICODE UTF-8" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/msh-message-header", + "extension" : [ { + "url" : "MSH.7", + "valueString" : "20230501102531-0400" + }, { + "url" : "MSH.10", + "valueString" : "12345" + } ] + } ], + "eventCoding" : { + "system" : "http://terminology.hl7.org/CodeSystem/v2-0003", + "code" : "R01", + "display" : "ORU^R01^ORU_R01" + }, + "sender" : { + "reference" : "Organization/1713394884221106000.623c27fd-60ed-4ad6-b126-cefcea8bc084" + } + } + }, { + "fullUrl" : "Organization/1713394884221106000.623c27fd-60ed-4ad6-b126-cefcea8bc084", + "resource" : { + "resourceType" : "Organization", + "id" : "1713394884221106000.623c27fd-60ed-4ad6-b126-cefcea8bc084", + "address" : [ { + "country" : "USA" + } ] + } + }, { + "fullUrl" : "Provenance/1713394884765295000.f231d2bc-bb57-453c-8145-8dbd40379604", + "resource" : { + "resourceType" : "Provenance", + "id" : "1713394884765295000.f231d2bc-bb57-453c-8145-8dbd40379604", + "target" : [ { + "reference" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b" + } ], + "recorded" : "2023-05-01T10:25:31-04:00", + "activity" : { + "coding" : [ { + "display" : "ORU^R01^ORU_R01" + } ] + } + } + }, { + "fullUrl" : "Provenance/1713394884777774000.937d0b02-67d3-4a01-8f89-9556750604ff", + "resource" : { + "resourceType" : "Provenance", + "id" : "1713394884777774000.937d0b02-67d3-4a01-8f89-9556750604ff", + "recorded" : "2024-04-17T17:01:24Z", + "policy" : [ "http://hl7.org/fhir/uv/v2mappings/message-oru-r01-to-bundle" ], + "activity" : { + "coding" : [ { + "code" : "v2-FHIR transformation" + } ] + }, + "agent" : [ { + "type" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/provenance-participant-type", + "code" : "assembler" + } ] + }, + "who" : { + "reference" : "Organization/1713394884776790000.f5e44c71-ef5a-4f13-99d0-838104b878a6" + } + } ] + } + }, { + "fullUrl" : "Organization/1713394884776790000.f5e44c71-ef5a-4f13-99d0-838104b878a6", + "resource" : { + "resourceType" : "Organization", + "id" : "1713394884776790000.f5e44c71-ef5a-4f13-99d0-838104b878a6", + "identifier" : [ { + "value" : "CDC PRIME - Atlanta" + }, { + "type" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/v2-0301" + } ] + }, + "system" : "urn:ietf:rfc:3986", + "value" : "2.16.840.1.114222.4.1.237821" + } ] + } + }, { + "fullUrl" : "Patient/1713394884800499000.ea898f68-1586-4f58-b10b-2b1badf8317d", + "resource" : { + "resourceType" : "Patient", + "id" : "1713394884800499000.ea898f68-1586-4f58-b10b-2b1badf8317d", + "extension" : [ { + "url" : "http://hl7.org/fhir/StructureDefinition/patient-citizenship", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/code", + "valueCodeableConcept" : { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", + "valueString" : "PID.39" + } ], + "coding" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", + "valueString" : "coding" + } ], + "display" : "PrimaryText" + } ] + } + } ] + } ] + } + }, { + "fullUrl" : "Provenance/1713394884802691000.ed786815-9637-4ba9-b745-3b0b4ae30693", + "resource" : { + "resourceType" : "Provenance", + "id" : "1713394884802691000.ed786815-9637-4ba9-b745-3b0b4ae30693", + "target" : [ { + "reference" : "Patient/1713394884800499000.ea898f68-1586-4f58-b10b-2b1badf8317d" + } ], + "recorded" : "2024-04-17T17:01:24Z", + "activity" : { + "coding" : [ { + "system" : "https://terminology.hl7.org/CodeSystem/v3-DataOperation", + "code" : "UPDATE" + } ] + } + } + } ] +} \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-4-test-value-cwe2.hl7 b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-4-test-value-cwe2.hl7 new file mode 100644 index 00000000000..3dcda3b024f --- /dev/null +++ b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-4-test-value-cwe2.hl7 @@ -0,0 +1,2 @@ +MSH|^~\&#|||||20230501102531-0400||ORU^R01^ORU_R01|12345||2.5.1|||||USA|UNICODE UTF-8 +PID|1||||||||||||||||||||||||||||||||||||||^PrimaryText \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-5-test-value-cwe3.fhir b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-5-test-value-cwe3.fhir new file mode 100644 index 00000000000..77567bae565 --- /dev/null +++ b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-5-test-value-cwe3.fhir @@ -0,0 +1,153 @@ +{ + "resourceType" : "Bundle", + "id" : "1713394899547799000.54d22dce-08ee-4875-9180-2159fa376182", + "meta" : { + "lastUpdated" : "2024-04-17T17:01:39.557-06:00" + }, + "identifier" : { + "system" : "https://reportstream.cdc.gov/prime-router", + "value" : "12345" + }, + "type" : "message", + "timestamp" : "2023-05-01T08:25:31.000-06:00", + "entry" : [ { + "fullUrl" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b", + "resource" : { + "resourceType" : "MessageHeader", + "id" : "827ccb0e-ea8a-306c-8c34-a16891f84e7b", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/encoding-characters", + "valueString" : "^~\\&#" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/character-set", + "valueString" : "UNICODE UTF-8" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/msh-message-header", + "extension" : [ { + "url" : "MSH.7", + "valueString" : "20230501102531-0400" + }, { + "url" : "MSH.10", + "valueString" : "12345" + } ] + } ], + "eventCoding" : { + "system" : "http://terminology.hl7.org/CodeSystem/v2-0003", + "code" : "R01", + "display" : "ORU^R01^ORU_R01" + }, + "sender" : { + "reference" : "Organization/1713394899646578000.605178ae-b70f-4261-99a1-4db9ab21557e" + } + } + }, { + "fullUrl" : "Organization/1713394899646578000.605178ae-b70f-4261-99a1-4db9ab21557e", + "resource" : { + "resourceType" : "Organization", + "id" : "1713394899646578000.605178ae-b70f-4261-99a1-4db9ab21557e", + "address" : [ { + "country" : "USA" + } ] + } + }, { + "fullUrl" : "Provenance/1713394900161177000.5f841782-40a8-4f17-836f-fb016fc2bde0", + "resource" : { + "resourceType" : "Provenance", + "id" : "1713394900161177000.5f841782-40a8-4f17-836f-fb016fc2bde0", + "target" : [ { + "reference" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b" + } ], + "recorded" : "2023-05-01T10:25:31-04:00", + "activity" : { + "coding" : [ { + "display" : "ORU^R01^ORU_R01" + } ] + } + } + }, { + "fullUrl" : "Provenance/1713394900173237000.d031b64d-b9b7-45d4-bf85-7f3dde2d9684", + "resource" : { + "resourceType" : "Provenance", + "id" : "1713394900173237000.d031b64d-b9b7-45d4-bf85-7f3dde2d9684", + "recorded" : "2024-04-17T17:01:40Z", + "policy" : [ "http://hl7.org/fhir/uv/v2mappings/message-oru-r01-to-bundle" ], + "activity" : { + "coding" : [ { + "code" : "v2-FHIR transformation" + } ] + }, + "agent" : [ { + "type" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/provenance-participant-type", + "code" : "assembler" + } ] + }, + "who" : { + "reference" : "Organization/1713394900172339000.99e30d90-0c58-4be0-9abc-30800efc755f" + } + } ] + } + }, { + "fullUrl" : "Organization/1713394900172339000.99e30d90-0c58-4be0-9abc-30800efc755f", + "resource" : { + "resourceType" : "Organization", + "id" : "1713394900172339000.99e30d90-0c58-4be0-9abc-30800efc755f", + "identifier" : [ { + "value" : "CDC PRIME - Atlanta" + }, { + "type" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/v2-0301" + } ] + }, + "system" : "urn:ietf:rfc:3986", + "value" : "2.16.840.1.114222.4.1.237821" + } ] + } + }, { + "fullUrl" : "Patient/1713394900198229000.3dab0550-a4e0-4407-bf8b-d2e5caa361af", + "resource" : { + "resourceType" : "Patient", + "id" : "1713394900198229000.3dab0550-a4e0-4407-bf8b-d2e5caa361af", + "extension" : [ { + "url" : "http://hl7.org/fhir/StructureDefinition/patient-citizenship", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/code", + "valueCodeableConcept" : { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", + "valueString" : "PID.39" + } ], + "coding" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", + "valueString" : "coding" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", + "valueString" : "LN" + } ], + "system" : "http://loinc.org" + } ] + } + } ] + } ] + } + }, { + "fullUrl" : "Provenance/1713394900199735000.e4318de8-27e0-46d8-a7c5-a90ebd0424d4", + "resource" : { + "resourceType" : "Provenance", + "id" : "1713394900199735000.e4318de8-27e0-46d8-a7c5-a90ebd0424d4", + "target" : [ { + "reference" : "Patient/1713394900198229000.3dab0550-a4e0-4407-bf8b-d2e5caa361af" + } ], + "recorded" : "2024-04-17T17:01:40Z", + "activity" : { + "coding" : [ { + "system" : "https://terminology.hl7.org/CodeSystem/v3-DataOperation", + "code" : "UPDATE" + } ] + } + } + } ] +} \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-5-test-value-cwe3.hl7 b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-5-test-value-cwe3.hl7 new file mode 100644 index 00000000000..3dad063335d --- /dev/null +++ b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-5-test-value-cwe3.hl7 @@ -0,0 +1,2 @@ +MSH|^~\&#|||||20230501102531-0400||ORU^R01^ORU_R01|12345||2.5.1|||||USA|UNICODE UTF-8 +PID|1||||||||||||||||||||||||||||||||||||||^^LN \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-6-test-value-cwe4.fhir b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-6-test-value-cwe4.fhir new file mode 100644 index 00000000000..cfdca3bcfdb --- /dev/null +++ b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-6-test-value-cwe4.fhir @@ -0,0 +1,150 @@ +{ + "resourceType" : "Bundle", + "id" : "1713394915037867000.8084b1dc-6077-4af0-8bd2-948e0d08a02b", + "meta" : { + "lastUpdated" : "2024-04-17T17:01:55.048-06:00" + }, + "identifier" : { + "system" : "https://reportstream.cdc.gov/prime-router", + "value" : "12345" + }, + "type" : "message", + "timestamp" : "2023-05-01T08:25:31.000-06:00", + "entry" : [ { + "fullUrl" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b", + "resource" : { + "resourceType" : "MessageHeader", + "id" : "827ccb0e-ea8a-306c-8c34-a16891f84e7b", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/encoding-characters", + "valueString" : "^~\\&#" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/character-set", + "valueString" : "UNICODE UTF-8" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/msh-message-header", + "extension" : [ { + "url" : "MSH.7", + "valueString" : "20230501102531-0400" + }, { + "url" : "MSH.10", + "valueString" : "12345" + } ] + } ], + "eventCoding" : { + "system" : "http://terminology.hl7.org/CodeSystem/v2-0003", + "code" : "R01", + "display" : "ORU^R01^ORU_R01" + }, + "sender" : { + "reference" : "Organization/1713394915134823000.950e8a11-6913-4b13-b125-8a6f4905f63b" + } + } + }, { + "fullUrl" : "Organization/1713394915134823000.950e8a11-6913-4b13-b125-8a6f4905f63b", + "resource" : { + "resourceType" : "Organization", + "id" : "1713394915134823000.950e8a11-6913-4b13-b125-8a6f4905f63b", + "address" : [ { + "country" : "USA" + } ] + } + }, { + "fullUrl" : "Provenance/1713394915661923000.3616ee85-0de2-40c4-af14-d1f6dc8fe7e1", + "resource" : { + "resourceType" : "Provenance", + "id" : "1713394915661923000.3616ee85-0de2-40c4-af14-d1f6dc8fe7e1", + "target" : [ { + "reference" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b" + } ], + "recorded" : "2023-05-01T10:25:31-04:00", + "activity" : { + "coding" : [ { + "display" : "ORU^R01^ORU_R01" + } ] + } + } + }, { + "fullUrl" : "Provenance/1713394915683687000.a25e91d3-db10-4eca-8c7d-4e1fe981eaa2", + "resource" : { + "resourceType" : "Provenance", + "id" : "1713394915683687000.a25e91d3-db10-4eca-8c7d-4e1fe981eaa2", + "recorded" : "2024-04-17T17:01:55Z", + "policy" : [ "http://hl7.org/fhir/uv/v2mappings/message-oru-r01-to-bundle" ], + "activity" : { + "coding" : [ { + "code" : "v2-FHIR transformation" + } ] + }, + "agent" : [ { + "type" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/provenance-participant-type", + "code" : "assembler" + } ] + }, + "who" : { + "reference" : "Organization/1713394915682548000.9bbac550-6d3f-4abc-a98d-65ea28f91d3f" + } + } ] + } + }, { + "fullUrl" : "Organization/1713394915682548000.9bbac550-6d3f-4abc-a98d-65ea28f91d3f", + "resource" : { + "resourceType" : "Organization", + "id" : "1713394915682548000.9bbac550-6d3f-4abc-a98d-65ea28f91d3f", + "identifier" : [ { + "value" : "CDC PRIME - Atlanta" + }, { + "type" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/v2-0301" + } ] + }, + "system" : "urn:ietf:rfc:3986", + "value" : "2.16.840.1.114222.4.1.237821" + } ] + } + }, { + "fullUrl" : "Patient/1713394915705940000.6403584d-b35e-4580-b05c-c4588c19e663", + "resource" : { + "resourceType" : "Patient", + "id" : "1713394915705940000.6403584d-b35e-4580-b05c-c4588c19e663", + "extension" : [ { + "url" : "http://hl7.org/fhir/StructureDefinition/patient-citizenship", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/code", + "valueCodeableConcept" : { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", + "valueString" : "PID.39" + } ], + "coding" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", + "valueString" : "alt-coding" + } ], + "code" : "AltCode" + } ] + } + } ] + } ] + } + }, { + "fullUrl" : "Provenance/1713394915707211000.4b4dcd35-defb-47e5-b3f4-67c876edca82", + "resource" : { + "resourceType" : "Provenance", + "id" : "1713394915707211000.4b4dcd35-defb-47e5-b3f4-67c876edca82", + "target" : [ { + "reference" : "Patient/1713394915705940000.6403584d-b35e-4580-b05c-c4588c19e663" + } ], + "recorded" : "2024-04-17T17:01:55Z", + "activity" : { + "coding" : [ { + "system" : "https://terminology.hl7.org/CodeSystem/v3-DataOperation", + "code" : "UPDATE" + } ] + } + } + } ] +} \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-6-test-value-cwe4.hl7 b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-6-test-value-cwe4.hl7 new file mode 100644 index 00000000000..4247159a94f --- /dev/null +++ b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-6-test-value-cwe4.hl7 @@ -0,0 +1,2 @@ +MSH|^~\&#|||||20230501102531-0400||ORU^R01^ORU_R01|12345||2.5.1|||||USA|UNICODE UTF-8 +PID|1||||||||||||||||||||||||||||||||||||||^^^AltCode \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-7-test-value-cwe5.fhir b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-7-test-value-cwe5.fhir new file mode 100644 index 00000000000..9adc605b291 --- /dev/null +++ b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-7-test-value-cwe5.fhir @@ -0,0 +1,150 @@ +{ + "resourceType" : "Bundle", + "id" : "1713394930411716000.94132fcc-bd2e-4622-8a72-df8271619a87", + "meta" : { + "lastUpdated" : "2024-04-17T17:02:10.420-06:00" + }, + "identifier" : { + "system" : "https://reportstream.cdc.gov/prime-router", + "value" : "12345" + }, + "type" : "message", + "timestamp" : "2023-05-01T08:25:31.000-06:00", + "entry" : [ { + "fullUrl" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b", + "resource" : { + "resourceType" : "MessageHeader", + "id" : "827ccb0e-ea8a-306c-8c34-a16891f84e7b", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/encoding-characters", + "valueString" : "^~\\&#" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/character-set", + "valueString" : "UNICODE UTF-8" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/msh-message-header", + "extension" : [ { + "url" : "MSH.7", + "valueString" : "20230501102531-0400" + }, { + "url" : "MSH.10", + "valueString" : "12345" + } ] + } ], + "eventCoding" : { + "system" : "http://terminology.hl7.org/CodeSystem/v2-0003", + "code" : "R01", + "display" : "ORU^R01^ORU_R01" + }, + "sender" : { + "reference" : "Organization/1713394930509966000.14eeac11-cecb-4050-9775-a50cc3b39921" + } + } + }, { + "fullUrl" : "Organization/1713394930509966000.14eeac11-cecb-4050-9775-a50cc3b39921", + "resource" : { + "resourceType" : "Organization", + "id" : "1713394930509966000.14eeac11-cecb-4050-9775-a50cc3b39921", + "address" : [ { + "country" : "USA" + } ] + } + }, { + "fullUrl" : "Provenance/1713394931027309000.50553de8-66c6-4a15-906e-3c198d4b2a2d", + "resource" : { + "resourceType" : "Provenance", + "id" : "1713394931027309000.50553de8-66c6-4a15-906e-3c198d4b2a2d", + "target" : [ { + "reference" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b" + } ], + "recorded" : "2023-05-01T10:25:31-04:00", + "activity" : { + "coding" : [ { + "display" : "ORU^R01^ORU_R01" + } ] + } + } + }, { + "fullUrl" : "Provenance/1713394931038908000.f2eaf4d9-e667-4115-829c-676022564e13", + "resource" : { + "resourceType" : "Provenance", + "id" : "1713394931038908000.f2eaf4d9-e667-4115-829c-676022564e13", + "recorded" : "2024-04-17T17:02:11Z", + "policy" : [ "http://hl7.org/fhir/uv/v2mappings/message-oru-r01-to-bundle" ], + "activity" : { + "coding" : [ { + "code" : "v2-FHIR transformation" + } ] + }, + "agent" : [ { + "type" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/provenance-participant-type", + "code" : "assembler" + } ] + }, + "who" : { + "reference" : "Organization/1713394931037690000.cb720c2a-826d-4438-b446-ca22e17a2c09" + } + } ] + } + }, { + "fullUrl" : "Organization/1713394931037690000.cb720c2a-826d-4438-b446-ca22e17a2c09", + "resource" : { + "resourceType" : "Organization", + "id" : "1713394931037690000.cb720c2a-826d-4438-b446-ca22e17a2c09", + "identifier" : [ { + "value" : "CDC PRIME - Atlanta" + }, { + "type" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/v2-0301" + } ] + }, + "system" : "urn:ietf:rfc:3986", + "value" : "2.16.840.1.114222.4.1.237821" + } ] + } + }, { + "fullUrl" : "Patient/1713394931062543000.b63b9730-3a30-4e49-9a97-c51970a91e44", + "resource" : { + "resourceType" : "Patient", + "id" : "1713394931062543000.b63b9730-3a30-4e49-9a97-c51970a91e44", + "extension" : [ { + "url" : "http://hl7.org/fhir/StructureDefinition/patient-citizenship", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/code", + "valueCodeableConcept" : { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", + "valueString" : "PID.39" + } ], + "coding" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", + "valueString" : "alt-coding" + } ], + "display" : "AltText" + } ] + } + } ] + } ] + } + }, { + "fullUrl" : "Provenance/1713394931063733000.91eb61ce-0c7c-47e3-8cfe-b6fbf60cdcb0", + "resource" : { + "resourceType" : "Provenance", + "id" : "1713394931063733000.91eb61ce-0c7c-47e3-8cfe-b6fbf60cdcb0", + "target" : [ { + "reference" : "Patient/1713394931062543000.b63b9730-3a30-4e49-9a97-c51970a91e44" + } ], + "recorded" : "2024-04-17T17:02:11Z", + "activity" : { + "coding" : [ { + "system" : "https://terminology.hl7.org/CodeSystem/v3-DataOperation", + "code" : "UPDATE" + } ] + } + } + } ] +} \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-7-test-value-cwe5.hl7 b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-7-test-value-cwe5.hl7 new file mode 100644 index 00000000000..e1418f6ed88 --- /dev/null +++ b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-7-test-value-cwe5.hl7 @@ -0,0 +1,2 @@ +MSH|^~\&#|||||20230501102531-0400||ORU^R01^ORU_R01|12345||2.5.1|||||USA|UNICODE UTF-8 +PID|1||||||||||||||||||||||||||||||||||||||^^^^AltText \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-8-test-value-cwe6.fhir b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-8-test-value-cwe6.fhir new file mode 100644 index 00000000000..6219a40cf09 --- /dev/null +++ b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-8-test-value-cwe6.fhir @@ -0,0 +1,153 @@ +{ + "resourceType" : "Bundle", + "id" : "1713394945750138000.5da39533-b8d9-420d-b708-73d00a85afa6", + "meta" : { + "lastUpdated" : "2024-04-17T17:02:25.759-06:00" + }, + "identifier" : { + "system" : "https://reportstream.cdc.gov/prime-router", + "value" : "12345" + }, + "type" : "message", + "timestamp" : "2023-05-01T08:25:31.000-06:00", + "entry" : [ { + "fullUrl" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b", + "resource" : { + "resourceType" : "MessageHeader", + "id" : "827ccb0e-ea8a-306c-8c34-a16891f84e7b", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/encoding-characters", + "valueString" : "^~\\&#" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/character-set", + "valueString" : "UNICODE UTF-8" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/msh-message-header", + "extension" : [ { + "url" : "MSH.7", + "valueString" : "20230501102531-0400" + }, { + "url" : "MSH.10", + "valueString" : "12345" + } ] + } ], + "eventCoding" : { + "system" : "http://terminology.hl7.org/CodeSystem/v2-0003", + "code" : "R01", + "display" : "ORU^R01^ORU_R01" + }, + "sender" : { + "reference" : "Organization/1713394945848856000.7fa6743c-40c3-433f-a84c-4430999db590" + } + } + }, { + "fullUrl" : "Organization/1713394945848856000.7fa6743c-40c3-433f-a84c-4430999db590", + "resource" : { + "resourceType" : "Organization", + "id" : "1713394945848856000.7fa6743c-40c3-433f-a84c-4430999db590", + "address" : [ { + "country" : "USA" + } ] + } + }, { + "fullUrl" : "Provenance/1713394946385604000.f1117566-d888-46af-b2b5-70daa79c8598", + "resource" : { + "resourceType" : "Provenance", + "id" : "1713394946385604000.f1117566-d888-46af-b2b5-70daa79c8598", + "target" : [ { + "reference" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b" + } ], + "recorded" : "2023-05-01T10:25:31-04:00", + "activity" : { + "coding" : [ { + "display" : "ORU^R01^ORU_R01" + } ] + } + } + }, { + "fullUrl" : "Provenance/1713394946399545000.35c43cfb-4053-4e36-af9e-c39e0b5b023f", + "resource" : { + "resourceType" : "Provenance", + "id" : "1713394946399545000.35c43cfb-4053-4e36-af9e-c39e0b5b023f", + "recorded" : "2024-04-17T17:02:26Z", + "policy" : [ "http://hl7.org/fhir/uv/v2mappings/message-oru-r01-to-bundle" ], + "activity" : { + "coding" : [ { + "code" : "v2-FHIR transformation" + } ] + }, + "agent" : [ { + "type" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/provenance-participant-type", + "code" : "assembler" + } ] + }, + "who" : { + "reference" : "Organization/1713394946398330000.f6bc190e-904b-4f50-873d-41cd4f4a48a1" + } + } ] + } + }, { + "fullUrl" : "Organization/1713394946398330000.f6bc190e-904b-4f50-873d-41cd4f4a48a1", + "resource" : { + "resourceType" : "Organization", + "id" : "1713394946398330000.f6bc190e-904b-4f50-873d-41cd4f4a48a1", + "identifier" : [ { + "value" : "CDC PRIME - Atlanta" + }, { + "type" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/v2-0301" + } ] + }, + "system" : "urn:ietf:rfc:3986", + "value" : "2.16.840.1.114222.4.1.237821" + } ] + } + }, { + "fullUrl" : "Patient/1713394946422833000.e97cb2d5-9881-4235-9cbe-b09e89345a3d", + "resource" : { + "resourceType" : "Patient", + "id" : "1713394946422833000.e97cb2d5-9881-4235-9cbe-b09e89345a3d", + "extension" : [ { + "url" : "http://hl7.org/fhir/StructureDefinition/patient-citizenship", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/code", + "valueCodeableConcept" : { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", + "valueString" : "PID.39" + } ], + "coding" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", + "valueString" : "alt-coding" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", + "valueString" : "L" + } ], + "system" : "https://terminology.hl7.org/CodeSystem-v2-0396.html#v2-0396-99zzzorL" + } ] + } + } ] + } ] + } + }, { + "fullUrl" : "Provenance/1713394946424490000.d184d05a-b1db-4b66-9d4d-08252963ddee", + "resource" : { + "resourceType" : "Provenance", + "id" : "1713394946424490000.d184d05a-b1db-4b66-9d4d-08252963ddee", + "target" : [ { + "reference" : "Patient/1713394946422833000.e97cb2d5-9881-4235-9cbe-b09e89345a3d" + } ], + "recorded" : "2024-04-17T17:02:26Z", + "activity" : { + "coding" : [ { + "system" : "https://terminology.hl7.org/CodeSystem/v3-DataOperation", + "code" : "UPDATE" + } ] + } + } + } ] +} \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-8-test-value-cwe6.hl7 b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-8-test-value-cwe6.hl7 new file mode 100644 index 00000000000..69e013fa07c --- /dev/null +++ b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-8-test-value-cwe6.hl7 @@ -0,0 +1,2 @@ +MSH|^~\&#|||||20230501102531-0400||ORU^R01^ORU_R01|12345||2.5.1|||||USA|UNICODE UTF-8 +PID|1||||||||||||||||||||||||||||||||||||||^^^^^L \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-9-test-value-cwe7.fhir b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-9-test-value-cwe7.fhir new file mode 100644 index 00000000000..1136a6f5b14 --- /dev/null +++ b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-9-test-value-cwe7.fhir @@ -0,0 +1,150 @@ +{ + "resourceType" : "Bundle", + "id" : "1713394961246624000.1d2e3dda-ad87-4c23-987b-fb39764c0583", + "meta" : { + "lastUpdated" : "2024-04-17T17:02:41.256-06:00" + }, + "identifier" : { + "system" : "https://reportstream.cdc.gov/prime-router", + "value" : "12345" + }, + "type" : "message", + "timestamp" : "2023-05-01T08:25:31.000-06:00", + "entry" : [ { + "fullUrl" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b", + "resource" : { + "resourceType" : "MessageHeader", + "id" : "827ccb0e-ea8a-306c-8c34-a16891f84e7b", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/encoding-characters", + "valueString" : "^~\\&#" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/character-set", + "valueString" : "UNICODE UTF-8" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/msh-message-header", + "extension" : [ { + "url" : "MSH.7", + "valueString" : "20230501102531-0400" + }, { + "url" : "MSH.10", + "valueString" : "12345" + } ] + } ], + "eventCoding" : { + "system" : "http://terminology.hl7.org/CodeSystem/v2-0003", + "code" : "R01", + "display" : "ORU^R01^ORU_R01" + }, + "sender" : { + "reference" : "Organization/1713394961343337000.df80d726-c44a-4bda-887b-34b14155d819" + } + } + }, { + "fullUrl" : "Organization/1713394961343337000.df80d726-c44a-4bda-887b-34b14155d819", + "resource" : { + "resourceType" : "Organization", + "id" : "1713394961343337000.df80d726-c44a-4bda-887b-34b14155d819", + "address" : [ { + "country" : "USA" + } ] + } + }, { + "fullUrl" : "Provenance/1713394961867970000.89364074-9e12-4d8f-a348-b004d2ec6044", + "resource" : { + "resourceType" : "Provenance", + "id" : "1713394961867970000.89364074-9e12-4d8f-a348-b004d2ec6044", + "target" : [ { + "reference" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b" + } ], + "recorded" : "2023-05-01T10:25:31-04:00", + "activity" : { + "coding" : [ { + "display" : "ORU^R01^ORU_R01" + } ] + } + } + }, { + "fullUrl" : "Provenance/1713394961880380000.9c763cd1-9084-4532-ae8f-a628cab68fbd", + "resource" : { + "resourceType" : "Provenance", + "id" : "1713394961880380000.9c763cd1-9084-4532-ae8f-a628cab68fbd", + "recorded" : "2024-04-17T17:02:41Z", + "policy" : [ "http://hl7.org/fhir/uv/v2mappings/message-oru-r01-to-bundle" ], + "activity" : { + "coding" : [ { + "code" : "v2-FHIR transformation" + } ] + }, + "agent" : [ { + "type" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/provenance-participant-type", + "code" : "assembler" + } ] + }, + "who" : { + "reference" : "Organization/1713394961879131000.fb0519fa-0180-4f92-a96b-a35b8928432c" + } + } ] + } + }, { + "fullUrl" : "Organization/1713394961879131000.fb0519fa-0180-4f92-a96b-a35b8928432c", + "resource" : { + "resourceType" : "Organization", + "id" : "1713394961879131000.fb0519fa-0180-4f92-a96b-a35b8928432c", + "identifier" : [ { + "value" : "CDC PRIME - Atlanta" + }, { + "type" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/v2-0301" + } ] + }, + "system" : "urn:ietf:rfc:3986", + "value" : "2.16.840.1.114222.4.1.237821" + } ] + } + }, { + "fullUrl" : "Patient/1713394961905787000.00bee4b3-ffb2-4ceb-9c95-b8710be9c713", + "resource" : { + "resourceType" : "Patient", + "id" : "1713394961905787000.00bee4b3-ffb2-4ceb-9c95-b8710be9c713", + "extension" : [ { + "url" : "http://hl7.org/fhir/StructureDefinition/patient-citizenship", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/code", + "valueCodeableConcept" : { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", + "valueString" : "PID.39" + } ], + "coding" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", + "valueString" : "coding" + } ], + "version" : "PrimaryVersion" + } ] + } + } ] + } ] + } + }, { + "fullUrl" : "Provenance/1713394961907071000.dcb049d2-20d1-408c-a835-eb712c8ef064", + "resource" : { + "resourceType" : "Provenance", + "id" : "1713394961907071000.dcb049d2-20d1-408c-a835-eb712c8ef064", + "target" : [ { + "reference" : "Patient/1713394961905787000.00bee4b3-ffb2-4ceb-9c95-b8710be9c713" + } ], + "recorded" : "2024-04-17T17:02:41Z", + "activity" : { + "coding" : [ { + "system" : "https://terminology.hl7.org/CodeSystem/v3-DataOperation", + "code" : "UPDATE" + } ] + } + } + } ] +} \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-9-test-value-cwe7.hl7 b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-9-test-value-cwe7.hl7 new file mode 100644 index 00000000000..e00b9b67fa4 --- /dev/null +++ b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/cwe/codeable-concept/cwe-9-test-value-cwe7.hl7 @@ -0,0 +1,2 @@ +MSH|^~\&#|||||20230501102531-0400||ORU^R01^ORU_R01|12345||2.5.1|||||USA|UNICODE UTF-8 +PID|1||||||||||||||||||||||||||||||||||||||^^^^^^PrimaryVersion \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/ndl/NDL-to-PractitionerRole.csv b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/ndl/NDL-to-PractitionerRole.csv new file mode 100644 index 00000000000..9e60f616dd9 --- /dev/null +++ b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/ndl/NDL-to-PractitionerRole.csv @@ -0,0 +1,42 @@ +HL7 v2,,,,,,Condition (IF True),,,HL7 FHIR,,,,,,,,,Comments +Sort Order,Identifier,Name,Data Type,Cardinality - Min,Cardinality - Max,Computable ANTLR,Computable FHIRPath,Narrative,FHIR Attribute/ Data Type,,Data Type,Cardinality - Min,Cardinality - Max,Data Type Mapping,"Vocabulary Mapping +(IS, ID, CE, CNE, CWE)",Assignment,, +1,NDL.1,Name,CNN,0,1,,,,practitioner(Practitioner),,Reference(Practitioner),0,1,CNN[Practitioner],,,, +2,NDL.2,Start Date/time,DTM,0,1,,,,period.start,,dateTime,0,1,,,,, +3,NDL.3,End Date/time,DTM,0,1,,,,period.end,,dateTime,0,1,,,,, +4,NDL.4,Point of Care,IS,0,1,,,,[1].identifier,,Identifier,,,HD[Identifier],,,, +4,NDL.4,Point of Care,IS,0,1,,,,[1].mode,,code,0,1,,,"""instance""",, +4,NDL.4,Point of Care,IS,0,1,,,,[1].physicalType.coding.code,,code,0,1,,,/extension??-poc/,, +4,NDL.4,Point of Care,IS,0,1,,,,[1].physicalType.coding.system,,uri,0,1,,,"""http://terminology.hl7.org/CodeSystem/location-physical-type""",, +4,NDL.4,Point of Care,IS,0,1,,,,[1].partOf.reference(Location[5]),,string,0,1,,,,, +5,NDL.5,Room,IS,0,1,,,,[2].identifier,,Identifier,,,HD[Identifier],,,, +5,NDL.5,Room,IS,0,1,,,,[2].mode,,code,0,1,,,"""instance""",, +5,NDL.5,Room,IS,0,1,,,,[2].physicalType.coding.code,,code,0,1,,,"""ro""",, +5,NDL.5,Room,IS,0,1,,,,[2].physicalType.coding.system,,uri,0,1,,,"""http://terminology.hl7.org/CodeSystem/location-physical-type""",, +5,NDL.5,Room,IS,0,1,,,,[2].partOf.reference(Location[1]),,string,0,1,,,,, +6,NDL.6,Bed,IS,0,1,,,,[3].identifier,,Identifier,,,HD[Identifier],,,, +6,NDL.6,Bed,IS,0,1,,,,[3].mode,,code,0,1,,,"""instance""",, +6,NDL.6,Bed,IS,0,1,,,,[3].physicalType.coding.code,,code,0,1,,,"""bd""",, +6,NDL.6,Bed,IS,0,1,,,,[3].physicalType.coding.system,,uri,0,1,,,"""http://terminology.hl7.org/CodeSystem/location-physical-type""",, +6,NDL.6,Bed,IS,0,1,,,,[3].partOf.reference(Location[2]),,string,0,1,,,,, +7,NDL.7,Facility,HD,0,1,,,,[4].identifier,,Identifier,,,HD[Identifier],,,, +7,NDL.7,Facility,HD,0,1,,,,[4].mode,,code,0,1,,,"""instance""",, +7,NDL.7,Facility,HD,0,1,,,,[4].physicalType.coding.code,,code,0,1,,,"""si""",, +7,NDL.7,Facility,HD,0,1,,,,[4].physicalType.coding.system,,uri,0,1,,,"""http://terminology.hl7.org/CodeSystem/location-physical-type""",, +8,NDL.8,Location Status,IS,0,1,IF PL.1 AND PL.2 AND PL.3 AND PL.4 AND PL.7 AND PL.8 NOT VALUED,,,[1].status,,,0,1,IS[code],,,, +8,NDL.8,Location Status,IS,0,1,IF PL.2 VALUED,,,[2].status,,,0,1,IS[code],,,, +8,NDL.8,Location Status,IS,0,1,IF PL.3 VALUED,,,[3].status,,,0,1,IS[code],,,, +8,NDL.8,Location Status,IS,0,1,IF PL.4 VALUED,,,[4].status,,,0,1,IS[code],,,, +8,NDL.8,Location Status,IS,0,1,IF PL.7 VALUED,,,[5].status,,,0,1,IS[code],,,, +8,NDL.8,Location Status,IS,0,1,IF PL.8 VALUED,,,[6].status,,,0,1,IS[code],,,, +9,NDL.9,Patient Location Type,IS,0,1,,,,,,,,,,,,, +10,NDL.10,Building,IS,0,1,,,,[5].identifier,,Identifier,,,HD[Identifier],,,, +10,NDL.10,Building,IS,0,1,,,,[5].mode,,code,0,1,,,"""instance""",, +10,NDL.10,Building,IS,0,1,,,,[5].physicalType.coding.code,,code,0,1,,,"""bu""",, +10,NDL.10,Building,IS,0,1,,,,[5].physicalType.coding.system,,uri,0,1,,,"""http://terminology.hl7.org/CodeSystem/location-physical-type""",, +10,NDL.10,Building,IS,0,1,,,,[5].partOf.reference(Location[4]),,string,0,1,,,,, +11,NDL.11,Floor,IS,0,1,,,,[6].identifier,,Identifier,,,HD[Identifier],,,, +11,NDL.11,Floor,IS,0,1,,,,[6].mode,,code,0,1,,,"""instance""",, +11,NDL.11,Floor,IS,0,1,,,,[6].physicalType.coding.code,,code,0,1,,,"""lvl""",, +11,NDL.11,Floor,IS,0,1,,,,[6].physicalType.coding.system,,uri,0,1,,,"""http://terminology.hl7.org/CodeSystem/location-physical-type""",, +11,NDL.11,Floor,IS,0,1,,,,[6].partOf.reference(Location[1]),,string,0,1,,,,, \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/ndl/NDL-to-PractitionerRole.fhir b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/ndl/NDL-to-PractitionerRole.fhir new file mode 100644 index 00000000000..d5dee105609 --- /dev/null +++ b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/ndl/NDL-to-PractitionerRole.fhir @@ -0,0 +1,432 @@ +{ + "resourceType" : "Bundle", + "id" : "1713402340643750000.a7c76342-ec73-43b5-b981-f93d64e96426", + "meta" : { + "lastUpdated" : "2024-04-17T19:05:40.654-06:00" + }, + "identifier" : { + "system" : "https://reportstream.cdc.gov/prime-router", + "value" : "12345" + }, + "type" : "message", + "timestamp" : "2023-05-01T08:25:31.000-06:00", + "entry" : [ { + "fullUrl" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b", + "resource" : { + "resourceType" : "MessageHeader", + "id" : "827ccb0e-ea8a-306c-8c34-a16891f84e7b", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/encoding-characters", + "valueString" : "^~\\&#" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/character-set", + "valueString" : "UNICODE UTF-8" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/msh-message-header", + "extension" : [ { + "url" : "MSH.7", + "valueString" : "20230501102531-0400" + }, { + "url" : "MSH.10", + "valueString" : "12345" + } ] + } ], + "eventCoding" : { + "system" : "http://terminology.hl7.org/CodeSystem/v2-0003", + "code" : "R01", + "display" : "ORU^R01^ORU_R01" + }, + "sender" : { + "reference" : "Organization/1713402340765606000.da921f56-35c4-42bc-9735-fae128be604c" + } + } + }, { + "fullUrl" : "Organization/1713402340765606000.da921f56-35c4-42bc-9735-fae128be604c", + "resource" : { + "resourceType" : "Organization", + "id" : "1713402340765606000.da921f56-35c4-42bc-9735-fae128be604c", + "address" : [ { + "country" : "USA" + } ] + } + }, { + "fullUrl" : "Provenance/1713402341294938000.1149a934-3f3c-48e2-a458-c8e97f730b3c", + "resource" : { + "resourceType" : "Provenance", + "id" : "1713402341294938000.1149a934-3f3c-48e2-a458-c8e97f730b3c", + "target" : [ { + "reference" : "MessageHeader/827ccb0e-ea8a-306c-8c34-a16891f84e7b" + }, { + "reference" : "DiagnosticReport/1713402341658889000.cce98d75-0790-4cdf-8099-92c05ef21c65" + } ], + "recorded" : "2023-05-01T10:25:31-04:00", + "activity" : { + "coding" : [ { + "display" : "ORU^R01^ORU_R01" + } ] + } + } + }, { + "fullUrl" : "Provenance/1713402341308904000.f9c49033-7faf-452b-be17-d171b6365d57", + "resource" : { + "resourceType" : "Provenance", + "id" : "1713402341308904000.f9c49033-7faf-452b-be17-d171b6365d57", + "recorded" : "2024-04-17T19:05:41Z", + "policy" : [ "http://hl7.org/fhir/uv/v2mappings/message-oru-r01-to-bundle" ], + "activity" : { + "coding" : [ { + "code" : "v2-FHIR transformation" + } ] + }, + "agent" : [ { + "type" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/provenance-participant-type", + "code" : "assembler" + } ] + }, + "who" : { + "reference" : "Organization/1713402341307664000.370871f7-7ba1-4fae-baed-7d65a36c26ba" + } + } ] + } + }, { + "fullUrl" : "Organization/1713402341307664000.370871f7-7ba1-4fae-baed-7d65a36c26ba", + "resource" : { + "resourceType" : "Organization", + "id" : "1713402341307664000.370871f7-7ba1-4fae-baed-7d65a36c26ba", + "identifier" : [ { + "value" : "CDC PRIME - Atlanta" + }, { + "type" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/v2-0301" + } ] + }, + "system" : "urn:ietf:rfc:3986", + "value" : "2.16.840.1.114222.4.1.237821" + } ] + } + }, { + "fullUrl" : "Patient/1713402341336895000.d90e2351-5caf-4d37-897f-604aaf045333", + "resource" : { + "resourceType" : "Patient", + "id" : "1713402341336895000.d90e2351-5caf-4d37-897f-604aaf045333" + } + }, { + "fullUrl" : "Provenance/1713402341337960000.4e4d9606-632b-40dc-a56a-88e396273619", + "resource" : { + "resourceType" : "Provenance", + "id" : "1713402341337960000.4e4d9606-632b-40dc-a56a-88e396273619", + "target" : [ { + "reference" : "Patient/1713402341336895000.d90e2351-5caf-4d37-897f-604aaf045333" + } ], + "recorded" : "2024-04-17T19:05:41Z", + "activity" : { + "coding" : [ { + "system" : "https://terminology.hl7.org/CodeSystem/v3-DataOperation", + "code" : "UPDATE" + } ] + } + } + }, { + "fullUrl" : "Specimen/1713402341339870000.04564c22-1798-4fab-a325-85328524cfd9", + "resource" : { + "resourceType" : "Specimen", + "id" : "1713402341339870000.04564c22-1798-4fab-a325-85328524cfd9", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Segment", + "valueString" : "OBR" + } ] + } + }, { + "fullUrl" : "ServiceRequest/1713402341623426000.47819b60-b7d0-48ea-9850-e5ef40b152b4", + "resource" : { + "resourceType" : "ServiceRequest", + "id" : "1713402341623426000.47819b60-b7d0-48ea-9850-e5ef40b152b4", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/obr-observation-request", + "extension" : [ { + "url" : "OBR.25", + "valueId" : "F" + } ] + } ], + "status" : "unknown", + "code" : { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/coding-system-oid", + "valueOid" : "urn:oid:2.16.840.1.113883.6.1" + } ], + "coding" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", + "valueString" : "coding" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", + "valueString" : "LN" + } ], + "system" : "http://loinc.org", + "code" : "68991-9", + "display" : "Epidemiologically Important Information" + } ] + }, + "subject" : { + "reference" : "Patient/1713402341336895000.d90e2351-5caf-4d37-897f-604aaf045333" + } + } + }, { + "fullUrl" : "DiagnosticReport/1713402341658889000.cce98d75-0790-4cdf-8099-92c05ef21c65", + "resource" : { + "resourceType" : "DiagnosticReport", + "id" : "1713402341658889000.cce98d75-0790-4cdf-8099-92c05ef21c65", + "basedOn" : [ { + "reference" : "ServiceRequest/1713402341623426000.47819b60-b7d0-48ea-9850-e5ef40b152b4" + } ], + "status" : "final", + "code" : { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/coding-system-oid", + "valueOid" : "urn:oid:2.16.840.1.113883.6.1" + } ], + "coding" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", + "valueString" : "coding" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", + "valueString" : "LN" + } ], + "system" : "http://loinc.org", + "code" : "68991-9", + "display" : "Epidemiologically Important Information" + } ] + }, + "subject" : { + "reference" : "Patient/1713402341336895000.d90e2351-5caf-4d37-897f-604aaf045333" + }, + "performer" : [ { + "reference" : "PractitionerRole/1713402341657180000.ea78d11f-0727-4024-b58f-ed06f954df87" + } ], + "specimen" : [ { + "reference" : "Specimen/1713402341339870000.04564c22-1798-4fab-a325-85328524cfd9" + } ] + } + }, { + "fullUrl" : "Practitioner/1713402341633151000.841c9dc6-8d76-4d1b-9ca5-2b6f4868957d", + "resource" : { + "resourceType" : "Practitioner", + "id" : "1713402341633151000.841c9dc6-8d76-4d1b-9ca5-2b6f4868957d", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cnn-practitioner", + "extension" : [ { + "url" : "CNN.3", + "valueString" : "JAMISON" + }, { + "url" : "CNN.4", + "valueString" : "S" + }, { + "url" : "CNN.5", + "valueString" : "ESQ" + }, { + "url" : "CNN.7", + "valueString" : "MD" + } ] + } ], + "identifier" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-authority", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/namespace-id", + "valueString" : "Assigning Authority" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id", + "valueString" : "2.1.4.1" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/universal-id-type", + "valueCode" : "ISO" + } ] + } ], + "value" : "123" + } ], + "name" : [ { + "family" : "DOE", + "given" : [ "JAMISON", "S" ], + "prefix" : [ "DR" ], + "suffix" : [ "ESQ", "MD" ] + } ] + } + }, { + "fullUrl" : "Location/1713402341636260000.77abc5f6-4fad-4392-8fe1-2bd29cf4f189", + "resource" : { + "resourceType" : "Location", + "id" : "1713402341636260000.77abc5f6-4fad-4392-8fe1-2bd29cf4f189", + "identifier" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", + "valueString" : "HD.1" + } ], + "value" : "Hospital A" + }, { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", + "valueString" : "HD.2,HD.3" + } ], + "type" : { + "coding" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/codeable-concept-id", + "valueBoolean" : true + } ], + "code" : "ISO" + } ] + }, + "value" : "2.16.840.1.113883.9.11" + } ], + "status" : "active", + "mode" : "instance", + "physicalType" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/location-physical-type", + "code" : "si" + } ] + } + } + }, { + "fullUrl" : "Location/1713402341652902000.ab4a4061-ba25-4460-87d8-d2a1e85a72b3", + "resource" : { + "resourceType" : "Location", + "id" : "1713402341652902000.ab4a4061-ba25-4460-87d8-d2a1e85a72b3", + "identifier" : [ { + "value" : "Building 123" + } ], + "status" : "active", + "mode" : "instance", + "physicalType" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/location-physical-type", + "code" : "bu" + } ] + } + } + }, { + "fullUrl" : "Location/1713402341653924000.91cb98d9-4a09-4e59-b00c-cca5a0be825c", + "resource" : { + "resourceType" : "Location", + "id" : "1713402341653924000.91cb98d9-4a09-4e59-b00c-cca5a0be825c", + "identifier" : [ { + "value" : "Point of Care" + } ], + "status" : "active", + "mode" : "instance", + "physicalType" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/location-physical-type", + "_code" : { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/location-physical-type-poc", + "valueString" : "poc" + } ] + } + } ] + } + } + }, { + "fullUrl" : "Location/1713402341654751000.d0dff123-ba8d-4c73-89b7-26f22890f886", + "resource" : { + "resourceType" : "Location", + "id" : "1713402341654751000.d0dff123-ba8d-4c73-89b7-26f22890f886", + "identifier" : [ { + "value" : "Floor A" + } ], + "status" : "active", + "mode" : "instance", + "physicalType" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/location-physical-type", + "code" : "lvl" + } ] + } + } + }, { + "fullUrl" : "Location/1713402341655633000.ffde10f2-f5d7-4033-bc88-b181fcccaa67", + "resource" : { + "resourceType" : "Location", + "id" : "1713402341655633000.ffde10f2-f5d7-4033-bc88-b181fcccaa67", + "identifier" : [ { + "value" : "Room 101" + } ], + "status" : "active", + "mode" : "instance", + "physicalType" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/location-physical-type", + "code" : "ro" + } ] + } + } + }, { + "fullUrl" : "Location/1713402341656557000.78066d02-7485-4c81-8d46-dd512f4bb10a", + "resource" : { + "resourceType" : "Location", + "id" : "1713402341656557000.78066d02-7485-4c81-8d46-dd512f4bb10a", + "identifier" : [ { + "value" : "Bed A" + } ], + "status" : "active", + "mode" : "instance", + "physicalType" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/location-physical-type", + "code" : "bd" + } ] + } + } + }, { + "fullUrl" : "PractitionerRole/1713402341657180000.ea78d11f-0727-4024-b58f-ed06f954df87", + "resource" : { + "resourceType" : "PractitionerRole", + "id" : "1713402341657180000.ea78d11f-0727-4024-b58f-ed06f954df87", + "extension" : [ { + "url" : "http://hl7.org/fhir/StructureDefinition/event-performerFunction", + "valueCodeableConcept" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/v3-ParticipationType", + "code" : "TRANS" + } ] + } + } ], + "period" : { + "start" : "2023-04-01T10:25:31-04:00", + "_start" : { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2-date-time", + "valueString" : "20230401102531-0400" + } ] + }, + "end" : "2023-05-01T10:25:31-04:00", + "_end" : { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2-date-time", + "valueString" : "20230501102531-0400" + } ] + } + }, + "practitioner" : { + "reference" : "Practitioner/1713402341633151000.841c9dc6-8d76-4d1b-9ca5-2b6f4868957d" + }, + "location" : [ { + "reference" : "Location/1713402341636260000.77abc5f6-4fad-4392-8fe1-2bd29cf4f189" + }, { + "reference" : "Location/1713402341652902000.ab4a4061-ba25-4460-87d8-d2a1e85a72b3" + }, { + "reference" : "Location/1713402341653924000.91cb98d9-4a09-4e59-b00c-cca5a0be825c" + }, { + "reference" : "Location/1713402341654751000.d0dff123-ba8d-4c73-89b7-26f22890f886" + }, { + "reference" : "Location/1713402341655633000.ffde10f2-f5d7-4033-bc88-b181fcccaa67" + }, { + "reference" : "Location/1713402341656557000.78066d02-7485-4c81-8d46-dd512f4bb10a" + } ] + } + } ] +} \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/ndl/NDL-to-PractitionerRole.hl7 b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/ndl/NDL-to-PractitionerRole.hl7 new file mode 100644 index 00000000000..3f8afd2bd7a --- /dev/null +++ b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/ndl/NDL-to-PractitionerRole.hl7 @@ -0,0 +1,3 @@ +MSH|^~\&#|||||20230501102531-0400||ORU^R01^ORU_R01|12345||2.5.1|||||USA|UNICODE UTF-8 +PID|1 +OBR|1|||68991-9^Epidemiologically Important Information^LN^^^^^^^^^^^2.16.840.1.113883.6.1|||||||||||||||||||||F||||||||||123&DOE&JAMISON&S&ESQ&DR&MD&&Assigning Authority&2.1.4.1&ISO^20230401102531-0400^20230501102531-0400^Point of Care^Room 101^Bed A^Hospital A&2.16.840.1.113883.9.11&ISO^active^^Building 123^Floor A diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/xad/xad-to-address.fhir b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/xad/xad-to-address.fhir new file mode 100644 index 00000000000..612f5095cb8 --- /dev/null +++ b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/xad/xad-to-address.fhir @@ -0,0 +1,292 @@ +{ + "resourceType" : "Bundle", + "id" : "1713397228651177000.19b20187-d57d-4002-be82-5d622aef3af9", + "meta" : { + "lastUpdated" : "2024-04-17T17:40:28.661-06:00" + }, + "identifier" : { + "system" : "https://reportstream.cdc.gov/prime-router", + "value" : "3003786103_4988249_33033" + }, + "type" : "message", + "timestamp" : "2023-05-01T08:25:31.000-06:00", + "entry" : [ { + "fullUrl" : "MessageHeader/0993dd0b-6ce5-3caf-a177-0b81cc780c18", + "resource" : { + "resourceType" : "MessageHeader", + "id" : "0993dd0b-6ce5-3caf-a177-0b81cc780c18", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/encoding-characters", + "valueString" : "^~\\&#" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/character-set", + "valueString" : "UNICODE UTF-8" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/msh-message-header", + "extension" : [ { + "url" : "MSH.7", + "valueString" : "20230501102531-0400" + }, { + "url" : "MSH.10", + "valueString" : "3003786103_4988249_33033" + } ] + } ], + "eventCoding" : { + "system" : "http://terminology.hl7.org/CodeSystem/v2-0003", + "code" : "R01", + "display" : "ORU^R01^ORU_R01" + }, + "sender" : { + "reference" : "Organization/1713397228750654000.31eaa0ca-8324-423f-8e0e-d5c52dbef89e" + } + } + }, { + "fullUrl" : "Organization/1713397228750654000.31eaa0ca-8324-423f-8e0e-d5c52dbef89e", + "resource" : { + "resourceType" : "Organization", + "id" : "1713397228750654000.31eaa0ca-8324-423f-8e0e-d5c52dbef89e", + "address" : [ { + "country" : "USA" + } ] + } + }, { + "fullUrl" : "Provenance/1713397229260212000.cbff06b7-15a3-4a9c-a306-6d79dd60c1c3", + "resource" : { + "resourceType" : "Provenance", + "id" : "1713397229260212000.cbff06b7-15a3-4a9c-a306-6d79dd60c1c3", + "target" : [ { + "reference" : "MessageHeader/0993dd0b-6ce5-3caf-a177-0b81cc780c18" + } ], + "recorded" : "2023-05-01T10:25:31-04:00", + "activity" : { + "coding" : [ { + "display" : "ORU^R01^ORU_R01" + } ] + } + } + }, { + "fullUrl" : "Provenance/1713397229272223000.6cd7f2fd-88cc-40da-875b-b0495acd341d", + "resource" : { + "resourceType" : "Provenance", + "id" : "1713397229272223000.6cd7f2fd-88cc-40da-875b-b0495acd341d", + "recorded" : "2024-04-17T17:40:29Z", + "policy" : [ "http://hl7.org/fhir/uv/v2mappings/message-oru-r01-to-bundle" ], + "activity" : { + "coding" : [ { + "code" : "v2-FHIR transformation" + } ] + }, + "agent" : [ { + "type" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/provenance-participant-type", + "code" : "assembler" + } ] + }, + "who" : { + "reference" : "Organization/1713397229270928000.d90d626b-3155-4fe7-92b5-88d1a69dc26e" + } + } ] + } + }, { + "fullUrl" : "Organization/1713397229270928000.d90d626b-3155-4fe7-92b5-88d1a69dc26e", + "resource" : { + "resourceType" : "Organization", + "id" : "1713397229270928000.d90d626b-3155-4fe7-92b5-88d1a69dc26e", + "identifier" : [ { + "value" : "CDC PRIME - Atlanta" + }, { + "type" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/v2-0301" + } ] + }, + "system" : "urn:ietf:rfc:3986", + "value" : "2.16.840.1.114222.4.1.237821" + } ] + } + }, { + "fullUrl" : "Patient/1713397229307935000.bf1aa1af-119b-47e8-ba95-0beda22f25eb", + "resource" : { + "resourceType" : "Patient", + "id" : "1713397229307935000.bf1aa1af-119b-47e8-ba95-0beda22f25eb", + "identifier" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cx-identifier", + "extension" : [ { + "url" : "CX.5", + "valueString" : "MR" + } ] + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", + "valueString" : "PID.3" + } ], + "type" : { + "coding" : [ { + "code" : "MR" + } ] + }, + "value" : "11102779" + } ], + "name" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/xpn-human-name", + "extension" : [ { + "url" : "XPN.2", + "valueString" : "BB SARAH" + }, { + "url" : "XPN.7", + "valueString" : "L" + } ] + } ], + "use" : "official", + "family" : "SMITH", + "given" : [ "BB SARAH" ] + } ], + "contact" : [ { + "name" : { }, + "organization" : { + "reference" : "Organization/1713397229301786000.53fb6c0d-8b74-47dd-a41e-3af1ad67dbdf" + } + } ] + } + }, { + "fullUrl" : "Organization/1713397229301786000.53fb6c0d-8b74-47dd-a41e-3af1ad67dbdf", + "resource" : { + "resourceType" : "Organization", + "id" : "1713397229301786000.53fb6c0d-8b74-47dd-a41e-3af1ad67dbdf", + "contact" : [ { + "address" : { + "extension" : [ { + "url" : "http://hl7.org/fhir/StructureDefinition/iso21090-ADXP-censusTract", + "valueCode" : "6059" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/xad-address", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/sad-address-line", + "extension" : [ { + "url" : "SAD.1", + "valueString" : "4861" + }, { + "url" : "SAD.2", + "valueString" : "20TH AVE" + }, { + "url" : "SAD.3", + "valueString" : "1" + } ] + }, { + "url" : "XAD.2", + "valueString" : "Other Designation" + }, { + "url" : "XAD.6", + "valueString" : "USA" + }, { + "url" : "XAD.7", + "valueCode" : "H" + }, { + "url" : "XAD.8", + "valueString" : "Other Geographic Designation" + }, { + "url" : "XAD.11", + "valueCode" : "A" + }, { + "url" : "XAD.13", + "valueString" : "20220501102531-0400" + } ] + } ], + "use" : "home", + "line" : [ "4861", "20TH AVE", "1", "Other Designation" ], + "city" : "THUNDER MOUNTAIN", + "district" : "County", + "state" : "IG", + "postalCode" : "99999", + "country" : "USA", + "period" : { + "start" : "2022-05-01T10:25:31-04:00" + } + } + } ] + } + }, { + "fullUrl" : "Provenance/1713397229312286000.d9d0364e-a4c7-4895-b64c-f84c032bce3f", + "resource" : { + "resourceType" : "Provenance", + "id" : "1713397229312286000.d9d0364e-a4c7-4895-b64c-f84c032bce3f", + "target" : [ { + "reference" : "Patient/1713397229307935000.bf1aa1af-119b-47e8-ba95-0beda22f25eb" + } ], + "recorded" : "2024-04-17T17:40:29Z", + "activity" : { + "coding" : [ { + "system" : "https://terminology.hl7.org/CodeSystem/v3-DataOperation", + "code" : "UPDATE" + } ] + } + } + }, { + "fullUrl" : "RelatedPerson/1713397229317429000.90600892-04fc-4700-98a2-9b84dc8d3670", + "resource" : { + "resourceType" : "RelatedPerson", + "id" : "1713397229317429000.90600892-04fc-4700-98a2-9b84dc8d3670", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Segment", + "valueString" : "NK1" + } ], + "patient" : { + "reference" : "Patient/1713397229307935000.bf1aa1af-119b-47e8-ba95-0beda22f25eb" + }, + "address" : [ { + "extension" : [ { + "url" : "http://hl7.org/fhir/StructureDefinition/iso21090-ADXP-censusTract", + "valueCode" : "6059" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", + "valueString" : "NK1.32" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/xad-address", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/sad-address-line", + "extension" : [ { + "url" : "SAD.1", + "valueString" : "4861" + }, { + "url" : "SAD.2", + "valueString" : "20TH AVE" + }, { + "url" : "SAD.3", + "valueString" : "1" + } ] + }, { + "url" : "XAD.2", + "valueString" : "Other Designation" + }, { + "url" : "XAD.6", + "valueString" : "USA" + }, { + "url" : "XAD.7", + "valueCode" : "H" + }, { + "url" : "XAD.8", + "valueString" : "Other Geographic Designation" + }, { + "url" : "XAD.11", + "valueCode" : "A" + }, { + "url" : "XAD.13", + "valueString" : "20220501102531-0400" + } ] + } ], + "use" : "home", + "line" : [ "4861", "20TH AVE", "1", "Other Designation" ], + "city" : "THUNDER MOUNTAIN", + "district" : "County", + "state" : "IG", + "postalCode" : "99999", + "country" : "USA", + "period" : { + "start" : "2022-05-01T10:25:31-04:00" + } + } ] + } + } ] +} \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/xad/xad-to-address.hl7 b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/xad/xad-to-address.hl7 new file mode 100644 index 00000000000..1bec780fb79 --- /dev/null +++ b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/xad/xad-to-address.hl7 @@ -0,0 +1,3 @@ +MSH|^~\&#|||||20230501102531-0400||ORU^R01^ORU_R01|3003786103_4988249_33033||2.5.1|||||USA|UNICODE UTF-8 +PID|1||11102779^^^^MR||SMITH^BB SARAH^^^^^L +NK1|1|||||||||||||||||||||||||||||||4861&20TH AVE&1^Other Designation^THUNDER MOUNTAIN^IG^99999^USA^H^Other Geographic Designation^County^6059^A^^20220501102531-0400 \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/xtn/xtn-to-contact-point.fhir b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/xtn/xtn-to-contact-point.fhir new file mode 100644 index 00000000000..e8ac64cff2f --- /dev/null +++ b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/xtn/xtn-to-contact-point.fhir @@ -0,0 +1,279 @@ +{ + "resourceType" : "Bundle", + "id" : "1713397874689602000.e869eee2-21c7-4524-b115-3f7656fe34a3", + "meta" : { + "lastUpdated" : "2024-04-17T17:51:14.701-06:00" + }, + "identifier" : { + "system" : "https://reportstream.cdc.gov/prime-router", + "value" : "3003786103_4988249_33033" + }, + "type" : "message", + "timestamp" : "2023-05-01T08:25:31.000-06:00", + "entry" : [ { + "fullUrl" : "MessageHeader/0993dd0b-6ce5-3caf-a177-0b81cc780c18", + "resource" : { + "resourceType" : "MessageHeader", + "id" : "0993dd0b-6ce5-3caf-a177-0b81cc780c18", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/encoding-characters", + "valueString" : "^~\\&#" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/msh-message-header", + "extension" : [ { + "url" : "MSH.7", + "valueString" : "20230501102531-0400" + }, { + "url" : "MSH.10", + "valueString" : "3003786103_4988249_33033" + } ] + } ], + "eventCoding" : { + "system" : "http://terminology.hl7.org/CodeSystem/v2-0003", + "code" : "R01", + "display" : "ORU^R01^ORU_R01" + } + } + }, { + "fullUrl" : "Provenance/1713397875332640000.2d8a482b-3fee-4c98-ac41-5f0ee98f684c", + "resource" : { + "resourceType" : "Provenance", + "id" : "1713397875332640000.2d8a482b-3fee-4c98-ac41-5f0ee98f684c", + "target" : [ { + "reference" : "MessageHeader/0993dd0b-6ce5-3caf-a177-0b81cc780c18" + } ], + "recorded" : "2023-05-01T10:25:31-04:00", + "activity" : { + "coding" : [ { + "display" : "ORU^R01^ORU_R01" + } ] + } + } + }, { + "fullUrl" : "Provenance/1713397875346924000.2c8b59d8-6f33-498b-a442-52096a9bbd11", + "resource" : { + "resourceType" : "Provenance", + "id" : "1713397875346924000.2c8b59d8-6f33-498b-a442-52096a9bbd11", + "recorded" : "2024-04-17T17:51:15Z", + "policy" : [ "http://hl7.org/fhir/uv/v2mappings/message-oru-r01-to-bundle" ], + "activity" : { + "coding" : [ { + "code" : "v2-FHIR transformation" + } ] + }, + "agent" : [ { + "type" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/provenance-participant-type", + "code" : "assembler" + } ] + }, + "who" : { + "reference" : "Organization/1713397875345900000.6c0d6b51-b102-45e7-ac67-220b1a6212cf" + } + } ] + } + }, { + "fullUrl" : "Organization/1713397875345900000.6c0d6b51-b102-45e7-ac67-220b1a6212cf", + "resource" : { + "resourceType" : "Organization", + "id" : "1713397875345900000.6c0d6b51-b102-45e7-ac67-220b1a6212cf", + "identifier" : [ { + "value" : "CDC PRIME - Atlanta" + }, { + "type" : { + "coding" : [ { + "system" : "http://terminology.hl7.org/CodeSystem/v2-0301" + } ] + }, + "system" : "urn:ietf:rfc:3986", + "value" : "2.16.840.1.114222.4.1.237821" + } ] + } + }, { + "fullUrl" : "Patient/1713397875394360000.fcbe0e5f-e307-4d56-8d09-0d35e677ab18", + "resource" : { + "resourceType" : "Patient", + "id" : "1713397875394360000.fcbe0e5f-e307-4d56-8d09-0d35e677ab18", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/pid-patient", + "extension" : [ { + "url" : "PID.8", + "valueString" : "U" + }, { + "url" : "PID.30", + "valueString" : "N" + } ] + }, { + "url" : "http://ibm.com/fhir/cdm/StructureDefinition/local-race-cd", + "valueCodeableConcept" : { + "coding" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", + "valueString" : "coding" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", + "valueString" : "NULLFL" + } ], + "version" : "2.5.1", + "code" : "ASKU", + "display" : "Asked, but unknown" + } ] + } + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/ethnic-group", + "valueCodeableConcept" : { + "coding" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding", + "valueString" : "coding" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cwe-coding-system", + "valueString" : "HL70189" + } ], + "system" : "http://terminology.hl7.org/CodeSystem/v2-0189", + "version" : "2.9", + "code" : "N", + "display" : "Non Hispanic or Latino" + } ] + } + } ], + "identifier" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/assigning-facility", + "valueReference" : { + "reference" : "Organization/1713397875354960000.bdf4bbf7-93e2-4594-a1fe-a30d30673e5c" + } + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/cx-identifier", + "extension" : [ { + "url" : "CX.5", + "valueString" : "PI" + } ] + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", + "valueString" : "PID.3" + } ], + "type" : { + "coding" : [ { + "code" : "PI" + } ] + }, + "value" : "kc3oy" + } ], + "name" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/xpn-human-name", + "extension" : [ { + "url" : "XPN.2", + "valueString" : "Stephenie" + }, { + "url" : "XPN.3", + "valueString" : "Davis" + }, { + "url" : "XPN.7", + "valueString" : "L" + } ] + } ], + "use" : "official", + "family" : "Schaefer", + "given" : [ "Stephenie", "Davis" ] + } ], + "telecom" : [ { + "extension" : [ { + "url" : "http://hl7.org/fhir/StructureDefinition/contactpoint-country", + "valueString" : "1" + }, { + "url" : "http://hl7.org/fhir/StructureDefinition/contactpoint-area", + "valueString" : "260" + }, { + "url" : "http://hl7.org/fhir/StructureDefinition/contactpoint-local", + "valueString" : "7595016" + }, { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/xtn-contact-point", + "extension" : [ { + "url" : "XTN.2", + "valueString" : "PRN" + }, { + "url" : "XTN.3", + "valueString" : "BP" + }, { + "url" : "XTN.7", + "valueString" : "7595016" + }, { + "url" : "XTN.11", + "valueString" : "42" + }, { + "url" : "XTN.12", + "valueString" : "+1 260 759 5016" + } ] + } ], + "system" : "pager", + "value" : "+1 260 759 5016", + "use" : "home" + }, { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/xtn-contact-point", + "extension" : [ { + "url" : "XTN.2", + "valueString" : "PRN" + }, { + "url" : "XTN.3", + "valueString" : "Internet" + }, { + "url" : "XTN.4", + "valueString" : "otto.daugherty@email.com" + } ] + } ], + "system" : "email", + "value" : "otto.daugherty@email.com", + "use" : "home" + } ], + "gender" : "unknown", + "deceasedBoolean" : false, + "address" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/xad-address", + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/sad-address-line", + "extension" : [ { + "url" : "SAD.1", + "valueString" : "96633 Gilberto Course" + } ] + } ] + } ], + "line" : [ "96633 Gilberto Course" ], + "state" : "IG" + } ] + } + }, { + "fullUrl" : "Organization/1713397875354960000.bdf4bbf7-93e2-4594-a1fe-a30d30673e5c", + "resource" : { + "resourceType" : "Organization", + "id" : "1713397875354960000.bdf4bbf7-93e2-4594-a1fe-a30d30673e5c", + "identifier" : [ { + "extension" : [ { + "url" : "https://reportstream.cdc.gov/fhir/StructureDefinition/hl7v2Field", + "valueString" : "HD.1" + } ], + "value" : "Any lab USA" + } ] + } + }, { + "fullUrl" : "Provenance/1713397875402545000.10ef5fae-8d8a-4b31-88c8-0e97975b0e25", + "resource" : { + "resourceType" : "Provenance", + "id" : "1713397875402545000.10ef5fae-8d8a-4b31-88c8-0e97975b0e25", + "target" : [ { + "reference" : "Patient/1713397875394360000.fcbe0e5f-e307-4d56-8d09-0d35e677ab18" + } ], + "recorded" : "2024-04-17T17:51:15Z", + "activity" : { + "coding" : [ { + "system" : "https://terminology.hl7.org/CodeSystem/v3-DataOperation", + "code" : "UPDATE" + } ] + } + } + } ] +} \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/xtn/xtn-to-contact-point.hl7 b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/xtn/xtn-to-contact-point.hl7 new file mode 100644 index 00000000000..59f3487b982 --- /dev/null +++ b/prime-router/src/testIntegration/resources/datatests/mappinginventory/v251/xtn/xtn-to-contact-point.hl7 @@ -0,0 +1,2 @@ +MSH|^~\&#|||||20230501102531-0400||ORU^R01^ORU_R01|3003786103_4988249_33033||2.5.1 +PID|1||kc3oy^^^^PI^Any lab USA||Schaefer^Stephenie^Davis^^^^L|||U||ASKU^Asked, but unknown^NULLFL^^^^2.5.1|96633 Gilberto Course^^^IG||^PRN^BP^^1^260^7595016^^^^42^+1 260 759 5016~^PRN^Internet^otto.daugherty@email.com|||||||||N^Non Hispanic or Latino^HL70189^^^^2.9||||||||N diff --git a/prime-router/src/testIntegration/resources/datatests/translation-test-config.csv b/prime-router/src/testIntegration/resources/datatests/translation-test-config.csv index 4e0b4b8b346..98ca0f96664 100644 --- a/prime-router/src/testIntegration/resources/datatests/translation-test-config.csv +++ b/prime-router/src/testIntegration/resources/datatests/translation-test-config.csv @@ -61,7 +61,6 @@ FHIR_to_HL7/sample_NH_20240716-0001.fhir,,FHIR_to_HL7/sample_NH_202407016-0001.h FHIR_to_HL7/sample_IL_20240802-0001.fhir,,FHIR_to_HL7/sample_IL_20240802-0001.hl7,classpath:/metadata/hl7_mapping/receivers/STLTs/IL/IL-receiver-transform.yml,HL7,PASS,"","","classpath:/metadata/fhir_transforms/senders/SimpleReport/simple-report-sender-transform.yml","","","" FHIR_to_HL7/sample_WA_20240719-0001.fhir,,FHIR_to_HL7/sample_WA_20240719-0001.hl7,classpath:/metadata/hl7_mapping/receivers/STLTs/WA/WA-receiver-transform.yml,HL7,PASS,"","","classpath:/metadata/fhir_transforms/senders/SimpleReport/simple-report-sender-transform.yml","wa-phd.full-elr","","" FHIR_to_HL7/sample_OH_20240718-0001.fhir,,FHIR_to_HL7/sample_OH_20240718-0001.hl7,classpath:/metadata/hl7_mapping/receivers/STLTs/OH/OH-receiver-transform.yml,HL7,PASS,"","","classpath:/metadata/fhir_transforms/senders/SimpleReport/simple-report-sender-transform.yml","","","" -FHIR_to_HL7/sample_NJ_20240719-0001.fhir,,FHIR_to_HL7/sample_NJ_20240719-0001.hl7,classpath:/metadata/hl7_mapping/receivers/STLTs/NJ/NJ-receiver-transform.yml,HL7,PASS,"","","classpath:/metadata/fhir_transforms/senders/SimpleReport/simple-report-sender-transform.yml","nj-doh.full-elr","","classpath:/metadata/fhir_transforms/common/suppress-device-information.yml" FHIR_to_HL7/sample_ND_20240819-0001.fhir,,FHIR_to_HL7/sample_ND_20240819-0001.hl7,classpath:/metadata/hl7_mapping/receivers/STLTs/ND/ND-receiver-transform.yml,HL7,PASS,"","","classpath:/metadata/fhir_transforms/senders/SimpleReport/simple-report-sender-transform.yml","","","" FHIR_to_HL7/sample_LA_20240806-0001.fhir,,FHIR_to_HL7/sample_LA_20240806-0001.hl7,classpath:/metadata/hl7_mapping/receivers/STLTs/LA/LA-receiver-transform.yml,HL7,PASS,"","","classpath:/metadata/fhir_transforms/senders/SimpleReport/simple-report-sender-transform.yml","","","classpath:/metadata/fhir_transforms/receivers/reference-range-enrichment.yml" FHIR_to_HL7/sample_MN_20240816-0001.fhir,,FHIR_to_HL7/sample_MN_20240816-0001.hl7,classpath:/metadata/hl7_mapping/receivers/STLTs/MN/MN-receiver-transform.yml,HL7,PASS,"","","classpath:/metadata/fhir_transforms/senders/SimpleReport/simple-report-sender-transform.yml","","","" @@ -69,5 +68,4 @@ FHIR_to_HL7/sample_MA_20240805-0001.fhir,,FHIR_to_HL7/sample_MA_20240805-0001.hl FHIR_to_HL7/sample_AR_20240805-0001.fhir,,FHIR_to_HL7/sample_AR_20240805-0001.hl7,classpath:/metadata/hl7_mapping/receivers/STLTs/AR/AR-receiver-transform.yml,HL7,PASS,"","","classpath:/metadata/fhir_transforms/senders/SimpleReport/simple-report-sender-transform.yml","","","" FHIR_to_HL7/sample_ME_20240806-0001.fhir,,FHIR_to_HL7/sample_ME_20240806-0001.hl7,classpath:/metadata/hl7_mapping/receivers/STLTs/ME/ME-receiver-transform.yml,HL7,PASS,"","","classpath:/metadata/fhir_transforms/senders/SimpleReport/simple-report-sender-transform.yml","","","" FHIR_to_HL7/sample_SR_CSVUPLOADER_20240819-0001.fhir,,FHIR_to_HL7/sample_SR_CSVUPLOADER_20240819-0001.hl7,classpath:/metadata/hl7_mapping/receivers/STLTs/MA/MA-receiver-transform.yml,HL7,PASS,"","","classpath:/metadata/fhir_transforms/senders/SimpleReport/simple-report-sender-transform.yml","","","" -FHIR_to_HL7/mars_unwanted_condition_to_notes.fhir,,FHIR_to_HL7/mars_unwanted_condition_to_notes.hl7,classpath:/metadata/hl7_mapping/receivers/STLTs/Test/test-receiver-transform.yml,HL7,PASS,,,classpath:/metadata/fhir_transforms/senders/SimpleReport/simple-report-sender-transform.yml,,, -FHIR_to_HL7/sample_SR_ENTEREDINERROR_20240904-0001.fhir,,FHIR_to_HL7/sample_SR_ENTEREDINERROR_20240904-0001.hl7,classpath:/metadata/hl7_mapping/receivers/STLTs/CA/CA-receiver-transform.yml,HL7,PASS,"","","classpath:/metadata/fhir_transforms/senders/SimpleReport/simple-report-sender-transform.yml","","","" +FHIR_to_HL7/sample_SR_ENTEREDINERROR_20240904-0001.fhir,,FHIR_to_HL7/sample_SR_ENTEREDINERROR_20240904-0001.hl7,classpath:/metadata/hl7_mapping/receivers/STLTs/CA/CA-receiver-transform.yml,HL7,PASS,"","","classpath:/metadata/fhir_transforms/senders/SimpleReport/simple-report-sender-transform.yml","","","" \ No newline at end of file diff --git a/prime-router/src/testIntegration/resources/settings/organizations.yml b/prime-router/src/testIntegration/resources/settings/organizations.yml index e2ab115bb0c..e24a013057e 100644 --- a/prime-router/src/testIntegration/resources/settings/organizations.yml +++ b/prime-router/src/testIntegration/resources/settings/organizations.yml @@ -667,116 +667,6 @@ enrichmentSchemaNames: [] timeZone: "PACIFIC" dateTimeFormat: "LOCAL" -- name: "nj-doh" - description: "New Jersey Department of Health" - jurisdiction: "STATE" - stateCode: "NJ" - countyName: null - filters: null - featureFlags: null - keys: null - senders: [] - receivers: - - name: "full-elr" - organizationName: "nj-doh" - topic: "full-elr" - customerStatus: "active" - translation: ! - schemaName: "classpath:/metadata/hl7_mapping/receivers/STLTs/NJ/NJ-receiver-transform.yml" - useTestProcessingMode: false - useBatchHeaders: true - receivingApplicationName: null - receivingApplicationOID: null - receivingFacilityName: null - receivingFacilityOID: null - messageProfileId: null - replaceValue: { } - replaceValueAwithB: { } - reportingFacilityName: null - reportingFacilityId: null - reportingFacilityIdType: null - suppressQstForAoe: false - suppressHl7Fields: null - suppressAoe: false - defaultAoeToUnknown: false - replaceUnicodeWithAscii: false - useBlankInsteadOfUnknown: null - truncateHDNamespaceIds: true - truncateHl7Fields: "OBX-23-1,ORC-12-3,OBR-16-3,OBX-17-1,ORC-12-1,OBR-16-1" - usePid14ForPatientEmail: false - convertTimestampToDateTime: null - cliaForOutOfStateTesting: null - cliaForSender: { } - phoneNumberFormatting: "STANDARD" - suppressNonNPI: false - processingModeCode: null - replaceDiiWithOid: null - applyOTCDefault: false - useOrderingFacilityName: "STANDARD" - valueSetOverrides: { } - nameFormat: "STANDARD" - receivingOrganization: null - convertPositiveDateTimeOffsetToNegative: false - stripInvalidCharsRegex: null - convertDateTimesToReceiverLocalTime: false - useHighPrecisionHeaderDateTimeFormat: false - type: "HL7" - truncationConfig: - truncateHDNamespaceIds: true - truncateHl7Fields: - - "OBX-23-1" - - "ORC-12-3" - - "OBR-16-3" - - "OBX-17-1" - - "ORC-12-1" - - "OBR-16-1" - customLengthHl7Fields: { } - jurisdictionalFilter: - - "(Bundle.entry.resource.ofType(ServiceRequest)[0].requester.resolve().organization.resolve().address.state.exists() and Bundle.entry.resource.ofType(ServiceRequest)[0].requester.resolve().organization.resolve().address.state = 'NJ') or (Bundle.entry.resource.ofType(Patient).address.state.exists() and Bundle.entry.resource.ofType(Patient).address.state = 'NJ')" - qualityFilter: - # hasOneOf(patient_street, patient_zip_code, patient_phone_number, patient_email) - - "Bundle.entry.resource.ofType(Patient).where(address.line[0].empty() and address.postalCode.empty() and telecom.where(system = 'phone').value.empty() and telecom.where(system = 'email').value.empty()).count() = 0" - # hasOneOf(order_test_date, specimen_collection_date_time, test_result_date) - - "Bundle.entry.resource.ofType(DiagnosticReport).where(basedOn.resolve().extension('https://reportstream.cdc.gov/fhir/StructureDefinition/effective-date').empty() and specimen.resolve().collection.collected.empty() and effective.empty() and issued.empty() and result.resolve().effective.empty()).count() = 0" - # isValidClia(testing_lab_clia) - - "Bundle.entry.resource.ofType(ServiceRequest).performer.resolve().identifier.where(type.coding.code = 'CLIA').value.getIdType() = 'CLIA'" - # hasValidData(patient_last_name, patient_first_name, patient_dob) - - "Bundle.entry.resource.ofType(Patient).where(name.family.empty() or name.given.empty() or birthDate.empty()).count() = 0" - # hasValidData(specimen_type) - - "Bundle.entry.resource.ofType(Specimen).where(type.empty()).count() = 0" - # hasValidData(message_id) - - "Bundle.identifier.value.empty().not()" - # hasValidData(equipment_model_name, test_result) - - "Bundle.entry.resource.ofType(DiagnosticReport).result.resolve().where(method.empty() or value.coding.code.empty()).count() = 0" - routingFilter: [ ] - processingModeFilter: - # matches(processing_mode_code, P) - - "Bundle.entry.resource.ofType(MessageHeader).meta.tag.where(system = 'http://terminology.hl7.org/CodeSystem/v2-0103').code = 'P'" - reverseTheQualityFilter: false - deidentify: false - deidentifiedValue: "" - timing: - operation: "MERGE" - numberPerDay: 1440 - initialTime: "09:40" - timeZone: "EASTERN" - maxReportCount: 100 - whenEmpty: - action: "NONE" - onlyOncePerDay: false - description: "" - transport: ! - type: SFTP - host: sftp - port: 22 - filePath: ./upload - credentialName: DEFAULT-SFTP - conditionFilter: [ ] - mappedConditionFilter: [ ] - externalName: null - enrichmentSchemaNames: ["classpath:/metadata/fhir_transforms/common/suppress-device-information.yml" ] - timeZone: null - dateTimeFormat: "OFFSET" - name: "mo-phd" description: "Missouri Public Health Department" jurisdiction: "STATE" diff --git a/prime-router/upload_swaggerui.sh b/prime-router/upload_swaggerui.sh index 089c2708967..138a9558e92 100755 --- a/prime-router/upload_swaggerui.sh +++ b/prime-router/upload_swaggerui.sh @@ -25,7 +25,7 @@ set -e which az if [ $? -eq 0 ]; then - AzureWebJobsStorage="${AzureWebJobsStorage:-DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;BlobEndpoint=http://localhost:10000/devstoreaccount1;QueueEndpoint=http://localhost:10001/devstoreaccount1;TableEndpoint=http://127.0.0.1:10002/devstoreaccount1;}" + AzureWebJobsStorage="${AzureWebJobsStorage:-DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;BlobEndpoint=http://localhost:10000/devstoreaccount1;QueueEndpoint=http://localhost:10001/devstoreaccount1;}" swagger_ui_dir_in_container="/prime-data-hub-router/swagger-ui" swagger_ui_dir_on_host="./build/swagger-ui" apidocs_container_name="apidocs" diff --git a/shared/src/main/kotlin/gov/cdc/prime/reportstream/shared/BlobUtils.kt b/shared/src/main/kotlin/gov/cdc/prime/reportstream/shared/BlobUtils.kt deleted file mode 100644 index cff4360ffc4..00000000000 --- a/shared/src/main/kotlin/gov/cdc/prime/reportstream/shared/BlobUtils.kt +++ /dev/null @@ -1,29 +0,0 @@ -package gov.cdc.prime.reportstream.shared - -import java.security.MessageDigest - -object BlobUtils { - - /** - * Create a hex string style of a digest. - */ - fun digestToString(digest: ByteArray): String { - return digest.joinToString(separator = "", limit = 40) { Integer.toHexString(it.toInt()) } - } - - /** - * Hash a ByteArray [input] with SHA 256 - */ - fun sha256Digest(input: ByteArray): ByteArray { - return hashBytes("SHA-256", input) - } - - /** - * Hash a ByteArray [input] with method [type] - */ - private fun hashBytes(type: String, input: ByteArray): ByteArray { - return MessageDigest - .getInstance(type) - .digest(input) - } -} \ No newline at end of file diff --git a/shared/src/main/kotlin/gov/cdc/prime/reportstream/shared/QueueMessage.kt b/shared/src/main/kotlin/gov/cdc/prime/reportstream/shared/QueueMessage.kt deleted file mode 100644 index f10cd20d744..00000000000 --- a/shared/src/main/kotlin/gov/cdc/prime/reportstream/shared/QueueMessage.kt +++ /dev/null @@ -1,196 +0,0 @@ -package gov.cdc.prime.reportstream.shared - -import com.fasterxml.jackson.annotation.JsonSubTypes -import com.fasterxml.jackson.annotation.JsonTypeInfo -import com.fasterxml.jackson.annotation.JsonTypeName -import com.fasterxml.jackson.databind.DeserializationFeature -import com.fasterxml.jackson.databind.ObjectMapper -import com.fasterxml.jackson.databind.json.JsonMapper -import com.fasterxml.jackson.databind.jsontype.BasicPolymorphicTypeValidator -import com.fasterxml.jackson.module.kotlin.jacksonMapperBuilder -import com.fasterxml.jackson.module.kotlin.readValue -import java.util.Base64 -import java.util.UUID - -// This is a size limit dictated by our infrastructure in azure -// https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-azure-and-service-bus-queues-compared-contrasted -private const val MESSAGE_SIZE_LIMIT = 64 * 1000 - -/** - * Interface representing a message that can be placed on an Azure Queue. - * This interface supports serialization and deserialization for handling - * different types of queue messages. - */ -@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type") -@JsonSubTypes( - JsonSubTypes.Type(QueueMessage.ReceiveQueueMessage::class, name = "receive") -) -interface QueueMessage { - - /** - * Name of the Azure Queue where the message should be placed. - */ - val messageQueueName: String - - /** - * Serializes the message object into a Base64 encoded JSON string. - * Throws an exception if the message exceeds the predefined size limit. - * - * @return Base64 encoded string of the message. - */ - fun serialize(): String { - val bytes = mapper.writeValueAsBytes(this) - check(bytes.size < MESSAGE_SIZE_LIMIT) { "Message is too big for the queue." } - return String(Base64.getEncoder().encode(bytes)) - } - - companion object { - /** - * Jackson JSON mapper configured to handle polymorphic types. - */ - val mapper: JsonMapper = ObjectMapperProvider.mapper - - /** - * Deserializes a Base64 encoded JSON string into a gov.cdc.prime.reportstream.shared.QueueMessage object. - * - * @param s Base64 encoded string representing the message. - * @return Deserialized gov.cdc.prime.reportstream.shared.QueueMessage object. - */ - fun deserialize(s: String): QueueMessage = mapper.readValue(s) - - /** - * Returns a JSON string representation of the gov.cdc.prime.reportstream.shared.QueueMessage object. - * - * @return JSON string representation. - */ - override fun toString(): String = mapper.writeValueAsString(this) - - /** - * Constant for receive queue on UP - */ - const val elrReceiveQueueName = "elr-fhir-receive" - - /** - * Constant for convert queue on UP - */ - const val elrConvertQueueName = "elr-fhir-convert" - - /** - * Constant for destination filter queue on UP - */ - const val elrDestinationFilterQueueName = "elr-fhir-destination-filter" - - /** - * Constant for receiver filter queue on UP - */ - const val elrReceiverFilterQueueName = "elr-fhir-receiver-filter" - - /** - * Constant for translation queue on UP - */ - const val elrTranslationQueueName = "elr-fhir-translate" - - /** - * Constant for send queue - */ - const val elrSendQueueName = "send" - } - - /** - * Interface representing information about a report to be processed. - */ - interface ReportInformation { - /** - * URL of the blob storage containing the report. - */ - val blobURL: String - - /** - * Digest (hash) of the report for integrity verification. - */ - val digest: String - - /** - * Subfolder name in the blob storage where the report is stored. - */ - val blobSubFolderName: String - - /** - * Unique identifier of the report. - */ - val reportId: UUID - } - - /** - * Interface representing additional information required for receiving a message. - */ - interface ReceiveInformation { - /** - * Additional headers associated with the message. - */ - val headers: Map - } - - /** - * Data class representing a specific type of gov.cdc.prime.reportstream.shared.QueueMessage meant for receiving - * FHIR (Fast Healthcare Interoperability Resources) data. It implements both - * ReportInformation and ReceiveInformation interfaces. - * - * @property blobURL The URL of the blob storage containing the report. - * @property digest The digest (hash) of the report. - * @property blobSubFolderName The subfolder name in the blob storage. - * @property reportId The unique identifier of the report. - * @property headers Additional headers associated with the message. - */ - @JsonTypeName("receive-fhir") - data class ReceiveQueueMessage( - override val blobURL: String, - override val digest: String, - override val blobSubFolderName: String, - override val reportId: UUID, - override val headers: Map, - ) : QueueMessage, - ReportInformation, - ReceiveInformation { - override val messageQueueName = elrReceiveQueueName - } - - /** - * Singleton object responsible for providing and configuring the Jackson ObjectMapper - * used for serializing and deserializing QueueMessages. The ObjectMapper is configured - * to support polymorphic types. - */ - object ObjectMapperProvider { - - /** - * Polymorphic Type Validator to allow base and subtypes for gov.cdc.prime.reportstream.shared.QueueMessage. - */ - private val ptv = BasicPolymorphicTypeValidator.builder() - .allowIfBaseType(QueueMessage::class.java) - .allowIfSubType(LinkedHashMap::class.java) - .build() - - /** - * Configured Jackson JSON mapper with polymorphic type handling. - */ - val mapper: JsonMapper = jacksonMapperBuilder() - .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false) - .polymorphicTypeValidator(ptv) - .activateDefaultTyping(ptv, ObjectMapper.DefaultTyping.NON_FINAL) - .build() - - /** - * Registers additional subtypes for gov.cdc.prime.reportstream.shared.QueueMessage deserialization. - * - * @param subtypes Additional subtypes to be registered. - */ - fun registerSubtypes(vararg subtypes: Class) { - mapper.registerSubtypes(*subtypes) - } - - init { - // Register common subtypes here. In this case, registering ReceiveQueueMessage. - mapper.registerSubtypes(ReceiveQueueMessage::class.java) - } - } -} \ No newline at end of file diff --git a/shared/src/main/kotlin/gov/cdc/prime/reportstream/shared/Submission.kt b/shared/src/main/kotlin/gov/cdc/prime/reportstream/shared/Submission.kt deleted file mode 100644 index a16924e6e6a..00000000000 --- a/shared/src/main/kotlin/gov/cdc/prime/reportstream/shared/Submission.kt +++ /dev/null @@ -1,52 +0,0 @@ -package gov.cdc.prime.reportstream.shared - -import com.azure.data.tables.models.TableEntity - -/** - * Represents a submission entity to be stored in Azure Table Storage. - * - * @property submissionId The unique identifier for the submission, used as the PartitionKey. - * @property status The status of the submission, used as the RowKey. - * @property bodyURL The URL pointing to the body of the submission. - * @property detail Optional additional details about the submission. - */ -data class Submission( - val submissionId: String, - val status: String, - val bodyURL: String, - val detail: String? = null, -) { - companion object { - /** - * Creates a SubmissionEntity from a TableEntity. - * - * @param tableEntity The TableEntity to convert. - * @return The corresponding SubmissionEntity. - */ - fun fromTableEntity(tableEntity: TableEntity): Submission { - return Submission( - submissionId = tableEntity.partitionKey, - status = tableEntity.rowKey, - bodyURL = tableEntity.getProperty("body_url") as String, - detail = tableEntity.getProperty("detail") as String? - ) - } - } - - /** - * Converts this SubmissionEntity into an Azure TableEntity. - * The PartitionKey is set to the submissionId, and the RowKey is set to the status. - * Additional properties (bodyURL and detail) are included as part of the TableEntity. - * - * @return A TableEntity object that can be inserted into an Azure Table. - */ - fun toTableEntity(): TableEntity { - return TableEntity(submissionId, status) - .setProperties( - mapOf( - "body_url" to bodyURL, - "detail" to detail.takeIf { it != null } - ) - ) - } -} \ No newline at end of file diff --git a/submissions/src/main/kotlin/gov/cdc/prime/reportstream/submissions/SubmissionReceivedEvent.kt b/submissions/src/main/kotlin/gov/cdc/prime/reportstream/submissions/ReportReceivedEvent.kt similarity index 90% rename from submissions/src/main/kotlin/gov/cdc/prime/reportstream/submissions/SubmissionReceivedEvent.kt rename to submissions/src/main/kotlin/gov/cdc/prime/reportstream/submissions/ReportReceivedEvent.kt index 61c348c0aa6..d68f8c5e05e 100644 --- a/submissions/src/main/kotlin/gov/cdc/prime/reportstream/submissions/SubmissionReceivedEvent.kt +++ b/submissions/src/main/kotlin/gov/cdc/prime/reportstream/submissions/ReportReceivedEvent.kt @@ -3,7 +3,7 @@ package gov.cdc.prime.reportstream.submissions import java.time.Instant import java.util.UUID -data class SubmissionReceivedEvent( +data class ReportReceivedEvent( val timeStamp: Instant, val reportId: UUID, val parentReportId: UUID, diff --git a/submissions/src/main/kotlin/gov/cdc/prime/reportstream/submissions/config/AzureConfig.kt b/submissions/src/main/kotlin/gov/cdc/prime/reportstream/submissions/config/AzureConfig.kt index f46897339fe..77c1cf0cd0d 100644 --- a/submissions/src/main/kotlin/gov/cdc/prime/reportstream/submissions/config/AzureConfig.kt +++ b/submissions/src/main/kotlin/gov/cdc/prime/reportstream/submissions/config/AzureConfig.kt @@ -27,18 +27,10 @@ class AzureConfig { @Bean fun blobContainerClient(): BlobContainerClient { - val blobServiceClient = BlobServiceClientBuilder() + return BlobServiceClientBuilder() .connectionString(connectionString) .buildClient() - - val blobContainerClient = blobServiceClient.getBlobContainerClient(containerName) - - // Create the container if it doesn't exist - if (!blobContainerClient.exists()) { - blobContainerClient.create() - } - - return blobContainerClient + .getBlobContainerClient(containerName) } @Bean diff --git a/submissions/src/main/kotlin/gov/cdc/prime/reportstream/submissions/controllers/SubmissionController.kt b/submissions/src/main/kotlin/gov/cdc/prime/reportstream/submissions/controllers/SubmissionController.kt index 1e7612810d3..4c07d8c2858 100644 --- a/submissions/src/main/kotlin/gov/cdc/prime/reportstream/submissions/controllers/SubmissionController.kt +++ b/submissions/src/main/kotlin/gov/cdc/prime/reportstream/submissions/controllers/SubmissionController.kt @@ -1,14 +1,13 @@ package gov.cdc.prime.reportstream.submissions.controllers import com.azure.data.tables.TableClient +import com.azure.data.tables.models.TableEntity import com.azure.storage.blob.BlobContainerClient import com.azure.storage.queue.QueueClient import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper -import gov.cdc.prime.reportstream.shared.BlobUtils -import gov.cdc.prime.reportstream.shared.QueueMessage -import gov.cdc.prime.reportstream.shared.Submission -import gov.cdc.prime.reportstream.submissions.SubmissionReceivedEvent +import gov.cdc.prime.reportstream.shared.SubmissionQueueMessage +import gov.cdc.prime.reportstream.submissions.ReportReceivedEvent import gov.cdc.prime.reportstream.submissions.TelemetryService import org.slf4j.LoggerFactory import org.springframework.http.HttpStatus @@ -76,7 +75,6 @@ class SubmissionController( // Convert data to ByteArray val dataByteArray = data.toByteArray() - val digest = BlobUtils.sha256Digest(dataByteArray) logger.debug("Converted report data to ByteArray") // Upload to blob storage @@ -86,12 +84,18 @@ class SubmissionController( // Insert into Table // TableEntity() sets PartitionKey and RowKey. Both are required by azure and combine to create the PK - val tableEntity = Submission(reportId.toString(), status, blobClient.blobUrl).toTableEntity() - tableClient.createEntity(tableEntity) + val tableEntity = TableEntity(reportReceivedTime.toString(), reportId.toString()) + val tableProperties = mapOf( + "report_received_time" to reportReceivedTime.toString(), + "report_accepted_time" to reportReceivedTime.toString(), // Will be updated when the report is accepted + "report_id" to reportId.toString(), + "status" to status + ) + tableClient.createEntity(tableEntity.setProperties(tableProperties)) logger.info("Inserted report into table storage: reportId=$reportId") // Create and publish custom event - val submissionReceivedEvent = SubmissionReceivedEvent( + val reportReceivedEvent = ReportReceivedEvent( timeStamp = reportReceivedTime, reportId = reportId, parentReportId = reportId, @@ -102,30 +106,25 @@ class SubmissionController( fileSize = contentLength, blobUrl = blobClient.blobUrl ) - logger.debug("Created SUBMISSION_RECEIVED") + logger.debug("Created ReportReceivedEvent") // Log to Application Insights telemetryService.trackEvent( - "SUBMISSION_RECEIVED", - mapOf("event" to objectMapper.writeValueAsString(submissionReceivedEvent)), + "ReportReceivedEvent", + mapOf("event" to objectMapper.writeValueAsString(reportReceivedEvent)), ) telemetryService.flush() - logger.info("Tracked SUBMISSION_RECEIVED with Application Insights") + logger.info("Tracked ReportReceivedEvent with Application Insights") // Queue upload should occur as the last step ensuring the other steps successfully process // Create the message for the queue - val message = QueueMessage.ReceiveQueueMessage( - blobClient.blobUrl, - BlobUtils.digestToString(digest), - clientId.lowercase(), - reportId, - filterHeaders(headers).toMap(), - ).serialize() + val message = SubmissionQueueMessage(reportId, blobClient.blobUrl, filterHeaders(headers)) + val messageString = objectMapper.writeValueAsString(message) logger.debug("Created message for queue") // Upload to Queue queueClient.createIfNotExists() - queueClient.sendMessage(message) + queueClient.sendMessage(messageString) logger.info("Sent message to queue: queueName=${queueClient.queueName}") val response = @@ -220,9 +219,8 @@ class SubmissionController( } private fun filterHeaders(headers: Map): Map { - val headersToInclude = - listOf("client_id", "content-type", "payloadname", "x-azure-clientip", "content-length") - return headers.filter { it.key.lowercase() in headersToInclude } + val headersToInclude = listOf("client_id", "Content-Type", "payloadname", "x-azure-clientip") + return headers.filter { it.key in headersToInclude } } private fun formBlobName( diff --git a/submissions/src/main/resources/application.properties b/submissions/src/main/resources/application.properties index 14a3fe573d2..466020a58e1 100644 --- a/submissions/src/main/resources/application.properties +++ b/submissions/src/main/resources/application.properties @@ -2,5 +2,5 @@ spring.application.name=submissions server.port=8880 azure.storage.connection-string=${AZURE_STORAGE_CONNECTION_STRING:DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;BlobEndpoint=http://localhost:10000/devstoreaccount1;QueueEndpoint=http://localhost:10001/devstoreaccount1;TableEndpoint=http://127.0.0.1:10002/devstoreaccount1;} azure.storage.container-name=${AZURE_STORAGE_CONTAINER_NAME:reports} -azure.storage.queue-name=${AZURE_STORAGE_QUEUE_NAME:elr-fhir-receive} -azure.storage.table-name=${AZURE_STORAGE_TABLE_NAME:submission} \ No newline at end of file +azure.storage.queue-name=${AZURE_STORAGE_QUEUE_NAME:elr-fhir-convert} +azure.storage.table-name=${AZURE_STORAGE_TABLE_NAME:submissions} \ No newline at end of file diff --git a/submissions/src/test/kotlin/SubmissionControllerIntegrationTest.kt b/submissions/src/test/kotlin/SubmissionControllerIntegrationTest.kt index 50255bb05e6..77b2415ba40 100644 --- a/submissions/src/test/kotlin/SubmissionControllerIntegrationTest.kt +++ b/submissions/src/test/kotlin/SubmissionControllerIntegrationTest.kt @@ -1,15 +1,15 @@ package gov.cdc.prime.reportstream.submissions.controllers +import com.azure.core.util.Context import com.azure.data.tables.TableClient import com.azure.data.tables.models.TableEntity import com.azure.storage.blob.BlobContainerClient import com.azure.storage.blob.models.BlobItem import com.azure.storage.queue.QueueClient +import com.azure.storage.queue.models.PeekedMessageItem import com.fasterxml.jackson.databind.ObjectMapper import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper -import gov.cdc.prime.reportstream.shared.QueueMessage -import gov.cdc.prime.reportstream.shared.QueueMessage.ObjectMapperProvider import org.junit.jupiter.api.AfterEach import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.BeforeEach @@ -26,7 +26,7 @@ import org.springframework.test.web.servlet.request.MockMvcRequestBuilders import org.springframework.test.web.servlet.result.MockMvcResultMatchers import org.testcontainers.containers.GenericContainer import org.testcontainers.utility.DockerImageName -import java.util.Base64 +import java.time.Duration @SpringBootTest @ActiveProfiles("test") @@ -108,18 +108,16 @@ class SubmissionControllerIntegrationTest { assertEquals(requestBody, blobContent) // Verify message was sent to queue and read its content - // Peek the message from the queue - val peekedMessage = queueClient.peekMessage()?.body?.toString() - - // Check if message is present - checkNotNull(peekedMessage) { "No message found in the queue" } - - // Deserialize the message - val deserializedMessage = deserialize(peekedMessage, QueueMessage.ReceiveQueueMessage::class.java) - -// val queueMessageContent = objectMapper.readValue(/* content = */ messages[0].body.toString(), /* valueType = */ -// QueueMessage.ReceiveQueueMessage::class.java) - val headers = deserializedMessage.headers as Map<*, *> + val messages: MutableList = mutableListOf() + queueClient.peekMessages( + 10, + Duration.ofSeconds(30), + Context.NONE + ).iterator().forEachRemaining { messages.add(it) } + assertEquals(1, messages.size) + + val queueMessageContent = objectMapper.readValue(messages[0].body.toString(), Map::class.java) as Map<*, *> + val headers = queueMessageContent["headers"] as Map<*, *> assertEquals("testClient", headers["client_id"]) assertEquals("application/hl7-v2;charset=UTF-8", headers["Content-Type"]) assertEquals("testPayload", headers["payloadname"]) @@ -130,11 +128,6 @@ class SubmissionControllerIntegrationTest { tableClient.listEntities().iterator().forEachRemaining { entities.add(it) } assertEquals(1, entities.size) val tableEntity = entities[0] - assertEquals("Received", tableEntity.getProperty("RowKey")) - } - - fun deserialize(serializedString: String, valueType: Class): T { - val bytes = Base64.getDecoder().decode(serializedString) - return ObjectMapperProvider.mapper.readValue(bytes, valueType) + assertEquals("Received", tableEntity.getProperty("status")) } } \ No newline at end of file diff --git a/submissions/src/test/kotlin/SubmissionControllerTest.kt b/submissions/src/test/kotlin/SubmissionControllerTest.kt index ab1dfd84120..2488e03ad14 100644 --- a/submissions/src/test/kotlin/SubmissionControllerTest.kt +++ b/submissions/src/test/kotlin/SubmissionControllerTest.kt @@ -8,8 +8,6 @@ import com.azure.storage.queue.models.SendMessageResult import com.fasterxml.jackson.databind.ObjectMapper import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper -import gov.cdc.prime.reportstream.shared.QueueMessage -import gov.cdc.prime.reportstream.shared.QueueMessage.ObjectMapperProvider import gov.cdc.prime.reportstream.submissions.TelemetryService import gov.cdc.prime.reportstream.submissions.config.AzureConfig import org.junit.jupiter.api.AfterEach @@ -38,7 +36,6 @@ import org.springframework.test.web.servlet.request.MockMvcRequestBuilders import org.springframework.test.web.servlet.result.MockMvcResultMatchers import java.io.ByteArrayInputStream import java.io.InputStream -import java.util.Base64 import java.util.UUID @WebMvcTest(SubmissionController::class) @@ -139,10 +136,11 @@ class SubmissionControllerTest { // Assert the captured arguments assert(blobSizeCaptor.firstValue == requestBody.length.toLong()) - val capturedMessage = deserialize(messageCaptor.firstValue, QueueMessage.ReceiveQueueMessage::class.java) - assert(capturedMessage.reportId == reportId) - assert(capturedMessage.blobURL == expectedBlobUrl) - val headers = capturedMessage.headers as Map<*, *> + val capturedMessage = objectMapper.readValue(messageCaptor.firstValue, Map::class.java) + assert(capturedMessage["reportId"] == reportId.toString()) + assert(capturedMessage["blobUrl"] == expectedBlobUrl) + assert(capturedMessage["headers"] != null) + val headers = capturedMessage["headers"] as Map<*, *> assert(headers["client_id"] == "testClient") assert(headers["Content-Type"] == "application/hl7-v2;charset=UTF-8") assert(headers["payloadname"] == "testPayload") @@ -185,10 +183,11 @@ class SubmissionControllerTest { // Assert the captured arguments assert(blobSizeCaptor.firstValue == requestBody.length.toLong()) - val capturedMessage = deserialize(messageCaptor.firstValue, QueueMessage.ReceiveQueueMessage::class.java) - assert(capturedMessage.reportId == reportId) - assert(capturedMessage.blobURL == expectedBlobUrl) - val headers = capturedMessage.headers as Map<*, *> + val capturedMessage = objectMapper.readValue(messageCaptor.firstValue, Map::class.java) + assert(capturedMessage["reportId"] == reportId.toString()) + assert(capturedMessage["blobUrl"] == expectedBlobUrl) + assert(capturedMessage["headers"] != null) + val headers = capturedMessage["headers"] as Map<*, *> assert(headers["client_id"] == "testClient") assert(headers["Content-Type"] == "application/fhir+ndjson;charset=UTF-8") assert(headers["payloadname"] == "testPayload") @@ -276,7 +275,7 @@ class SubmissionControllerTest { } @Test - fun `submitReport should log SUBMISSION_RECEIVED with correct details`() { + fun `submitReport should log ReportReceivedEvent with correct details`() { // Helper function to safely cast the captured map to Map fun mapToStringString(input: Map<*, *>): Map { return input.mapNotNull { (key, value) -> @@ -317,7 +316,7 @@ class SubmissionControllerTest { val capturedEvent = eventCaptor.firstValue val capturedProperties = mapToStringString(propertiesCaptor.firstValue) - assert(capturedEvent == "SUBMISSION_RECEIVED") + assert(capturedEvent == "ReportReceivedEvent") val eventDetails = objectMapper.readValue(capturedProperties["event"], Map::class.java) assert(eventDetails["reportId"] == reportId.toString()) assert(eventDetails["blobUrl"] == expectedBlobUrl) @@ -330,9 +329,4 @@ class SubmissionControllerTest { uuidMockedStatic.close() } - - fun deserialize(serializedString: String, valueType: Class): T { - val bytes = Base64.getDecoder().decode(serializedString) - return ObjectMapperProvider.mapper.readValue(bytes, valueType) - } } \ No newline at end of file

adLVbEoWwfe6%{?Mt>s%oWD7Sa@m_y+?wPpO)J&xBHZ!vy-@ByawR z{O+I)gP(Sc?flws!oIGXuyMjg@Kc75s6q@Ob#K=W9UBg^=c$21uY~t&e&)NNeVy;s z#>kbrk=hwV+cl}@H#7+Lo>{f$oX?)9X8WzF5qD!b_wSImVV$_#AT6zJD7{^v0gF)= zt`+6FA(&RDNr=(-$vLtE8CM z*AKnQwIQ_U4=bd_WcAV}%YA%HHh-86C_nz@V~xrHI^q9agTOc)y@&lKLGBuR@%&M325{Q%u_O5hh|X56Y<1D@g~_fX!uI@y}~58H8ZQVWmNZgaa8AX#hF_?4xiZlX;Duy zRTejxoa8uO`n&;~G1gTc4B~W|4HeEio-R24gGDL%p2PzCJyivsUrn@>{gb+d8c%v{ zIcu(5;8i$P#zTM=|RkkX>)ne24dXX}XL!@rK-l&&6rRsrlN|T%}iSu4_ zbt)gSwq}QpO!?g_vK&!W4GxP?J$XaFv1`(-v^e+SW{u{vRg(7KRx7ZI8$Gx47MpIk ztJ(c)W`@W7V2UQY$&JgmxF~H&l_QR~>fS2m3rFh~$FE;+bi!F*P2-Xuq)btp6d3)2 znsB%!)~1(uq=%uFUI~M$m)YDa7e!cE%MP$&VP4Dq( zGab@w^~ide$d3j?0o(r){A5iq{wq)OCYAM+%G(eInY+|ol7DrVrF2D0a8-2u6xyyk zM^t{La8hdAF%tan{+B!m*9+YB+-QL{?#ahzeMgX>-zv29)CZx-fVsrwT8xVhm2>AW&xV}g-m>!!cyEY~pBE&Uz2WhZ2LpQxTpZWw z5Ar3;3a2<7I9nT*l$z6VH|geIxv##pT6XoFxxi|AGH|iFKzuPfcTA>GPdba*l4*Ca zN2pvpyxMCaa8mBlHB4=IjOYG0(rofv_*|^h){d&jfnN6~_mCsyx7YGUnjNBB%CEk; z$-cIXqh?)(Tesjh7VX$jjR`{^Z#e}E+Ert{%d2L>WgW~87iqHDcMIHpn5-RzFnmt7 z2Kl`1n!CGFW$ZR=vojg{kA=S&3@t}_lkUTds=?SMgeutvVuKx*%eK2@CvTBont zlioAck{?6ItEbIG?(K4Xazd)L%lG_e#~tR=Ta$Lx>#6_nLojJQ>N~ON5*DK6vCxcA)$yAEuf<;IM@f+nvQr5}#EH?>j7@wu$>mWTl~M z*a`!=ofZh4CqLH4{kChsmsFF^Br|nAryR4w8ktK9-49K}rIa_D_3LK(v5Smx)m>z{ zM&2dU!9r1*W9vRDA<18tsMK3EsXa6uxOk2hXIV!}hPVnG@7I~HY|7J=xT1S(&Yx!< zRdwmEMrs^bJvIm2KBhqoYph6>R6f^c+N-mZizpOXz&XaY>Ln-3o1n2R8O86+)=*9R zEzSyST{pI1O=@lmopmSE13bmbL!%#y=Jl~fvavdjv>#F448=*>f9W>zVi{Vk`am@g z-ld|Xyhmh#Rn6!WXLH)BZ);X3u$=GH5o*pAdJ%D&eKXmk;*$0HBT3S}PM`fU@@x%$ z<&HcWIKf{k|LWeP$l9a>C$11bwiRt@LnJmAAE93odi-6tZem+?PL6i;rCveBoG)`Y{q}WhyMM**ppAJl0`Y`H??a>epK{NLM{<7M)VO(- zvI*2Op+VSmK!e`q7i3+LI9qfzx1frzuY4&K%)>1XM!T- z!_TirrhYA;d4{)sbtYING6Pv8(lWT~lVVe~8VlJNmKoLe96cCca3TWo70uev;!M z{q25AYcFm>E&OY`4cfxzIA))`O;49um(-^mroPu;a|k@lE*#sGYT$?*LEEa4TwaM4 zVFz{4lB$f|GM^t9CbC6e?fcnNKI+ncay$_$ti1C=NJ`kX%~Wm0Ri0I~11!k{7WpY? zU%Ye;(J*u*KJnI`vOM48hEMkm#&S!Ui%8q`c9{0WdwhJhx8!M|=gZe&uF(s9KhopG zzGO|S8XmZ}QKWlt-LsYjGrqLBYa2d)n&@J^U+S5aW|`UP;yP69wXp7cEQioHL5h{L zCEHt$-7MGmpxu)Rm!n4Jx{3_`>LD(3U%2$Jq8CCRKN-Ro5Ikte;V)VN3WfA9kwoL`b~0!R9QH3u65~ z&z$rVhF-VDht8IKiKABYTP~%6M5(8I_1>n8) zPivT2eHELSS`FI#MJ(GQ-~PhIlCRD@)Pp|=yG1i!_{v_fGUiw>>^$RHOOlE0e6i|Y zqp|>f=Ikj7@=ALpX4E3qVeb5ZeqQoqjXwn-r249UCoxr zxOGR#c8= zGY;B@2udzVl*NKjb%)yO%9Y6es~{cZ0tOq=ArY{=EJ$1%zKt2YPUKk^MsQZ zM%s0A4C`0KunaUXUVnJNy6gUB7fDzy+c(mhtFh7OVH8L1risZ^zQ>?h!^uET`8un|UYP@gM*nFoht#Fb)W$PWz{yE=l z{`fQRg2I%a8ntGUcPRAT&PP(TCX}4M=OqQNb$XGA^vm$m%(HBo*Ua=N7dF>fBM)nL zKinv?9;@hk|9V!l%I@O@my0`%eke(W50A-w5n(UB&8BDZyp>qXMaiiQxJh??=OAb( zYZzCMI%!?L-vo7zu2j)Uv7B#=-apiIE|`7D)?=l#xM^fsk6L(JSKNw{km^&7XIQ=~ zr(Y$&a#MW0X}1o3ZGV=&_6*ut>7OWXpBOk*9{b67h`*xE@|eU-K2^^@xX<(x@7I0h z;m0M8<(i9qk=S6+6Zd*r>HNMl_0MmfIz*^e)_)h66#>M6=zC6=Y&V47YWpdS6s%Ck#z#>bo!Ftgii4BK) z;@%Zn7)52wo%L@$NGK4}I?RwUIo8c{y!cy14BO8J!s6m~sX?~VA3;V>A61>Hn#-L( zuJ%DR=uhwE|M}aUgAR-nbfTR8PH=-T{iLfq!-(Ndw{%w0cXzdOw{&)K&}yGglHzG<>>&@!cZV>lxDVtXy9q- z&hR4w?%)<72Hl6Tg-d0-C&S(qRM&O2bOCIPJ?QR$?G7N7!6ciwy4(Ey4EXM}WB~Pc zZl#dG?GIE6iHw4)AkZTuk}UWG-1fWL{NE7bzu(J!-08L;hYJ~@ae?#X|1Cr+f8VK&e)5tWu{m3K|I7nTBgGm$`ilaefaJGuGGsH}`gKHbWVIYVD$B#zA@H8?B z_})_7?@BoRU@{fB?02}aQcCP23oQVN5Sg?Qz*=2KRA9g z3}g?&(Wo%q&JY>&5zccTJ$sDqPBfhf#`Ow966d%;YCmkUr3 zjMMp#x*!;E{iXc=h@&D@yl?y&N5!bibOv)BP6n8VPzdJ-KxYKsA0VO)Vy2>EmVdVw zh5jG|q2OguP>^y7R~Lhs9}1T8gGdy-?I8*ZlwO8|@H)dF?23l-d+;TL1R|^OG7t)` zKLC!5;%xA{5>76Rq8PX`XbHbR;xJ$q96vC*Af)ATA?8P9X8Fga%z=rw3-EB}PtkEW z6adM)>w(D1_l?z+W(C#N$$3ATU7iG#Fl97xWTdX9OaH+me>@ zLx2>#32%+I^ib5#f55VYPCOuoKAJ7D3L&MR) z*IvB;p$H6;i!H@r0Ece}Shbd|-53HdTYE4nZCTqeFpTiNMx&x2Vcb%=G!XWO(+?&A zuf*vGXjFV%m_&o|;~daXd>_GNGFYjX$_2D#J`P+Q6g&>Bzj*z~)MfKHOa^N*&R<|M zisEera1egH!DP^mWpXhZey#&J=Ewad_Jb*a9bPV212CK)zz{;huUjx!0q}Djz=6s* z888XM?|nej014mcU_HVxe7_+iu!Y6(LojTaO%dQ&c)19Tg!eySDDtxQf)yS=4*?t) z{5ZK(6vEH3Fcl?H@cL0vWSL)qr2@Ynf>C6-4NweQCId{*_%R5hG!iq_BD4HG$HEv) z!OuA`#@rPy!y))_4r5f{YKbp>Ql>G#u4;!&a+=u|4j3iyC6 z#fpN^VXC#Qr7g{h24N^nLu_DmuKyqMudn+a4Dc5A`{f6y2KFReGBUdkXmkA!O)pzC literal 0 HcmV?d00001 diff --git a/frontend-react/public/assets/pdf/ReportStream-Programmers-Guide-v4.6.pdf b/frontend-react/public/assets/pdf/ReportStream-Programmers-Guide-v4.6.pdf deleted file mode 100644 index 54b3b06920c35fd649f563c15217a1f8e563ad48..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 356968 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%0D5;wfC{C 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