Skip to content

Commit

Permalink
Merge pull request #1930 from njorocs/moh717
Browse files Browse the repository at this point in the history
Added Outpatient and MCH indicators
  • Loading branch information
njorocs authored Jun 26, 2024
2 parents 61108f2 + 508f546 commit 8f50ef5
Show file tree
Hide file tree
Showing 6 changed files with 294 additions and 16 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,8 @@
import org.openmrs.module.kenyacore.report.ReportUtils;
import org.openmrs.module.kenyacore.report.builder.AbstractReportBuilder;
import org.openmrs.module.kenyacore.report.builder.Builds;
import org.openmrs.module.kenyaemr.reporting.MohReportUtils.ReportingUtils;
import org.openmrs.module.kenyaemr.reporting.ColumnParameters;
import org.openmrs.module.kenyaemr.reporting.EmrReportingUtils;
import org.openmrs.module.kenyaemr.reporting.library.moh717.Moh717CohortLibrary;
import org.openmrs.module.kenyaemr.reporting.library.moh717.Moh717IndicatorLibrary;
import org.openmrs.module.kenyaemr.reporting.library.shared.common.CommonDimensionLibrary;
Expand Down Expand Up @@ -46,6 +47,17 @@ public class MOH717ReportBuilder extends AbstractReportBuilder {

private final Moh717IndicatorLibrary moh717IndicatorLibrary;

ColumnParameters femaleChildrenUnder5 = new ColumnParameters(null, "<5", "age=<5|gender=F");
ColumnParameters maleChildrenUnder5 = new ColumnParameters(null, "<5", "age=<5|gender=M");
ColumnParameters females5To59 = new ColumnParameters(null, "5-59, Female", "gender=F|age=5-59");
ColumnParameters males5To59 = new ColumnParameters(null, "5-59, Male", "gender=M|age=5-59");
ColumnParameters over60 = new ColumnParameters(null, ">60", "age=60+");

ColumnParameters colTotal = new ColumnParameters(null, "Total", "");

List<ColumnParameters> moh717Disaggregations = Arrays.asList(males5To59, females5To59,
maleChildrenUnder5, femaleChildrenUnder5, over60, colTotal);

@Autowired
public MOH717ReportBuilder(Moh717CohortLibrary moh717CohortLibrary, CommonDimensionLibrary commonDimensionLibrary, Moh717IndicatorLibrary moh717IndicatorLibrary) {
this.moh717CohortLibrary = moh717CohortLibrary;
Expand Down Expand Up @@ -78,13 +90,41 @@ private DataSetDefinition moh717DatasetDefinition() {
dsd.addDimension("gender", map(commonDimensionLibrary.gender(), ""));
dsd.addDimension("state", map(commonDimensionLibrary.newOrRevisits(), "startDate=${startDate},endDate=${endDate}"));

EmrReportingUtils.addRow(dsd, "General OP New", "",
ReportUtils.map(moh717IndicatorLibrary.getPatientsWithNewClinicalEncounterWithinReportingPeriod(), indParams), moh717Disaggregations, Arrays.asList("01", "02", "03", "04", "05","06"));

EmrReportingUtils.addRow(dsd, "General OP RE-ATT", "",
ReportUtils.map(moh717IndicatorLibrary.getPatientsWithReturnClinicalEncounterWithinReportingPeriod(), indParams), moh717Disaggregations, Arrays.asList("01", "02", "03", "04", "05","06"));

dsd.addColumn("New CWC Visits", "",
ReportUtils.map(moh717IndicatorLibrary.newCWCVisits(), indParams), "");
dsd.addColumn( "CWC RE-ATT", "",
ReportUtils.map(moh717IndicatorLibrary.cwcRevisits(), indParams), "");
dsd.addColumn( "New ANC Visits", "",
ReportUtils.map(moh717IndicatorLibrary.newANCVisits(), indParams), "");
dsd.addColumn( "ANC RE-ATT", "",
ReportUtils.map(moh717IndicatorLibrary.ancRevisits(), indParams),"");
dsd.addColumn("New PNC Visits", "",
ReportUtils.map(moh717IndicatorLibrary.newPNCVisits(), indParams), "");
dsd.addColumn( "PNC RE-ATT", "",
ReportUtils.map(moh717IndicatorLibrary.pncReVisits(), indParams), "");

// Maternity Services
dsd.addColumn( "Normal Deliveries", "", ReportUtils.map(moh717IndicatorLibrary.normalDeliveries(), indParams), "");
dsd.addColumn( "Caesarean sections", "", ReportUtils.map(moh717IndicatorLibrary.caesareanSections(), indParams), "");
dsd.addColumn( "Breech Deliveries", "", ReportUtils.map(moh717IndicatorLibrary.breechDeliveries(), indParams), "");
dsd.addColumn( "Assisted Vaginal Delivery", "", ReportUtils.map(moh717IndicatorLibrary.assistedVaginalDelivery(), indParams), "");
dsd.addColumn( "Born before arrival", "", ReportUtils.map(moh717IndicatorLibrary.bornBeforeArrival(), indParams), "");
dsd.addColumn( "Maternal deaths", "", ReportUtils.map(moh717IndicatorLibrary.maternalDeaths(), indParams), "");
dsd.addColumn( "Maternal deaths Audited", "", ReportUtils.map(moh717IndicatorLibrary.maternalDeathsAudited(), indParams), "");
dsd.addColumn( "Live births", "", ReportUtils.map(moh717IndicatorLibrary.liveBirths(), indParams), "");
dsd.addColumn( "Still births", "", ReportUtils.map(moh717IndicatorLibrary.stillBirths(), indParams), "");
dsd.addColumn( "Low Birth weight babies", "", ReportUtils.map(moh717IndicatorLibrary.lowBirthWeightBabies(), indParams), "");
dsd.addColumn( "Total Discharges (new born)", "", ReportUtils.map(moh717IndicatorLibrary.totalDischarges(), indParams), "");

dsd.addColumn( "Number of Laboratory tests", "", ReportUtils.map(moh717IndicatorLibrary.laboratoryTests(), indParams), "");


ReportingUtils.addRow(dsd, "OSN", "OUTPATIENT SERVICES NEW PATIENTS",
ReportUtils.map(moh717IndicatorLibrary.getAllPatientsWithEncountersWithinReportingPeriod(), indParams), getGeneralOutPatientFilters());

ReportingUtils.addRow(dsd, "OSR", "OUTPATIENT SERVICES REVIST PATIENTS",
ReportUtils.map(moh717IndicatorLibrary.getAllPatientsWithEncountersWithinReportingPeriod(), indParams), getGeneralOutPatientFilters());
return dsd;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,9 @@
*/
package org.openmrs.module.kenyaemr.reporting.library.moh717;

import org.openmrs.module.kenyacore.report.ReportUtils;
import org.openmrs.module.reporting.cohort.definition.CohortDefinition;
import org.openmrs.module.reporting.cohort.definition.CompositionCohortDefinition;
import org.openmrs.module.reporting.cohort.definition.SqlCohortDefinition;
import org.openmrs.module.reporting.evaluation.parameter.Parameter;
import org.springframework.stereotype.Component;
Expand All @@ -19,18 +21,193 @@
@Component
public class Moh717CohortLibrary {

public CohortDefinition getAllPatientsWithEncountersWithinReportingPeriod() {
public CohortDefinition getPatientsWithNewClinicalEncounterWithinReportingPeriod() {
SqlCohortDefinition sql = new SqlCohortDefinition();
sql.setName("Patients with encounters within date period");
sql.setName("Patients with new encounters within date period");
sql.addParameter(new Parameter("startDate", "Start Date", Date.class));
sql.addParameter(new Parameter("endDate", "End Date", Date.class));
sql.setQuery(
"SELECT p.patient_id FROM patient p "
+ " INNER JOIN encounter e ON p.patient_id=e.patient_id "
+ " WHERE e.encounter_datetime <= :endDate "
+ " AND p.voided = 0 AND e.voided = 0"
"SELECT e.patient_id FROM kenyaemr_etl.etl_clinical_encounter e WHERE e.visit_type = 'New visit' and e.visit_date BETWEEN date(:startDate) and date(:endDate);"
);
return sql;
}
public CohortDefinition getPatientsWithReturnClinicalEncounterWithinReportingPeriod() {
SqlCohortDefinition sql = new SqlCohortDefinition();
sql.setName("Patients with return encounters within date period");
sql.addParameter(new Parameter("startDate", "Start Date", Date.class));
sql.addParameter(new Parameter("endDate", "End Date", Date.class));
sql.setQuery(
"SELECT e.patient_id FROM kenyaemr_etl.etl_clinical_encounter e WHERE e.visit_type = 'Revisit' and e.visit_date BETWEEN date(:startDate) and date(:endDate);"
);
return sql;
}

public CohortDefinition newANCVisits() {
SqlCohortDefinition sql = new SqlCohortDefinition();
sql.setName("Patients with new cwc visits");
sql.addParameter(new Parameter("startDate", "Start Date", Date.class));
sql.addParameter(new Parameter("endDate", "End Date", Date.class));
sql.setQuery(
"select v.patient_id from kenyaemr_etl.etl_mch_antenatal_visit v where date(v.visit_date) between date(:startDate) and date(:endDate) and v.anc_visit_number = 1;"
);
return sql;
}

public CohortDefinition ancRevisits() {
SqlCohortDefinition sql = new SqlCohortDefinition();
sql.setName("Patients with ANC revisit");
sql.addParameter(new Parameter("startDate", "Start Date", Date.class));
sql.addParameter(new Parameter("endDate", "End Date", Date.class));
sql.setQuery(
"select v.patient_id from kenyaemr_etl.etl_mch_antenatal_visit v where date(v.visit_date) between date(:startDate) and date(:endDate) and v.anc_visit_number > 1;"
);
return sql;
}

public CohortDefinition newPNCVisits() {
SqlCohortDefinition sql = new SqlCohortDefinition();
sql.setName("Patients with new PNC visits");
sql.addParameter(new Parameter("startDate", "Start Date", Date.class));
sql.addParameter(new Parameter("endDate", "End Date", Date.class));
sql.setQuery(
"select v.patient_id from kenyaemr_etl.etl_mch_postnatal_visit v where date(v.visit_date) between date(:startDate) and date(:endDate) and v.pnc_visit_no = 1;"
);
return sql;
}

public CohortDefinition pncReVisits() {
SqlCohortDefinition sql = new SqlCohortDefinition();
sql.setName("Patients with PNC re-visits");
sql.addParameter(new Parameter("startDate", "Start Date", Date.class));
sql.addParameter(new Parameter("endDate", "End Date", Date.class));
sql.setQuery(
"select v.patient_id from kenyaemr_etl.etl_mch_postnatal_visit v where date(v.visit_date) between date(:startDate) and date(:endDate) and v.pnc_visit_no > 1;"
);
return sql;
}


public CohortDefinition newCWCVisits() {
SqlCohortDefinition sql = new SqlCohortDefinition();
sql.setName("Patients with new cwc visits");
sql.addParameter(new Parameter("startDate", "Start Date", Date.class));
sql.addParameter(new Parameter("endDate", "End Date", Date.class));
sql.setQuery(
"select v.patient_id from kenyaemr_etl.etl_hei_follow_up_visit v where date(v.visit_date) between date(:startDate) and date(:endDate) and v.revisit_this_year = 1066;"
);
return sql;
}

public CohortDefinition cwcRevisits() {
SqlCohortDefinition sql = new SqlCohortDefinition();
sql.setName("Patients with cwc re-visits");
sql.addParameter(new Parameter("startDate", "Start Date", Date.class));
sql.addParameter(new Parameter("endDate", "End Date", Date.class));
sql.setQuery(
"select v.patient_id from kenyaemr_etl.etl_hei_follow_up_visit v where date(v.visit_date) between date(:startDate) and date(:endDate) and v.revisit_this_year = 1065;"
);
return sql;
}

public CohortDefinition normalDeliveries() {
SqlCohortDefinition sql = new SqlCohortDefinition();
sql.setName("Normal Deliveries");
sql.addParameter(new Parameter("startDate", "Start Date", Date.class));
sql.addParameter(new Parameter("endDate", "End Date", Date.class));
sql.setQuery("select d.patient_id from kenyaemr_etl.etl_mchs_delivery d where d.mode_of_delivery = 1170 and d.visit_date between date(:startDate) and date(:endDate);");
return sql;
}
}
public CohortDefinition caesareanSections() {
SqlCohortDefinition sql = new SqlCohortDefinition();
sql.setName("Caesarean Sections");
sql.addParameter(new Parameter("startDate", "Start Date", Date.class));
sql.addParameter(new Parameter("endDate", "End Date", Date.class));
sql.setQuery("select d.patient_id from kenyaemr_etl.etl_mchs_delivery d where d.mode_of_delivery = 1171 and d.visit_date between date(:startDate) and date(:endDate);");
return sql;
}
public CohortDefinition breechDeliveries() {
SqlCohortDefinition sql = new SqlCohortDefinition();
sql.setName("Breech Deliveries");
sql.addParameter(new Parameter("startDate", "Start Date", Date.class));
sql.addParameter(new Parameter("endDate", "End Date", Date.class));
sql.setQuery("select d.patient_id from kenyaemr_etl.etl_mchs_delivery d where d.mode_of_delivery = 1172 and d.visit_date between date(:startDate) and date(:endDate);");
return sql;
}
public CohortDefinition assistedVaginalDelivery() {
SqlCohortDefinition sql = new SqlCohortDefinition();
sql.setName("Assisted vaginal Deliveries");
sql.addParameter(new Parameter("startDate", "Start Date", Date.class));
sql.addParameter(new Parameter("endDate", "End Date", Date.class));
sql.setQuery("select d.patient_id from kenyaemr_etl.etl_mchs_delivery d where d.mode_of_delivery = 118159 and d.visit_date between date(:startDate) and date(:endDate);");
return sql;
}
public CohortDefinition bornBeforeArrival() {
SqlCohortDefinition sql = new SqlCohortDefinition();
sql.setName("Born before arrival");
sql.addParameter(new Parameter("startDate", "Start Date", Date.class));
sql.addParameter(new Parameter("endDate", "End Date", Date.class));
sql.setQuery("select d.patient_id from kenyaemr_etl.etl_mchs_delivery d where d.place_of_delivery = 1601 and d.visit_date between date(:startDate) and date(:endDate);");
return sql;
}
public CohortDefinition maternalDeaths() {
SqlCohortDefinition sql = new SqlCohortDefinition();
sql.setName("Maternal Deaths");
sql.addParameter(new Parameter("startDate", "Start Date", Date.class));
sql.addParameter(new Parameter("endDate", "End Date", Date.class));
sql.setQuery("select d.patient_id from kenyaemr_etl.etl_mchs_delivery d where d.condition_of_mother = 134612 and d.visit_date between date(:startDate) and date(:endDate);");
return sql;
}

public CohortDefinition maternalDeathsAudited() {
SqlCohortDefinition sql = new SqlCohortDefinition();
sql.setName("Maternal Deaths Audited");
sql.addParameter(new Parameter("startDate", "Start Date", Date.class));
sql.addParameter(new Parameter("endDate", "End Date", Date.class));
sql.setQuery("select d.patient_id from kenyaemr_etl.etl_mchs_delivery d where d.maternal_death_audited = 1065 and d.visit_date between date(:startDate) and date(:endDate);");
return sql;
}
public CohortDefinition liveBirths() {
SqlCohortDefinition sql = new SqlCohortDefinition();
sql.setName("Live births");
sql.addParameter(new Parameter("startDate", "Start Date", Date.class));
sql.addParameter(new Parameter("endDate", "End Date", Date.class));
sql.setQuery("select d.patient_id from kenyaemr_etl.etl_mchs_delivery d where d.baby_condition = 151849 and d.visit_date between date(:startDate) and date(:endDate);");
return sql;
}

public CohortDefinition stillBirths() {
SqlCohortDefinition sql = new SqlCohortDefinition();
sql.setName("Still births");
sql.addParameter(new Parameter("startDate", "Start Date", Date.class));
sql.addParameter(new Parameter("endDate", "End Date", Date.class));
sql.setQuery("select d.patient_id from kenyaemr_etl.etl_mchs_delivery d where d.baby_condition in (159916,135436) and d.visit_date between date(:startDate) and date(:endDate);");
return sql;
}

public CohortDefinition lowBirthWeightBabies() {
SqlCohortDefinition sql = new SqlCohortDefinition();
sql.setName("Low births weights");
sql.addParameter(new Parameter("startDate", "Start Date", Date.class));
sql.addParameter(new Parameter("endDate", "End Date", Date.class));
sql.setQuery("select d.patient_id from kenyaemr_etl.etl_mchs_delivery d where (d.birth_weight) * 1000 < 2500 and d.visit_date between date(:startDate) and date(:endDate);");
return sql;
}

public CohortDefinition totalDischarges() {
SqlCohortDefinition sql = new SqlCohortDefinition();
sql.setName("Total Discharges");
sql.addParameter(new Parameter("startDate", "Start Date", Date.class));
sql.addParameter(new Parameter("endDate", "End Date", Date.class));
sql.setQuery("select d.patient_id from kenyaemr_etl.etl_mchs_discharge d where d.visit_date between date(:startDate) and date(:endDate);");
return sql;
}
public CohortDefinition laboratoryTests() {
SqlCohortDefinition sql = new SqlCohortDefinition();
sql.setName("Number of Laboratory tests");
sql.addParameter(new Parameter("startDate", "Start Date", Date.class));
sql.addParameter(new Parameter("endDate", "End Date", Date.class));
sql.setQuery("select encounter_id from kenyaemr_etl.etl_laboratory_extract x where x.visit_date between date(:startDate) and date(:endDate);");
return sql;
}

}
Loading

0 comments on commit 8f50ef5

Please sign in to comment.