/* * The contents of this file are subject to the OpenMRS Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://license.openmrs.org * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * * Copyright (C) OpenMRS, LLC. All Rights Reserved. */ package org.openmrs.module.reporting.cohort.definition.library; import org.openmrs.EncounterType; import org.openmrs.Location; import org.openmrs.Form; import org.openmrs.PersonAttributeType; import org.openmrs.Program; import org.openmrs.Concept; import org.openmrs.ProgramWorkflowState; import org.openmrs.module.reporting.cohort.definition.AgeCohortDefinition; import org.openmrs.module.reporting.cohort.definition.BirthAndDeathCohortDefinition; import org.openmrs.module.reporting.cohort.definition.CohortDefinition; import org.openmrs.module.reporting.cohort.definition.EncounterCohortDefinition; import org.openmrs.module.reporting.cohort.definition.GenderCohortDefinition; import org.openmrs.module.reporting.cohort.definition.PersonAttributeCohortDefinition; import org.openmrs.module.reporting.cohort.definition.ProgramEnrollmentCohortDefinition; import org.openmrs.module.reporting.cohort.definition.PatientStateCohortDefinition; import org.openmrs.module.reporting.cohort.definition.InStateCohortDefinition; import org.openmrs.module.reporting.common.TimeQualifier; import org.openmrs.module.reporting.cohort.definition.MappedParametersCohortDefinition; import org.openmrs.module.reporting.definition.library.BaseDefinitionLibrary; import org.openmrs.module.reporting.cohort.definition.CodedObsCohortDefinition; import org.openmrs.module.reporting.definition.library.DocumentedDefinition; import org.openmrs.module.reporting.evaluation.parameter.Parameter; import org.springframework.stereotype.Component; import java.util.Date; import java.util.List; /** * Basic set of cohort definitions */ @Component public class BuiltInCohortDefinitionLibrary extends BaseDefinitionLibrary<CohortDefinition> { public static final String PREFIX = "reporting.library.cohortDefinition.builtIn."; @Override public Class<? super CohortDefinition> getDefinitionType() { return CohortDefinition.class; } @Override public String getKeyPrefix() { return PREFIX; } @DocumentedDefinition(value = "males") public GenderCohortDefinition getMales() { GenderCohortDefinition males = new GenderCohortDefinition(); males.setMaleIncluded(true); return males; } @DocumentedDefinition(value = "females") public GenderCohortDefinition getFemales() { GenderCohortDefinition females = new GenderCohortDefinition(); females.setFemaleIncluded(true); return females; } @DocumentedDefinition(value = "unknownGender") public GenderCohortDefinition getUnknownGender() { GenderCohortDefinition unknownGender = new GenderCohortDefinition(); unknownGender.setUnknownGenderIncluded(true); return unknownGender; } @DocumentedDefinition("upToAgeOnDate") public AgeCohortDefinition getUpToAgeOnDate() { AgeCohortDefinition cd = new AgeCohortDefinition(); cd.addParameter(new Parameter("effectiveDate", "reporting.parameter.effectiveDate", Date.class)); cd.addParameter(new Parameter("maxAge", "reporting.parameter.maxAgeInYears", Integer.class)); return cd; } @DocumentedDefinition("atLeastAgeOnDate") public AgeCohortDefinition getAtLeastAgeOnDate() { AgeCohortDefinition cd = new AgeCohortDefinition(); cd.addParameter(new Parameter("effectiveDate", "reporting.parameter.effectiveDate", Date.class)); cd.addParameter(new Parameter("minAge", "reporting.parameter.minAgeInYears", Integer.class)); return cd; } @DocumentedDefinition("ageRangeOnDate") public AgeCohortDefinition getAgeInRangeOnDate() { AgeCohortDefinition cd = new AgeCohortDefinition(); cd.addParameter(new Parameter("effectiveDate", "reporting.parameter.effectiveDate", Date.class)); cd.addParameter(new Parameter("minAge", "reporting.parameter.minAgeInYears", Integer.class)); cd.addParameter(new Parameter("maxAge", "reporting.parameter.maxAgeInYears", Integer.class)); return cd; } @DocumentedDefinition("anyEncounterDuringPeriod") public CohortDefinition getAnyEncounterDuringPeriod() { EncounterCohortDefinition cd = new EncounterCohortDefinition(); cd.addParameter(new Parameter("onOrAfter", "reporting.parameter.onOrAfter", Date.class)); cd.addParameter(new Parameter("onOrBefore", "reporting.parameter.onOrBefore", Date.class)); return new MappedParametersCohortDefinition(cd, "onOrAfter", "startDate", "onOrBefore", "endDate"); } @DocumentedDefinition("codedObsSearchAdvanced") public CohortDefinition getCodedObsSearchAdvanced() { CodedObsCohortDefinition cd = new CodedObsCohortDefinition(); cd.addParameter(new Parameter("timeModifier", "reporting.parameter.timeModifier", CodedObsCohortDefinition.TimeModifier.class)); cd.addParameter(new Parameter("question", "reporting.parameter.question", Concept.class)); cd.addParameter(new Parameter("onOrAfter", "reporting.parameter.onOrAfter", Date.class)); cd.addParameter(new Parameter("onOrBefore", "reporting.parameter.onOrBefore", Date.class)); return cd; } @DocumentedDefinition("encounterSearchAdvanced") public CohortDefinition getEncounterSearchAdvanced() { EncounterCohortDefinition cd = new EncounterCohortDefinition(); cd.addParameter(new Parameter("onOrAfter", "reporting.parameter.onOrAfter", Date.class)); cd.addParameter(new Parameter("onOrBefore", "reporting.parameter.onOrBefore", Date.class)); cd.addParameter(new Parameter("atLeastCount", "reporting.parameter.atLeastCount", Integer.class)); cd.addParameter(new Parameter("atMostCount", "reporting.parameter.atMostCount", Integer.class)); cd.addParameter(new Parameter("encounterTypeList", "reporting.parameter.encounterTypeList", EncounterType.class, List.class, null)); cd.addParameter(new Parameter("formList", "reporting.parameter.formList", Form.class, List.class, null)); cd.addParameter(new Parameter("locationList", "reporting.parameter.locationList", Location.class, List.class, null)); cd.addParameter(new Parameter("timeQualifier", "reporting.parameter.timeQualifier", TimeQualifier.class)); return cd; } @DocumentedDefinition("anyEncounterOfTypesDuringPeriod") public CohortDefinition getAnyEncounterOfTypesDuringPeriod() { EncounterCohortDefinition cd = new EncounterCohortDefinition(); cd.addParameter(new Parameter("onOrAfter", "reporting.parameter.startDate", Date.class)); cd.addParameter(new Parameter("onOrBefore", "reporting.parameter.endDate", Date.class)); cd.addParameter(new Parameter("encounterTypeList", "reporting.parameter.encounterTypeList", EncounterType.class, List.class, null)); return new MappedParametersCohortDefinition(cd, "onOrAfter", "startDate", "onOrBefore", "endDate", "encounterTypeList", "encounterTypes"); } @DocumentedDefinition("bornDuringPeriod") public CohortDefinition getBornDuringPeriod() { BirthAndDeathCohortDefinition cd = new BirthAndDeathCohortDefinition(); cd.addParameter(new Parameter("bornOnOrAfter", "reporting.parameter.startDate", Date.class)); cd.addParameter(new Parameter("bornOnOrBefore", "reporting.parameter.endDate", Date.class)); return new MappedParametersCohortDefinition(cd, "bornOnOrAfter", "startDate", "bornOnOrBefore", "endDate"); } @DocumentedDefinition("diedDuringPeriod") public CohortDefinition getDiedDuringPeriod() { BirthAndDeathCohortDefinition cd = new BirthAndDeathCohortDefinition(); cd.addParameter(new Parameter("diedOnOrAfter", "reporting.parameter.startDate", Date.class)); cd.addParameter(new Parameter("diedOnOrBefore", "reporting.parameter.endDate", Date.class)); return new MappedParametersCohortDefinition(cd, "diedOnOrAfter", "startDate", "diedOnOrBefore", "endDate"); } @DocumentedDefinition("personWithAttribute") public CohortDefinition getPersonWithAttribute() { PersonAttributeCohortDefinition cd = new PersonAttributeCohortDefinition(); cd.addParameter(new Parameter("attributeType", "reporting.parameter.attributeType", PersonAttributeType.class)); cd.addParameter(new Parameter("values", "reporting.parameter.values", String.class, List.class, null)); return cd; } @DocumentedDefinition("patientsWithEnrollment") public CohortDefinition getPatientsWithEnrollment(){ ProgramEnrollmentCohortDefinition cd = new ProgramEnrollmentCohortDefinition(); cd.addParameter(new Parameter("programs", "reporting.parameter.programs", Program.class, List.class, null)); cd.addParameter(new Parameter("enrolledOnOrAfter", "reporting.parameter.enrolledOnOrAfter", Date.class)); cd.addParameter(new Parameter("enrolledOnOrBefore", "reporting.parameter.enrolledOnOrBefore", Date.class)); cd.addParameter(new Parameter("completedOnOrAfter", "reporting.parameter.completedOnOrAfter", Date.class)); cd.addParameter(new Parameter("completedOnOrBefore", "reporting.parameter.completedOnOrBefore", Date.class)); cd.addParameter(new Parameter("locationList", "reporting.parameter.locationList", Location.class, List.class, null)); return new MappedParametersCohortDefinition(cd, "programs", "programs", "enrolledOnOrAfter", "enrolledOnOrAfter", "enrolledOnOrBefore", "enrolledOnOrBefore", "completedOnOrAfter", "completedOnOrAfter", "completedOnOrBefore", "completedOnOrBefore", "locationList", "locations" ); } @DocumentedDefinition("patientsWithState") public CohortDefinition getPatientsWithState() { PatientStateCohortDefinition cd = new PatientStateCohortDefinition(); cd.addParameter(new Parameter("states", "reporting.parameter.states", ProgramWorkflowState.class, List.class, null)); cd.addParameter(new Parameter("startedOnOrAfter", "reporting.parameter.startedOnOrAfter", Date.class)); cd.addParameter(new Parameter("startedOnOrBefore", "reporting.parameter.startedOnOrBefore", Date.class)); cd.addParameter(new Parameter("endedOnOrAfter", "reporting.parameter.endedOnOrAfter", Date.class)); cd.addParameter(new Parameter("endedOnOrBefore", "reporting.parameter.endedOnOrBefore", Date.class)); return cd; } @DocumentedDefinition("patientsInState") public CohortDefinition getPatientsInState() { InStateCohortDefinition cd = new InStateCohortDefinition(); cd.addParameter(new Parameter("states", "reporting.parameter.states", ProgramWorkflowState.class, List.class, null)); cd.addParameter(new Parameter("onOrAfter", "reporting.parameter.onOrAfter", Date.class)); cd.addParameter(new Parameter("onOrBefore", "reporting.parameter.onOrBefore", Date.class)); cd.addParameter(new Parameter("onDate", "reporting.parameter.date", Date.class)); return cd; } }