Skip to content

Commit 2d60f1d

Browse files
committed
#827 | Refactor evaluating eligibility check rule for encounter and program.
1 parent b919846 commit 2d60f1d

File tree

2 files changed

+18
-31
lines changed

2 files changed

+18
-31
lines changed

src/RuleExecutor.js

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,11 @@ import {createProgram} from "./models/programModel";
66
import {
77
checkListRule,
88
decisionRule,
9-
isEligibleForEncounter,
109
programSummaryRule,
1110
subjectSummaryRule,
1211
visitScheduleRule,
13-
messagingRule, isEligibleForProgramEnrolment
12+
messagingRule,
13+
isEligibleForEntityType
1414
} from './services/RuleEvalService';
1515
import {map} from 'lodash';
1616

@@ -41,9 +41,15 @@ const createTypeMapper = {
4141
"Program": createProgram
4242
}
4343

44-
const eligibilityCheckMapper = {
45-
"EncounterType": isEligibleForEncounter,
46-
"Program": isEligibleForProgramEnrolment
44+
const bundleEligibilityCheckRuleParamsMapper = {
45+
"EncounterType": {
46+
ruleType: "EncounterEligibilityCheck",
47+
entityName: "Encounter"
48+
},
49+
"Program": {
50+
ruleType: "EnrolmentEligibilityCheck",
51+
entityName: "Program"
52+
}
4753
}
4854

4955
export const executeRule = async (requestBody) => {
@@ -72,7 +78,7 @@ export const executeSummaryRule = async (requestBody) => {
7278
export const executeEligibilityCheckRule = async (requestBody) => {
7379
const {individual, entityTypes, ruleEntityType} = requestBody;
7480
const individualModel = mapIndividual(individual);
75-
const eligibilityRuleEntities = await Promise.all(map(entityTypes, et => eligibilityCheckMapper[ruleEntityType](individualModel, createTypeMapper[ruleEntityType](et))));
81+
const eligibilityRuleEntities = await Promise.all(map(entityTypes, et => isEligibleForEntityType(individualModel, createTypeMapper[ruleEntityType](et), bundleEligibilityCheckRuleParamsMapper[ruleEntityType])));
7682
return {eligibilityRuleEntities};
7783
};
7884

src/services/RuleEvalService.js

Lines changed: 6 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -126,41 +126,22 @@ export const subjectSummaryRule = async (rule, entity) => {
126126
return [];
127127
};
128128

129-
export const isEligibleForEncounter = async (individual, encounterType) => {
129+
export const isEligibleForEntityType = async (individual, entityType, bundleRuleParams) => {
130130
let eligible = true;
131-
const rulesFromTheBundle = await getAllRuleItemsFor(encounterType.uuid, "EncounterEligibilityCheck", "EncounterType");
132-
if (!_.isNil(encounterType.entityEligibilityCheckRule) && !_.isEmpty(_.trim(encounterType.entityEligibilityCheckRule))) {
133-
const code = removeStrictFromRuleCode(encounterType.entityEligibilityCheckRule);
131+
const rulesFromTheBundle = await getAllRuleItemsFor(entityType.uuid, bundleRuleParams.ruleType, entityType);
132+
if (!_.isNil(entityType.entityEligibilityCheckRule) && !_.isEmpty(_.trim(entityType.entityEligibilityCheckRule))) {
133+
const code = removeStrictFromRuleCode(entityType.entityEligibilityCheckRule);
134134
const ruleFunc = eval(code);
135135
eligible = ruleFunc({
136136
params: {entity: individual, services},
137137
imports: {rulesConfig, lodash, moment}
138138
});
139139
} else if (!_.isEmpty(rulesFromTheBundle)) {
140-
eligible = runRuleAndSaveFailure(_.last(rulesFromTheBundle), 'Encounter', {individual}, true);
140+
eligible = runRuleAndSaveFailure(_.last(rulesFromTheBundle), bundleRuleParams.entityName, {individual}, true);
141141
}
142142
return {
143143
"isEligible": eligible,
144-
"typeUUID": encounterType.uuid,
145-
};
146-
};
147-
148-
export const isEligibleForProgramEnrolment = async (individual, program) => {
149-
let eligible = true;
150-
const rulesFromTheBundle = await getAllRuleItemsFor(program.uuid, "EnrolmentEligibilityCheck", "Program");
151-
if (!_.isNil(program.entityEligibilityCheckRule) && !_.isEmpty(_.trim(program.entityEligibilityCheckRule))) {
152-
const code = removeStrictFromRuleCode(program.entityEligibilityCheckRule);
153-
const ruleFunc = eval(code);
154-
eligible = ruleFunc({
155-
params: {entity: individual, services},
156-
imports: {rulesConfig, lodash, moment}
157-
});
158-
} else if (!_.isEmpty(rulesFromTheBundle)) {
159-
eligible = runRuleAndSaveFailure(_.last(rulesFromTheBundle), 'Program', {individual}, true);
160-
}
161-
return {
162-
"isEligible": eligible,
163-
"typeUUID": program.uuid,
144+
"typeUUID": entityType.uuid,
164145
};
165146
};
166147

0 commit comments

Comments
 (0)