Skip to content

Commit 95b6e76

Browse files
committed
Added _add_criteria_subject_lower_fobt_age method
1 parent 964675f commit 95b6e76

File tree

2 files changed

+45
-30
lines changed

2 files changed

+45
-30
lines changed

utils/oracle/mock_selection_builder.py

Lines changed: 23 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,7 @@
33
import os
44

55
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), "../..")))
6-
print("PYTHONPATH set to:", sys.path[0])
7-
from classes.subject_selection_criteria_key import (
8-
SubjectSelectionCriteriaKey,
9-
)
10-
from classes.episode_type import EpisodeType
11-
from classes.subject_has_episode import SubjectHasEpisode
6+
# print("PYTHONPATH set to:", sys.path[0]) # Uncomment for local debug
127
from classes.selection_builder_exception import SelectionBuilderException
138

149

@@ -26,40 +21,38 @@ class MockSelectionBuilder:
2621
- Use dump_sql() to inspect the resulting SQL
2722
"""
2823

29-
def __init__(self, criteria_key, criteria_value):
24+
def __init__(self, criteria_key, criteria_value, criteria_comparator=">="):
3025
self.criteria_key = criteria_key
3126
self.criteria_key_name = criteria_key.description
3227
self.criteria_value = criteria_value
28+
self.criteria_comparator = criteria_comparator
3329
self.sql_where = []
3430

35-
def _add_criteria_subject_has_episodes(self, episode_type=None):
31+
# === Example testable method ===
32+
# Replace this with the one you want to test,
33+
# then use utils/oracle/test_subject_criteria_dev.py to run your scenarios
34+
35+
def _add_criteria_subject_lower_fobt_age(self) -> None:
36+
"""
37+
Adds a SQL constraint that compares a subject's lower FOBT age eligibility
38+
using a comparator and a value (e.g. '>= 55' or '>= default').
39+
40+
If value is 'default', it's replaced with a national parameter lookup:
41+
pkg_parameters.f_get_national_param_val(10)
42+
"""
3643
try:
37-
value = SubjectHasEpisode.by_description(self.criteria_value.lower())
38-
if value == SubjectHasEpisode.YES:
39-
self.sql_where.append(" AND EXISTS ( SELECT 'ep' ")
40-
elif value == SubjectHasEpisode.NO:
41-
self.sql_where.append(" AND NOT EXISTS ( SELECT 'ep' ")
42-
else:
43-
raise SelectionBuilderException(
44-
self.criteria_key_name, self.criteria_value
45-
)
46-
except Exception:
47-
raise SelectionBuilderException(self.criteria_key_name, self.criteria_value)
44+
value = self.criteria_value
45+
comparator = self.criteria_comparator
4846

49-
self.sql_where.append(" FROM ep_subject_episode_t ep ")
50-
self.sql_where.append(
51-
" WHERE ep.screening_subject_id = ss.screening_subject_id "
52-
)
47+
if value.lower() == "default":
48+
value = "pkg_parameters.f_get_national_param_val (10)"
5349

54-
if episode_type is not None:
5550
self.sql_where.append(
56-
f" AND ep.episode_type_id = {episode_type.valid_value_id} "
51+
f"AND pkg_bcss_common.f_get_ss_lower_age_limit (ss.screening_subject_id) "
52+
f"{comparator} {value}"
5753
)
58-
59-
if self.criteria_key == SubjectSelectionCriteriaKey.SUBJECT_HAS_AN_OPEN_EPISODE:
60-
self.sql_where.append(" AND ep.episode_end_date IS NULL ")
61-
62-
self.sql_where.append(" )")
54+
except Exception:
55+
raise SelectionBuilderException(self.criteria_key_name, self.criteria_value)
6356

6457
def dump_sql(self):
6558
return "\n".join(self.sql_where)

utils/oracle/subject_selection_query_builder.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -621,6 +621,28 @@ def _add_criteria_subject_age(self) -> None:
621621
self.sql_where.append("= ")
622622
self.sql_where.append(self.criteria_value)
623623

624+
def _add_criteria_subject_lower_fobt_age(self) -> None:
625+
"""
626+
Adds a SQL constraint that compares a subject's lower FOBT age eligibility
627+
using a comparator and a value (e.g. '>= 55' or '>= default').
628+
629+
If value is 'default', it's replaced with a national parameter lookup:
630+
pkg_parameters.f_get_national_param_val(10)
631+
"""
632+
try:
633+
value = self.criteria_value
634+
comparator = self.criteria_comparator
635+
636+
if value.lower() == "default":
637+
value = "pkg_parameters.f_get_national_param_val (10)"
638+
639+
self.sql_where.append(
640+
f"AND pkg_bcss_common.f_get_ss_lower_age_limit (ss.screening_subject_id) "
641+
f"{comparator} {value}"
642+
)
643+
except Exception:
644+
raise SelectionBuilderException(self.criteria_key_name, self.criteria_value)
645+
624646
def _add_criteria_subject_hub_code(self, user: "User") -> None:
625647
hub_code = None
626648
try:

0 commit comments

Comments
 (0)