Skip to content

Commit 97146c2

Browse files
committed
Support exact match on AccessionNumber in C-FIND query
1 parent 705cfbb commit 97146c2

3 files changed

Lines changed: 34 additions & 4 deletions

File tree

src/services/mwl/c_find.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,13 +44,16 @@ def call(self, event: evt.Event) -> Iterator[Tuple[int, Dataset | None]]:
4444
procedure_sequence = identifier.get("ScheduledProcedureStepSequence", [{}])
4545
query_modality = procedure_sequence[0].get("Modality")
4646
query_date = procedure_sequence[0].get("ScheduledProcedureStepStartDate")
47+
query_accession_number = identifier.get("AccessionNumber")
4748

4849
logger.debug(
49-
"Query parameters: modality=%s, date=%s, patient_id=%s", query_modality, query_date, anonymised_patient_id
50+
"Query parameters: accession_number=%s, modality=%s, date=%s, patient_id=%s",
51+
query_accession_number, query_modality, query_date, anonymised_patient_id
5052
)
5153

5254
try:
5355
items = self.storage.find_worklist_items(
56+
accession_number=query_accession_number if query_accession_number else None,
5457
modality=query_modality if query_modality else None,
5558
scheduled_date=query_date if query_date else None,
5659
patient_id=query_patient_id if query_patient_id else None,

tests/integration/test_c_find_returns_worklist_items.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,23 @@ def test_cfind_filters_by_scheduled_date(self, event, storage):
116116
assert status == SUCCESS
117117
assert ds is None
118118

119+
def test_cfind_filters_by_accession_number(self, event, storage):
120+
event.identifier.AccessionNumber = "ACC234567"
121+
122+
results = list(CFind(storage).call(event))
123+
124+
assert len(results) == 2
125+
126+
status, ds = results[0]
127+
assert status == PENDING
128+
assert ds.PatientID == "999234567"
129+
assert ds.PatientName == "JONES^MARY"
130+
assert ds.AccessionNumber == "ACC234567"
131+
132+
status, ds = results[1]
133+
assert status == SUCCESS
134+
assert ds is None
135+
119136
def test_cfind_filters_by_modality(self, event, storage):
120137
storage.store_worklist_item(
121138
WorklistItem(

tests/services/mwl/test_c_find.py

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,16 @@ def test_call_with_multiple_results(self, handler, mock_storage, mock_event):
107107
status, ds = results[3]
108108
assert status == SUCCESS
109109

110+
def test_call_with_accession_number_filter(self, handler, mock_storage, mock_event):
111+
mock_event.identifier.AccessionNumber = "ACC12345"
112+
mock_storage.find_worklist_items.return_value = []
113+
114+
list(handler.call(mock_event))
115+
116+
mock_storage.find_worklist_items.assert_called_once_with(
117+
accession_number="ACC12345", modality=None, scheduled_date=None, patient_id=None
118+
)
119+
110120
def test_call_with_modality_filter(self, handler, mock_storage, mock_event):
111121
# Add modality to query
112122
sps_item = Dataset()
@@ -116,7 +126,7 @@ def test_call_with_modality_filter(self, handler, mock_storage, mock_event):
116126

117127
list(handler.call(mock_event))
118128

119-
mock_storage.find_worklist_items.assert_called_once_with(modality="MG", scheduled_date=None, patient_id=None)
129+
mock_storage.find_worklist_items.assert_called_once_with(accession_number=None, modality="MG", scheduled_date=None, patient_id=None)
120130

121131
def test_call_with_date_filter(self, handler, mock_storage, mock_event):
122132
sps_item = Dataset()
@@ -127,7 +137,7 @@ def test_call_with_date_filter(self, handler, mock_storage, mock_event):
127137
list(handler.call(mock_event))
128138

129139
mock_storage.find_worklist_items.assert_called_once_with(
130-
modality=None, scheduled_date="20260107", patient_id=None
140+
accession_number=None, modality=None, scheduled_date="20260107", patient_id=None
131141
)
132142

133143
def test_call_with_patient_id_filter(self, handler, mock_storage, mock_event):
@@ -137,7 +147,7 @@ def test_call_with_patient_id_filter(self, handler, mock_storage, mock_event):
137147
list(handler.call(mock_event))
138148

139149
mock_storage.find_worklist_items.assert_called_once_with(
140-
modality=None, scheduled_date=None, patient_id="9876543210"
150+
accession_number=None, modality=None, scheduled_date=None, patient_id="9876543210"
141151
)
142152

143153
def test_call_handles_storage_exception(self, handler, mock_storage, mock_event):

0 commit comments

Comments
 (0)