Closed AnjaliBhagabati closed 1 month ago
Backup:
//SAMPLE RULE EXAMPLE
"use strict";
({params, imports}) => {
const programEncounter = params.entity;
const scheduleBuilder = new imports.rulesConfig.VisitScheduleBuilder({
programEncounter
});
const moment = imports.moment;
const _ = imports.lodash;
const condition0 = ! programEncounter.programEnrolment.programExitDateTime;
const scheduledOrCompletedEncountersOfType = (type,nextVisitDate) => {
const nextDateMonth = moment(nextVisitDate).month();
const nextDateYear = moment(nextVisitDate).year();
const data = programEncounter.programEnrolment.encounters.filter((enc)=> enc.encounterType.name === type && enc.voided == false && enc.cancelDateTime == null && moment(enc.earliestVisitDateTime).year()==nextDateYear && moment(enc.earliestVisitDateTime).month()==nextDateMonth )
return data;
}
function lastfilledEncounter(encounterType) {
const lastVisitEncounters = programEncounter.programEnrolment.getEncountersOfType(encounterType, false);
const latestEncounter = _.chain(lastVisitEncounters)
.filter((encounter) => encounter.encounterDateTime && encounter.voided == false)
.maxBy((encounter) => encounter.encounterDateTime)
.value();
return latestEncounter;
}
let nextDate = moment(programEncounter.earliestVisitDateTime).add(1,'M').startOf('month').toDate();
const condition1 = scheduledOrCompletedEncountersOfType("ANC",nextDate).length == 0;
const condition2 = ! programEncounter.programEnrolment.hasCompletedEncounterOfType('Delivery');
const qrtCondition1 = new imports.rulesConfig.RuleCondition({programEncounter}).when.latestValueInEntireEnrolment("35f880ca-60b5-4240-97e1-813c0a7a78c4").containsAnswerConceptName("8ebbf088-f292-483e-9084-7de919ce67b7").matches();
//programEncounter.getObservationReadableValue("Is there a medical facillity intervention required for treatment?") == 'Yes';
const qrtCondition2 = programEncounter.getObservationReadableValue("Did the ANM recommend for a medical facility intervention?") == 'Yes';
const qrtCondition3 = programEncounter.getObservationReadableValue('High risk condition');
const condition3 = qrtCondition1 || qrtCondition2 ;
if(condition0 && condition1 && condition2){
scheduleBuilder.add({
name: 'ANC',
encounterType: 'ANC',
earliestDate: nextDate,
maxDate: moment(nextDate).add(7, 'days').toDate()
});
}
const qrtDate = moment(programEncounter.encounterDateTime).toDate();
const qrtCondition = scheduledOrCompletedEncountersOfType("QRT PW", qrtDate).length == 0;
const ancEncounter = lastfilledEncounter('ANC');
const isEditScenario = ancEncounter ? ancEncounter.uuid === programEncounter.uuid : false;
if(condition0 && qrtCondition && condition3 && condition2){
scheduleBuilder.add({
name: 'QRT PW',
encounterType: 'QRT PW',
earliestDate:qrtDate,
maxDate: moment(qrtDate).add(30, 'days').toDate()
});
}else if (!isEditScenario && qrtCondition3 && !qrtCondition1 && !qrtCondition2 && condition2){
nextDate = moment(programEncounter.earliestVisitDateTime).add(1,'M').startOf('month').toDate();
scheduleBuilder
.add({
name: "PW Home Visit",
encounterType: "PW Home Visit",
earliestDate: nextDate,
maxDate: moment(nextDate).add(7, 'days').toDate()
});
}
return scheduleBuilder.getAll();
};
Note: Created the new condition called isSevereAnemic
and added in const condition3 = isSevereAnemic || qrtCondition1 || qrtCondition2 ;
. condition3
was already there.
Tech notes