avniproject / apfodishanutrition

GNU Affero General Public License v3.0
0 stars 0 forks source link

APF Prod Bug fixes - Batch 2: QRT Child Should Get Scheduled Immediately on Completion of Growth Monitoring #343

Closed AnjaliBhagabati closed 2 months ago

AnjaliBhagabati commented 2 months ago
Expected Behaviour Current Behaviour
QRT Child should get scheduled immediately on the day the Growth Monitoring Encounter has happened QRT Child is getting scheduled on the day the Growth Monitoring Scheduled not on the day encounter has happened
adamsanadi6 commented 2 months ago

Backup Visit Schedule:

({params, imports}) => {
    const programEncounter = params.entity;
    const scheduleBuilder = new imports.rulesConfig.VisitScheduleBuilder({
        programEncounter
    });
    const moment = imports.moment;
    const _ = imports.lodash;

    const earliestDate = moment(programEncounter.earliestVisitDateTime).add(1, 'month').startOf('month').toDate();
    let isEditScenario = programEncounter.programEnrolment.encounters.some((enc) =>
        enc.encounterType.name === 'Growth Monitoring' &&
        enc.voided === false &&
        imports.moment(enc.earliestVisitDateTime).isSame(earliestDate, 'day')
    );

    if(programEncounter.programEnrolment.individual.getAgeInYears() < 5 && !isEditScenario) {
        scheduleBuilder.add({
            name: 'Growth Monitoring',
            encounterType: 'Growth Monitoring',
            earliestDate: earliestDate,
            maxDate: moment(earliestDate).add(30, 'days').toDate()
        });
    }

    const isTreatmentNotAtHome = programEncounter.getObservationReadableValue("What is the treatment advise for the SAM/MAM/GF2 child?") ? programEncounter.getObservationReadableValue("What is the treatment advise for the SAM/MAM/GF2 child?") != "Treatment at home" : false;
    const isTreatmentAtHome = programEncounter.getObservationReadableValue("What is the treatment advise for the SAM/MAM/GF2 child?") ? programEncounter.getObservationReadableValue("What is the treatment advise for the SAM/MAM/GF2 child?") == "Treatment at home" : false;
    const isSAM = programEncounter.getObservationReadableValue("Nutritional Status") == "SAM";
    const isGF1 = programEncounter.getObservationReadableValue("Growth Faltering") == "GF1";

    if((isTreatmentNotAtHome && !isEditScenario) || (isSAM && !isEditScenario) ){
        scheduleBuilder.add({
            name: 'QRT Child',
            encounterType: 'QRT Child',
            earliestDate: moment(programEncounter.earliestVisitDateTime).toDate(),
            maxDate: moment(programEncounter.earliestVisitDateTime).add(30, 'days').toDate()
        });
    }else if ((isTreatmentAtHome || isGF1 ) && !isEditScenario && !isSAM){
        scheduleBuilder.add({
            name: 'Child Home Visit',
            encounterType: 'Child Home Visit',
            earliestDate: moment(programEncounter.encounterDateTime).add(15, 'days').toDate(),
            maxDate: moment(programEncounter.encounterDateTime).add(22, 'days').toDate()
        });
    }
        return scheduleBuilder.getAll();
    };

New Visit Schedule Logic:

"use strict";
({params, imports}) => {
    const programEncounter = params.entity;
    const scheduleBuilder = new imports.rulesConfig.VisitScheduleBuilder({
        programEncounter
    });
    const moment = imports.moment;
    const _ = imports.lodash;

    const earliestDate = moment(programEncounter.earliestVisitDateTime).add(1, 'month').startOf('month').toDate();
    let isEditScenario = programEncounter.programEnrolment.encounters.some((enc) =>
        enc.encounterType.name === 'Growth Monitoring' &&
        enc.voided === false &&
        moment(enc.earliestVisitDateTime).isSame(earliestDate, 'day')
    );

    if(programEncounter.programEnrolment.individual.getAgeInYears() < 5 && !isEditScenario) {
        scheduleBuilder.add({
            name: 'Growth Monitoring',
            encounterType: 'Growth Monitoring',
            earliestDate: earliestDate,
            maxDate: moment(earliestDate).add(30, 'days').toDate()
        });
    }

    const isTreatmentNotAtHome = programEncounter.getObservationReadableValue("What is the treatment advise for the SAM/MAM/GF2 child?") ? programEncounter.getObservationReadableValue("What is the treatment advise for the SAM/MAM/GF2 child?") != "Treatment at home" : false;
    const isTreatmentAtHome = programEncounter.getObservationReadableValue("What is the treatment advise for the SAM/MAM/GF2 child?") ? programEncounter.getObservationReadableValue("What is the treatment advise for the SAM/MAM/GF2 child?") == "Treatment at home" : false;
    const isSAM = programEncounter.getObservationReadableValue("Nutritional Status") == "SAM";
    const isGF1 = programEncounter.getObservationReadableValue("Growth Faltering") == "GF1";

    if((isTreatmentNotAtHome && !isEditScenario) || (isSAM && !isEditScenario) ){
        scheduleBuilder.add({
            name: 'QRT Child',
            encounterType: 'QRT Child',
            earliestDate: moment(programEncounter.encounterDateTime).toDate(),
            maxDate: moment(programEncounter.encounterDateTime).add(30, 'days').toDate()
        });
    }else if ((isTreatmentAtHome || isGF1 ) && !isEditScenario && !isSAM){
        scheduleBuilder.add({
            name: 'Child Home Visit',
            encounterType: 'Child Home Visit',
            earliestDate: moment(programEncounter.encounterDateTime).add(15, 'days').toDate(),
            maxDate: moment(programEncounter.encounterDateTime).add(22, 'days').toDate()
        });
    }

    return scheduleBuilder.getAll();
};