Skip to content

Commit

Permalink
Adding requested changes
Browse files Browse the repository at this point in the history
  • Loading branch information
Ruhanga committed Jan 24, 2024
1 parent 62e6ce0 commit 4037894
Show file tree
Hide file tree
Showing 4 changed files with 66 additions and 50 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.openmrs.Location;
import org.openmrs.module.commonreports.ActivatedReportManager;
import org.openmrs.module.initializer.api.InitializerService;
import org.openmrs.module.reporting.common.DateUtil;
Expand Down Expand Up @@ -62,11 +64,16 @@ private Parameter getEndDateParameter() {
return new Parameter("endDate", "End Date", Date.class, null, DateUtil.parseDate(endDate, "yyyy-MM-dd"));
}

private Parameter getLocationParameter() {
return new Parameter("locationList", "Visit Location", Location.class, List.class, null);
}

@Override
public List<Parameter> getParameters() {
List<Parameter> params = new ArrayList<Parameter>();
params.add(getStartDateParameter());
params.add(getEndDateParameter());
params.add(getLocationParameter());
return params;
}

Expand All @@ -93,6 +100,7 @@ public ReportDefinition constructReportDefinition() {
Map<String, Object> parameterMappings = new HashMap<String, Object>();
parameterMappings.put("startDate", "${startDate}");
parameterMappings.put("endDate", "${endDate}");
parameterMappings.put("locationList", "${locationList}");

rd.addDataSetDefinition(getName(), sqlDsd, parameterMappings);

Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
-- Patients aged 40 and above with NCD form filled out for the first time
SELECT
'Patients aged 40 and above with NCD form filled out for the first time' AS 'Indicator',
'Registered patients aged 40 and above that have had their NCD screenign for the first time' AS 'Indicator',
CAST(COUNT(DISTINCT p.person_id) AS CHAR) AS 'Value'
FROM
encounter e
INNER JOIN
person p ON e.patient_id = p.person_id
WHERE
e.encounter_datetime > :startDate
e.location_id in (:locationList)
AND e.encounter_datetime > :startDate
AND e.encounter_datetime < :endDate
AND e.encounter_type = (
SELECT encounter_type_id
Expand All @@ -30,14 +31,15 @@ UNION ALL

-- Women aged 30 to 49 years with CCS form filled out for the first time
SELECT
'Women aged 30 to 49 years with CCS form filled out for the first time' AS 'Indicator',
'Registered women aged 30 to 49 years that have had their CCS screening for the first time' AS 'Indicator',
CAST(COUNT(DISTINCT p.person_id) AS CHAR) AS 'Value'
FROM
encounter e
INNER JOIN
person p ON e.patient_id = p.person_id
WHERE
e.encounter_datetime > :startDate
e.location_id in (:locationList)
AND e.encounter_datetime > :startDate
AND e.encounter_datetime < :endDate
AND e.encounter_type = (
SELECT encounter_type_id
Expand All @@ -60,7 +62,7 @@ UNION ALL

-- 80% (of women aged 30 to 49 years with CCS form filled out for the first time) were VIA positive, and referred
SELECT
'80% (of women aged 30 to 49 years with CCS form filled out for the first time) were VIA positive and referred' AS 'Indicator',
'80% (of registered patients with a Follow-up date) were given medication with at least a 3 weeks prescription' AS 'Indicator',
CASE
WHEN SUM(CASE
WHEN o_v_p.value_coded = (
Expand Down Expand Up @@ -101,7 +103,8 @@ LEFT OUTER JOIN
WHERE uuid LIKE '758b9dd8-b6d0-4ac2-b245-0e7bffb4693a'
)
WHERE
e.encounter_datetime > :startDate
e.location_id in (:locationList)
AND e.encounter_datetime > :startDate
AND e.encounter_datetime < :endDate
AND e.encounter_type = (
SELECT encounter_type_id
Expand All @@ -124,14 +127,10 @@ UNION ALL

-- 80% have a Follow-up date and were given medication at least 3 weeks ago
SELECT
'80% have a Follow-up date and were given medication at least 3 weeks ago' AS 'Indicator',
'80% (of registered women aged 30 to 49 years that have had their CCS screening for the first time) were VIA positive and referred' AS 'Indicator',
CASE
WHEN SUM(CASE
WHEN o_m.value_coded = (
SELECT concept_id
FROM concept
WHERE uuid LIKE '1065AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
) THEN 1
WHEN medication_table.medication_duration_in_weeks >= 3 THEN 1
ELSE 0
END) >= 0.8 * COUNT(*) THEN 'Yes'
ELSE 'No'
Expand All @@ -147,21 +146,22 @@ INNER JOIN
FROM concept
WHERE uuid LIKE 'e9c145c1-f4e9-4c34-b237-da069939dc38'
)
INNER JOIN
obs o_m ON e.encounter_id = o_m.encounter_id
AND o_m.concept_id = (
SELECT concept_id
FROM concept
WHERE uuid LIKE '805c3a0b-cd38-4ed6-b4f8-f3af0fc118ad'
)
AND o_m.value_coded = (
SELECT concept_id
FROM concept
WHERE uuid LIKE '1065AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
)
WHERE
LEFT OUTER JOIN
(
(o_f.value_datetime >= :startDate AND o_f.value_datetime <= :endDate)
AND (o_m.obs_datetime < DATE_SUB(:endDate, INTERVAL 3 WEEK))
OR (o_f.value_datetime >= :startDate AND o_f.value_datetime <= :endDate)
);
SELECT
CASE
WHEN c.uuid LIKE '1072AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' THEN (d_o.duration / 7)
WHEN c.uuid LIKE '1073AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' THEN d_o.duration
ELSE 0
END AS 'medication_duration_in_weeks',
o.encounter_id
FROM
drug_order d_o
INNER JOIN
orders o ON d_o.order_id = o.order_id
INNER JOIN
concept c ON d_o.duration_units = c.concept_id
) medication_table ON medication_table.encounter_id = e.encounter_id
WHERE
e.location_id in (:locationList)
AND o_f.value_datetime BETWEEN :startDate AND :endDate
Original file line number Diff line number Diff line change
@@ -1,25 +1,16 @@
package org.openmrs.module.commonreports.reports;

import static java.math.BigDecimal.ONE;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;

import java.io.File;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.Collections;
import java.util.Iterator;
import java.util.Map;
import java.util.Properties;

import org.hibernate.cfg.Environment;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.openmrs.Cohort;
import org.openmrs.api.ConceptService;
import org.openmrs.api.LocationService;
import org.openmrs.module.initializer.Domain;
import org.openmrs.module.initializer.api.InitializerService;
import org.openmrs.module.initializer.api.loaders.Loader;
Expand All @@ -32,7 +23,6 @@
import org.openmrs.module.reporting.report.definition.service.ReportDefinitionService;
import org.openmrs.module.reporting.report.manager.ReportManagerUtil;
import org.openmrs.module.reporting.report.service.ReportService;
import org.openmrs.test.BaseModuleContextSensitiveTest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;

Expand All @@ -47,6 +37,10 @@ public class DisbursementReportManagerTest extends BaseModuleContextSensitiveMys
@Autowired
private ReportDefinitionService rds;

@Autowired
@Qualifier("locationService")
private LocationService ls;

@Autowired
@Qualifier("conceptService")
private ConceptService cs;
Expand Down Expand Up @@ -86,12 +80,12 @@ public void testReport() throws Exception {
EvaluationContext context = new EvaluationContext();
context.addParameterValue("startDate", DateUtil.parseDate("2023-12-01", "yyyy-MM-dd"));
context.addParameterValue("endDate", DateUtil.parseDate("2024-04-28", "yyyy-MM-dd"));
context.addParameterValue("locationList", Collections.singletonList(ls.getLocation(1)));

// replay
ReportDefinition rd = manager.constructReportDefinition();
ReportData data = rds.evaluate(rd, context);
getConnection().commit();


// verify
boolean indicator1 = false;
boolean indicator2 = false;
Expand All @@ -101,22 +95,22 @@ public void testReport() throws Exception {
for (Iterator<DataSetRow> itr = ds.iterator(); itr.hasNext();) {
DataSetRow row = itr.next();

if (row.getColumnValue("Indicator").equals("Patients aged 40 and above with NCD form filled out for the first time")) {
if (row.getColumnValue("Indicator").equals("Registered patients aged 40 and above that have had their NCD screenign for the first time")) {
assertEquals("7", row.getColumnValue("Value"));
indicator1 = true;
}
if (row.getColumnValue("Indicator").equals("Women aged 30 to 49 years with CCS form filled out for the first time")) {
if (row.getColumnValue("Indicator").equals("Registered women aged 30 to 49 years that have had their CCS screening for the first time")) {
assertEquals("8", row.getColumnValue("Value"));
indicator2 = true;
}
if (row.getColumnValue("Indicator").equals("80% (of women aged 30 to 49 years with CCS form filled out for the first time) had their first CCS screening, were VIA positive and referred")) {
if (row.getColumnValue("Indicator").equals("80% (of registered patients with a Follow-up date) were given medication with at least a 3 weeks prescription")) {
assertEquals("Yes", row.getColumnValue("Value"));
indicator3 = true;
}
if (row.getColumnValue("Indicator").equals("80% have a Follow-up date and were given medication at least 3 weeks ago")) {
assertEquals("No", row.getColumnValue("Value"));
indicator4 = true;
}
if (row.getColumnValue("Indicator").equals("80% (of registered women aged 30 to 49 years that have had their CCS screening for the first time) were VIA positive and referred")) {
assertEquals("Yes", row.getColumnValue("Value"));
indicator3 = true;
}
}
assertTrue(indicator1 && indicator2 && indicator3 && indicator4);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,11 @@
<concept concept_id="874" retired="false" datatype_id="4" class_id="11" is_set="false" creator="1" date_created="2023-07-26 16:18:27.0" changed_by="1" date_changed="2023-12-13 14:13:45.0" uuid="98f853f9-75e4-466a-845a-db7ae958d1a0"/>
<concept concept_id="2379" retired="false" datatype_id="4" class_id="11" is_set="false" creator="1" date_created="2023-07-26 16:19:26.0" changed_by="1" date_changed="2023-12-13 14:15:38.0" uuid="da15c40f-e24b-4771-9986-d3ce5ca56b94"/>
<concept concept_id="732" retired="false" datatype_id="6" class_id="11" is_set="false" creator="1" date_created="2023-07-26 16:18:20.0" changed_by="1" date_changed="2023-09-22 09:04:33.0" uuid="e9c145c1-f4e9-4c34-b237-da069939dc38"/>
<concept concept_id="337" retired="false" datatype_id="4" class_id="11" is_set="false" creator="1" date_created="2023-07-26 16:17:29.0" changed_by="2" date_changed="2023-07-26 16:17:29.0" uuid="1072AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"/>
<concept concept_id="336" retired="false" datatype_id="4" class_id="11" is_set="false" creator="1" date_created="2023-07-26 16:17:29.0" changed_by="2" date_changed="2023-07-26 16:17:29.0" uuid="1073AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"/>

<concept_name concept_name_id="1839" concept_id="337" name="Days" locale="en" locale_preferred="true" creator="1" date_created="2023-07-26 16:17:29.0" concept_name_type="FULLY_SPECIFIED" voided="false" uuid="1146BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"/>
<concept_name concept_name_id="1835" concept_id="336" name="Weeks" locale="en" locale_preferred="true" creator="1" date_created="2023-07-26 16:17:29.0" concept_name_type="FULLY_SPECIFIED" voided="false" uuid="1147BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"/>
<concept_name concept_name_id="1316" concept_id="211" name="Yes" locale="en" locale_preferred="true" creator="1" date_created="2023-07-26 16:17:11.0" concept_name_type="FULLY_SPECIFIED" voided="false" date_voided="2023-09-22 09:03:53.0" uuid="1136BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"/>
<concept_name concept_name_id="3418" concept_id="210" name="No" locale="en" locale_preferred="true" creator="1" date_created="2023-07-26 16:18:22.0" concept_name_type="FULLY_SPECIFIED" voided="false" uuid="e89934f3-dab4-3016-a2d4-746aee18722c"/>
<concept_name concept_name_id="9989" concept_id="2381" name="VIA test results" locale="en" locale_preferred="true" creator="1" date_created="2023-07-26 16:19:26.0" concept_name_type="FULLY_SPECIFIED" voided="false" uuid="684047e0-f128-3231-a7f4-c2bd0e025661"/>
Expand Down Expand Up @@ -143,4 +147,14 @@

<obs obs_id="75275" person_id="3549" concept_id="2381" encounter_id="2780" obs_datetime="2023-12-29 07:14:54.0" location_id="1" value_coded="45" creator="1" date_created="2023-12-29 07:14:54.0" voided="false" uuid="be936002-8553-42f0-9a11-6188155dbf4f" form_namespace_and_path="O3^VIATestResults~81"/>
<obs obs_id="75276" person_id="3549" concept_id="2163" encounter_id="2780" obs_datetime="2023-12-29 07:14:54.0" location_id="1" value_coded="874" creator="1" date_created="2023-12-29 07:14:54.0" voided="false" uuid="345e5451-d59a-499f-a69f-1c9950773930" form_namespace_and_path="O3^referralSite~119"/>

<orders order_id="101" order_type_id="2" concept_id="3" orderer="1" encounter_id="2683" date_activated="2023-12-26 02:16:35.0" order_reason_non_coded="122" creator="1" date_created="2023-12-28 08:29:32.0" voided="false" patient_id="3382" uuid="6a202cca-da9e-411b-9e55-5b0cd29e2cb1" urgency="ROUTINE" order_number="ORD-1" order_action="NEW" care_setting="1"/>
<orders order_id="102" order_type_id="2" concept_id="3" orderer="1" encounter_id="2684" date_activated="2023-12-27 08:02:58.0" auto_expire_date="2024-01-04 08:48:23.0" order_reason_non_coded="106/73" creator="1" date_created="2023-12-28 08:48:24.0" voided="false" patient_id="3390" uuid="33df56eb-0bac-47c8-8cf9-9ac95c68fcd0" urgency="ROUTINE" order_number="ORD-2" order_action="NEW" care_setting="1"/>
<orders order_id="103" order_type_id="2" concept_id="3" orderer="1" encounter_id="2738" date_activated="2023-12-28 10:10:43.0" auto_expire_date="2024-01-13 04:17:08.0" order_reason_non_coded="160/100" creator="1" date_created="2023-12-29 04:18:20.0" voided="false" patient_id="3496" uuid="11fe0aa3-b2b2-4d16-a001-70dffad669a7" urgency="ROUTINE" order_number="ORD-3" order_action="NEW" care_setting="1"/>
<orders order_id="104" order_type_id="2" concept_id="3" orderer="1" encounter_id="2787" date_activated="2023-12-29 09:10:13.0" auto_expire_date="2024-01-13 04:17:08.0" order_reason_non_coded="160/100" creator="1" date_created="2023-12-29 04:18:20.0" voided="false" patient_id="3568" uuid="fe0aa311-b2b2-4d16-a001-70fad669a7df" urgency="ROUTINE" order_number="ORD-3" order_action="NEW" care_setting="1"/>

<drug_order order_id="101" drug_inventory_id="3" dose="100.0" as_needed="true" dosing_type="org.openmrs.SimpleDosingInstructions" quantity="0.0" num_refills="0" duration="40" duration_units="337" quantity_units="51" frequency="1" dispense_as_written="false"/>
<drug_order order_id="102" drug_inventory_id="2" dose="35.0" as_needed="false" dosing_type="org.openmrs.SimpleDosingInstructions" quantity="5.0" num_refills="7" duration="3" duration_units="336" quantity_units="51" frequency="1" dispense_as_written="false"/>
<drug_order order_id="103" drug_inventory_id="2" dose="50.0" as_needed="false" dosing_type="org.openmrs.SimpleDosingInstructions" quantity="30.0" num_refills="0" duration="23" duration_units="337" quantity_units="51" frequency="1" dispense_as_written="false"/>
<drug_order order_id="104" drug_inventory_id="3" dose="25.0" as_needed="false" dosing_type="org.openmrs.SimpleDosingInstructions" quantity="30.0" num_refills="0" duration="30" duration_units="337" quantity_units="51" frequency="1" dispense_as_written="false"/>
</dataset>

0 comments on commit 4037894

Please sign in to comment.