From 27575fae82b66b921e40bad46c28db531d8752a6 Mon Sep 17 00:00:00 2001 From: Kate Bobyn Date: Mon, 29 Dec 2025 13:09:07 +0000 Subject: [PATCH 1/3] NRL-1811 do not log multiple pointer warning if test patient --- .../createDocumentReference/create_document_reference.py | 2 +- .../upsertDocumentReference/upsert_document_reference.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/api/producer/createDocumentReference/create_document_reference.py b/api/producer/createDocumentReference/create_document_reference.py index 0e0c70021..f69ac65e9 100644 --- a/api/producer/createDocumentReference/create_document_reference.py +++ b/api/producer/createDocumentReference/create_document_reference.py @@ -263,7 +263,7 @@ def handler( nhs_number, [pointer_type] ) - if existing_pointers_count > 0: + if existing_pointers_count > 0 and not nhs_number.startswith("9"): logger.log( LogReference.PROCREATE012, new_pointer_id=core_model.id, diff --git a/api/producer/upsertDocumentReference/upsert_document_reference.py b/api/producer/upsertDocumentReference/upsert_document_reference.py index b57a1bf2b..788f4854f 100644 --- a/api/producer/upsertDocumentReference/upsert_document_reference.py +++ b/api/producer/upsertDocumentReference/upsert_document_reference.py @@ -270,7 +270,7 @@ def handler( nhs_number, [pointer_type] ) - if existing_pointers_count > 0: + if existing_pointers_count > 0 and not nhs_number.startswith("9"): logger.log( LogReference.PROUPSERT012, new_pointer_id=core_model.id, From a36ae83cb8d56be26db3702cb6c95e110a604d6c Mon Sep 17 00:00:00 2001 From: Kate Bobyn Date: Wed, 31 Dec 2025 09:02:19 +0000 Subject: [PATCH 2/3] NRL-1811 add test scenarios for testpatients not generating warnings --- .../tests/test_create_document_reference.py | 86 +++++++++++++++++++ .../tests/test_upsert_document_reference.py | 58 +++++++++++++ 2 files changed, 144 insertions(+) diff --git a/api/producer/createDocumentReference/tests/test_create_document_reference.py b/api/producer/createDocumentReference/tests/test_create_document_reference.py index a702d78c5..d6a3d9a55 100644 --- a/api/producer/createDocumentReference/tests/test_create_document_reference.py +++ b/api/producer/createDocumentReference/tests/test_create_document_reference.py @@ -1875,3 +1875,89 @@ def test_create_logs_for_expected_multi_pointer( assert not any( call[0][0].name == "PROCREATE012" for call in mock_logger.log.call_args_list ) + + +@mock_aws +@mock_repository +@freeze_uuid("00000000-0000-0000-0000-000000000001") +@patch("api.producer.createDocumentReference.create_document_reference.logger") +def test_create_logs_for_test_patient_multi_pointer( + mock_logger: Mock, + repository: DocumentPointerRepository, +): + doc_ref = load_document_reference("Y05868-736253002-Valid-with-master-id") + doc_ref.subject.identifier.value = "9999999999" + doc_pointer = DocumentPointer.from_document_reference(doc_ref) + repository.create(doc_pointer) + + event = create_test_api_gateway_event( + headers=create_headers(), + body=doc_ref.model_dump_json(exclude_none=True), + ) + + result = handler(event, create_mock_context()) + body = result.pop("body") + + assert result == { + "statusCode": "201", + "headers": { + "Location": "/DocumentReference/Y05868-00000000-0000-0000-0000-000000000001", + **default_response_headers(), + }, + "isBase64Encoded": False, + } + + parsed_body = json.loads(body) + + assert parsed_body == { + "resourceType": "OperationOutcome", + "issue": [ + { + "severity": "information", + "code": "informational", + "details": { + "coding": [ + { + "code": "RESOURCE_CREATED", + "display": "Resource created", + "system": "https://fhir.nhs.uk/ValueSet/NRL-ResponseCode", + } + ] + }, + "diagnostics": "The document has been created", + } + ], + } + + assert any( + call[0][0].name == "PROCREATE012" for call in mock_logger.log.call_args_list + ) + + assert { + "existing_pointers_count": 1, + "nhs_number": ( + doc_ref.subject.identifier.value + if doc_ref.subject and doc_ref.subject.identifier + else None + ), + "pointer_type": ( + f"{doc_ref.type.coding[0].system}|{doc_ref.type.coding[0].code}" + if doc_ref.type and doc_ref.type.coding + else None + ), + "custodian": ( + doc_ref.custodian.identifier.value + if doc_ref.custodian and doc_ref.custodian.identifier + else None + ), + "new_pointer_id": "Y05868-00000000-0000-0000-0000-000000000001", + "new_pointer_master_id": ( + doc_ref.masterIdentifier.value if doc_ref.masterIdentifier else None + ), + } == [ + call[1:][0] + for call in mock_logger.log.call_args_list + if call[0][0].name == "PROCREATE012" + ][ + 0 + ] diff --git a/api/producer/upsertDocumentReference/tests/test_upsert_document_reference.py b/api/producer/upsertDocumentReference/tests/test_upsert_document_reference.py index 26280ed6e..5b464c79a 100644 --- a/api/producer/upsertDocumentReference/tests/test_upsert_document_reference.py +++ b/api/producer/upsertDocumentReference/tests/test_upsert_document_reference.py @@ -1842,3 +1842,61 @@ def test_upsert_logs_for_expected_multi_pointer( assert not any( call[0][0].name == "PROUPSERT012" for call in mock_logger.log.call_args_list ) + + +@mock_aws +@mock_repository +@patch("api.producer.upsertDocumentReference.upsert_document_reference.logger") +def test_upsert_logs_for_test_patient_multi_pointer( + mock_logger: Mock, + repository: DocumentPointerRepository, +): + doc_ref = load_document_reference("Y05868-736253002-Valid-with-master-id") + doc_ref.subject.identifier.value = "9999999999" + doc_pointer = DocumentPointer.from_document_reference(doc_ref) + repository.create(doc_pointer) + + doc_ref.id = "Y05868-99999-99999-999999-02" + + event = create_test_api_gateway_event( + headers=create_headers(), + body=doc_ref.model_dump_json(exclude_none=True), + ) + + result = handler(event, create_mock_context()) + body = result.pop("body") + + assert result == { + "statusCode": "201", + "headers": { + "Location": "/DocumentReference/Y05868-99999-99999-999999-02", + **default_response_headers(), + }, + "isBase64Encoded": False, + } + + parsed_body = json.loads(body) + + assert parsed_body == { + "resourceType": "OperationOutcome", + "issue": [ + { + "severity": "information", + "code": "informational", + "details": { + "coding": [ + { + "code": "RESOURCE_CREATED", + "display": "Resource created", + "system": "https://fhir.nhs.uk/ValueSet/NRL-ResponseCode", + } + ] + }, + "diagnostics": "The document has been created", + } + ], + } + + assert not any( + call[0][0].name == "PROUPSERT012" for call in mock_logger.log.call_args_list + ) From fef2379e63d1dcaebc0299669fd8b35116cee9f6 Mon Sep 17 00:00:00 2001 From: Kate Bobyn Date: Wed, 31 Dec 2025 09:18:03 +0000 Subject: [PATCH 3/3] NRL-1811 add test scenarios for testpatients not generating warnings --- .../tests/test_create_document_reference.py | 31 +------------------ 1 file changed, 1 insertion(+), 30 deletions(-) diff --git a/api/producer/createDocumentReference/tests/test_create_document_reference.py b/api/producer/createDocumentReference/tests/test_create_document_reference.py index d6a3d9a55..a737da62d 100644 --- a/api/producer/createDocumentReference/tests/test_create_document_reference.py +++ b/api/producer/createDocumentReference/tests/test_create_document_reference.py @@ -1929,35 +1929,6 @@ def test_create_logs_for_test_patient_multi_pointer( ], } - assert any( + assert not any( call[0][0].name == "PROCREATE012" for call in mock_logger.log.call_args_list ) - - assert { - "existing_pointers_count": 1, - "nhs_number": ( - doc_ref.subject.identifier.value - if doc_ref.subject and doc_ref.subject.identifier - else None - ), - "pointer_type": ( - f"{doc_ref.type.coding[0].system}|{doc_ref.type.coding[0].code}" - if doc_ref.type and doc_ref.type.coding - else None - ), - "custodian": ( - doc_ref.custodian.identifier.value - if doc_ref.custodian and doc_ref.custodian.identifier - else None - ), - "new_pointer_id": "Y05868-00000000-0000-0000-0000-000000000001", - "new_pointer_master_id": ( - doc_ref.masterIdentifier.value if doc_ref.masterIdentifier else None - ), - } == [ - call[1:][0] - for call in mock_logger.log.call_args_list - if call[0][0].name == "PROCREATE012" - ][ - 0 - ]