3636import org .openmrs .module .interop .api .metadata .EventMetadata ;
3737import org .openmrs .module .interop .api .processors .AllergyIntoleranceProcessor ;
3838import org .openmrs .module .interop .api .processors .AppointmentProcessor ;
39+ import org .openmrs .module .interop .api .processors .ComplaintsProcessor ;
3940import org .openmrs .module .interop .api .processors .ConditionProcessor ;
41+ import org .openmrs .module .interop .api .processors .DiagnosisProcessor ;
4042import org .openmrs .module .interop .api .processors .DiagnosticReportProcessor ;
4143import org .openmrs .module .interop .api .processors .ServiceRequestProcessor ;
44+ import org .openmrs .module .interop .api .processors .LabResultsProcessor ;
45+ import org .openmrs .module .interop .api .processors .VitalsProcessor ;
4246import org .openmrs .module .interop .api .processors .translators .AppointmentRequestTranslator ;
4347import org .openmrs .module .interop .utils .ObserverUtils ;
4448import org .openmrs .module .interop .utils .ReferencesUtil ;
@@ -73,6 +77,9 @@ public class EncounterObserver extends BaseObserver implements Subscribable<org.
7377 @ Autowired
7478 private ConditionProcessor conditionProcessor ;
7579
80+ @ Autowired
81+ private DiagnosisProcessor diagnosisProcessor ;
82+
7683 @ Autowired
7784 @ Qualifier ("interop.appointmentProcessor" )
7885 private AppointmentProcessor appointmentProcessor ;
@@ -87,11 +94,18 @@ public class EncounterObserver extends BaseObserver implements Subscribable<org.
8794 @ Autowired
8895 private AllergyIntoleranceProcessor allergyIntoleranceProcessor ;
8996
97+ @ Autowired
98+ private VitalsProcessor vitalsProcessor ;
99+
100+ @ Autowired
101+ private ComplaintsProcessor complaintsProcessor ;
102+
90103 @ Autowired
91104 private ServiceRequestProcessor serviceRequestProcessor ;
92105
93106 @ Autowired
94107 private ConceptTranslator conceptTranslator ;
108+ private LabResultsProcessor labResultsProcessor ;
95109
96110 @ Override
97111 public Class <?> clazz () {
@@ -143,14 +157,17 @@ private void prepareEncounterMessage(@NotNull EventMetadata metadata) {
143157 //Observations
144158 List <Obs > encounterObservations = new ArrayList <>(encounter .getObs ());
145159 /*for (Obs obs : encounterObservations) {
160+ //Observations - Only enable this when you want to send all form obs as Fhir observations
161+ /**List<Obs> encounterObservations = new ArrayList<>(encounter.getObs());
162+ for (Obs obs : encounterObservations) {
146163 Observation fhirObs = observationTranslator.toFhirResource(obs);
147164 fhirObs.setSubject(ReferencesUtil.buildPatientReference(encounter.getPatient()));
148-
165+
149166 // provence references
150167 List<Resource> resources = ReferencesUtil.resolveProvenceReference(fhirObs.getContained(), encounter);
151168 fhirObs.getContained().clear();
152169 //fhirObs.setContained(resources);
153-
170+
154171 Bundle.BundleEntryComponent obsBundleEntry = new Bundle.BundleEntryComponent();
155172 Bundle.BundleEntryRequestComponent requestComponent = new Bundle.BundleEntryRequestComponent();
156173 requestComponent.setMethod(Bundle.HTTPVerb.PUT);
@@ -159,6 +176,55 @@ private void prepareEncounterMessage(@NotNull EventMetadata metadata) {
159176 obsBundleEntry.setResource(fhirObs);
160177 preparedBundle.addEntry(obsBundleEntry);
161178 }*/
179+ /**
180+ * List<Obs> encounterObservations = new ArrayList<>(encounter.getObs()); for (Obs obs :
181+ * encounterObservations) { Observation fhirObs = observationTranslator.toFhirResource(obs);
182+ * fhirObs.setSubject(ReferencesUtil.buildPatientReference(encounter.getPatient())); // provence
183+ * references List<Resource> resources =
184+ * ReferencesUtil.resolveProvenceReference(fhirObs.getContained(), encounter);
185+ * fhirObs.getContained().clear(); //fhirObs.setContained(resources); Bundle.BundleEntryComponent
186+ * obsBundleEntry = new Bundle.BundleEntryComponent(); Bundle.BundleEntryRequestComponent
187+ * requestComponent = new Bundle.BundleEntryRequestComponent();
188+ * requestComponent.setMethod(Bundle.HTTPVerb.PUT); requestComponent.setUrl("Observation/" +
189+ * fhirObs.getId()); obsBundleEntry.setRequest(requestComponent);
190+ * obsBundleEntry.setResource(fhirObs); preparedBundle.addEntry(obsBundleEntry); }
191+ **/
192+
193+ //Vital obs
194+ List <Observation > vitalsObs = vitalsProcessor .process (encounter );
195+ for (Observation obs : vitalsObs ) {
196+ Bundle .BundleEntryComponent obsBundleEntry = new Bundle .BundleEntryComponent ();
197+ Bundle .BundleEntryRequestComponent requestComponent = new Bundle .BundleEntryRequestComponent ();
198+ requestComponent .setMethod (Bundle .HTTPVerb .PUT );
199+ requestComponent .setUrl ("Observation/" + obs .getId ());
200+ obsBundleEntry .setRequest (requestComponent );
201+ obsBundleEntry .setResource (obs );
202+ preparedBundle .addEntry (obsBundleEntry );
203+ }
204+
205+ //Complaints obs
206+ List <Observation > complaintsObs = complaintsProcessor .process (encounter );
207+ for (Observation obs : complaintsObs ) {
208+ Bundle .BundleEntryComponent obsBundleEntry = new Bundle .BundleEntryComponent ();
209+ Bundle .BundleEntryRequestComponent requestComponent = new Bundle .BundleEntryRequestComponent ();
210+ requestComponent .setMethod (Bundle .HTTPVerb .PUT );
211+ requestComponent .setUrl ("Observation/" + obs .getId ());
212+ obsBundleEntry .setRequest (requestComponent );
213+ obsBundleEntry .setResource (obs );
214+ preparedBundle .addEntry (obsBundleEntry );
215+ }
216+
217+ //Lab results obs
218+ List <Observation > labResultsObs = labResultsProcessor .process (encounter );
219+ for (Observation obs : labResultsObs ) {
220+ Bundle .BundleEntryComponent obsBundleEntry = new Bundle .BundleEntryComponent ();
221+ Bundle .BundleEntryRequestComponent requestComponent = new Bundle .BundleEntryRequestComponent ();
222+ requestComponent .setMethod (Bundle .HTTPVerb .PUT );
223+ requestComponent .setUrl ("Observation/" + obs .getId ());
224+ obsBundleEntry .setRequest (requestComponent );
225+ obsBundleEntry .setResource (obs );
226+ preparedBundle .addEntry (obsBundleEntry );
227+ }
162228
163229 this .processFhirResources (encounter , preparedBundle );
164230 this .publish (preparedBundle );
@@ -295,14 +361,17 @@ private void processFhirResources(@Nonnull Encounter encounter, @NotNull Bundle
295361 condition.setSubject(ReferencesUtil.buildPatientReference(encounter.getPatient()));
296362 condition.getRecorder().setIdentifier(buildProviderIdentifier(encounter));
297363 condition.setEncounter(encounterReferenceTranslator.toFhirResource(encounter));
298-
299- List<Resource> resources = ReferencesUtil.resolveProvenceReference(condition.getContained(), encounter);
300- condition.getContained().clear();
301- //condition.setContained(resources);
302-
303364 bundle.addEntry(buildConditionBundleEntry(condition));
304365 });
305366
367+ List<Condition> diagnosis = diagnosisProcessor.process(encounter);
368+ diagnosis.forEach(d -> {
369+ d.setSubject(ReferencesUtil.buildPatientReference(encounter.getPatient()));
370+ d.getRecorder().setIdentifier(buildProviderIdentifier(encounter));
371+ d.setEncounter(encounterReferenceTranslator.toFhirResource(encounter));
372+ bundle.addEntry(buildConditionBundleEntry(d));
373+ });
374+
306375 List<Appointment> appointments = appointmentProcessor.process(encounter);
307376 if (!appointments.isEmpty()) {
308377 ServiceRequest serviceRequest = appointmentRequestTranslator.toFhirResource(encounter);
0 commit comments