Summary Table
Categories |
Total Count |
PII |
0 |
URL |
0 |
DNS |
0 |
EKL |
0 |
IP |
0 |
PORT |
0 |
VsID |
0 |
CF |
0 |
AI |
0 |
VPD |
0 |
PL |
0 |
Other |
0 |
File Content
package gov.va.med.pbm.ampl.fhir.unmarshall.dstu2.unbundle;
import java.time.OffsetDateTime;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Optional;
import ca.uhn.fhir.model.dstu2.resource.Condition;
import ca.uhn.fhir.model.dstu2.resource.Encounter;
import ca.uhn.fhir.model.dstu2.resource.Practitioner;
import ca.uhn.fhir.model.primitive.DateTimeDt;
import ca.uhn.fhir.model.dstu2.composite.ResourceReferenceDt;
import ca.uhn.fhir.model.dstu2.resource.Bundle.Entry;
import gov.va.med.pbm.ampl.constant.MockDataConstants;
import gov.va.med.pbm.ampl.model.Facility;
import gov.va.med.pbm.ampl.model.Problem;
import gov.va.med.pbm.ampl.model.Signature;
import gov.va.med.pbm.ampl.utility.DateUtility;
import gov.va.med.pbm.ampl.model.AuditHistory;
import gov.va.med.pbm.ampl.model.Comment;
/**
* The UnbundleProblem class marshals an {@link Problem} resource to a client readable JSON format.
*
* @author Pavani Mukthipudi
*/
public class UnbundleProblem {
private List<Entry> entries;
private String patientId;
/**
* Overloaded constructor accepting a collection of {@link Entry}.
*
* @param patientId the patientId
* @param entries {@link Entry}
*/
public UnbundleProblem(String patientId, List<Entry> entries) {
this.patientId = patientId;
this.entries = entries;
}
/**
* This method queries the FHIR server for patients.
*
* @return collection {@link Problem}
*/
public final Collection<Problem> getEntries() {
Collection<Problem> problemList = new ArrayList<>();
// Iterate over each entry to filter out the desired progress notes
for (Entry entry : entries) {
Problem problem = new Problem();
if (!Condition.class.equals(entry.getResource().getClass())) {
continue;
}
Condition condition = (Condition) entry.getResource();
Encounter encounter = (Encounter) condition.getEncounter().getResource();
Signature signature = this.getSignature(condition);
Optional<DateTimeDt> optOnset = Optional.ofNullable((DateTimeDt) condition.getOnset());
problem.setAuditHistory(this.getAuditHistory());
problem.setCategory(condition.getCategory().getTextElement().getValue());
problem.setClinic(this.getFacility(encounter.getServiceProvider()).getName());
problem.setCodingSystem(MockDataConstants.NOT_MAPPED);
problem.setComments(this.getComments(condition));
problem.setCondition(condition.getCode().getCodingFirstRep().getDisplay());
problem.setDescription(condition.getNotes());
problem.setDiagnosis(condition.getStage().getSummary().getText());
problem.setDiagnosisCode(condition.getCode().getCodingFirstRep().getCode());
problem.setEnteredBy(MockDataConstants.NOT_MAPPED);
problem.setEntryDate(null);
problem.setExposures(new String[] { MockDataConstants.NOT_MAPPED });
problem.setFacility(this.getFacility(condition));
problem.setImmediacy(condition.getClinicalStatus());
problem.setLastUpdatedDate(null);
problem.setOnsetDate(
optOnset.isPresent() ? DateUtility.offsetDateTimeValueOf(optOnset.get().getValueAsString()) : null);
problem.setPatientId(patientId);
problem.setProvider(MockDataConstants.NOT_MAPPED);
problem.setRecordedBy(signature.getSignator());
problem.setRecordedDate(signature.getSignDate());
problem.setService(MockDataConstants.NOT_MAPPED);
// problem.setServiceConnected(true);
problem.setStatus(condition.getVerificationStatus());
problem.setVerified(condition.getEvidenceFirstRep().getCode().getText());
problemList.add(problem);
}
return problemList;
}
/**
* This method builds a {@link Comment} from a given {@link Condition}.
*
* @param condition {@link Condition}
* @return {@link Comment}
*/
private Collection<Comment> getComments(Condition condition) {
Collection<Comment> comments = new ArrayList<Comment>();
// TODO split FHIRs comment field into any number of comments
Comment comment = new Comment();
comment.setText(MockDataConstants.NOT_MAPPED);
comment.setSignature(this.getSignature(condition));
comments.add(comment);
return comments;
}
/**
* This method builds a {@link Signature} from a given {@link Condition}.
*
* @param condition {@link Condition}
* @return {@link Signature}
*/
private Signature getSignature(Condition condition) {
UnbundleSignature uSignature = new UnbundleSignature();
Optional<ResourceReferenceDt> optAsserter = Optional.of(condition.getAsserter());
Optional<OffsetDateTime> optDate = Optional.of(DateUtility.offsetDateTimeValueOf(condition.getDateRecorded()));
Signature signature = uSignature.getSignatureFromResourceReference(optAsserter, optDate);
return signature;
}
/**
* This method builds the facility from a {@link Condition}'s {@link Practitioner}.
*
* @param condition {@link Condition}
* @return {@link Facility}
*/
private Facility getFacility(Condition condition) {
Practitioner asserter = (Practitioner) condition.getAsserter().getResource();
return this.getFacility(asserter.getPractitionerRoleFirstRep().getManagingOrganization());
}
/**
* This method calls a {@UnbundleFacility}, providing a {@link ResourceReferenceDt}.
*
* @param resource {@link ResourceReferenceDt}
* @return {@link Facility}
*/
private Facility getFacility(ResourceReferenceDt resource) {
UnbundleFacility uFacility = new UnbundleFacility(resource);
Facility facility = uFacility.getResourceAsOrganization();
return facility;
}
/**
* This method builds the audit history.
*
* @return collection of {@link AuditHistory}
*/
private Collection<AuditHistory> getAuditHistory() {
// FIXME update params and query the repo for associated audit history
Collection<AuditHistory> auditHistoryList = new ArrayList<AuditHistory>();
AuditHistory auditHistory = new AuditHistory();
auditHistory.setFieldChanged(MockDataConstants.VERIFY_FHIR_ELEMENT);
auditHistoryList.add(auditHistory);
return auditHistoryList;
}
}