use of org.hl7.fhir.r4.model.Enumeration in project gpconnect-demonstrator by nhsconnect.
the class AppointmentValidation method validateParticipantStatus.
public void validateParticipantStatus(ParticipationStatus participationStatus, Enumeration<ParticipationStatus> enumeration, Enumeration<ParticipationStatus> enumeration2) {
Boolean validStatus = false;
String participantStatusErr = "is a requirement but is missing.";
if (participationStatus != null) {
participantStatusErr = String.format("%s is not a valid ParticipationStatus code", participationStatus);
EnumSet<ParticipationStatus> statusList = EnumSet.allOf(ParticipationStatus.class);
validStatus = statusList.contains(enumeration.getValue());
}
if (!validStatus) {
throw OperationOutcomeFactory.buildOperationOutcomeException(new UnprocessableEntityException(String.format("Appointment Participant %s Status %s", enumeration2, participantStatusErr)), SystemCode.INVALID_RESOURCE, IssueType.INVALID);
}
}
use of org.hl7.fhir.r4.model.Enumeration in project kindling by HL7.
the class UMLWriter method writeEnumeration.
private static JsonObject writeEnumeration(UMLEnumeration t) {
JsonObject json = writeEntity(t);
json.addProperty("class", "Enumeration");
JsonArray arr = new JsonArray();
for (UMLEnumerationCode c : t.getCodes()) {
arr.add(writeEntity(c));
}
return json;
}
use of org.hl7.fhir.r4.model.Enumeration 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.r4.model.Enumeration in project hl7v2-fhir-converter by LinuxForHealth.
the class Hl7FinancialInsuranceTest method testInsuranceCoverageByRelatedFields.
// 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")
@ParameterizedTest
// The breadth of this test is sufficent for multiple message type coverage, so other tests are not parameterized.
@ValueSource(strings = { "DFT^P03^DFT_P03", "VXU^V04^VXU_V04", "ADT^A01^ADT_A01", "ADT^A03^ADT_A03", // ADT^A04 uses structure ADT_A01
"ADT^A04^ADT_A01", // ADT^A08 uses structure ADT_A01
"ADT^A08^ADT_A01", // ADT^A28 uses structure ADT_A05
"ADT^A28^ADT_A05", // ADT^A31 uses structure ADT_A05
"ADT^A31^ADT_A05" })
// Also test IN2.2 Social Security number
void testInsuranceCoverageByRelatedFields(String messageType) throws IOException {
String hl7message = "MSH|^~\\&|||||20151008111200||" + messageType + "|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.5 to 15 NOT REFERENCED (See test testBasicInsuranceCoverageFields)
"|IdValue1^^^IdSystem4^^^^|Large Blue Organization|||||||||||" + // IN1.23 through IN1.35 NOT REFERENCED
"|DoeFake^Judy^^^Rev.|PAR|19780429|19 Rose St^^Faketown^CA^ZIP5||||||||||||||||" + // IN1.50 through IN1.53 NOT REFERENCED
"|MEMBER36|||||||F|||Value46|||J494949^^^Large HMO^XX||||\n" + // IN2.9 through IN2.60 not used
"IN2||777-88-9999||||MEDICARE06||MEDICAID08|| |||||||||| ||||||||||| |||||||||| |||||||||| ||||||||||" + // IN2.63.18 to Organization Contact telecom .rank
"MEMBER61||^^^^^555^7677777^^^^^^20201231145045^20211231145045^^^^1|";
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, IN1.49, IN2.6, IN2.8
assertThat(patient.getIdentifier()).hasSize(4);
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.49.1
assertThat(patientIdentifier.getValue()).isEqualTo("J494949");
// IN1.49.4
assertThat(patientIdentifier.getSystem()).isEqualTo("urn:id:Large_HMO");
DatatypeUtils.checkCommonCodeableConceptAssertions(patientIdentifier.getType(), "XX", null, "http://terminology.hl7.org/CodeSystem/v2-0203", // IN1.49.5
null);
patientIdentifier = patient.getIdentifier().get(2);
// IN2.8
assertThat(patientIdentifier.getValue()).isEqualTo("MEDICAID08");
// No system for IN2.8
assertThat(patientIdentifier.hasSystem()).isFalse();
DatatypeUtils.checkCommonCodeableConceptAssertions(patientIdentifier.getType(), "MA", "Patient Medicaid number", "http://terminology.hl7.org/CodeSystem/v2-0203", null);
patientIdentifier = patient.getIdentifier().get(3);
// IN2.6
assertThat(patientIdentifier.getValue()).isEqualTo("MEDICARE06");
// No system for IN2.6
assertThat(patientIdentifier.hasSystem()).isFalse();
DatatypeUtils.checkCommonCodeableConceptAssertions(patientIdentifier.getType(), "MC", "Patient's Medicare number", "http://terminology.hl7.org/CodeSystem/v2-0203", null);
List<Resource> organizations = ResourceUtils.getResourceList(e, ResourceType.Organization);
// From Payor created by IN1
assertThat(organizations).hasSize(1);
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, MA, MC, SN
assertThat(coverage.getIdentifier()).hasSize(7);
// 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);
// IN2.61 takes priority over IN1.36
assertThat(coverage.getIdentifier().get(3).getValue()).isEqualTo("MEMBER61");
// 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);
// IN2.8
assertThat(coverage.getIdentifier().get(4).getValue()).isEqualTo("MEDICAID08");
// 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(), "MA", "Patient Medicaid number", "http://terminology.hl7.org/CodeSystem/v2-0203", null);
// IN2.6
assertThat(coverage.getIdentifier().get(5).getValue()).isEqualTo("MEDICARE06");
// No system, here
assertThat(coverage.getIdentifier().get(5).getSystem()).isNull();
// No use, here
assertThat(coverage.getIdentifier().get(5).getUse()).isNull();
DatatypeUtils.checkCommonCodeableConceptAssertions(coverage.getIdentifier().get(5).getType(), "MC", "Patient's Medicare number", "http://terminology.hl7.org/CodeSystem/v2-0203", null);
// IN1.36
assertThat(coverage.getIdentifier().get(6).getValue()).isEqualTo("MEMBER36");
// No system, here
assertThat(coverage.getIdentifier().get(6).getSystem()).isNull();
// No use, here
assertThat(coverage.getIdentifier().get(6).getUse()).isNull();
DatatypeUtils.checkCommonCodeableConceptAssertions(coverage.getIdentifier().get(6).getType(), "SN", "Subscriber Number", "http://terminology.hl7.org/CodeSystem/v2-0203", null);
// 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 one RelatedPerson
List<Resource> relatedPersons = ResourceUtils.getResourceList(e, ResourceType.RelatedPerson);
// From IN1.16 through IN1.19; IN1.43; INI.49
assertThat(relatedPersons).hasSize(1);
RelatedPerson related = (RelatedPerson) relatedPersons.get(0);
// Check RelatedPerson identifiers
assertThat(related.getIdentifier()).hasSize(2);
// IN1.49.1
assertThat(related.getIdentifier().get(0).getValue()).isEqualTo("J494949");
// IN1.49.4
assertThat(related.getIdentifier().get(0).getSystem()).isEqualTo("urn:id:Large_HMO");
// IN1.49.5
DatatypeUtils.checkCommonCodeableConceptAssertions(// IN1.49.5
related.getIdentifier().get(0).getType(), // IN1.49.5
"XX", // Display value looked up from code 'XX'
"Organization identifier", "http://terminology.hl7.org/CodeSystem/v2-0203", null);
// IN2.2
assertThat(related.getIdentifier().get(1).getValue()).isEqualTo("777-88-9999");
// No system to assign
assertThat(related.getIdentifier().get(1).hasSystem()).isFalse();
DatatypeUtils.checkCommonCodeableConceptAssertions(related.getIdentifier().get(1).getType(), "SS", "Social Security number", "http://terminology.hl7.org/CodeSystem/v2-0203", null);
// Check RelatedPerson name. IN1.16 name is standard XPN, tested exhaustively in other tests.
assertThat(related.getName()).hasSize(1);
HumanName relatedName = related.getName().get(0);
// IN1.16.1
assertThat(relatedName.getFamily()).isEqualTo("DoeFake");
// IN1.16.2
assertThat(relatedName.getGiven().get(0).getValueAsString()).isEqualTo("Judy");
// IN1.16.6
assertThat(relatedName.getPrefixAsSingleString()).hasToString("Rev.");
// from IN1.16 aggregate
assertThat(relatedName.getText()).isEqualTo("Rev. Judy DoeFake");
// Check RelatedPerson birth and gender
// IN1.18
assertThat(related.getBirthDateElement().toString()).containsPattern("1978-04-29");
Enumerations.AdministrativeGender gen = related.getGender();
// IN1.43
assertThat(gen).isNotNull().isEqualTo(Enumerations.AdministrativeGender.FEMALE);
// Check the RelatedPerson address. IN1.19 is a standard XAD address, which is tested exhaustively in other tests.
assertThat(related.getAddress()).hasSize(1);
assertThat(related.getAddress().get(0).getLine().get(0).getValueAsString()).isEqualTo(// IN1.19.1
"19 Rose St");
// IN1.19.3
assertThat(related.getAddress().get(0).getCity()).isEqualTo("Faketown");
// IN1.19.4
assertThat(related.getAddress().get(0).getState()).isEqualTo("CA");
// IN1.19.5
assertThat(related.getAddress().get(0).getPostalCode()).isEqualTo("ZIP5");
// Check RelatedPerson telecom. IN2.63 is standard XTN, tested exhaustively in other tests.
// telecom is type ContactPoint
ContactPoint contactPoint = related.getTelecomFirstRep();
// default type hardcoded.
assertThat(contactPoint.getSystemElement().getCode()).hasToString("phone");
// Hard-coded to home. IN2.63.2 is not mapped (ignored).
assertThat(contactPoint.getUseElement().getCode()).isEqualTo("home");
// Hard-coded to home. IN2.63.2 is not mapped (ignored).
;
// IN2.63.6, IN2.63.7 via getFormattedTelecomNumberValue
assertThat(contactPoint.getValue()).hasToString("(555) 767 7777");
// IN2.63.13
assertThat(contactPoint.getPeriod().getStartElement().toString()).containsPattern("2020-12-31T14:50:45");
// IN2.63.14
assertThat(contactPoint.getPeriod().getEndElement().toString()).containsPattern("2021-12-31T14:50:45");
// IN2.63.18
assertThat(contactPoint.getRank()).isEqualTo(1);
// Check coverage relationship
DatatypeUtils.checkCommonCodeableConceptAssertions(coverage.getRelationship(), "child", "Child", "http://terminology.hl7.org/CodeSystem/subscriber-relationship", // IN1.17
null);
// Check relatedPerson relationship
assertThat(related.getRelationship()).hasSize(1);
DatatypeUtils.checkCommonCodeableConceptAssertions(related.getRelationship().get(0), "PRN", "parent", "http://terminology.hl7.org/CodeSystem/v3-RoleCode", // IN1.17
null);
// Confirm the Coverage (subscriber) references the RelatedPerson
assertThat(coverage.getSubscriber().getReference()).isEqualTo(related.getId());
// Confirm the RelatedPerson references the Patient
assertThat(related.getPatient().getReference()).isEqualTo(patientId);
// Confirm coverage.Order
// IN1.1 backup for missing IN1.22
assertThat(coverage.getOrder()).isEqualTo(1);
// Confirm there are no unaccounted for resources
// Expected: Coverage, Organization, Patient, Encounter, RelatedPerson
assertThat(e).hasSize(5);
}
use of org.hl7.fhir.r4.model.Enumeration in project cqf-ruler by DBCG.
the class ProcessMessageProvider method processMessageBundle.
@Operation(name = "$process-message-bundle", idempotent = false)
public Bundle processMessageBundle(HttpServletRequest theServletRequest, RequestDetails theRequestDetails, @OperationParam(name = "content", min = 1, max = 1) @Description(formalDefinition = "The message to process (or, if using asynchronous messaging, it may be a response message to accept)") Bundle theMessageToProcess) {
logger.info("Validating the Bundle");
Bundle bundle = theMessageToProcess;
Boolean errorExists = false;
OperationOutcome outcome = validateBundle(errorExists, bundle);
if (!errorExists) {
IVersionSpecificBundleFactory bundleFactory = this.getFhirContext().newBundleFactory();
bundle.setId(getUUID());
bundleFactory.initializeWithBundleResource(bundle);
Bundle dafBundle = (Bundle) bundleFactory.getResourceBundle();
dafBundle.setTimestamp(new Date());
this.getDaoRegistry().getResourceDao(Bundle.class).create(dafBundle);
MessageHeader messageHeader = null;
String patientId = null;
String commId = null;
List<MessageHeader> headers = BundleUtil.toListOfResourcesOfType(this.getFhirContext(), bundle, MessageHeader.class);
for (MessageHeader mh : headers) {
messageHeader = mh;
messageHeader.setId(getUUID());
Meta meta = messageHeader.getMeta();
meta.setLastUpdated(new Date());
messageHeader.setMeta(meta);
}
List<IBaseResource> resources = new ArrayList<>();
List<Patient> patients = BundleUtil.toListOfResourcesOfType(this.getFhirContext(), bundle, Patient.class);
for (Patient p : patients) {
patientId = p.getId();
p.setId(p.getIdElement().toVersionless());
resources.add(p);
}
List<Bundle> bundles = BundleUtil.toListOfResourcesOfType(this.getFhirContext(), bundle, Bundle.class);
for (Bundle b : bundles) {
patientId = this.processBundle(b, theRequestDetails);
b.setId(b.getIdElement().toVersionless());
resources.add(b);
}
for (BundleEntryComponent e : bundle.getEntry()) {
Resource r = e.getResource();
if (r == null) {
continue;
}
if (r.fhirType().equals("Bundle") || r.fhirType().equals("MessageHeader") || r.fhirType().equals("Patient")) {
continue;
}
r.setId(r.getIdElement().toVersionless());
resources.add(r);
}
if (patientId != null) {
commId = constructAndSaveCommunication(patientId);
}
if (messageHeader == null) {
messageHeader = constructMessageHeaderResource();
BundleEntryComponent entryComp = new BundleEntryComponent();
entryComp.setResource(messageHeader);
dafBundle.addEntry(entryComp);
}
if (commId != null) {
List<Reference> referenceList = new ArrayList<>();
Reference commRef = new Reference();
commRef.setReference("Communication/" + commId);
referenceList.add(commRef);
messageHeader.setFocus(referenceList);
}
IVersionSpecificBundleFactory newBundleFactory = this.getFhirContext().newBundleFactory();
newBundleFactory.addResourcesToBundle(resources, BundleTypeEnum.TRANSACTION, theRequestDetails.getFhirServerBase(), null, null);
Bundle transactionBundle = (Bundle) newBundleFactory.getResourceBundle();
for (BundleEntryComponent entry : transactionBundle.getEntry()) {
UriType uri = new UriType(theRequestDetails.getFhirServerBase() + "/" + entry.getResource().fhirType() + "/" + entry.getResource().getIdElement().getIdPart());
Enumeration<HTTPVerb> method = new Enumeration<>(new HTTPVerbEnumFactory());
method.setValue(HTTPVerb.PUT);
entry.setRequest(new BundleEntryRequestComponent(method, uri));
}
@SuppressWarnings("unchecked") IFhirSystemDao<Bundle, Meta> fhirSystemDao = this.getDaoRegistry().getSystemDao();
fhirSystemDao.transaction(theRequestDetails, transactionBundle);
return dafBundle;
} else {
BundleEntryComponent entryComp = new BundleEntryComponent();
entryComp.setResource(outcome);
bundle.addEntry(entryComp);
return bundle;
}
}
Aggregations