use of org.hl7.gravity.refimpl.sdohexchange.sdohmappings.System in project hl7v2-fhir-converter by LinuxForHealth.
the class Hl7FinancialInsuranceTest method testInsuranceCoverageOfSelfAndTenant.
// Suppress warnings about too many assertions in a test. Justification: creating a FHIR message is very costly; we need to check many asserts per creation for efficiency.
@java.lang.SuppressWarnings("squid:S5961")
@Test
// Tests multiple Organization Id's created with a TENANT prepend.
void testInsuranceCoverageOfSelfAndTenant() throws IOException {
String hl7message = "MSH|^~\\&|||||20151008111200||DFT^P03^DFT_P03|MSGID000001|T|2.6|||||||||\n" + "EVN||20210407191342||||||\n" + // PID.19 purposely empty so IN2.2 used as SSN PatientIdentifier
"PID|||MR1^^^XYZ^MR||DOE^JANE^|||F||||||||||||||||||||||\n" + "PV1||I||||||||||||||||||||||||||||||||||||||||||\n" + // FT1.7 is required transaction code (currently not used)
"FT1||||20201231145045||CG|FAKE|||||||||||||||||||||||||||||||||||||\n" + // IN1.2.4, IN1.2.6 to second XV Coverage.identifier
"IN1|1|Value1^^System3^Value4^^System6" + // IN1.5 to 15 NOT REFERENCED (Tested in testBasicInsuranceCoverageFields)
"|IdValue1^^^IdSystem4^^^^|Large Blue Organization|||||||||||" + // IN1.18 through IN1.35 NOT REFERENCED
"||SEL||||||||||||||||||" + // IN1.47 through IN1.53 NOT REFERENCED
"|MEMBER36||||||||||Value46|||||||\n" + // Only used for MB Patient.Identifier because subscriber is SELF
"IN2||SSN123456|||||||||||||||||||||||IdValue25.1^^^IdSystem25.4^IdType25.5^^20201231145045^20211231145045|||||||||||||||||||||||||||||||||||||||||||" + // IN2.72 is purposely empty (backup to IN1.17) so no RelatedPerson is created.
"|Name69.1^^^^^IdSystem69.6^XX^^^IdValue69.10||\n";
// TENANT prepend is passed through the options.
ConverterOptions customOptionsWithTenant = new Builder().withValidateResource().withPrettyPrint().withProperty("TENANT", "TenantId").build();
List<BundleEntryComponent> e = ResourceUtils.createFHIRBundleFromHL7MessageReturnEntryList(ftv, hl7message, customOptionsWithTenant);
List<Resource> encounters = ResourceUtils.getResourceList(e, ResourceType.Encounter);
// From PV1
assertThat(encounters).hasSize(1);
List<Resource> patients = ResourceUtils.getResourceList(e, ResourceType.Patient);
// From PID
assertThat(patients).hasSize(1);
Patient patient = (Patient) patients.get(0);
String patientId = patient.getId();
// Check Patient.identifiers
// From PID.3, IN2.2 and IN1.36
assertThat(patient.getIdentifier()).hasSize(3);
Identifier patientIdentifier = patient.getIdentifier().get(0);
// PID.3.1
assertThat(patientIdentifier.getValue()).isEqualTo("MR1");
// PID.3.4
assertThat(patientIdentifier.getSystem()).isEqualTo("urn:id:XYZ");
DatatypeUtils.checkCommonCodeableConceptAssertions(patientIdentifier.getType(), "MR", "Medical record number", "http://terminology.hl7.org/CodeSystem/v2-0203", // PID.3.5
null);
patientIdentifier = patient.getIdentifier().get(1);
// IN1.36 backup to IN2.61, active because subscriber is SELF
assertThat(patientIdentifier.getValue()).isEqualTo("MEMBER36");
// No system for MB
assertThat(patientIdentifier.hasSystem()).isFalse();
DatatypeUtils.checkCommonCodeableConceptAssertions(patientIdentifier.getType(), "MB", "Member Number", "http://terminology.hl7.org/CodeSystem/v2-0203", null);
patientIdentifier = patient.getIdentifier().get(2);
// IN2.2
assertThat(patientIdentifier.getValue()).isEqualTo("SSN123456");
// No system for SSN
assertThat(patientIdentifier.hasSystem()).isFalse();
DatatypeUtils.checkCommonCodeableConceptAssertions(patientIdentifier.getType(), "SS", "Social Security number", "http://terminology.hl7.org/CodeSystem/v2-0203", null);
List<Resource> organizations = ResourceUtils.getResourceList(e, ResourceType.Organization);
// From Payor created by IN1, PayorId Organization (IN2.25), and PolcyHolder Organization Name (IN2.69)
assertThat(organizations).hasSize(3);
Organization org = (Organization) organizations.get(0);
String payorOrgId = org.getId();
// IN1.17.1 w/TENANT prepend (Id's lowercased)
assertThat(payorOrgId).isEqualTo("Organization/tenantid.idvalue1");
// Check organization Identifier's
// IN1.4
assertThat(org.getName()).isEqualTo("Large Blue Organization");
assertThat(org.getIdentifier()).hasSize(1);
Identifier orgIdentifier = org.getIdentifierFirstRep();
// IN1.3.1
assertThat(orgIdentifier.getValue()).isEqualTo("IdValue1");
// IN1.3.4
assertThat(orgIdentifier.getSystem()).isEqualTo("urn:id:IdSystem4");
// IN1.3.7 & IN1.3.7 empty
assertThat(orgIdentifier.hasPeriod()).isFalse();
// IN1.3.5 empty
assertThat(orgIdentifier.hasType()).isFalse();
// Check PayorId Organization from IN2.25
org = (Organization) organizations.get(1);
String payorOrgIdIn25 = org.getId();
// IN1.25.1 w/TENANT prepend (Id's lowercased)
assertThat(payorOrgIdIn25).isEqualTo("Organization/tenantid.idvalue25.1");
// IN2.25.1
assertThat(org.getName()).isEqualTo("IdValue25.1");
assertThat(org.getIdentifier()).hasSize(1);
orgIdentifier = org.getIdentifier().get(0);
// IN2.25.1
assertThat(orgIdentifier.getValue()).isEqualTo("IdValue25.1");
// IN2.25.4
assertThat(orgIdentifier.getSystem()).isEqualTo("urn:id:IdSystem25.4");
// IN2.25.7
assertThat(orgIdentifier.getPeriod().getStartElement().toString()).containsPattern("2020-12-31T14:50:45");
// IN2.25.8
assertThat(orgIdentifier.getPeriod().getEndElement().toString()).containsPattern("2021-12-31T14:50:45");
// IN2.25.5
DatatypeUtils.checkCommonCodeableConceptAssertions(orgIdentifier.getType(), "IdType25.5", null, null, null);
// Check PolicyHolder Organization Name and ID Organization from IN2.69
org = (Organization) organizations.get(2);
String policyHolderOrgId = org.getId();
// IN2.69.1 w/TENANT prepend (Id's lowercased)
assertThat(policyHolderOrgId).isEqualTo("Organization/tenantid.idvalue69.10");
// IN2.69.1
assertThat(org.getName()).isEqualTo("Name69.1");
assertThat(org.getIdentifier()).hasSize(1);
orgIdentifier = org.getIdentifier().get(0);
// IN2.69.10
assertThat(orgIdentifier.getValue()).isEqualTo("IdValue69.10");
// IN2.69.6
assertThat(orgIdentifier.getSystem()).isEqualTo("urn:id:IdSystem69.6");
// Becuase the code is known, the 0203 table lookup is successful and returns code, display, and system
DatatypeUtils.checkCommonCodeableConceptAssertions(orgIdentifier.getType(), "XX", "Organization identifier", "http://terminology.hl7.org/CodeSystem/v2-0203", // IN2.69.7 with lookup
null);
List<Resource> coverages = ResourceUtils.getResourceList(e, ResourceType.Coverage);
// From IN1 segment
assertThat(coverages).hasSize(1);
Coverage coverage = (Coverage) coverages.get(0);
// Confirm Coverage Identifiers
// XV, XV, XV, MB, SN
assertThat(coverage.getIdentifier()).hasSize(5);
// Coverage Identifiers deep check in testBasicInsuranceCoverageFields
// Confirm Coverage Subscriber references to Patient
assertThat(coverage.getSubscriber().getReference()).isEqualTo(patientId);
// Confirm Coverage Beneficiary references to Patient, and Payors references correct Organizations
assertThat(coverage.getBeneficiary().getReference()).isEqualTo(patientId);
// One for each payorOrganization
assertThat(coverage.getPayor()).hasSize(2);
assertThat(coverage.getPayor().get(0).getReference()).isEqualTo(payorOrgId);
assertThat(coverage.getPayor().get(1).getReference()).isEqualTo(payorOrgIdIn25);
// Confirm policyHolder references correct organization
assertThat(coverage.getPolicyHolder().getReference()).isEqualTo(policyHolderOrgId);
// Expect no RelatedPerson because IN1.17 was self
List<Resource> relatedPersons = ResourceUtils.getResourceList(e, ResourceType.RelatedPerson);
// No related person should be created because IN1.17 was SEL
assertThat(relatedPersons).isEmpty();
// Check coverage.relationship (from SubscriberRelationship mapping)
DatatypeUtils.checkCommonCodeableConceptAssertions(coverage.getRelationship(), "self", "Self", "http://terminology.hl7.org/CodeSystem/subscriber-relationship", // IN1.17
null);
// Confirm there are no unaccounted for resources
// Expected: Coverage, Organization (3x), Patient, Encounter
assertThat(e).hasSize(6);
}
use of org.hl7.gravity.refimpl.sdohexchange.sdohmappings.System in project hl7v2-fhir-converter by LinuxForHealth.
the class Hl7FinancialInsuranceTest method testInsuranceCoverageOfWorkersComp.
@Test
// Tests non-related subscriber, employer.
void testInsuranceCoverageOfWorkersComp() throws IOException {
String hl7message = "MSH|^~\\&|TEST|TEST|||20220101120000||DFT^P03|1234|P|2.6\n" + // + "EVN||20210407191342||||||\n"
"PID|||workers_comp^^^XYZ^MR||DOE^JANE^|||F||||||||||||||||||||||\n" + "PV1||I||||||||||||||||||||||||||||||||||||||||||\n" + // FT1.7 is required transaction code (currently not used)
"FT1||||20201231145045||CG|FAKE|||||||||||||||||||||||||||||||||||||\n" + // IN1.2.4, IN1.2.6 to second XV Coverage.identifier
"IN1|1|Value1^^System3^Value4^^System6" + // IN1.5 through 15 NOT REFERENCED (Tested in testBasicInsuranceCoverageFields)
"|IdValue1^^^IdSystem4^^^^|Large Blue Organization|||||||||||" + // IN1.18 through IN1.35 NOT REFERENCED
"||EMR||||||||||||||||||" + // IN1.37 through IN1.53 NOT REFERENCED
"|MEMBER36|||||||||||||J321456||||\n";
List<BundleEntryComponent> e = ResourceUtils.createFHIRBundleFromHL7MessageReturnEntryList(ftv, hl7message);
List<Resource> encounters = ResourceUtils.getResourceList(e, ResourceType.Encounter);
// From PV1
assertThat(encounters).hasSize(1);
List<Resource> patients = ResourceUtils.getResourceList(e, ResourceType.Patient);
// From PID
assertThat(patients).hasSize(1);
Patient patient = (Patient) patients.get(0);
String patientId = patient.getId();
// No patient identifier should have value IN1.49 "J321456" because relationship is not SEL (self)
// Finding exactly 1 expected identifier "workers_comp" proves not "J321456"
assertThat(patient.getIdentifier()).hasSize(1);
assertThat(patient.getIdentifierFirstRep().getValueElement()).hasToString("workers_comp");
List<Resource> organizations = ResourceUtils.getResourceList(e, ResourceType.Organization);
// From Payor created by IN1
assertThat(organizations).hasSize(1);
Organization org = (Organization) organizations.get(0);
// Check organization Id's
assertThat(org.getIdentifier()).hasSize(1);
// Org identifiers checked deeply in other tests
List<Resource> coverages = ResourceUtils.getResourceList(e, ResourceType.Coverage);
// From IN1 segment
assertThat(coverages).hasSize(1);
Coverage coverage = (Coverage) coverages.get(0);
// Confirm Coverage Identifiers
// XV, XV, MB, SN
assertThat(coverage.getIdentifier()).hasSize(4);
// Coverage Identifiers deep check in testBasicInsuranceCoverageFields
// Because the relationship is EMR (Employer), no subscriber is created (subscriber can't be an Organization)
assertThat(coverage.hasSubscriber()).isFalse();
// Confirm Coverage Beneficiary references to Patient, and Payor references to Organization
assertThat(coverage.getBeneficiary().getReference()).isEqualTo(patientId);
assertThat(coverage.getPayorFirstRep().getReference()).isEqualTo(organizations.get(0).getId());
// Expect no RelatedPerson because IN1.17 was EMR
List<Resource> relatedPersons = ResourceUtils.getResourceList(e, ResourceType.RelatedPerson);
// No related person should be created because IN2.72 was 01 (self)
assertThat(relatedPersons).isEmpty();
// Check coverage.relationship (from SubscriberRelationship mapping)
DatatypeUtils.checkCommonCodeableConceptAssertions(coverage.getRelationship(), "EMR", null, null, // IN1.17, because it is not mapped there is no system or display.
null);
// Confirm there are no unaccounted for resources
// Expected: Coverage, Organization, Patient, Encounter
assertThat(e).hasSize(4);
}
use of org.hl7.gravity.refimpl.sdohexchange.sdohmappings.System in project hl7v2-fhir-converter by LinuxForHealth.
the class HL7ConditionFHIRConversionTest method validateProblemWithInvalidClinicalStatusAndResolutionDate.
// Tests that if PRB.9 is set and PRB.14 is INVALID, default Condition.clinicalStatus to "resolved"
@Test
void validateProblemWithInvalidClinicalStatusAndResolutionDate() {
String hl7message = "MSH|^~\\&|||||20040629164652|1|PPR^PC1|331|P|2.3.1||\r" + "PID||||||||||||||||||||||||||||||\r" + // PRB.9 Actual Problem Resolution Date used in connection with INVALID PRB.14 to trigger Resolved clinicalStatus
"PRB|AD|20170110074000|K80.00^Cholelithiasis^I10|53956|||||20150907175347|||||INVALID|||||||||||||\r";
List<BundleEntryComponent> e = ResourceUtils.createFHIRBundleFromHL7MessageReturnEntryList(ftv, hl7message);
// Find the condition from the FHIR bundle.
List<Resource> conditionResource = ResourceUtils.getResourceList(e, ResourceType.Condition);
assertThat(conditionResource).hasSize(1);
Condition condition = (Condition) conditionResource.get(0);
// Verify clinicalStatus has a Resolved coding with correct system and text (based on PRB.9 and INVALID PRB.14)
DatatypeUtils.checkCommonCodeableConceptAssertions(condition.getClinicalStatus(), "resolved", "Resolved", "http://terminology.hl7.org/CodeSystem/condition-clinical", null);
}
use of org.hl7.gravity.refimpl.sdohexchange.sdohmappings.System in project hl7v2-fhir-converter by LinuxForHealth.
the class HL7MergeFHIRConversionTest method validateHappyPathADT_A34WithMRG.
// Test ADT_A34 with one MRG segment (the most it supports).
@Test
void validateHappyPathADT_A34WithMRG() {
String hl7message = "MSH|^~\\&|SENDING_APPLICATION|SENDING_FACILITY|RECEIVING_APPLICATION|RECEIVING_FACILITY|||ADT^A34||P|2.3||||\r" + "EVN|A40|20110613122406637||01\r" + // Identifier value 234 with no system and no identifier type
"PID|1||123^^^^MR||||||||||||||||||||||||||||||||||||\r" + // Identifier value 456 with no system and no identifier type
"MRG|456||||||\r";
// Convert hl7 message
List<BundleEntryComponent> e = ResourceUtils.createFHIRBundleFromHL7MessageReturnEntryList(ftv, hl7message);
// Find the patient resources in the FHIR bundle.
List<Resource> patientResources = ResourceUtils.getResourceList(e, ResourceType.Patient);
// There should be 2 - One for the PID segment and one for the MRG segment
assertThat(patientResources).hasSize(2);
// Get first patient and associated identifiers and id.
Patient patientOne = PatientUtils.getPatientFromResource(patientResources.get(0));
String patientOneId = patientOne.getId();
List<Identifier> patientOneIdentifierList = patientOne.getIdentifier();
// Get second patient and associated identifiers and id.
Patient patientTwo = PatientUtils.getPatientFromResource(patientResources.get(1));
String patientTwoId = patientTwo.getId();
List<Identifier> patientTwoIdentifierList = patientTwo.getIdentifier();
/*-----------Verify Patient One-----------*/
// Verify patient one's identifier is set correctly (this is the patient build
// from the PID segment)
//
// "identifier":[
// {
// "type":{
// "coding":[
// {
// "system":"http://terminology.hl7.org/CodeSystem/v2-0203",
// "code":"MR",
// "display":"Medical record number"
// }
// ]
// },
// "value":"123"
// },
// {
// "use":"old",
// "value":"456"
// }
// ]
// Verify the patient has two identifiers
assertThat(patientOneIdentifierList).hasSize(2);
// Verify the identifier values are correct.
assertThat(patientOneIdentifierList.get(0).getValue()).isEqualTo("123");
assertThat(patientOneIdentifierList.get(1).getValue()).isEqualTo("456");
// Verify the system values are not present
assertThat(patientOneIdentifierList.get(0).getSystem()).isNull();
assertThat(patientOneIdentifierList.get(1).getSystem()).isNull();
// Verify the first identifier has no use field.
assertThat(patientOneIdentifierList.get(0).getUse()).isNull();
// Verify the second identifier is marked as old
assertThat(patientOneIdentifierList.get(1).getUse()).isEqualTo(Identifier.IdentifierUse.OLD);
// Verify identifier type is set correctly for the first identifier
CodeableConcept patientOneIdentifierType = patientOneIdentifierList.get(0).getType();
assertThat(patientOneIdentifierType.getCoding().get(0).getSystem()).isEqualTo("http://terminology.hl7.org/CodeSystem/v2-0203");
assertThat(patientOneIdentifierType.getCoding().get(0).getDisplay()).isEqualTo("Medical record number");
assertThat(patientOneIdentifierType.getCoding().get(0).getCode()).isEqualTo("MR");
// Verify the identifier type for the second identifier is not present.
assertThat(patientOneIdentifierList.get(1).getType().getCoding()).isEmpty();
// Verify first patient has these fields
//
// "active":true,
// "link":[
// {
// "other":{
// "reference":"Patient/expiringID-MRG"
// },
// "type":"replaces"
// }
// ]
// The first patient should be active.
assertThat(patientOne.getActive()).isTrue();
// Verify link.other.reference references the MRG (2nd) patient with of a type of 'replaces'
PatientLinkComponent linkOne = patientOne.getLink().get(0);
assertThat(linkOne.getType()).isEqualTo(Patient.LinkType.REPLACES);
assertThat(linkOne.getOther().getReference()).isEqualTo(patientTwoId);
/*-----------Verify Patient Two-----------*/
// Verify patient two's identifier is set correctly (this is the patient build
// from the MRG segment)
//
// "identifier":[
// {
// "use":"old",
// "value":"456"
// }
// ]
// Verify has only 1 identifier
assertThat(patientTwoIdentifierList).hasSize(1);
// Verify the identifier value is correct.
assertThat(patientTwoIdentifierList.get(0).getValue()).isEqualTo("456");
// Verify the system is not present
assertThat(patientTwoIdentifierList.get(0).getSystem()).isNull();
// Verify the identifier is marked as old
assertThat(patientTwoIdentifierList.get(0).getUse()).isEqualTo(Identifier.IdentifierUse.OLD);
// Verify identifier type is not present
assertThat(patientTwoIdentifierList.get(0).getType().getCoding()).isEmpty();
// Verify second patient has these fields.
// "active":false,
// "link":[
// {
// "other":{
// "reference":"Patient/survivingID"
// },
// "type":"replaced-by"
// }
// ]
// The second patient should NOT be active.
assertThat(patientTwo.getActive()).isFalse();
// We should have link.other.reference to the PID (1st) patient with a type of 'replaced-by'
PatientLinkComponent linkTwo = patientTwo.getLink().get(0);
assertThat(linkTwo.getType()).isEqualTo(Patient.LinkType.REPLACEDBY);
assertThat(linkTwo.getOther().getReference()).isEqualTo(patientOneId);
;
}
use of org.hl7.gravity.refimpl.sdohexchange.sdohmappings.System in project hl7v2-fhir-converter by LinuxForHealth.
the class HL7OMLMessageTest method testOMLO21WithAllergy.
@Test
public void testOMLO21WithAllergy() throws IOException {
String hl7message = "MSH|^~\\&||Test System|||20210917110100||OML^O21^OML_O21|||2.6\r" + "PID|1||7659afb9-0dfc-d744-1f40-5b9314807108^^^^MR||Feeney^Sam^^^^^L|||M||||||||\r" + "AL1|1|DRUG|00000741^OXYCODONE||HYPOTENSION\r" + "AL1|2|DRUG|00001433^TRAMADOL||SEIZURES~VOMITING\r" + "ORC|NW|8125550e-04db-11ec-a9a8-086d41d421ca^^ID^UUID||||||||||\r" + "OBR|1|8125550e-04db-11ec-a9a8-086d41d421ca^^ID^UUID||58410-2^CBC panel - Blood by Automated count^LN||||||||||||\r" + "AL1|1|DA|1605^acetaminophen^L|MO|Muscle Pain~hair loss\r";
String json = ftv.convert(hl7message, OPTIONS_PRETTYPRINT);
assertThat(json).isNotBlank();
IBaseResource bundleResource = context.getParser().parseResource(json);
assertThat(bundleResource).isNotNull();
Bundle b = (Bundle) bundleResource;
List<BundleEntryComponent> e = b.getEntry();
List<Resource> patientResource = ResourceUtils.getResourceList(e, ResourceType.Patient);
// from PID
assertThat(patientResource).hasSize(1);
List<Resource> allergyResource = ResourceUtils.getResourceList(e, ResourceType.AllergyIntolerance);
// from AL1
assertThat(allergyResource).hasSize(3);
List<Resource> serviceResource = ResourceUtils.getResourceList(e, ResourceType.ServiceRequest);
// from ORC
assertThat(serviceResource).hasSize(1);
List<Resource> diagnosticresource = ResourceUtils.getResourceList(e, ResourceType.DiagnosticReport);
// from OBR
assertThat(diagnosticresource).hasSize(1);
// Confirm that there are no extra resources
assertThat(e.size()).isEqualTo(6);
}
Aggregations