use of net.ihe.gazelle.hl7v3.datatypes.II in project MobileAccessGateway by i4mi.
the class Iti78RequestConverter method iti78ToIti47Converter.
public String iti78ToIti47Converter(@Header("FhirRequestParameters") Iti78SearchParameters parameters) throws JAXBException {
PRPAIN201305UV02Type resultMsg = new PRPAIN201305UV02Type();
resultMsg.setITSVersion("XML_1.0");
resultMsg.setId(new II(config.getPixQueryOid(), uniqueId()));
// Now
resultMsg.setCreationTime(new TS(Timestamp.now().toHL7()));
resultMsg.setProcessingCode(new CS("T", null, null));
resultMsg.setProcessingModeCode(new CS("T", null, null));
resultMsg.setInteractionId(new II("2.16.840.1.113883.1.6", "PRPA_IN201305UV02"));
resultMsg.setAcceptAckCode(new CS("AL", null, null));
MCCIMT000100UV01Receiver receiver = new MCCIMT000100UV01Receiver();
resultMsg.addReceiver(receiver);
receiver.setTypeCode(CommunicationFunctionType.RCV);
MCCIMT000100UV01Device receiverDevice = new MCCIMT000100UV01Device();
receiver.setDevice(receiverDevice);
receiverDevice.setClassCode(EntityClassDevice.DEV);
receiverDevice.setDeterminerCode(EntityDeterminer.INSTANCE);
receiverDevice.setId(Collections.singletonList(new II(config.getPixReceiverOid(), null)));
MCCIMT000100UV01Sender sender = new MCCIMT000100UV01Sender();
resultMsg.setSender(sender);
sender.setTypeCode(CommunicationFunctionType.SND);
MCCIMT000100UV01Device senderDevice = new MCCIMT000100UV01Device();
sender.setDevice(senderDevice);
senderDevice.setClassCode(EntityClassDevice.DEV);
senderDevice.setDeterminerCode(EntityDeterminer.INSTANCE);
senderDevice.setId(Collections.singletonList(new II(config.getPixMySenderOid(), null)));
PRPAIN201305UV02QUQIMT021001UV01ControlActProcess controlActProcess = new PRPAIN201305UV02QUQIMT021001UV01ControlActProcess();
resultMsg.setControlActProcess(controlActProcess);
controlActProcess.setClassCode(ActClassControlAct.CACT);
controlActProcess.setMoodCode(XActMoodIntentEvent.EVN);
controlActProcess.setCode(new CD("PRPA_TE201305UV02", "2.16.840.1.113883.1.6", null));
PRPAMT201306UV02QueryByParameter queryByParameter = new PRPAMT201306UV02QueryByParameter();
controlActProcess.setQueryByParameter(queryByParameter);
queryByParameter.setQueryId(new II(config.getPixQueryOid(), uniqueId()));
queryByParameter.setStatusCode(new CS("new", null, null));
queryByParameter.setResponsePriorityCode(new CS("I", null, null));
queryByParameter.setResponseModalityCode(new CS("R", null, null));
PRPAMT201306UV02ParameterList parameterList = new PRPAMT201306UV02ParameterList();
queryByParameter.setParameterList(parameterList);
TokenParam id = parameters.get_id();
if (id != null) {
String v = id.getValue();
int idx = v.indexOf("-");
if (idx > 0) {
PRPAMT201306UV02LivingSubjectId livingSubjectId = new PRPAMT201306UV02LivingSubjectId();
livingSubjectId.addValue(new II(v.substring(0, idx), v.substring(idx + 1)));
livingSubjectId.setSemanticsText(ST("LivingSubject.id"));
parameterList.addLivingSubjectId(livingSubjectId);
}
}
// active -> patientStatusCode
TokenParam active = parameters.getActive();
if (active != null) {
String activeCode = "active";
PRPAMT201306UV02PatientStatusCode patientStatusCode = new PRPAMT201306UV02PatientStatusCode();
patientStatusCode.setValue(new CS(activeCode, null, null));
parameterList.addPatientStatusCode(patientStatusCode);
}
// patientAddress
StringParam postalCode = parameters.getPostalCode();
StringParam state = parameters.getState();
StringParam city = parameters.getCity();
StringParam country = parameters.getCountry();
StringParam address = parameters.getAddress();
if (postalCode != null || state != null || city != null || country != null || address != null) {
PRPAMT201306UV02PatientAddress patientAddress = new PRPAMT201306UV02PatientAddress();
AD ad = new AD();
if (postalCode != null)
ad.addPostalCode(element(AdxpPostalCode.class, postalCode.getValue()));
if (state != null)
ad.addState(element(AdxpState.class, state.getValue()));
if (city != null)
ad.addCity(element(AdxpCity.class, city.getValue()));
if (country != null)
ad.addCountry(element(AdxpCountry.class, country.getValue()));
// TODO How to support address filter?
patientAddress.addValue(ad);
patientAddress.setSemanticsText(ST("Patient.addr"));
parameterList.addPatientAddress(patientAddress);
}
// livingSubjectBirthTime
DateAndListParam birthdate = parameters.getBirthDate();
if (birthdate != null) {
IVLTS ivlts = new IVLTS();
for (DateOrListParam birthdateOr : birthdate.getValuesAsQueryTokens()) {
for (DateParam birthdateParam : birthdateOr.getValuesAsQueryTokens()) {
Date lDate = null;
Date hDate = null;
TemporalPrecisionEnum precision = birthdateParam.getPrecision();
ParamPrefixEnum prefix = birthdateParam.getPrefix();
if (prefix == null)
prefix = ParamPrefixEnum.EQUAL;
Calendar cal = Calendar.getInstance();
cal.setTime(birthdateParam.getValue());
switch(precision) {
case SECOND:
cal.set(Calendar.MILLISECOND, 0);
lDate = cal.getTime();
cal.set(Calendar.MILLISECOND, 1000);
hDate = cal.getTime();
break;
case MINUTE:
cal.set(Calendar.MILLISECOND, 0);
cal.set(Calendar.SECOND, 0);
lDate = cal.getTime();
cal.add(Calendar.MINUTE, 1);
hDate = cal.getTime();
break;
case DAY:
cal.set(Calendar.MILLISECOND, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.HOUR_OF_DAY, 0);
lDate = cal.getTime();
cal.add(Calendar.DAY_OF_MONTH, 1);
hDate = cal.getTime();
break;
case MONTH:
int month = cal.get(Calendar.MONTH);
int year = cal.get(Calendar.YEAR);
cal.set(year, month, 1, 0, 0, 0);
lDate = cal.getTime();
cal.add(Calendar.MONTH, 1);
hDate = cal.getTime();
break;
case YEAR:
year = cal.get(Calendar.YEAR);
cal.set(year, 0, 1, 0, 0, 0);
lDate = cal.getTime();
cal.add(Calendar.YEAR, 1);
hDate = cal.getTime();
break;
case MILLI:
default:
lDate = cal.getTime();
cal.add(Calendar.MILLISECOND, 1);
hDate = cal.getTime();
break;
}
switch(prefix) {
case GREATERTHAN:
ivlts.setLow(transformTest(hDate));
break;
case LESSTHAN:
ivlts.setHigh(transformTest(lDate));
break;
case GREATERTHAN_OR_EQUALS:
ivlts.setLow(transformTest(lDate));
break;
case LESSTHAN_OR_EQUALS:
ivlts.setHigh(transformTest(hDate));
break;
case STARTS_AFTER:
ivlts.setLow(transformTest(hDate));
break;
case ENDS_BEFORE:
ivlts.setHigh(transformTest(lDate));
break;
case EQUAL:
case APPROXIMATE:
ivlts.setLow(transformTest(lDate));
ivlts.setHigh(transformTest(hDate));
ivlts.setCenter(transform(lDate));
break;
//
default:
throw new InvalidRequestException("Date operation not supported.");
}
}
}
PRPAMT201306UV02LivingSubjectBirthTime livingSubjectBirthTime = new PRPAMT201306UV02LivingSubjectBirthTime();
livingSubjectBirthTime.addValue(ivlts);
livingSubjectBirthTime.setSemanticsText(ST("LivingSubject.birthTime"));
parameterList.addLivingSubjectBirthTime(livingSubjectBirthTime);
}
// given, family -> livingSubjectName
StringAndListParam given = parameters.getGiven();
StringAndListParam family = parameters.getFamily();
StringParam givenElem = given != null ? given.getValuesAsQueryTokens().get(0).getValuesAsQueryTokens().get(0) : null;
StringParam familyElem = family != null ? family.getValuesAsQueryTokens().get(0).getValuesAsQueryTokens().get(0) : null;
if (givenElem != null || familyElem != null) {
PRPAMT201306UV02LivingSubjectName livingSubjectName = new PRPAMT201306UV02LivingSubjectName();
livingSubjectName.setSemanticsText(ST("Patient.name"));
EN name = new EN();
if (familyElem != null) {
name.addFamily(element(EnFamily.class, familyElem.getValue()));
if (!familyElem.isExact())
name.setUse("SRCH");
}
if (givenElem != null) {
name.addGiven(element(EnGiven.class, givenElem.getValue()));
if (!givenElem.isExact())
name.setUse("SRCH");
}
livingSubjectName.addValue(name);
livingSubjectName.setSemanticsText(ST("LivingSubject.name"));
parameterList.addLivingSubjectName(livingSubjectName);
}
// gender -> livingSubjectAdministrativeGender
TokenParam gender = parameters.getGender();
if (gender != null) {
PRPAMT201306UV02LivingSubjectAdministrativeGender livingSubjectAdministrativeGender = new PRPAMT201306UV02LivingSubjectAdministrativeGender();
switch(gender.getValue().toUpperCase()) {
case "MALE":
livingSubjectAdministrativeGender.addValue(new CE("M", "Male", "2.16.840.1.113883.12.1"));
break;
case "FEMALE":
livingSubjectAdministrativeGender.addValue(new CE("F", "Female", "2.16.840.1.113883.12.1"));
break;
case "OTHER":
livingSubjectAdministrativeGender.addValue(new CE("A", "Ambiguous", "2.16.840.1.113883.12.1"));
break;
case "UNKNOWN":
livingSubjectAdministrativeGender.addValue(new CE("U", "Unknown", "2.16.840.1.113883.12.1"));
break;
default:
throw new InvalidRequestException("Unknown gender query parameter value");
}
livingSubjectAdministrativeGender.setSemanticsText(ST("LivingSubject.administrativeGender"));
parameterList.addLivingSubjectAdministrativeGender(livingSubjectAdministrativeGender);
}
// identifiers -> livingSubjectId or otherIDsScopingOrganization
TokenAndListParam identifiers = parameters.getIdentifiers();
if (identifiers != null) {
for (TokenOrListParam idOr : identifiers.getValuesAsQueryTokens()) {
for (TokenParam identifier : idOr.getValuesAsQueryTokens()) {
if (identifier.getValue() == null || identifier.getValue().length() == 0) {
PRPAMT201306UV02OtherIDsScopingOrganization otherIDsScopingOrganization = new PRPAMT201306UV02OtherIDsScopingOrganization();
otherIDsScopingOrganization.addValue(new II(getScheme(identifier.getSystem()), null));
otherIDsScopingOrganization.setSemanticsText(ST("OtherIDs.scopingOrganization.id"));
parameterList.addOtherIDsScopingOrganization(otherIDsScopingOrganization);
} else {
PRPAMT201306UV02LivingSubjectId livingSubjectId = new PRPAMT201306UV02LivingSubjectId();
livingSubjectId.addValue(new II(getScheme(identifier.getSystem()), identifier.getValue()));
livingSubjectId.setSemanticsText(ST("LivingSubject.id"));
parameterList.addLivingSubjectId(livingSubjectId);
}
}
}
}
// mothersMaidenName -> mothersMaidenName
StringParam mmn = parameters.getMothersMaidenName();
if (mmn != null) {
PRPAMT201306UV02MothersMaidenName mothersMaidenName = new PRPAMT201306UV02MothersMaidenName();
PN mothersMaidenNamePN = new PN();
mothersMaidenNamePN.addGiven(element(EnGiven.class, mmn.getValue()));
mothersMaidenName.addValue(mothersMaidenNamePN);
mothersMaidenName.setSemanticsText(ST("Person.MothersMaidenName"));
parameterList.addMothersMaidenName(mothersMaidenName);
}
// telecom -> patientTelecom
StringParam telecom = parameters.getTelecom();
if (telecom != null) {
PRPAMT201306UV02PatientTelecom patientTelecom = new PRPAMT201306UV02PatientTelecom();
TEL tel = new TEL();
tel.setValue(telecom.getValue());
patientTelecom.addValue(tel);
parameterList.addPatientTelecom(patientTelecom);
}
ByteArrayOutputStream out = new ByteArrayOutputStream();
HL7V3Transformer.marshallMessage(PRPAIN201305UV02Type.class, out, resultMsg);
String outArray = new String(out.toByteArray());
return outArray;
}
use of net.ihe.gazelle.hl7v3.datatypes.II in project MobileAccessGateway by i4mi.
the class Iti78ResponseConverter method translateToFhir.
public List<Patient> translateToFhir(byte[] input, Map<String, Object> parameters) {
try {
// FIX for xmlns:xmlns
String content = new String(input);
content = content.replace("xmlns:xmlns", "xmlns:xxxxx");
List<Patient> response = new ArrayList<Patient>();
PRPAIN201306UV02Type msg = HL7V3Transformer.unmarshallMessage(PRPAIN201306UV02Type.class, new ByteArrayInputStream(content.getBytes()));
PRPAIN201306UV02MFMIMT700711UV01ControlActProcess controlAct = msg.getControlActProcess();
List<MCCIMT000300UV01Acknowledgement> acks = msg.getAcknowledgement();
String errtext = "";
for (MCCIMT000300UV01Acknowledgement ack : acks) {
for (MCCIMT000300UV01AcknowledgementDetail ackDetail : ack.getAcknowledgementDetail()) {
if (ackDetail.getText() != null)
errtext += toText(ackDetail.getText());
}
}
// OK NF AE
String queryResponseCode = controlAct.getQueryAck().getQueryResponseCode().getCode();
if ("NF".equals(queryResponseCode)) {
// NF (data found, no errors) is returned in QueryAck.queryResponseCode (control act wrapper)
// throw new ResourceNotFoundException("sourceIdentifier Patient Identifier not found", error(IssueType.NOTFOUND, errtext.length()>0 ? errtext : "sourceIdentifier Patient Identifier not found"));
}
if ("AE".equals(queryResponseCode)) {
throw new InvalidRequestException("sourceIdentifier Assigning Authority not found", error(IssueType.INVALID, errtext.length() > 0 ? errtext : "sourceIdentifier Assigning Authority not found"));
}
List<PRPAIN201306UV02MFMIMT700711UV01Subject1> subjects = controlAct.getSubject();
for (PRPAIN201306UV02MFMIMT700711UV01Subject1 subject : subjects) {
PRPAIN201306UV02MFMIMT700711UV01RegistrationEvent registrationEvent = subject.getRegistrationEvent();
PRPAIN201306UV02MFMIMT700711UV01Subject2 subject1 = registrationEvent.getSubject1();
PRPAMT201310UV02Patient patient = subject1.getPatient();
PRPAMT201310UV02Person patientPerson = patient.getPatientPerson();
if (patient.getId().isEmpty())
continue;
Patient result = new Patient();
boolean idadded = false;
for (II patientId : patient.getId()) {
result.addIdentifier().setSystem(getSystem(patientId.getRoot())).setValue(patientId.getExtension());
if (!idadded) {
result.setId(patientRefCreator.createPatientId(patientId.getRoot(), patientId.getExtension()));
idadded = true;
}
}
for (PRPAMT201310UV02OtherIDs otherIds : patient.getPatientPerson().getAsOtherIDs()) {
for (II patientId : otherIds.getId()) {
result.addIdentifier().setSystem(getSystem(patientId.getRoot())).setValue(patientId.getExtension());
}
}
CS statusCode = patient.getStatusCode();
if (statusCode != null && "active".equals(statusCode.getCode()))
result.setActive(true);
for (PN name : patientPerson.getName()) {
HumanName humanName = new HumanName();
for (EnFamily family : name.getFamily()) {
if ("BR".equals(family.getQualifier())) {
humanName.setUse(NameUse.MAIDEN);
}
humanName.setFamily(val(family));
}
for (EnGiven given : name.getGiven()) {
withQualifier(given, humanName.addGivenElement());
}
for (EnPrefix prefix : name.getPrefix()) {
withQualifier(prefix, humanName.addPrefixElement());
}
for (EnSuffix suffix : name.getSuffix()) {
withQualifier(suffix, humanName.addSuffixElement());
}
if (name.getValidTime() != null)
humanName.setPeriod(transform(name.getValidTime()));
result.addName(humanName);
}
CE gender = patientPerson.getAdministrativeGenderCode();
if (gender != null) {
switch(gender.getCode()) {
case "M":
result.setGender(AdministrativeGender.MALE);
break;
case "F":
result.setGender(AdministrativeGender.FEMALE);
break;
case "A":
result.setGender(AdministrativeGender.OTHER);
break;
case "U":
result.setGender(AdministrativeGender.UNKNOWN);
break;
}
}
TS birthTime = patientPerson.getBirthTime();
if (birthTime != null) {
result.setBirthDateElement(transform(birthTime));
}
for (AD ad : patientPerson.getAddr()) {
result.addAddress(transform(ad));
}
for (TEL tel : patientPerson.getTelecom()) {
result.addTelecom(transform(tel));
}
for (PRPAMT201310UV02LanguageCommunication lang : patientPerson.getLanguageCommunication()) {
CE langCode = lang.getLanguageCode();
PatientCommunicationComponent pcc = new PatientCommunicationComponent();
pcc.setLanguage(transform(langCode));
BL preferred = lang.getPreferenceInd();
if (preferred != null && preferred.getValue().booleanValue())
pcc.setPreferred(true);
result.addCommunication(pcc);
}
TS deceasedTime = patientPerson.getDeceasedTime();
if (deceasedTime != null)
result.setDeceased(transform(deceasedTime));
else {
BL deceased = patientPerson.getDeceasedInd();
if (deceased != null)
result.setDeceased(new BooleanType(deceased.getValue().booleanValue()));
}
INT multiBirthOrder = patientPerson.getMultipleBirthOrderNumber();
if (multiBirthOrder != null) {
result.setMultipleBirth(new IntegerType(multiBirthOrder.getValue()));
} else {
BL multipleBirth = patientPerson.getMultipleBirthInd();
if (multipleBirth != null)
result.setMultipleBirth(new BooleanType(multipleBirth.getValue().booleanValue()));
}
CE maritalStatus = patientPerson.getMaritalStatusCode();
result.setMaritalStatus(transform(maritalStatus));
for (PRPAMT201310UV02PersonalRelationship relationShip : patientPerson.getPersonalRelationship()) {
CE code = relationShip.getCode();
if (code != null && "MTH".equals(code.getCode()) && "2.16.840.1.113883.12.63".equals(code.getCodeSystem())) {
COCTMT030007UVPerson holder = relationShip.getRelationshipHolder1();
if (holder != null && !holder.getName().isEmpty()) {
EN name = holder.getName().get(0);
if (!name.getFamily().isEmpty()) {
String familyName = val(name.getFamily());
result.addExtension("http://hl7.org/fhir/StructureDefinition/patient-mothersMaidenName", new StringType(familyName));
}
}
}
}
response.add(result);
}
return response;
} catch (JAXBException e) {
e.printStackTrace();
throw new InvalidRequestException("failed parsing response");
}
}
use of net.ihe.gazelle.hl7v3.datatypes.II in project MobileAccessGateway by i4mi.
the class Iti104MergeRequestConverter method doMerge.
/**
* merge request for ITI-104 transaction
* @param header
* @param entriesByReference
* @return
* @throws JAXBException
*/
public String doMerge(Patient in, Identifier replaced, Reference survivor) throws JAXBException {
PRPAIN201304UV02Type resultMsg = new PRPAIN201304UV02Type();
resultMsg.setITSVersion("XML_1.0");
// String UUID.randomUUID().toString();
resultMsg.setId(new II(config.getPixQueryOid(), uniqueId()));
// Now
resultMsg.setCreationTime(new TS(Timestamp.now().toHL7()));
resultMsg.setProcessingCode(new CS("T", null, null));
resultMsg.setProcessingModeCode(new CS("T", null, null));
resultMsg.setInteractionId(new II("2.16.840.1.113883.1.18", "PRPA_IN201304UV02"));
resultMsg.setAcceptAckCode(new CS("AL", null, null));
MCCIMT000100UV01Receiver receiver = new MCCIMT000100UV01Receiver();
resultMsg.addReceiver(receiver);
receiver.setTypeCode(CommunicationFunctionType.RCV);
MCCIMT000100UV01Device receiverDevice = new MCCIMT000100UV01Device();
receiver.setDevice(receiverDevice);
receiverDevice.setClassCode(EntityClassDevice.DEV);
receiverDevice.setDeterminerCode(EntityDeterminer.INSTANCE);
receiverDevice.setId(Collections.singletonList(new II(config.getPixReceiverOid(), null)));
MCCIMT000100UV01Sender sender = new MCCIMT000100UV01Sender();
resultMsg.setSender(sender);
sender.setTypeCode(CommunicationFunctionType.SND);
MCCIMT000100UV01Device senderDevice = new MCCIMT000100UV01Device();
sender.setDevice(senderDevice);
senderDevice.setClassCode(EntityClassDevice.DEV);
senderDevice.setDeterminerCode(EntityDeterminer.INSTANCE);
senderDevice.setId(Collections.singletonList(new II(config.getPixMySenderOid(), null)));
PRPAIN201304UV02MFMIMT700701UV01ControlActProcess controlActProcess = new PRPAIN201304UV02MFMIMT700701UV01ControlActProcess();
resultMsg.setControlActProcess(controlActProcess);
// ???
controlActProcess.setClassCode(ActClassControlAct.CACT);
// ???
controlActProcess.setMoodCode(XActMoodIntentEvent.EVN);
// ???
controlActProcess.setCode(new CD("PRPA_TE201304UV02", "2.16.840.1.113883.1.18", null));
if (in == null || replaced.isEmpty())
throw new InvalidRequestException("Cannot determine Patients to merge");
PRPAIN201304UV02MFMIMT700701UV01Subject1 subject = new PRPAIN201304UV02MFMIMT700701UV01Subject1();
controlActProcess.addSubject(subject);
subject.setTypeCode("SUBJ");
// ???
subject.setContextConductionInd(false);
PRPAIN201304UV02MFMIMT700701UV01RegistrationEvent registrationEvent = new PRPAIN201304UV02MFMIMT700701UV01RegistrationEvent();
subject.setRegistrationEvent(registrationEvent);
registrationEvent.setClassCode(ActClass.REG);
registrationEvent.setMoodCode(ActMood.EVN);
// ???
registrationEvent.setStatusCode(new CS("active", null, null));
List<MFMIMT700701UV01ReplacementOf> replacementOfList = new ArrayList<MFMIMT700701UV01ReplacementOf>();
registrationEvent.setReplacementOf(replacementOfList);
MFMIMT700701UV01ReplacementOf replacementOf = new MFMIMT700701UV01ReplacementOf();
MFMIMT700701UV01PriorRegistration priorRegistration = new MFMIMT700701UV01PriorRegistration();
replacementOf.setPriorRegistration(priorRegistration);
replacementOf.setTypeCode("RPLC");
priorRegistration.setClassCode(ActClass.REG);
priorRegistration.setMoodCode(ActMood.EVN);
priorRegistration.setStatusCode(new CS("obsolete", null, null));
MFMIMT700701UV01Subject3 subject1 = new MFMIMT700701UV01Subject3();
priorRegistration.setSubject1(subject1);
subject1.setTypeCode(ParticipationTargetSubject.SBJ);
MFMIMT700701UV01PriorRegisteredRole priorRegisteredRole = new MFMIMT700701UV01PriorRegisteredRole();
subject1.setPriorRegisteredRole(priorRegisteredRole);
priorRegisteredRole.setClassCode("PAT");
priorRegisteredRole.addId(patientIdentifier(replaced));
replacementOfList.add(replacementOf);
PRPAIN201304UV02MFMIMT700701UV01Subject2 subject2 = new PRPAIN201304UV02MFMIMT700701UV01Subject2();
registrationEvent.setSubject1(subject2);
subject2.setTypeCode(ParticipationTargetSubject.SBJ);
PRPAMT201303UV02Patient patient = new PRPAMT201303UV02Patient();
patient.setClassCode("PAT");
subject2.setPatient(patient);
PRPAMT201302UV02PatientStatusCode statusCode = new PRPAMT201302UV02PatientStatusCode("active", null, null);
// ???
patient.setStatusCode(statusCode);
List<II> orgIds = new ArrayList<II>();
Set<String> mainIds = new HashSet<String>();
PRPAMT201303UV02Person patientPerson = new PRPAMT201303UV02Person();
patientPerson.setClassCode(EntityClass.PSN);
patientPerson.setDeterminerCode(EntityDeterminer.INSTANCE);
patient.setPatientPerson(patientPerson);
Organization managingOrg = getManagingOrganization(in, in.getContained());
if (managingOrg != null) {
for (Identifier id : managingOrg.getIdentifier()) {
orgIds.add(new II(getScheme(id.getSystem()), null));
mainIds.add(id.getSystem());
}
}
// if (managingOrg==null) managingOrg = getManagingOrganization(basePatient, basePatient.getContained());
// if (managingOrg==null) throw new InvalidRequestException("Cannot determine managingOrganization");
// TODO How is the correct mapping done?
Identifier id = survivor.getIdentifier();
PRPAMT201302UV02PatientId patientId = new PRPAMT201302UV02PatientId(getScheme(id.getSystem()), id.getValue());
patient.addId(patientId);
for (HumanName name : in.getName()) {
patientPerson.addName(transform(name));
}
COCTMT150003UV03Organization providerOrganization = new COCTMT150003UV03Organization();
patient.setProviderOrganization(providerOrganization);
providerOrganization.setClassCode(EntityClassOrganization.ORG);
providerOrganization.setDeterminerCode(EntityDeterminer.INSTANCE);
providerOrganization.setId(orgIds);
ON name = null;
if (managingOrg.hasName()) {
name = new ON();
name.setMixed(Collections.singletonList(managingOrg.getName()));
providerOrganization.setName(Collections.singletonList(name));
}
COCTMT150003UV03ContactParty contactParty = new COCTMT150003UV03ContactParty();
contactParty.setClassCode(RoleClassContact.CON);
for (ContactPoint contactPoint : managingOrg.getTelecom()) {
contactParty.addTelecom(transform(contactPoint));
}
if (managingOrg != null && managingOrg.hasAddress())
contactParty.setAddr(new ArrayList<AD>());
for (Address address : managingOrg.getAddress()) {
contactParty.addAddr(transform(address));
}
if (managingOrg != null && managingOrg.hasContact()) {
OrganizationContactComponent occ = managingOrg.getContactFirstRep();
COCTMT150003UV03Person contactPerson = new COCTMT150003UV03Person();
contactPerson.setClassCode(EntityClass.PSN);
contactPerson.setDeterminerCode(EntityDeterminer.INSTANCE);
if (occ.hasName())
contactPerson.setName(Collections.singletonList(transform(occ.getName())));
contactParty.setContactPerson(contactPerson);
}
providerOrganization.setContactParty(Collections.singletonList(contactParty));
patientPerson.setBirthTime(transform(in.getBirthDateElement()));
if (in.hasGender()) {
switch(in.getGender()) {
case MALE:
patientPerson.setAdministrativeGenderCode(new CE("M", "Male", "2.16.840.1.113883.12.1"));
break;
case FEMALE:
patientPerson.setAdministrativeGenderCode(new CE("F", "Female", "2.16.840.1.113883.12.1"));
break;
case OTHER:
patientPerson.setAdministrativeGenderCode(new CE("A", "Ambiguous", "2.16.840.1.113883.12.1"));
break;
case UNKNOWN:
patientPerson.setAdministrativeGenderCode(new CE("U", "Unknown", "2.16.840.1.113883.12.1"));
break;
}
}
if (in.hasAddress())
patientPerson.setAddr(new ArrayList<AD>());
for (Address address : in.getAddress()) {
patientPerson.addAddr(transform(address));
}
for (ContactPoint contactPoint : in.getTelecom()) {
patientPerson.addTelecom(transform(contactPoint));
}
if (in.hasDeceasedBooleanType()) {
patientPerson.setDeceasedInd(new BL(in.getDeceasedBooleanType().getValue()));
}
if (in.hasDeceasedDateTimeType()) {
patientPerson.setDeceasedTime(transform(in.getDeceasedDateTimeType()));
}
if (in.hasMultipleBirthBooleanType()) {
patientPerson.setMultipleBirthInd(new BL(in.getMultipleBirthBooleanType().getValue()));
}
if (in.hasMultipleBirthIntegerType()) {
patientPerson.setMultipleBirthOrderNumber(new INT(in.getMultipleBirthIntegerType().getValue()));
}
if (in.hasMaritalStatus()) {
patientPerson.setMaritalStatusCode(transform(in.getMaritalStatus()));
}
if (in.hasCommunication()) {
for (PatientCommunicationComponent pcc : in.getCommunication()) {
PRPAMT201303UV02LanguageCommunication languageCommunication = new PRPAMT201303UV02LanguageCommunication();
languageCommunication.setLanguageCode(transform(pcc.getLanguage()));
if (pcc.hasPreferred())
languageCommunication.setPreferenceInd(new BL(pcc.getPreferred()));
patientPerson.addLanguageCommunication(languageCommunication);
}
}
MFMIMT700701UV01Custodian custodian = new MFMIMT700701UV01Custodian();
registrationEvent.setCustodian(custodian);
custodian.setTypeCode(ParticipationType.CST);
COCTMT090003UV01AssignedEntity assignedEntity = new COCTMT090003UV01AssignedEntity();
custodian.setAssignedEntity(assignedEntity);
assignedEntity.setClassCode(RoleClassAssignedEntity.ASSIGNED);
List<II> custIds = new ArrayList<II>();
custIds.add(new II(getScheme(config.getCustodianOid()), null));
assignedEntity.setId(custIds);
// assignedEntity.setId(orgIds);
COCTMT090003UV01Organization assignedOrganization = new COCTMT090003UV01Organization();
assignedEntity.setAssignedOrganization(assignedOrganization);
assignedOrganization.setClassCode(EntityClassOrganization.ORG);
assignedOrganization.setDeterminerCode(EntityDeterminer.INSTANCE);
if (managingOrg != null && managingOrg.hasName()) {
ON onName = new ON();
onName.setMixed(Collections.singletonList(managingOrg.getName()));
assignedOrganization.setName(Collections.singletonList(onName));
}
ByteArrayOutputStream out = new ByteArrayOutputStream();
HL7V3Transformer.marshallMessage(PRPAIN201304UV02Type.class, out, resultMsg);
String outArray = new String(out.toByteArray());
return outArray;
}
use of net.ihe.gazelle.hl7v3.datatypes.II in project MobileAccessGateway by i4mi.
the class Iti93UpdateRequestConverter method doUpdate.
public String doUpdate(MessageHeader header, Map<String, BundleEntryComponent> entriesByReference) throws JAXBException {
PRPAIN201302UV02Type resultMsg = new PRPAIN201302UV02Type();
resultMsg.setITSVersion("XML_1.0");
// String UUID.randomUUID().toString();
resultMsg.setId(new II(config.getPixQueryOid(), uniqueId()));
// Now
resultMsg.setCreationTime(new TS(Timestamp.now().toHL7()));
resultMsg.setProcessingCode(new CS("T", null, null));
resultMsg.setProcessingModeCode(new CS("T", null, null));
resultMsg.setInteractionId(new II("2.16.840.1.113883.1.18", "PRPA_IN201302UV02"));
resultMsg.setAcceptAckCode(new CS("AL", null, null));
MCCIMT000100UV01Receiver receiver = new MCCIMT000100UV01Receiver();
resultMsg.addReceiver(receiver);
receiver.setTypeCode(CommunicationFunctionType.RCV);
MCCIMT000100UV01Device receiverDevice = new MCCIMT000100UV01Device();
receiver.setDevice(receiverDevice);
receiverDevice.setClassCode(EntityClassDevice.DEV);
receiverDevice.setDeterminerCode(EntityDeterminer.INSTANCE);
receiverDevice.setId(Collections.singletonList(new II(config.getPixReceiverOid(), null)));
MCCIMT000100UV01Sender sender = new MCCIMT000100UV01Sender();
resultMsg.setSender(sender);
sender.setTypeCode(CommunicationFunctionType.SND);
MCCIMT000100UV01Device senderDevice = new MCCIMT000100UV01Device();
sender.setDevice(senderDevice);
senderDevice.setClassCode(EntityClassDevice.DEV);
senderDevice.setDeterminerCode(EntityDeterminer.INSTANCE);
senderDevice.setId(Collections.singletonList(new II(config.getPixMySenderOid(), null)));
PRPAIN201302UV02MFMIMT700701UV01ControlActProcess controlActProcess = new PRPAIN201302UV02MFMIMT700701UV01ControlActProcess();
resultMsg.setControlActProcess(controlActProcess);
controlActProcess.setClassCode(ActClassControlAct.CACT);
controlActProcess.setMoodCode(XActMoodIntentEvent.EVN);
controlActProcess.setCode(new CD("PRPA_TE201302UV02", "2.16.840.1.113883.1.18", null));
for (BundleEntryComponent entry : entriesByReference.values()) {
if (entry.getResource() instanceof Patient) {
HTTPVerb method = entry.getRequest().getMethod();
if (method == null)
throw new InvalidRequestException("HTTP verb missing in Bundle for Patient resource.");
Patient in = (Patient) entry.getResource();
PRPAIN201302UV02MFMIMT700701UV01Subject1 subject = new PRPAIN201302UV02MFMIMT700701UV01Subject1();
controlActProcess.addSubject(subject);
subject.setTypeCode("SUBJ");
// ???
subject.setContextConductionInd(false);
PRPAIN201302UV02MFMIMT700701UV01RegistrationEvent registrationEvent = new PRPAIN201302UV02MFMIMT700701UV01RegistrationEvent();
subject.setRegistrationEvent(registrationEvent);
registrationEvent.setClassCode(ActClass.REG);
registrationEvent.setMoodCode(ActMood.EVN);
// ???
registrationEvent.setStatusCode(new CS("active", null, null));
PRPAIN201302UV02MFMIMT700701UV01Subject2 subject1 = new PRPAIN201302UV02MFMIMT700701UV01Subject2();
registrationEvent.setSubject1(subject1);
subject1.setTypeCode(ParticipationTargetSubject.SBJ);
PRPAMT201302UV02Patient patient = new PRPAMT201302UV02Patient();
subject1.setPatient(patient);
patient.setClassCode("PAT");
PRPAMT201302UV02PatientStatusCode statusCode = new PRPAMT201302UV02PatientStatusCode();
statusCode.setCode("active");
// ???
patient.setStatusCode(statusCode);
PRPAMT201302UV02PatientPatientPerson patientPerson = new PRPAMT201302UV02PatientPatientPerson();
patient.setPatientPerson(patientPerson);
patientPerson.setClassCode(EntityClass.PSN);
patientPerson.setDeterminerCode(EntityDeterminer.INSTANCE);
patientPerson.setAsOtherIDs(new ArrayList());
List<II> orgIds = new ArrayList<II>();
Set<String> mainIds = new HashSet<String>();
Organization managingOrg = getManagingOrganization(in);
for (Identifier id : managingOrg.getIdentifier()) {
orgIds.add(new II(getScheme(id.getSystem()), null));
mainIds.add(id.getSystem());
}
// TODO How is the correct mapping done?
for (Identifier id : in.getIdentifier()) {
boolean isOwn = mainIds.contains(id.getSystem());
if (isOwn)
patient.addId(patientIdentifierUpd(id));
else {
PRPAMT201302UV02OtherIDs asOtherIDs = new PRPAMT201302UV02OtherIDs();
PRPAMT201302UV02OtherIDsId id2 = new PRPAMT201302UV02OtherIDsId();
id2.setRoot(getScheme(id.getSystem()));
id2.setExtension(id.getValue());
asOtherIDs.setClassCode("PAT");
asOtherIDs.setId(Collections.singletonList(id2));
COCTMT150002UV01Organization scopingOrganization = new COCTMT150002UV01Organization();
scopingOrganization.setClassCode(EntityClassOrganization.ORG);
scopingOrganization.setDeterminerCode(EntityDeterminer.INSTANCE);
List<II> scopeOrgIds = new ArrayList<II>();
scopeOrgIds.add(new II(getScheme(id.getSystem()), null));
scopingOrganization.setId(scopeOrgIds);
asOtherIDs.setScopingOrganization(scopingOrganization);
patientPerson.addAsOtherIDs(asOtherIDs);
}
}
for (HumanName name : in.getName()) {
patientPerson.addName(transform(name));
}
patientPerson.setBirthTime(transform(in.getBirthDateElement()));
if (in.hasGender()) {
switch(in.getGender()) {
case MALE:
patientPerson.setAdministrativeGenderCode(new CE("M", "Male", "2.16.840.1.113883.12.1"));
break;
case FEMALE:
patientPerson.setAdministrativeGenderCode(new CE("F", "Female", "2.16.840.1.113883.12.1"));
break;
case OTHER:
patientPerson.setAdministrativeGenderCode(new CE("A", "Ambiguous", "2.16.840.1.113883.12.1"));
break;
case UNKNOWN:
patientPerson.setAdministrativeGenderCode(new CE("U", "Unknown", "2.16.840.1.113883.12.1"));
break;
}
}
if (in.hasAddress())
patientPerson.setAddr(new ArrayList<AD>());
for (Address address : in.getAddress()) {
patientPerson.addAddr(transform(address));
}
for (ContactPoint contactPoint : in.getTelecom()) {
patientPerson.addTelecom(transform(contactPoint));
}
if (in.hasDeceasedBooleanType()) {
patientPerson.setDeceasedInd(new BL(in.getDeceasedBooleanType().getValue()));
}
if (in.hasDeceasedDateTimeType()) {
patientPerson.setDeceasedTime(transform(in.getDeceasedDateTimeType()));
}
if (in.hasMultipleBirthBooleanType()) {
patientPerson.setMultipleBirthInd(new BL(in.getMultipleBirthBooleanType().getValue()));
}
if (in.hasMultipleBirthIntegerType()) {
patientPerson.setMultipleBirthOrderNumber(new INT(in.getMultipleBirthIntegerType().getValue()));
}
if (in.hasMaritalStatus()) {
patientPerson.setMaritalStatusCode(transform(in.getMaritalStatus()));
}
if (in.hasCommunication()) {
for (PatientCommunicationComponent pcc : in.getCommunication()) {
PRPAMT201302UV02LanguageCommunication languageCommunication = new PRPAMT201302UV02LanguageCommunication();
languageCommunication.setLanguageCode(transform(pcc.getLanguage()));
if (pcc.hasPreferred())
languageCommunication.setPreferenceInd(new BL(pcc.getPreferred()));
patientPerson.addLanguageCommunication(languageCommunication);
}
}
COCTMT150003UV03Organization providerOrganization = new COCTMT150003UV03Organization();
patient.setProviderOrganization(providerOrganization);
providerOrganization.setClassCode(EntityClassOrganization.ORG);
providerOrganization.setDeterminerCode(EntityDeterminer.INSTANCE);
providerOrganization.setId(orgIds);
ON name = null;
if (managingOrg.hasName()) {
name = new ON();
name.setMixed(Collections.singletonList(managingOrg.getName()));
providerOrganization.setName(Collections.singletonList(name));
}
COCTMT150003UV03ContactParty contactParty = new COCTMT150003UV03ContactParty();
contactParty.setClassCode(RoleClassContact.CON);
for (ContactPoint contactPoint : managingOrg.getTelecom()) {
contactParty.addTelecom(transform(contactPoint));
}
if (managingOrg.hasAddress())
contactParty.setAddr(new ArrayList<AD>());
for (Address address : managingOrg.getAddress()) {
contactParty.addAddr(transform(address));
}
if (managingOrg.hasContact()) {
OrganizationContactComponent occ = managingOrg.getContactFirstRep();
COCTMT150003UV03Person contactPerson = new COCTMT150003UV03Person();
contactPerson.setClassCode(EntityClass.PSN);
contactPerson.setDeterminerCode(EntityDeterminer.INSTANCE);
if (occ.hasName())
contactPerson.setName(Collections.singletonList(transform(occ.getName())));
contactParty.setContactPerson(contactPerson);
}
providerOrganization.setContactParty(Collections.singletonList(contactParty));
MFMIMT700701UV01Custodian custodian = new MFMIMT700701UV01Custodian();
registrationEvent.setCustodian(custodian);
custodian.setTypeCode(ParticipationType.CST);
COCTMT090003UV01AssignedEntity assignedEntity = new COCTMT090003UV01AssignedEntity();
custodian.setAssignedEntity(assignedEntity);
assignedEntity.setClassCode(RoleClassAssignedEntity.ASSIGNED);
List<II> custIds = new ArrayList<II>();
custIds.add(new II(getScheme(config.getCustodianOid()), null));
assignedEntity.setId(custIds);
// assignedEntity.setId(orgIds);
COCTMT090003UV01Organization assignedOrganization = new COCTMT090003UV01Organization();
assignedEntity.setAssignedOrganization(assignedOrganization);
assignedOrganization.setClassCode(EntityClassOrganization.ORG);
assignedOrganization.setDeterminerCode(EntityDeterminer.INSTANCE);
if (managingOrg.hasName()) {
assignedOrganization.setName(Collections.singletonList(name));
}
}
}
ByteArrayOutputStream out = new ByteArrayOutputStream();
HL7V3Transformer.marshallMessage(PRPAIN201302UV02Type.class, out, resultMsg);
String outArray = new String(out.toByteArray());
return outArray;
}
use of net.ihe.gazelle.hl7v3.datatypes.II in project MobileAccessGateway by i4mi.
the class Iti83ResponseConverter method translateToFhir.
public Parameters translateToFhir(byte[] input, Map<String, Object> parameters) {
try {
// FIX for xmlns:xmlns
String content = new String(input);
content = content.replace("xmlns:xmlns", "xmlns:xxxxx");
PRPAIN201310UV02Type msg = HL7V3Transformer.unmarshallMessage(PRPAIN201310UV02Type.class, new ByteArrayInputStream(content.getBytes()));
Parameters query = (Parameters) parameters.get(Utils.KEPT_BODY);
List<Type> targetSystemList = (List<Type>) query.getParameters("targetSystem");
Parameters response = new Parameters();
PRPAIN201310UV02MFMIMT700711UV01ControlActProcess controlAct = msg.getControlActProcess();
List<MCCIMT000300UV01Acknowledgement> acks = msg.getAcknowledgement();
String errtext = "";
for (MCCIMT000300UV01Acknowledgement ack : acks) {
for (MCCIMT000300UV01AcknowledgementDetail ackDetail : ack.getAcknowledgementDetail()) {
if (ackDetail.getText() != null)
errtext += toText(ackDetail.getText());
}
}
// OK NF AE
String queryResponseCode = controlAct.getQueryAck().getQueryResponseCode().getCode();
if ("NF".equals(queryResponseCode)) {
throw new ResourceNotFoundException("sourceIdentifier Patient Identifier not found", error(IssueType.NOTFOUND, errtext.length() > 0 ? errtext : "sourceIdentifier Patient Identifier not found"));
}
if ("AE".equals(queryResponseCode)) {
throw new InvalidRequestException("sourceIdentifier Assigning Authority not found", error(IssueType.INVALID, errtext.length() > 0 ? errtext : "sourceIdentifier Assigning Authority not found"));
}
Set<String> acceptedTargetSystem = new HashSet<String>();
Set<String> noDuplicates = new HashSet<String>();
if (targetSystemList != null) {
for (Type targetSystemType : targetSystemList) {
UriType targetSystem = (UriType) targetSystemType;
acceptedTargetSystem.add(targetSystem.getValue());
}
}
List<PRPAIN201310UV02MFMIMT700711UV01Subject1> subjects = controlAct.getSubject();
for (PRPAIN201310UV02MFMIMT700711UV01Subject1 subject : subjects) {
boolean targetIdAdded = false;
List<II> ids = new ArrayList<II>();
ids.addAll(subject.getRegistrationEvent().getSubject1().getPatient().getId());
for (var otherId : subject.getRegistrationEvent().getSubject1().getPatient().getPatientPerson().getAsOtherIDs()) {
ids.addAll(otherId.getId());
}
for (II ii : ids) {
String root = ii.getRoot();
String extension = ii.getExtension();
if (!noDuplicates.contains(root) && (acceptedTargetSystem.isEmpty() || acceptedTargetSystem.contains("urn:oid:" + root))) {
response.addParameter().setName("targetIdentifier").setValue((new Identifier()).setSystem("urn:oid:" + root).setValue(extension));
noDuplicates.add(root);
}
if (!targetIdAdded && root.equals(config.getOidMpiPid())) {
response.addParameter().setName("targetId").setValue(patientRefCreator.createPatientReference(root, extension));
targetIdAdded = true;
}
}
}
return response;
} catch (JAXBException e) {
e.printStackTrace();
throw new InvalidRequestException("failed parsing response");
}
}
Aggregations