Skip to content

Commit 705cfbb

Browse files
committed
Support AccessionNumber exact matches in find worklist item query
1 parent 42e712e commit 705cfbb

2 files changed

Lines changed: 30 additions & 33 deletions

File tree

src/services/storage.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -364,6 +364,7 @@ def store_worklist_item(
364364

365365
def find_worklist_items(
366366
self,
367+
accession_number: Optional[str] = None,
367368
modality: Optional[str] = None,
368369
scheduled_date: Optional[str] = None,
369370
patient_id: Optional[str] = None,
@@ -372,6 +373,7 @@ def find_worklist_items(
372373
Query worklist items with optional filters.
373374
374375
Args:
376+
accession_number: Filter by accession number
375377
modality: Filter by modality (e.g., "MG")
376378
scheduled_date: Filter by scheduled date (YYYYMMDD)
377379
patient_id: Filter by patient ID
@@ -388,6 +390,10 @@ def find_worklist_items(
388390
where_clauses = []
389391
params = []
390392

393+
if accession_number:
394+
where_clauses.append("accession_number = ?")
395+
params.append(accession_number)
396+
391397
if modality:
392398
where_clauses.append("modality = ?")
393399
params.append(modality)

tests/services/test_storage.py

Lines changed: 24 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -219,7 +219,16 @@ def test_find_worklist_items(self, mock_db, tmp_dir, result):
219219
assert len(results) == 1
220220
assert results[0] == WorklistItem(**result)
221221

222-
def test_find_worklist_items_with_filters(self, mock_db, tmp_dir):
222+
@pytest.mark.parametrize(
223+
"query_param_name, query_param_value",
224+
[
225+
("accession_number", "ACC123456"),
226+
("patient_id", "999123456"),
227+
("modality", "CT"),
228+
("scheduled_date", "20240101"),
229+
],
230+
)
231+
def test_find_worklist_items_with_filters(self, mock_db, tmp_dir, query_param_name, query_param_value):
223232
mock_cursor = MagicMock()
224233
mock_cursor.fetchall.return_value = []
225234
mock_connection = MagicMock()
@@ -229,58 +238,40 @@ def test_find_worklist_items_with_filters(self, mock_db, tmp_dir):
229238
subject = MWLStorage(tmp_dir)
230239
mock_connection.reset_mock()
231240

232-
subject.find_worklist_items(patient_id="999123456")
241+
find_args = {query_param_name: query_param_value}
242+
subject.find_worklist_items(**find_args)
233243

234244
mock_connection.execute.assert_called_once_with(
235245
(
236246
"SELECT accession_number, modality, patient_birth_date, patient_id, "
237247
"patient_name, patient_sex, procedure_code, scheduled_date, scheduled_time, "
238248
"source_message_id, study_description, study_instance_uid, status, mpps_instance_uid "
239-
"FROM worklist_items WHERE patient_id = ? ORDER BY scheduled_date, scheduled_time"
249+
f"FROM worklist_items WHERE {query_param_name} = ? ORDER BY scheduled_date, scheduled_time"
240250
),
241-
["999123456"],
251+
[query_param_value],
242252
)
243253

244-
mock_connection.reset_mock()
245-
subject.find_worklist_items(modality="CT")
246-
247-
mock_connection.execute.assert_called_once_with(
248-
(
249-
"SELECT accession_number, modality, patient_birth_date, patient_id, "
250-
"patient_name, patient_sex, procedure_code, scheduled_date, scheduled_time, "
251-
"source_message_id, study_description, study_instance_uid, status, mpps_instance_uid "
252-
"FROM worklist_items WHERE modality = ? ORDER BY scheduled_date, scheduled_time"
253-
),
254-
["CT"],
255-
)
256-
257-
mock_connection.reset_mock()
258-
subject.find_worklist_items(scheduled_date="20240101")
259-
260-
mock_connection.execute.assert_called_once_with(
261-
(
262-
"SELECT accession_number, modality, patient_birth_date, patient_id, "
263-
"patient_name, patient_sex, procedure_code, scheduled_date, scheduled_time, "
264-
"source_message_id, study_description, study_instance_uid, status, mpps_instance_uid "
265-
"FROM worklist_items WHERE scheduled_date = ? "
266-
"ORDER BY scheduled_date, scheduled_time"
267-
),
268-
["20240101"],
269-
)
254+
def test_find_worklist_items_with_multiple_filters(self, mock_db, tmp_dir):
255+
mock_cursor = MagicMock()
256+
mock_cursor.fetchall.return_value = []
257+
mock_connection = MagicMock()
258+
mock_connection.execute.return_value = mock_cursor
259+
mock_db.connect.return_value = mock_connection
270260

261+
subject = MWLStorage(tmp_dir)
271262
mock_connection.reset_mock()
272-
subject.find_worklist_items(modality="MG", scheduled_date="20240101", patient_id="999123456")
263+
subject.find_worklist_items(accession_number="ACC123456", modality="MG", scheduled_date="20240101", patient_id="999123456")
273264

274265
mock_connection.execute.assert_called_once_with(
275266
(
276267
"SELECT accession_number, modality, patient_birth_date, patient_id, "
277268
"patient_name, patient_sex, procedure_code, scheduled_date, scheduled_time, "
278269
"source_message_id, study_description, study_instance_uid, status, mpps_instance_uid "
279270
"FROM worklist_items "
280-
"WHERE modality = ? AND scheduled_date = ? AND patient_id = ? "
271+
"WHERE accession_number = ? AND modality = ? AND scheduled_date = ? AND patient_id = ? "
281272
"ORDER BY scheduled_date, scheduled_time"
282273
),
283-
["MG", "20240101", "999123456"],
274+
["ACC123456", "MG", "20240101", "999123456"],
284275
)
285276

286277
def test_get_worklist_item(self, mock_db, tmp_dir, result):

0 commit comments

Comments
 (0)