Skip to content
This repository was archived by the owner on Feb 11, 2026. It is now read-only.

Commit 91bcf89

Browse files
authored
Merge pull request #2340 from njorocs/moh705_717_204-alignment
Moh705 717 204 alignment
2 parents 032e2bb + 0c9d57b commit 91bcf89

File tree

11 files changed

+207
-124
lines changed

11 files changed

+207
-124
lines changed

api/src/main/java/org/openmrs/module/kenyaemr/reporting/builder/common/CaseSurveillanceReportBuilder.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ protected DataSetDefinition caseSurveillance() {
5656
cohortDsd.addParameter(new Parameter("startDate", "Start Date", Date.class));
5757
cohortDsd.addParameter(new Parameter("endDate", "End Date", Date.class));
5858
cohortDsd.setName("caseSurveillance");
59+
5960
cohortDsd.setDescription("Case Surveillance Report");
6061

6162
cohortDsd.addColumn("HIV+ and NOT Linked", "", ReportUtils.map(publicHealthActionIndicatorLibrary.notLinked(), "startDate=${startDate},endDate=${endDate}"), "");

api/src/main/java/org/openmrs/module/kenyaemr/reporting/builder/mchms/ANCRegisterReportBuilder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -287,7 +287,7 @@ protected DataSetDefinition datasetColumns() {
287287
dsd.addColumn("Haemoglobin", ancHaemoglobinDataDefinition, paramMapping);
288288
dsd.addColumn("Diabetes testing", ancDiabetesTestingDefinition, paramMapping);
289289
dsd.addColumn("Urinalysis", ancUrinalysisDataDefinition, paramMapping);
290-
dsd.addColumn("VDRL Done", ancSyphilisResultsDataDefinition, paramMapping);
290+
dsd.addColumn("VDRL Done", ancSyphilisTestDoneDataDefinition, paramMapping);
291291
dsd.addColumn("VDRL Results", ancSyphilisResultsDataDefinition, paramMapping);
292292
dsd.addColumn("HIV Testing", ancHIVTestTypeDataDefinition, paramMapping);
293293
dsd.addColumn("HIV Test One", ancHIVTestOneDataDefinition, paramMapping);

api/src/main/java/org/openmrs/module/kenyaemr/reporting/data/converter/definition/evaluator/anc/ANCDiabetesTestingDataEvaluator.java

Lines changed: 32 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -35,33 +35,38 @@ public class ANCDiabetesTestingDataEvaluator implements EncounterDataEvaluator {
3535
public EvaluatedEncounterData evaluate(EncounterDataDefinition definition, EvaluationContext context) throws EvaluationException {
3636
EvaluatedEncounterData c = new EvaluatedEncounterData(definition, context);
3737

38-
String qry = "SELECT\n" +
39-
" t.encounter_id,\n" +
40-
" t.blood_sugar\n" +
41-
"FROM (\n" +
42-
" SELECT\n" +
43-
" v.encounter_id,\n" +
44-
" COALESCE(\n" +
45-
" v.blood_glucose,\n" +
46-
" CASE v.blood_sugar_test\n" +
47-
" WHEN 1118 THEN 'No Diabetes'\n" +
48-
" WHEN 1175 THEN 'Not Done'\n" +
49-
" WHEN 0 THEN 'Has Diabetes'\n" +
50-
" END\n" +
51-
" ) AS blood_sugar\n" +
52-
" FROM kenyaemr_etl.etl_mch_antenatal_visit v\n" +
53-
" WHERE DATE(v.visit_date) BETWEEN DATE(:startDate) AND DATE(:endDate)\n" +
54-
" GROUP BY v.encounter_id\n" +
55-
" UNION ALL\n" +
56-
" SELECT\n" +
57-
" v.encounter_id,\n" +
58-
" l.result_name AS blood_sugar\n" +
59-
" FROM kenyaemr_etl.etl_laboratory_extract l\n" +
60-
" inner join kenyaemr_etl.etl_mch_antenatal_visit v on v.visit_date = l.visit_date and v.patient_id = l.patient_id\n" +
61-
" WHERE l.lab_test = 1000443\n" +
62-
" AND DATE(l.date_test_requested) BETWEEN DATE(:startDate) AND DATE(:endDate)\n" +
63-
" GROUP BY l.encounter_id\n" +
64-
" ) t;";
38+
String qry = "WITH lab AS (\n" +
39+
" SELECT\n" +
40+
" l.patient_id,\n" +
41+
" DATE(l.visit_date) AS visit_date,\n" +
42+
" l.result_name,\n" +
43+
" ROW_NUMBER() OVER (\n" +
44+
" PARTITION BY l.patient_id, DATE(l.visit_date)\n" +
45+
" ORDER BY l.date_test_result_received DESC, l.date_test_requested DESC\n" +
46+
" ) AS rn\n" +
47+
" FROM kenyaemr_etl.etl_laboratory_extract l\n" +
48+
" WHERE l.lab_test = '1000443'\n" +
49+
" AND DATE(l.date_test_requested) BETWEEN DATE(:startDate) AND DATE(:endDate)\n" +
50+
")\n" +
51+
"SELECT\n" +
52+
" v.encounter_id,\n" +
53+
" COALESCE(\n" +
54+
" if(lo.result_name > 11.1, '>11.1 mmol/L',if(lo.result_name <= 11.1, '<=11.1 mmol/L',lo.result_name)) ,\n" +
55+
" COALESCE(\n" +
56+
" v.blood_glucose,\n" +
57+
" CASE v.blood_sugar_test\n" +
58+
" WHEN 1118 THEN 'No Diabetes'\n" +
59+
" WHEN 1175 THEN 'Not Done'\n" +
60+
" WHEN 119481 THEN 'Has Diabetes'\n" +
61+
" END\n" +
62+
" )\n" +
63+
" ) AS blood_sugar\n" +
64+
"FROM kenyaemr_etl.etl_mch_antenatal_visit v\n" +
65+
" LEFT JOIN lab lo\n" +
66+
" ON lo.patient_id = v.patient_id\n" +
67+
" AND lo.visit_date = DATE(v.visit_date)\n" +
68+
" AND lo.rn = 1\n" +
69+
"WHERE DATE(v.visit_date) BETWEEN DATE(:startDate) AND DATE(:endDate);";
6570

6671
SqlQueryBuilder queryBuilder = new SqlQueryBuilder();
6772
queryBuilder.append(qry);

api/src/main/java/org/openmrs/module/kenyaemr/reporting/data/converter/definition/evaluator/anc/ANCFinalTestResultsDataEvaluator.java

Lines changed: 30 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,36 @@ public class ANCFinalTestResultsDataEvaluator implements EncounterDataEvaluator
3535
public EvaluatedEncounterData evaluate(EncounterDataDefinition definition, EvaluationContext context) throws EvaluationException {
3636
EvaluatedEncounterData c = new EvaluatedEncounterData(definition, context);
3737

38-
String qry = "select\n" +
39-
" v.encounter_id,\n" +
40-
" v.final_test_result\n" +
41-
" from kenyaemr_etl.etl_mch_antenatal_visit v where date(v.visit_date) between date(:startDate) and date(:endDate);";
38+
String qry = "WITH lab AS (\n" +
39+
" SELECT\n" +
40+
" l.patient_id,\n" +
41+
" DATE(l.visit_date) AS visit_date,\n" +
42+
" l.test_result AS lab_test_result,\n" +
43+
" ROW_NUMBER() OVER (\n" +
44+
" PARTITION BY l.patient_id, DATE(l.visit_date)\n" +
45+
" ORDER BY l.date_test_result_received DESC, l.date_test_requested DESC\n" +
46+
" ) AS rn\n" +
47+
" FROM kenyaemr_etl.etl_laboratory_extract l\n" +
48+
" WHERE l.lab_test = '1356'\n" +
49+
" AND DATE(l.date_test_requested) BETWEEN DATE(:startDate) AND DATE(:endDate)\n" +
50+
"),\n" +
51+
" anc AS (\n" +
52+
" SELECT\n" +
53+
" v.encounter_id,\n" +
54+
" v.patient_id,\n" +
55+
" DATE(v.visit_date) AS visit_date,\n" +
56+
" v.final_test_result AS anc_hiv_final_results\n" +
57+
" FROM kenyaemr_etl.etl_mch_antenatal_visit v\n" +
58+
" WHERE DATE(v.visit_date) BETWEEN DATE(:startDate) AND DATE(:endDate)\n" +
59+
" )\n" +
60+
"SELECT\n" +
61+
" a.encounter_id,\n" +
62+
" COALESCE(lo.lab_test_result, a.anc_hiv_final_results, 'NA') AS hiv_test_results\n" +
63+
"FROM anc a\n" +
64+
" LEFT JOIN lab lo\n" +
65+
" ON lo.patient_id = a.patient_id\n" +
66+
" AND lo.visit_date = a.visit_date\n" +
67+
" AND lo.rn = 1;";
4268

4369
SqlQueryBuilder queryBuilder = new SqlQueryBuilder();
4470
queryBuilder.append(qry);

api/src/main/java/org/openmrs/module/kenyaemr/reporting/data/converter/definition/evaluator/anc/ANCHaemoglobinDataEvaluator.java

Lines changed: 30 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,11 +35,36 @@ public class ANCHaemoglobinDataEvaluator implements EncounterDataEvaluator {
3535
public EvaluatedEncounterData evaluate(EncounterDataDefinition definition, EvaluationContext context) throws EvaluationException {
3636
EvaluatedEncounterData c = new EvaluatedEncounterData(definition, context);
3737

38-
String qry = "select MAX(v.encounter_id) as encounter_id,\n" +
39-
" MID(MAX(CONCAT(v.visit_date, v.hemoglobin)), 11) as hemoglobin\n" +
40-
"from kenyaemr_etl.etl_mch_antenatal_visit v\n" +
41-
"where date(v.visit_date) between date(:startDate) and date(:endDate)\n" +
42-
"GROUP BY v.encounter_id;";
38+
String qry = "WITH lab AS (\n" +
39+
" SELECT\n" +
40+
" l.patient_id,\n" +
41+
" DATE(l.visit_date) AS visit_date,\n" +
42+
" l.test_result AS lab_test_result,\n" +
43+
" ROW_NUMBER() OVER (\n" +
44+
" PARTITION BY l.patient_id, DATE(l.visit_date)\n" +
45+
" ORDER BY l.date_test_result_received DESC, l.date_test_requested DESC\n" +
46+
" ) AS rn\n" +
47+
" FROM kenyaemr_etl.etl_laboratory_extract l\n" +
48+
" WHERE l.lab_test = '21'\n" +
49+
" AND DATE(l.date_test_requested) BETWEEN DATE(:startDate) AND DATE(:endDate)\n" +
50+
"),\n" +
51+
" anc AS (\n" +
52+
" SELECT\n" +
53+
" v.encounter_id,\n" +
54+
" v.patient_id,\n" +
55+
" DATE(v.visit_date) AS visit_date,\n" +
56+
" v.hemoglobin AS anc_hemoglobin\n" +
57+
" FROM kenyaemr_etl.etl_mch_antenatal_visit v\n" +
58+
" WHERE DATE(v.visit_date) BETWEEN DATE(:startDate) AND DATE(:endDate)\n" +
59+
" )\n" +
60+
"SELECT\n" +
61+
" a.encounter_id,\n" +
62+
" COALESCE(lo.lab_test_result, a.anc_hemoglobin, 'ND') AS hemoglobin\n" +
63+
"FROM anc a\n" +
64+
" LEFT JOIN lab lo\n" +
65+
" ON lo.patient_id = a.patient_id\n" +
66+
" AND lo.visit_date = a.visit_date\n" +
67+
" AND lo.rn = 1;";
4368

4469
SqlQueryBuilder queryBuilder = new SqlQueryBuilder();
4570
queryBuilder.append(qry);

api/src/main/java/org/openmrs/module/kenyaemr/reporting/data/converter/definition/evaluator/anc/ANCHepatitisBScreenedDataEvaluator.java

Lines changed: 40 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -35,14 +35,46 @@ public class ANCHepatitisBScreenedDataEvaluator implements EncounterDataEvaluato
3535
public EvaluatedEncounterData evaluate(EncounterDataDefinition definition, EvaluationContext context) throws EvaluationException {
3636
EvaluatedEncounterData c = new EvaluatedEncounterData(definition, context);
3737

38-
String qry = "select v.encounter_id,\n" +
39-
" (case v.hepatitis_b_screening\n" +
40-
" when 703 then 'P'\n" +
41-
" when 664 then 'N'\n" +
42-
" when 165649 then 'I'\n" +
43-
" else 'ND' end) as hepatitis_b_screening\n" +
44-
"from kenyaemr_etl.etl_mch_antenatal_visit v\n" +
45-
"where date(v.visit_date) between date(:startDate) and date(:endDate);";
38+
String qry = "WITH lab AS (\n" +
39+
" SELECT\n" +
40+
" l.patient_id,\n" +
41+
" DATE(l.visit_date) AS visit_date,\n" +
42+
" CASE l.test_result\n" +
43+
" WHEN 664 THEN 'N'\n" +
44+
" WHEN 703 THEN 'P'\n" +
45+
" WHEN 1138 THEN 'I'\n" +
46+
" ELSE NULL\n" +
47+
" END AS lab_test_result,\n" +
48+
" ROW_NUMBER() OVER (\n" +
49+
" PARTITION BY l.patient_id, DATE(l.visit_date)\n" +
50+
" ORDER BY l.date_test_result_received DESC, l.date_test_requested DESC\n" +
51+
" ) AS rn\n" +
52+
" FROM kenyaemr_etl.etl_laboratory_extract l\n" +
53+
" WHERE l.lab_test = '159430'\n" +
54+
" AND DATE(l.date_test_requested) BETWEEN DATE(:startDate) AND DATE(:endDate)\n" +
55+
"),\n" +
56+
" anc AS (\n" +
57+
" SELECT\n" +
58+
" v.encounter_id,\n" +
59+
" v.patient_id,\n" +
60+
" DATE(v.visit_date) AS visit_date,\n" +
61+
" CASE v.hepatitis_b_screening\n" +
62+
" WHEN 703 THEN 'P'\n" +
63+
" WHEN 664 THEN 'N'\n" +
64+
" WHEN 165649 THEN 'I'\n" +
65+
" ELSE NULL\n" +
66+
" END AS anc_test_result\n" +
67+
" FROM kenyaemr_etl.etl_mch_antenatal_visit v\n" +
68+
" WHERE DATE(v.visit_date) BETWEEN DATE(:startDate) AND DATE(:endDate)\n" +
69+
" )\n" +
70+
"SELECT\n" +
71+
" a.encounter_id,\n" +
72+
" COALESCE(lo.lab_test_result, a.anc_test_result, 'ND') AS HepB_Screening\n" +
73+
"FROM anc a\n" +
74+
" LEFT JOIN lab lo\n" +
75+
" ON lo.patient_id = a.patient_id\n" +
76+
" AND lo.visit_date = a.visit_date\n" +
77+
" AND lo.rn = 1;";
4678

4779
SqlQueryBuilder queryBuilder = new SqlQueryBuilder();
4880
queryBuilder.append(qry);

api/src/main/java/org/openmrs/module/kenyaemr/reporting/data/converter/definition/evaluator/anc/ANCUrinalysisDataEvaluator.java

Lines changed: 30 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -35,21 +35,36 @@ public class ANCUrinalysisDataEvaluator implements EncounterDataEvaluator {
3535
public EvaluatedEncounterData evaluate(EncounterDataDefinition definition, EvaluationContext context) throws EvaluationException {
3636
EvaluatedEncounterData c = new EvaluatedEncounterData(definition, context);
3737

38-
String qry = "select v.encounter_id,\n" +
39-
" if(v.urine_microscopy is not null or v.urinary_albumin is not null or v.glucose_measurement is not null\n" +
40-
" or v.urine_ph is not null or v.urine_gravity is not null or v.urine_nitrite_test is not null\n" +
41-
" or v.urine_dipstick_for_blood is not null or v.urine_leukocyte_esterace_test is not null or\n" +
42-
" v.urinary_ketone is not null\n" +
43-
" or v.urine_bile_pigment_test is not null or v.urine_bile_salt_test is not null or\n" +
44-
" v.urine_colour is not null or v.urine_turbidity is not null, 'Y', 'N') as urinalysis\n" +
45-
"from kenyaemr_etl.etl_mch_antenatal_visit v\n" +
46-
"where date(v.visit_date) between date(:startDate) and date(:endDate)\n" +
47-
"UNION ALL\n" +
48-
"select v.encounter_id, if(l.lab_test = 1000073, 'Y', 'N') as urinalysis\n" +
49-
"from kenyaemr_etl.etl_laboratory_extract l\n" +
50-
" join kenyaemr_etl.etl_mch_antenatal_visit v on l.patient_id = v.patient_id and l.visit_date = v.visit_date\n" +
51-
"where DATE(l.date_test_requested) between DATE(:startDate) and DATE(:endDate)\n" +
52-
"group by v.encounter_id;";
38+
String qry = "SELECT\n" +
39+
" v.encounter_id,\n" +
40+
" IF(\n" +
41+
" (\n" +
42+
" v.urine_microscopy IS NOT NULL\n" +
43+
" OR v.urinary_albumin IS NOT NULL\n" +
44+
" OR v.glucose_measurement IS NOT NULL\n" +
45+
" OR v.urine_ph IS NOT NULL\n" +
46+
" OR v.urine_gravity IS NOT NULL\n" +
47+
" OR v.urine_nitrite_test IS NOT NULL\n" +
48+
" OR v.urine_dipstick_for_blood IS NOT NULL\n" +
49+
" OR v.urine_leukocyte_esterace_test IS NOT NULL\n" +
50+
" OR v.urinary_ketone IS NOT NULL\n" +
51+
" OR v.urine_bile_pigment_test IS NOT NULL\n" +
52+
" OR v.urine_bile_salt_test IS NOT NULL\n" +
53+
" OR v.urine_colour IS NOT NULL\n" +
54+
" OR v.urine_turbidity IS NOT NULL\n" +
55+
" )\n" +
56+
" OR EXISTS (\n" +
57+
" SELECT 1\n" +
58+
" FROM kenyaemr_etl.etl_laboratory_extract l\n" +
59+
" WHERE l.patient_id = v.patient_id\n" +
60+
" AND DATE(l.visit_date) = DATE(v.visit_date)\n" +
61+
" AND l.lab_test = '1000073'\n" +
62+
" AND DATE(l.date_test_requested) BETWEEN DATE(:startDate) AND DATE(:endDate)\n" +
63+
" ),\n" +
64+
" 'Y', 'N'\n" +
65+
" ) AS urinalysis\n" +
66+
"FROM kenyaemr_etl.etl_mch_antenatal_visit v\n" +
67+
"WHERE DATE(v.visit_date) BETWEEN DATE(:startDate) AND DATE(:endDate);";
5368

5469
SqlQueryBuilder queryBuilder = new SqlQueryBuilder();
5570
queryBuilder.append(qry);

api/src/main/java/org/openmrs/module/kenyaemr/reporting/data/converter/definition/evaluator/anc/ANCVDRLDoneDataEvaluator.java

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -38,15 +38,26 @@ public EvaluatedEncounterData evaluate(EncounterDataDefinition definition, Evalu
3838
String qry = "SELECT\n" +
3939
" v.encounter_id,\n" +
4040
" CASE\n" +
41+
" WHEN v.syphilis_test_status IS NOT NULL AND COALESCE(l.has_vdrl, 0) = 1 THEN 'Duo Test & VDRL'\n" +
4142
" WHEN v.syphilis_test_status IS NOT NULL THEN 'Duo Test'\n" +
42-
" WHEN x.patient_id IS NOT NULL THEN 'VDRL'\n" +
43-
" WHEN x.patient_id IS NOT NULL AND v.syphilis_test_status IS NOT NULL THEN 'Duo Test & VDRL'\n" +
43+
" WHEN COALESCE(l.has_vdrl, 0) = 1 THEN 'VDRL'\n" +
4444
" END AS syphilis\n" +
4545
"FROM kenyaemr_etl.etl_mch_antenatal_visit v\n" +
46-
" LEFT JOIN kenyaemr_etl.etl_laboratory_extract x\n" +
47-
" ON x.patient_id = v.patient_id\n" +
48-
" AND DATE(x.date_test_requested) BETWEEN DATE(:startDate) AND DATE(:endDate)\n" +
49-
" AND x.lab_test = 299\n" +
46+
" LEFT JOIN (\n" +
47+
" SELECT\n" +
48+
" x.encounter_id,\n" +
49+
" x.patient_id,\n" +
50+
" DATE(x.date_test_requested) AS test_date,\n" +
51+
" 1 AS has_vdrl\n" +
52+
" FROM kenyaemr_etl.etl_laboratory_extract x\n" +
53+
" WHERE x.lab_test = 299\n" +
54+
" AND DATE(x.date_test_requested) BETWEEN DATE(:startDate) AND DATE(:endDate)\n" +
55+
" GROUP BY x.encounter_id, x.patient_id, DATE(x.date_test_requested)\n" +
56+
") l\n" +
57+
" ON (\n" +
58+
" (l.encounter_id IS NOT NULL AND l.encounter_id = v.encounter_id)\n" +
59+
" OR (l.encounter_id IS NULL AND l.patient_id = v.patient_id AND l.test_date = DATE(v.visit_date))\n" +
60+
" )\n" +
5061
"WHERE DATE(v.visit_date) BETWEEN DATE(:startDate) AND DATE(:endDate);";
5162

5263
SqlQueryBuilder queryBuilder = new SqlQueryBuilder();

0 commit comments

Comments
 (0)