Skip to content

Commit 0e15ade

Browse files
committed
Added screening referral type filter using screening_referral_type_id and null handling
1 parent 6535b6d commit 0e15ade

File tree

4 files changed

+57
-23
lines changed

4 files changed

+57
-23
lines changed

classes/screening_referral_type.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
class ScreeningReferralType:
2+
"""
3+
Maps screening referral descriptions to valid value IDs.
4+
"""
5+
6+
_label_to_id = {
7+
"gp": 9701,
8+
"self referral": 9702,
9+
"hospital": 9703,
10+
# Add more as needed
11+
}
12+
13+
@classmethod
14+
def get_id(cls, description: str) -> int:
15+
key = description.strip().lower()
16+
if key not in cls._label_to_id:
17+
raise ValueError(f"Unknown screening referral type: '{description}'")
18+
return cls._label_to_id[key]

utils/oracle/mock_selection_builder.py

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8,23 +8,23 @@
88

99

1010
# Add helper class stubs below
11-
class SymptomaticProcedureResultType:
11+
class ScreeningReferralType:
1212
"""
13-
Maps symptom-driven surgery result descriptions to valid value IDs.
13+
Maps screening referral descriptions to valid value IDs.
1414
"""
1515

1616
_label_to_id = {
17-
"normal": 9601,
18-
"inconclusive": 9602,
19-
"cancer detected": 9603,
17+
"gp": 9701,
18+
"self referral": 9702,
19+
"hospital": 9703,
2020
# Extend as needed
2121
}
2222

2323
@classmethod
2424
def get_id(cls, description: str) -> int:
2525
key = description.strip().lower()
2626
if key not in cls._label_to_id:
27-
raise ValueError(f"Unknown symptomatic procedure result: '{description}'")
27+
raise ValueError(f"Unknown screening referral type: '{description}'")
2828
return cls._label_to_id[key]
2929

3030

@@ -94,21 +94,19 @@ def _add_join_to_surveillance_review(self):
9494
# Replace this with the one you want to test,
9595
# then use utils/oracle/test_subject_criteria_dev.py to run your scenarios
9696

97-
def _add_criteria_symptomatic_procedure_result(self) -> None:
97+
def _add_criteria_screening_referral_type(self) -> None:
9898
"""
99-
Filters based on symptomatic surgery result value or presence.
99+
Filters based on screening referral type ID or null presence.
100100
"""
101101
try:
102-
column = "xt.surgery_result_id"
102+
column = "xt.screening_referral_type_id"
103103
value = self.criteria_value.strip().lower()
104104

105105
if value == "null":
106106
self.sql_where.append(f"AND {column} IS NULL")
107107
else:
108-
result_id = SymptomaticProcedureResultType.get_id(self.criteria_value)
109-
self.sql_where.append(
110-
f"AND {column} {self.criteria_comparator} {result_id}"
111-
)
108+
type_id = ScreeningReferralType.get_id(self.criteria_value)
109+
self.sql_where.append(f"AND {column} {self.criteria_comparator} {type_id}")
112110

113111
except Exception:
114112
raise SelectionBuilderException(self.criteria_key_name, self.criteria_value)

utils/oracle/subject_selection_query_builder.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
from classes.invited_since_age_extension import InvitedSinceAgeExtension
4949
from classes.episode_result_type import EpisodeResultType
5050
from classes.symptomatic_procedure_result_type import SymptomaticProcedureResultType
51+
from classes.screening_referral_type import ScreeningReferralType
5152

5253

5354
class SubjectSelectionQueryBuilder:
@@ -2145,6 +2146,25 @@ def _add_criteria_symptomatic_procedure_result(self) -> None:
21452146
except Exception:
21462147
raise SelectionBuilderException(self.criteria_key_name, self.criteria_value)
21472148

2149+
def _add_criteria_screening_referral_type(self) -> None:
2150+
"""
2151+
Filters based on screening referral type ID or null presence.
2152+
"""
2153+
try:
2154+
column = "xt.screening_referral_type_id"
2155+
value = self.criteria_value.strip().lower()
2156+
2157+
if value == "null":
2158+
self.sql_where.append(f"AND {column} IS NULL")
2159+
else:
2160+
type_id = ScreeningReferralType.get_id(self.criteria_value)
2161+
self.sql_where.append(
2162+
f"AND {column} {self.criteria_comparator} {type_id}"
2163+
)
2164+
2165+
except Exception:
2166+
raise SelectionBuilderException(self.criteria_key_name, self.criteria_value)
2167+
21482168
# ------------------------------------------------------------------------
21492169
# 🧬 CADS Clinical Dataset Filters
21502170
# ------------------------------------------------------------------------

utils/oracle/test_subject_criteria_dev.py

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -41,18 +41,16 @@ def make_builder(key, value, index=0, comparator="="):
4141
return b
4242

4343

44-
# === Test: SYMPTOMATIC_PROCEDURE_RESULT (cancer detected) ===
44+
# === Test: SCREENING_REFERRAL_TYPE (self referral) ===
4545
b = make_builder(
46-
SubjectSelectionCriteriaKey.SYMPTOMATIC_PROCEDURE_RESULT,
47-
"cancer detected",
48-
comparator="=",
46+
SubjectSelectionCriteriaKey.SCREENING_REFERRAL_TYPE, "self referral", comparator="="
4947
)
50-
b._add_criteria_symptomatic_procedure_result()
51-
print("=== SYMPTOMATIC_PROCEDURE_RESULT (cancer detected) ===")
48+
b._add_criteria_screening_referral_type()
49+
print("=== SCREENING_REFERRAL_TYPE (self referral) ===")
5250
print(b.dump_sql(), end="\n\n")
5351

54-
# === Test: SYMPTOMATIC_PROCEDURE_RESULT (null) ===
55-
b = make_builder(SubjectSelectionCriteriaKey.SYMPTOMATIC_PROCEDURE_RESULT, "null")
56-
b._add_criteria_symptomatic_procedure_result()
57-
print("=== SYMPTOMATIC_PROCEDURE_RESULT (null) ===")
52+
# === Test: SCREENING_REFERRAL_TYPE (null) ===
53+
b = make_builder(SubjectSelectionCriteriaKey.SCREENING_REFERRAL_TYPE, "null")
54+
b._add_criteria_screening_referral_type()
55+
print("=== SCREENING_REFERRAL_TYPE (null) ===")
5856
print(b.dump_sql(), end="\n\n")

0 commit comments

Comments
 (0)