From 37608054480f7194203d3839101c324bb94fde00 Mon Sep 17 00:00:00 2001 From: cditcher Date: Thu, 18 Jun 2026 14:59:08 -0700 Subject: [PATCH 1/2] Added check to ensure that if course is completed with a passing grade, do not consider it failed --- .../rule/RegistrationsFailedCrseRule.java | 3 ++ .../service/RuleEngineServiceTest.java | 35 +++++++++++++++++-- 2 files changed, 35 insertions(+), 3 deletions(-) diff --git a/api/src/main/java/ca/bc/gov/educ/api/ruleengine/rule/RegistrationsFailedCrseRule.java b/api/src/main/java/ca/bc/gov/educ/api/ruleengine/rule/RegistrationsFailedCrseRule.java index 03f8ceb..95758c6 100644 --- a/api/src/main/java/ca/bc/gov/educ/api/ruleengine/rule/RegistrationsFailedCrseRule.java +++ b/api/src/main/java/ca/bc/gov/educ/api/ruleengine/rule/RegistrationsFailedCrseRule.java @@ -37,6 +37,9 @@ public RuleData fire() { Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("PST"), Locale.CANADA); boolean inProgressCourse = false; for (StudentCourse studentCourse : studentCourseList) { + if (RuleEngineApiUtils.isCompletedCourse(studentCourse.getCompletedCourseLetterGrade(), studentCourse.getCompletedCoursePercentage())) { + continue; + } try { Date sessionDate = toLastDayOfMonth(RuleEngineApiUtils.parseDate(studentCourse.getSessionDate() + "/01", DATE_FORMAT)); String sDate = RuleEngineApiUtils.formatDate(sessionDate, RuleEngineApiConstants.DEFAULT_DATE_FORMAT); diff --git a/api/src/test/java/ca/bc/gov/educ/api/ruleengine/service/RuleEngineServiceTest.java b/api/src/test/java/ca/bc/gov/educ/api/ruleengine/service/RuleEngineServiceTest.java index ad5e68a..ef6e447 100644 --- a/api/src/test/java/ca/bc/gov/educ/api/ruleengine/service/RuleEngineServiceTest.java +++ b/api/src/test/java/ca/bc/gov/educ/api/ruleengine/service/RuleEngineServiceTest.java @@ -5,9 +5,7 @@ import java.util.*; import java.util.logging.Logger; -import ca.bc.gov.educ.api.ruleengine.dto.RuleData; import ca.bc.gov.educ.api.ruleengine.dto.StudentCourse; -import ca.bc.gov.educ.api.ruleengine.rule.MatchCreditsRule; import ca.bc.gov.educ.api.ruleengine.util.RuleProcessorRuleUtils; import org.junit.Test; import org.junit.runner.RunWith; @@ -21,7 +19,6 @@ import ca.bc.gov.educ.api.ruleengine.dto.RuleProcessorData; import static org.junit.Assert.*; -import static org.mockito.Mockito.when; @RunWith(SpringRunner.class) @@ -1207,6 +1204,38 @@ public void testProcessGradAlgorithmRules2018_EN_126187616() { assertFalse(ruleProcessorData.isGraduated()); } + @Test + public void testRegistrationsFailedCourseRuleIgnoresFailingInterimWhenFinalExists() { + RuleProcessorData ruleProcessorData = getRuleProcessorData("2018-EN-126187616"); + assertNotNull(ruleProcessorData); + ruleProcessorData.setProjected(false); + ruleProcessorData.getStudentCourses().add( + StudentCourse.builder() + .courseCode("ZZZ") + .courseName("Regression Test Course") + .courseLevel("12") + .sessionDate("209912") + .credits(4) + .gradReqMet("") + .gradReqMetDetail("") + .completedCoursePercentage(67.0) + .completedCourseLetterGrade("C") + .interimPercent(42.0) + .interimLetterGrade("F") + .build() + ); + + ruleProcessorData = ruleEngineService.processGradAlgorithmRules(ruleProcessorData); + + assertNotNull(ruleProcessorData); + StudentCourse preservedCourse = ruleProcessorData.getStudentCourses().stream() + .filter(course -> "ZZZ".equals(course.getCourseCode()) && "12".equals(course.getCourseLevel())) + .findFirst() + .orElse(null); + assertNotNull(preservedCourse); + assertFalse(preservedCourse.isFailed()); + } + @Test public void testProcessGradAlgorithmRules2018_EN_cutoff_rule() { RuleProcessorData ruleProcessorData = getRuleProcessorData("2018-EN-CUTOFF-RULE-DATA"); From a716468a71fe9732b17938697324058da6111711 Mon Sep 17 00:00:00 2001 From: cditcher Date: Thu, 18 Jun 2026 15:24:41 -0700 Subject: [PATCH 2/2] Clean up --- .../educ/api/ruleengine/rule/RegistrationsFailedCrseRule.java | 1 - 1 file changed, 1 deletion(-) diff --git a/api/src/main/java/ca/bc/gov/educ/api/ruleengine/rule/RegistrationsFailedCrseRule.java b/api/src/main/java/ca/bc/gov/educ/api/ruleengine/rule/RegistrationsFailedCrseRule.java index 95758c6..a67673a 100644 --- a/api/src/main/java/ca/bc/gov/educ/api/ruleengine/rule/RegistrationsFailedCrseRule.java +++ b/api/src/main/java/ca/bc/gov/educ/api/ruleengine/rule/RegistrationsFailedCrseRule.java @@ -33,7 +33,6 @@ public class RegistrationsFailedCrseRule extends BaseRule implements Rule { @Override public RuleData fire() { List studentCourseList = ruleProcessorData.getStudentCourses(); - Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("PST"), Locale.CANADA); boolean inProgressCourse = false; for (StudentCourse studentCourse : studentCourseList) {