use of org.hl7.gravity.refimpl.sdohexchange.info.PatientInfo in project beneficiary-fhir-data by CMSgov.
the class AbstractTransformerV2 method createHumanNameFrom.
protected static List<HumanName> createHumanNameFrom(PatientInfo patientInfo) {
List<HumanName> names;
// If no names, don't set anything
if (patientInfo.getFirstName() != null || patientInfo.getLastName() != null || patientInfo.getMiddleName() != null) {
names = new ArrayList<>();
List<StringType> givens;
// If no givens, don't set any
if (patientInfo.getFirstName() != null || patientInfo.getLastName() != null) {
givens = new ArrayList<>();
if (patientInfo.getFirstName() != null) {
givens.add(new StringType(patientInfo.getFirstName()));
}
if (patientInfo.getMiddleName() != null) {
givens.add(new StringType(patientInfo.getMiddleName()));
}
} else {
givens = null;
}
names.add(new HumanName().setFamily(patientInfo.getLastName()).setGiven(givens));
} else {
names = null;
}
return names;
}
use of org.hl7.gravity.refimpl.sdohexchange.info.PatientInfo in project Gravity-SDOH-Exchange-RI by FHIR.
the class PatientToDtoConverter method convert.
@Override
public PatientDto convert(PatientInfo patientInfo) {
Patient patient = patientInfo.getPatient();
PatientDto patientDto = new PatientDto();
patientDto.setId(patient.getIdElement().getIdPart());
patientDto.setName(patient.getNameFirstRep().getNameAsSingleString());
// Get Date of Birth and Age
if (patient.hasBirthDate()) {
LocalDate dob = FhirUtil.toLocalDate(patient.getBirthDateElement());
patientDto.setDob(dob);
patientDto.setAge(Period.between(dob, LocalDate.now(ZoneOffset.UTC)).getYears());
}
// Get gender
patientDto.setGender(ObjectUtils.defaultIfNull(patient.getGender(), Enumerations.AdministrativeGender.UNKNOWN).getDisplay());
// Get communication language
patientDto.setLanguage(patient.getCommunication().stream().filter(Patient.PatientCommunicationComponent::getPreferred).map(c -> c.getLanguage().getCodingFirstRep()).map(c -> c.getDisplay() != null ? c.getDisplay() : c.getCode()).filter(Objects::nonNull).findFirst().orElse(null));
// Get Address full String. No need to compose it on UI side.
patientDto.setAddress(patient.getAddress().stream().filter(a -> (patient.getAddress().size() == 1 && a.getUse() == null) || Address.AddressUse.HOME.equals(a.getUse())).map(this::convertAddress).findFirst().orElse(null));
List<ContactPoint> telecom = patient.getTelecom();
// Get phone numbers
patientDto.getPhones().addAll(telecom.stream().filter(t -> ContactPoint.ContactPointSystem.PHONE.equals(t.getSystem())).map(cp -> {
String display = cp.getUse() == null ? null : cp.getUse().getDisplay();
return new PhoneDto(display, cp.getValue());
}).collect(Collectors.toList()));
// Get email addreses
patientDto.getEmails().addAll(telecom.stream().filter(t -> ContactPoint.ContactPointSystem.EMAIL.equals(t.getSystem())).map(cp -> {
String display = cp.getUse() == null ? null : cp.getUse().getDisplay();
return new EmailDto(display, cp.getValue());
}).collect(Collectors.toList()));
if (patientInfo.getEmployment() != null) {
String employmentStatus = patientInfo.getEmployment().getValueCodeableConcept().getCodingFirstRep().getDisplay();
patientDto.setEmploymentStatus(employmentStatus);
}
if (patientInfo.getEducation() != null) {
String education = patientInfo.getEducation().getValueCodeableConcept().getCodingFirstRep().getDisplay();
patientDto.setEducation(education);
}
// Get race
Extension race = patient.getExtensionByUrl(UsCorePatientExtensions.RACE);
patientDto.setRace(convertExtension(race));
// Get ethnicity
Extension ethnicity = patient.getExtensionByUrl(UsCorePatientExtensions.ETHNICITY);
patientDto.setEthnicity(convertExtension(ethnicity));
// Get marital status
Coding ms = patient.getMaritalStatus().getCodingFirstRep();
patientDto.setMaritalStatus(Optional.ofNullable(ms.getDisplay()).orElse(Optional.ofNullable(ms.getCode()).orElse(null)));
patientDto.getInsurances().addAll(convertPayors(patientInfo.getPayors()));
return patientDto;
}
use of org.hl7.gravity.refimpl.sdohexchange.info.PatientInfo in project MobileAccessGateway by i4mi.
the class Iti67ResponseConverter method translateToFhir.
@Override
public List<DocumentReference> translateToFhir(QueryResponse input, Map<String, Object> parameters) {
ArrayList<DocumentReference> list = new ArrayList<DocumentReference>();
if (input != null && Status.SUCCESS.equals(input.getStatus())) {
// process relationship association
Map<String, List<DocumentReferenceRelatesToComponent>> relatesToMapping = new HashMap<String, List<DocumentReferenceRelatesToComponent>>();
for (Association association : input.getAssociations()) {
// Relationship type -> relatesTo.code code [1..1]
// relationship reference -> relatesTo.target Reference(DocumentReference)
String source = association.getSourceUuid();
String target = association.getTargetUuid();
AssociationType type = association.getAssociationType();
DocumentReferenceRelatesToComponent relatesTo = new DocumentReferenceRelatesToComponent();
if (type != null)
switch(type) {
case APPEND:
relatesTo.setCode(DocumentRelationshipType.APPENDS);
break;
case REPLACE:
relatesTo.setCode(DocumentRelationshipType.REPLACES);
break;
case TRANSFORM:
relatesTo.setCode(DocumentRelationshipType.TRANSFORMS);
break;
case SIGNS:
relatesTo.setCode(DocumentRelationshipType.SIGNS);
break;
}
relatesTo.setTarget(new Reference().setReference("urn:oid:" + target));
if (!relatesToMapping.containsKey(source))
relatesToMapping.put(source, new ArrayList<DocumentReferenceRelatesToComponent>());
relatesToMapping.get(source).add(relatesTo);
}
if (input.getDocumentEntries() != null) {
for (DocumentEntry documentEntry : input.getDocumentEntries()) {
DocumentReference documentReference = new DocumentReference();
// FIXME do we need to cache this id in
documentReference.setId(noUuidPrefix(documentEntry.getEntryUuid()));
// relation to the DocumentManifest itself
// for
list.add(documentReference);
// limitedMetadata -> meta.profile canonical [0..*]
if (documentEntry.isLimitedMetadata()) {
documentReference.getMeta().addProfile("http://ihe.net/fhir/StructureDefinition/IHE_MHD_Query_Comprehensive_DocumentReference");
} else {
documentReference.getMeta().addProfile("http://ihe.net/fhir/StructureDefinition/IHE_MHD_Comprehensive_DocumentManifest");
}
// uniqueId -> masterIdentifier Identifier [0..1] [1..1]
if (documentEntry.getUniqueId() != null) {
documentReference.setMasterIdentifier((new Identifier().setValue("urn:oid:" + documentEntry.getUniqueId())));
}
// DocumentReference.identifier. use shall be ‘official’
if (documentEntry.getEntryUuid() != null) {
documentReference.addIdentifier((new Identifier().setSystem("urn:ietf:rfc:3986").setValue(asUuid(documentEntry.getEntryUuid()))).setUse(IdentifierUse.OFFICIAL));
}
// Other status values are allowed but are not defined in this mapping to XDS.
if (AvailabilityStatus.APPROVED.equals(documentEntry.getAvailabilityStatus())) {
documentReference.setStatus(DocumentReferenceStatus.CURRENT);
}
if (AvailabilityStatus.DEPRECATED.equals(documentEntry.getAvailabilityStatus())) {
documentReference.setStatus(DocumentReferenceStatus.SUPERSEDED);
}
// contentTypeCode -> type CodeableConcept [0..1]
if (documentEntry.getTypeCode() != null) {
documentReference.setType(transform(documentEntry.getTypeCode()));
}
// classCode -> category CodeableConcept [0..*]
if (documentEntry.getClassCode() != null) {
documentReference.addCategory((transform(documentEntry.getClassCode())));
}
// representing the XDS Affinity Domain Patient.
if (documentEntry.getPatientId() != null) {
Identifiable patient = documentEntry.getPatientId();
documentReference.setSubject(transformPatient(patient));
}
// creationTime -> date instant [0..1]
if (documentEntry.getCreationTime() != null) {
documentReference.setDate(Date.from(documentEntry.getCreationTime().getDateTime().toInstant()));
}
// PractitionerRole| Organization| Device| Patient| RelatedPerson) [0..*]
if (documentEntry.getAuthors() != null) {
for (Author author : documentEntry.getAuthors()) {
documentReference.addAuthor(transformAuthor(author));
}
}
// legalAuthenticator -> authenticator Note 1
// Reference(Practitioner|Practition erRole|Organization [0..1]
Person person = documentEntry.getLegalAuthenticator();
if (person != null) {
Practitioner practitioner = transformPractitioner(person);
documentReference.setAuthenticator((Reference) new Reference().setResource(practitioner));
}
// Relationship Association -> relatesTo [0..*]
// [1..1]
documentReference.setRelatesTo(relatesToMapping.get(documentEntry.getEntryUuid()));
// title -> description string [0..1]
if (documentEntry.getTitle() != null) {
documentReference.setDescription(documentEntry.getTitle().getValue());
}
// DocumentReference itself.
if (documentEntry.getConfidentialityCodes() != null) {
documentReference.addSecurityLabel(transform(documentEntry.getConfidentialityCodes()));
}
DocumentReferenceContentComponent content = documentReference.addContent();
Attachment attachment = new Attachment();
content.setAttachment(attachment);
// mimeType -> content.attachment.contentType [1..1] code [0..1]
if (documentEntry.getMimeType() != null) {
attachment.setContentType(documentEntry.getMimeType());
}
// languageCode -> content.attachment.language code [0..1]
if (documentEntry.getLanguageCode() != null) {
attachment.setLanguage(documentEntry.getLanguageCode());
}
// retrievable location of the document -> content.attachment.url uri
// [0..1] [1..1
// has to defined, for the PoC we define
// $host:port/camel/$repositoryid/$uniqueid
attachment.setUrl(config.getUriMagXdsRetrieve() + "?uniqueId=" + documentEntry.getUniqueId() + "&repositoryUniqueId=" + documentEntry.getRepositoryUniqueId());
// size -> content.attachment.size integer [0..1] The size is calculated
if (documentEntry.getSize() != null) {
attachment.setSize(documentEntry.getSize().intValue());
}
// on the data prior to base64 encoding, if the data is base64 encoded.
if (documentEntry.getHash() != null) {
attachment.setHash(Hex.fromHex(documentEntry.getHash()));
}
// comments -> content.attachment.title string [0..1]
if (documentEntry.getComments() != null) {
attachment.setTitle(documentEntry.getComments().getValue());
}
// TcreationTime -> content.attachment.creation dateTime [0..1]
if (documentEntry.getCreationTime() != null) {
attachment.setCreation(Date.from(documentEntry.getCreationTime().getDateTime().toInstant()));
}
// formatCode -> content.format Coding [0..1]
if (documentEntry.getFormatCode() != null) {
content.setFormat(transform(documentEntry.getFormatCode()).getCodingFirstRep());
}
DocumentReferenceContextComponent context = new DocumentReferenceContextComponent();
documentReference.setContext(context);
// referenceIdList -> context.encounter Reference(Encounter) [0..*] When
// referenceIdList contains an encounter, and a FHIR Encounter is available, it
// may be referenced.
// Map to context.related
List<ReferenceId> refIds = documentEntry.getReferenceIdList();
if (refIds != null) {
for (ReferenceId refId : refIds) {
context.getRelated().add(transform(refId));
}
}
// eventCodeList -> context.event CodeableConcept [0..*]
if (documentEntry.getEventCodeList() != null) {
documentReference.getContext().setEvent(transformMultiple(documentEntry.getEventCodeList()));
}
// serviceStartTime serviceStopTime -> context.period Period [0..1]
if (documentEntry.getServiceStartTime() != null || documentEntry.getServiceStopTime() != null) {
Period period = new Period();
period.setStartElement(transform(documentEntry.getServiceStartTime()));
period.setEndElement(transform(documentEntry.getServiceStopTime()));
documentReference.getContext().setPeriod(period);
}
// [0..1]
if (documentEntry.getHealthcareFacilityTypeCode() != null) {
context.setFacilityType(transform(documentEntry.getHealthcareFacilityTypeCode()));
}
// practiceSettingCode -> context.practiceSetting CodeableConcept [0..1]
if (documentEntry.getPracticeSettingCode() != null) {
context.setPracticeSetting(transform(documentEntry.getPracticeSettingCode()));
}
// sourcePatientId and sourcePatientInfo -> context.sourcePatientInfo
// Reference(Patient) [0..1] Contained Patient Resource with
// Patient.identifier.use element set to ‘usual’.
Identifiable sourcePatientId = documentEntry.getSourcePatientId();
PatientInfo sourcePatientInfo = documentEntry.getSourcePatientInfo();
Patient sourcePatient = new Patient();
if (sourcePatientId != null) {
sourcePatient.addIdentifier((new Identifier().setSystem("urn:oid:" + sourcePatientId.getAssigningAuthority().getUniversalId()).setValue(sourcePatientId.getId())).setUse(IdentifierUse.OFFICIAL));
}
if (sourcePatientInfo != null) {
sourcePatient.setBirthDateElement(transformToDate(sourcePatientInfo.getDateOfBirth()));
String gender = sourcePatientInfo.getGender();
if (gender != null) {
switch(gender) {
case "F":
sourcePatient.setGender(Enumerations.AdministrativeGender.FEMALE);
break;
case "M":
sourcePatient.setGender(Enumerations.AdministrativeGender.MALE);
break;
case "U":
sourcePatient.setGender(Enumerations.AdministrativeGender.UNKNOWN);
break;
case "A":
sourcePatient.setGender(Enumerations.AdministrativeGender.OTHER);
break;
}
}
ListIterator<Name> names = sourcePatientInfo.getNames();
while (names.hasNext()) {
Name name = names.next();
sourcePatient.addName(transform(name));
}
ListIterator<Address> addresses = sourcePatientInfo.getAddresses();
while (addresses.hasNext()) {
Address address = addresses.next();
if (address != null)
sourcePatient.addAddress(transform(address));
}
}
if (sourcePatientId != null || sourcePatientInfo != null) {
context.getSourcePatientInfo().setResource(sourcePatient);
}
}
}
} else {
processError(input);
}
return list;
}
use of org.hl7.gravity.refimpl.sdohexchange.info.PatientInfo in project beneficiary-fhir-data by CMSgov.
the class FissClaimResponseTransformerV2 method getContainedPatient.
private static Resource getContainedPatient(PreAdjFissClaim claimGroup) {
Optional<PreAdjFissPayer> optional = claimGroup.getPayers().stream().filter(p -> p.getPayerType() == PreAdjFissPayer.PayerType.BeneZ).findFirst();
Patient patient;
if (optional.isPresent()) {
PreAdjFissPayer benePayer = optional.get();
patient = getContainedPatient(claimGroup.getMbi(), new PatientInfo(benePayer.getBeneFirstName(), benePayer.getBeneLastName(), ifNotNull(benePayer.getBeneMidInit(), s -> s.charAt(0) + "."), benePayer.getBeneDob(), benePayer.getBeneSex()));
} else {
patient = getContainedPatient(claimGroup.getMbi(), null);
}
return patient;
}
use of org.hl7.gravity.refimpl.sdohexchange.info.PatientInfo in project beneficiary-fhir-data by CMSgov.
the class FissClaimTransformerV2 method getContainedPatient.
private static Resource getContainedPatient(PreAdjFissClaim claimGroup) {
Optional<PreAdjFissPayer> optional = claimGroup.getPayers().stream().filter(p -> p.getPayerType() == PreAdjFissPayer.PayerType.BeneZ).findFirst();
Patient patient;
if (optional.isPresent()) {
PreAdjFissPayer benePayer = optional.get();
patient = getContainedPatient(claimGroup.getMbi(), new PatientInfo(benePayer.getBeneFirstName(), benePayer.getBeneLastName(), ifNotNull(benePayer.getBeneMidInit(), s -> s.charAt(0) + "."), benePayer.getBeneDob(), benePayer.getBeneSex()));
} else {
patient = getContainedPatient(claimGroup.getMbi(), null);
}
return patient;
}
Aggregations