Skip to content

Commit 4201eb2

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

4 files changed

Lines changed: 42 additions & 5 deletions

File tree

src/services/mwl/c_find.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,13 +44,19 @@ 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,
52+
query_modality,
53+
query_date,
54+
anonymised_patient_id,
5055
)
5156

5257
try:
5358
items = self.storage.find_worklist_items(
59+
accession_number=query_accession_number if query_accession_number else None,
5460
modality=query_modality if query_modality else None,
5561
scheduled_date=query_date if query_date else None,
5662
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: 15 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,9 @@ 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(
130+
accession_number=None, modality="MG", scheduled_date=None, patient_id=None
131+
)
120132

121133
def test_call_with_date_filter(self, handler, mock_storage, mock_event):
122134
sps_item = Dataset()
@@ -127,7 +139,7 @@ def test_call_with_date_filter(self, handler, mock_storage, mock_event):
127139
list(handler.call(mock_event))
128140

129141
mock_storage.find_worklist_items.assert_called_once_with(
130-
modality=None, scheduled_date="20260107", patient_id=None
142+
accession_number=None, modality=None, scheduled_date="20260107", patient_id=None
131143
)
132144

133145
def test_call_with_patient_id_filter(self, handler, mock_storage, mock_event):
@@ -137,7 +149,7 @@ def test_call_with_patient_id_filter(self, handler, mock_storage, mock_event):
137149
list(handler.call(mock_event))
138150

139151
mock_storage.find_worklist_items.assert_called_once_with(
140-
modality=None, scheduled_date=None, patient_id="9876543210"
152+
accession_number=None, modality=None, scheduled_date=None, patient_id="9876543210"
141153
)
142154

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

tests/services/test_storage.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -260,7 +260,9 @@ def test_find_worklist_items_with_multiple_filters(self, mock_db, tmp_dir):
260260

261261
subject = MWLStorage(tmp_dir)
262262
mock_connection.reset_mock()
263-
subject.find_worklist_items(accession_number="ACC123456", modality="MG", scheduled_date="20240101", patient_id="999123456")
263+
subject.find_worklist_items(
264+
accession_number="ACC123456", modality="MG", scheduled_date="20240101", patient_id="999123456"
265+
)
264266

265267
mock_connection.execute.assert_called_once_with(
266268
(

0 commit comments

Comments
 (0)