From 8bb6c2763f95b49745093646d64fea34837aa5fd Mon Sep 17 00:00:00 2001 From: patryllus Date: Tue, 18 Jun 2024 16:35:54 +0300 Subject: [PATCH 1/7] Initial updated for mOH 729 - Fmaps, cleaned up unused code, updated template to latest. --- .../builder/common/FmapReportBuilder.java | 357 ++++++++---------- .../shared/hiv/art/FmapCohortLibrary.java | 265 ++++++------- .../shared/hiv/art/FmapIndicatorLibrary.java | 55 +-- .../resources/reports/fmaps_template.xls | Bin 40960 -> 30720 bytes 4 files changed, 314 insertions(+), 363 deletions(-) diff --git a/api/src/main/java/org/openmrs/module/kenyaemr/reporting/builder/common/FmapReportBuilder.java b/api/src/main/java/org/openmrs/module/kenyaemr/reporting/builder/common/FmapReportBuilder.java index 291dd15ee7..f520c48a4c 100644 --- a/api/src/main/java/org/openmrs/module/kenyaemr/reporting/builder/common/FmapReportBuilder.java +++ b/api/src/main/java/org/openmrs/module/kenyaemr/reporting/builder/common/FmapReportBuilder.java @@ -36,195 +36,168 @@ @Builds({"kenyaemr.etl.common.report.fmap"}) public class FmapReportBuilder extends AbstractReportBuilder { - protected static final Log log = LogFactory.getLog(FmapReportBuilder.class); - - @Autowired - private FmapIndicatorLibrary fmapIndicators; - - @Autowired - private CommonDimensionLibrary commonDimensions; - - /** - * @see org.openmrs.module.kenyacore.report.builder.AbstractReportBuilder#getParameters(org.openmrs.module.kenyacore.report.ReportDescriptor) - */ - @Override - protected List getParameters(ReportDescriptor descriptor) { - return Arrays.asList( - new Parameter("startDate", "Start Date", Date.class), - new Parameter("endDate", "End Date", Date.class) - //new Parameter("dateBasedReporting", "", String.class) - ); - } - - /** - * @see org.openmrs.module.kenyacore.report.builder.AbstractReportBuilder#buildDataSets(org.openmrs.module.kenyacore.report.ReportDescriptor, org.openmrs.module.reporting.report.definition.ReportDefinition) - */ - @SuppressWarnings("unchecked") - @Override - protected List> buildDataSets(ReportDescriptor descriptor, ReportDefinition report) { - return Arrays.asList( - ReportUtils.map(fmapPatientRegimens(), "startDate=${startDate},endDate=${endDate}") -// ReportUtils.map(fmapAdultSecondLineRegimens(), "startDate=${startDate},endDate=${endDate}"), -// ReportUtils.map(fmapAdultThirdLineRegimens(), "startDate=${startDate},endDate=${endDate}"), -// ReportUtils.map(fmapChildFirstLineRegimens(), "startDate=${startDate},endDate=${endDate}"), -// ReportUtils.map(fmapChildSecondLineRegimens(), "startDate=${startDate},endDate=${endDate}"), -// ReportUtils.map(fmapChildThirdLineRegimens(), "startDate=${startDate},endDate=${endDate}") - ); - } - - - /** - * Creates the dataset for Adult first line regimens - * - * @return the dataset - */ - protected DataSetDefinition fmapPatientRegimens() { - CohortIndicatorDataSetDefinition cohortDsd = new CohortIndicatorDataSetDefinition(); - cohortDsd.setName("ACTIVE CLIENTS"); - cohortDsd.setDescription("ARV Treatment Regimen"); - cohortDsd.addParameter(new Parameter("startDate", "Start Date", Date.class)); - cohortDsd.addParameter(new Parameter("endDate", "End Date", Date.class)); - - String indParams = "startDate=${startDate},endDate=${endDate}"; - cohortDsd.addColumn("AF1A", "AZT+3TC+NVP", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/NVP","First line","adult"), indParams),""); - cohortDsd.addColumn("AF1B", "AZT+3TC+EFV", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/EFV","First line","adult"), indParams),""); - cohortDsd.addColumn("AF1D", "AZT+3TC+DTG", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/DTG","First line","adult"), indParams),""); - cohortDsd.addColumn("AF1E", "AZT+3TC+LPVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/LPV/r","First line","adult"), indParams),""); - cohortDsd.addColumn("AF1F", "AZT+3TC+ATVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/ATV/r","First line","adult"), indParams),""); - cohortDsd.addColumn("AF2A", "TDF+3TC+NVP", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/NVP","First line","adult"), indParams),""); - cohortDsd.addColumn("AF2B", "TDF+3TC+EFV", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/EFV","First line","adult"), indParams),""); - cohortDsd.addColumn("AF2D", "TDF+3TC+ATVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/ATV/r","First line","adult"), indParams),""); - cohortDsd.addColumn("AF2E", "TDF+3TC+DTG", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/DTG","First line","adult"), indParams),""); - cohortDsd.addColumn("AF2F", "TDF+3TC+LPVr(1L Adults < 40kg)", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/LPV/r","First line","adult"), indParams),""); - cohortDsd.addColumn("AF4A", "ABC+3TC+NVP", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/NVP","First line","adult"), indParams),""); - cohortDsd.addColumn("AF4B", "ABC+3TC+EFV", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/EFV","First line","adult"), indParams),""); - cohortDsd.addColumn("AF4C", "ABC+3TC+DTG", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/DTG","First line","adult"), indParams),""); - cohortDsd.addColumn("AF5X", "Any other first line adult regimens", ReportUtils.map(fmapIndicators.patientsOnOtherRegimen("Other","First line","adult"), indParams),""); - cohortDsd.addColumn("AS1A", "AZT+3TC+LPVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/LPV/r","Second line","adult"), indParams),""); - cohortDsd.addColumn("AS1B", "AZT+3TC+ATVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/ATV/r","Second line","adult"), indParams),""); - cohortDsd.addColumn("AS1C", "AZT+3TC+DTG", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/DTG","Second line","adult"), indParams),""); - cohortDsd.addColumn("AS2A", "TDF+3TC+LPVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/LPV/r","Second line","adult"), indParams),""); - cohortDsd.addColumn("AS2B", "TDF+3TC+DTG", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/DTG","Second line","adult"), indParams),""); - cohortDsd.addColumn("AS2C", "TDF+3TC+ATVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/ATV/r","Second line","adult"), indParams),""); - cohortDsd.addColumn("AS5A", "ABC+3TC+LPVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/LPV/r","Second line","adult"), indParams),""); - cohortDsd.addColumn("AS5B", "ABC+3TC+ATVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/ATV/r","Second line","adult"), indParams),""); - cohortDsd.addColumn("AS5C", "ABC+3TC+DTG", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/DTG","Second line","adult"), indParams),""); - cohortDsd.addColumn("AF5X", "Any other second line adult regimens", ReportUtils.map(fmapIndicators.patientsOnOtherRegimen("Other","Second line","adult"), indParams),""); - cohortDsd.addColumn("AT2D", "TDF+3TC+DTG+DRV+RTV", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/DTG/DRV/RTV","Third line","adult"), indParams),""); - cohortDsd.addColumn("AT2E", "TDF+3TC+RAL+DRV+RTV", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/RAL/DRV/RTV","Third line","adult"), indParams),""); - cohortDsd.addColumn("AT2F", "TDF+3TC+DTG+ETV+DRV+RTV", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/DTG/ETV/DRV/RTV","Third line","adult"), indParams),""); - cohortDsd.addColumn("AT2X", "Any other thirdline adult regimens", ReportUtils.map(fmapIndicators.patientsOnOtherRegimen("Other","Third line","adult"), indParams),""); - cohortDsd.addColumn("CF1A", "AZT+3TC+NVP", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/NVP","First line","child"), indParams),""); - cohortDsd.addColumn("CF1B", "AZT+3TC+EFV", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/EFV","First line","child"), indParams),""); - cohortDsd.addColumn("CF1C", "AZT+3TC+LPVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/LPV/r","First line","child"), indParams),""); - cohortDsd.addColumn("CF2A", "ABC+3TC+NVP", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/NVP","First line","child"), indParams),""); - cohortDsd.addColumn("CF2B", "ABC+3TC+EFV", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/EFV","First line","child"), indParams),""); - cohortDsd.addColumn("CF2D", "AZT+3TC+LPVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/LPV/r","First line","child"), indParams),""); - cohortDsd.addColumn("CF2G", "ABC+3TC+DTG", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/DTG","First line","child"), indParams),""); - cohortDsd.addColumn("CF4E", "TDF+3TC+DTG", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/DTG","First line","child"), indParams),""); - cohortDsd.addColumn("CF5X", "Any other first line adult regimens", ReportUtils.map(fmapIndicators.patientsOnOtherRegimen("Other","First line","child"), indParams),""); - cohortDsd.addColumn("CS1A", "AZT+3TC+LPVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/LPV/r","Second line","child"), indParams),""); - cohortDsd.addColumn("CS1C", "AZT+3TC+DRV+RTV+RAL", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/DRV/RTV/RAL","Second line","child"), indParams),""); - cohortDsd.addColumn("CS2A", "ABC+3TC+LPVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/LPV/r","Second line","child"), indParams),""); - cohortDsd.addColumn("CS2B", "ABC+3TC+DTG", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/DTG","Second line","child"), indParams),""); - cohortDsd.addColumn("CS2D", "ABC+3TC+DRV+RTV+RAL", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/DRV/RTV/RAL","Second line","child"), indParams),""); - cohortDsd.addColumn("AF5X", "Any other second line adult regimens", ReportUtils.map(fmapIndicators.patientsOnOtherRegimen("Other","Second line","child"), indParams),""); - cohortDsd.addColumn("CT1H", "AZT+3TC+DRV+RTV+RAL", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/DRV/RTV/RAL","Third line","child"), indParams),""); - cohortDsd.addColumn("CT2D", "ABC+3TC+DRV+RTV+RAL", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/DRV/RTV/RAL","Third line","child"), indParams),""); - cohortDsd.addColumn("CT3X", "Any other thirdline adult regimens", ReportUtils.map(fmapIndicators.patientsOnOtherRegimen("Other","Third line","child"), indParams),""); - - return cohortDsd; - } - - protected DataSetDefinition fmapAdultSecondLineRegimens() { - CohortIndicatorDataSetDefinition cohortDsd = new CohortIndicatorDataSetDefinition(); - cohortDsd.setName("ADULT ART"); - cohortDsd.setDescription("2nd Line regimens"); - cohortDsd.addParameter(new Parameter("startDate", "Start Date", Date.class)); - cohortDsd.addParameter(new Parameter("endDate", "End Date", Date.class)); - - String indParams = "startDate=${startDate},endDate=${endDate}"; - cohortDsd.addColumn("AS1A", "AZT+3TC+LPVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/LPV/r","Second line","adult"), indParams),""); - cohortDsd.addColumn("AS1B", "AZT+3TC+ATVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/ATV/r","Second line","adult"), indParams),""); - cohortDsd.addColumn("AS1C", "AZT+3TC+DTG", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/DTG","Second line","adult"), indParams),""); - cohortDsd.addColumn("AS2A", "TDF+3TC+LPVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/LPV/r","Second line","adult"), indParams),""); - cohortDsd.addColumn("AS2B", "TDF+3TC+DTG", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/DTG","Second line","adult"), indParams),""); - cohortDsd.addColumn("AS2C", "TDF+3TC+ATVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/ATV/r","Second line","adult"), indParams),""); - cohortDsd.addColumn("AS5A", "ABC+3TC+LPVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/LPV/r","Second line","adult"), indParams),""); - cohortDsd.addColumn("AS5B", "ABC+3TC+ATVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/ATV/r","Second line","adult"), indParams),""); - cohortDsd.addColumn("AS5C", "ABC+3TC+DTG", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/DTG","Second line","adult"), indParams),""); - cohortDsd.addColumn("AF5X", "Any other second line adult regimens", ReportUtils.map(fmapIndicators.patientsOnOtherRegimen("Other","Second line","adult"), indParams),""); - - return cohortDsd; - } - - protected DataSetDefinition fmapAdultThirdLineRegimens() { - CohortIndicatorDataSetDefinition cohortDsd = new CohortIndicatorDataSetDefinition(); - cohortDsd.setName("ADULT ART"); - cohortDsd.setDescription("3rd Line regimens"); - cohortDsd.addParameter(new Parameter("startDate", "Start Date", Date.class)); - cohortDsd.addParameter(new Parameter("endDate", "End Date", Date.class)); - - String indParams = "startDate=${startDate},endDate=${endDate}"; - cohortDsd.addColumn("AT2D", "TDF+3TC+DTG+DRV+RTV", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/DTG/DRV/RTV","Third line","adult"), indParams),""); - cohortDsd.addColumn("AT2E", "TDF+3TC+RAL+DRV+RTV", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/RAL/DRV/RTV","Third line","adult"), indParams),""); - cohortDsd.addColumn("AT2F", "TDF+3TC+DTG+ETV+DRV+RTV", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/DTG/ETV/DRV/RTV","Third line","adult"), indParams),""); - cohortDsd.addColumn("AT2X", "Any other thirdline adult regimens", ReportUtils.map(fmapIndicators.patientsOnOtherRegimen("Other","Third line","adult"), indParams),""); - - return cohortDsd; - } - - protected DataSetDefinition fmapChildFirstLineRegimens() { - CohortIndicatorDataSetDefinition cohortDsd = new CohortIndicatorDataSetDefinition(); - cohortDsd.setName("PAEDIATRIC ART"); - cohortDsd.setDescription("1st Line regimens"); - cohortDsd.addParameter(new Parameter("startDate", "Start Date", Date.class)); - cohortDsd.addParameter(new Parameter("endDate", "End Date", Date.class)); - - String indParams = "startDate=${startDate},endDate=${endDate}"; - cohortDsd.addColumn("CF1A", "AZT+3TC+NVP", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/NVP","First line","child"), indParams),""); - cohortDsd.addColumn("CF1B", "AZT+3TC+EFV", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/EFV","First line","child"), indParams),""); - cohortDsd.addColumn("CF1C", "AZT+3TC+LPVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/LPV/r","First line","child"), indParams),""); - cohortDsd.addColumn("CF2A", "ABC+3TC+NVP", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/NVP","First line","child"), indParams),""); - cohortDsd.addColumn("CF2B", "ABC+3TC+EFV", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/EFV","First line","child"), indParams),""); - cohortDsd.addColumn("CF2D", "AZT+3TC+LPVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/LPV/r","First line","child"), indParams),""); - cohortDsd.addColumn("CF2G", "ABC+3TC+DTG", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/DTG","First line","child"), indParams),""); - cohortDsd.addColumn("CF4E", "TDF+3TC+DTG", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/DTG","First line","child"), indParams),""); - cohortDsd.addColumn("CF5X", "Any other first line adult regimens", ReportUtils.map(fmapIndicators.patientsOnOtherRegimen("Other","First line","child"), indParams),""); - - return cohortDsd; - } - - protected DataSetDefinition fmapChildSecondLineRegimens() { - CohortIndicatorDataSetDefinition cohortDsd = new CohortIndicatorDataSetDefinition(); - cohortDsd.setName("PAEDIATRIC ART"); - cohortDsd.setDescription("2nd Line regimens"); - cohortDsd.addParameter(new Parameter("startDate", "Start Date", Date.class)); - cohortDsd.addParameter(new Parameter("endDate", "End Date", Date.class)); - - String indParams = "startDate=${startDate},endDate=${endDate}"; - cohortDsd.addColumn("CS1A", "AZT+3TC+LPVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/LPV/r","Second line","child"), indParams),""); - cohortDsd.addColumn("CS1C", "AZT+3TC+DRV+RTV+RAL", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/DRV/RTV/RAL","Second line","child"), indParams),""); - cohortDsd.addColumn("CS2A", "ABC+3TC+LPVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/LPV/r","Second line","child"), indParams),""); - cohortDsd.addColumn("CS2B", "ABC+3TC+DTG", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/DTG","Second line","child"), indParams),""); - cohortDsd.addColumn("CS2D", "ABC+3TC+DRV+RTV+RAL", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/DRV/RTV/RAL","Second line","child"), indParams),""); - cohortDsd.addColumn("AF5X", "Any other second line adult regimens", ReportUtils.map(fmapIndicators.patientsOnOtherRegimen("Other","Second line","child"), indParams),""); - - return cohortDsd; - } - - protected DataSetDefinition fmapChildThirdLineRegimens() { - CohortIndicatorDataSetDefinition cohortDsd = new CohortIndicatorDataSetDefinition(); - cohortDsd.setName("PAEDIATRIC ART"); - cohortDsd.setDescription("3rd Line regimens"); - cohortDsd.addParameter(new Parameter("startDate", "Start Date", Date.class)); - cohortDsd.addParameter(new Parameter("endDate", "End Date", Date.class)); - - String indParams = "startDate=${startDate},endDate=${endDate}"; - cohortDsd.addColumn("CT1H", "AZT+3TC+DRV+RTV+RAL", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/DRV/RTV/RAL","Third line","child"), indParams),""); - cohortDsd.addColumn("CT2D", "ABC+3TC+DRV+RTV+RAL", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/DRV/RTV/RAL","Third line","child"), indParams),""); - cohortDsd.addColumn("CT3X", "Any other thirdline adult regimens", ReportUtils.map(fmapIndicators.patientsOnOtherRegimen("Other","Third line","child"), indParams),""); - - return cohortDsd; - } -} \ No newline at end of file + protected static final Log log = LogFactory.getLog(FmapReportBuilder.class); + + @Autowired + private FmapIndicatorLibrary fmapIndicators; + + @Autowired + private CommonDimensionLibrary commonDimensions; + + /** + * @see org.openmrs.module.kenyacore.report.builder.AbstractReportBuilder#getParameters(org.openmrs.module.kenyacore.report.ReportDescriptor) + */ + @Override + protected List getParameters(ReportDescriptor descriptor) { + return Arrays.asList( + new Parameter("startDate", "Start Date", Date.class), + new Parameter("endDate", "End Date", Date.class) + //new Parameter("dateBasedReporting", "", String.class) + ); + } + + /** + * @see org.openmrs.module.kenyacore.report.builder.AbstractReportBuilder#buildDataSets(org.openmrs.module.kenyacore.report.ReportDescriptor, org.openmrs.module.reporting.report.definition.ReportDefinition) + */ + @SuppressWarnings("unchecked") + @Override + protected List> buildDataSets(ReportDescriptor descriptor, ReportDefinition report) { + return Arrays.asList( + ReportUtils.map(fmapPatientRegimens(), "startDate=${startDate},endDate=${endDate}") + ); + } + + + /** + * Creates the dataset for Adult first line regimens + * + * @return the dataset + */ + protected DataSetDefinition fmapPatientRegimens() { + CohortIndicatorDataSetDefinition cohortDsd = new CohortIndicatorDataSetDefinition(); + cohortDsd.setName("adultFirstLine"); + cohortDsd.setDescription("ARV Treatment Regimen"); + cohortDsd.addParameter(new Parameter("startDate", "Start Date", Date.class)); + cohortDsd.addParameter(new Parameter("endDate", "End Date", Date.class)); + + String indParams = "startDate=${startDate},endDate=${endDate}"; + //Adult First Line + //Male + cohortDsd.addColumn("AF1A_M", "AZT+3TC+NVP", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/NVP","First line","adult", "Male"), indParams),""); + cohortDsd.addColumn("AF1B_M", "AZT+3TC+EFV", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/EFV","First line","adult", "Male"), indParams),""); + cohortDsd.addColumn("AF1D_M", "AZT+3TC+DTG", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/DTG","First line","adult", "Male"), indParams),""); + cohortDsd.addColumn("AF1E_M", "AZT+3TC+LPVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/LPV/r","First line","adult", "Male"), indParams),""); + cohortDsd.addColumn("AF1F_M", "AZT+3TC+ATVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/ATV/r","First line","adult", "Male"), indParams),""); + cohortDsd.addColumn("AF2A_M", "TDF+3TC+NVP", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/NVP","First line","adult", "Male"), indParams),""); + cohortDsd.addColumn("AF2B_M", "TDF+3TC+EFV", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/EFV","First line","adult", "Male"), indParams),""); + cohortDsd.addColumn("AF2D_M", "TDF+3TC+ATVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/ATV/r","First line","adult", "Male"), indParams),""); + cohortDsd.addColumn("AF2E_M", "TDF+3TC+DTG", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/DTG","First line","adult", "Male"), indParams),""); + cohortDsd.addColumn("AF2F_M", "TDF+3TC+LPVr(1L Adults < 40kg)", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/LPV/r","First line","adult", "Male"), indParams),""); + cohortDsd.addColumn("AF4A_M", "ABC+3TC+NVP", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/NVP","First line","adult", "Male"), indParams),""); + cohortDsd.addColumn("AF4B_M", "ABC+3TC+EFV", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/EFV","First line","adult", "Male"), indParams),""); + cohortDsd.addColumn("AF4C_M", "ABC+3TC+DTG", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/DTG","First line","adult", "Male"), indParams),""); + cohortDsd.addColumn("AF5X_M", "Any other first line adult regimens", ReportUtils.map(fmapIndicators.patientsOnOtherRegimen("Other","First line","adult", "Male"), indParams),""); + //Female + cohortDsd.addColumn("AF1A_F", "AZT+3TC+NVP", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/NVP","First line","adult", "Female"), indParams),""); + cohortDsd.addColumn("AF1B_F", "AZT+3TC+EFV", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/EFV","First line","adult","Female"), indParams),""); + cohortDsd.addColumn("AF1D_F", "AZT+3TC+DTG", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/DTG","First line","adult","Female"), indParams),""); + cohortDsd.addColumn("AF1E_F", "AZT+3TC+LPVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/LPV/r","First line","adult","Female"), indParams),""); + cohortDsd.addColumn("AF1F_F", "AZT+3TC+ATVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/ATV/r","First line","adult","Female"), indParams),""); + cohortDsd.addColumn("AF2A_F", "TDF+3TC+NVP", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/NVP","First line","adult","Female"), indParams),""); + cohortDsd.addColumn("AF2B_F", "TDF+3TC+EFV", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/EFV","First line","adult","Female"), indParams),""); + cohortDsd.addColumn("AF2D_F", "TDF+3TC+ATVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/ATV/r","First line","adult","Female"), indParams),""); + cohortDsd.addColumn("AF2E_F", "TDF+3TC+DTG", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/DTG","First line","adult","Female"), indParams),""); + cohortDsd.addColumn("AF2F_F", "TDF+3TC+LPVr(1L Adults < 40kg)", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/LPV/r","First line","adult","Female"), indParams),""); + cohortDsd.addColumn("AF4A_F", "ABC+3TC+NVP", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/NVP","First line","adult","Female"), indParams),""); + cohortDsd.addColumn("AF4B_F", "ABC+3TC+EFV", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/EFV","First line","adult","Female"), indParams),""); + cohortDsd.addColumn("AF4C_F", "ABC+3TC+DTG", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/DTG","First line","adult","Female"), indParams),""); + cohortDsd.addColumn("AF5X_F", "Any other first line adult regimens", ReportUtils.map(fmapIndicators.patientsOnOtherRegimen("Other","First line","adult","Female"), indParams),""); + //Adult Second Line + //Male + cohortDsd.addColumn("AS1A_M", "AZT+3TC+LPVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/LPV/r","Second line","adult", "Male"), indParams),""); + cohortDsd.addColumn("AS1B_M", "AZT+3TC+ATVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/ATV/r","Second line","adult", "Male"), indParams),""); + cohortDsd.addColumn("AS1C_M", "AZT+3TC+DTG", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/DTG","Second line","adult", "Male"), indParams),""); + cohortDsd.addColumn("AS2A_M", "TDF+3TC+LPVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/LPV/r","Second line","adult", "Male"), indParams),""); + cohortDsd.addColumn("AS2B_M", "TDF+3TC+DTG", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/DTG","Second line","adult", "Male"), indParams),""); + cohortDsd.addColumn("AS2C_M", "TDF+3TC+ATVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/ATV/r","Second line","adult", "Male"), indParams),""); + cohortDsd.addColumn("AS5A_M", "ABC+3TC+LPVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/LPV/r","Second line","adult", "Male"), indParams),""); + cohortDsd.addColumn("AS5B_M", "ABC+3TC+ATVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/ATV/r","Second line","adult", "Male"), indParams),""); + cohortDsd.addColumn("AS5C_M", "ABC+3TC+DTG", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/DTG","Second line","adult", "Male"), indParams),""); + cohortDsd.addColumn("AF5X_M", "Any other second line adult regimens", ReportUtils.map(fmapIndicators.patientsOnOtherRegimen("Other","Second line","adult", "Male"), indParams),""); + //Female + cohortDsd.addColumn("AS1A_F", "AZT+3TC+LPVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/LPV/r","Second line","adult", "Female"), indParams),""); + cohortDsd.addColumn("AS1B_F", "AZT+3TC+ATVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/ATV/r","Second line","adult", "Female"), indParams),""); + cohortDsd.addColumn("AS1C_F", "AZT+3TC+DTG", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/DTG","Second line","adult", "Female"), indParams),""); + cohortDsd.addColumn("AS2A_F", "TDF+3TC+LPVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/LPV/r","Second line","adult", "Female"), indParams),""); + cohortDsd.addColumn("AS2B_F", "TDF+3TC+DTG", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/DTG","Second line","adult", "Female"), indParams),""); + cohortDsd.addColumn("AS2C_F", "TDF+3TC+ATVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/ATV/r","Second line","adult", "Female"), indParams),""); + cohortDsd.addColumn("AS5A_F", "ABC+3TC+LPVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/LPV/r","Second line","adult", "Female"), indParams),""); + cohortDsd.addColumn("AS5B_F", "ABC+3TC+ATVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/ATV/r","Second line","adult", "Male"), indParams),""); + cohortDsd.addColumn("AS5C_F", "ABC+3TC+DTG", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/DTG","Second line","adult", "Female"), indParams),""); + cohortDsd.addColumn("AF5X_F", "Any other second line adult regimens", ReportUtils.map(fmapIndicators.patientsOnOtherRegimen("Other","Second line","adult", "Female"), indParams),""); + + //Adult Third Line + //Male + cohortDsd.addColumn("AT2D_M", "TDF+3TC+DTG+DRV+RTV", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/DTG/DRV/RTV","Third line","adult", "Male"), indParams),""); + cohortDsd.addColumn("AT2E_M", "TDF+3TC+RAL+DRV+RTV", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/RAL/DRV/RTV","Third line","adult", "Male"), indParams),""); + cohortDsd.addColumn("AT2F_M", "TDF+3TC+DTG+ETV+DRV+RTV", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/DTG/ETV/DRV/RTV","Third line","adult", "Male"), indParams),""); + cohortDsd.addColumn("AT2X_M", "Any other thirdline adult regimens", ReportUtils.map(fmapIndicators.patientsOnOtherRegimen("Other","Third line","adult", "Male"), indParams),""); + //Female + cohortDsd.addColumn("AT2D_F", "TDF+3TC+DTG+DRV+RTV", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/DTG/DRV/RTV","Third line","adult", "Female"), indParams),""); + cohortDsd.addColumn("AT2E_F", "TDF+3TC+RAL+DRV+RTV", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/RAL/DRV/RTV","Third line","adult", "Female"), indParams),""); + cohortDsd.addColumn("AT2F_F", "TDF+3TC+DTG+ETV+DRV+RTV", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/DTG/ETV/DRV/RTV","Third line","adult", "Female"), indParams),""); + cohortDsd.addColumn("AT2X_F", "Any other thirdline adult regimens", ReportUtils.map(fmapIndicators.patientsOnOtherRegimen("Other","Third line","adult", "Female"), indParams),""); + + //Paediatric First Line + //Male + cohortDsd.addColumn("CF1A_M", "AZT+3TC+NVP", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/NVP","First line","child", "Male"), indParams),""); + cohortDsd.addColumn("CF1B_M", "AZT+3TC+EFV", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/EFV","First line","child", "Male"), indParams),""); + cohortDsd.addColumn("CF1C_M", "AZT+3TC+LPVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/LPV/r","First line","child", "Male"), indParams),""); + cohortDsd.addColumn("CF2A_M", "ABC+3TC+NVP", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/NVP","First line","child", "Male"), indParams),""); + cohortDsd.addColumn("CF2B_M", "ABC+3TC+EFV", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/EFV","First line","child", "Male"), indParams),""); + cohortDsd.addColumn("CF2D_M", "AZT+3TC+LPVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/LPV/r","First line","child", "Male"), indParams),""); + cohortDsd.addColumn("CF2G_M", "ABC+3TC+DTG", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/DTG","First line","child", "Male"), indParams),""); + cohortDsd.addColumn("CF4E_M", "TDF+3TC+DTG", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/DTG","First line","child", "Male"), indParams),""); + cohortDsd.addColumn("CF5X_M", "Any other first line adult regimens", ReportUtils.map(fmapIndicators.patientsOnOtherRegimen("Other","First line","child", "Male"), indParams),""); + + //Female + cohortDsd.addColumn("CF1A_F", "AZT+3TC+NVP", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/NVP","First line","child", "Female"), indParams),""); + cohortDsd.addColumn("CF1B_F", "AZT+3TC+EFV", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/EFV","First line","child", "Female"), indParams),""); + cohortDsd.addColumn("CF1C_F", "AZT+3TC+LPVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/LPV/r","First line","child", "Female"), indParams),""); + cohortDsd.addColumn("CF2A_F", "ABC+3TC+NVP", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/NVP","First line","child", "Female"), indParams),""); + cohortDsd.addColumn("CF2B_F", "ABC+3TC+EFV", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/EFV","First line","child", "Female"), indParams),""); + cohortDsd.addColumn("CF2D_F", "AZT+3TC+LPVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/LPV/r","First line","child", "Female"), indParams),""); + cohortDsd.addColumn("CF2G_F", "ABC+3TC+DTG", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/DTG","First line","child", "Female"), indParams),""); + cohortDsd.addColumn("CF4E_F", "TDF+3TC+DTG", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/DTG","First line","child", "Female"), indParams),""); + cohortDsd.addColumn("CF5X_F", "Any other first line adult regimens", ReportUtils.map(fmapIndicators.patientsOnOtherRegimen("Other","First line","child", "Female"), indParams),""); + + + //Paediatric Second Line + //Male + cohortDsd.addColumn("CS1A_M", "AZT+3TC+LPVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/LPV/r","Second line","child", "Male"), indParams),""); + cohortDsd.addColumn("CS1C_M", "AZT+3TC+DRV+RTV+RAL", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/DRV/RTV/RAL","Second line","child", "Male"), indParams),""); + cohortDsd.addColumn("CS2A_M", "ABC+3TC+LPVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/LPV/r","Second line","child", "Male"), indParams),""); + cohortDsd.addColumn("CS2B_M", "ABC+3TC+DTG", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/DTG","Second line","child", "Male"), indParams),""); + cohortDsd.addColumn("CS2D_M", "ABC+3TC+DRV+RTV+RAL", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/DRV/RTV/RAL","Second line","child", "Male"), indParams),""); + cohortDsd.addColumn("AF5X_M", "Any other second line adult regimens", ReportUtils.map(fmapIndicators.patientsOnOtherRegimen("Other","Second line","child", "Male"), indParams),""); + //Female + cohortDsd.addColumn("CS1A_F", "AZT+3TC+LPVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/LPV/r","Second line","child", "Female"), indParams),""); + cohortDsd.addColumn("CS1C_F", "AZT+3TC+DRV+RTV+RAL", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/DRV/RTV/RAL","Second line","child", "Female"), indParams),""); + cohortDsd.addColumn("CS2A_F", "ABC+3TC+LPVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/LPV/r","Second line","child", "Female"), indParams),""); + cohortDsd.addColumn("CS2B_F", "ABC+3TC+DTG", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/DTG","Second line","child", "Female"), indParams),""); + cohortDsd.addColumn("CS2D_F", "ABC+3TC+DRV+RTV+RAL", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/DRV/RTV/RAL","Second line","child", "Female"), indParams),""); + cohortDsd.addColumn("AF5X_F", "Any other second line adult regimens", ReportUtils.map(fmapIndicators.patientsOnOtherRegimen("Other","Second line","child", "Female"), indParams),""); + + //Paediatric Third Line + cohortDsd.addColumn("CT1H_M", "AZT+3TC+DRV+RTV+RAL", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/DRV/RTV/RAL","Third line","child", "Male"), indParams),""); + cohortDsd.addColumn("CT2D_M", "ABC+3TC+DRV+RTV+RAL", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/DRV/RTV/RAL","Third line","child", "Male"), indParams),""); + cohortDsd.addColumn("CT3X_M", "Any other thirdline adult regimens", ReportUtils.map(fmapIndicators.patientsOnOtherRegimen("Other","Third line","child", "Male"), indParams),""); + + cohortDsd.addColumn("CT1H_F", "AZT+3TC+DRV+RTV+RAL", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/DRV/RTV/RAL","Third line","child", "Female"), indParams),""); + cohortDsd.addColumn("CT2D_F", "ABC+3TC+DRV+RTV+RAL", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/DRV/RTV/RAL","Third line","child", "Female"), indParams),""); + cohortDsd.addColumn("CT3X_F", "Any other thirdline adult regimens", ReportUtils.map(fmapIndicators.patientsOnOtherRegimen("Other","Third line","child", "Female"), indParams),""); + + return cohortDsd; + } + +} diff --git a/api/src/main/java/org/openmrs/module/kenyaemr/reporting/library/shared/hiv/art/FmapCohortLibrary.java b/api/src/main/java/org/openmrs/module/kenyaemr/reporting/library/shared/hiv/art/FmapCohortLibrary.java index b7e5b07edc..e7b316750f 100644 --- a/api/src/main/java/org/openmrs/module/kenyaemr/reporting/library/shared/hiv/art/FmapCohortLibrary.java +++ b/api/src/main/java/org/openmrs/module/kenyaemr/reporting/library/shared/hiv/art/FmapCohortLibrary.java @@ -23,137 +23,148 @@ @Component public class FmapCohortLibrary { - @Autowired - private DatimCohortLibrary datimCohortLibrary; + @Autowired + private DatimCohortLibrary datimCohortLibrary; - /** - * FIRST REVIEW: 12 Months Cohort composition - */ + /** + * FIRST REVIEW: 12 Months Cohort composition + */ - /** - * Number in HEI Cohort 12 months - * @return the indicator - */ - public CohortDefinition AdultFirstTLD() { - String sqlQuery = "SELECT he.patient_id FROM kenyaemr_etl.etl_drug_order he\n" + - "WHERE DATE(he.visit_date) between date_sub(date(:startDate),interval 1 YEAR) and date_sub(date(:endDate),interval 1 YEAR) and drug_name = 'TENOFOVIR DISOPROXIL FUMARATE+LAMIVUDINE+DOLUTEGRAVIR';"; - SqlCohortDefinition cd = new SqlCohortDefinition(); - cd.setName("adultFirstLineTLD"); - cd.setQuery(sqlQuery); - cd.addParameter(new Parameter("startDate", "Start Date", Date.class)); - cd.addParameter(new Parameter("endDate", "End Date", Date.class)); - cd.setDescription("TDF+3TC+DTG"); - return cd; - } + /** + * Number in HEI Cohort 12 months + * @return the indicator + */ + public CohortDefinition AdultFirstTLD() { + String sqlQuery = "SELECT he.patient_id FROM kenyaemr_etl.etl_drug_order he\n" + + "WHERE DATE(he.visit_date) between date_sub(date(:startDate),interval 1 YEAR) and date_sub(date(:endDate),interval 1 YEAR) and drug_name = 'TENOFOVIR DISOPROXIL FUMARATE+LAMIVUDINE+DOLUTEGRAVIR';"; + SqlCohortDefinition cd = new SqlCohortDefinition(); + cd.setName("adultFirstLineTLD"); + cd.setQuery(sqlQuery); + cd.addParameter(new Parameter("startDate", "Start Date", Date.class)); + cd.addParameter(new Parameter("endDate", "End Date", Date.class)); + cd.setDescription("TDF+3TC+DTG"); + return cd; + } - public CohortDefinition AdultFirstTLE() { - String sqlQuery = "SELECT he.patient_id FROM kenyaemr_etl.etl_drug_order he\n" + - "WHERE DATE(he.visit_date) between date_sub(date(:startDate),interval 1 YEAR) and date_sub(date(:endDate),interval 1 YEAR) and drug_name = 'TENOFOVIR DISOPROXIL FUMARATE+LAMIVUDINE+EFAVIRENZ';"; - SqlCohortDefinition cd = new SqlCohortDefinition(); - cd.setName("adultFirstLineTLE"); - cd.setQuery(sqlQuery); - cd.addParameter(new Parameter("startDate", "Start Date", Date.class)); - cd.addParameter(new Parameter("endDate", "End Date", Date.class)); - cd.setDescription("TDF+3TC+EFV"); - return cd; - } + public CohortDefinition AdultFirstTLE() { + String sqlQuery = "SELECT he.patient_id FROM kenyaemr_etl.etl_drug_order he\n" + + "WHERE DATE(he.visit_date) between date_sub(date(:startDate),interval 1 YEAR) and date_sub(date(:endDate),interval 1 YEAR) and drug_name = 'TENOFOVIR DISOPROXIL FUMARATE+LAMIVUDINE+EFAVIRENZ';"; + SqlCohortDefinition cd = new SqlCohortDefinition(); + cd.setName("adultFirstLineTLE"); + cd.setQuery(sqlQuery); + cd.addParameter(new Parameter("startDate", "Start Date", Date.class)); + cd.addParameter(new Parameter("endDate", "End Date", Date.class)); + cd.setDescription("TDF+3TC+EFV"); + return cd; + } - public CohortDefinition patientOnSpecificRegimenAndRegimenLine(String regimenName,String regimenLine,String ageGroup){ - String sqlQuery = "SELECT regimeData.patient_id\n" + - "FROM\n" + - " (SELECT\n" + - " de.patient_id as patient_id,\n" + - " CASE WHEN timestampdiff(YEAR, date(d.DOB), max(fup.visit_date)) >= 15\n" + - " THEN 'adult'\n" + - " ELSE 'child' END AS agegroup,\n" + - " de.program AS program,\n" + - " de.date_started AS date_started,\n" + - " de.regimen AS regimen,\n" + - " de.regimen_name,\n" + - " de.regimen_line AS regimen_line,\n" + - " de.discontinued,\n" + - " de.regimen_discontinued,\n" + - " de.date_discontinued,\n" + - " de.reason_discontinued,\n" + - " de.reason_discontinued_other\n" + - " FROM kenyaemr_etl.etl_drug_event de\n" + - " INNER JOIN kenyaemr_etl.etl_patient_demographics d ON d.patient_id = de.patient_id\n" + - " INNER JOIN kenyaemr_etl.etl_patient_hiv_followup fup ON de.patient_id = fup.patient_id\n" + - " GROUP BY de.encounter_id\n" + - " ) regimeData\n" + - " WHERE regimen NOT IN ('RHZE', 'RHZ', 'SRHZE', 'RfbHZE', 'RfbHZ', 'SRfbHZE', 'S (1 gm vial)', 'E', 'RHE', 'EH')\n" + - " AND date_started <= :endDate AND regimen = ':regimenName'\n" + - " AND regimen_line = ':regimenLine'\n" + - " AND patient_id IS NOT NULL AND agegroup = ':ageGroup';"; - sqlQuery = sqlQuery.replaceAll(":regimenName", regimenName); - sqlQuery = sqlQuery.replaceAll(":regimenLine", regimenLine); - sqlQuery = sqlQuery.replaceAll(":ageGroup", ageGroup); - SqlCohortDefinition cd = new SqlCohortDefinition(); - cd.setName("Regimens"); - cd.setQuery(sqlQuery); - cd.addParameter(new Parameter("startDate", "Start Date", Date.class)); - cd.addParameter(new Parameter("endDate", "End Date", Date.class)); - cd.setDescription("Regimens"); - return cd; - } + public CohortDefinition patientOnSpecificRegimenAndRegimenLine(String regimenName,String regimenLine,String ageGroup, String gender){ + String sqlQuery = "SELECT regimeData.patient_id\n" + + " FROM\n" + + " (SELECT\n" + + " de.patient_id as patient_id,\n" + + " CASE WHEN timestampdiff(YEAR, date(d.DOB), max(fup.visit_date)) >= 15\n" + + " THEN 'adult'\n" + + " ELSE 'child' END AS agegroup,\n" + + " CASE WHEN d.Gender = 'M' THEN 'Male'\n" + + " WHEN d.Gender = 'F' THEN 'Female'\n" + + " ELSE '' END AS gender,\n" + + " de.program AS program,\n" + + " de.date_started AS date_started,\n" + + " de.regimen AS regimen,\n" + + " de.regimen_name,\n" + + " de.regimen_line AS regimen_line,\n" + + " de.discontinued,\n" + + " de.regimen_discontinued,\n" + + " de.date_discontinued,\n" + + " de.reason_discontinued,\n" + + " de.reason_discontinued_other\n" + + " FROM kenyaemr_etl.etl_drug_event de\n" + + " INNER JOIN kenyaemr_etl.etl_patient_demographics d ON d.patient_id = de.patient_id\n" + + " INNER JOIN kenyaemr_etl.etl_patient_hiv_followup fup ON de.patient_id = fup.patient_id\n" + + " GROUP BY de.encounter_id\n" + + " ) regimeData\n" + + " WHERE regimen NOT IN ('RHZE', 'RHZ', 'SRHZE', 'RfbHZE', 'RfbHZ', 'SRfbHZE', 'S (1 gm vial)', 'E', 'RHE', 'EH')\n" + + " AND date_started <= :endDate\n" + + " AND regimen = ':regimenName'\n" + + " AND regimen_line = ':regimenLine'\n" + + " AND patient_id IS NOT NULL\n" + + " AND agegroup = ':ageGroup'\n" + + " AND gender = ':gender';"; + sqlQuery = sqlQuery.replaceAll(":regimenName", regimenName); + sqlQuery = sqlQuery.replaceAll(":regimenLine", regimenLine); + sqlQuery = sqlQuery.replaceAll(":ageGroup", ageGroup); + sqlQuery = sqlQuery.replaceAll(":gender", gender); + SqlCohortDefinition cd = new SqlCohortDefinition(); + cd.setName("Regimens"); + cd.setQuery(sqlQuery); + cd.addParameter(new Parameter("startDate", "Start Date", Date.class)); + cd.addParameter(new Parameter("endDate", "End Date", Date.class)); + cd.setDescription("Regimens"); + return cd; + } - public CohortDefinition txCurrpatientOnSpecificRegimenAndRegimenLine(String regimenName,String regimenLine,String ageGroup) { - CompositionCohortDefinition cd = new CompositionCohortDefinition(); - cd.addParameter(new Parameter("startDate", "Start Date", Date.class)); - cd.addParameter(new Parameter("endDate", "End Date", Date.class)); - cd.addSearch("txcurr", ReportUtils.map(datimCohortLibrary.currentlyOnArt(), "startDate=${startDate},endDate=${endDate}")); - cd.addSearch("patientOnSpecificRegimenAndRegimenLine", ReportUtils.map(patientOnSpecificRegimenAndRegimenLine(regimenName, regimenLine, ageGroup), "startDate=${startDate},endDate=${endDate}")); - cd.setCompositionString("(txcurr AND patientOnSpecificRegimenAndRegimenLine"); - return cd; - } + public CohortDefinition txCurrpatientOnSpecificRegimenAndRegimenLine(String regimenName,String regimenLine,String ageGroup, String gender) { + CompositionCohortDefinition cd = new CompositionCohortDefinition(); + cd.addParameter(new Parameter("startDate", "Start Date", Date.class)); + cd.addParameter(new Parameter("endDate", "End Date", Date.class)); + cd.addSearch("txcurr", ReportUtils.map(datimCohortLibrary.currentlyOnArt(), "startDate=${startDate},endDate=${endDate}")); + cd.addSearch("patientOnSpecificRegimenAndRegimenLine", ReportUtils.map(patientOnSpecificRegimenAndRegimenLine(regimenName, regimenLine, ageGroup, gender), "startDate=${startDate},endDate=${endDate}")); + cd.setCompositionString("(txcurr AND patientOnSpecificRegimenAndRegimenLine"); + return cd; + } - public CohortDefinition patientOnAnyOtherRegimenandRegimenLine(String regimenName,String regimenLine,String ageGroup){ - String sqlQuery = "SELECT regimeData.patient_id\n" + - "FROM\n" + - " (SELECT\n" + - " de.patient_id as patient_id,\n" + - " CASE WHEN timestampdiff(YEAR, date(d.DOB), max(fup.visit_date)) >= 15\n" + - " THEN 'adult'\n" + - " ELSE 'child' END AS agegroup,\n" + - " de.program AS program,\n" + - " de.date_started AS date_started,\n" + - " de.regimen AS regimen,\n" + - " de.regimen_name,\n" + - " de.regimen_line AS regimen_line,\n" + - " de.discontinued,\n" + - " de.regimen_discontinued,\n" + - " de.date_discontinued,\n" + - " de.reason_discontinued,\n" + - " de.reason_discontinued_other\n" + - " FROM kenyaemr_etl.etl_drug_event de\n" + - " INNER JOIN kenyaemr_etl.etl_patient_demographics d ON d.patient_id = de.patient_id\n" + - " INNER JOIN kenyaemr_etl.etl_patient_hiv_followup fup ON de.patient_id = fup.patient_id\n" + - " GROUP BY de.encounter_id\n" + - " ) regimeData\n" + - "WHERE regimen NOT IN ('RHZE', 'RHZ', 'SRHZE', 'RfbHZE', 'RfbHZ', 'SRfbHZE', 'S (1 gm vial)', 'E', 'RHE', 'EH',\n" + - " 'AZT/3TC/NVP','AZT/3TC/EFV','AZT/3TC/DTG','AZT/3TC/LPV/r','AZT/3TC/ATV/R','TDF/3TC/NVP','TDF/3TC/EFV','TDF/3TC/ATV/r','TDF/3TC/DTG','TDF/3TC/LPV/r','ABC/3TC/NVP','ABC/3TC/EFV','ABC/3TC/DTG','ABC/3TC/LPV/r','ABC/3TC/ATV/r')\n" + - " AND date_started <= :endDate AND regimen = ':regimenName'\n" + - " AND regimen_line = ':regimenLine'\n" + - " AND patient_id IS NOT NULL AND agegroup = ':ageGroup';"; - sqlQuery = sqlQuery.replaceAll(":regimenName", regimenName); - sqlQuery = sqlQuery.replaceAll(":regimenLine", regimenLine); - sqlQuery = sqlQuery.replaceAll(":ageGroup", ageGroup); - SqlCohortDefinition cd = new SqlCohortDefinition(); - cd.setName("Regimens"); - cd.setQuery(sqlQuery); - cd.addParameter(new Parameter("startDate", "Start Date", Date.class)); - cd.addParameter(new Parameter("endDate", "End Date", Date.class)); - cd.setDescription("Regimens"); - return cd; - } + public CohortDefinition patientOnAnyOtherRegimenandRegimenLine(String regimenName,String regimenLine,String ageGroup, String gender){ + String sqlQuery = "SELECT regimeData.patient_id\n" + + "FROM\n" + + " (SELECT\n" + + " de.patient_id as patient_id,\n" + + " CASE WHEN timestampdiff(YEAR, date(d.DOB), max(fup.visit_date)) >= 15\n" + + " THEN 'adult'\n" + + " ELSE 'child' END AS agegroup,\n" + - public CohortDefinition txCurrpatientOnAnyOtherRegimenandRegimenLine(String regimenName,String regimenLine,String ageGroup) { - CompositionCohortDefinition cd = new CompositionCohortDefinition(); - cd.addParameter(new Parameter("startDate", "Start Date", Date.class)); - cd.addParameter(new Parameter("endDate", "End Date", Date.class)); - cd.addSearch("txcurr", ReportUtils.map(datimCohortLibrary.currentlyOnArt(), "startDate=${startDate},endDate=${endDate}")); - cd.addSearch("patientOnAnyOtherRegimenandRegimenLine", ReportUtils.map(patientOnAnyOtherRegimenandRegimenLine(regimenName, regimenLine, ageGroup), "startDate=${startDate},endDate=${endDate}")); - cd.setCompositionString("(txcurr AND patientOnAnyOtherRegimenandRegimenLine"); - return cd; - } -} \ No newline at end of file + " de.program AS program,\n" + + " CASE WHEN d.Gender = 'M' THEN 'Male'\n" + + " WHEN d.Gender = 'F' THEN 'Female'\n" + + " ELSE '' END AS gender,\n" + + " de.date_started AS date_started,\n" + + " de.regimen AS regimen,\n" + + " de.regimen_name,\n" + + " de.regimen_line AS regimen_line,\n" + + " de.discontinued,\n" + + " de.regimen_discontinued,\n" + + " de.date_discontinued,\n" + + " de.reason_discontinued,\n" + + " de.reason_discontinued_other\n" + + " FROM kenyaemr_etl.etl_drug_event de\n" + + " INNER JOIN kenyaemr_etl.etl_patient_demographics d ON d.patient_id = de.patient_id\n" + + " INNER JOIN kenyaemr_etl.etl_patient_hiv_followup fup ON de.patient_id = fup.patient_id\n" + + " GROUP BY de.encounter_id\n" + + " ) regimeData\n" + + "WHERE regimen NOT IN ('RHZE', 'RHZ', 'SRHZE', 'RfbHZE', 'RfbHZ', 'SRfbHZE', 'S (1 gm vial)', 'E', 'RHE', 'EH',\n" + + " 'AZT/3TC/NVP','AZT/3TC/EFV','AZT/3TC/DTG','AZT/3TC/LPV/r','AZT/3TC/ATV/R','TDF/3TC/NVP','TDF/3TC/EFV','TDF/3TC/ATV/r','TDF/3TC/DTG','TDF/3TC/LPV/r','ABC/3TC/NVP','ABC/3TC/EFV','ABC/3TC/DTG','ABC/3TC/LPV/r','ABC/3TC/ATV/r')\n" + + " AND date_started <= :endDate AND regimen = ':regimenName'\n" + + " AND regimen_line = ':regimenLine'\n" + + " AND patient_id IS NOT NULL AND agegroup = ':ageGroup' AND gender = ':gender';"; + sqlQuery = sqlQuery.replaceAll(":regimenName", regimenName); + sqlQuery = sqlQuery.replaceAll(":regimenLine", regimenLine); + sqlQuery = sqlQuery.replaceAll(":ageGroup", ageGroup); + SqlCohortDefinition cd = new SqlCohortDefinition(); + cd.setName("Regimens"); + cd.setQuery(sqlQuery); + cd.addParameter(new Parameter("startDate", "Start Date", Date.class)); + cd.addParameter(new Parameter("endDate", "End Date", Date.class)); + cd.setDescription("Regimens"); + return cd; + } + + public CohortDefinition txCurrpatientOnAnyOtherRegimenandRegimenLine(String regimenName,String regimenLine,String ageGroup,String gender) { + CompositionCohortDefinition cd = new CompositionCohortDefinition(); + cd.addParameter(new Parameter("startDate", "Start Date", Date.class)); + cd.addParameter(new Parameter("endDate", "End Date", Date.class)); + cd.addSearch("txcurr", ReportUtils.map(datimCohortLibrary.currentlyOnArt(), "startDate=${startDate},endDate=${endDate}")); + cd.addSearch("patientOnAnyOtherRegimenandRegimenLine", ReportUtils.map(patientOnAnyOtherRegimenandRegimenLine(regimenName, regimenLine, ageGroup, gender), "startDate=${startDate},endDate=${endDate}")); + cd.setCompositionString("(txcurr AND patientOnAnyOtherRegimenandRegimenLine"); + return cd; + } +} diff --git a/api/src/main/java/org/openmrs/module/kenyaemr/reporting/library/shared/hiv/art/FmapIndicatorLibrary.java b/api/src/main/java/org/openmrs/module/kenyaemr/reporting/library/shared/hiv/art/FmapIndicatorLibrary.java index ef2de21310..6bf9a1266a 100644 --- a/api/src/main/java/org/openmrs/module/kenyaemr/reporting/library/shared/hiv/art/FmapIndicatorLibrary.java +++ b/api/src/main/java/org/openmrs/module/kenyaemr/reporting/library/shared/hiv/art/FmapIndicatorLibrary.java @@ -19,52 +19,19 @@ @Component public class FmapIndicatorLibrary { - @Autowired - private FmapCohortLibrary fmapCohortLibrary; + @Autowired + private FmapCohortLibrary fmapCohortLibrary; - //Indicator Libraries based on Queries and MOH710 dimensions + //Indicator Libraries -// public CohortIndicator adultfirstlinetld() { -// -// return cohortIndicator("tdf3tcdtg",map(fmapCohortLibrary.mothersReceivedARV12MonthsCohort(), "startDate=${startDate},endDate=${endDate}") -// ); -// } + public CohortIndicator patientsOnSpecificRegimen(String regimenName, String regimenLine, String ageGroup, String gender) { + return cohortIndicator("TDF+3TC+EFV",map(fmapCohortLibrary.txCurrpatientOnSpecificRegimenAndRegimenLine(regimenName,regimenLine, ageGroup, gender), "startDate=${startDate},endDate=${endDate}") + ); + } - public CohortIndicator adultFirstLineTLD() { - - return cohortIndicator("TDF+3TC+DTG",map(fmapCohortLibrary.AdultFirstTLD(), "startDate=${startDate},endDate=${endDate}") - ); - } - - public CohortIndicator adultFirstLineTLE() { - - return cohortIndicator("TDF+3TC+EFV",map(fmapCohortLibrary.AdultFirstTLE(), "startDate=${startDate},endDate=${endDate}") - ); - } - - public CohortIndicator patientsOnAdultFirstLine(String regimenName, String regimenLine, String ageGroup) { - return cohortIndicator("AdultFirstLine",map(fmapCohortLibrary.txCurrpatientOnSpecificRegimenAndRegimenLine(regimenName,regimenLine, ageGroup), "startDate=${startDate},endDate=${endDate}") - ); - } - - public CohortIndicator patientsOnAdultSecondLine(String regimenName, String regimenLine, String ageGroup) { - return cohortIndicator("AdultSecondLine",map(fmapCohortLibrary.txCurrpatientOnSpecificRegimenAndRegimenLine(regimenName,regimenLine, ageGroup), "startDate=${startDate},endDate=${endDate}") - ); - } - - public CohortIndicator patientsOnAdultThirdLine(String regimenName, String regimenLine, String ageGroup) { - return cohortIndicator("AdultThirdLine",map(fmapCohortLibrary.txCurrpatientOnSpecificRegimenAndRegimenLine(regimenName,regimenLine, ageGroup), "startDate=${startDate},endDate=${endDate}") - ); - } - - public CohortIndicator patientsOnSpecificRegimen(String regimenName, String regimenLine, String ageGroup) { - return cohortIndicator("TDF+3TC+EFV",map(fmapCohortLibrary.txCurrpatientOnSpecificRegimenAndRegimenLine(regimenName,regimenLine, ageGroup), "startDate=${startDate},endDate=${endDate}") - ); - } - - public CohortIndicator patientsOnOtherRegimen(String regimenName, String regimenLine, String ageGroup) { - return cohortIndicator("TDF+3TC+EFV",map(fmapCohortLibrary.txCurrpatientOnAnyOtherRegimenandRegimenLine(regimenName,regimenLine, ageGroup), "startDate=${startDate},endDate=${endDate}") - ); - } + public CohortIndicator patientsOnOtherRegimen(String regimenName, String regimenLine, String ageGroup, String gender) { + return cohortIndicator("TDF+3TC+EFV",map(fmapCohortLibrary.txCurrpatientOnAnyOtherRegimenandRegimenLine(regimenName,regimenLine, ageGroup, gender), "startDate=${startDate},endDate=${endDate}") + ); + } } diff --git a/omod/src/main/webapp/resources/reports/fmaps_template.xls b/omod/src/main/webapp/resources/reports/fmaps_template.xls index 3f5208830816d42898dbfd45d179a6d1e98a1344..bd6b8600f21ef27c38fafdce054dc6d5b9fc7c7e 100644 GIT binary patch literal 30720 zcmeHw3wT{ub>_aZEMHj>tTWXIOk%Tlmx)wyvT2qf3?m8C?|7584n zal*6?l!gvaC@Bf10YZ5Uj}{7~V5T8BooT1-q^0dZhce7e7-l*x!y`~yV7>;=|F3n= zW1oBOwL|CY_mz)xe6H?UXYaNCwf5R;uf5MX*MIhf#^>MriFIEyq3y6)WPW_T+EfMT zF?>Jdo;MhC0N+Xb@%8K1T{6D@Z2K2vffox{7ohDk2VB53;%LIL9LEYAD{-vCu^Pu39BXl`!_kamJ&p}HHsaWX!@<#lqZLORj?Fl> z;Mj^|8;*7y9XPh**nwjwj$Jr*xbNHJzmtd`%-&Vn6f?#i^W-wmdO!*s?`I&s*0ynZ1uLtd49Y-&&T5Nu| z?m2dO>HA+Z73Q}qpT(y!{{zQeW}dNOAT=}L{Bv#nf*}>gW^Kqd* zEuXhY^g*FM;~c~vj!55+^$GSj%V(>6*5fl~J|lI$B9u&uCUZU?W!dkN*2r364i>XOoaC7Bfj)b|Okosb-+WSZh~~Aw7#(+A4hhjFj8efr9B)~luT)tFlfvtEs^ zySrd{x9+l7684^j^=a{w_9#7Auv#FVl zl~v{g7$Z#I#>%DUgUp26cDA+ceO~g~_nW`J?tp{4U2{k$PoaPR=I9K=QRPd~$u+9{ zPcQxbu&G1!3Y%-^9cl-5J=t7(M+y4Q67=mQ=+%+*#qbcZ|5F9AmG4=>b}y#?R(&-6 zBX!aA-L=v5=9SU(4=;wFDbH*`bpfS|5{_?<28@hn99eb z9jiV1gl`ErH9I|0zJm{i+2E}Y>IQW(6OFz)uyj0QGRU+`nnQ)JbI*D z;JMn=6t9e9vZZ*MUH(^FqUj+%>)rApy6Wo~^9EZl)fa0wA-PHyJS`>gSo8oNi>`LV z8c_(3&%d=b$ls%vEZ=06Z>Q{yM z6QHZz3Uu`!ln?Ru+UsgXOI#2I`w{(z3w*vm`{kXMpna4M`-JT2h73Ql zaw^xSI~CyX(OWz_+x<)FQkM`~1WH$#I`JZGZF2NBNuJvHV>7HS7@T*UG2ZKYjkTfBJOWKYhCG zpIhBH7Lu!U=oO*|@RYKT6@PrWcKq?_cKp%ty;!dLC+_)#;aCAV-MV*8uw%RJxqbHzjch4@feE%Ou) z=MM|xR}sBb`9eG?ln=;_7#|(_k3|oZxBNNKUY7r>Kd`;*JXz@+7h+Z(<3`1H7fp#zE(f-^|Jem`UCic@~Z&<2)i*3*!FA}KOx=jUtar0 zj$eY`@-^hr zd6E2Wyj&%Jn=V(%-{qH=$ln#07vpaeo<_m*DqVZGIJ=z0#6)^7-%0AKFtv-+)nRHk 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�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 P|1aK5`5Tq_r^x?*Znn?H literal 40960 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 I6L#qTKWl~VMgRZ+ From de9525ec7a0e902fcfaf19f2dc85bca2e181dff6 Mon Sep 17 00:00:00 2001 From: patryllus Date: Thu, 20 Jun 2024 20:51:18 +0300 Subject: [PATCH 2/7] Initial stubs for MOH 729 FMAPS - old template --- .../builder/common/FmapReportBuilder.java | 206 ++++++++++-------- .../shared/hiv/art/FmapCohortLibrary.java | 195 +++++++++++++---- .../shared/hiv/art/FmapIndicatorLibrary.java | 18 +- .../reports/.~lock.fmaps_template.xls# | 1 + .../reports/.~lock.fmaps_template_old.xls# | 1 + .../resources/reports/fmaps_template.xls | Bin 30720 -> 102912 bytes .../resources/reports/fmaps_template_old.xls | Bin 0 -> 32768 bytes 7 files changed, 285 insertions(+), 136 deletions(-) create mode 100644 omod/src/main/webapp/resources/reports/.~lock.fmaps_template.xls# create mode 100644 omod/src/main/webapp/resources/reports/.~lock.fmaps_template_old.xls# create mode 100644 omod/src/main/webapp/resources/reports/fmaps_template_old.xls diff --git a/api/src/main/java/org/openmrs/module/kenyaemr/reporting/builder/common/FmapReportBuilder.java b/api/src/main/java/org/openmrs/module/kenyaemr/reporting/builder/common/FmapReportBuilder.java index f520c48a4c..b472fac4fd 100644 --- a/api/src/main/java/org/openmrs/module/kenyaemr/reporting/builder/common/FmapReportBuilder.java +++ b/api/src/main/java/org/openmrs/module/kenyaemr/reporting/builder/common/FmapReportBuilder.java @@ -75,7 +75,7 @@ protected List> buildDataSets(ReportDescriptor descrip */ protected DataSetDefinition fmapPatientRegimens() { CohortIndicatorDataSetDefinition cohortDsd = new CohortIndicatorDataSetDefinition(); - cohortDsd.setName("adultFirstLine"); + cohortDsd.setName("patientReegimen"); cohortDsd.setDescription("ARV Treatment Regimen"); cohortDsd.addParameter(new Parameter("startDate", "Start Date", Date.class)); cohortDsd.addParameter(new Parameter("endDate", "End Date", Date.class)); @@ -83,120 +83,136 @@ protected DataSetDefinition fmapPatientRegimens() { String indParams = "startDate=${startDate},endDate=${endDate}"; //Adult First Line //Male - cohortDsd.addColumn("AF1A_M", "AZT+3TC+NVP", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/NVP","First line","adult", "Male"), indParams),""); - cohortDsd.addColumn("AF1B_M", "AZT+3TC+EFV", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/EFV","First line","adult", "Male"), indParams),""); - cohortDsd.addColumn("AF1D_M", "AZT+3TC+DTG", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/DTG","First line","adult", "Male"), indParams),""); - cohortDsd.addColumn("AF1E_M", "AZT+3TC+LPVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/LPV/r","First line","adult", "Male"), indParams),""); - cohortDsd.addColumn("AF1F_M", "AZT+3TC+ATVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/ATV/r","First line","adult", "Male"), indParams),""); - cohortDsd.addColumn("AF2A_M", "TDF+3TC+NVP", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/NVP","First line","adult", "Male"), indParams),""); - cohortDsd.addColumn("AF2B_M", "TDF+3TC+EFV", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/EFV","First line","adult", "Male"), indParams),""); - cohortDsd.addColumn("AF2D_M", "TDF+3TC+ATVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/ATV/r","First line","adult", "Male"), indParams),""); - cohortDsd.addColumn("AF2E_M", "TDF+3TC+DTG", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/DTG","First line","adult", "Male"), indParams),""); - cohortDsd.addColumn("AF2F_M", "TDF+3TC+LPVr(1L Adults < 40kg)", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/LPV/r","First line","adult", "Male"), indParams),""); - cohortDsd.addColumn("AF4A_M", "ABC+3TC+NVP", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/NVP","First line","adult", "Male"), indParams),""); - cohortDsd.addColumn("AF4B_M", "ABC+3TC+EFV", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/EFV","First line","adult", "Male"), indParams),""); - cohortDsd.addColumn("AF4C_M", "ABC+3TC+DTG", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/DTG","First line","adult", "Male"), indParams),""); - cohortDsd.addColumn("AF5X_M", "Any other first line adult regimens", ReportUtils.map(fmapIndicators.patientsOnOtherRegimen("Other","First line","adult", "Male"), indParams),""); + cohortDsd.addColumn("AF1A_M", "AZT+3TC+NVP", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/NVP","First line","adult", "Male", "False"), indParams),""); + cohortDsd.addColumn("AF1B_M", "AZT+3TC+EFV", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/EFV","First line","adult", "Male", "False"), indParams),""); + cohortDsd.addColumn("AF1D_M", "AZT+3TC+DTG", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/DTG","First line","adult", "Male", "False"), indParams),""); + cohortDsd.addColumn("AF1E_M", "AZT+3TC+LPVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/LPV/r","First line","adult", "Male", "False"), indParams),""); + cohortDsd.addColumn("AF1F_M", "AZT+3TC+ATVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/ATV/r","First line","adult", "Male", "False"), indParams),""); + cohortDsd.addColumn("AF2A_M", "TDF+3TC+NVP", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/NVP","First line","adult", "Male", "False"), indParams),""); + cohortDsd.addColumn("AF2B_M", "TDF+3TC+EFV", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/EFV","First line","adult", "Male", "False"), indParams),""); + cohortDsd.addColumn("AF2D_M", "TDF+3TC+ATVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/ATV/r","First line","adult", "Male", "False"), indParams),""); + cohortDsd.addColumn("AF2E_M", "TDF+3TC+DTG", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/DTG","First line","adult", "Male", "False"), indParams),""); + cohortDsd.addColumn("AF2F_M", "TDF+3TC+LPVr(1L Adults < 40kg)", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/LPV/r","First line","adult", "Male", "False"), indParams),""); + cohortDsd.addColumn("AF4A_M", "ABC+3TC+NVP", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/NVP","First line","adult", "Male", "False"), indParams),""); + cohortDsd.addColumn("AF4B_M", "ABC+3TC+EFV", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/EFV","First line","adult", "Male", "False"), indParams),""); + cohortDsd.addColumn("AF4C_M", "ABC+3TC+DTG", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/DTG","First line","adult", "Male", "False"), indParams),""); + cohortDsd.addColumn("AF5X_M", "Any other first line adult regimens", ReportUtils.map(fmapIndicators.patientsOnOtherRegimen("Other","First line","adult", "Male", "False"), indParams),""); //Female - cohortDsd.addColumn("AF1A_F", "AZT+3TC+NVP", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/NVP","First line","adult", "Female"), indParams),""); - cohortDsd.addColumn("AF1B_F", "AZT+3TC+EFV", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/EFV","First line","adult","Female"), indParams),""); - cohortDsd.addColumn("AF1D_F", "AZT+3TC+DTG", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/DTG","First line","adult","Female"), indParams),""); - cohortDsd.addColumn("AF1E_F", "AZT+3TC+LPVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/LPV/r","First line","adult","Female"), indParams),""); - cohortDsd.addColumn("AF1F_F", "AZT+3TC+ATVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/ATV/r","First line","adult","Female"), indParams),""); - cohortDsd.addColumn("AF2A_F", "TDF+3TC+NVP", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/NVP","First line","adult","Female"), indParams),""); - cohortDsd.addColumn("AF2B_F", "TDF+3TC+EFV", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/EFV","First line","adult","Female"), indParams),""); - cohortDsd.addColumn("AF2D_F", "TDF+3TC+ATVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/ATV/r","First line","adult","Female"), indParams),""); - cohortDsd.addColumn("AF2E_F", "TDF+3TC+DTG", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/DTG","First line","adult","Female"), indParams),""); - cohortDsd.addColumn("AF2F_F", "TDF+3TC+LPVr(1L Adults < 40kg)", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/LPV/r","First line","adult","Female"), indParams),""); - cohortDsd.addColumn("AF4A_F", "ABC+3TC+NVP", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/NVP","First line","adult","Female"), indParams),""); - cohortDsd.addColumn("AF4B_F", "ABC+3TC+EFV", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/EFV","First line","adult","Female"), indParams),""); - cohortDsd.addColumn("AF4C_F", "ABC+3TC+DTG", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/DTG","First line","adult","Female"), indParams),""); - cohortDsd.addColumn("AF5X_F", "Any other first line adult regimens", ReportUtils.map(fmapIndicators.patientsOnOtherRegimen("Other","First line","adult","Female"), indParams),""); + cohortDsd.addColumn("AF1A_F", "AZT+3TC+NVP", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/NVP","First line","adult", "Female", "False"), indParams),""); + cohortDsd.addColumn("AF1B_F", "AZT+3TC+EFV", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/EFV","First line","adult","Female", "False"), indParams),""); + cohortDsd.addColumn("AF1D_F", "AZT+3TC+DTG", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/DTG","First line","adult","Female", "False"), indParams),""); + cohortDsd.addColumn("AF1E_F", "AZT+3TC+LPVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/LPV/r","First line","adult","Female", "False"), indParams),""); + cohortDsd.addColumn("AF1F_F", "AZT+3TC+ATVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/ATV/r","First line","adult","Female", "False"), indParams),""); + cohortDsd.addColumn("AF2A_F", "TDF+3TC+NVP", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/NVP","First line","adult","Female", "False"), indParams),""); + cohortDsd.addColumn("AF2B_F", "TDF+3TC+EFV", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/EFV","First line","adult","Female", "False"), indParams),""); + cohortDsd.addColumn("AF2D_F", "TDF+3TC+ATVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/ATV/r","First line","adult","Female", "False"), indParams),""); + cohortDsd.addColumn("AF2E_F", "TDF+3TC+DTG", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/DTG","First line","adult","Female", "False"), indParams),""); + cohortDsd.addColumn("AF2F_F", "TDF+3TC+LPVr(1L Adults < 40kg)", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/LPV/r","First line","adult","Female", "False"), indParams),""); + cohortDsd.addColumn("AF4A_F", "ABC+3TC+NVP", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/NVP","First line","adult","Female", "False"), indParams),""); + cohortDsd.addColumn("AF4B_F", "ABC+3TC+EFV", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/EFV","First line","adult","Female", "False"), indParams),""); + cohortDsd.addColumn("AF4C_F", "ABC+3TC+DTG", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/DTG","First line","adult","Female", "False"), indParams),""); + cohortDsd.addColumn("AF5X_F", "Any other first line adult regimens", ReportUtils.map(fmapIndicators.patientsOnOtherRegimen("Other","First line","adult","Female", "False"), indParams),""); //Adult Second Line //Male - cohortDsd.addColumn("AS1A_M", "AZT+3TC+LPVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/LPV/r","Second line","adult", "Male"), indParams),""); - cohortDsd.addColumn("AS1B_M", "AZT+3TC+ATVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/ATV/r","Second line","adult", "Male"), indParams),""); - cohortDsd.addColumn("AS1C_M", "AZT+3TC+DTG", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/DTG","Second line","adult", "Male"), indParams),""); - cohortDsd.addColumn("AS2A_M", "TDF+3TC+LPVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/LPV/r","Second line","adult", "Male"), indParams),""); - cohortDsd.addColumn("AS2B_M", "TDF+3TC+DTG", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/DTG","Second line","adult", "Male"), indParams),""); - cohortDsd.addColumn("AS2C_M", "TDF+3TC+ATVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/ATV/r","Second line","adult", "Male"), indParams),""); - cohortDsd.addColumn("AS5A_M", "ABC+3TC+LPVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/LPV/r","Second line","adult", "Male"), indParams),""); - cohortDsd.addColumn("AS5B_M", "ABC+3TC+ATVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/ATV/r","Second line","adult", "Male"), indParams),""); - cohortDsd.addColumn("AS5C_M", "ABC+3TC+DTG", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/DTG","Second line","adult", "Male"), indParams),""); - cohortDsd.addColumn("AF5X_M", "Any other second line adult regimens", ReportUtils.map(fmapIndicators.patientsOnOtherRegimen("Other","Second line","adult", "Male"), indParams),""); + cohortDsd.addColumn("AS1A_M", "AZT+3TC+LPVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/LPV/r","Second line","adult", "Male", "False"), indParams),""); + cohortDsd.addColumn("AS1B_M", "AZT+3TC+ATVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/ATV/r","Second line","adult", "Male", "False"), indParams),""); + cohortDsd.addColumn("AS1C_M", "AZT+3TC+DTG", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/DTG","Second line","adult", "Male", "False"), indParams),""); + cohortDsd.addColumn("AS2A_M", "TDF+3TC+LPVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/LPV/r","Second line","adult", "Male", "False"), indParams),""); + cohortDsd.addColumn("AS2B_M", "TDF+3TC+DTG", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/DTG","Second line","adult", "Male", "False"), indParams),""); + cohortDsd.addColumn("AS2C_M", "TDF+3TC+ATVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/ATV/r","Second line","adult", "Male", "False"), indParams),""); + cohortDsd.addColumn("AS5A_M", "ABC+3TC+LPVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/LPV/r","Second line","adult", "Male", "False"), indParams),""); + cohortDsd.addColumn("AS5B_M", "ABC+3TC+ATVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/ATV/r","Second line","adult", "Male", "False"), indParams),""); + cohortDsd.addColumn("AS5C_M", "ABC+3TC+DTG", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/DTG","Second line","adult", "Male", "False"), indParams),""); + cohortDsd.addColumn("AS6X_M", "Any other second line adult regimens", ReportUtils.map(fmapIndicators.patientsOnOtherRegimen("Other","Second line","adult", "Male", "False"), indParams),""); //Female - cohortDsd.addColumn("AS1A_F", "AZT+3TC+LPVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/LPV/r","Second line","adult", "Female"), indParams),""); - cohortDsd.addColumn("AS1B_F", "AZT+3TC+ATVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/ATV/r","Second line","adult", "Female"), indParams),""); - cohortDsd.addColumn("AS1C_F", "AZT+3TC+DTG", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/DTG","Second line","adult", "Female"), indParams),""); - cohortDsd.addColumn("AS2A_F", "TDF+3TC+LPVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/LPV/r","Second line","adult", "Female"), indParams),""); - cohortDsd.addColumn("AS2B_F", "TDF+3TC+DTG", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/DTG","Second line","adult", "Female"), indParams),""); - cohortDsd.addColumn("AS2C_F", "TDF+3TC+ATVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/ATV/r","Second line","adult", "Female"), indParams),""); - cohortDsd.addColumn("AS5A_F", "ABC+3TC+LPVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/LPV/r","Second line","adult", "Female"), indParams),""); - cohortDsd.addColumn("AS5B_F", "ABC+3TC+ATVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/ATV/r","Second line","adult", "Male"), indParams),""); - cohortDsd.addColumn("AS5C_F", "ABC+3TC+DTG", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/DTG","Second line","adult", "Female"), indParams),""); - cohortDsd.addColumn("AF5X_F", "Any other second line adult regimens", ReportUtils.map(fmapIndicators.patientsOnOtherRegimen("Other","Second line","adult", "Female"), indParams),""); + cohortDsd.addColumn("AS1A_F", "AZT+3TC+LPVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/LPV/r","Second line","adult", "Female", "False"), indParams),""); + cohortDsd.addColumn("AS1B_F", "AZT+3TC+ATVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/ATV/r","Second line","adult", "Female", "False"), indParams),""); + cohortDsd.addColumn("AS1C_F", "AZT+3TC+DTG", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/DTG","Second line","adult", "Female", "False"), indParams),""); + cohortDsd.addColumn("AS2A_F", "TDF+3TC+LPVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/LPV/r","Second line","adult", "Female", "False"), indParams),""); + cohortDsd.addColumn("AS2B_F", "TDF+3TC+DTG", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/DTG","Second line","adult", "Female", "False"), indParams),""); + cohortDsd.addColumn("AS2C_F", "TDF+3TC+ATVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/ATV/r","Second line","adult", "Female", "False"), indParams),""); + cohortDsd.addColumn("AS5A_F", "ABC+3TC+LPVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/LPV/r","Second line","adult", "Female", "False"), indParams),""); + cohortDsd.addColumn("AS5B_F", "ABC+3TC+ATVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/ATV/r","Second line","adult", "Male", "False"), indParams),""); + cohortDsd.addColumn("AS5C_F", "ABC+3TC+DTG", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/DTG","Second line","adult", "Female", "False"), indParams),""); + cohortDsd.addColumn("AS6X_F", "Any other second line adult regimens", ReportUtils.map(fmapIndicators.patientsOnOtherRegimen("Other","Second line","adult", "Female", "False"), indParams),""); //Adult Third Line //Male - cohortDsd.addColumn("AT2D_M", "TDF+3TC+DTG+DRV+RTV", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/DTG/DRV/RTV","Third line","adult", "Male"), indParams),""); - cohortDsd.addColumn("AT2E_M", "TDF+3TC+RAL+DRV+RTV", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/RAL/DRV/RTV","Third line","adult", "Male"), indParams),""); - cohortDsd.addColumn("AT2F_M", "TDF+3TC+DTG+ETV+DRV+RTV", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/DTG/ETV/DRV/RTV","Third line","adult", "Male"), indParams),""); - cohortDsd.addColumn("AT2X_M", "Any other thirdline adult regimens", ReportUtils.map(fmapIndicators.patientsOnOtherRegimen("Other","Third line","adult", "Male"), indParams),""); + cohortDsd.addColumn("AT2D_M", "TDF+3TC+DTG+DRV+RTV", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/DTG/DRV/RTV","Third line","adult", "Male", "False"), indParams),""); + cohortDsd.addColumn("AT2E_M", "TDF+3TC+RAL+DRV+RTV", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/RAL/DRV/RTV","Third line","adult", "Male", "False"), indParams),""); + cohortDsd.addColumn("AT2F_M", "TDF+3TC+DTG+ETV+DRV+RTV", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/DTG/ETV/DRV/RTV","Third line","adult", "Male", "False"), indParams),""); + cohortDsd.addColumn("AT2X_M", "Any other thirdline adult regimens", ReportUtils.map(fmapIndicators.patientsOnOtherRegimen("Other","Third line","adult", "Male", "False"), indParams),""); //Female - cohortDsd.addColumn("AT2D_F", "TDF+3TC+DTG+DRV+RTV", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/DTG/DRV/RTV","Third line","adult", "Female"), indParams),""); - cohortDsd.addColumn("AT2E_F", "TDF+3TC+RAL+DRV+RTV", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/RAL/DRV/RTV","Third line","adult", "Female"), indParams),""); - cohortDsd.addColumn("AT2F_F", "TDF+3TC+DTG+ETV+DRV+RTV", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/DTG/ETV/DRV/RTV","Third line","adult", "Female"), indParams),""); - cohortDsd.addColumn("AT2X_F", "Any other thirdline adult regimens", ReportUtils.map(fmapIndicators.patientsOnOtherRegimen("Other","Third line","adult", "Female"), indParams),""); + cohortDsd.addColumn("AT2D_F", "TDF+3TC+DTG+DRV+RTV", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/DTG/DRV/RTV","Third line","adult", "Female", "False"), indParams),""); + cohortDsd.addColumn("AT2E_F", "TDF+3TC+RAL+DRV+RTV", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/RAL/DRV/RTV","Third line","adult", "Female", "False"), indParams),""); + cohortDsd.addColumn("AT2F_F", "TDF+3TC+DTG+ETV+DRV+RTV", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/DTG/ETV/DRV/RTV","Third line","adult", "Female", "False"), indParams),""); + cohortDsd.addColumn("AT2X_F", "Any other thirdline adult regimens", ReportUtils.map(fmapIndicators.patientsOnOtherRegimen("Other","Third line","adult", "Female", "False"), indParams),""); //Paediatric First Line //Male - cohortDsd.addColumn("CF1A_M", "AZT+3TC+NVP", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/NVP","First line","child", "Male"), indParams),""); - cohortDsd.addColumn("CF1B_M", "AZT+3TC+EFV", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/EFV","First line","child", "Male"), indParams),""); - cohortDsd.addColumn("CF1C_M", "AZT+3TC+LPVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/LPV/r","First line","child", "Male"), indParams),""); - cohortDsd.addColumn("CF2A_M", "ABC+3TC+NVP", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/NVP","First line","child", "Male"), indParams),""); - cohortDsd.addColumn("CF2B_M", "ABC+3TC+EFV", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/EFV","First line","child", "Male"), indParams),""); - cohortDsd.addColumn("CF2D_M", "AZT+3TC+LPVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/LPV/r","First line","child", "Male"), indParams),""); - cohortDsd.addColumn("CF2G_M", "ABC+3TC+DTG", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/DTG","First line","child", "Male"), indParams),""); - cohortDsd.addColumn("CF4E_M", "TDF+3TC+DTG", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/DTG","First line","child", "Male"), indParams),""); - cohortDsd.addColumn("CF5X_M", "Any other first line adult regimens", ReportUtils.map(fmapIndicators.patientsOnOtherRegimen("Other","First line","child", "Male"), indParams),""); + cohortDsd.addColumn("CF1A_M", "AZT+3TC+NVP", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/NVP","First line","child", "Male", "False"), indParams),""); + cohortDsd.addColumn("CF1B_M", "AZT+3TC+EFV", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/EFV","First line","child", "Male", "False"), indParams),""); + cohortDsd.addColumn("CF1C_M", "AZT+3TC+LPVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/LPV/r","First line","child", "Male", "False"), indParams),""); + cohortDsd.addColumn("CF2A_M", "ABC+3TC+NVP", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/NVP","First line","child", "Male", "False"), indParams),""); + cohortDsd.addColumn("CF2B_M", "ABC+3TC+EFV", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/EFV","First line","child", "Male", "False"), indParams),""); + cohortDsd.addColumn("CF2D_M", "AZT+3TC+LPVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/LPV/r","First line","child", "Male", "False"), indParams),""); + cohortDsd.addColumn("CF2G_M", "ABC+3TC+DTG", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/DTG","First line","child", "Male", "False"), indParams),""); + cohortDsd.addColumn("CF4E_M", "TDF+3TC+DTG", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/DTG","First line","child", "Male", "False"), indParams),""); + cohortDsd.addColumn("CF5X_M", "Any other first line adult regimens", ReportUtils.map(fmapIndicators.patientsOnOtherRegimen("Other","First line","child", "Male", "False"), indParams),""); //Female - cohortDsd.addColumn("CF1A_F", "AZT+3TC+NVP", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/NVP","First line","child", "Female"), indParams),""); - cohortDsd.addColumn("CF1B_F", "AZT+3TC+EFV", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/EFV","First line","child", "Female"), indParams),""); - cohortDsd.addColumn("CF1C_F", "AZT+3TC+LPVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/LPV/r","First line","child", "Female"), indParams),""); - cohortDsd.addColumn("CF2A_F", "ABC+3TC+NVP", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/NVP","First line","child", "Female"), indParams),""); - cohortDsd.addColumn("CF2B_F", "ABC+3TC+EFV", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/EFV","First line","child", "Female"), indParams),""); - cohortDsd.addColumn("CF2D_F", "AZT+3TC+LPVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/LPV/r","First line","child", "Female"), indParams),""); - cohortDsd.addColumn("CF2G_F", "ABC+3TC+DTG", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/DTG","First line","child", "Female"), indParams),""); - cohortDsd.addColumn("CF4E_F", "TDF+3TC+DTG", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/DTG","First line","child", "Female"), indParams),""); - cohortDsd.addColumn("CF5X_F", "Any other first line adult regimens", ReportUtils.map(fmapIndicators.patientsOnOtherRegimen("Other","First line","child", "Female"), indParams),""); + cohortDsd.addColumn("CF1A_F", "AZT+3TC+NVP", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/NVP","First line","child", "Female", "False"), indParams),""); + cohortDsd.addColumn("CF1B_F", "AZT+3TC+EFV", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/EFV","First line","child", "Female", "False"), indParams),""); + cohortDsd.addColumn("CF1C_F", "AZT+3TC+LPVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/LPV/r","First line","child", "Female", "False"), indParams),""); + cohortDsd.addColumn("CF2A_F", "ABC+3TC+NVP", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/NVP","First line","child", "Female", "False"), indParams),""); + cohortDsd.addColumn("CF2B_F", "ABC+3TC+EFV", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/EFV","First line","child", "Female", "False"), indParams),""); + cohortDsd.addColumn("CF2D_F", "AZT+3TC+LPVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/LPV/r","First line","child", "Female", "False"), indParams),""); + cohortDsd.addColumn("CF2G_F", "ABC+3TC+DTG", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/DTG","First line","child", "Female", "False"), indParams),""); + cohortDsd.addColumn("CF4E_F", "TDF+3TC+DTG", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/DTG","First line","child", "Female", "False"), indParams),""); + cohortDsd.addColumn("CF5X_F", "Any other first line adult regimens", ReportUtils.map(fmapIndicators.patientsOnOtherRegimen("Other","First line","child", "Female", "False"), indParams),""); //Paediatric Second Line //Male - cohortDsd.addColumn("CS1A_M", "AZT+3TC+LPVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/LPV/r","Second line","child", "Male"), indParams),""); - cohortDsd.addColumn("CS1C_M", "AZT+3TC+DRV+RTV+RAL", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/DRV/RTV/RAL","Second line","child", "Male"), indParams),""); - cohortDsd.addColumn("CS2A_M", "ABC+3TC+LPVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/LPV/r","Second line","child", "Male"), indParams),""); - cohortDsd.addColumn("CS2B_M", "ABC+3TC+DTG", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/DTG","Second line","child", "Male"), indParams),""); - cohortDsd.addColumn("CS2D_M", "ABC+3TC+DRV+RTV+RAL", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/DRV/RTV/RAL","Second line","child", "Male"), indParams),""); - cohortDsd.addColumn("AF5X_M", "Any other second line adult regimens", ReportUtils.map(fmapIndicators.patientsOnOtherRegimen("Other","Second line","child", "Male"), indParams),""); + cohortDsd.addColumn("CS1A_M", "AZT+3TC+LPVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/LPV/r","Second line","child", "Male", "False"), indParams),""); + cohortDsd.addColumn("CS1C_M", "AZT+3TC+DRV+RTV+RAL", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/DRV/RTV/RAL","Second line","child", "Male", "False"), indParams),""); + cohortDsd.addColumn("CS2A_M", "ABC+3TC+LPVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/LPV/r","Second line","child", "Male", "False"), indParams),""); + cohortDsd.addColumn("CS2B_M", "ABC+3TC+DTG", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/DTG","Second line","child", "Male", "False"), indParams),""); + cohortDsd.addColumn("CS2D_M", "ABC+3TC+DRV+RTV+RAL", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/DRV/RTV/RAL","Second line","child", "Male", "False"), indParams),""); + cohortDsd.addColumn("CS4X_M", "Any other second line adult regimens", ReportUtils.map(fmapIndicators.patientsOnOtherRegimen("Other","Second line","child", "Male", "False"), indParams),""); //Female - cohortDsd.addColumn("CS1A_F", "AZT+3TC+LPVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/LPV/r","Second line","child", "Female"), indParams),""); - cohortDsd.addColumn("CS1C_F", "AZT+3TC+DRV+RTV+RAL", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/DRV/RTV/RAL","Second line","child", "Female"), indParams),""); - cohortDsd.addColumn("CS2A_F", "ABC+3TC+LPVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/LPV/r","Second line","child", "Female"), indParams),""); - cohortDsd.addColumn("CS2B_F", "ABC+3TC+DTG", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/DTG","Second line","child", "Female"), indParams),""); - cohortDsd.addColumn("CS2D_F", "ABC+3TC+DRV+RTV+RAL", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/DRV/RTV/RAL","Second line","child", "Female"), indParams),""); - cohortDsd.addColumn("AF5X_F", "Any other second line adult regimens", ReportUtils.map(fmapIndicators.patientsOnOtherRegimen("Other","Second line","child", "Female"), indParams),""); + cohortDsd.addColumn("CS1A_F", "AZT+3TC+LPVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/LPV/r","Second line","child", "Female", "False"), indParams),""); + cohortDsd.addColumn("CS1C_F", "AZT+3TC+DRV+RTV+RAL", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/DRV/RTV/RAL","Second line","child", "Female", "False"), indParams),""); + cohortDsd.addColumn("CS2A_F", "ABC+3TC+LPVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/LPV/r","Second line","child", "Female", "False"), indParams),""); + cohortDsd.addColumn("CS2B_F", "ABC+3TC+DTG", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/DTG","Second line","child", "Female", "False"), indParams),""); + cohortDsd.addColumn("CS2D_F", "ABC+3TC+DRV+RTV+RAL", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/DRV/RTV/RAL","Second line","child", "Female", "False"), indParams),""); + cohortDsd.addColumn("CS4X_F", "Any other second line adult regimens", ReportUtils.map(fmapIndicators.patientsOnOtherRegimen("Other","Second line","child", "Female", "False"), indParams),""); //Paediatric Third Line - cohortDsd.addColumn("CT1H_M", "AZT+3TC+DRV+RTV+RAL", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/DRV/RTV/RAL","Third line","child", "Male"), indParams),""); - cohortDsd.addColumn("CT2D_M", "ABC+3TC+DRV+RTV+RAL", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/DRV/RTV/RAL","Third line","child", "Male"), indParams),""); - cohortDsd.addColumn("CT3X_M", "Any other thirdline adult regimens", ReportUtils.map(fmapIndicators.patientsOnOtherRegimen("Other","Third line","child", "Male"), indParams),""); - - cohortDsd.addColumn("CT1H_F", "AZT+3TC+DRV+RTV+RAL", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/DRV/RTV/RAL","Third line","child", "Female"), indParams),""); - cohortDsd.addColumn("CT2D_F", "ABC+3TC+DRV+RTV+RAL", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/DRV/RTV/RAL","Third line","child", "Female"), indParams),""); - cohortDsd.addColumn("CT3X_F", "Any other thirdline adult regimens", ReportUtils.map(fmapIndicators.patientsOnOtherRegimen("Other","Third line","child", "Female"), indParams),""); - + cohortDsd.addColumn("CT1H_M", "AZT+3TC+DRV+RTV+RAL", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/DRV/RTV/RAL","Third line","child", "Male", "False"), indParams),""); + cohortDsd.addColumn("CT2D_M", "ABC+3TC+DRV+RTV+RAL", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/DRV/RTV/RAL","Third line","child", "Male", "False"), indParams),""); + cohortDsd.addColumn("CT3X_M", "Any other thirdline adult regimens", ReportUtils.map(fmapIndicators.patientsOnOtherRegimen("Other","Third line","child", "Male", "False"), indParams),""); + + cohortDsd.addColumn("CT1H_F", "AZT+3TC+DRV+RTV+RAL", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/DRV/RTV/RAL","Third line","child", "Female", "False"), indParams),""); + cohortDsd.addColumn("CT2D_F", "ABC+3TC+DRV+RTV+RAL", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/DRV/RTV/RAL","Third line","child", "Female", "False"), indParams),""); + cohortDsd.addColumn("CT3X_F", "Any other thirdline adult regimens", ReportUtils.map(fmapIndicators.patientsOnOtherRegimen("Other","Third line","child", "Female", "False"), indParams),""); + + //Pregnant women or HEI Mothers + cohortDsd.addColumn("PM3", "AZT+3TC+NVP", ReportUtils.map(fmapIndicators.pmtctPatientsRegimen("AZT/3TC/NVP","Female", "True"), indParams),""); + cohortDsd.addColumn("PM4", "AZT+3TC+EFV", ReportUtils.map(fmapIndicators.pmtctPatientsRegimen("AZT/3TC/EFV","Female", "True"), indParams),""); + cohortDsd.addColumn("PM5", "AZT+3TC+LPVr", ReportUtils.map(fmapIndicators.pmtctPatientsRegimen("AZT/3TC/LPV/r","Female", "True"), indParams),""); + cohortDsd.addColumn("PM6", "TDF+3TC+NVP", ReportUtils.map(fmapIndicators.pmtctPatientsRegimen("TDF/3TC/NVP","Female", "True"), indParams),""); + cohortDsd.addColumn("PM7", "TDF+3TC+LPVr", ReportUtils.map(fmapIndicators.pmtctPatientsRegimen("TDF/3TC/LPV/r","Female", "True"), indParams),""); + cohortDsd.addColumn("PM9", "TDF+3TC+EFV", ReportUtils.map(fmapIndicators.pmtctPatientsRegimen("TDF/3TC/EFV","Female", "True"), indParams),""); + cohortDsd.addColumn("PM10", "AZT+3TC+ATVr", ReportUtils.map(fmapIndicators.pmtctPatientsRegimen("AZT/3TC/ATV/r","Female", "True"), indParams),""); + cohortDsd.addColumn("PM11", "TDF+3TC+ATVr", ReportUtils.map(fmapIndicators.pmtctPatientsRegimen("AZT/3TC/ATV/r","Female", "True"), indParams),""); + cohortDsd.addColumn("PM12", "TDF+3TC+DTG", ReportUtils.map(fmapIndicators.pmtctPatientsRegimen("TDF/3TC/DTG","Female", "True"), indParams),""); + cohortDsd.addColumn("PM13", "AZT+3TC+DTG", ReportUtils.map(fmapIndicators.pmtctPatientsRegimen("AZT/3TC/DTG","Female", "True"), indParams),""); + cohortDsd.addColumn("PM14", "ABC+3TC+DTG", ReportUtils.map(fmapIndicators.pmtctPatientsRegimen("ABC/3TC/DTG","Female", "True"), indParams),""); + cohortDsd.addColumn("PM15", "ABC+3TC+EFV", ReportUtils.map(fmapIndicators.pmtctPatientsRegimen("ABC/3TC/EFV","Female", "True"), indParams),""); + cohortDsd.addColumn("PM1X", "Any other PMTCT regimens for Women", ReportUtils.map(fmapIndicators.pmtctPatientsOnOtherRegimen("Other","Female", "True"), indParams),""); + + return cohortDsd; } diff --git a/api/src/main/java/org/openmrs/module/kenyaemr/reporting/library/shared/hiv/art/FmapCohortLibrary.java b/api/src/main/java/org/openmrs/module/kenyaemr/reporting/library/shared/hiv/art/FmapCohortLibrary.java index e7b316750f..7dae62ba07 100644 --- a/api/src/main/java/org/openmrs/module/kenyaemr/reporting/library/shared/hiv/art/FmapCohortLibrary.java +++ b/api/src/main/java/org/openmrs/module/kenyaemr/reporting/library/shared/hiv/art/FmapCohortLibrary.java @@ -58,43 +58,47 @@ public CohortDefinition AdultFirstTLE() { return cd; } - public CohortDefinition patientOnSpecificRegimenAndRegimenLine(String regimenName,String regimenLine,String ageGroup, String gender){ + public CohortDefinition patientOnSpecificRegimenAndRegimenLine(String regimenName,String regimenLine,String ageGroup, String gender, String pmtct){ String sqlQuery = "SELECT regimeData.patient_id\n" + - " FROM\n" + - " (SELECT\n" + - " de.patient_id as patient_id,\n" + - " CASE WHEN timestampdiff(YEAR, date(d.DOB), max(fup.visit_date)) >= 15\n" + - " THEN 'adult'\n" + - " ELSE 'child' END AS agegroup,\n" + - " CASE WHEN d.Gender = 'M' THEN 'Male'\n" + - " WHEN d.Gender = 'F' THEN 'Female'\n" + - " ELSE '' END AS gender,\n" + - " de.program AS program,\n" + - " de.date_started AS date_started,\n" + - " de.regimen AS regimen,\n" + - " de.regimen_name,\n" + - " de.regimen_line AS regimen_line,\n" + - " de.discontinued,\n" + - " de.regimen_discontinued,\n" + - " de.date_discontinued,\n" + - " de.reason_discontinued,\n" + - " de.reason_discontinued_other\n" + - " FROM kenyaemr_etl.etl_drug_event de\n" + - " INNER JOIN kenyaemr_etl.etl_patient_demographics d ON d.patient_id = de.patient_id\n" + - " INNER JOIN kenyaemr_etl.etl_patient_hiv_followup fup ON de.patient_id = fup.patient_id\n" + - " GROUP BY de.encounter_id\n" + - " ) regimeData\n" + - " WHERE regimen NOT IN ('RHZE', 'RHZ', 'SRHZE', 'RfbHZE', 'RfbHZ', 'SRfbHZE', 'S (1 gm vial)', 'E', 'RHE', 'EH')\n" + - " AND date_started <= :endDate\n" + - " AND regimen = ':regimenName'\n" + + " FROM\n" + + " (SELECT\n" + + " de.patient_id as patient_id,\n" + + " CASE WHEN timestampdiff(YEAR, date(d.DOB), max(fup.visit_date)) >= 15\n" + + " THEN 'adult'\n" + + " ELSE 'child' END AS agegroup,\n" + + " CASE WHEN d.Gender = 'M' THEN 'Male'\n" + + " WHEN d.Gender = 'F' THEN 'Female'\n" + + " ELSE '' END AS gender,\n" + + " CASE WHEN (fup.pregnancy_status = 1065 OR fup.breastfeeding = 1065) THEN 'True'\n" + + " ELSE 'False' END AS pmtct,\n" + + " de.program AS program,\n" + + " de.date_started AS date_started,\n" + + " de.regimen AS regimen,\n" + + " de.regimen_name,\n" + + " de.regimen_line AS regimen_line,\n" + + " de.discontinued,\n" + + " de.regimen_discontinued,\n" + + " de.date_discontinued,\n" + + " de.reason_discontinued,\n" + + " de.reason_discontinued_other\n" + + " FROM kenyaemr_etl.etl_drug_event de\n" + + " INNER JOIN kenyaemr_etl.etl_patient_demographics d ON d.patient_id = de.patient_id\n" + + " INNER JOIN kenyaemr_etl.etl_patient_hiv_followup fup ON de.patient_id = fup.patient_id\n" + + " GROUP BY de.encounter_id\n" + + " ) regimeData\n" + + " WHERE regimen NOT IN ('RHZE', 'RHZ', 'SRHZE', 'RfbHZE', 'RfbHZ', 'SRfbHZE', 'S (1 gm vial)', 'E', 'RHE', 'EH')\n" + + " AND date_started <= :endDate\n" + + " AND regimen = ':regimenName'\n" + " AND regimen_line = ':regimenLine'\n" + " AND patient_id IS NOT NULL\n" + " AND agegroup = ':ageGroup'\n" + - " AND gender = ':gender';"; + " AND gender = ':gender'\n" + + " AND pmtct = ':pmtct';"; sqlQuery = sqlQuery.replaceAll(":regimenName", regimenName); sqlQuery = sqlQuery.replaceAll(":regimenLine", regimenLine); sqlQuery = sqlQuery.replaceAll(":ageGroup", ageGroup); sqlQuery = sqlQuery.replaceAll(":gender", gender); + sqlQuery = sqlQuery.replaceAll(":pmtct", pmtct); SqlCohortDefinition cd = new SqlCohortDefinition(); cd.setName("Regimens"); cd.setQuery(sqlQuery); @@ -103,18 +107,18 @@ public CohortDefinition patientOnSpecificRegimenAndRegimenLine(String regimenNam cd.setDescription("Regimens"); return cd; } - - public CohortDefinition txCurrpatientOnSpecificRegimenAndRegimenLine(String regimenName,String regimenLine,String ageGroup, String gender) { + + public CohortDefinition txCurrpatientOnSpecificRegimenAndRegimenLine(String regimenName,String regimenLine,String ageGroup, String gender, String pmtct) { CompositionCohortDefinition cd = new CompositionCohortDefinition(); cd.addParameter(new Parameter("startDate", "Start Date", Date.class)); cd.addParameter(new Parameter("endDate", "End Date", Date.class)); cd.addSearch("txcurr", ReportUtils.map(datimCohortLibrary.currentlyOnArt(), "startDate=${startDate},endDate=${endDate}")); - cd.addSearch("patientOnSpecificRegimenAndRegimenLine", ReportUtils.map(patientOnSpecificRegimenAndRegimenLine(regimenName, regimenLine, ageGroup, gender), "startDate=${startDate},endDate=${endDate}")); + cd.addSearch("patientOnSpecificRegimenAndRegimenLine", ReportUtils.map(patientOnSpecificRegimenAndRegimenLine(regimenName, regimenLine, ageGroup, gender, pmtct), "startDate=${startDate},endDate=${endDate}")); cd.setCompositionString("(txcurr AND patientOnSpecificRegimenAndRegimenLine"); return cd; } - public CohortDefinition patientOnAnyOtherRegimenandRegimenLine(String regimenName,String regimenLine,String ageGroup, String gender){ + public CohortDefinition patientOnAnyOtherRegimenandRegimenLine(String regimenName,String regimenLine,String ageGroup, String gender, String pmtct){ String sqlQuery = "SELECT regimeData.patient_id\n" + "FROM\n" + " (SELECT\n" + @@ -122,11 +126,12 @@ public CohortDefinition patientOnAnyOtherRegimenandRegimenLine(String regimenNam " CASE WHEN timestampdiff(YEAR, date(d.DOB), max(fup.visit_date)) >= 15\n" + " THEN 'adult'\n" + " ELSE 'child' END AS agegroup,\n" + - " de.program AS program,\n" + " CASE WHEN d.Gender = 'M' THEN 'Male'\n" + " WHEN d.Gender = 'F' THEN 'Female'\n" + " ELSE '' END AS gender,\n" + + " CASE WHEN (fup.pregnancy_status = 1065 OR fup.breastfeeding = 1065) THEN 'True'\n" + + " ELSE 'False' END AS pmtct,\n" + " de.date_started AS date_started,\n" + " de.regimen AS regimen,\n" + " de.regimen_name,\n" + @@ -145,10 +150,15 @@ public CohortDefinition patientOnAnyOtherRegimenandRegimenLine(String regimenNam " 'AZT/3TC/NVP','AZT/3TC/EFV','AZT/3TC/DTG','AZT/3TC/LPV/r','AZT/3TC/ATV/R','TDF/3TC/NVP','TDF/3TC/EFV','TDF/3TC/ATV/r','TDF/3TC/DTG','TDF/3TC/LPV/r','ABC/3TC/NVP','ABC/3TC/EFV','ABC/3TC/DTG','ABC/3TC/LPV/r','ABC/3TC/ATV/r')\n" + " AND date_started <= :endDate AND regimen = ':regimenName'\n" + " AND regimen_line = ':regimenLine'\n" + - " AND patient_id IS NOT NULL AND agegroup = ':ageGroup' AND gender = ':gender';"; + " AND patient_id IS NOT NULL\n" + + " AND agegroup = ':ageGroup'\n" + + " AND gender = ':gender'\n" + + " AND pmtct = ':pmtct';"; sqlQuery = sqlQuery.replaceAll(":regimenName", regimenName); sqlQuery = sqlQuery.replaceAll(":regimenLine", regimenLine); sqlQuery = sqlQuery.replaceAll(":ageGroup", ageGroup); + sqlQuery = sqlQuery.replaceAll(":gender", gender); + sqlQuery = sqlQuery.replaceAll(":pmtct", pmtct); SqlCohortDefinition cd = new SqlCohortDefinition(); cd.setName("Regimens"); cd.setQuery(sqlQuery); @@ -158,13 +168,124 @@ public CohortDefinition patientOnAnyOtherRegimenandRegimenLine(String regimenNam return cd; } - public CohortDefinition txCurrpatientOnAnyOtherRegimenandRegimenLine(String regimenName,String regimenLine,String ageGroup,String gender) { + public CohortDefinition txCurrpatientOnAnyOtherRegimenandRegimenLine(String regimenName,String regimenLine,String ageGroup,String gender,String pmtct) { CompositionCohortDefinition cd = new CompositionCohortDefinition(); cd.addParameter(new Parameter("startDate", "Start Date", Date.class)); cd.addParameter(new Parameter("endDate", "End Date", Date.class)); cd.addSearch("txcurr", ReportUtils.map(datimCohortLibrary.currentlyOnArt(), "startDate=${startDate},endDate=${endDate}")); - cd.addSearch("patientOnAnyOtherRegimenandRegimenLine", ReportUtils.map(patientOnAnyOtherRegimenandRegimenLine(regimenName, regimenLine, ageGroup, gender), "startDate=${startDate},endDate=${endDate}")); + cd.addSearch("patientOnAnyOtherRegimenandRegimenLine", ReportUtils.map(patientOnAnyOtherRegimenandRegimenLine(regimenName, regimenLine, ageGroup, gender, pmtct), "startDate=${startDate},endDate=${endDate}")); cd.setCompositionString("(txcurr AND patientOnAnyOtherRegimenandRegimenLine"); return cd; } + + public CohortDefinition pmtctPatientOnSpecificRegimen(String regimenName, String gender, String pmtct){ + String sqlQuery = "SELECT regimeData.patient_id\n" + + "FROM\n" + + " (SELECT\n" + + " de.patient_id as patient_id,\n" + + " CASE WHEN d.Gender = 'M' THEN 'Male'\n" + + " WHEN d.Gender = 'F' THEN 'Female'\n" + + " ELSE '' END AS gender,\n" + + " CASE WHEN (fup.pregnancy_status = 1065 OR fup.breastfeeding = 1065) THEN 'True'\n" + + " ELSE 'False' END AS pmtct,\n" + + " de.program AS program,\n" + + " de.date_started AS date_started,\n" + + " de.regimen AS regimen,\n" + + " de.regimen_name,\n" + + " de.regimen_line AS regimen_line,\n" + + " de.discontinued,\n" + + " de.regimen_discontinued,\n" + + " de.date_discontinued,\n" + + " de.reason_discontinued,\n" + + " de.reason_discontinued_other\n" + + " FROM kenyaemr_etl.etl_drug_event de\n" + + " INNER JOIN kenyaemr_etl.etl_patient_demographics d ON d.patient_id = de.patient_id\n" + + " INNER JOIN kenyaemr_etl.etl_patient_hiv_followup fup ON de.patient_id = fup.patient_id\n" + + " GROUP BY de.encounter_id\n" + + " ) regimeData\n" + + "WHERE regimen NOT IN ('RHZE', 'RHZ', 'SRHZE', 'RfbHZE', 'RfbHZ', 'SRfbHZE', 'S (1 gm vial)', 'E', 'RHE', 'EH')\n" + + " AND date_started <= :endDate\n" + + " AND regimen = ':regimenName'\n" + + " AND patient_id IS NOT NULL\n" + + " AND gender = ':gender'\n" + + " AND pmtct = ':pmtct';"; + sqlQuery = sqlQuery.replaceAll(":regimenName", regimenName); + sqlQuery = sqlQuery.replaceAll(":gender", gender); + sqlQuery = sqlQuery.replaceAll(":pmtct", pmtct); + SqlCohortDefinition cd = new SqlCohortDefinition(); + cd.setName("PmtctRegimens"); + cd.setQuery(sqlQuery); + cd.addParameter(new Parameter("startDate", "Start Date", Date.class)); + cd.addParameter(new Parameter("endDate", "End Date", Date.class)); + cd.setDescription("PmtctRegimens"); + return cd; + } + + public CohortDefinition txCurrPmtctPatientOnSpecificRegimen(String regimenName,String gender,String pmtct) { + CompositionCohortDefinition cd = new CompositionCohortDefinition(); + cd.addParameter(new Parameter("startDate", "Start Date", Date.class)); + cd.addParameter(new Parameter("endDate", "End Date", Date.class)); + cd.addSearch("txcurr", ReportUtils.map(datimCohortLibrary.currentlyOnArt(), "startDate=${startDate},endDate=${endDate}")); + cd.addSearch("pmtctPatientOnSpecificRegimen", ReportUtils.map(pmtctPatientOnSpecificRegimen(regimenName, gender, pmtct), "startDate=${startDate},endDate=${endDate}")); + cd.setCompositionString("(txcurr AND pmtctPatientOnSpecificRegimen"); + return cd; + } + + public CohortDefinition pmtctPatientOnAnyOtherRegimen(String regimenName,String gender, String pmtct){ + String sqlQuery = "SELECT regimeData.patient_id\n" + + "FROM\n" + + " (SELECT\n" + + " de.patient_id as patient_id,\n" + + " CASE WHEN timestampdiff(YEAR, date(d.DOB), max(fup.visit_date)) >= 15\n" + + " THEN 'adult'\n" + + " ELSE 'child' END AS agegroup,\n" + + " de.program AS program,\n" + + " CASE WHEN d.Gender = 'M' THEN 'Male'\n" + + " WHEN d.Gender = 'F' THEN 'Female'\n" + + " ELSE '' END AS gender,\n" + + " CASE WHEN (fup.pregnancy_status = 1065 OR fup.breastfeeding = 1065) THEN 'True'\n" + + " ELSE 'False' END AS pmtct,\n" + + " de.date_started AS date_started,\n" + + " de.regimen AS regimen,\n" + + " de.regimen_name,\n" + + " de.regimen_line AS regimen_line,\n" + + " de.discontinued,\n" + + " de.regimen_discontinued,\n" + + " de.date_discontinued,\n" + + " de.reason_discontinued,\n" + + " de.reason_discontinued_other\n" + + " FROM kenyaemr_etl.etl_drug_event de\n" + + " INNER JOIN kenyaemr_etl.etl_patient_demographics d ON d.patient_id = de.patient_id\n" + + " INNER JOIN kenyaemr_etl.etl_patient_hiv_followup fup ON de.patient_id = fup.patient_id\n" + + " GROUP BY de.encounter_id\n" + + " ) regimeData\n" + + "WHERE regimen NOT IN ('RHZE', 'RHZ', 'SRHZE', 'RfbHZE', 'RfbHZ', 'SRfbHZE', 'S (1 gm vial)', 'E', 'RHE', 'EH',\n" + + " 'AZT/3TC/NVP','AZT/3TC/EFV','AZT/3TC/DTG','AZT/3TC/LPV/r','AZT/3TC/ATV/R','TDF/3TC/NVP','TDF/3TC/EFV','TDF/3TC/ATV/r','TDF/3TC/DTG','TDF/3TC/LPV/r','ABC/3TC/NVP','ABC/3TC/EFV','ABC/3TC/DTG','ABC/3TC/LPV/r','ABC/3TC/ATV/r')\n" + + " AND date_started <= :endDate AND regimen = ':regimenName'\n" + + " AND patient_id IS NOT NULL\n" + + " AND gender = ':gender'\n" + + " AND pmtct = ':pmtct';"; + sqlQuery = sqlQuery.replaceAll(":regimenName", regimenName); + sqlQuery = sqlQuery.replaceAll(":gender", gender); + sqlQuery = sqlQuery.replaceAll(":pmtct", pmtct); + SqlCohortDefinition cd = new SqlCohortDefinition(); + cd.setName("pmtctOtherRegimens"); + cd.setQuery(sqlQuery); + cd.addParameter(new Parameter("startDate", "Start Date", Date.class)); + cd.addParameter(new Parameter("endDate", "End Date", Date.class)); + cd.setDescription("pmtctOtherRegimens"); + return cd; + } + + public CohortDefinition txCurrPmtctPatientOnAnyOtherRegimen(String regimenName,String gender,String pmtct) { + CompositionCohortDefinition cd = new CompositionCohortDefinition(); + cd.addParameter(new Parameter("startDate", "Start Date", Date.class)); + cd.addParameter(new Parameter("endDate", "End Date", Date.class)); + cd.addSearch("txcurr", ReportUtils.map(datimCohortLibrary.currentlyOnArt(), "startDate=${startDate},endDate=${endDate}")); + cd.addSearch("pmtctPatientOnAnyOtherRegimen", ReportUtils.map(pmtctPatientOnAnyOtherRegimen(regimenName, gender, pmtct), "startDate=${startDate},endDate=${endDate}")); + cd.setCompositionString("(txcurr AND pmtctPatientOnAnyOtherRegimen"); + return cd; + } + + } diff --git a/api/src/main/java/org/openmrs/module/kenyaemr/reporting/library/shared/hiv/art/FmapIndicatorLibrary.java b/api/src/main/java/org/openmrs/module/kenyaemr/reporting/library/shared/hiv/art/FmapIndicatorLibrary.java index 6bf9a1266a..7c2180e059 100644 --- a/api/src/main/java/org/openmrs/module/kenyaemr/reporting/library/shared/hiv/art/FmapIndicatorLibrary.java +++ b/api/src/main/java/org/openmrs/module/kenyaemr/reporting/library/shared/hiv/art/FmapIndicatorLibrary.java @@ -24,13 +24,23 @@ public class FmapIndicatorLibrary { //Indicator Libraries - public CohortIndicator patientsOnSpecificRegimen(String regimenName, String regimenLine, String ageGroup, String gender) { - return cohortIndicator("TDF+3TC+EFV",map(fmapCohortLibrary.txCurrpatientOnSpecificRegimenAndRegimenLine(regimenName,regimenLine, ageGroup, gender), "startDate=${startDate},endDate=${endDate}") + public CohortIndicator patientsOnSpecificRegimen(String regimenName, String regimenLine, String ageGroup, String gender, String pmtct) { + return cohortIndicator("TDF+3TC+EFV",map(fmapCohortLibrary.txCurrpatientOnSpecificRegimenAndRegimenLine(regimenName,regimenLine, ageGroup, gender, pmtct), "startDate=${startDate},endDate=${endDate}") ); } - public CohortIndicator patientsOnOtherRegimen(String regimenName, String regimenLine, String ageGroup, String gender) { - return cohortIndicator("TDF+3TC+EFV",map(fmapCohortLibrary.txCurrpatientOnAnyOtherRegimenandRegimenLine(regimenName,regimenLine, ageGroup, gender), "startDate=${startDate},endDate=${endDate}") + public CohortIndicator patientsOnOtherRegimen(String regimenName, String regimenLine, String ageGroup, String gender, String pmtct) { + return cohortIndicator("TDF+3TC+EFV",map(fmapCohortLibrary.txCurrpatientOnAnyOtherRegimenandRegimenLine(regimenName,regimenLine, ageGroup, gender, pmtct), "startDate=${startDate},endDate=${endDate}") + ); + } + + public CohortIndicator pmtctPatientsRegimen(String regimenName, String gender, String pmtct) { + return cohortIndicator("TDF+3TC+EFV",map(fmapCohortLibrary.txCurrPmtctPatientOnSpecificRegimen(regimenName, gender, pmtct), "startDate=${startDate},endDate=${endDate}") + ); + } + + public CohortIndicator pmtctPatientsOnOtherRegimen(String regimenName, String gender, String pmtct) { + return cohortIndicator("TDF+3TC+EFV",map(fmapCohortLibrary.txCurrPmtctPatientOnAnyOtherRegimen(regimenName, gender, pmtct), "startDate=${startDate},endDate=${endDate}") ); } diff --git a/omod/src/main/webapp/resources/reports/.~lock.fmaps_template.xls# b/omod/src/main/webapp/resources/reports/.~lock.fmaps_template.xls# new file mode 100644 index 0000000000..26fb4038a1 --- /dev/null +++ b/omod/src/main/webapp/resources/reports/.~lock.fmaps_template.xls# @@ -0,0 +1 @@ +,patrick,patrick-Latitude-7440,20.06.2024 20:46,file:///home/patrick/.config/libreoffice/4; \ No newline at end of file diff --git a/omod/src/main/webapp/resources/reports/.~lock.fmaps_template_old.xls# b/omod/src/main/webapp/resources/reports/.~lock.fmaps_template_old.xls# new file mode 100644 index 0000000000..26fb4038a1 --- /dev/null +++ b/omod/src/main/webapp/resources/reports/.~lock.fmaps_template_old.xls# @@ -0,0 +1 @@ +,patrick,patrick-Latitude-7440,20.06.2024 20:46,file:///home/patrick/.config/libreoffice/4; \ No newline at end of file diff --git a/omod/src/main/webapp/resources/reports/fmaps_template.xls b/omod/src/main/webapp/resources/reports/fmaps_template.xls index bd6b8600f21ef27c38fafdce054dc6d5b9fc7c7e..183f79f21f45158813f083def0193acc62fe5d2f 100644 GIT binary patch literal 102912 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 literal 30720 zcmeHw3wT{ub>_aZEMHj>tTWXIOk%Tlmx)wyvT2qf3?m8C?|7584n zal*6?l!gvaC@Bf10YZ5Uj}{7~V5T8BooT1-q^0dZhce7e7-l*x!y`~yV7>;=|F3n= zW1oBOwL|CY_mz)xe6H?UXYaNCwf5R;uf5MX*MIhf#^>MriFIEyq3y6)WPW_T+EfMT zF?>Jdo;MhC0N+Xb@%8K1T{6D@Z2K2vffox{7ohDk2VB53;%LIL9LEYAD{-vCu^Pu39BXl`!_kamJ&p}HHsaWX!@<#lqZLORj?Fl> z;Mj^|8;*7y9XPh**nwjwj$Jr*xbNHJzmtd`%-&Vn6f?#i^W-wmdO!*s?`I&s*0ynZ1uLtd49Y-&&T5Nu| z?m2dO>HA+Z73Q}qpT(y!{{zQeW}dNOAT=}L{Bv#nf*}>gW^Kqd* zEuXhY^g*FM;~c~vj!55+^$GSj%V(>6*5fl~J|lI$B9u&uCUZU?W!dkN*2r364i>XOoaC7Bfj)b|Okosb-+WSZh~~Aw7#(+A4hhjFj8efr9B)~luT)tFlfvtEs^ zySrd{x9+l7684^j^=a{w_9#7Auv#FVl zl~v{g7$Z#I#>%DUgUp26cDA+ceO~g~_nW`J?tp{4U2{k$PoaPR=I9K=QRPd~$u+9{ zPcQxbu&G1!3Y%-^9cl-5J=t7(M+y4Q67=mQ=+%+*#qbcZ|5F9AmG4=>b}y#?R(&-6 zBX!aA-L=v5=9SU(4=;wFDbH*`bpfS|5{_?<28@hn99eb z9jiV1gl`ErH9I|0zJm{i+2E}Y>IQW(6OFz)uyj0QGRU+`nnQ)JbI*D z;JMn=6t9e9vZZ*MUH(^FqUj+%>)rApy6Wo~^9EZl)fa0wA-PHyJS`>gSo8oNi>`LV z8c_(3&%d=b$ls%vEZ=06Z>Q{yM z6QHZz3Uu`!ln?Ru+UsgXOI#2I`w{(z3w*vm`{kXMpna4M`-JT2h73Ql zaw^xSI~CyX(OWz_+x<)FQkM`~1WH$#I`JZGZF2NBNuJvHV>7HS7@T*UG2ZKYjkTfBJOWKYhCG zpIhBH7Lu!U=oO*|@RYKT6@PrWcKq?_cKp%ty;!dLC+_)#;aCAV-MV*8uw%RJxqbHzjch4@feE%Ou) z=MM|xR}sBb`9eG?ln=;_7#|(_k3|oZxBNNKUY7r>Kd`;*JXz@+7h+Z(<3`1H7fp#zE(f-^|Jem`UCic@~Z&<2)i*3*!FA}KOx=jUtar0 zj$eY`@-^hr zd6E2Wyj&%Jn=V(%-{qH=$ln#07vpaeo<_m*DqVZGIJ=z0#6)^7-%0AKFtv-+)nRHk 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�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 P|1aK5`5Tq_r^x?*Znn?H diff --git a/omod/src/main/webapp/resources/reports/fmaps_template_old.xls b/omod/src/main/webapp/resources/reports/fmaps_template_old.xls new file mode 100644 index 0000000000000000000000000000000000000000..14bef9bb36b2bbbe25770aabe6b3933fe3114312 GIT binary patch literal 32768 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 YGp=raUrS~G|G#`K<*!!eKcfHt0Ps1|ga7~l literal 0 HcmV?d00001 From d22e1cd89868ee9517f0b353d0fc016bc3c5a490 Mon Sep 17 00:00:00 2001 From: patryllus Date: Fri, 21 Jun 2024 15:51:47 +0300 Subject: [PATCH 3/7] Updated FMAPs regimen and LInes for GP, PMTCT mothers, paediatrics for MOH 729 FMAPS - new template --- .../builder/common/FmapReportBuilder.java | 307 +++++++++++------- .../shared/hiv/art/FmapCohortLibrary.java | 95 +++--- .../shared/hiv/art/FmapIndicatorLibrary.java | 22 +- .../reports/.~lock.fmaps_template.xls# | 1 - .../reports/.~lock.fmaps_template_old.xls# | 1 - .../resources/reports/fmaps_template.xls | Bin 102912 -> 107008 bytes .../resources/reports/fmaps_template_old.xls | Bin 32768 -> 0 bytes 7 files changed, 247 insertions(+), 179 deletions(-) delete mode 100644 omod/src/main/webapp/resources/reports/.~lock.fmaps_template.xls# delete mode 100644 omod/src/main/webapp/resources/reports/.~lock.fmaps_template_old.xls# delete mode 100644 omod/src/main/webapp/resources/reports/fmaps_template_old.xls diff --git a/api/src/main/java/org/openmrs/module/kenyaemr/reporting/builder/common/FmapReportBuilder.java b/api/src/main/java/org/openmrs/module/kenyaemr/reporting/builder/common/FmapReportBuilder.java index b472fac4fd..da506593cc 100644 --- a/api/src/main/java/org/openmrs/module/kenyaemr/reporting/builder/common/FmapReportBuilder.java +++ b/api/src/main/java/org/openmrs/module/kenyaemr/reporting/builder/common/FmapReportBuilder.java @@ -38,6 +38,21 @@ public class FmapReportBuilder extends AbstractReportBuilder { protected static final Log log = LogFactory.getLog(FmapReportBuilder.class); + static final String MIN_WEIGHT_3 = ">= 3"; + static final String MAX_WEIGHT_6 = "<= 5.9"; + static final String MIN_WEIGHT_6 = ">= 6"; + static final String MAX_WEIGHT_10 = "<= 9.9"; + static final String MIN_WEIGHT_10 = ">= 10"; + static final String MAX_WEIGHT_14 = "<= 13.9"; + static final String MIN_WEIGHT_14 = ">= 14"; + static final String MAX_WEIGHT_20 = "<= 19.9"; + static final String MIN_WEIGHT_20 = ">= 20"; + static final String MAX_WEIGHT_25 = "<= 24.9"; + static final String MIN_WEIGHT_25 = ">= 25"; + static final String MAX_WEIGHT_30 = "<= 29.9"; + static final String MIN_WEIGHT_30 = ">= 30"; + static final String MAX_WEIGHT_ABOVE_30 = "<= 100"; + @Autowired private FmapIndicatorLibrary fmapIndicators; @@ -69,150 +84,190 @@ protected List> buildDataSets(ReportDescriptor descrip /** - * Creates the dataset for Adult first line regimens + * Creates the dataset for FMAPS * * @return the dataset */ protected DataSetDefinition fmapPatientRegimens() { CohortIndicatorDataSetDefinition cohortDsd = new CohortIndicatorDataSetDefinition(); - cohortDsd.setName("patientReegimen"); + cohortDsd.setName("patientRegimens"); cohortDsd.setDescription("ARV Treatment Regimen"); cohortDsd.addParameter(new Parameter("startDate", "Start Date", Date.class)); cohortDsd.addParameter(new Parameter("endDate", "End Date", Date.class)); String indParams = "startDate=${startDate},endDate=${endDate}"; //Adult First Line - //Male - cohortDsd.addColumn("AF1A_M", "AZT+3TC+NVP", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/NVP","First line","adult", "Male", "False"), indParams),""); - cohortDsd.addColumn("AF1B_M", "AZT+3TC+EFV", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/EFV","First line","adult", "Male", "False"), indParams),""); - cohortDsd.addColumn("AF1D_M", "AZT+3TC+DTG", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/DTG","First line","adult", "Male", "False"), indParams),""); - cohortDsd.addColumn("AF1E_M", "AZT+3TC+LPVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/LPV/r","First line","adult", "Male", "False"), indParams),""); - cohortDsd.addColumn("AF1F_M", "AZT+3TC+ATVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/ATV/r","First line","adult", "Male", "False"), indParams),""); - cohortDsd.addColumn("AF2A_M", "TDF+3TC+NVP", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/NVP","First line","adult", "Male", "False"), indParams),""); - cohortDsd.addColumn("AF2B_M", "TDF+3TC+EFV", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/EFV","First line","adult", "Male", "False"), indParams),""); - cohortDsd.addColumn("AF2D_M", "TDF+3TC+ATVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/ATV/r","First line","adult", "Male", "False"), indParams),""); - cohortDsd.addColumn("AF2E_M", "TDF+3TC+DTG", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/DTG","First line","adult", "Male", "False"), indParams),""); - cohortDsd.addColumn("AF2F_M", "TDF+3TC+LPVr(1L Adults < 40kg)", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/LPV/r","First line","adult", "Male", "False"), indParams),""); - cohortDsd.addColumn("AF4A_M", "ABC+3TC+NVP", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/NVP","First line","adult", "Male", "False"), indParams),""); - cohortDsd.addColumn("AF4B_M", "ABC+3TC+EFV", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/EFV","First line","adult", "Male", "False"), indParams),""); - cohortDsd.addColumn("AF4C_M", "ABC+3TC+DTG", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/DTG","First line","adult", "Male", "False"), indParams),""); - cohortDsd.addColumn("AF5X_M", "Any other first line adult regimens", ReportUtils.map(fmapIndicators.patientsOnOtherRegimen("Other","First line","adult", "Male", "False"), indParams),""); - //Female - cohortDsd.addColumn("AF1A_F", "AZT+3TC+NVP", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/NVP","First line","adult", "Female", "False"), indParams),""); - cohortDsd.addColumn("AF1B_F", "AZT+3TC+EFV", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/EFV","First line","adult","Female", "False"), indParams),""); - cohortDsd.addColumn("AF1D_F", "AZT+3TC+DTG", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/DTG","First line","adult","Female", "False"), indParams),""); - cohortDsd.addColumn("AF1E_F", "AZT+3TC+LPVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/LPV/r","First line","adult","Female", "False"), indParams),""); - cohortDsd.addColumn("AF1F_F", "AZT+3TC+ATVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/ATV/r","First line","adult","Female", "False"), indParams),""); - cohortDsd.addColumn("AF2A_F", "TDF+3TC+NVP", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/NVP","First line","adult","Female", "False"), indParams),""); - cohortDsd.addColumn("AF2B_F", "TDF+3TC+EFV", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/EFV","First line","adult","Female", "False"), indParams),""); - cohortDsd.addColumn("AF2D_F", "TDF+3TC+ATVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/ATV/r","First line","adult","Female", "False"), indParams),""); - cohortDsd.addColumn("AF2E_F", "TDF+3TC+DTG", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/DTG","First line","adult","Female", "False"), indParams),""); - cohortDsd.addColumn("AF2F_F", "TDF+3TC+LPVr(1L Adults < 40kg)", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/LPV/r","First line","adult","Female", "False"), indParams),""); - cohortDsd.addColumn("AF4A_F", "ABC+3TC+NVP", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/NVP","First line","adult","Female", "False"), indParams),""); - cohortDsd.addColumn("AF4B_F", "ABC+3TC+EFV", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/EFV","First line","adult","Female", "False"), indParams),""); - cohortDsd.addColumn("AF4C_F", "ABC+3TC+DTG", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/DTG","First line","adult","Female", "False"), indParams),""); - cohortDsd.addColumn("AF5X_F", "Any other first line adult regimens", ReportUtils.map(fmapIndicators.patientsOnOtherRegimen("Other","First line","adult","Female", "False"), indParams),""); + cohortDsd.addColumn("AF2E", "TDF+3TC+DTG", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/DTG","First line","adult", "False"), indParams),""); + cohortDsd.addColumn("AF2B", "TDF+3TC+EFV", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/EFV","First line","adult", "False"), indParams),""); + cohortDsd.addColumn("AF1D", "AZT+3TC+DTG", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/DTG","First line","adult", "False"), indParams),""); + cohortDsd.addColumn("AF4C", "ABC+3TC+DTG", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/DTG","First line","adult", "False"), indParams),""); + cohortDsd.addColumn("AF2D", "TDF+3TC+ATVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/ATV/r","First line","adult", "False"), indParams),""); + cohortDsd.addColumn("AF2F", "TDF+3TC+LPVr(1L Adults < 40kg)", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/LPV/r","First line","adult", "False"), indParams),""); + cohortDsd.addColumn("AF1E", "AZT+3TC+LPVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/LPV/r","First line","adult", "False"), indParams),""); + cohortDsd.addColumn("AF1F", "AZT+3TC+ATVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/ATV/r","First line","adult", "False"), indParams),""); + cohortDsd.addColumn("AF5X", "Any other first line adult regimens", ReportUtils.map(fmapIndicators.patientsOnOtherRegimen("Other","First line","adult", "False"), indParams),""); + //Adult Second Line - //Male - cohortDsd.addColumn("AS1A_M", "AZT+3TC+LPVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/LPV/r","Second line","adult", "Male", "False"), indParams),""); - cohortDsd.addColumn("AS1B_M", "AZT+3TC+ATVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/ATV/r","Second line","adult", "Male", "False"), indParams),""); - cohortDsd.addColumn("AS1C_M", "AZT+3TC+DTG", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/DTG","Second line","adult", "Male", "False"), indParams),""); - cohortDsd.addColumn("AS2A_M", "TDF+3TC+LPVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/LPV/r","Second line","adult", "Male", "False"), indParams),""); - cohortDsd.addColumn("AS2B_M", "TDF+3TC+DTG", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/DTG","Second line","adult", "Male", "False"), indParams),""); - cohortDsd.addColumn("AS2C_M", "TDF+3TC+ATVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/ATV/r","Second line","adult", "Male", "False"), indParams),""); - cohortDsd.addColumn("AS5A_M", "ABC+3TC+LPVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/LPV/r","Second line","adult", "Male", "False"), indParams),""); - cohortDsd.addColumn("AS5B_M", "ABC+3TC+ATVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/ATV/r","Second line","adult", "Male", "False"), indParams),""); - cohortDsd.addColumn("AS5C_M", "ABC+3TC+DTG", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/DTG","Second line","adult", "Male", "False"), indParams),""); - cohortDsd.addColumn("AS6X_M", "Any other second line adult regimens", ReportUtils.map(fmapIndicators.patientsOnOtherRegimen("Other","Second line","adult", "Male", "False"), indParams),""); - //Female - cohortDsd.addColumn("AS1A_F", "AZT+3TC+LPVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/LPV/r","Second line","adult", "Female", "False"), indParams),""); - cohortDsd.addColumn("AS1B_F", "AZT+3TC+ATVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/ATV/r","Second line","adult", "Female", "False"), indParams),""); - cohortDsd.addColumn("AS1C_F", "AZT+3TC+DTG", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/DTG","Second line","adult", "Female", "False"), indParams),""); - cohortDsd.addColumn("AS2A_F", "TDF+3TC+LPVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/LPV/r","Second line","adult", "Female", "False"), indParams),""); - cohortDsd.addColumn("AS2B_F", "TDF+3TC+DTG", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/DTG","Second line","adult", "Female", "False"), indParams),""); - cohortDsd.addColumn("AS2C_F", "TDF+3TC+ATVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/ATV/r","Second line","adult", "Female", "False"), indParams),""); - cohortDsd.addColumn("AS5A_F", "ABC+3TC+LPVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/LPV/r","Second line","adult", "Female", "False"), indParams),""); - cohortDsd.addColumn("AS5B_F", "ABC+3TC+ATVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/ATV/r","Second line","adult", "Male", "False"), indParams),""); - cohortDsd.addColumn("AS5C_F", "ABC+3TC+DTG", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/DTG","Second line","adult", "Female", "False"), indParams),""); - cohortDsd.addColumn("AS6X_F", "Any other second line adult regimens", ReportUtils.map(fmapIndicators.patientsOnOtherRegimen("Other","Second line","adult", "Female", "False"), indParams),""); - + cohortDsd.addColumn("AS1A", "AZT+3TC+LPVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/LPV/r","Second line","adult", "False"), indParams),""); + cohortDsd.addColumn("AS1B", "AZT+3TC+ATVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/ATV/r","Second line","adult", "False"), indParams),""); + cohortDsd.addColumn("AS1C", "AZT+3TC+DTG", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/DTG","Second line","adult", "False"), indParams),""); + cohortDsd.addColumn("AS2A", "TDF+3TC+LPVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/LPV/r","Second line","adult", "False"), indParams),""); + cohortDsd.addColumn("AS2B", "TDF+3TC+DTG", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/DTG","Second line","adult", "False"), indParams),""); + cohortDsd.addColumn("AS2C", "TDF+3TC+ATVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/ATV/r","Second line","adult", "False"), indParams),""); + cohortDsd.addColumn("AS5A", "ABC+3TC+LPVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/LPV/r","Second line","adult", "False"), indParams),""); + cohortDsd.addColumn("AS5B", "ABC+3TC+ATVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/ATV/r","Second line","adult", "False"), indParams),""); + cohortDsd.addColumn("AS5C", "ABC+3TC+DTG", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/DTG","Second line","adult", "False"), indParams),""); + cohortDsd.addColumn("AS6X", "Any other second line adult regimens", ReportUtils.map(fmapIndicators.patientsOnOtherRegimen("Other","Second line","adult", "False"), indParams),""); + //Adult Third Line - //Male - cohortDsd.addColumn("AT2D_M", "TDF+3TC+DTG+DRV+RTV", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/DTG/DRV/RTV","Third line","adult", "Male", "False"), indParams),""); - cohortDsd.addColumn("AT2E_M", "TDF+3TC+RAL+DRV+RTV", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/RAL/DRV/RTV","Third line","adult", "Male", "False"), indParams),""); - cohortDsd.addColumn("AT2F_M", "TDF+3TC+DTG+ETV+DRV+RTV", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/DTG/ETV/DRV/RTV","Third line","adult", "Male", "False"), indParams),""); - cohortDsd.addColumn("AT2X_M", "Any other thirdline adult regimens", ReportUtils.map(fmapIndicators.patientsOnOtherRegimen("Other","Third line","adult", "Male", "False"), indParams),""); - //Female - cohortDsd.addColumn("AT2D_F", "TDF+3TC+DTG+DRV+RTV", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/DTG/DRV/RTV","Third line","adult", "Female", "False"), indParams),""); - cohortDsd.addColumn("AT2E_F", "TDF+3TC+RAL+DRV+RTV", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/RAL/DRV/RTV","Third line","adult", "Female", "False"), indParams),""); - cohortDsd.addColumn("AT2F_F", "TDF+3TC+DTG+ETV+DRV+RTV", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/DTG/ETV/DRV/RTV","Third line","adult", "Female", "False"), indParams),""); - cohortDsd.addColumn("AT2X_F", "Any other thirdline adult regimens", ReportUtils.map(fmapIndicators.patientsOnOtherRegimen("Other","Third line","adult", "Female", "False"), indParams),""); - - //Paediatric First Line - //Male - cohortDsd.addColumn("CF1A_M", "AZT+3TC+NVP", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/NVP","First line","child", "Male", "False"), indParams),""); - cohortDsd.addColumn("CF1B_M", "AZT+3TC+EFV", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/EFV","First line","child", "Male", "False"), indParams),""); - cohortDsd.addColumn("CF1C_M", "AZT+3TC+LPVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/LPV/r","First line","child", "Male", "False"), indParams),""); - cohortDsd.addColumn("CF2A_M", "ABC+3TC+NVP", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/NVP","First line","child", "Male", "False"), indParams),""); - cohortDsd.addColumn("CF2B_M", "ABC+3TC+EFV", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/EFV","First line","child", "Male", "False"), indParams),""); - cohortDsd.addColumn("CF2D_M", "AZT+3TC+LPVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/LPV/r","First line","child", "Male", "False"), indParams),""); - cohortDsd.addColumn("CF2G_M", "ABC+3TC+DTG", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/DTG","First line","child", "Male", "False"), indParams),""); - cohortDsd.addColumn("CF4E_M", "TDF+3TC+DTG", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/DTG","First line","child", "Male", "False"), indParams),""); - cohortDsd.addColumn("CF5X_M", "Any other first line adult regimens", ReportUtils.map(fmapIndicators.patientsOnOtherRegimen("Other","First line","child", "Male", "False"), indParams),""); - - //Female - cohortDsd.addColumn("CF1A_F", "AZT+3TC+NVP", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/NVP","First line","child", "Female", "False"), indParams),""); - cohortDsd.addColumn("CF1B_F", "AZT+3TC+EFV", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/EFV","First line","child", "Female", "False"), indParams),""); - cohortDsd.addColumn("CF1C_F", "AZT+3TC+LPVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/LPV/r","First line","child", "Female", "False"), indParams),""); - cohortDsd.addColumn("CF2A_F", "ABC+3TC+NVP", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/NVP","First line","child", "Female", "False"), indParams),""); - cohortDsd.addColumn("CF2B_F", "ABC+3TC+EFV", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/EFV","First line","child", "Female", "False"), indParams),""); - cohortDsd.addColumn("CF2D_F", "AZT+3TC+LPVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/LPV/r","First line","child", "Female", "False"), indParams),""); - cohortDsd.addColumn("CF2G_F", "ABC+3TC+DTG", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/DTG","First line","child", "Female", "False"), indParams),""); - cohortDsd.addColumn("CF4E_F", "TDF+3TC+DTG", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/DTG","First line","child", "Female", "False"), indParams),""); - cohortDsd.addColumn("CF5X_F", "Any other first line adult regimens", ReportUtils.map(fmapIndicators.patientsOnOtherRegimen("Other","First line","child", "Female", "False"), indParams),""); - - - //Paediatric Second Line - //Male - cohortDsd.addColumn("CS1A_M", "AZT+3TC+LPVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/LPV/r","Second line","child", "Male", "False"), indParams),""); - cohortDsd.addColumn("CS1C_M", "AZT+3TC+DRV+RTV+RAL", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/DRV/RTV/RAL","Second line","child", "Male", "False"), indParams),""); - cohortDsd.addColumn("CS2A_M", "ABC+3TC+LPVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/LPV/r","Second line","child", "Male", "False"), indParams),""); - cohortDsd.addColumn("CS2B_M", "ABC+3TC+DTG", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/DTG","Second line","child", "Male", "False"), indParams),""); - cohortDsd.addColumn("CS2D_M", "ABC+3TC+DRV+RTV+RAL", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/DRV/RTV/RAL","Second line","child", "Male", "False"), indParams),""); - cohortDsd.addColumn("CS4X_M", "Any other second line adult regimens", ReportUtils.map(fmapIndicators.patientsOnOtherRegimen("Other","Second line","child", "Male", "False"), indParams),""); - //Female - cohortDsd.addColumn("CS1A_F", "AZT+3TC+LPVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/LPV/r","Second line","child", "Female", "False"), indParams),""); - cohortDsd.addColumn("CS1C_F", "AZT+3TC+DRV+RTV+RAL", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/DRV/RTV/RAL","Second line","child", "Female", "False"), indParams),""); - cohortDsd.addColumn("CS2A_F", "ABC+3TC+LPVr", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/LPV/r","Second line","child", "Female", "False"), indParams),""); - cohortDsd.addColumn("CS2B_F", "ABC+3TC+DTG", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/DTG","Second line","child", "Female", "False"), indParams),""); - cohortDsd.addColumn("CS2D_F", "ABC+3TC+DRV+RTV+RAL", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/DRV/RTV/RAL","Second line","child", "Female", "False"), indParams),""); - cohortDsd.addColumn("CS4X_F", "Any other second line adult regimens", ReportUtils.map(fmapIndicators.patientsOnOtherRegimen("Other","Second line","child", "Female", "False"), indParams),""); + cohortDsd.addColumn("AT2D", "TDF+3TC+DTG+DRV+RTV", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/DTG/DRV/RTV","Third line","adult", "False"), indParams),""); + cohortDsd.addColumn("AT2F", "TDF+3TC+DTG+ETV+DRV+RTV", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/DTG/ETV/DRV/RTV","Third line","adult", "False"), indParams),""); + cohortDsd.addColumn("AT2G", "TDF+3TC+DTG", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("TDF/3TC/DTG","Third line","adult", "False"), indParams),""); + cohortDsd.addColumn("AT2H", "AZT+3TC+DTG", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/DTG","Third line","adult", "False"), indParams),""); + cohortDsd.addColumn("AT2I", "AZT+3TC+DTG+DRV+RTV", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/DTG/DRV/RTV","Third line","adult", "False"), indParams),""); + cohortDsd.addColumn("AT2X", "Any other thirdline adult regimens", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("Other","Third line","adult", "False"), indParams),""); + + //Pregnant women or HEI Mothers + //PMTCT + cohortDsd.addColumn("PM5_1", "AZT+3TC+LPVr", ReportUtils.map(fmapIndicators.pmtctPatientsRegimen("AZT/3TC/LPV/r", "First line", "True"), indParams),""); + cohortDsd.addColumn("PM5_2", "AZT+3TC+LPVr", ReportUtils.map(fmapIndicators.pmtctPatientsRegimen("AZT/3TC/LPV/r", "Second line","True"), indParams),""); + cohortDsd.addColumn("PM5_3", "AZT+3TC+LPVr", ReportUtils.map(fmapIndicators.pmtctPatientsRegimen("AZT/3TC/LPV/r", "Third line","True"), indParams),""); + + cohortDsd.addColumn("PM7_1", "TDF+3TC+LPVr", ReportUtils.map(fmapIndicators.pmtctPatientsRegimen("TDF/3TC/LPV/r", "First line", "True"), indParams),""); + cohortDsd.addColumn("PM7_2", "TDF+3TC+LPVr", ReportUtils.map(fmapIndicators.pmtctPatientsRegimen("TDF/3TC/LPV/r", "Second line","True"), indParams),""); + cohortDsd.addColumn("PM7_3", "TDF+3TC+LPVr", ReportUtils.map(fmapIndicators.pmtctPatientsRegimen("TDF/3TC/LPV/r", "Third line","True"), indParams),""); - //Paediatric Third Line - cohortDsd.addColumn("CT1H_M", "AZT+3TC+DRV+RTV+RAL", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/DRV/RTV/RAL","Third line","child", "Male", "False"), indParams),""); - cohortDsd.addColumn("CT2D_M", "ABC+3TC+DRV+RTV+RAL", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/DRV/RTV/RAL","Third line","child", "Male", "False"), indParams),""); - cohortDsd.addColumn("CT3X_M", "Any other thirdline adult regimens", ReportUtils.map(fmapIndicators.patientsOnOtherRegimen("Other","Third line","child", "Male", "False"), indParams),""); + cohortDsd.addColumn("PM9_1", "TDF+3TC+EFV", ReportUtils.map(fmapIndicators.pmtctPatientsRegimen("TDF/3TC/EFV", "First line","True"), indParams),""); + cohortDsd.addColumn("PM9_2", "TDF+3TC+EFV", ReportUtils.map(fmapIndicators.pmtctPatientsRegimen("TDF/3TC/EFV", "Second line","True"), indParams),""); + cohortDsd.addColumn("PM9_3", "TDF+3TC+EFV", ReportUtils.map(fmapIndicators.pmtctPatientsRegimen("TDF/3TC/EFV", "Third line","True"), indParams),""); - cohortDsd.addColumn("CT1H_F", "AZT+3TC+DRV+RTV+RAL", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("AZT/3TC/DRV/RTV/RAL","Third line","child", "Female", "False"), indParams),""); - cohortDsd.addColumn("CT2D_F", "ABC+3TC+DRV+RTV+RAL", ReportUtils.map(fmapIndicators.patientsOnSpecificRegimen("ABC/3TC/DRV/RTV/RAL","Third line","child", "Female", "False"), indParams),""); - cohortDsd.addColumn("CT3X_F", "Any other thirdline adult regimens", ReportUtils.map(fmapIndicators.patientsOnOtherRegimen("Other","Third line","child", "Female", "False"), indParams),""); + cohortDsd.addColumn("PM10_1", "AZT+3TC+ATVr", ReportUtils.map(fmapIndicators.pmtctPatientsRegimen("AZT/3TC/ATV/r", "First line","True"), indParams),""); + cohortDsd.addColumn("PM10_2", "AZT+3TC+ATVr", ReportUtils.map(fmapIndicators.pmtctPatientsRegimen("AZT/3TC/ATV/r", "Second line","True"), indParams),""); + cohortDsd.addColumn("PM10_3", "AZT+3TC+ATVr", ReportUtils.map(fmapIndicators.pmtctPatientsRegimen("AZT/3TC/ATV/r", "Third line","True"), indParams),""); - //Pregnant women or HEI Mothers - cohortDsd.addColumn("PM3", "AZT+3TC+NVP", ReportUtils.map(fmapIndicators.pmtctPatientsRegimen("AZT/3TC/NVP","Female", "True"), indParams),""); - cohortDsd.addColumn("PM4", "AZT+3TC+EFV", ReportUtils.map(fmapIndicators.pmtctPatientsRegimen("AZT/3TC/EFV","Female", "True"), indParams),""); - cohortDsd.addColumn("PM5", "AZT+3TC+LPVr", ReportUtils.map(fmapIndicators.pmtctPatientsRegimen("AZT/3TC/LPV/r","Female", "True"), indParams),""); - cohortDsd.addColumn("PM6", "TDF+3TC+NVP", ReportUtils.map(fmapIndicators.pmtctPatientsRegimen("TDF/3TC/NVP","Female", "True"), indParams),""); - cohortDsd.addColumn("PM7", "TDF+3TC+LPVr", ReportUtils.map(fmapIndicators.pmtctPatientsRegimen("TDF/3TC/LPV/r","Female", "True"), indParams),""); - cohortDsd.addColumn("PM9", "TDF+3TC+EFV", ReportUtils.map(fmapIndicators.pmtctPatientsRegimen("TDF/3TC/EFV","Female", "True"), indParams),""); - cohortDsd.addColumn("PM10", "AZT+3TC+ATVr", ReportUtils.map(fmapIndicators.pmtctPatientsRegimen("AZT/3TC/ATV/r","Female", "True"), indParams),""); - cohortDsd.addColumn("PM11", "TDF+3TC+ATVr", ReportUtils.map(fmapIndicators.pmtctPatientsRegimen("AZT/3TC/ATV/r","Female", "True"), indParams),""); - cohortDsd.addColumn("PM12", "TDF+3TC+DTG", ReportUtils.map(fmapIndicators.pmtctPatientsRegimen("TDF/3TC/DTG","Female", "True"), indParams),""); - cohortDsd.addColumn("PM13", "AZT+3TC+DTG", ReportUtils.map(fmapIndicators.pmtctPatientsRegimen("AZT/3TC/DTG","Female", "True"), indParams),""); - cohortDsd.addColumn("PM14", "ABC+3TC+DTG", ReportUtils.map(fmapIndicators.pmtctPatientsRegimen("ABC/3TC/DTG","Female", "True"), indParams),""); - cohortDsd.addColumn("PM15", "ABC+3TC+EFV", ReportUtils.map(fmapIndicators.pmtctPatientsRegimen("ABC/3TC/EFV","Female", "True"), indParams),""); - cohortDsd.addColumn("PM1X", "Any other PMTCT regimens for Women", ReportUtils.map(fmapIndicators.pmtctPatientsOnOtherRegimen("Other","Female", "True"), indParams),""); + + cohortDsd.addColumn("PM11_1", "TDF+3TC+ATVr", ReportUtils.map(fmapIndicators.pmtctPatientsRegimen("TDF/3TC/ATV/r", "First line","True"), indParams),""); + cohortDsd.addColumn("PM11_2", "TDF+3TC+ATVr", ReportUtils.map(fmapIndicators.pmtctPatientsRegimen("TDF/3TC/ATV/r", "Second line","True"), indParams),""); + cohortDsd.addColumn("PM11_3", "TDF+3TC+ATVr", ReportUtils.map(fmapIndicators.pmtctPatientsRegimen("TDF/3TC/ATV/r", "Third line","True"), indParams),""); + + cohortDsd.addColumn("PM12_1", "TDF+3TC+DTG", ReportUtils.map(fmapIndicators.pmtctPatientsRegimen("TDF/3TC/DTG", "First line","True"), indParams),""); + cohortDsd.addColumn("PM12_2", "TDF+3TC+DTG", ReportUtils.map(fmapIndicators.pmtctPatientsRegimen("TDF/3TC/DTG", "Second line","True"), indParams),""); + cohortDsd.addColumn("PM12_3", "TDF+3TC+DTG", ReportUtils.map(fmapIndicators.pmtctPatientsRegimen("TDF/3TC/DTG", "Third line","True"), indParams),""); + + cohortDsd.addColumn("PM13_1", "AZT+3TC+DTG", ReportUtils.map(fmapIndicators.pmtctPatientsRegimen("AZT/3TC/DTG", "First line","True"), indParams),""); + cohortDsd.addColumn("PM13_2", "AZT+3TC+DTG", ReportUtils.map(fmapIndicators.pmtctPatientsRegimen("AZT/3TC/DTG", "Second line","True"), indParams),""); + cohortDsd.addColumn("PM13_3", "AZT+3TC+DTG", ReportUtils.map(fmapIndicators.pmtctPatientsRegimen("AZT/3TC/DTG", "Third line","True"), indParams),""); + + cohortDsd.addColumn("PM14_1", "ABC+3TC+DTG", ReportUtils.map(fmapIndicators.pmtctPatientsRegimen("ABC/3TC/DTG", "First line","True"), indParams),""); + cohortDsd.addColumn("PM14_2", "ABC+3TC+DTG", ReportUtils.map(fmapIndicators.pmtctPatientsRegimen("ABC/3TC/DTG", "Second line","True"), indParams),""); + cohortDsd.addColumn("PM14_3", "ABC+3TC+DTG", ReportUtils.map(fmapIndicators.pmtctPatientsRegimen("ABC/3TC/DTG", "Third line","True"), indParams),""); + + cohortDsd.addColumn("PM1X_1", "Any other PMTCT regimens for Women", ReportUtils.map(fmapIndicators.pmtctPatientsOnOtherRegimen("Other", "First line","True"), indParams),""); + cohortDsd.addColumn("PM1X_2", "Any other PMTCT regimens for Women", ReportUtils.map(fmapIndicators.pmtctPatientsOnOtherRegimen("Other", "Second line","True"), indParams),""); + cohortDsd.addColumn("PM1X_3", "Any other PMTCT regimens for Women", ReportUtils.map(fmapIndicators.pmtctPatientsOnOtherRegimen("Other", "Third line","True"), indParams),""); + //Paediatric + //First Line + cohortDsd.addColumn("CF2G_W1", "ABC+3TC+DTG", ReportUtils.map(fmapIndicators.peadPatientsOnSpecificRegimen("ABC/3TC/DTG","First line","child", "False", MIN_WEIGHT_3, MAX_WEIGHT_6 ), indParams),""); + cohortDsd.addColumn("CF2G_W2", "ABC+3TC+DTG", ReportUtils.map(fmapIndicators.peadPatientsOnSpecificRegimen("ABC/3TC/DTG","First line","child", "False", MIN_WEIGHT_6, MAX_WEIGHT_10 ), indParams),""); + cohortDsd.addColumn("CF2G_W3", "ABC+3TC+DTG", ReportUtils.map(fmapIndicators.peadPatientsOnSpecificRegimen("ABC/3TC/DTG","First line","child", "False", MIN_WEIGHT_10, MAX_WEIGHT_14 ), indParams),""); + cohortDsd.addColumn("CF2G_W4", "ABC+3TC+DTG", ReportUtils.map(fmapIndicators.peadPatientsOnSpecificRegimen("ABC/3TC/DTG","First line","child", "False", MIN_WEIGHT_14, MAX_WEIGHT_20 ), indParams),""); + cohortDsd.addColumn("CF2G_W5", "ABC+3TC+DTG", ReportUtils.map(fmapIndicators.peadPatientsOnSpecificRegimen("ABC/3TC/DTG","First line","child", "False", MIN_WEIGHT_20, MAX_WEIGHT_25 ), indParams),""); + cohortDsd.addColumn("CF2G_W6", "ABC+3TC+DTG", ReportUtils.map(fmapIndicators.peadPatientsOnSpecificRegimen("ABC/3TC/DTG","First line","child", "False", MIN_WEIGHT_25, MAX_WEIGHT_30 ), indParams),""); + cohortDsd.addColumn("CF2G_W7", "ABC+3TC+DTG", ReportUtils.map(fmapIndicators.peadPatientsOnSpecificRegimen("ABC/3TC/DTG","First line","child", "False", MIN_WEIGHT_30, MAX_WEIGHT_ABOVE_30 ), indParams),""); + + cohortDsd.addColumn("CF1D_W1", "AZT+3TC+DTG", ReportUtils.map(fmapIndicators.peadPatientsOnSpecificRegimen("AZT/3TC/DTG","First line","child", "False", MIN_WEIGHT_3, MAX_WEIGHT_6 ), indParams),""); + cohortDsd.addColumn("CF1D_W2", "AZT+3TC+DTG", ReportUtils.map(fmapIndicators.peadPatientsOnSpecificRegimen("AZT/3TC/DTG","First line","child", "False", MIN_WEIGHT_6, MAX_WEIGHT_10 ), indParams),""); + cohortDsd.addColumn("CF1D_W3", "AZT+3TC+DTG", ReportUtils.map(fmapIndicators.peadPatientsOnSpecificRegimen("AZT/3TC/DTG","First line","child", "False", MIN_WEIGHT_10, MAX_WEIGHT_14 ), indParams),""); + cohortDsd.addColumn("CF1D_W4", "AZT+3TC+DTG", ReportUtils.map(fmapIndicators.peadPatientsOnSpecificRegimen("AZT/3TC/DTG","First line","child", "False", MIN_WEIGHT_14, MAX_WEIGHT_20 ), indParams),""); + cohortDsd.addColumn("CF1D_W5", "AZT+3TC+DTG", ReportUtils.map(fmapIndicators.peadPatientsOnSpecificRegimen("AZT/3TC/DTG","First line","child", "False", MIN_WEIGHT_20, MAX_WEIGHT_25 ), indParams),""); + cohortDsd.addColumn("CF1D_W6", "AZT+3TC+DTG", ReportUtils.map(fmapIndicators.peadPatientsOnSpecificRegimen("AZT/3TC/DTG","First line","child", "False", MIN_WEIGHT_25, MAX_WEIGHT_30 ), indParams),""); + cohortDsd.addColumn("CF1D_W7", "AZT+3TC+DTG", ReportUtils.map(fmapIndicators.peadPatientsOnSpecificRegimen("AZT/3TC/DTG","First line","child", "False", MIN_WEIGHT_30, MAX_WEIGHT_ABOVE_30 ), indParams),""); + + cohortDsd.addColumn("CF4E_W1", "TDF+3TC+DTG", ReportUtils.map(fmapIndicators.peadPatientsOnSpecificRegimen("TDF/3TC/DTG","First line","child", "False", MIN_WEIGHT_3, MAX_WEIGHT_6 ), indParams),""); + cohortDsd.addColumn("CF4E_W2", "TDF+3TC+DTG", ReportUtils.map(fmapIndicators.peadPatientsOnSpecificRegimen("TDF/3TC/DTG","First line","child", "False", MIN_WEIGHT_6, MAX_WEIGHT_10 ), indParams),""); + cohortDsd.addColumn("CF4E_W3", "TDF+3TC+DTG", ReportUtils.map(fmapIndicators.peadPatientsOnSpecificRegimen("TDF/3TC/DTG","First line","child", "False", MIN_WEIGHT_10, MAX_WEIGHT_14 ), indParams),""); + cohortDsd.addColumn("CF4E_W4", "TDF+3TC+DTG", ReportUtils.map(fmapIndicators.peadPatientsOnSpecificRegimen("TDF/3TC/DTG","First line","child", "False", MIN_WEIGHT_14, MAX_WEIGHT_20 ), indParams),""); + cohortDsd.addColumn("CF4E_W5", "TDF+3TC+DTG", ReportUtils.map(fmapIndicators.peadPatientsOnSpecificRegimen("TDF/3TC/DTG","First line","child", "False", MIN_WEIGHT_20, MAX_WEIGHT_25 ), indParams),""); + cohortDsd.addColumn("CF4E_W6", "TDF+3TC+DTG", ReportUtils.map(fmapIndicators.peadPatientsOnSpecificRegimen("TDF/3TC/DTG","First line","child", "False", MIN_WEIGHT_25, MAX_WEIGHT_30 ), indParams),""); + cohortDsd.addColumn("CF4E_W7", "TDF+3TC+DTG", ReportUtils.map(fmapIndicators.peadPatientsOnSpecificRegimen("TDF/3TC/DTG","First line","child", "False", MIN_WEIGHT_30, MAX_WEIGHT_ABOVE_30 ), indParams),""); + + cohortDsd.addColumn("CF5X_W1", "Any other first line adult regimens", ReportUtils.map(fmapIndicators.peadPatientsOnSpecificRegimen("Other","First line","child", "False", MIN_WEIGHT_3, MAX_WEIGHT_6), indParams),""); + cohortDsd.addColumn("CF5X_W2", "Any other first line adult regimens", ReportUtils.map(fmapIndicators.peadPatientsOnSpecificRegimen("Other","First line","child", "False", MIN_WEIGHT_6, MAX_WEIGHT_10), indParams),""); + cohortDsd.addColumn("CF5X_W3", "Any other first line adult regimens", ReportUtils.map(fmapIndicators.peadPatientsOnSpecificRegimen("Other","First line","child", "False", MIN_WEIGHT_10, MAX_WEIGHT_14), indParams),""); + cohortDsd.addColumn("CF5X_W4", "Any other first line adult regimens", ReportUtils.map(fmapIndicators.peadPatientsOnSpecificRegimen("Other","First line","child", "False", MIN_WEIGHT_14, MAX_WEIGHT_20), indParams),""); + cohortDsd.addColumn("CF5X_W5", "Any other first line adult regimens", ReportUtils.map(fmapIndicators.peadPatientsOnSpecificRegimen("Other","First line","child", "False", MIN_WEIGHT_20, MAX_WEIGHT_25 ), indParams),""); + cohortDsd.addColumn("CF5X_W6", "Any other first line adult regimens", ReportUtils.map(fmapIndicators.peadPatientsOnSpecificRegimen("Other","First line","child", "False", MIN_WEIGHT_25, MAX_WEIGHT_30), indParams),""); + cohortDsd.addColumn("CF5X_W7", "Any other first line adult regimens", ReportUtils.map(fmapIndicators.peadPatientsOnSpecificRegimen("Other","First line","child", "False", MIN_WEIGHT_30, MAX_WEIGHT_ABOVE_30), indParams),""); + + //Paediatric Second Line + cohortDsd.addColumn("CS1A_W1", "AZT+3TC+LPVr", ReportUtils.map(fmapIndicators.peadPatientsOnSpecificRegimen("AZT/3TC/LPV/r","Second line","child", "False", MIN_WEIGHT_3, MAX_WEIGHT_6), indParams),""); + cohortDsd.addColumn("CS1A_W2", "AZT+3TC+LPVr", ReportUtils.map(fmapIndicators.peadPatientsOnSpecificRegimen("AZT/3TC/LPV/r","Second line","child", "False", MIN_WEIGHT_6, MAX_WEIGHT_10), indParams),""); + cohortDsd.addColumn("CS1A_W3", "AZT+3TC+LPVr", ReportUtils.map(fmapIndicators.peadPatientsOnSpecificRegimen("AZT/3TC/LPV/r","Second line","child", "False", MIN_WEIGHT_10, MAX_WEIGHT_14), indParams),""); + cohortDsd.addColumn("CS1A_W4", "AZT+3TC+LPVr", ReportUtils.map(fmapIndicators.peadPatientsOnSpecificRegimen("AZT/3TC/LPV/r","Second line","child", "False", MIN_WEIGHT_14, MAX_WEIGHT_20), indParams),""); + cohortDsd.addColumn("CS1A_W5", "AZT+3TC+LPVr", ReportUtils.map(fmapIndicators.peadPatientsOnSpecificRegimen("AZT/3TC/LPV/r","Second line","child", "False", MIN_WEIGHT_20, MAX_WEIGHT_25), indParams),""); + cohortDsd.addColumn("CS1A_W6", "AZT+3TC+LPVr", ReportUtils.map(fmapIndicators.peadPatientsOnSpecificRegimen("AZT/3TC/LPV/r","Second line","child", "False", MIN_WEIGHT_25, MAX_WEIGHT_30), indParams),""); + cohortDsd.addColumn("CS1A_W7", "AZT+3TC+LPVr", ReportUtils.map(fmapIndicators.peadPatientsOnSpecificRegimen("AZT/3TC/LPV/r","Second line","child", "False", MIN_WEIGHT_30, MAX_WEIGHT_ABOVE_30), indParams),""); + + cohortDsd.addColumn("CS1B_W1", "AZT+3TC+DTG", ReportUtils.map(fmapIndicators.peadPatientsOnSpecificRegimen("AZT/3TC/DTG","Second line","child", "False", MIN_WEIGHT_3, MAX_WEIGHT_6 ), indParams),""); + cohortDsd.addColumn("CS1B_W2", "AZT+3TC+DTG", ReportUtils.map(fmapIndicators.peadPatientsOnSpecificRegimen("AZT/3TC/DTG","Second line","child", "False", MIN_WEIGHT_6, MAX_WEIGHT_10 ), indParams),""); + cohortDsd.addColumn("CS1B_W3", "AZT+3TC+DTG", ReportUtils.map(fmapIndicators.peadPatientsOnSpecificRegimen("AZT/3TC/DTG","Second line","child", "False", MIN_WEIGHT_10, MAX_WEIGHT_14 ), indParams),""); + cohortDsd.addColumn("CS1B_W4", "AZT+3TC+DTG", ReportUtils.map(fmapIndicators.peadPatientsOnSpecificRegimen("AZT/3TC/DTG","Second line","child", "False", MIN_WEIGHT_14, MAX_WEIGHT_20), indParams),""); + cohortDsd.addColumn("CS1B_W5", "AZT+3TC+DTG", ReportUtils.map(fmapIndicators.peadPatientsOnSpecificRegimen("AZT/3TC/DTG","Second line","child", "False", MIN_WEIGHT_20, MAX_WEIGHT_25), indParams),""); + cohortDsd.addColumn("CS1B_W6", "AZT+3TC+DTG", ReportUtils.map(fmapIndicators.peadPatientsOnSpecificRegimen("AZT/3TC/DTG","Second line","child", "False", MIN_WEIGHT_25, MAX_WEIGHT_30), indParams),""); + cohortDsd.addColumn("CS1B_W7", "AZT+3TC+DTG", ReportUtils.map(fmapIndicators.peadPatientsOnSpecificRegimen("AZT/3TC/DTG","Second line","child", "False", MIN_WEIGHT_30, MAX_WEIGHT_ABOVE_30), indParams),""); + + cohortDsd.addColumn("CS2A_W1", "ABC+3TC+LPVr", ReportUtils.map(fmapIndicators.peadPatientsOnSpecificRegimen("ABC/3TC/LPV/r","Second line","child", "False", MIN_WEIGHT_3, MAX_WEIGHT_6), indParams),""); + cohortDsd.addColumn("CS2A_W2", "ABC+3TC+LPVr", ReportUtils.map(fmapIndicators.peadPatientsOnSpecificRegimen("ABC/3TC/LPV/r","Second line","child", "False", MIN_WEIGHT_6, MAX_WEIGHT_10 ), indParams),""); + cohortDsd.addColumn("CS2A_W3", "ABC+3TC+LPVr", ReportUtils.map(fmapIndicators.peadPatientsOnSpecificRegimen("ABC/3TC/LPV/r","Second line","child", "False", MIN_WEIGHT_10, MAX_WEIGHT_14 ), indParams),""); + cohortDsd.addColumn("CS2A_W4", "ABC+3TC+LPVr", ReportUtils.map(fmapIndicators.peadPatientsOnSpecificRegimen("ABC/3TC/LPV/r","Second line","child", "False", MIN_WEIGHT_14, MAX_WEIGHT_20), indParams),""); + cohortDsd.addColumn("CS2A_W5", "ABC+3TC+LPVr", ReportUtils.map(fmapIndicators.peadPatientsOnSpecificRegimen("ABC/3TC/LPV/r","Second line","child", "False", MIN_WEIGHT_20, MAX_WEIGHT_25), indParams),""); + cohortDsd.addColumn("CS2A_W6", "ABC+3TC+LPVr", ReportUtils.map(fmapIndicators.peadPatientsOnSpecificRegimen("ABC/3TC/LPV/r","Second line","child", "False", MIN_WEIGHT_25, MAX_WEIGHT_30), indParams),""); + cohortDsd.addColumn("CS2A_W7", "ABC+3TC+LPVr", ReportUtils.map(fmapIndicators.peadPatientsOnSpecificRegimen("ABC/3TC/LPV/r","Second line","child", "False", MIN_WEIGHT_30, MAX_WEIGHT_ABOVE_30), indParams),""); + + cohortDsd.addColumn("CS2B_W1", "ABC+3TC+DTG", ReportUtils.map(fmapIndicators.peadPatientsOnSpecificRegimen("ABC/3TC/DTG","Second line","child", "False", MIN_WEIGHT_3, MAX_WEIGHT_6), indParams),""); + cohortDsd.addColumn("CS2B_W2", "ABC+3TC+DTG", ReportUtils.map(fmapIndicators.peadPatientsOnSpecificRegimen("ABC/3TC/DTG","Second line","child", "False", MIN_WEIGHT_6, MAX_WEIGHT_10), indParams),""); + cohortDsd.addColumn("CS2B_W3", "ABC+3TC+DTG", ReportUtils.map(fmapIndicators.peadPatientsOnSpecificRegimen("ABC/3TC/DTG","Second line","child", "False", MIN_WEIGHT_10, MAX_WEIGHT_14), indParams),""); + cohortDsd.addColumn("CS2B_W4", "ABC+3TC+DTG", ReportUtils.map(fmapIndicators.peadPatientsOnSpecificRegimen("ABC/3TC/DTG","Second line","child", "False", MIN_WEIGHT_14, MAX_WEIGHT_20), indParams),""); + cohortDsd.addColumn("CS2B_W5", "ABC+3TC+DTG", ReportUtils.map(fmapIndicators.peadPatientsOnSpecificRegimen("ABC/3TC/DTG","Second line","child", "False", MIN_WEIGHT_20, MAX_WEIGHT_25), indParams),""); + cohortDsd.addColumn("CS2B_W6", "ABC+3TC+DTG", ReportUtils.map(fmapIndicators.peadPatientsOnSpecificRegimen("ABC/3TC/DTG","Second line","child", "False", MIN_WEIGHT_25, MAX_WEIGHT_30), indParams),""); + cohortDsd.addColumn("CS2B_W7", "ABC+3TC+DTG", ReportUtils.map(fmapIndicators.peadPatientsOnSpecificRegimen("ABC/3TC/DTG","Second line","child", "False", MIN_WEIGHT_30, MAX_WEIGHT_ABOVE_30), indParams),""); + + cohortDsd.addColumn("CS4X_W1", "Any other second line adult regimens", ReportUtils.map(fmapIndicators.peadPatientsOnSpecificRegimen("Other","Second line","child", "False", MIN_WEIGHT_3, MAX_WEIGHT_6), indParams),""); + cohortDsd.addColumn("CS4X_W2", "Any other second line adult regimens", ReportUtils.map(fmapIndicators.peadPatientsOnSpecificRegimen("Other","Second line","child", "False", MIN_WEIGHT_6, MAX_WEIGHT_10), indParams),""); + cohortDsd.addColumn("CS4X_W3", "Any other second line adult regimens", ReportUtils.map(fmapIndicators.peadPatientsOnSpecificRegimen("Other","Second line","child", "False", MIN_WEIGHT_10, MAX_WEIGHT_14), indParams),""); + cohortDsd.addColumn("CS4X_W4", "Any other second line adult regimens", ReportUtils.map(fmapIndicators.peadPatientsOnSpecificRegimen("Other","Second line","child", "False", MIN_WEIGHT_14, MAX_WEIGHT_20), indParams),""); + cohortDsd.addColumn("CS4X_W5", "Any other second line adult regimens", ReportUtils.map(fmapIndicators.peadPatientsOnSpecificRegimen("Other","Second line","child", "False", MIN_WEIGHT_20, MAX_WEIGHT_25), indParams),""); + cohortDsd.addColumn("CS4X_W6", "Any other second line adult regimens", ReportUtils.map(fmapIndicators.peadPatientsOnSpecificRegimen("Other","Second line","child", "False", MIN_WEIGHT_25, MAX_WEIGHT_30), indParams),""); + cohortDsd.addColumn("CS4X_W7", "Any other second line adult regimens", ReportUtils.map(fmapIndicators.peadPatientsOnSpecificRegimen("Other","Second line","child", "False", MIN_WEIGHT_30, MAX_WEIGHT_ABOVE_30), indParams),""); + + //Paediatric Third Line + cohortDsd.addColumn("CT1H_W1", "AZT+3TC+DRV+RTV+RAL", ReportUtils.map(fmapIndicators.peadPatientsOnSpecificRegimen("AZT/3TC/DRV/RTV/RAL","Third line","child", "False", MIN_WEIGHT_3, MAX_WEIGHT_6), indParams),""); + cohortDsd.addColumn("CT1H_W2", "AZT+3TC+DRV+RTV+RAL", ReportUtils.map(fmapIndicators.peadPatientsOnSpecificRegimen("AZT/3TC/DRV/RTV/RAL","Third line","child", "False", MIN_WEIGHT_6, MAX_WEIGHT_10), indParams),""); + cohortDsd.addColumn("CT1H_W3", "AZT+3TC+DRV+RTV+RAL", ReportUtils.map(fmapIndicators.peadPatientsOnSpecificRegimen("AZT/3TC/DRV/RTV/RAL","Third line","child", "False", MIN_WEIGHT_10, MAX_WEIGHT_14), indParams),""); + cohortDsd.addColumn("CT1H_W4", "AZT+3TC+DRV+RTV+RAL", ReportUtils.map(fmapIndicators.peadPatientsOnSpecificRegimen("AZT/3TC/DRV/RTV/RAL","Third line","child", "False", MIN_WEIGHT_14, MAX_WEIGHT_20), indParams),""); + cohortDsd.addColumn("CT1H_W5", "AZT+3TC+DRV+RTV+RAL", ReportUtils.map(fmapIndicators.peadPatientsOnSpecificRegimen("AZT/3TC/DRV/RTV/RAL","Third line","child", "False", MIN_WEIGHT_20, MAX_WEIGHT_25), indParams),""); + cohortDsd.addColumn("CT1H_W6", "AZT+3TC+DRV+RTV+RAL", ReportUtils.map(fmapIndicators.peadPatientsOnSpecificRegimen("AZT/3TC/DRV/RTV/RAL","Third line","child", "False", MIN_WEIGHT_25, MAX_WEIGHT_30), indParams),""); + cohortDsd.addColumn("CT1H_W7", "AZT+3TC+DRV+RTV+RAL", ReportUtils.map(fmapIndicators.peadPatientsOnSpecificRegimen("AZT/3TC/DRV/RTV/RAL","Third line","child", "False", MIN_WEIGHT_30, MAX_WEIGHT_ABOVE_30), indParams),""); + + cohortDsd.addColumn("CT2D_W1", "ABC+3TC+DRV+RTV+RAL", ReportUtils.map(fmapIndicators.peadPatientsOnSpecificRegimen("ABC/3TC/DRV/RTV/RAL","Third line","child", "False", MIN_WEIGHT_3, MAX_WEIGHT_6), indParams),""); + cohortDsd.addColumn("CT2D_W2", "ABC+3TC+DRV+RTV+RAL", ReportUtils.map(fmapIndicators.peadPatientsOnSpecificRegimen("ABC/3TC/DRV/RTV/RAL","Third line","child", "False", MIN_WEIGHT_6, MAX_WEIGHT_10), indParams),""); + cohortDsd.addColumn("CT2D_W3", "ABC+3TC+DRV+RTV+RAL", ReportUtils.map(fmapIndicators.peadPatientsOnSpecificRegimen("ABC/3TC/DRV/RTV/RAL","Third line","child", "False", MIN_WEIGHT_10, MAX_WEIGHT_14), indParams),""); + cohortDsd.addColumn("CT2D_W4", "ABC+3TC+DRV+RTV+RAL", ReportUtils.map(fmapIndicators.peadPatientsOnSpecificRegimen("ABC/3TC/DRV/RTV/RAL","Third line","child", "False", MIN_WEIGHT_14, MAX_WEIGHT_20), indParams),""); + cohortDsd.addColumn("CT2D_W5", "ABC+3TC+DRV+RTV+RAL", ReportUtils.map(fmapIndicators.peadPatientsOnSpecificRegimen("ABC/3TC/DRV/RTV/RAL","Third line","child", "False", MIN_WEIGHT_20, MAX_WEIGHT_25), indParams),""); + cohortDsd.addColumn("CT2D_W6", "ABC+3TC+DRV+RTV+RAL", ReportUtils.map(fmapIndicators.peadPatientsOnSpecificRegimen("ABC/3TC/DRV/RTV/RAL","Third line","child", "False", MIN_WEIGHT_25, MAX_WEIGHT_30), indParams),""); + cohortDsd.addColumn("CT2D_W7", "ABC+3TC+DRV+RTV+RAL", ReportUtils.map(fmapIndicators.peadPatientsOnSpecificRegimen("ABC/3TC/DRV/RTV/RAL","Third line","child", "False", MIN_WEIGHT_30, MAX_WEIGHT_ABOVE_30), indParams),""); + + + cohortDsd.addColumn("CT3X_W1", "Any other third line pead regimens", ReportUtils.map(fmapIndicators.peadPatientsOnSpecificRegimen("Other","Third line","child", "False", MIN_WEIGHT_3, MAX_WEIGHT_6), indParams),""); + cohortDsd.addColumn("CT3X_W2", "Any other third line pead regimens", ReportUtils.map(fmapIndicators.peadPatientsOnSpecificRegimen("Other","Third line","child", "False", MIN_WEIGHT_6, MAX_WEIGHT_10), indParams),""); + cohortDsd.addColumn("CT3X_W3", "Any other third line pead regimens", ReportUtils.map(fmapIndicators.peadPatientsOnSpecificRegimen("Other","Third line","child", "False", MIN_WEIGHT_10, MAX_WEIGHT_14), indParams),""); + cohortDsd.addColumn("CT3X_W4", "Any other third line pead regimens", ReportUtils.map(fmapIndicators.peadPatientsOnSpecificRegimen("Other","Third line","child", "False", MIN_WEIGHT_14, MAX_WEIGHT_20), indParams),""); + cohortDsd.addColumn("CT3X_W5", "Any other third line pead regimens", ReportUtils.map(fmapIndicators.peadPatientsOnSpecificRegimen("Other","Third line","child", "False", MIN_WEIGHT_20, MAX_WEIGHT_25), indParams),""); + cohortDsd.addColumn("CT3X_W6", "Any other third line pead regimens", ReportUtils.map(fmapIndicators.peadPatientsOnSpecificRegimen("Other","Third line","child", "False", MIN_WEIGHT_25, MAX_WEIGHT_30), indParams),""); + cohortDsd.addColumn("CT3X_W7", "Any other third line pead regimens", ReportUtils.map(fmapIndicators.peadPatientsOnSpecificRegimen("Other","Third line","child", "False", MIN_WEIGHT_30, MAX_WEIGHT_ABOVE_30), indParams),""); + return cohortDsd; } diff --git a/api/src/main/java/org/openmrs/module/kenyaemr/reporting/library/shared/hiv/art/FmapCohortLibrary.java b/api/src/main/java/org/openmrs/module/kenyaemr/reporting/library/shared/hiv/art/FmapCohortLibrary.java index 7dae62ba07..156b9a00c9 100644 --- a/api/src/main/java/org/openmrs/module/kenyaemr/reporting/library/shared/hiv/art/FmapCohortLibrary.java +++ b/api/src/main/java/org/openmrs/module/kenyaemr/reporting/library/shared/hiv/art/FmapCohortLibrary.java @@ -58,17 +58,14 @@ public CohortDefinition AdultFirstTLE() { return cd; } - public CohortDefinition patientOnSpecificRegimenAndRegimenLine(String regimenName,String regimenLine,String ageGroup, String gender, String pmtct){ + public CohortDefinition patientOnSpecificRegimenAndRegimenLine(String regimenName,String regimenLine,String ageGroup,String pmtct){ String sqlQuery = "SELECT regimeData.patient_id\n" + " FROM\n" + " (SELECT\n" + " de.patient_id as patient_id,\n" + " CASE WHEN timestampdiff(YEAR, date(d.DOB), max(fup.visit_date)) >= 15\n" + " THEN 'adult'\n" + - " ELSE 'child' END AS agegroup,\n" + - " CASE WHEN d.Gender = 'M' THEN 'Male'\n" + - " WHEN d.Gender = 'F' THEN 'Female'\n" + - " ELSE '' END AS gender,\n" + + " ELSE 'child' END AS agegroup,\n" + " CASE WHEN (fup.pregnancy_status = 1065 OR fup.breastfeeding = 1065) THEN 'True'\n" + " ELSE 'False' END AS pmtct,\n" + " de.program AS program,\n" + @@ -91,13 +88,11 @@ public CohortDefinition patientOnSpecificRegimenAndRegimenLine(String regimenNam " AND regimen = ':regimenName'\n" + " AND regimen_line = ':regimenLine'\n" + " AND patient_id IS NOT NULL\n" + - " AND agegroup = ':ageGroup'\n" + - " AND gender = ':gender'\n" + + " AND agegroup = ':ageGroup'\n" + " AND pmtct = ':pmtct';"; sqlQuery = sqlQuery.replaceAll(":regimenName", regimenName); sqlQuery = sqlQuery.replaceAll(":regimenLine", regimenLine); - sqlQuery = sqlQuery.replaceAll(":ageGroup", ageGroup); - sqlQuery = sqlQuery.replaceAll(":gender", gender); + sqlQuery = sqlQuery.replaceAll(":ageGroup", ageGroup); sqlQuery = sqlQuery.replaceAll(":pmtct", pmtct); SqlCohortDefinition cd = new SqlCohortDefinition(); cd.setName("Regimens"); @@ -108,17 +103,17 @@ public CohortDefinition patientOnSpecificRegimenAndRegimenLine(String regimenNam return cd; } - public CohortDefinition txCurrpatientOnSpecificRegimenAndRegimenLine(String regimenName,String regimenLine,String ageGroup, String gender, String pmtct) { + public CohortDefinition txCurrpatientOnSpecificRegimenAndRegimenLine(String regimenName,String regimenLine,String ageGroup,String pmtct) { CompositionCohortDefinition cd = new CompositionCohortDefinition(); cd.addParameter(new Parameter("startDate", "Start Date", Date.class)); cd.addParameter(new Parameter("endDate", "End Date", Date.class)); cd.addSearch("txcurr", ReportUtils.map(datimCohortLibrary.currentlyOnArt(), "startDate=${startDate},endDate=${endDate}")); - cd.addSearch("patientOnSpecificRegimenAndRegimenLine", ReportUtils.map(patientOnSpecificRegimenAndRegimenLine(regimenName, regimenLine, ageGroup, gender, pmtct), "startDate=${startDate},endDate=${endDate}")); + cd.addSearch("patientOnSpecificRegimenAndRegimenLine", ReportUtils.map(patientOnSpecificRegimenAndRegimenLine(regimenName, regimenLine, ageGroup, pmtct), "startDate=${startDate},endDate=${endDate}")); cd.setCompositionString("(txcurr AND patientOnSpecificRegimenAndRegimenLine"); return cd; } - public CohortDefinition patientOnAnyOtherRegimenandRegimenLine(String regimenName,String regimenLine,String ageGroup, String gender, String pmtct){ + public CohortDefinition patientOnAnyOtherRegimenandRegimenLine(String regimenName,String regimenLine,String ageGroup, String pmtct){ String sqlQuery = "SELECT regimeData.patient_id\n" + "FROM\n" + " (SELECT\n" + @@ -127,9 +122,6 @@ public CohortDefinition patientOnAnyOtherRegimenandRegimenLine(String regimenNam " THEN 'adult'\n" + " ELSE 'child' END AS agegroup,\n" + " de.program AS program,\n" + - " CASE WHEN d.Gender = 'M' THEN 'Male'\n" + - " WHEN d.Gender = 'F' THEN 'Female'\n" + - " ELSE '' END AS gender,\n" + " CASE WHEN (fup.pregnancy_status = 1065 OR fup.breastfeeding = 1065) THEN 'True'\n" + " ELSE 'False' END AS pmtct,\n" + " de.date_started AS date_started,\n" + @@ -147,17 +139,15 @@ public CohortDefinition patientOnAnyOtherRegimenandRegimenLine(String regimenNam " GROUP BY de.encounter_id\n" + " ) regimeData\n" + "WHERE regimen NOT IN ('RHZE', 'RHZ', 'SRHZE', 'RfbHZE', 'RfbHZ', 'SRfbHZE', 'S (1 gm vial)', 'E', 'RHE', 'EH',\n" + - " 'AZT/3TC/NVP','AZT/3TC/EFV','AZT/3TC/DTG','AZT/3TC/LPV/r','AZT/3TC/ATV/R','TDF/3TC/NVP','TDF/3TC/EFV','TDF/3TC/ATV/r','TDF/3TC/DTG','TDF/3TC/LPV/r','ABC/3TC/NVP','ABC/3TC/EFV','ABC/3TC/DTG','ABC/3TC/LPV/r','ABC/3TC/ATV/r')\n" + + " 'AZT/3TC/DTG','AZT/3TC/LPV/r','AZT/3TC/ATV/R','TDF/3TC/EFV','TDF/3TC/ATV/r','TDF/3TC/DTG','TDF/3TC/LPV/r','ABC/3TC/DTG','ABC/3TC/LPV/r','ABC/3TC/ATV/r','AZT/3TC/DTG/DRV/RTV')\n" + " AND date_started <= :endDate AND regimen = ':regimenName'\n" + " AND regimen_line = ':regimenLine'\n" + " AND patient_id IS NOT NULL\n" + - " AND agegroup = ':ageGroup'\n" + - " AND gender = ':gender'\n" + + " AND agegroup = ':ageGroup'\n" + " AND pmtct = ':pmtct';"; sqlQuery = sqlQuery.replaceAll(":regimenName", regimenName); sqlQuery = sqlQuery.replaceAll(":regimenLine", regimenLine); - sqlQuery = sqlQuery.replaceAll(":ageGroup", ageGroup); - sqlQuery = sqlQuery.replaceAll(":gender", gender); + sqlQuery = sqlQuery.replaceAll(":ageGroup", ageGroup); sqlQuery = sqlQuery.replaceAll(":pmtct", pmtct); SqlCohortDefinition cd = new SqlCohortDefinition(); cd.setName("Regimens"); @@ -168,24 +158,21 @@ public CohortDefinition patientOnAnyOtherRegimenandRegimenLine(String regimenNam return cd; } - public CohortDefinition txCurrpatientOnAnyOtherRegimenandRegimenLine(String regimenName,String regimenLine,String ageGroup,String gender,String pmtct) { + public CohortDefinition txCurrpatientOnAnyOtherRegimenandRegimenLine(String regimenName,String regimenLine,String ageGroup,String pmtct) { CompositionCohortDefinition cd = new CompositionCohortDefinition(); cd.addParameter(new Parameter("startDate", "Start Date", Date.class)); cd.addParameter(new Parameter("endDate", "End Date", Date.class)); cd.addSearch("txcurr", ReportUtils.map(datimCohortLibrary.currentlyOnArt(), "startDate=${startDate},endDate=${endDate}")); - cd.addSearch("patientOnAnyOtherRegimenandRegimenLine", ReportUtils.map(patientOnAnyOtherRegimenandRegimenLine(regimenName, regimenLine, ageGroup, gender, pmtct), "startDate=${startDate},endDate=${endDate}")); + cd.addSearch("patientOnAnyOtherRegimenandRegimenLine", ReportUtils.map(patientOnAnyOtherRegimenandRegimenLine(regimenName, regimenLine, ageGroup, pmtct), "startDate=${startDate},endDate=${endDate}")); cd.setCompositionString("(txcurr AND patientOnAnyOtherRegimenandRegimenLine"); return cd; } - public CohortDefinition pmtctPatientOnSpecificRegimen(String regimenName, String gender, String pmtct){ + public CohortDefinition pmtctPatientOnSpecificRegimen(String regimenName, String regimenLine, String pmtct){ String sqlQuery = "SELECT regimeData.patient_id\n" + "FROM\n" + " (SELECT\n" + - " de.patient_id as patient_id,\n" + - " CASE WHEN d.Gender = 'M' THEN 'Male'\n" + - " WHEN d.Gender = 'F' THEN 'Female'\n" + - " ELSE '' END AS gender,\n" + + " de.patient_id as patient_id,\n" + " CASE WHEN (fup.pregnancy_status = 1065 OR fup.breastfeeding = 1065) THEN 'True'\n" + " ELSE 'False' END AS pmtct,\n" + " de.program AS program,\n" + @@ -205,12 +192,12 @@ public CohortDefinition pmtctPatientOnSpecificRegimen(String regimenName, String " ) regimeData\n" + "WHERE regimen NOT IN ('RHZE', 'RHZ', 'SRHZE', 'RfbHZE', 'RfbHZ', 'SRfbHZE', 'S (1 gm vial)', 'E', 'RHE', 'EH')\n" + " AND date_started <= :endDate\n" + - " AND regimen = ':regimenName'\n" + - " AND patient_id IS NOT NULL\n" + - " AND gender = ':gender'\n" + + " AND regimen = ':regimenName'\n" + + " AND regimen_line = ':regimenLine'\n" + + " AND patient_id IS NOT NULL\n" + " AND pmtct = ':pmtct';"; sqlQuery = sqlQuery.replaceAll(":regimenName", regimenName); - sqlQuery = sqlQuery.replaceAll(":gender", gender); + sqlQuery = sqlQuery.replaceAll(":regimenLine", regimenLine); sqlQuery = sqlQuery.replaceAll(":pmtct", pmtct); SqlCohortDefinition cd = new SqlCohortDefinition(); cd.setName("PmtctRegimens"); @@ -221,17 +208,17 @@ public CohortDefinition pmtctPatientOnSpecificRegimen(String regimenName, String return cd; } - public CohortDefinition txCurrPmtctPatientOnSpecificRegimen(String regimenName,String gender,String pmtct) { + public CohortDefinition txCurrPmtctPatientOnSpecificRegimen(String regimenName,String regimenLine, String pmtct) { CompositionCohortDefinition cd = new CompositionCohortDefinition(); cd.addParameter(new Parameter("startDate", "Start Date", Date.class)); cd.addParameter(new Parameter("endDate", "End Date", Date.class)); cd.addSearch("txcurr", ReportUtils.map(datimCohortLibrary.currentlyOnArt(), "startDate=${startDate},endDate=${endDate}")); - cd.addSearch("pmtctPatientOnSpecificRegimen", ReportUtils.map(pmtctPatientOnSpecificRegimen(regimenName, gender, pmtct), "startDate=${startDate},endDate=${endDate}")); + cd.addSearch("pmtctPatientOnSpecificRegimen", ReportUtils.map(pmtctPatientOnSpecificRegimen(regimenName, regimenLine, pmtct), "startDate=${startDate},endDate=${endDate}")); cd.setCompositionString("(txcurr AND pmtctPatientOnSpecificRegimen"); return cd; } - public CohortDefinition pmtctPatientOnAnyOtherRegimen(String regimenName,String gender, String pmtct){ + public CohortDefinition pmtctPatientOnAnyOtherRegimen(String regimenName, String regimenLine, String pmtct){ String sqlQuery = "SELECT regimeData.patient_id\n" + "FROM\n" + " (SELECT\n" + @@ -239,10 +226,7 @@ public CohortDefinition pmtctPatientOnAnyOtherRegimen(String regimenName,String " CASE WHEN timestampdiff(YEAR, date(d.DOB), max(fup.visit_date)) >= 15\n" + " THEN 'adult'\n" + " ELSE 'child' END AS agegroup,\n" + - " de.program AS program,\n" + - " CASE WHEN d.Gender = 'M' THEN 'Male'\n" + - " WHEN d.Gender = 'F' THEN 'Female'\n" + - " ELSE '' END AS gender,\n" + + " de.program AS program,\n" + " CASE WHEN (fup.pregnancy_status = 1065 OR fup.breastfeeding = 1065) THEN 'True'\n" + " ELSE 'False' END AS pmtct,\n" + " de.date_started AS date_started,\n" + @@ -260,13 +244,13 @@ public CohortDefinition pmtctPatientOnAnyOtherRegimen(String regimenName,String " GROUP BY de.encounter_id\n" + " ) regimeData\n" + "WHERE regimen NOT IN ('RHZE', 'RHZ', 'SRHZE', 'RfbHZE', 'RfbHZ', 'SRfbHZE', 'S (1 gm vial)', 'E', 'RHE', 'EH',\n" + - " 'AZT/3TC/NVP','AZT/3TC/EFV','AZT/3TC/DTG','AZT/3TC/LPV/r','AZT/3TC/ATV/R','TDF/3TC/NVP','TDF/3TC/EFV','TDF/3TC/ATV/r','TDF/3TC/DTG','TDF/3TC/LPV/r','ABC/3TC/NVP','ABC/3TC/EFV','ABC/3TC/DTG','ABC/3TC/LPV/r','ABC/3TC/ATV/r')\n" + + " 'AZT/3TC/DTG','AZT/3TC/LPV/r','AZT/3TC/ATV/R','TDF/3TC/EFV','TDF/3TC/ATV/r','TDF/3TC/DTG','TDF/3TC/LPV/r','ABC/3TC/DTG','ABC/3TC/LPV/r','ABC/3TC/ATV/r','AZT/3TC/DTG/DRV/RTV')\n" + " AND date_started <= :endDate AND regimen = ':regimenName'\n" + " AND patient_id IS NOT NULL\n" + - " AND gender = ':gender'\n" + + " AND regimen_line = ':regimenLine'\n" + " AND pmtct = ':pmtct';"; sqlQuery = sqlQuery.replaceAll(":regimenName", regimenName); - sqlQuery = sqlQuery.replaceAll(":gender", gender); + sqlQuery = sqlQuery.replaceAll(":regimenLine", regimenLine); sqlQuery = sqlQuery.replaceAll(":pmtct", pmtct); SqlCohortDefinition cd = new SqlCohortDefinition(); cd.setName("pmtctOtherRegimens"); @@ -277,15 +261,40 @@ public CohortDefinition pmtctPatientOnAnyOtherRegimen(String regimenName,String return cd; } - public CohortDefinition txCurrPmtctPatientOnAnyOtherRegimen(String regimenName,String gender,String pmtct) { + public CohortDefinition txCurrPmtctPatientOnAnyOtherRegimen(String regimenName, String regimenLine, String pmtct) { CompositionCohortDefinition cd = new CompositionCohortDefinition(); cd.addParameter(new Parameter("startDate", "Start Date", Date.class)); cd.addParameter(new Parameter("endDate", "End Date", Date.class)); cd.addSearch("txcurr", ReportUtils.map(datimCohortLibrary.currentlyOnArt(), "startDate=${startDate},endDate=${endDate}")); - cd.addSearch("pmtctPatientOnAnyOtherRegimen", ReportUtils.map(pmtctPatientOnAnyOtherRegimen(regimenName, gender, pmtct), "startDate=${startDate},endDate=${endDate}")); + cd.addSearch("pmtctPatientOnAnyOtherRegimen", ReportUtils.map(pmtctPatientOnAnyOtherRegimen(regimenName, regimenLine, pmtct), "startDate=${startDate},endDate=${endDate}")); cd.setCompositionString("(txcurr AND pmtctPatientOnAnyOtherRegimen"); return cd; } + public CohortDefinition txCurrPeadOnSpecificRegimenAndRegimenLine(String regimenName,String regimenLine,String ageGroup,String pmtct, String minAge, String maxAge) { + CompositionCohortDefinition cd = new CompositionCohortDefinition(); + cd.addParameter(new Parameter("startDate", "Start Date", Date.class)); + cd.addParameter(new Parameter("endDate", "End Date", Date.class)); + cd.addSearch("txcurr", ReportUtils.map(datimCohortLibrary.currentlyOnArt(), "startDate=${startDate},endDate=${endDate}")); + cd.addSearch("patientOnSpecificRegimenAndRegimenLine", ReportUtils.map(patientOnSpecificRegimenAndRegimenLine(regimenName, regimenLine, ageGroup, pmtct), "startDate=${startDate},endDate=${endDate}")); + cd.addSearch("peadWeight", ReportUtils.map(peadWeight(minAge, maxAge))); + cd.setCompositionString("(txcurr AND patientOnSpecificRegimenAndRegimenLine AND peadWeight"); + return cd; + } + public CohortDefinition peadWeight(String minAge, String maxAge) { + String sqlQuery = "SELECT tf.patient_id FROM (SELECT t.patient_id,\n" + + " mid(max(concat(t.visit_date, t.weight)), 11) AS weight\n" + + " FROM kenyaemr_etl.etl_patient_triage t\n" + + " INNER JOIN kenyaemr_etl.etl_patient_hiv_followup f\n" + + " on t.patient_id = f.patient_id and t.visit_date = f.visit_date\n" + + " WHERE f.weight " + minAge + " and f.weight " + maxAge + "\n" + + " GROUP BY t.patient_id) tf"; + SqlCohortDefinition cd = new SqlCohortDefinition(); + cd.setName("latestGreenCardWeight"); + cd.setQuery(sqlQuery); + cd.setDescription("latestGreenCardWeight"); + return cd; + } + } diff --git a/api/src/main/java/org/openmrs/module/kenyaemr/reporting/library/shared/hiv/art/FmapIndicatorLibrary.java b/api/src/main/java/org/openmrs/module/kenyaemr/reporting/library/shared/hiv/art/FmapIndicatorLibrary.java index 7c2180e059..ce71a955e4 100644 --- a/api/src/main/java/org/openmrs/module/kenyaemr/reporting/library/shared/hiv/art/FmapIndicatorLibrary.java +++ b/api/src/main/java/org/openmrs/module/kenyaemr/reporting/library/shared/hiv/art/FmapIndicatorLibrary.java @@ -24,24 +24,30 @@ public class FmapIndicatorLibrary { //Indicator Libraries - public CohortIndicator patientsOnSpecificRegimen(String regimenName, String regimenLine, String ageGroup, String gender, String pmtct) { - return cohortIndicator("TDF+3TC+EFV",map(fmapCohortLibrary.txCurrpatientOnSpecificRegimenAndRegimenLine(regimenName,regimenLine, ageGroup, gender, pmtct), "startDate=${startDate},endDate=${endDate}") + public CohortIndicator patientsOnSpecificRegimen(String regimenName, String regimenLine, String ageGroup, String pmtct) { + return cohortIndicator("TDF+3TC+EFV",map(fmapCohortLibrary.txCurrpatientOnSpecificRegimenAndRegimenLine(regimenName,regimenLine, ageGroup, pmtct), "startDate=${startDate},endDate=${endDate}") ); } - public CohortIndicator patientsOnOtherRegimen(String regimenName, String regimenLine, String ageGroup, String gender, String pmtct) { - return cohortIndicator("TDF+3TC+EFV",map(fmapCohortLibrary.txCurrpatientOnAnyOtherRegimenandRegimenLine(regimenName,regimenLine, ageGroup, gender, pmtct), "startDate=${startDate},endDate=${endDate}") + public CohortIndicator patientsOnOtherRegimen(String regimenName, String regimenLine, String ageGroup, String pmtct) { + return cohortIndicator("TDF+3TC+EFV",map(fmapCohortLibrary.txCurrpatientOnAnyOtherRegimenandRegimenLine(regimenName,regimenLine, ageGroup, pmtct), "startDate=${startDate},endDate=${endDate}") ); } - public CohortIndicator pmtctPatientsRegimen(String regimenName, String gender, String pmtct) { - return cohortIndicator("TDF+3TC+EFV",map(fmapCohortLibrary.txCurrPmtctPatientOnSpecificRegimen(regimenName, gender, pmtct), "startDate=${startDate},endDate=${endDate}") + public CohortIndicator pmtctPatientsRegimen(String regimenName, String regimenLine, String pmtct) { + return cohortIndicator("TDF+3TC+EFV",map(fmapCohortLibrary.txCurrPmtctPatientOnSpecificRegimen(regimenName, regimenLine, pmtct), "startDate=${startDate},endDate=${endDate}") ); } - public CohortIndicator pmtctPatientsOnOtherRegimen(String regimenName, String gender, String pmtct) { - return cohortIndicator("TDF+3TC+EFV",map(fmapCohortLibrary.txCurrPmtctPatientOnAnyOtherRegimen(regimenName, gender, pmtct), "startDate=${startDate},endDate=${endDate}") + public CohortIndicator pmtctPatientsOnOtherRegimen(String regimenName, String regimenLine, String pmtct) { + return cohortIndicator("TDF+3TC+EFV",map(fmapCohortLibrary.txCurrPmtctPatientOnAnyOtherRegimen(regimenName, regimenLine, pmtct), "startDate=${startDate},endDate=${endDate}") ); } + public CohortIndicator peadPatientsOnSpecificRegimen(String regimenName,String regimenLine,String ageGroup,String pmtct, String minAge, String maxAge) { + return cohortIndicator("TDF+3TC+EFV",map(fmapCohortLibrary.txCurrPeadOnSpecificRegimenAndRegimenLine(regimenName,regimenLine,ageGroup,pmtct, minAge,maxAge), "startDate=${startDate},endDate=${endDate}") + ); + } + + } diff --git a/omod/src/main/webapp/resources/reports/.~lock.fmaps_template.xls# b/omod/src/main/webapp/resources/reports/.~lock.fmaps_template.xls# deleted file mode 100644 index 26fb4038a1..0000000000 --- a/omod/src/main/webapp/resources/reports/.~lock.fmaps_template.xls# +++ /dev/null @@ -1 +0,0 @@ -,patrick,patrick-Latitude-7440,20.06.2024 20:46,file:///home/patrick/.config/libreoffice/4; \ No newline at end of file diff --git a/omod/src/main/webapp/resources/reports/.~lock.fmaps_template_old.xls# b/omod/src/main/webapp/resources/reports/.~lock.fmaps_template_old.xls# deleted file mode 100644 index 26fb4038a1..0000000000 --- a/omod/src/main/webapp/resources/reports/.~lock.fmaps_template_old.xls# +++ /dev/null @@ -1 +0,0 @@ -,patrick,patrick-Latitude-7440,20.06.2024 20:46,file:///home/patrick/.config/libreoffice/4; \ No newline at end of file diff --git a/omod/src/main/webapp/resources/reports/fmaps_template.xls b/omod/src/main/webapp/resources/reports/fmaps_template.xls index 183f79f21f45158813f083def0193acc62fe5d2f..31c6e4fbcbb1319e0aeee2581530df51f410daee 100644 GIT binary patch delta 12032 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 diff --git a/omod/src/main/webapp/resources/reports/fmaps_template_old.xls b/omod/src/main/webapp/resources/reports/fmaps_template_old.xls deleted file mode 100644 index 14bef9bb36b2bbbe25770aabe6b3933fe3114312..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32768 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 YGp=raUrS~G|G#`K<*!!eKcfHt0Ps1|ga7~l From 54160a373ab62ba4b2b26285ab06d8dc311b0683 Mon Sep 17 00:00:00 2001 From: patryllus Date: Tue, 25 Jun 2024 18:43:13 +0300 Subject: [PATCH 4/7] Added infants prophylaxis regimens - NVP+AZT for breastfeeding and not breastfeeding and other regimens --- .../builder/common/FmapReportBuilder.java | 21 ++++++- .../shared/common/CommonDimensionLibrary.java | 9 ++- .../shared/hiv/art/FmapCohortLibrary.java | 57 ++++++++++++++++-- .../shared/hiv/art/FmapIndicatorLibrary.java | 18 +++++- .../resources/reports/fmaps_template.xls | Bin 107008 -> 107520 bytes 5 files changed, 95 insertions(+), 10 deletions(-) diff --git a/api/src/main/java/org/openmrs/module/kenyaemr/reporting/builder/common/FmapReportBuilder.java b/api/src/main/java/org/openmrs/module/kenyaemr/reporting/builder/common/FmapReportBuilder.java index da506593cc..05840ba8dd 100644 --- a/api/src/main/java/org/openmrs/module/kenyaemr/reporting/builder/common/FmapReportBuilder.java +++ b/api/src/main/java/org/openmrs/module/kenyaemr/reporting/builder/common/FmapReportBuilder.java @@ -15,6 +15,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.ColumnParameters; +import org.openmrs.module.kenyaemr.reporting.EmrReportingUtils; import org.openmrs.module.kenyaemr.reporting.library.shared.hiv.art.FmapIndicatorLibrary; import org.openmrs.module.kenyaemr.reporting.library.shared.common.CommonDimensionLibrary; import org.openmrs.module.reporting.dataset.definition.CohortIndicatorDataSetDefinition; @@ -37,7 +39,7 @@ public class FmapReportBuilder extends AbstractReportBuilder { protected static final Log log = LogFactory.getLog(FmapReportBuilder.class); - + //Weight categories for pediatrics static final String MIN_WEIGHT_3 = ">= 3"; static final String MAX_WEIGHT_6 = "<= 5.9"; static final String MIN_WEIGHT_6 = ">= 6"; @@ -52,6 +54,8 @@ public class FmapReportBuilder extends AbstractReportBuilder { static final String MAX_WEIGHT_30 = "<= 29.9"; static final String MIN_WEIGHT_30 = ">= 30"; static final String MAX_WEIGHT_ABOVE_30 = "<= 100"; + + @Autowired private FmapIndicatorLibrary fmapIndicators; @@ -59,6 +63,15 @@ public class FmapReportBuilder extends AbstractReportBuilder { @Autowired private CommonDimensionLibrary commonDimensions; + ColumnParameters infants_0_to_84= new ColumnParameters(null, "0-84", "age=0-84"); + ColumnParameters infants_84_to_184= new ColumnParameters(null, "85-184", "age=85-184"); + ColumnParameters infants_185_to_270= new ColumnParameters(null, "185-270", "age=185-270"); + ColumnParameters infants_271_to_300= new ColumnParameters(null, "271-300", "age=271-300"); + ColumnParameters infants_301_to_360= new ColumnParameters(null, "301-360", "age=301-360"); + ColumnParameters infants_361_And_Above= new ColumnParameters(null, ">=361", "age=361+"); + List infantsAgeInDaysDisaggregation = Arrays.asList( + infants_0_to_84, infants_84_to_184, infants_185_to_270, + infants_271_to_300, infants_301_to_360 , infants_361_And_Above); /** * @see org.openmrs.module.kenyacore.report.builder.AbstractReportBuilder#getParameters(org.openmrs.module.kenyacore.report.ReportDescriptor) */ @@ -90,6 +103,7 @@ protected List> buildDataSets(ReportDescriptor descrip */ protected DataSetDefinition fmapPatientRegimens() { CohortIndicatorDataSetDefinition cohortDsd = new CohortIndicatorDataSetDefinition(); + cohortDsd.addDimension("age", ReportUtils.map(commonDimensions.datimFineAgeGroups(), "onDate=${endDate}")); cohortDsd.setName("patientRegimens"); cohortDsd.setDescription("ARV Treatment Regimen"); cohortDsd.addParameter(new Parameter("startDate", "Start Date", Date.class)); @@ -267,7 +281,10 @@ protected DataSetDefinition fmapPatientRegimens() { cohortDsd.addColumn("CT3X_W6", "Any other third line pead regimens", ReportUtils.map(fmapIndicators.peadPatientsOnSpecificRegimen("Other","Third line","child", "False", MIN_WEIGHT_25, MAX_WEIGHT_30), indParams),""); cohortDsd.addColumn("CT3X_W7", "Any other third line pead regimens", ReportUtils.map(fmapIndicators.peadPatientsOnSpecificRegimen("Other","Third line","child", "False", MIN_WEIGHT_30, MAX_WEIGHT_ABOVE_30), indParams),""); - + //Infants PC8 : Breastfeeding + EmrReportingUtils.addRow(cohortDsd, "PC8", "AZT + NVP for 6 weeks then NVP Breastfeeding", ReportUtils.map(fmapIndicators.infantBreastfeedingPC8Regimen(), indParams), infantsAgeInDaysDisaggregation, Arrays.asList("01", "02", "03", "04", "05", "06")); + EmrReportingUtils.addRow(cohortDsd, "PC7", "AZT + NVP for 6 weeks then NVP Not Breastfeeding", ReportUtils.map(fmapIndicators.infantNotBreastfeedingPC7Regimen(), indParams), infantsAgeInDaysDisaggregation, Arrays.asList("01", "02", "03", "04", "05", "06")); + EmrReportingUtils.addRow(cohortDsd, "PC1X", "ANy other regimens for Infants", ReportUtils.map(fmapIndicators.infantAnyOtherRegimenRegimen(), indParams), infantsAgeInDaysDisaggregation, Arrays.asList("01", "02", "03", "04", "05", "06")); return cohortDsd; } diff --git a/api/src/main/java/org/openmrs/module/kenyaemr/reporting/library/shared/common/CommonDimensionLibrary.java b/api/src/main/java/org/openmrs/module/kenyaemr/reporting/library/shared/common/CommonDimensionLibrary.java index b8da0f7eab..1ecce73c75 100755 --- a/api/src/main/java/org/openmrs/module/kenyaemr/reporting/library/shared/common/CommonDimensionLibrary.java +++ b/api/src/main/java/org/openmrs/module/kenyaemr/reporting/library/shared/common/CommonDimensionLibrary.java @@ -117,6 +117,13 @@ public CohortDefinitionDimension datimFineAgeGroups() { dim.addCohortDefinition("15+", map(commonCohortLibrary.agedAtLeast(15), "effectiveDate=${onDate}")); //Age group in days dim.addCohortDefinition("0-60", map(commonCohortLibrary.agedAtLeastAgedAtMostDays(0, 60),"effectiveDate=${onDate}")); + //fmaps + dim.addCohortDefinition("0-84", map(commonCohortLibrary.agedAtLeastAgedAtMostDays(0, 84),"effectiveDate=${onDate}")); + dim.addCohortDefinition("85-184", map(commonCohortLibrary.agedAtLeastAgedAtMostDays(85, 184),"effectiveDate=${onDate}")); + dim.addCohortDefinition("185-270", map(commonCohortLibrary.agedAtLeastAgedAtMostDays(185, 270),"effectiveDate=${onDate}")); + dim.addCohortDefinition("271-300", map(commonCohortLibrary.agedAtLeastAgedAtMostDays(271, 300),"effectiveDate=${onDate}")); + dim.addCohortDefinition("301-360", map(commonCohortLibrary.agedAtLeastAgedAtMostDays(301, 360),"effectiveDate=${onDate}")); + dim.addCohortDefinition("361+", map(commonCohortLibrary.agedAtLeast(361),"effectiveDate=${onDate}")); return dim; } @@ -346,4 +353,4 @@ public CohortDefinitionDimension newOrRevisits() { map(ReportingUtils.newAttendances(">=0"), "startDate=${startDate},endDate=${endDate}")); return dim; } -} \ No newline at end of file +} diff --git a/api/src/main/java/org/openmrs/module/kenyaemr/reporting/library/shared/hiv/art/FmapCohortLibrary.java b/api/src/main/java/org/openmrs/module/kenyaemr/reporting/library/shared/hiv/art/FmapCohortLibrary.java index 156b9a00c9..511f669abd 100644 --- a/api/src/main/java/org/openmrs/module/kenyaemr/reporting/library/shared/hiv/art/FmapCohortLibrary.java +++ b/api/src/main/java/org/openmrs/module/kenyaemr/reporting/library/shared/hiv/art/FmapCohortLibrary.java @@ -271,24 +271,24 @@ public CohortDefinition txCurrPmtctPatientOnAnyOtherRegimen(String regimenName, return cd; } - public CohortDefinition txCurrPeadOnSpecificRegimenAndRegimenLine(String regimenName,String regimenLine,String ageGroup,String pmtct, String minAge, String maxAge) { + public CohortDefinition txCurrPeadOnSpecificRegimenAndRegimenLine(String regimenName,String regimenLine,String ageGroup,String pmtct, String minWeight, String maxWeight) { CompositionCohortDefinition cd = new CompositionCohortDefinition(); cd.addParameter(new Parameter("startDate", "Start Date", Date.class)); cd.addParameter(new Parameter("endDate", "End Date", Date.class)); cd.addSearch("txcurr", ReportUtils.map(datimCohortLibrary.currentlyOnArt(), "startDate=${startDate},endDate=${endDate}")); cd.addSearch("patientOnSpecificRegimenAndRegimenLine", ReportUtils.map(patientOnSpecificRegimenAndRegimenLine(regimenName, regimenLine, ageGroup, pmtct), "startDate=${startDate},endDate=${endDate}")); - cd.addSearch("peadWeight", ReportUtils.map(peadWeight(minAge, maxAge))); + cd.addSearch("peadWeight", ReportUtils.map(peadWeight(minWeight, maxWeight))); cd.setCompositionString("(txcurr AND patientOnSpecificRegimenAndRegimenLine AND peadWeight"); return cd; } - public CohortDefinition peadWeight(String minAge, String maxAge) { + public CohortDefinition peadWeight(String minWeight, String maxWeight) { String sqlQuery = "SELECT tf.patient_id FROM (SELECT t.patient_id,\n" + " mid(max(concat(t.visit_date, t.weight)), 11) AS weight\n" + " FROM kenyaemr_etl.etl_patient_triage t\n" + " INNER JOIN kenyaemr_etl.etl_patient_hiv_followup f\n" + " on t.patient_id = f.patient_id and t.visit_date = f.visit_date\n" + - " WHERE f.weight " + minAge + " and f.weight " + maxAge + "\n" + + " WHERE f.weight " + minWeight + " and f.weight " + maxWeight + "\n" + " GROUP BY t.patient_id) tf"; SqlCohortDefinition cd = new SqlCohortDefinition(); cd.setName("latestGreenCardWeight"); @@ -296,5 +296,52 @@ public CohortDefinition peadWeight(String minAge, String maxAge) { cd.setDescription("latestGreenCardWeight"); return cd; } - + + public CohortDefinition infantBreastfeedingPC8Regimen() { + String sqlQuery = "SELECT hv.patient_id\n" + + " FROM kenyaemr_etl.etl_hei_follow_up_visit hv\n" + + " INNER JOIN kenyaemr_etl.etl_patient_demographics d on d.patient_id = hv.patient_id\n" + + "WHERE (hv.nvp_given = 86663 OR hv.ctx_given = 80586)\n" + + " AND hv.infant_feeding IN (5526,5632)\n" + + " AND date(hv.visit_date) BETWEEN date(:startDate) and date(:endDate);"; + SqlCohortDefinition cd = new SqlCohortDefinition(); + cd.setName("latestGreenCardWeight"); + cd.setQuery(sqlQuery); + cd.addParameter(new Parameter("startDate", "Start Date", Date.class)); + cd.addParameter(new Parameter("endDate", "End Date", Date.class)); + cd.setDescription("infantProphylaxisBreastFeeding"); + return cd; + } + + public CohortDefinition infantNotBreastfeedingPC7Regimen() { + String sqlQuery = "SELECT hv.patient_id\n" + + " FROM kenyaemr_etl.etl_hei_follow_up_visit hv\n" + + " INNER JOIN kenyaemr_etl.etl_patient_demographics d on d.patient_id = hv.patient_id\n" + + "WHERE (hv.nvp_given = 86663 OR hv.ctx_given = 80586)\n" + + " AND hv.infant_feeding IN (164478,1595)\n" + + " AND date(hv.visit_date) BETWEEN date(:startDate) and date(:endDate);"; + SqlCohortDefinition cd = new SqlCohortDefinition(); + cd.setName("infantProphylaxisNotBreastFeeding"); + cd.setQuery(sqlQuery); + cd.addParameter(new Parameter("startDate", "Start Date", Date.class)); + cd.addParameter(new Parameter("endDate", "End Date", Date.class)); + cd.setDescription("infantProphylaxisNotBreastFeeding"); + return cd; + } + + public CohortDefinition infantAnyOtherRegimenRegimen() { + String sqlQuery = "SELECT hv.patient_id\n" + + "FROM kenyaemr_etl.etl_hei_follow_up_visit hv\n" + + " INNER JOIN kenyaemr_etl.etl_patient_demographics d on d.patient_id = hv.patient_id\n" + + "WHERE (hv.nvp_given != 86663 OR hv.ctx_given != 80586)\n" + + " AND date(hv.visit_date) BETWEEN date(:startDate) and date(:endDate);"; + SqlCohortDefinition cd = new SqlCohortDefinition(); + cd.setName("infantProphylaxisOther"); + cd.setQuery(sqlQuery); + cd.addParameter(new Parameter("startDate", "Start Date", Date.class)); + cd.addParameter(new Parameter("endDate", "End Date", Date.class)); + cd.setDescription("infantProphylaxisOther"); + return cd; + } + } diff --git a/api/src/main/java/org/openmrs/module/kenyaemr/reporting/library/shared/hiv/art/FmapIndicatorLibrary.java b/api/src/main/java/org/openmrs/module/kenyaemr/reporting/library/shared/hiv/art/FmapIndicatorLibrary.java index ce71a955e4..0f1aa75759 100644 --- a/api/src/main/java/org/openmrs/module/kenyaemr/reporting/library/shared/hiv/art/FmapIndicatorLibrary.java +++ b/api/src/main/java/org/openmrs/module/kenyaemr/reporting/library/shared/hiv/art/FmapIndicatorLibrary.java @@ -44,10 +44,24 @@ public CohortIndicator pmtctPatientsOnOtherRegimen(String regimenName, String re ); } - public CohortIndicator peadPatientsOnSpecificRegimen(String regimenName,String regimenLine,String ageGroup,String pmtct, String minAge, String maxAge) { - return cohortIndicator("TDF+3TC+EFV",map(fmapCohortLibrary.txCurrPeadOnSpecificRegimenAndRegimenLine(regimenName,regimenLine,ageGroup,pmtct, minAge,maxAge), "startDate=${startDate},endDate=${endDate}") + public CohortIndicator peadPatientsOnSpecificRegimen(String regimenName,String regimenLine,String ageGroup,String pmtct, String minWeight, String maxWeight) { + return cohortIndicator("TDF+3TC+EFV",map(fmapCohortLibrary.txCurrPeadOnSpecificRegimenAndRegimenLine(regimenName,regimenLine,ageGroup,pmtct, minWeight,maxWeight), "startDate=${startDate},endDate=${endDate}") ); } + public CohortIndicator infantBreastfeedingPC8Regimen() { + return cohortIndicator("AZT+NVP BreastFeeding",map(fmapCohortLibrary.infantBreastfeedingPC8Regimen(), "startDate=${startDate},endDate=${endDate}") + ); + } + + public CohortIndicator infantNotBreastfeedingPC7Regimen() { + return cohortIndicator("AZT+NVP Not BreastFeeding",map(fmapCohortLibrary.infantNotBreastfeedingPC7Regimen(), "startDate=${startDate},endDate=${endDate}") + ); + } + + public CohortIndicator infantAnyOtherRegimenRegimen() { + return cohortIndicator("AZT+NVP Not BreastFeeding",map(fmapCohortLibrary.infantAnyOtherRegimenRegimen(), "startDate=${startDate},endDate=${endDate}") + ); + } } diff --git a/omod/src/main/webapp/resources/reports/fmaps_template.xls b/omod/src/main/webapp/resources/reports/fmaps_template.xls index 31c6e4fbcbb1319e0aeee2581530df51f410daee..f9faab1590853da5eb1b6371e8ce39eacf68ed9d 100644 GIT binary patch delta 5705 zcmZ{o3w%>&6~NC;(U!jFQp-cv)w5$cnyFjPF#(*(&Q%9IE zov#6Y4yHH;;?xaa*bSVUrQ*a*HV~aUr*lJ{Iw!h^^RZVw=gXIKli%9jU)%f7{m%LR z_uTW{d)wWQnRY*J+FzG<5!6>cz>_E2H`p@o0}VW)G~X-6Z8f6Akt@3LcZmzR*(ST) zVzd~=LEH4vvHWA2)+UAv#>Ga5Rn+Dej8-~s(hM_0;)qk2&ll~}0G5rmxL!9kTLAq1 z-7S&2dOzNq({ic-tn1A$g$xfTc11F%>29S$2I_m}y*#K_@0nQbTZmfAti{GDx2l4Ax9HHSh z?9tf(26!P)=M2bz+Koh3Sg@%oN>)x~ zC3bb1N^escT(|`4pp(e}_3$xqtkZ2SAy==8>J$I)Y$t`L_; zJ#KB#j$02b#BSbY$i~mJVGbH4>R*WQHSlrK*HvooMMH}9;21mf!Xh!;TVyW6&!X@N zak$GHx9jixZi)6w6GX!k;v@Sf1Obndsa;qw*I| zk-u2x|18H)@7yV4DllIzq|7N!cDu#V*``hV)M&SyZ$A^wcRqJu>@UD!WJa+(DJyGg)>&E_KX)NJV(@jGEzY zCOV@ph>LR?BVUwRtk`wAcy$w-O;+6t`FLfM*V#+gSu9@X60bBF%_SIB3x`EtcYEMV zDr!vmIh zUB(xJPhF=5XvD1vVz3mi5cR4LtFR32m*cERxk!mEQB_}BRef^x_;D88#KYZrqwBA_ z!?0-(9#GRxml7c+k~krgJ7Kz#7=q=vkwlhMn2s7N;2Ru6C;m+tQ-LwmiYw)Y%Z*xp zOBo&;gm0(LE z!2}iPvPM?10xx(sd|%B_fgauP2$K=%QKn3!A26Aa#+b}VXP7Lo7RH&fV3-zIp_)1y z)~TuKPW?l%dO<9HRt*lISTp>H$pGu&F{TWpA2S(|&M{>o{e;Pc^f;3l=?Nwa(od1- z85F=~+JJ9e_MS!dHT(<+$Y;QLv8|^k{-lZvO0%b!$m{}Bs#y?UyL7W4z9r~pL7YQ3 z3*rlxZWe@8vml!}MgAgVIEbw<0vCBkYK5O6jp4-%%2v1*-VYzZW>KUa|ZW+K;Tkf@3wauv3oLTMV3roZ8lWcn-; znT94YwZ?y|##YK2|Bi`j{2UW`|DK7wpJyWP7nsQVG81|Kfr-5Th(z9%X*ITlM&M68 zj;voqBJ0Xj>%{FO9>!y9;LrGz7F3uQR5)!xh0_*P7&}8>P+{y0eL;oMNMBH4>~Wu{D| zzcZPTt}vOA{=sBH`X>?C}r4w`MgSjlyf9 zzu&v=brn}F9sk8dj&CrLhBk}e;?ifsfd4<&gU63Is>P=QPJ5;3&q?eSGzYs5D$=S9m;M}+h*7- z|4JEKVv2`UntCZ($wZ=ICK9b;BGGCl60Kn((FhZX)-sW36p2LZWsN~}FD;3TKpl_C zLDPC9a;`_`k(9sYitz7%5^=f7A?{sjiZ`g325H{NMCMIQWFBK8^BGKJ-poYiElgxS zlZnh{A(43ln>$@&_{?gMEi$5;CR@SWh^-KWR?p$tap07sZ?Htc^fz026w-EzugY9a&aq9Cn&%`-*K##bx zyhmFoX0GVbdd2N40@@;RVnwUF5A)F-rVX?2l#h-!%JfvsL}aWD;Lq^d)|{ns=q#8G z8eT@np$q%8%FzebZa;d;pjB$_^Jw?(#KZ)B)0-~+rZ>)a53D=$kXL(AJ2<3OpRP7) z&mYLhg3LpC2Q`nC{#i$lI{NK&o{k;V&TC@7(R=D{tv@3VpMubZ-vF&cmP4x#Yd*_M n*3BKyoO@Oiw;9_`j~~_^G-yv9+Id9VV_3ZZ^qWUCQ^x-R{B)(L delta 5295 zcmZ{o33QZK702&4NoKN<$ug5=Cdp)*NhaGQge*WH5S9P|K}uSdgg`^IB(&I4v}((M zsKrt%@U+xcYS7xcU=f2vtx}L$vDCJ1s8uOwtGLtFrM4FQ-#0IJX3k0Sotd29_wMq4 z@7;Ijo7s8RzVj*jzJ@8!k@?FcI(KZ=fKxSO`qY!oI`xRtt12^`>OxkkO3o=!Z#Z|1 zKAL&hvf9+5>{Fv9Id@vNy94TBmvWTm?X-v%jkdX8x2qcq?@(Dqvq$$9ZFgp8(<3y~ zNtBK(rwfPg&(UbDhSQg9Q0cVWcBHQ3-76prb(wM^mJO3Gbn>L$FP%}biXq?o=I6W zkQ(J|%BGGO`y9%l0b6w3MK0<{jPT)K={7Yq*BjiX?Q+SDEo{Wq zPP1?=qQ$ffQCXQA@d9+adVFqk(RPy~7X{Hkc|taLzV|?Aom**Ebqxf)M9?RQtQAY?7R1I_G2J!)5VB?Nb4t3358h zFt4G(g`FN&uY@ zN(7AwC4s&vWCwjq$N~DcP%`KVke$5bM@elWQkRyyRO+%BS^e?};n$xK-%&lwy2IZ! zz5%W7q!6onQYcnk08boIbpbqYMAZe5BdRWdXN{=30L7{ch`Rim05)roPDwT{hSMNE z(E(iy@1l3pO(^*;z2SVMLi9ajUkT;W56DVv`T(7gF;@PR5G((_5G#LLh?W09h?Soe zV&y*s@w!$fvUK&*a!*aA7XFNwvG8*s7G61l@G6Xj=viZ5rI-9iLM)u0K)G70aBc?Z zc_9}5f)ES;u@DRYi4Y6_sSpeQ8Hj~fjSDXh4${xXghihRvFNIJ(UBGt4q~*Qet~zc z@*reK4p=bmfCV8rdccCHlIQ^oqDrC%EC@N#0~SP;L=RXHRT4R1kz816kABDrVpaO_ zimXpim+&vu`4!#aUzvN=dOf>@Y}7_C3MGJkEtClQjZhNkw?cN%1tACMC81={MG&uN zwJG7zl`eJsoii#2>5|y-qW%uVi(0K0HTp1wo~7zn+QYv$)-_r;7d7vE4HmVHUKV2A zuL!a3KM1kzKMJw#%R;RCPeQEw&mh)aBf1Nr`7dI_n*R!7%{3Efc3x)>|IJv}YR&wh zz?y5d=D!QE=6?vW<|{(1`Bfp-{F)GJeqD$){}aTTYejQ@T`e*W(!a!xb^ja0x@+Tg zn@5%_Q2rldU#FFix8XXi{0$jn<^L68q`*5}p_u(8N?!zu2?!#^&?!&ntUeyLu5$+p$y+f3TyR5PSDu>K9Ov9%2HtPM) zH*p%Z(gGn?>Jeh4ULjUmD8x#Ogji{@5G(ZwvC^3Y~*c z6{`!I?r6ed2B=o8T2nrEDUDxS@KZqK;k!u}QJsn1gd%F7dJxaEDSn<*$los2^K0zW zL&km@X1j_Sw0#>M>208`<{Bo>GJz&{Gc?^ojV4C3jxklWuWc$Aq9&8OIi@sFB3!`k z7VS69__b)iW_4n%A3N0|cXg z&(zV|&@^oLS>#r8-8R{Lv!)})Hfq;iGiW+l>f$<|dTU*oHA@xuc3ZR6P_N(WQ2Tmk z7R-Sa_mp;I+O8X5JF>WGu6nt*(&|*{ea+T9)!FCA`%Qf_Q|9ZaE}E^bY{+xWMz6S? z=BsBgvcQaV=#dURvS74!{S!88p}M@mkN1p?Gp(-CB^ytSs5zUQW6nhDymi86Rax$< z*REaT7eA@-e|{>vx_{%DgU9w;)niV(b#Z?UZqXcm!>04!2pXIlKPeR9cd-QSQ{3l6 zxKdKaJP%mstP>AfD-x#gF3!P=4(~mhbg=J` Date: Wed, 26 Jun 2024 09:56:38 +0300 Subject: [PATCH 5/7] Updated Infants dimensions to add weeks and months - fmaps Infants regimens breastfeeding and non breastfeeding --- .../builder/common/FmapReportBuilder.java | 22 +++++++++--------- .../shared/common/CommonCohortLibrary.java | 16 ++++++++++++- .../shared/common/CommonDimensionLibrary.java | 11 ++++----- .../resources/reports/fmaps_template.xls | Bin 107520 -> 107520 bytes 4 files changed, 31 insertions(+), 18 deletions(-) diff --git a/api/src/main/java/org/openmrs/module/kenyaemr/reporting/builder/common/FmapReportBuilder.java b/api/src/main/java/org/openmrs/module/kenyaemr/reporting/builder/common/FmapReportBuilder.java index 05840ba8dd..b06e316a3e 100644 --- a/api/src/main/java/org/openmrs/module/kenyaemr/reporting/builder/common/FmapReportBuilder.java +++ b/api/src/main/java/org/openmrs/module/kenyaemr/reporting/builder/common/FmapReportBuilder.java @@ -63,15 +63,15 @@ public class FmapReportBuilder extends AbstractReportBuilder { @Autowired private CommonDimensionLibrary commonDimensions; - ColumnParameters infants_0_to_84= new ColumnParameters(null, "0-84", "age=0-84"); - ColumnParameters infants_84_to_184= new ColumnParameters(null, "85-184", "age=85-184"); - ColumnParameters infants_185_to_270= new ColumnParameters(null, "185-270", "age=185-270"); - ColumnParameters infants_271_to_300= new ColumnParameters(null, "271-300", "age=271-300"); - ColumnParameters infants_301_to_360= new ColumnParameters(null, "301-360", "age=301-360"); - ColumnParameters infants_361_And_Above= new ColumnParameters(null, ">=361", "age=361+"); + ColumnParameters infants_1_to_12wks= new ColumnParameters(null, "0-84", "age=0-12"); + ColumnParameters infants_12w_to_6mths= new ColumnParameters(null, "85-184", "age=12-24"); + ColumnParameters infants_7_to_9mths= new ColumnParameters(null, "185-270", "age=7-9"); + ColumnParameters infants_10_to_12mths= new ColumnParameters(null, "271-300", "age=10-12"); + ColumnParameters infants_above_12mths= new ColumnParameters(null, "301-360", "age=1+"); + List infantsAgeInDaysDisaggregation = Arrays.asList( - infants_0_to_84, infants_84_to_184, infants_185_to_270, - infants_271_to_300, infants_301_to_360 , infants_361_And_Above); + infants_1_to_12wks, infants_12w_to_6mths, infants_7_to_9mths, + infants_10_to_12mths, infants_above_12mths); /** * @see org.openmrs.module.kenyacore.report.builder.AbstractReportBuilder#getParameters(org.openmrs.module.kenyacore.report.ReportDescriptor) */ @@ -282,9 +282,9 @@ protected DataSetDefinition fmapPatientRegimens() { cohortDsd.addColumn("CT3X_W7", "Any other third line pead regimens", ReportUtils.map(fmapIndicators.peadPatientsOnSpecificRegimen("Other","Third line","child", "False", MIN_WEIGHT_30, MAX_WEIGHT_ABOVE_30), indParams),""); //Infants PC8 : Breastfeeding - EmrReportingUtils.addRow(cohortDsd, "PC8", "AZT + NVP for 6 weeks then NVP Breastfeeding", ReportUtils.map(fmapIndicators.infantBreastfeedingPC8Regimen(), indParams), infantsAgeInDaysDisaggregation, Arrays.asList("01", "02", "03", "04", "05", "06")); - EmrReportingUtils.addRow(cohortDsd, "PC7", "AZT + NVP for 6 weeks then NVP Not Breastfeeding", ReportUtils.map(fmapIndicators.infantNotBreastfeedingPC7Regimen(), indParams), infantsAgeInDaysDisaggregation, Arrays.asList("01", "02", "03", "04", "05", "06")); - EmrReportingUtils.addRow(cohortDsd, "PC1X", "ANy other regimens for Infants", ReportUtils.map(fmapIndicators.infantAnyOtherRegimenRegimen(), indParams), infantsAgeInDaysDisaggregation, Arrays.asList("01", "02", "03", "04", "05", "06")); + EmrReportingUtils.addRow(cohortDsd, "PC8", "AZT + NVP for 6 weeks then NVP Breastfeeding", ReportUtils.map(fmapIndicators.infantBreastfeedingPC8Regimen(), indParams), infantsAgeInDaysDisaggregation, Arrays.asList("01", "02", "03", "04", "05")); + EmrReportingUtils.addRow(cohortDsd, "PC7", "AZT + NVP for 6 weeks then NVP Not Breastfeeding", ReportUtils.map(fmapIndicators.infantNotBreastfeedingPC7Regimen(), indParams), infantsAgeInDaysDisaggregation, Arrays.asList("01", "02", "03", "04", "05")); + EmrReportingUtils.addRow(cohortDsd, "PC1X", "ANy other regimens for Infants", ReportUtils.map(fmapIndicators.infantAnyOtherRegimenRegimen(), indParams), infantsAgeInDaysDisaggregation, Arrays.asList("01", "02", "03", "04", "05")); return cohortDsd; } diff --git a/api/src/main/java/org/openmrs/module/kenyaemr/reporting/library/shared/common/CommonCohortLibrary.java b/api/src/main/java/org/openmrs/module/kenyaemr/reporting/library/shared/common/CommonCohortLibrary.java index 06f6134f8f..b2de7f56f9 100755 --- a/api/src/main/java/org/openmrs/module/kenyaemr/reporting/library/shared/common/CommonCohortLibrary.java +++ b/api/src/main/java/org/openmrs/module/kenyaemr/reporting/library/shared/common/CommonCohortLibrary.java @@ -138,6 +138,20 @@ public CohortDefinition agedAtLeastAgedAtMostDays(int minAge, int maxAge) { cd.setMaxAgeUnit(DurationUnit.DAYS); return cd; } + /** + * patients who are at least minAge weeks old and at most weeks old on ${effectiveDate} + * @return CohortDefinition + */ + public CohortDefinition agedAtLeastAgedAtMostWeeks(int minAge, int maxAge) { + AgeCohortDefinition cd = new AgeCohortDefinition(); + cd.setName("aged between "+minAge+" and "+maxAge+" days"); + cd.addParameter(new Parameter("effectiveDate", "Effective Date", Date.class)); + cd.setMinAge(minAge); + cd.setMaxAge(maxAge); + cd.setMinAgeUnit(DurationUnit.WEEKS); + cd.setMaxAgeUnit(DurationUnit.WEEKS); + return cd; + } /** * Patients who are female and at least 18 years old on ${effectiveDate} @@ -440,4 +454,4 @@ public CohortDefinition getPatientsSeenOnDay(int day) { return cd; } -} \ No newline at end of file +} diff --git a/api/src/main/java/org/openmrs/module/kenyaemr/reporting/library/shared/common/CommonDimensionLibrary.java b/api/src/main/java/org/openmrs/module/kenyaemr/reporting/library/shared/common/CommonDimensionLibrary.java index 1ecce73c75..c74db68357 100755 --- a/api/src/main/java/org/openmrs/module/kenyaemr/reporting/library/shared/common/CommonDimensionLibrary.java +++ b/api/src/main/java/org/openmrs/module/kenyaemr/reporting/library/shared/common/CommonDimensionLibrary.java @@ -118,12 +118,11 @@ public CohortDefinitionDimension datimFineAgeGroups() { //Age group in days dim.addCohortDefinition("0-60", map(commonCohortLibrary.agedAtLeastAgedAtMostDays(0, 60),"effectiveDate=${onDate}")); //fmaps - dim.addCohortDefinition("0-84", map(commonCohortLibrary.agedAtLeastAgedAtMostDays(0, 84),"effectiveDate=${onDate}")); - dim.addCohortDefinition("85-184", map(commonCohortLibrary.agedAtLeastAgedAtMostDays(85, 184),"effectiveDate=${onDate}")); - dim.addCohortDefinition("185-270", map(commonCohortLibrary.agedAtLeastAgedAtMostDays(185, 270),"effectiveDate=${onDate}")); - dim.addCohortDefinition("271-300", map(commonCohortLibrary.agedAtLeastAgedAtMostDays(271, 300),"effectiveDate=${onDate}")); - dim.addCohortDefinition("301-360", map(commonCohortLibrary.agedAtLeastAgedAtMostDays(301, 360),"effectiveDate=${onDate}")); - dim.addCohortDefinition("361+", map(commonCohortLibrary.agedAtLeast(361),"effectiveDate=${onDate}")); + dim.addCohortDefinition("0-12", map(commonCohortLibrary.agedAtLeastAgedAtMostDays(1, 12),"effectiveDate=${onDate}")); + dim.addCohortDefinition("12-24", map(commonCohortLibrary.agedAtLeastAgedAtMostWeeks(12, 24),"effectiveDate=${onDate}")); + dim.addCohortDefinition("7-9", map(commonCohortLibrary.agedAtLeastAgedAtMostInMonths(7, 9),"effectiveDate=${onDate}")); + dim.addCohortDefinition("10-12", map(commonCohortLibrary.agedAtLeastAgedAtMostInMonths(10, 12),"effectiveDate=${onDate}")); + dim.addCohortDefinition("1+", map(commonCohortLibrary.agedAtLeast(1),"effectiveDate=${onDate}")); return dim; } diff --git a/omod/src/main/webapp/resources/reports/fmaps_template.xls b/omod/src/main/webapp/resources/reports/fmaps_template.xls index f9faab1590853da5eb1b6371e8ce39eacf68ed9d..3b0a357a3ff500d76c394869895848de54a45188 100644 GIT binary patch delta 3238 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 j+L|_NiPp}DC=D8D^f*em82pvwuu$u~Gj3o8WxW From f164b400e55ce8e29eec7be246af4c05690fc8fe Mon Sep 17 00:00:00 2001 From: patryllus Date: Wed, 26 Jun 2024 11:06:25 +0300 Subject: [PATCH 6/7] Fmaps: Cleaned up the lables for dimensins --- .../reporting/builder/common/FmapReportBuilder.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/api/src/main/java/org/openmrs/module/kenyaemr/reporting/builder/common/FmapReportBuilder.java b/api/src/main/java/org/openmrs/module/kenyaemr/reporting/builder/common/FmapReportBuilder.java index b06e316a3e..a1a5d5bcd1 100644 --- a/api/src/main/java/org/openmrs/module/kenyaemr/reporting/builder/common/FmapReportBuilder.java +++ b/api/src/main/java/org/openmrs/module/kenyaemr/reporting/builder/common/FmapReportBuilder.java @@ -63,11 +63,11 @@ public class FmapReportBuilder extends AbstractReportBuilder { @Autowired private CommonDimensionLibrary commonDimensions; - ColumnParameters infants_1_to_12wks= new ColumnParameters(null, "0-84", "age=0-12"); - ColumnParameters infants_12w_to_6mths= new ColumnParameters(null, "85-184", "age=12-24"); - ColumnParameters infants_7_to_9mths= new ColumnParameters(null, "185-270", "age=7-9"); - ColumnParameters infants_10_to_12mths= new ColumnParameters(null, "271-300", "age=10-12"); - ColumnParameters infants_above_12mths= new ColumnParameters(null, "301-360", "age=1+"); + ColumnParameters infants_1_to_12wks= new ColumnParameters(null, "0-12 Weeks", "age=0-12"); + ColumnParameters infants_12w_to_6mths= new ColumnParameters(null, "12-24 Weeks", "age=12-24"); + ColumnParameters infants_7_to_9mths= new ColumnParameters(null, "7-9 Months", "age=7-9"); + ColumnParameters infants_10_to_12mths= new ColumnParameters(null, "10-12 Months", "age=10-12"); + ColumnParameters infants_above_12mths= new ColumnParameters(null, "1+ Year", "age=1+"); List infantsAgeInDaysDisaggregation = Arrays.asList( infants_1_to_12wks, infants_12w_to_6mths, infants_7_to_9mths, From 780e8916ff301d204d5a51d02221f316d28e24e3 Mon Sep 17 00:00:00 2001 From: patryllus Date: Wed, 26 Jun 2024 12:34:15 +0300 Subject: [PATCH 7/7] Added Prep regimens - TDF+FTC,TDF+3TC, Depovirine and CAB-LA --- .../builder/common/FmapReportBuilder.java | 10 +- .../shared/hiv/art/FmapCohortLibrary.java | 123 ++++++++++++++++++ .../shared/hiv/art/FmapIndicatorLibrary.java | 27 +++- .../resources/reports/fmaps_template.xls | Bin 107520 -> 107520 bytes 4 files changed, 154 insertions(+), 6 deletions(-) diff --git a/api/src/main/java/org/openmrs/module/kenyaemr/reporting/builder/common/FmapReportBuilder.java b/api/src/main/java/org/openmrs/module/kenyaemr/reporting/builder/common/FmapReportBuilder.java index a1a5d5bcd1..d32fa10746 100644 --- a/api/src/main/java/org/openmrs/module/kenyaemr/reporting/builder/common/FmapReportBuilder.java +++ b/api/src/main/java/org/openmrs/module/kenyaemr/reporting/builder/common/FmapReportBuilder.java @@ -281,10 +281,18 @@ protected DataSetDefinition fmapPatientRegimens() { cohortDsd.addColumn("CT3X_W6", "Any other third line pead regimens", ReportUtils.map(fmapIndicators.peadPatientsOnSpecificRegimen("Other","Third line","child", "False", MIN_WEIGHT_25, MAX_WEIGHT_30), indParams),""); cohortDsd.addColumn("CT3X_W7", "Any other third line pead regimens", ReportUtils.map(fmapIndicators.peadPatientsOnSpecificRegimen("Other","Third line","child", "False", MIN_WEIGHT_30, MAX_WEIGHT_ABOVE_30), indParams),""); - //Infants PC8 : Breastfeeding + //Infants Regimens PC8 and PC7 : EmrReportingUtils.addRow(cohortDsd, "PC8", "AZT + NVP for 6 weeks then NVP Breastfeeding", ReportUtils.map(fmapIndicators.infantBreastfeedingPC8Regimen(), indParams), infantsAgeInDaysDisaggregation, Arrays.asList("01", "02", "03", "04", "05")); EmrReportingUtils.addRow(cohortDsd, "PC7", "AZT + NVP for 6 weeks then NVP Not Breastfeeding", ReportUtils.map(fmapIndicators.infantNotBreastfeedingPC7Regimen(), indParams), infantsAgeInDaysDisaggregation, Arrays.asList("01", "02", "03", "04", "05")); EmrReportingUtils.addRow(cohortDsd, "PC1X", "ANy other regimens for Infants", ReportUtils.map(fmapIndicators.infantAnyOtherRegimenRegimen(), indParams), infantsAgeInDaysDisaggregation, Arrays.asList("01", "02", "03", "04", "05")); + + //Prep Regimens + cohortDsd.addColumn("PRP1A", "TDF + FTC", ReportUtils.map(fmapIndicators.prepTdfFtcRegimen(), indParams),""); + cohortDsd.addColumn("PRP1B", "TDF + 3TC", ReportUtils.map(fmapIndicators.prepTdf3tcRegimen(), indParams),""); + cohortDsd.addColumn("PRP1D", "Dapivirine ring", ReportUtils.map(fmapIndicators.dapivirinePrepType(), indParams),""); + cohortDsd.addColumn("PRP1E", "Cabotegravir", ReportUtils.map(fmapIndicators.cabotegravirPrepType(), indParams),""); + cohortDsd.addColumn("PRP1X", "Others", ReportUtils.map(fmapIndicators.otherPrepRegimenPrepType(), indParams),""); + return cohortDsd; } diff --git a/api/src/main/java/org/openmrs/module/kenyaemr/reporting/library/shared/hiv/art/FmapCohortLibrary.java b/api/src/main/java/org/openmrs/module/kenyaemr/reporting/library/shared/hiv/art/FmapCohortLibrary.java index 511f669abd..39f7a98f33 100644 --- a/api/src/main/java/org/openmrs/module/kenyaemr/reporting/library/shared/hiv/art/FmapCohortLibrary.java +++ b/api/src/main/java/org/openmrs/module/kenyaemr/reporting/library/shared/hiv/art/FmapCohortLibrary.java @@ -344,4 +344,127 @@ public CohortDefinition infantAnyOtherRegimenRegimen() { return cd; } + public CohortDefinition prepTdfFtcRegimen() { + String sqlQuery = "select d.patient_id\n" + + " from kenyaemr_etl.etl_patient_demographics d\n" + + " left join(select pf.patient_id,\n" + + " max(pf.visit_date) as latest_pf_visit_date\n" + + " from kenyaemr_etl.etl_prep_followup pf\n" + + " where pf.regimen_prescribed = 'TDF/FTC(Preferred)'\n" + + " and date(pf.visit_date) between date(:startDate) and date(:endDate)\n" + + " group by pf.patient_id) pf on d.patient_id = pf.patient_id\n" + + " left join(select pm.patient_id, max(pm.visit_date) as latest_pm_visit_date\n" + + " from kenyaemr_etl.etl_prep_monthly_refill pm\n" + + " where pm.prescribed_regimen = 'TDF/FTC(Preferred)'\n" + + " and date(pm.visit_date) between date(:startDate) and date(:endDate)\n" + + " group by pm.patient_id) pm on d.patient_id = pm.patient_id\n" + + " where pf.patient_id is not null or pm.patient_id is not null\n" + + "group by d.patient_id;"; + SqlCohortDefinition cd = new SqlCohortDefinition(); + cd.setName("prepTdfFtcRegimen"); + cd.setQuery(sqlQuery); + cd.addParameter(new Parameter("startDate", "Start Date", Date.class)); + cd.addParameter(new Parameter("endDate", "End Date", Date.class)); + cd.setDescription("prepTdfFtcRegimen"); + return cd; + } + public CohortDefinition prepTdf3tcRegimen() { + String sqlQuery = "select d.patient_id\n" + + "from kenyaemr_etl.etl_patient_demographics d\n" + + " left join(select pf.patient_id,\n" + + " max(pf.visit_date) as latest_pf_visit_date\n" + + " from kenyaemr_etl.etl_prep_followup pf\n" + + " where pf.regimen_prescribed = 'TDF/3TC'\n" + + " and date(pf.visit_date) between date(:startDate) and date(:endDate)\n" + + " group by pf.patient_id) pf on d.patient_id = pf.patient_id\n" + + " left join(select pm.patient_id, max(pm.visit_date) as latest_pm_visit_date\n" + + " from kenyaemr_etl.etl_prep_monthly_refill pm\n" + + " where pm.prescribed_regimen = 'TDF/3TC'\n" + + " and date(pm.visit_date) between date(:startDate) and date(:endDate)\n" + + " group by pm.patient_id) pm on d.patient_id = pm.patient_id\n" + + "where pf.patient_id is not null or pm.patient_id is not null\n" + + "group by d.patient_id;"; + SqlCohortDefinition cd = new SqlCohortDefinition(); + cd.setName("prepTdf3tcRegimen"); + cd.setQuery(sqlQuery); + cd.addParameter(new Parameter("startDate", "Start Date", Date.class)); + cd.addParameter(new Parameter("endDate", "End Date", Date.class)); + cd.setDescription("prepTdf3tcRegimen"); + return cd; + } + + public CohortDefinition dapivirinePrepType() { + String sqlQuery = "select d.patient_id\n" + + "from kenyaemr_etl.etl_patient_demographics d\n" + + " left join(select pf.patient_id,\n" + + " max(pf.visit_date) as latest_pf_visit_date\n" + + " from kenyaemr_etl.etl_prep_followup pf\n" + + " where pf.prep_type = 'Dapivirine ring'\n" + + " and date(pf.visit_date) between date(:startDate) and date(:endDate)\n" + + " group by pf.patient_id) pf on d.patient_id = pf.patient_id\n" + + " left join(select pm.patient_id, max(pm.visit_date) as latest_pm_visit_date\n" + + " from kenyaemr_etl.etl_prep_monthly_refill pm\n" + + " where pm.prep_type = 'Dapivirine ring'\n" + + " and date(pm.visit_date) between date(:startDate) and date(:endDate)\n" + + " group by pm.patient_id) pm on d.patient_id = pm.patient_id\n" + + "where pf.patient_id is not null or pm.patient_id is not null\n" + + "group by d.patient_id;"; + SqlCohortDefinition cd = new SqlCohortDefinition(); + cd.setName("dapivirinePrepType"); + cd.setQuery(sqlQuery); + cd.addParameter(new Parameter("startDate", "Start Date", Date.class)); + cd.addParameter(new Parameter("endDate", "End Date", Date.class)); + cd.setDescription("dapivirinePrepType"); + return cd; + } + + public CohortDefinition cabotegravirPrepType() { + String sqlQuery = "select d.patient_id\n" + + "from kenyaemr_etl.etl_patient_demographics d\n" + + " left join(select pf.patient_id,\n" + + " max(pf.visit_date) as latest_pf_visit_date\n" + + " from kenyaemr_etl.etl_prep_followup pf\n" + + " where pf.prep_type = 'CAB-LA'\n" + + " and date(pf.visit_date) between date(:startDate) and date(:endDate)\n" + + " group by pf.patient_id) pf on d.patient_id = pf.patient_id\n" + + " left join(select pm.patient_id, max(pm.visit_date) as latest_pm_visit_date\n" + + " from kenyaemr_etl.etl_prep_monthly_refill pm\n" + + " where pm.prep_type = 'CAB-LA'\n" + + " and date(pm.visit_date) between date(:startDate) and date(:endDate)\n" + + " group by pm.patient_id) pm on d.patient_id = pm.patient_id\n" + + "where pf.patient_id is not null or pm.patient_id is not null\n" + + "group by d.patient_id;"; + SqlCohortDefinition cd = new SqlCohortDefinition(); + cd.setName("cabotegravirPrepType"); + cd.setQuery(sqlQuery); + cd.addParameter(new Parameter("startDate", "Start Date", Date.class)); + cd.addParameter(new Parameter("endDate", "End Date", Date.class)); + cd.setDescription("cabotegravirPrepType"); + return cd; + } + + public CohortDefinition otherPrepRegimenPrepType() { + String sqlQuery = "select d.patient_id\n" + + "from kenyaemr_etl.etl_patient_demographics d\n" + + " left join(select pf.patient_id,\n" + + " max(pf.visit_date) as latest_pf_visit_date\n" + + " from kenyaemr_etl.etl_prep_followup pf\n" + + " where(pf.regimen_prescribed not in ('TDF/3TC', 'TDF/FTC(Preferred)')) OR (pf.prep_type not in ('CAB-LA','Dapivirine ring'))\n" + + " and date(pf.visit_date) between date(:startDate) and date(:endDate)\n" + + " group by pf.patient_id) pf on d.patient_id = pf.patient_id\n" + + " left join(select pm.patient_id, max(pm.visit_date) as latest_pm_visit_date\n" + + " from kenyaemr_etl.etl_prep_monthly_refill pm\n" + + " where (pm.prescribed_regimen not in ('TDF/3TC', 'TDF/FTC(Preferred)')) OR (pm.prep_type not in ('CAB-LA','Dapivirine ring'))\n" + + " and date(pm.visit_date) between date(:startDate) and date(:endDate)\n" + + " group by pm.patient_id) pm on d.patient_id = pm.patient_id\n" + + "where pf.patient_id is not null and pm.patient_id is not null\n" + + "group by d.patient_id;"; + SqlCohortDefinition cd = new SqlCohortDefinition(); + cd.setName("otherPrepRegimenPrepType"); + cd.setQuery(sqlQuery); + cd.addParameter(new Parameter("startDate", "Start Date", Date.class)); + cd.addParameter(new Parameter("endDate", "End Date", Date.class)); + cd.setDescription("otherPrepRegimenPrepType"); + return cd; + } } diff --git a/api/src/main/java/org/openmrs/module/kenyaemr/reporting/library/shared/hiv/art/FmapIndicatorLibrary.java b/api/src/main/java/org/openmrs/module/kenyaemr/reporting/library/shared/hiv/art/FmapIndicatorLibrary.java index 0f1aa75759..ccfde59d91 100644 --- a/api/src/main/java/org/openmrs/module/kenyaemr/reporting/library/shared/hiv/art/FmapIndicatorLibrary.java +++ b/api/src/main/java/org/openmrs/module/kenyaemr/reporting/library/shared/hiv/art/FmapIndicatorLibrary.java @@ -52,16 +52,33 @@ public CohortIndicator peadPatientsOnSpecificRegimen(String regimenName,String r public CohortIndicator infantBreastfeedingPC8Regimen() { return cohortIndicator("AZT+NVP BreastFeeding",map(fmapCohortLibrary.infantBreastfeedingPC8Regimen(), "startDate=${startDate},endDate=${endDate}") ); - } - + } public CohortIndicator infantNotBreastfeedingPC7Regimen() { return cohortIndicator("AZT+NVP Not BreastFeeding",map(fmapCohortLibrary.infantNotBreastfeedingPC7Regimen(), "startDate=${startDate},endDate=${endDate}") ); } - public CohortIndicator infantAnyOtherRegimenRegimen() { return cohortIndicator("AZT+NVP Not BreastFeeding",map(fmapCohortLibrary.infantAnyOtherRegimenRegimen(), "startDate=${startDate},endDate=${endDate}") ); - } - + } + public CohortIndicator prepTdfFtcRegimen() { + return cohortIndicator("AZT+NVP Not BreastFeeding",map(fmapCohortLibrary.prepTdfFtcRegimen(), "startDate=${startDate},endDate=${endDate}") + ); + } + public CohortIndicator prepTdf3tcRegimen() { + return cohortIndicator("AZT+NVP Not BreastFeeding",map(fmapCohortLibrary.prepTdf3tcRegimen(), "startDate=${startDate},endDate=${endDate}") + ); + } + public CohortIndicator dapivirinePrepType() { + return cohortIndicator("AZT+NVP Not BreastFeeding",map(fmapCohortLibrary.dapivirinePrepType(), "startDate=${startDate},endDate=${endDate}") + ); + } + public CohortIndicator cabotegravirPrepType() { + return cohortIndicator("AZT+NVP Not BreastFeeding",map(fmapCohortLibrary.cabotegravirPrepType(), "startDate=${startDate},endDate=${endDate}") + ); + } + public CohortIndicator otherPrepRegimenPrepType() { + return cohortIndicator("AZT+NVP Not BreastFeeding",map(fmapCohortLibrary.otherPrepRegimenPrepType(), "startDate=${startDate},endDate=${endDate}") + ); + } } diff --git a/omod/src/main/webapp/resources/reports/fmaps_template.xls b/omod/src/main/webapp/resources/reports/fmaps_template.xls index 3b0a357a3ff500d76c394869895848de54a45188..125f837884c8b4563b6e1b7cd81e91e49d441423 100644 GIT binary patch delta 816 zcmYk2T}V@59LAsj*@tsm>U1M!iL-f{F4mOXN6pgBY1%aBvf9U)>4nry1?7bo1&a{6 z2)g(SN+5X?ffo@Ra8Xd*olGTrqizFGI>hRM>G+82gzMDw zP{ob8dAB=kugJJt4@`~)qcMPIJ*_uGU6C|>Mb-&|4F f$YnBhJv_eg@hkBIeSh)88ijTAtoUc0>U94Ak}<1K delta 751 zcmYk2-Aj{U7{;&r-M6lp>|M)MY{QngvT3#L9kb1^R%W#|SIOL@A&Qk{O(BR16FTnW z4jhr7M}ZwAyx<0bcqCH)Km^r6M?puObV1( zkZZf`>V2n`$j^`E7nTq1Cj?wkeXg1;n}AF<)6ruCa(yY^Vc+pw@AIHiX9Uvyk?tOV zueNx2JeX|M(IK<2W+ukU)9U+RM)G*@2F(qC9l&yv;Ol_Thky;YdZg_q(QEdGLjEPY zK*V_-F2(0S88R=ms?48UGD=DaPJ*Z)425 z&AQ;ioSJT5Zgs9f!3jvn;+9_5_{VUYKP*1i7 zl@F(Tbt zXpDlW_Wr}+ll%I0U(x)ty07Sd)DjaZWel*dFhJ*cQuOm&D+K5Qe<{S9(t;<+j7~8< zqixnHCSAzzv0@8dPM6h6X=0JrO9!MjiNB5|EJr24js4X>L{6!C*GS*kAww2xljx%4 z>O_SqG`~`z@zs}aRtz82$lj C$(&pO