Skip to content

Commit

Permalink
Merge pull request #1929 from patryllus/feat/prediction-report
Browse files Browse the repository at this point in the history
Updated Prediction report to add age and preventive services for thos…
  • Loading branch information
PatrickWaweru authored Jun 27, 2024
2 parents 8f50ef5 + 9bda4d5 commit 3fc4149
Show file tree
Hide file tree
Showing 4 changed files with 111 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,7 @@
import org.openmrs.module.kenyaemr.reporting.cohort.definition.HTSPredictionCohortDefinition;
import org.openmrs.module.kenyaemr.reporting.data.converter.IdentifierConverter;
import org.openmrs.module.kenyaemr.reporting.data.converter.definition.MFLCodeDataDefinition;
import org.openmrs.module.kenyaemr.reporting.data.converter.definition.art.ETLFirstHIVTestDateDataDefinition;
import org.openmrs.module.kenyaemr.reporting.data.converter.definition.art.ETLFirstHIVTestResultDataDefinition;
import org.openmrs.module.kenyaemr.reporting.data.converter.definition.art.ETLHTSEntryPointDataDefinition;
import org.openmrs.module.kenyaemr.reporting.data.converter.definition.art.ETLPredictionCategoryDataDefinition;
import org.openmrs.module.kenyaemr.reporting.data.converter.definition.art.ETLPredictionScoreDataDefinition;
import org.openmrs.module.kenyaemr.reporting.data.converter.definition.art.*;
import org.openmrs.module.metadatadeploy.MetadataUtils;
import org.openmrs.module.reporting.cohort.definition.CohortDefinition;
import org.openmrs.module.reporting.data.DataDefinition;
Expand All @@ -36,10 +32,7 @@
import org.openmrs.module.reporting.data.converter.ObjectFormatter;
import org.openmrs.module.reporting.data.patient.definition.ConvertedPatientDataDefinition;
import org.openmrs.module.reporting.data.patient.definition.PatientIdentifierDataDefinition;
import org.openmrs.module.reporting.data.person.definition.ConvertedPersonDataDefinition;
import org.openmrs.module.reporting.data.person.definition.GenderDataDefinition;
import org.openmrs.module.reporting.data.person.definition.PersonIdDataDefinition;
import org.openmrs.module.reporting.data.person.definition.PreferredNameDataDefinition;
import org.openmrs.module.reporting.data.person.definition.*;
import org.openmrs.module.reporting.dataset.definition.DataSetDefinition;
import org.openmrs.module.reporting.dataset.definition.PatientDataSetDefinition;
import org.openmrs.module.reporting.evaluation.parameter.Mapped;
Expand Down Expand Up @@ -123,21 +116,27 @@ protected PatientDataSetDefinition screenedPatientsDataSetDefinition(String data
ETLFirstHIVTestDateDataDefinition firstHIVTestDateDataDefinition = new ETLFirstHIVTestDateDataDefinition();
firstHIVTestDateDataDefinition.addParameter(new Parameter("startDate", "Start Date", Date.class));
firstHIVTestDateDataDefinition.addParameter(new Parameter("endDate", "End Date", Date.class));
ETLHTSNegReferralServicesDataDefinition negativeReferralServicesDataDefinition = new ETLHTSNegReferralServicesDataDefinition();
negativeReferralServicesDataDefinition.addParameter(new Parameter("startDate", "Start Date", Date.class));
negativeReferralServicesDataDefinition.addParameter(new Parameter("endDate", "End Date", Date.class));

DataConverter formatter = new ObjectFormatter("{familyName}, {givenName}");

DataConverter formatter = new ObjectFormatter("{familyName}, {givenName}");
DataDefinition nameDef = new ConvertedPersonDataDefinition("name", new PreferredNameDataDefinition(), formatter);
dsd.addColumn("MFL Code", new MFLCodeDataDefinition(), "");
dsd.addColumn("id", new PersonIdDataDefinition(), "");
dsd.addColumn("Name", nameDef, "");
dsd.addColumn("CCC No", identifierDef, "");
dsd.addColumn("NUPI", nupiDef, "");
dsd.addColumn("Age", new AgeDataDefinition(), "");
dsd.addColumn("Sex", new GenderDataDefinition(), "", null);
dsd.addColumn("UPN", identifierDef, "");
dsd.addColumn("Entry Point", entryPointDataDefinition, "startDate=${startDate},endDate=${endDate}");
dsd.addColumn("ML Prediction Score", predictionScoreDataDefinition, "startDate=${startDate},endDate=${endDate}");
dsd.addColumn("ML Prediction Category", predictionCategoryDataDefinition, "startDate=${startDate},endDate=${endDate}");
dsd.addColumn("Date Of Test", firstHIVTestDateDataDefinition, "startDate=${startDate},endDate=${endDate}", new DateConverter(DATE_FORMAT));
dsd.addColumn("Actual Test Results", firstHIVTestResultDataDefinition, "startDate=${startDate},endDate=${endDate}");
dsd.addColumn("Preventive Services", negativeReferralServicesDataDefinition, "startDate=${startDate},endDate=${endDate}");
return dsd;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
/**
* This Source Code Form is subject to the terms of the Mozilla Public License,
* v. 2.0. If a copy of the MPL was not distributed with this file, You can
* obtain one at http://mozilla.org/MPL/2.0/. OpenMRS is also distributed under
* the terms of the Healthcare Disclaimer located at http://openmrs.org/license.
*
* Copyright (C) OpenMRS Inc. OpenMRS is a registered trademark and the OpenMRS
* graphic logo is a trademark of OpenMRS Inc.
*/
package org.openmrs.module.kenyaemr.reporting.data.converter.definition.art;

import org.openmrs.module.reporting.data.BaseDataDefinition;
import org.openmrs.module.reporting.data.person.definition.PersonDataDefinition;
import org.openmrs.module.reporting.definition.configuration.ConfigurationPropertyCachingStrategy;
import org.openmrs.module.reporting.evaluation.caching.Caching;

/**
* HTS Negative Referral Services Data Definition
*/
@Caching(strategy=ConfigurationPropertyCachingStrategy.class)
public class ETLHTSNegReferralServicesDataDefinition extends BaseDataDefinition implements PersonDataDefinition {

public static final long serialVersionUID = 1L;

/**
* Default Constructor
*/
public ETLHTSNegReferralServicesDataDefinition() {
super();
}

/**
* Constructor to populate name only
*/
public ETLHTSNegReferralServicesDataDefinition(String name) {
super(name);
}

//***** INSTANCE METHODS *****

/**
* @see org.openmrs.module.reporting.data.DataDefinition#getDataType()
*/
public Class<?> getDataType() {
return Double.class;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
/**
* This Source Code Form is subject to the terms of the Mozilla Public License,
* v. 2.0. If a copy of the MPL was not distributed with this file, You can
* obtain one at http://mozilla.org/MPL/2.0/. OpenMRS is also distributed under
* the terms of the Healthcare Disclaimer located at http://openmrs.org/license.
*
* Copyright (C) OpenMRS Inc. OpenMRS is a registered trademark and the OpenMRS
* graphic logo is a trademark of OpenMRS Inc.
*/
package org.openmrs.module.kenyaemr.reporting.data.converter.definition.evaluator.art;

import org.openmrs.annotation.Handler;
import org.openmrs.module.kenyaemr.reporting.data.converter.definition.art.ETLHTSNegReferralServicesDataDefinition;
import org.openmrs.module.reporting.data.person.EvaluatedPersonData;
import org.openmrs.module.reporting.data.person.definition.PersonDataDefinition;
import org.openmrs.module.reporting.data.person.evaluator.PersonDataEvaluator;
import org.openmrs.module.reporting.evaluation.EvaluationContext;
import org.openmrs.module.reporting.evaluation.EvaluationException;
import org.openmrs.module.reporting.evaluation.querybuilder.SqlQueryBuilder;
import org.openmrs.module.reporting.evaluation.service.EvaluationService;
import org.springframework.beans.factory.annotation.Autowired;

import java.util.Date;
import java.util.Map;

/**
* Evaluates HTS Negative Referral Services Data Definition
*/
@Handler(supports= ETLHTSNegReferralServicesDataDefinition.class, order=50)
public class ETLHTSNegReferralServicesDataEvaluator implements PersonDataEvaluator {

@Autowired
private EvaluationService evaluationService;

public EvaluatedPersonData evaluate(PersonDataDefinition definition, EvaluationContext context) throws EvaluationException {
EvaluatedPersonData c = new EvaluatedPersonData(definition, context);

String qry = "SELECT patient_id,\n" +
" neg_referral_for\n" +
" FROM kenyaemr_etl.etl_hts_test\n" +
" WHERE date(visit_date) >= date(:startDate) AND date(visit_date) <= date(:endDate)\n" +
" GROUP BY patient_id;\n";

SqlQueryBuilder queryBuilder = new SqlQueryBuilder();
queryBuilder.append(qry);
Date startDate = (Date)context.getParameterValue("startDate");
Date endDate = (Date)context.getParameterValue("endDate");
queryBuilder.addParameter("endDate", endDate);
queryBuilder.addParameter("startDate", startDate);

Map<Integer, Object> data = evaluationService.evaluateToMap(queryBuilder, Integer.class, Object.class, context);
c.setData(data);
return c;
}
}
Binary file not shown.

0 comments on commit 3fc4149

Please sign in to comment.