@@ -804,17 +804,17 @@ public List<SyncFhirProfileLog> getSyncFhirProfileLogByProfile(SyncFhirProfile s
804804 }
805805
806806 /**
807- * @see UgandaEMRSyncService#addTestResultsToEncounter(JSONObject , Order)
807+ * @see UgandaEMRSyncService#addTestResultsToEncounter(String , Order)
808808 */
809- public List <Encounter > addTestResultsToEncounter (JSONObject bundleResults , Order order ) {
809+ public List <Encounter > addTestResultsToEncounter (String bundleResults , Order order ) {
810810 Encounter encounter = null ;
811811
812812 if (order != null ) {
813813 encounter = order .getEncounter ();
814814 }
815815
816816 List <Encounter > returningEncounter = new ArrayList <>();
817- JSONArray jsonArray = bundleResults .getJSONArray ("entry" );
817+ JSONArray jsonArray = new JSONObject ( bundleResults ) .getJSONArray ("entry" );
818818
819819 JSONArray filteredDiagnosticReportArray = searchForJSONOBJECTSByKey (jsonArray , "resourceType" , "DiagnosticReport" );
820820
@@ -1021,8 +1021,11 @@ public List<SyncFhirResource> getSyncedFHirResources(SyncFhirProfile syncFhirPro
10211021 }
10221022
10231023 @ Override
1024- public Patient createPatientsFromFHIR (JSONObject patientData ) throws ParseException {
1024+ public Patient createPatientsFromFHIR (String patientDataString ) throws ParseException {
10251025 PatientService patientService = Context .getPatientService ();
1026+
1027+ JSONObject patientData = new JSONObject (patientDataString );
1028+
10261029 Date date = new SimpleDateFormat ("yyyy-MM-dd" ).parse (patientData .get ("birthDate" ).toString ());
10271030
10281031 String gender = String .valueOf (patientData .get ("gender" ));
@@ -1040,9 +1043,11 @@ public Patient createPatientsFromFHIR(JSONObject patientData) throws ParseExcept
10401043 return patientService .savePatient (patient );
10411044 }
10421045
1043- public Patient updatePatientsFromFHIR (JSONObject bundle , String identifierUUID , String identifierName ) {
1046+ public Patient updatePatientsFromFHIR (String bundleString , String identifierUUID , String identifierName ) {
10441047 Patient patient = null ;
10451048 PatientService patientService = Context .getPatientService ();
1049+ JSONObject bundle = new JSONObject (bundleString );
1050+
10461051 if (bundle .has ("resourceType" ) && bundle .getString ("resourceType" ).equals ("Bundle" ) && bundle .getJSONArray ("entry" ).length () > 0 ) {
10471052 JSONArray bundleResourceObjects = bundle .getJSONArray ("entry" );
10481053
@@ -1149,9 +1154,9 @@ private PatientIdentifier generatePatientIdentifier() {
11491154 return patientIdentifier ;
11501155 }
11511156
1152- public boolean patientFromFHIRExists (JSONObject patientData ) {
1157+ public boolean patientFromFHIRExists (String patientDataString ) {
11531158 boolean patientExists = false ;
1154- for (Object o : patientData .getJSONArray ("identifier" )) {
1159+ for (Object o : new JSONObject ( patientDataString ) .getJSONArray ("identifier" )) {
11551160 JSONObject jsonObject = new JSONObject (o .toString ());
11561161 PatientService patientService = Context .getPatientService ();
11571162 List <PatientIdentifier > patientIdentifier = patientService .getPatientIdentifiers (jsonObject .get ("value" ).toString (), null , null , null , null );
@@ -1891,9 +1896,9 @@ private String getProviderAttributeByType(Set<ProviderAttribute> providerAttribu
18911896 * @param drugs A collection of drug concepts to filter the orders by.
18921897 * @return A list of JSON objects representing patient orders with drug prescriptions.
18931898 */
1894- public List <JSONObject > generateDrugOrderToOtherSystem (Collection <Concept > drugs ) {
1899+ public List <String > generateDrugOrderToOtherSystem (Collection <Concept > drugs ) {
18951900 // Initialize the list to hold the patient orders
1896- List <JSONObject > patientOrders = new ArrayList <>();
1901+ List <String > patientOrders = new ArrayList <>();
18971902
18981903 // Retrieve the OrderService and CareSetting for the specific care setting (OPD)
18991904 OrderService orderService = Context .getOrderService ();
@@ -1960,7 +1965,7 @@ public List<JSONObject> generateDrugOrderToOtherSystem(Collection<Concept> drugs
19601965 patientOrder .getJSONObject ("patient" ).has ("id" )) {
19611966
19621967 // Add valid patient order to the result list
1963- patientOrders .add (patientOrder );
1968+ patientOrders .add (patientOrder . toString () );
19641969 }
19651970 }
19661971
@@ -2317,34 +2322,38 @@ public void sendPrescription() {
23172322 .collect (Collectors .toList ());
23182323
23192324 // Generate prescription orders
2320- List <JSONObject > drugOrders = generateDrugOrderToOtherSystem (concepts );
2325+ List <String > drugOrders = generateDrugOrderToOtherSystem (concepts );
2326+
2327+
23212328
23222329 try {
2323- for (JSONObject drugOrder : drugOrders ) {
2330+ for (String drugOrderString : drugOrders ) {
23242331 // Send prescription via POST
23252332 Map <String , Object > response = httpConnection .sendPostBy (
23262333 url ,
23272334 syncTaskType .getUrlUserName (),
23282335 syncTaskType .getUrlPassword (),
23292336 null ,
2330- drugOrder . toString () ,
2337+ drugOrderString ,
23312338 false
23322339 );
23332340
2341+
2342+
23342343 int responseCode = response .get ("responseCode" ) instanceof Integer
23352344 ? (int ) response .get ("responseCode" )
23362345 : Integer .parseInt (response .get ("responseCode" ).toString ());
23372346
23382347 if (responseCode == 200 || responseCode == 201 ) {
2339- String internalPatientId = drugOrder .optString ("internal_patient_id" , null );
2348+ String internalPatientId = new JSONObject ( drugOrderString ) .optString ("internal_patient_id" , null );
23402349 String externalPatientId = extractPatientIdFromResponse (response );
23412350
23422351 if (internalPatientId != null && !externalPatientId .isEmpty ()) {
23432352 updatePatientOPDNumber (internalPatientId , externalPatientId );
23442353 }
23452354
23462355 // Log successful sync
2347- logTransaction (syncTaskType , responseCode , null , drugOrder .get ("encounter_id" ).toString (), "Patient: " + externalPatientId + "'s Prescription has been created in eAFYA. eAFYA Server responded back with message: (" + response .get ("responseMessage" ).toString () + ")" , new Date (), url , false , false );
2356+ logTransaction (syncTaskType , responseCode , null , new JSONObject ( drugOrderString ) .get ("encounter_id" ).toString (), "Patient: " + externalPatientId + "'s Prescription has been created in eAFYA. eAFYA Server responded back with message: (" + response .get ("responseMessage" ).toString () + ")" , new Date (), url , false , false );
23482357 log .info (String .format ("Prescription for patient %s synced successfully. External ID: %s" ,
23492358 internalPatientId , externalPatientId ));
23502359 } else {
0 commit comments