use of org.hl7.fhir.r4b.model.Period in project beneficiary-fhir-data by CMSgov.
the class TransformerTestUtils method assertCommonEobInformationInpatientSNF.
/**
* Tests EOB information fields that are common between the Inpatient and SNF claim types.
*
* @param eob the {@link ExplanationOfBenefit} that will be tested by this method
* @param noncoveredStayFromDate NCH_VRFD_NCVRD_STAY_FROM_DT: an {@link Optional}<{@link
* LocalDate}> shared field representing the non-covered stay from date for the claim
* @param noncoveredStayThroughDate NCH_VRFD_NCVRD_STAY_THRU_DT: an {@link Optional}<{@link
* LocalDate}> shared field representing the non-covered stay through date for the claim
* @param coveredCareThroughDate NCH_ACTV_OR_CVRD_LVL_CARE_THRU: an {@link Optional}<{@link
* LocalDate}> shared field representing the covered stay through date for the claim
* @param medicareBenefitsExhaustedDate NCH_BENE_MDCR_BNFTS_EXHTD_DT_I: an {@link
* Optional}<{@link LocalDate}> shared field representing the medicare benefits
* exhausted date for the claim
* @param diagnosisRelatedGroupCd CLM_DRG_CD: an {@link Optional}<{@link String}> shared
* field representing the non-covered stay from date for the claim
*/
static void assertCommonEobInformationInpatientSNF(ExplanationOfBenefit eob, Optional<LocalDate> noncoveredStayFromDate, Optional<LocalDate> noncoveredStayThroughDate, Optional<LocalDate> coveredCareThroughDate, Optional<LocalDate> medicareBenefitsExhaustedDate, Optional<String> diagnosisRelatedGroupCd) {
// noncoveredStayFromDate & noncoveredStayThroughDate
if (noncoveredStayFromDate.isPresent() || noncoveredStayThroughDate.isPresent()) {
SupportingInformationComponent nchVrfdNcvrdStayInfo = TransformerTestUtils.assertHasInfo(CcwCodebookVariable.NCH_VRFD_NCVRD_STAY_FROM_DT, eob);
TransformerTestUtils.assertPeriodEquals(noncoveredStayFromDate, noncoveredStayThroughDate, (Period) nchVrfdNcvrdStayInfo.getTiming());
}
// coveredCareThroughDate
if (coveredCareThroughDate.isPresent()) {
SupportingInformationComponent nchActvOrCvrdLvlCareThruInfo = TransformerTestUtils.assertHasInfo(CcwCodebookVariable.NCH_ACTV_OR_CVRD_LVL_CARE_THRU, eob);
TransformerTestUtils.assertDateEquals(coveredCareThroughDate.get(), (DateTimeType) nchActvOrCvrdLvlCareThruInfo.getTiming());
}
// medicareBenefitsExhaustedDate
if (medicareBenefitsExhaustedDate.isPresent()) {
SupportingInformationComponent nchBeneMdcrBnftsExhtdDtIInfo = TransformerTestUtils.assertHasInfo(CcwCodebookVariable.NCH_BENE_MDCR_BNFTS_EXHTD_DT_I, eob);
TransformerTestUtils.assertDateEquals(medicareBenefitsExhaustedDate.get(), (BaseDateTimeType) nchBeneMdcrBnftsExhtdDtIInfo.getTiming());
}
// diagnosisRelatedGroupCd
assertHasCoding(CcwCodebookVariable.CLM_DRG_CD, diagnosisRelatedGroupCd, eob.getDiagnosisFirstRep().getPackageCode());
}
use of org.hl7.fhir.r4b.model.Period in project beneficiary-fhir-data by CMSgov.
the class SNFClaimTransformerV2Test method shouldHaveAdmissionPeriodSupInfo.
@Test
public void shouldHaveAdmissionPeriodSupInfo() throws Exception {
SupportingInformationComponent sic = TransformerTestUtilsV2.findSupportingInfoByCode("admissionperiod", eob.getSupportingInfo());
SupportingInformationComponent compare = TransformerTestUtilsV2.createSupportingInfo(// We don't care what the sequence number is here
sic.getSequence(), // Category
Arrays.asList(new Coding("http://hl7.org/fhir/us/carin-bb/CodeSystem/C4BBSupportingInfoType", "admissionperiod", "Admission Period")));
// timingPeriod
Period period = new Period();
period.setStart(new SimpleDateFormat("yyy-MM-dd").parse("2013-11-05"), TemporalPrecisionEnum.DAY);
period.setEnd(new SimpleDateFormat("yyy-MM-dd").parse("2013-12-18"), TemporalPrecisionEnum.DAY);
compare.setTiming(period);
assertTrue(compare.equalsDeep(sic));
}
use of org.hl7.fhir.r4b.model.Period in project hl7v2-fhir-converter by LinuxForHealth.
the class Hl7FinancialInsuranceTest method testBasicInsuranceCoverageFields.
// 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
void testBasicInsuranceCoverageFields() throws IOException {
// Tests fields listed below.
String hl7message = "MSH|^~\\&|||||20151008111200||DFT^P03^DFT_P03|MSGID000001|T|2.6|||||||||\n" + "EVN||20210407191342||||||\n" + "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.3.8 to Organization Identifier.period.end
"|IdValue1^^^IdSystem4^IdType5^^20201231145045^20211231145045" + // IN1.4 to Organization Name
"|Large Blue Organization" + // IN1.5 to Organization Address (All XAD standard fields)
"|456 Ultramarine Lane^^Faketown^CA^ZIP5" + // IN1.6.13 to Organization Contact Name .period.end
"|LastFake^FirstFake^MiddleFake^III^Dr.^^L^^^^^20201231145045^20211231145045" + // IN1.7.18 to Organization Contact telecom .rank
"|^WPN^^^^333^4444444^^^^^^20201231145045^20211231145045^^^^1" + // IN1.9.1 (2) to list element Coverage.class.name and value (because IN1.9.10 (2) does not exist)
"|UA34567|NameBlue^^^^^^^^^IDBlue~NameGreen||" + // IN1.35 to Organization.identifier
"|20201231145045|20211231145045|||||||||5|||||||||||||COMPANYPLANCODE35" + // IN1.49 has value to show that it is not used for Patient.identifier because NO relationship (IN1.17/IN2.72 empty)
"|MEMBER36||||||||||Value46|||PatientId49.1||||\n" + // IN2.61 is purposely empty (primary to IN1.36) so IN1.36 will be used as the MB Coverage.identifier
"IN2|||||||||||||||||||||||||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^UNK^^^IdValue69.10||\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();
// From PID.3
assertThat(patient.getIdentifier()).hasSize(1);
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);
// IN1.49 not used
List<Resource> organizations = ResourceUtils.getResourceList(e, ResourceType.Organization);
// From IN1.3 creates Payor, IN2.25 to new PayorId Organization, IN2.69 creates new PolicyHolder Organization Name
assertThat(organizations).hasSize(3);
Organization org = (Organization) organizations.get(0);
// Check Payor Organization Id's
String payorOrgId = org.getId();
// IN1.17.1 (no TENANT) (Id's lowercased)
assertThat(payorOrgId).isEqualTo("Organization/idvalue1");
// IN1.4
assertThat(org.getName()).isEqualTo("Large Blue Organization");
assertThat(org.getIdentifier()).hasSize(2);
Identifier orgIdentifier = org.getIdentifier().get(0);
// IN1.3.1
assertThat(orgIdentifier.getValue()).isEqualTo("IdValue1");
// IN1.3.4
assertThat(orgIdentifier.getSystem()).isEqualTo("urn:id:IdSystem4");
// IN1.3.7
assertThat(orgIdentifier.getPeriod().getStartElement().toString()).containsPattern("2020-12-31T14:50:45");
// IN1.3.8
assertThat(orgIdentifier.getPeriod().getEndElement().toString()).containsPattern("2021-12-31T14:50:45");
// IN1.3.5
DatatypeUtils.checkCommonCodeableConceptAssertions(orgIdentifier.getType(), "IdType5", null, null, null);
Identifier orgIdentifier1 = org.getIdentifier().get(1);
// IN1.35
assertThat(orgIdentifier1.getValue()).isEqualTo("COMPANYPLANCODE35");
// Check Payor Organization address. IN1.4 is a standard XAD address, which is tested exhaustively in other tests.
assertThat(org.getAddress()).hasSize(1);
assertThat(org.getAddress().get(0).getLine().get(0).getValueAsString()).isEqualTo(// IN1.4.1
"456 Ultramarine Lane");
// IN1.4.3
assertThat(org.getAddress().get(0).getCity()).isEqualTo("Faketown");
// IN1.4.4
assertThat(org.getAddress().get(0).getState()).isEqualTo("CA");
// IN1.4.5
assertThat(org.getAddress().get(0).getPostalCode()).isEqualTo("ZIP5");
// Check Payor Organization contact name. IN1.6 name is standard XPN, tested exhaustively in other tests.
HumanName contactName = org.getContact().get(0).getName();
assertThat(org.getContact()).hasSize(1);
// IN1.6.1
assertThat(contactName.getFamily()).isEqualTo("LastFake");
// IN1.6.2
assertThat(contactName.getGiven().get(0).getValueAsString()).isEqualTo("FirstFake");
// IN1.6.3
assertThat(contactName.getGiven().get(1).getValueAsString()).isEqualTo("MiddleFake");
// IN1.6.6
assertThat(contactName.getPrefixAsSingleString()).hasToString("Dr.");
// IN1.6.5
assertThat(contactName.getSuffixAsSingleString()).hasToString("III");
// from IN1.6 aggregate
assertThat(contactName.getText()).isEqualTo("Dr. FirstFake MiddleFake LastFake III");
// IN1.6.7
assertThat(contactName.getUseElement().getCode()).hasToString("official");
// IN1.6.12
assertThat(contactName.getPeriod().getStartElement().toString()).containsPattern("2020-12-31T14:50:45");
// IN1.6.13
assertThat(contactName.getPeriod().getEndElement().toString()).containsPattern("2021-12-31T14:50:45");
// Check there is no purpose. Don't need one, here.
assertThat(org.getContact().get(0).hasPurpose()).isFalse();
// Check Payor Organization contact telecom. IN1.7 is standard XTN, tested exhaustively in other tests.
assertThat(org.getContact().get(0).getTelecom()).hasSize(1);
// telecom is type ContactPoint
ContactPoint contactPoint = org.getContact().get(0).getTelecomFirstRep();
// default type hardcoded.
assertThat(contactPoint.getSystemElement().getCode()).hasToString("phone");
// IN1.7.2 is not mapped (ignored)
assertThat(contactPoint.hasUseElement()).isFalse();
// IN1.7.6, IN1.7.7 via getFormattedTelecomNumberValue
assertThat(contactPoint.getValue()).hasToString("(333) 444 4444");
// IN1.7.13
assertThat(contactPoint.getPeriod().getStartElement().toString()).containsPattern("2020-12-31T14:50:45");
// IN1.7.14
assertThat(contactPoint.getPeriod().getEndElement().toString()).containsPattern("2021-12-31T14:50:45");
// IN1.7.18
assertThat(contactPoint.getRank()).isEqualTo(1);
// Check PayorId Organization from IN2.25
org = (Organization) organizations.get(1);
String payorOrgIdIn25 = org.getId();
// IN1.25.1 (no TENANT) (Id's lowercased)
assertThat(payorOrgIdIn25).isEqualTo("Organization/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 (no TENANT) (Id's lowercased)
assertThat(policyHolderOrgId).isEqualTo("Organization/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 unknown, the 0203 table lookup fails, and the coding has just the code, no system
// IN2.69.7
DatatypeUtils.checkCommonCodeableConceptAssertions(orgIdentifier.getType(), "UNK", null, null, 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 - Order matches order of identifier_X in Coverage.yml
// XV, XV, XV, MB, SN; but not MA (IN2.8) nor MC (IN2.6)
assertThat(coverage.getIdentifier()).hasSize(5);
// IN1.2.1
assertThat(coverage.getIdentifier().get(0).getValue()).isEqualTo("Value1");
// IN1.2.3
assertThat(coverage.getIdentifier().get(0).getSystem()).isEqualTo("urn:id:System3");
// No use, here
assertThat(coverage.getIdentifier().get(0).getUse()).isNull();
DatatypeUtils.checkCommonCodeableConceptAssertions(coverage.getIdentifier().get(0).getType(), "XV", "Health Plan Identifier", "http://terminology.hl7.org/CodeSystem/v2-0203", null);
// IN1.2.4
assertThat(coverage.getIdentifier().get(1).getValue()).isEqualTo("Value4");
// IN1.2.6
assertThat(coverage.getIdentifier().get(1).getSystem()).isEqualTo("urn:id:System6");
// No use, here
assertThat(coverage.getIdentifier().get(1).getUse()).isNull();
DatatypeUtils.checkCommonCodeableConceptAssertions(coverage.getIdentifier().get(1).getType(), "XV", "Health Plan Identifier", "http://terminology.hl7.org/CodeSystem/v2-0203", null);
// IN1.46
assertThat(coverage.getIdentifier().get(2).getValue()).isEqualTo("Value46");
// No system, here
assertThat(coverage.getIdentifier().get(2).getSystem()).isNull();
// Use is enumeration "old"
assertThat(coverage.getIdentifier().get(2).getUseElement().getCode()).hasToString("old");
DatatypeUtils.checkCommonCodeableConceptAssertions(coverage.getIdentifier().get(2).getType(), "XV", "Health Plan Identifier", "http://terminology.hl7.org/CodeSystem/v2-0203", null);
// IN1.36
assertThat(coverage.getIdentifier().get(3).getValue()).isEqualTo("MEMBER36");
// No system, here
assertThat(coverage.getIdentifier().get(3).getSystem()).isNull();
// No use, here
assertThat(coverage.getIdentifier().get(3).getUse()).isNull();
DatatypeUtils.checkCommonCodeableConceptAssertions(coverage.getIdentifier().get(3).getType(), "MB", "Member Number", "http://terminology.hl7.org/CodeSystem/v2-0203", null);
// IN1.36
assertThat(coverage.getIdentifier().get(4).getValue()).isEqualTo("MEMBER36");
// No system, here
assertThat(coverage.getIdentifier().get(4).getSystem()).isNull();
// No use, here
assertThat(coverage.getIdentifier().get(4).getUse()).isNull();
DatatypeUtils.checkCommonCodeableConceptAssertions(coverage.getIdentifier().get(4).getType(), "SN", "Subscriber Number", "http://terminology.hl7.org/CodeSystem/v2-0203", null);
// Confirm SubscriberId
// IN1.36
assertThat(coverage.getSubscriberId()).isEqualTo("MEMBER36");
// Confirm coverage.Order
// IN1.22 takes priority over IN1.1
assertThat(coverage.getOrder()).isEqualTo(5);
// Confirm Coverage Beneficiary references to Patient, and Payor 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);
// Only one Coverage Class expected. (getClass_ is correct name for method)
assertThat(coverage.getClass_()).hasSize(3);
// IN1.8 Only has value
checkCoverageClassExistsWithCorrectValueAndName(coverage.getClass_(), "UA34567", null);
// IN1.9 (1)
checkCoverageClassExistsWithCorrectValueAndName(coverage.getClass_(), "IDBlue", "NameBlue");
// IN1.9 (2) Name is also used for value
checkCoverageClassExistsWithCorrectValueAndName(coverage.getClass_(), "NameGreen", "NameGreen");
// Confirm Coverage period
// IN1.12
assertThat(coverage.getPeriod().getStartElement().toString()).containsPattern("2020-12-31T14:50:45");
// IN1.13
assertThat(coverage.getPeriod().getEndElement().toString()).containsPattern("2021-12-31T14:50:45");
// Expect no RelatedPerson because IN1.17 was empty
List<Resource> relatedPersons = ResourceUtils.getResourceList(e, ResourceType.RelatedPerson);
// IN1.17 empty
assertThat(relatedPersons).isEmpty();
// Confirm there are no unaccounted for resources
// Expected: Coverage, Organization (3x), Patient, Encounter
assertThat(e).hasSize(6);
}
use of org.hl7.fhir.r4b.model.Period in project hl7v2-fhir-converter by LinuxForHealth.
the class Hl7AddressFHIRConversionTest method patient_address_date_ranges_test.
@Test
void patient_address_date_ranges_test() {
String patientAddress = "MSH|^~\\&|MIICEHRApplication|MIIC|MIIC|MIIC|201705130822||VXU^V04^VXU_V04|test1100|P|2.5.1|||AL|AL|||||Z22^CDCPHINVS|^^^^^MIIC^SR^^^MIIC|MIIC\n" + "PID|1||12345678^^^^MR|ALTID|Moose^Mickey^J^III^^^|Mother^Micky|20060504|M|Alias^Alias|2106-3^White^ HL70005|111 1st Street^Suite #1^Minneapolis^MN^11111^USA^H^^AdrC^^^20010101&20081231^^^^Y^Z^V^c/o Pluto19|PatC|^PRN^^^PH^555^5555555|^PRN^^^PH^555^666666|english|married|bhuddist|1234567_account|111-22-3333|||2186-5^not Hispanic or Latino^CDCREC|Born in USA|||USA||||\n";
String patientAddressExplicitEffectiveExpirationDates = "MSH|^~\\&|MIICEHRApplication|MIIC|MIIC|MIIC|201705130822||VXU^V04^VXU_V04|test1100|P|2.5.1|||AL|AL|||||Z22^CDCPHINVS|^^^^^MIIC^SR^^^MIIC|MIIC\n" + "PID|1||12345678^^^^MR|ALTID|Moose^Mickey^J^III^^^|Mother^Micky|20060504|M|Alias^Alias|2106-3^White^ HL70005|111 1st Street^Suite #1^Minneapolis^MN^11111^USA^H^^AdrC^^^20010101&20081231^19920101^19981231^^Y^Z^V^c/o Pluto19|PatC|^PRN^^^PH^555^5555555|^PRN^^^PH^555^666666|english|married|bhuddist|1234567_account|111-22-3333|||2186-5^not Hispanic or Latino^CDCREC|Born in USA|||USA||||\n";
// If address county, ignore patient county
Patient patient = PatientUtils.createPatientFromHl7Segment(ftv, patientAddress);
assertThat(patient.hasAddress()).isTrue();
List<Address> addresses = patient.getAddress();
assertThat(addresses.size()).isEqualTo(1);
Address address = addresses.get(0);
// Test date range
Period period = address.getPeriod();
assertThat(period.hasStart()).isTrue();
assertThat(period.hasEnd()).isTrue();
Date startDate = period.getStart();
Calendar startCalendar = Calendar.getInstance();
startCalendar.setTime(startDate);
assertThat(startCalendar.get(Calendar.YEAR)).isEqualTo(2001);
// Zero based; January is 0
assertThat(startCalendar.get(Calendar.MONTH)).isZero();
assertThat(startCalendar.get(Calendar.DAY_OF_MONTH)).isEqualTo(1);
Date endDate = period.getEnd();
Calendar endCalendar = Calendar.getInstance();
endCalendar.setTime(endDate);
assertThat(endCalendar.get(Calendar.YEAR)).isEqualTo(2008);
// Zero based; December is 11
assertThat(endCalendar.get(Calendar.MONTH)).isEqualTo(11);
assertThat(endCalendar.get(Calendar.DAY_OF_MONTH)).isEqualTo(31);
// Test explicit date start (effective) and end (expiration)
patient = PatientUtils.createPatientFromHl7Segment(ftv, patientAddressExplicitEffectiveExpirationDates);
assertThat(patient.hasAddress()).isTrue();
addresses = patient.getAddress();
assertThat(addresses.size()).isEqualTo(1);
address = addresses.get(0);
period = address.getPeriod();
assertThat(period.hasStart()).isTrue();
assertThat(period.hasEnd()).isTrue();
startDate = period.getStart();
startCalendar = Calendar.getInstance();
startCalendar.setTime(startDate);
assertThat(startCalendar.get(Calendar.YEAR)).isEqualTo(1992);
// Zero based; January is 0
assertThat(startCalendar.get(Calendar.MONTH)).isZero();
assertThat(startCalendar.get(Calendar.DAY_OF_MONTH)).isEqualTo(1);
endDate = period.getEnd();
endCalendar = Calendar.getInstance();
endCalendar.setTime(endDate);
assertThat(endCalendar.get(Calendar.YEAR)).isEqualTo(1998);
// Zero based; December is 11
assertThat(endCalendar.get(Calendar.MONTH)).isEqualTo(11);
assertThat(endCalendar.get(Calendar.DAY_OF_MONTH)).isEqualTo(31);
}
use of org.hl7.fhir.r4b.model.Period in project hl7v2-fhir-converter by LinuxForHealth.
the class HL7EventTypeFHIRConversionTest method validate_evn_segment_no_period_override.
@Test
void validate_evn_segment_no_period_override() {
String hl7message = "MSH|^~\\&|||||||ADT^A01^ADT_A01|64322|P|2.6|123|456|ER|AL|USA|ASCII|en|2.6||||||\r" + // + "EVN||||7525||20210319134735|\r" // TODO, not working with this value
"EVN||||O||20210319134735|\r" + "PV1|1|I||R|||||||||R|1||||||||||||||||||||||||||||||200603150624|200603150625|||||||";
String json = ftv.convert(hl7message, OPTIONS);
assertThat(json).isNotBlank();
FHIRContext context = new FHIRContext();
IBaseResource bundleResource = context.getParser().parseResource(json);
assertThat(bundleResource).isNotNull();
Bundle b = (Bundle) bundleResource;
List<BundleEntryComponent> e = b.getEntry();
// Find the encounter from the FHIR bundle.
List<Resource> encounterResource = e.stream().filter(v -> ResourceType.Encounter == v.getResource().getResourceType()).map(BundleEntryComponent::getResource).collect(Collectors.toList());
assertThat(encounterResource).hasSize(1);
Encounter encounter = (Encounter) encounterResource.get(0);
// ENV.4 is used for reasonCode
List<CodeableConcept> reasonCodes = encounter.getReasonCode();
assertEquals(1, reasonCodes.size());
CodeableConcept encounterReason = encounter.getReasonCodeFirstRep();
Coding encounterReasonCoding = encounterReason.getCodingFirstRep();
// assertThat(encounterReasonCoding.getCode()).isEqualTo("7525"); // TODO, should be able to use user-defined values
assertThat(encounterReasonCoding.getCode()).isEqualTo("O");
// EVN.6 is used for start period if there is no PV1.44 but since we have a
// PV1.44 it should use that not EVN.6
Base period = encounter.getNamedProperty("period").getValues().get(0);
String startPeriod = period.getNamedProperty("start").getValues().get(0).toString();
// And use PV1.45 for end period.
String endPeriod = period.getNamedProperty("end").getValues().get(0).toString();
assertThat(startPeriod).isEqualTo("DateTimeType[2006-03-15T06:24:00+08:00]");
assertThat(endPeriod).isEqualTo("DateTimeType[2006-03-15T06:25:00+08:00]");
}
Aggregations