Skip to content

Commit

Permalink
Merge pull request #120 from jlkeiper/REPORTS-221
Browse files Browse the repository at this point in the history
REPORTS-221 - fixing a null value issue
  • Loading branch information
jlkeiper committed Jan 31, 2014
2 parents a813157 + 4e02f41 commit f921153
Show file tree
Hide file tree
Showing 7 changed files with 133 additions and 70 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,9 @@ public ObsValueNumericConverter(Integer precision) {
this.setPrecision(precision);
}

/**
* @should return a blank string if valueNumeric is null
*/
@Override
public Object convert(Object original) {

Expand All @@ -36,6 +39,9 @@ public Object convert(Object original) {
if (o == null)
return "";

if (o.getValueNumeric() == null)
return "";

// TODO figure out why we have to get the concept ...
ConceptNumeric cn;
if (o.getConcept() instanceof ConceptNumeric) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,15 @@
import org.openmrs.module.reporting.definition.configuration.ConfigurationPropertyCachingStrategy;
import org.openmrs.module.reporting.evaluation.caching.Caching;

import java.util.Set;

/**
*/
@Caching(strategy=ConfigurationPropertyCachingStrategy.class)
@Caching(strategy = ConfigurationPropertyCachingStrategy.class)
public class PmtctPregnancyDataDefinition extends BaseDataDefinition implements PersonDataDefinition {

@Override
public Class<?> getDataType() {
return String.class;
return Set.class;
}
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
package org.openmrs.module.amrsreports.reporting.data;

import org.openmrs.module.amrsreports.MOHFacility;
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;
import org.openmrs.module.reporting.evaluation.parameter.Parameter;

import java.util.Date;

Expand All @@ -13,6 +15,13 @@
@Caching(strategy=ConfigurationPropertyCachingStrategy.class)
public class TransferStatusDataDefinition extends BaseDataDefinition implements PersonDataDefinition {

public TransferStatusDataDefinition() {
Parameter facility = new Parameter();
facility.setName("facility");
facility.setType(MOHFacility.class);
this.addParameter(facility);
}

@Override
public Class<?> getDataType() {
return Boolean.class;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package org.openmrs.module.amrsreports.reporting.provider;

import org.apache.commons.io.IOUtils;
import org.openmrs.PatientIdentifier;
import org.openmrs.PatientIdentifierType;
import org.openmrs.PersonAttributeType;
import org.openmrs.api.APIException;
Expand All @@ -16,12 +17,6 @@
import org.openmrs.module.amrsreports.reporting.converter.EntryPointConverter;
import org.openmrs.module.amrsreports.reporting.converter.FormattedDateSetConverter;
import org.openmrs.module.amrsreports.reporting.converter.WHOStageAndDateConverter;
import org.openmrs.module.amrsreports.reporting.data.CohortRestrictedAgeAtDateOfOtherDataDefinition;
import org.openmrs.module.amrsreports.reporting.data.CohortRestrictedBirthdateDataDefinition;
import org.openmrs.module.amrsreports.reporting.data.CohortRestrictedGenderDataDefinition;
import org.openmrs.module.amrsreports.reporting.data.CohortRestrictedPatientIdentifierDataDefinition;
import org.openmrs.module.amrsreports.reporting.data.CohortRestrictedPersonAttributeDataDefinition;
import org.openmrs.module.amrsreports.reporting.data.CohortRestrictedPreferredNameDataDefinition;
import org.openmrs.module.amrsreports.reporting.data.CtxStartStopDataDefinition;
import org.openmrs.module.amrsreports.reporting.data.DateARTStartedDataDefinition;
import org.openmrs.module.amrsreports.reporting.data.EligibilityForARTDataDefinition;
Expand All @@ -46,7 +41,13 @@
import org.openmrs.module.reporting.data.converter.DateConverter;
import org.openmrs.module.reporting.data.converter.ObjectFormatter;
import org.openmrs.module.reporting.data.converter.PropertyConverter;
import org.openmrs.module.reporting.data.patient.definition.PatientIdentifierDataDefinition;
import org.openmrs.module.reporting.data.person.definition.AgeAtDateOfOtherDataDefinition;
import org.openmrs.module.reporting.data.person.definition.BirthdateDataDefinition;
import org.openmrs.module.reporting.data.person.definition.GenderDataDefinition;
import org.openmrs.module.reporting.data.person.definition.PersonAttributeDataDefinition;
import org.openmrs.module.reporting.data.person.definition.PersonIdDataDefinition;
import org.openmrs.module.reporting.data.person.definition.PreferredNameDataDefinition;
import org.openmrs.module.reporting.dataset.definition.PatientDataSetDefinition;
import org.openmrs.module.reporting.evaluation.parameter.Parameter;
import org.openmrs.module.reporting.report.ReportDesign;
Expand All @@ -67,6 +68,8 @@
*/
public class MOH361AReportProvider_0_1 extends ReportProvider {

public static final String NAME = "MOH 361A 0.1";

public MOH361AReportProvider_0_1() {
this.name = "MOH 361A 0.1";
this.visible = true;
Expand Down Expand Up @@ -118,58 +121,50 @@ public ReportDefinition getReportDefinition() {

// c. Unique Patient Number
PatientIdentifierType pit = service.getCCCNumberIdentifierType();
CohortRestrictedPatientIdentifierDataDefinition cccColumn = new CohortRestrictedPatientIdentifierDataDefinition(
"CCC", pit);
PatientIdentifierDataDefinition cccColumn = new PatientIdentifierDataDefinition("CCC", pit);
cccColumn.setIncludeFirstNonNullOnly(true);
dsd.addColumn("Unique Patient Number", cccColumn, nullString);
dsd.addColumn("Unique Patient Number", cccColumn, nullString,
new PropertyConverter(PatientIdentifier.class, "identifier"));

// AMRS Universal ID
CohortRestrictedPatientIdentifierDataDefinition uidColumn = new CohortRestrictedPatientIdentifierDataDefinition(
PatientIdentifierDataDefinition uidColumn = new PatientIdentifierDataDefinition(
"AMRS Universal ID", Context.getPatientService().getPatientIdentifierType(8));
uidColumn.setIncludeFirstNonNullOnly(true);
dsd.addColumn("AMRS Universal ID", uidColumn, nullString);
dsd.addColumn("AMRS Universal ID", uidColumn, nullString,
new PropertyConverter(PatientIdentifier.class, "identifier"));

// AMRS Medical Record Number
CohortRestrictedPatientIdentifierDataDefinition mrnColumn = new CohortRestrictedPatientIdentifierDataDefinition(
PatientIdentifierDataDefinition mrnColumn = new PatientIdentifierDataDefinition(
"AMRS Medical Record Number", Context.getPatientService().getPatientIdentifierType(3));
mrnColumn.setIncludeFirstNonNullOnly(true);
dsd.addColumn("AMRS Medical Record Number", mrnColumn, nullString);
dsd.addColumn("AMRS Medical Record Number", mrnColumn, nullString,
new PropertyConverter(PatientIdentifier.class, "identifier"));

// d. Patient's Name
dsd.addColumn("Name", new CohortRestrictedPreferredNameDataDefinition(), nullString);
dsd.addColumn("Name", new PreferredNameDataDefinition(), nullString);

// e1. Date of Birth
dsd.addColumn("Date of Birth", new CohortRestrictedBirthdateDataDefinition(), nullString,
dsd.addColumn("Date of Birth", new BirthdateDataDefinition(), nullString,
new BirthdateConverter(MOHReportUtil.DATE_FORMAT));

// e2. Age at Enrollment
MappedData<EnrollmentDateDataDefinition> mappedDef = new MappedData<EnrollmentDateDataDefinition>();
mappedDef.setParameterizable(enrollmentDate);
mappedDef.addConverter(new DateConverter());
CohortRestrictedAgeAtDateOfOtherDataDefinition ageAtEnrollment = new CohortRestrictedAgeAtDateOfOtherDataDefinition();
AgeAtDateOfOtherDataDefinition ageAtEnrollment = new AgeAtDateOfOtherDataDefinition();
ageAtEnrollment.setEffectiveDateDefinition(mappedDef);
dsd.addColumn("Age at Enrollment", ageAtEnrollment, nullString, new DecimalAgeConverter(2));

// f. Sex
dsd.addColumn("Sex", new CohortRestrictedGenderDataDefinition(), nullString);
dsd.addColumn("Sex", new GenderDataDefinition(), nullString);

// g. Entry point: From where?
PersonAttributeType pat = Context.getPersonService().getPersonAttributeTypeByName(MohEvaluableNameConstants.POINT_OF_HIV_TESTING);
dsd.addColumn("Entry Point", new CohortRestrictedPersonAttributeDataDefinition("entryPoint", pat), nullString, new EntryPointConverter());
dsd.addColumn("Entry Point", new PersonAttributeDataDefinition("entryPoint", pat), nullString, new EntryPointConverter());

// h. Confirmed HIV+ Date
dsd.addColumn("Confirmed HIV Date", enrollmentDate, nullString);

// // i. PEP Start / Stop Date
// LogicDataDefinition columnI = new LogicDataDefinition();
// columnI.setLogicQuery("\"MOH PEP Start Stop Date\"");
// dsd.addColumn("PEP Start / Stop Date", columnI, nullString);
//
// // j. Reasons for PEP use:
// LogicDataDefinition columnJ = new LogicDataDefinition();
// columnJ.setLogicQuery("\"MOH Reasons For PEP\"");
// dsd.addColumn("Reasons for PEP Use", columnJ, nullString);

// k. CTX startdate and stopdate:
dsd.addColumn("CTX Start Stop Date", new CtxStartStopDataDefinition(), nullString);

Expand All @@ -180,7 +175,7 @@ public ReportDefinition getReportDefinition() {
dsd.addColumn("TB Treatment Start Stop Date", new TbStartStopDataDefinition(), nullString);

// n. Pregnancy Yes?, Due date, PMTCT refer
dsd.addColumn("Pregnancy EDD and Referral", new PmtctPregnancyDataDefinition(), nullString, new FormattedDateSetConverter("%s | PMTCT"));
dsd.addColumn("Pregnancy EDD and Referral", new PmtctPregnancyDataDefinition(), nullString, new FormattedDateSetConverter());

// o. LTFU / TO / Dead and date when the event occurred
dsd.addColumn("LTFU TO DEAD", new LTFUTODeadDataDefinition(), nullString, nullStringConverter);
Expand Down Expand Up @@ -212,7 +207,7 @@ public ReportDefinition getReportDefinition() {
new PropertyConverter(ObsRepresentation.class, "valueDatetime"));

// transfer status column (used for sorting, not needed in output)
dsd.addColumn("Transfer Status", new TransferStatusDataDefinition(), nullString);
dsd.addColumn("Transfer Status", new TransferStatusDataDefinition(), "facility=${facility}");

Map<String, Object> mappings = new HashMap<String, Object>();
mappings.put("facility", "${facility}");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@
import org.openmrs.api.context.Context;
import org.openmrs.module.amrsreports.MOHFacility;
import org.openmrs.module.amrsreports.reporting.cohort.definition.Moh361ACohortDefinition;
import org.openmrs.module.amrsreports.reporting.common.EncounterRepresentation;
import org.openmrs.module.amrsreports.reporting.common.ObsRepresentation;
import org.openmrs.module.amrsreports.reporting.converter.ARVPatientSnapshotDateConverter;
import org.openmrs.module.amrsreports.reporting.converter.ARVPatientSnapshotReasonConverter;
import org.openmrs.module.amrsreports.reporting.converter.DecimalAgeConverter;
Expand All @@ -16,12 +18,6 @@
import org.openmrs.module.amrsreports.reporting.converter.FormattedDateSetConverter;
import org.openmrs.module.amrsreports.reporting.converter.ObsValueDatetimeConverter;
import org.openmrs.module.amrsreports.reporting.converter.WHOStageAndDateConverter;
import org.openmrs.module.amrsreports.reporting.data.CohortRestrictedAgeAtDateOfOtherDataDefinition;
import org.openmrs.module.amrsreports.reporting.data.CohortRestrictedBirthdateDataDefinition;
import org.openmrs.module.amrsreports.reporting.data.CohortRestrictedGenderDataDefinition;
import org.openmrs.module.amrsreports.reporting.data.CohortRestrictedPatientIdentifierDataDefinition;
import org.openmrs.module.amrsreports.reporting.data.CohortRestrictedPersonAttributeDataDefinition;
import org.openmrs.module.amrsreports.reporting.data.CohortRestrictedPreferredNameDataDefinition;
import org.openmrs.module.amrsreports.reporting.data.CtxStartStopDataDefinition;
import org.openmrs.module.amrsreports.reporting.data.DateARTStartedDataDefinition;
import org.openmrs.module.amrsreports.reporting.data.EligibilityForARTDataDefinition;
Expand All @@ -45,7 +41,14 @@
import org.openmrs.module.reporting.data.converter.BirthdateConverter;
import org.openmrs.module.reporting.data.converter.DateConverter;
import org.openmrs.module.reporting.data.converter.ObjectFormatter;
import org.openmrs.module.reporting.data.converter.PropertyConverter;
import org.openmrs.module.reporting.data.patient.definition.PatientIdentifierDataDefinition;
import org.openmrs.module.reporting.data.person.definition.AgeAtDateOfOtherDataDefinition;
import org.openmrs.module.reporting.data.person.definition.BirthdateDataDefinition;
import org.openmrs.module.reporting.data.person.definition.GenderDataDefinition;
import org.openmrs.module.reporting.data.person.definition.PersonAttributeDataDefinition;
import org.openmrs.module.reporting.data.person.definition.PersonIdDataDefinition;
import org.openmrs.module.reporting.data.person.definition.PreferredNameDataDefinition;
import org.openmrs.module.reporting.dataset.definition.PatientDataSetDefinition;
import org.openmrs.module.reporting.evaluation.parameter.Parameter;
import org.openmrs.module.reporting.report.ReportDesign;
Expand Down Expand Up @@ -117,44 +120,44 @@ public ReportDefinition getReportDefinition() {

// c. Unique Patient Number
PatientIdentifierType pit = service.getCCCNumberIdentifierType();
CohortRestrictedPatientIdentifierDataDefinition cccColumn = new CohortRestrictedPatientIdentifierDataDefinition("CCC", pit);
PatientIdentifierDataDefinition cccColumn = new PatientIdentifierDataDefinition("CCC", pit);
cccColumn.setIncludeFirstNonNullOnly(true);
dsd.addColumn("Unique Patient Number", cccColumn, nullString);

// AMRS Universal ID
CohortRestrictedPatientIdentifierDataDefinition uidColumn = new CohortRestrictedPatientIdentifierDataDefinition(
PatientIdentifierDataDefinition uidColumn = new PatientIdentifierDataDefinition(
"AMRS Universal ID", Context.getPatientService().getPatientIdentifierType(8));
uidColumn.setIncludeFirstNonNullOnly(true);
dsd.addColumn("AMRS Universal ID", uidColumn, nullString);

// AMRS Medical Record Number
CohortRestrictedPatientIdentifierDataDefinition mrnColumn = new CohortRestrictedPatientIdentifierDataDefinition(
PatientIdentifierDataDefinition mrnColumn = new PatientIdentifierDataDefinition(
"AMRS Medical Record Number", Context.getPatientService().getPatientIdentifierType(3));
mrnColumn.setIncludeFirstNonNullOnly(true);
dsd.addColumn("AMRS Medical Record Number", mrnColumn, nullString);

// d. Patient's Name
dsd.addColumn("Name", new CohortRestrictedPreferredNameDataDefinition(), nullString);
dsd.addColumn("Name", new PreferredNameDataDefinition(), nullString);

// e1. Date of Birth
dsd.addColumn("Date of Birth", new CohortRestrictedBirthdateDataDefinition(), nullString,
dsd.addColumn("Date of Birth", new BirthdateDataDefinition(), nullString,
new BirthdateConverter(MOHReportUtil.DATE_FORMAT));

// e2. Age at Enrollment

MappedData<EnrollmentDateDataDefinition> mappedDef = new MappedData<EnrollmentDateDataDefinition>();
mappedDef.setParameterizable(enrollmentDate);
mappedDef.addConverter(new DateConverter());
CohortRestrictedAgeAtDateOfOtherDataDefinition ageAtEnrollment = new CohortRestrictedAgeAtDateOfOtherDataDefinition();
AgeAtDateOfOtherDataDefinition ageAtEnrollment = new AgeAtDateOfOtherDataDefinition();
ageAtEnrollment.setEffectiveDateDefinition(mappedDef);
dsd.addColumn("Age at Enrollment", ageAtEnrollment, nullString, new DecimalAgeConverter(2));

// f. Sex
dsd.addColumn("Sex", new CohortRestrictedGenderDataDefinition(), nullString);
dsd.addColumn("Sex", new GenderDataDefinition(), nullString);

// g. Entry point: From where?
PersonAttributeType pat = Context.getPersonService().getPersonAttributeTypeByName(MohEvaluableNameConstants.POINT_OF_HIV_TESTING);
dsd.addColumn("Entry Point", new CohortRestrictedPersonAttributeDataDefinition("entryPoint", pat), nullString, new EntryPointConverter());
dsd.addColumn("Entry Point", new PersonAttributeDataDefinition("entryPoint", pat), nullString, new EntryPointConverter());

// h. Confirmed HIV+ Date
dsd.addColumn("Confirmed HIV Date", enrollmentDate, nullString);
Expand All @@ -179,7 +182,7 @@ public ReportDefinition getReportDefinition() {
dsd.addColumn("TB Treatment Start Stop Date", new TbStartStopDataDefinition(), nullString);

// n. Pregnancy Yes?, Due date, PMTCT refer
dsd.addColumn("Pregnancy EDD and Referral", new PmtctPregnancyDataDefinition(), nullString, new FormattedDateSetConverter("%s | PMTCT"));
dsd.addColumn("Pregnancy EDD and Referral", new PmtctPregnancyDataDefinition(), nullString, new FormattedDateSetConverter());

// o. LTFU / TO / Dead and date when the event occurred
dsd.addColumn("LTFU TO DEAD", new LTFUTODeadDataDefinition(), nullString, nullStringConverter);
Expand All @@ -199,14 +202,19 @@ public ReportDefinition getReportDefinition() {

// additional columns for troubleshooting
LastHIVEncounterDataDefinition lastHIVEncounter = new LastHIVEncounterDataDefinition();
dsd.addColumn("Last HIV Encounter Date", lastHIVEncounter, nullString, new EncounterDatetimeConverter());
dsd.addColumn("Last HIV Encounter Location", lastHIVEncounter, nullString, new EncounterLocationConverter());

dsd.addColumn("Last HIV Encounter Date", lastHIVEncounter, nullString,
new PropertyConverter(EncounterRepresentation.class, "encounterDatetime"));

dsd.addColumn("Last HIV Encounter Location", lastHIVEncounter, nullString,
new PropertyConverter(EncounterRepresentation.class, "locationName"));

// informative column for the destination clinics
dsd.addColumn("Last Return to Clinic Date", new LastRTCDateDataDefinition(), nullString, new ObsValueDatetimeConverter());
dsd.addColumn("Last Return to Clinic Date", new LastRTCDateDataDefinition(), nullString,
new PropertyConverter(ObsRepresentation.class, "valueDatetime"));

// transfer status column (used for sorting, not needed in output)
dsd.addColumn("Transfer Status", new TransferStatusDataDefinition(), nullString);
dsd.addColumn("Transfer Status", new TransferStatusDataDefinition(), "facility=${facility}");

Map<String, Object> mappings = new HashMap<String, Object>();
mappings.put("facility", "${facility}");
Expand Down
Loading

0 comments on commit f921153

Please sign in to comment.