source: ccr/trunk/nhin-vista/projects/NHINC/Current/Product/Production/Adapters/General/MpiManagerEJB/src/java/gov/hhs/fha/nhinc/adaptermpimanager/PatientSaver.java@ 507

Last change on this file since 507 was 507, checked in by George Lilly, 15 years ago

NHIN gateway and adaptor for use on linux with VistA EHR and RPMS

File size: 6.4 KB
Line 
1/*
2 * To change this template, choose Tools | Templates
3 * and open the template in the editor.
4 */
5
6package gov.hhs.fha.nhinc.adaptermpimanager;
7
8import org.apache.commons.logging.Log;
9import org.apache.commons.logging.LogFactory;
10import org.hl7.v3.*;
11import gov.hhs.fha.nhinc.mpilib.*;
12import gov.hhs.fha.nhinc.adaptermpimanager.HL7Parsers.*;
13
14/**
15 *
16 * @author mflynn02
17 */
18public class PatientSaver {
19 private static Log log = LogFactory.getLog(PatientSaver.class);
20
21 public static org.hl7.v3.MCCIIN000002UV01 SavePatient(org.hl7.v3.PRPAIN201301UV message) {
22 MCCIIN000002UV01 result = new MCCIIN000002UV01();
23 result = PatientSaver.SaveAnnouncePatient(message, true, true, true, false);
24
25 return result;
26 }
27
28 public static org.hl7.v3.MCCIIN000002UV01 RevokePatient(org.hl7.v3.PRPAIN201303UV message) {
29 boolean AllowSearchByDemographicsForDeletePatient = true;
30 log.info("in DeletePatient");
31 MCCIIN000002UV01 response = new MCCIIN000002UV01();
32 HL7Parser201303.PrintMessageIdFromMessage(message);
33 PRPAMT201305UVPatient patient = HL7Parser201303.ExtractHL7PatientFromMessage(message);
34 MCCIMT000100UV01Sender sender = message.getSender();
35 org.hl7.v3.MCCIMT000200UV01Acknowledgement acknowledge = new MCCIMT000200UV01Acknowledgement();
36 org.hl7.v3.MCCIMT000200UV01AcknowledgementDetail ackDetail = new MCCIMT000200UV01AcknowledgementDetail();
37 org.hl7.v3.CE ackCode = new CE();
38 if (patient == null) {
39 log.info("WARNING: no patient supplied");
40 ackCode.setCode("There was no patient supplied in 201303 Message");
41 ackDetail.setCode(ackCode);
42 } else if (sender == null ||
43 sender.getDevice() == null) {
44 log.warn("WARNING: no sender supplied");
45 ackCode.setCode("There was not a valid sender supplied in 201303 Message");
46 } else {
47 log.info("Found patient in message");
48 Patient sourcePatient = HL7Parser201303.ExtractMpiPatientFromHL7Patient(patient);
49 Patients searchResults = MpiDataAccess.LookupPatients(sourcePatient, AllowSearchByDemographicsForDeletePatient);
50
51 if (CommonChecks.isZeroSearchResult(searchResults)) {
52 log.info("patient not found in MPI");
53 ackCode.setCode("The patient was not found in the MPI");
54 } else if (CommonChecks.isMultipleSearchResult(searchResults)) {
55 log.info("multiple patients found in MPI [searchResults.size()=" + searchResults.size() + "]");
56 ackCode.setCode("Multiple patients were found in the MPI");
57 } else {
58 log.info("patient found in MPI");
59
60 log.info("removing patient correlation");
61 if (sender.getDevice().getId() != null &&
62 sender.getDevice().getId().size() > 0 &&
63 sender.getDevice().getId().get(0) != null &&
64 sender.getDevice().getId().get(0).getRoot() != null &&
65 sender.getDevice().getId().get(0).getRoot().length() > 0) {
66 MpiDataAccess.DeletePatient(sourcePatient, sender.getDevice().getId().get(0).getRoot());
67 } else {
68 log.warn("WARNING: An invalid sender was supplied");
69 ackCode.setCode("There was not a valid sender supplied in 201303 Message");
70 }
71
72 ackCode.setCode("Successfully revoked patient");
73 }
74 }
75 ackDetail.setCode(ackCode);
76 acknowledge.getAcknowledgementDetail().add(ackDetail);
77 response.getAcknowledgement().add(acknowledge);
78 return response;
79 }
80
81 private static org.hl7.v3.MCCIIN000002UV01 SaveAnnouncePatient(PRPAIN201301UV message, boolean AllowSearchByDemographics, boolean CreatePatientIfDoesNotExist, boolean UpdateDemographicsIfNeeded, boolean ConfirmDemographicMatchPriorToUpdatingCorrelation) {
82 log.info("in SaveAnnouncePatient (PRPAIN201301UV)");
83 MCCIIN000002UV01 result = new MCCIIN000002UV01();
84
85 org.hl7.v3.MCCIMT000200UV01Acknowledgement acknowledge = new MCCIMT000200UV01Acknowledgement();
86 org.hl7.v3.MCCIMT000200UV01AcknowledgementDetail ackDetail = new MCCIMT000200UV01AcknowledgementDetail();
87 org.hl7.v3.CE ackCode = new CE();
88
89 HL7Parser201301.PrintMessageIdFromMessage(message);
90
91 PRPAMT201301UVPatient patient = HL7Parser201301.ExtractHL7PatientFromMessage(message);
92 MCCIMT000100UV01Sender sender = message.getSender();
93
94 if (patient == null) {
95 log.warn(" no patient supplied");
96 ackCode.setCode("No Patient Supplied");
97 } else if (sender == null) {
98 log.warn(" no sender supplied");
99 ackCode.setCode("No Sender Supplied");
100 } else {
101 Patient sourcePatient = HL7Parser201301.ExtractMpiPatientFromHL7Patient(patient);
102 log.info("perform patient lookup in mpi");
103
104 log.info("source patient check 1 [" + sourcePatient.getName().getLastName() + "]");
105 Patients searchResults = MpiDataAccess.LookupPatients(sourcePatient, AllowSearchByDemographics);
106 log.info("source patient check 2 [" + sourcePatient.getName().getLastName() + "]");
107
108 if (CommonChecks.isZeroSearchResult(searchResults)) {
109 log.info("patient not found in MPI");
110 if (CreatePatientIfDoesNotExist) {
111 log.info("creating patient");
112 MpiDataAccess.SavePatient(sourcePatient);
113 ackCode.setCode("Patient Successfully added to the MPI");
114 } else {
115 log.info("patient not found in MPI - ignore");
116 //result = null;
117 }
118 } else if (CommonChecks.isMultipleSearchResult(searchResults)) {
119 log.info("multiple patients found in MPI [searchResults.size()=" + searchResults.size() + "]");
120 ackCode.setCode("Multiple patients were found in the MPI");
121
122 result = null;
123 } else {
124 log.info("patient found in MPI. Currently IGNORE record!");
125 ackCode.setCode("Patient found in MPI. Currently IGNORE record");
126 }
127 }
128 ackDetail.setCode(ackCode);
129 acknowledge.getAcknowledgementDetail().add(ackDetail);
130 result.getAcknowledgement().add(acknowledge);
131
132 return result;
133 }
134
135}
Note: See TracBrowser for help on using the repository browser.