From f87517e3fd9f9ebd938d8cc5b0871ec69e919fb5 Mon Sep 17 00:00:00 2001 From: "Axel Garcia K." Date: Fri, 12 Sep 2025 11:48:54 +0100 Subject: [PATCH 1/2] NRL-1612 Consistent NRLRetrievalMechanism url --- api/consumer/swagger.yaml | 16 +++--- api/producer/swagger.yaml | 16 +++--- layer/nrlf/consumer/fhir/r4/model.py | 22 ++++---- layer/nrlf/core/constants.py | 4 +- layer/nrlf/core/tests/test_validators.py | 52 +++++++++---------- layer/nrlf/core/validators.py | 8 +-- layer/nrlf/producer/fhir/r4/model.py | 22 ++++---- layer/nrlf/producer/fhir/r4/strict_model.py | 22 ++++---- resources/fhir/NRLF-Retrieval-CodeSystem.json | 6 +-- .../NRLF-RetrievalMechanism-ValueSet.json | 8 +-- .../SYNTHETIC_IN_CONTEXT_LAUNCH_EXAMPLE.json | 4 +- .../readDocumentReference-success.feature | 8 +-- .../createDocumentReference-failure.feature | 50 +++++++++--------- .../createDocumentReference-success.feature | 12 ++--- .../readDocumentReference-success.feature | 4 +- tests/features/utils/data.py | 12 ++--- 16 files changed, 139 insertions(+), 127 deletions(-) diff --git a/api/consumer/swagger.yaml b/api/consumer/swagger.yaml index 4652ddba5..47c668533 100644 --- a/api/consumer/swagger.yaml +++ b/api/consumer/swagger.yaml @@ -812,7 +812,7 @@ components: items: oneOf: - $ref: "#/components/schemas/ContentStabilityExtension" - - $ref: "#/components/schemas/RetrievalMechanismExtension" + - $ref: "#/components/schemas/NRLRetrievalMechanismExtension" - $ref: "#/components/schemas/Extension" description: Additional extensions which include Content Stability and Retrieval Mechanism. minItems: 1 @@ -977,7 +977,7 @@ components: - system - code - display - RetrievalMechanismExtension: + NRLRetrievalMechanismExtension: allOf: - $ref: "#/components/schemas/Extension" - type: object @@ -985,13 +985,13 @@ components: url: type: string enum: - - "https://fhir.nhs.uk/England/StructureDefinition/Extension-England-RetrievalMechanism" + - "https://fhir.nhs.uk/England/StructureDefinition/Extension-England-NRLRetrievalMechanism" valueCodeableConcept: - $ref: "#/components/schemas/RetrievalMechanismExtensionValueCodeableConcept" + $ref: "#/components/schemas/NRLRetrievalMechanismExtensionValueCodeableConcept" required: - url - valueCodeableConcept - RetrievalMechanismExtensionValueCodeableConcept: + NRLRetrievalMechanismExtensionValueCodeableConcept: allOf: - $ref: "#/components/schemas/CodeableConcept" - type: object @@ -999,12 +999,12 @@ components: coding: type: array items: - $ref: "#/components/schemas/RetrievalMechanismExtensionCoding" + $ref: "#/components/schemas/NRLRetrievalMechanismExtensionCoding" minItems: 1 maxItems: 1 required: - coding - RetrievalMechanismExtensionCoding: + NRLRetrievalMechanismExtensionCoding: allOf: - $ref: "#/components/schemas/Coding" - type: object @@ -1012,7 +1012,7 @@ components: system: type: string enum: - - "https://fhir.nhs.uk/England/CodeSystem/England-RetrievalMechanism" + - "https://fhir.nhs.uk/England/CodeSystem/England-NRLRetrievalMechanism" code: type: string enum: ["SSP", "Direct", "LDR", "InContext"] diff --git a/api/producer/swagger.yaml b/api/producer/swagger.yaml index 14f6f052f..6a53f7cb9 100644 --- a/api/producer/swagger.yaml +++ b/api/producer/swagger.yaml @@ -1417,7 +1417,7 @@ components: items: oneOf: - $ref: "#/components/schemas/ContentStabilityExtension" - - $ref: "#/components/schemas/RetrievalMechanismExtension" + - $ref: "#/components/schemas/NRLRetrievalMechanismExtension" - $ref: "#/components/schemas/Extension" description: Additional extensions which include Content Stability and Retrieval Mechanism. minItems: 1 @@ -1633,7 +1633,7 @@ components: - system - code - display - RetrievalMechanismExtension: + NRLRetrievalMechanismExtension: allOf: - $ref: "#/components/schemas/Extension" - type: object @@ -1641,13 +1641,13 @@ components: url: type: string enum: - - "https://fhir.nhs.uk/England/StructureDefinition/Extension-England-RetrievalMechanism" + - "https://fhir.nhs.uk/England/StructureDefinition/Extension-England-NRLRetrievalMechanism" valueCodeableConcept: - $ref: "#/components/schemas/RetrievalMechanismExtensionValueCodeableConcept" + $ref: "#/components/schemas/NRLRetrievalMechanismExtensionValueCodeableConcept" required: - url - valueCodeableConcept - RetrievalMechanismExtensionValueCodeableConcept: + NRLRetrievalMechanismExtensionValueCodeableConcept: allOf: - $ref: "#/components/schemas/CodeableConcept" - type: object @@ -1655,12 +1655,12 @@ components: coding: type: array items: - $ref: "#/components/schemas/RetrievalMechanismExtensionCoding" + $ref: "#/components/schemas/NRLRetrievalMechanismExtensionCoding" minItems: 1 maxItems: 1 required: - coding - RetrievalMechanismExtensionCoding: + NRLRetrievalMechanismExtensionCoding: allOf: - $ref: "#/components/schemas/Coding" - type: object @@ -1668,7 +1668,7 @@ components: system: type: string enum: - - "https://fhir.nhs.uk/England/CodeSystem/England-RetrievalMechanism" + - "https://fhir.nhs.uk/England/CodeSystem/England-NRLRetrievalMechanism" code: type: string enum: ["SSP", "Direct", "LDR", "InContext"] diff --git a/layer/nrlf/consumer/fhir/r4/model.py b/layer/nrlf/consumer/fhir/r4/model.py index d008c8015..2f93f1e7f 100644 --- a/layer/nrlf/consumer/fhir/r4/model.py +++ b/layer/nrlf/consumer/fhir/r4/model.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: swagger.yaml -# timestamp: 2025-09-05T08:22:10+00:00 +# timestamp: 2025-09-12T10:25:30+00:00 from __future__ import annotations @@ -240,8 +240,10 @@ class ContentStabilityExtensionCoding(Coding): display: Literal["Static", "Dynamic"] -class RetrievalMechanismExtensionCoding(Coding): - system: Literal["https://fhir.nhs.uk/England/CodeSystem/England-RetrievalMechanism"] +class NRLRetrievalMechanismExtensionCoding(Coding): + system: Literal[ + "https://fhir.nhs.uk/England/CodeSystem/England-NRLRetrievalMechanism" + ] code: Literal["SSP", "Direct", "LDR", "InContext"] display: Literal[ "Spine Secure Proxy", @@ -512,9 +514,9 @@ class ContentStabilityExtensionValueCodeableConcept(CodeableConcept): ] -class RetrievalMechanismExtensionValueCodeableConcept(CodeableConcept): +class NRLRetrievalMechanismExtensionValueCodeableConcept(CodeableConcept): coding: Annotated[ - List[RetrievalMechanismExtensionCoding], Field(max_length=1, min_length=1) + List[NRLRetrievalMechanismExtensionCoding], Field(max_length=1, min_length=1) ] @@ -591,11 +593,11 @@ class ContentStabilityExtension(Extension): valueCodeableConcept: ContentStabilityExtensionValueCodeableConcept -class RetrievalMechanismExtension(Extension): +class NRLRetrievalMechanismExtension(Extension): url: Literal[ - "https://fhir.nhs.uk/England/StructureDefinition/Extension-England-RetrievalMechanism" + "https://fhir.nhs.uk/England/StructureDefinition/Extension-England-NRLRetrievalMechanism" ] - valueCodeableConcept: RetrievalMechanismExtensionValueCodeableConcept + valueCodeableConcept: NRLRetrievalMechanismExtensionValueCodeableConcept class OperationOutcome(Parent): @@ -657,7 +659,9 @@ class DocumentReferenceContent(Parent): ), ] extension: Annotated[ - List[Union[ContentStabilityExtension, RetrievalMechanismExtension, Extension]], + List[ + Union[ContentStabilityExtension, NRLRetrievalMechanismExtension, Extension] + ], Field(min_length=1), ] diff --git a/layer/nrlf/core/constants.py b/layer/nrlf/core/constants.py index a3ccb4583..ecd813601 100644 --- a/layer/nrlf/core/constants.py +++ b/layer/nrlf/core/constants.py @@ -677,12 +677,12 @@ def coding_value(self): CONTENT_STABILITY_EXTENSION_URL = ( "https://fhir.nhs.uk/England/StructureDefinition/Extension-England-ContentStability" ) -CONTENT_RETRIEVAL_EXTENSION_URL = "https://fhir.nhs.uk/England/StructureDefinition/Extension-England-RetrievalMechanism" +CONTENT_RETRIEVAL_EXTENSION_URL = "https://fhir.nhs.uk/England/StructureDefinition/Extension-England-NRLRetrievalMechanism" CONTENT_STABILITY_SYSTEM_URL = ( "https://fhir.nhs.uk/England/CodeSystem/England-NRLContentStability" ) CONTENT_RETRIEVAL_SYSTEM_URL = ( - "https://fhir.nhs.uk/England/CodeSystem/England-RetrievalMechanism" + "https://fhir.nhs.uk/England/CodeSystem/England-NRLRetrievalMechanism" ) CONTENT_RETRIEVAL_CODE_MAP = { "Direct": "Direct", diff --git a/layer/nrlf/core/tests/test_validators.py b/layer/nrlf/core/tests/test_validators.py index 40ab6a84a..39939aa56 100644 --- a/layer/nrlf/core/tests/test_validators.py +++ b/layer/nrlf/core/tests/test_validators.py @@ -21,11 +21,11 @@ ContentStabilityExtensionCoding, ContentStabilityExtensionValueCodeableConcept, DocumentReference, + NRLRetrievalMechanismExtension, + NRLRetrievalMechanismExtensionCoding, + NRLRetrievalMechanismExtensionValueCodeableConcept, OperationOutcomeIssue, RequestQueryType, - RetrievalMechanismExtension, - RetrievalMechanismExtensionCoding, - RetrievalMechanismExtensionValueCodeableConcept, ) from nrlf.tests.data import load_document_reference_json @@ -1379,11 +1379,11 @@ def test_validate_content_extension_missing_content_stability(): # Remove all ContentStability extensions document_ref_data["content"][0]["extension"] = [ { - "url": "https://fhir.nhs.uk/England/StructureDefinition/Extension-England-RetrievalMechanism", + "url": "https://fhir.nhs.uk/England/StructureDefinition/Extension-England-NRLRetrievalMechanism", "valueCodeableConcept": { "coding": [ { - "system": "https://fhir.nhs.uk/England/CodeSystem/England-RetrievalMechanism", + "system": "https://fhir.nhs.uk/England/CodeSystem/England-NRLRetrievalMechanism", "code": "Direct", "display": "Direct", } @@ -1421,11 +1421,11 @@ def test_validate_content_extension_mismatch_between_retrieval_mechanism_display # Add a retrieval mechanism extension with a valid code but wrong display document_ref_data["content"][0]["extension"].append( { - "url": "https://fhir.nhs.uk/England/StructureDefinition/Extension-England-RetrievalMechanism", + "url": "https://fhir.nhs.uk/England/StructureDefinition/Extension-England-NRLRetrievalMechanism", "valueCodeableConcept": { "coding": [ { - "system": "https://fhir.nhs.uk/England/CodeSystem/England-RetrievalMechanism", + "system": "https://fhir.nhs.uk/England/CodeSystem/England-NRLRetrievalMechanism", "code": "Direct", "display": "Spine Secure Proxy", } @@ -1604,11 +1604,11 @@ def test_validate_content_multiple_content_retrieval_extensions(): # Add 2 content retrieval extensions content_retrieval_extension = { - "url": "https://fhir.nhs.uk/England/StructureDefinition/Extension-England-RetrievalMechanism", + "url": "https://fhir.nhs.uk/England/StructureDefinition/Extension-England-NRLRetrievalMechanism", "valueCodeableConcept": { "coding": [ { - "system": "https://fhir.nhs.uk/England/CodeSystem/England-RetrievalMechanism", + "system": "https://fhir.nhs.uk/England/CodeSystem/England-NRLRetrievalMechanism", "code": "Direct", "display": "Direct", } @@ -1634,7 +1634,7 @@ def test_validate_content_multiple_content_retrieval_extensions(): } ] }, - "diagnostics": "Invalid content retrieval extension: Extension must have one content retrieval extension, see: ('https://fhir.nhs.uk/England/ValueSet/England-RetrievalMechanism')", + "diagnostics": "Invalid content retrieval extension: Extension must have one content retrieval extension, see: ('https://fhir.nhs.uk/England/ValueSet/England-NRLRetrievalMechanism')", "expression": ["content[0].extension"], } @@ -1672,11 +1672,11 @@ def test_validate_two_content_with_different_retrieval_mechanisms(): "format": unstructured_format, "extension": [ { - "url": "https://fhir.nhs.uk/England/StructureDefinition/Extension-England-RetrievalMechanism", + "url": "https://fhir.nhs.uk/England/StructureDefinition/Extension-England-NRLRetrievalMechanism", "valueCodeableConcept": { "coding": [ { - "system": "https://fhir.nhs.uk/England/CodeSystem/England-RetrievalMechanism", + "system": "https://fhir.nhs.uk/England/CodeSystem/England-NRLRetrievalMechanism", "code": "SSP", "display": "Spine Secure Proxy", } @@ -1713,11 +1713,11 @@ def test_validate_two_content_with_different_retrieval_mechanisms(): "format": unstructured_format, "extension": [ { - "url": "https://fhir.nhs.uk/England/StructureDefinition/Extension-England-RetrievalMechanism", + "url": "https://fhir.nhs.uk/England/StructureDefinition/Extension-England-NRLRetrievalMechanism", "valueCodeableConcept": { "coding": [ { - "system": "https://fhir.nhs.uk/England/CodeSystem/England-RetrievalMechanism", + "system": "https://fhir.nhs.uk/England/CodeSystem/England-NRLRetrievalMechanism", "code": "Direct", "display": "Direct", } @@ -1737,17 +1737,17 @@ def test_validate_two_content_with_different_retrieval_mechanisms(): def test_validate_content_retrieval_lowercase_urls(): - """Test that the extension is recognised when 'RetrievalMechanism' is in lowercase and throws an error for mismatching the URL case.""" + """Test that the extension is recognised when 'NRLRetrievalMechanism' is in lowercase and throws an error for mismatching the URL case.""" validator = DocumentReferenceValidator() document_ref_data = load_document_reference_json("Y05868-736253002-Valid") document_ref_data["content"][0]["extension"] = [ { - "url": "https://fhir.nhs.uk/england/structuredefinition/extension-england-retrievalmechanism", + "url": "https://fhir.nhs.uk/england/structuredefinition/extension-england-nrlretrievalmechanism", "valueCodeableConcept": { "coding": [ { - "system": "https://fhir.nhs.uk/England/CodeSystem/England-RetrievalMechanism", + "system": "https://fhir.nhs.uk/England/CodeSystem/England-NRLRetrievalMechanism", "code": "Direct", "display": "Direct", } @@ -1784,7 +1784,7 @@ def test_validate_content_retrieval_lowercase_urls(): } ] }, - "diagnostics": "Invalid content retrieval extension (content[0].extension[0].url: Input should be 'https://fhir.nhs.uk/England/StructureDefinition/Extension-England-RetrievalMechanism', see: https://fhir.nhs.uk/England/ValueSet/England-RetrievalMechanism)", + "diagnostics": "Invalid content retrieval extension (content[0].extension[0].url: Input should be 'https://fhir.nhs.uk/England/StructureDefinition/Extension-England-NRLRetrievalMechanism', see: https://fhir.nhs.uk/England/ValueSet/England-NRLRetrievalMechanism)", "expression": ["content[0].extension[0].url"], } @@ -1805,12 +1805,12 @@ def make_content_stability_extension(code, display): def make_retrieval_mechanism_extension(code, display): - return RetrievalMechanismExtension( - url="https://fhir.nhs.uk/England/StructureDefinition/Extension-England-RetrievalMechanism", - valueCodeableConcept=RetrievalMechanismExtensionValueCodeableConcept( + return NRLRetrievalMechanismExtension( + url="https://fhir.nhs.uk/England/StructureDefinition/Extension-England-NRLRetrievalMechanism", + valueCodeableConcept=NRLRetrievalMechanismExtensionValueCodeableConcept( coding=[ - RetrievalMechanismExtensionCoding( - system="https://fhir.nhs.uk/England/CodeSystem/England-RetrievalMechanism", + NRLRetrievalMechanismExtensionCoding( + system="https://fhir.nhs.uk/England/CodeSystem/England-NRLRetrievalMechanism", code=code, display=display, ) @@ -1837,7 +1837,7 @@ def test_has_valid_extensions_multiple_retrieval_mechanism(): ] assert validator._has_valid_extensions(extensions, 0) is False assert any( - "Invalid content retrieval extension: Extension must have one content retrieval extension, see: ('https://fhir.nhs.uk/England/ValueSet/England-RetrievalMechanism')" + "Invalid content retrieval extension: Extension must have one content retrieval extension, see: ('https://fhir.nhs.uk/England/ValueSet/England-NRLRetrievalMechanism')" in issue.diagnostics for issue in validator.result.issues ) @@ -1927,11 +1927,11 @@ def test_validate_structured_format_with_text_html_for_incontext_launch(): } document_ref_data["content"][0]["extension"] = [ { - "url": "https://fhir.nhs.uk/England/StructureDefinition/Extension-England-RetrievalMechanism", + "url": "https://fhir.nhs.uk/England/StructureDefinition/Extension-England-NRLRetrievalMechanism", "valueCodeableConcept": { "coding": [ { - "system": "https://fhir.nhs.uk/England/CodeSystem/England-RetrievalMechanism", + "system": "https://fhir.nhs.uk/England/CodeSystem/England-NRLRetrievalMechanism", "code": "InContext", "display": "Direct using In-Context", } diff --git a/layer/nrlf/core/validators.py b/layer/nrlf/core/validators.py index 768a47dc4..bac27ca9f 100644 --- a/layer/nrlf/core/validators.py +++ b/layer/nrlf/core/validators.py @@ -27,7 +27,7 @@ from nrlf.producer.fhir.r4 import model as producer_model from nrlf.producer.fhir.r4.model import ( ContentStabilityExtension, - RetrievalMechanismExtension, + NRLRetrievalMechanismExtension, ) @@ -547,7 +547,7 @@ def _has_valid_extensions(self, extensions, i): self.result.add_error( issue_code="business-rule", error_code="UNPROCESSABLE_ENTITY", - diagnostics="Invalid content retrieval extension: Extension must have one content retrieval extension, see: ('https://fhir.nhs.uk/England/ValueSet/England-RetrievalMechanism')", + diagnostics="Invalid content retrieval extension: Extension must have one content retrieval extension, see: ('https://fhir.nhs.uk/England/ValueSet/England-NRLRetrievalMechanism')", field=f"content[{i}].extension", ) return False @@ -588,13 +588,13 @@ def _validate_content_stability_extension(self, extension, i, j): def _validate_retrieval_mechanism_extension(self, extension, i, j): try: - RetrievalMechanismExtension.model_validate(extension.model_dump()) + NRLRetrievalMechanismExtension.model_validate(extension.model_dump()) except ValidationError as exc: raise ParseError.from_validation_error( exc, details=SpineErrorConcept.from_code("BAD_REQUEST"), msg="Invalid content retrieval extension", - value_set="https://fhir.nhs.uk/England/ValueSet/England-RetrievalMechanism", + value_set="https://fhir.nhs.uk/England/ValueSet/England-NRLRetrievalMechanism", root_location=("content", i, "extension", j), ) from None coding = extension.valueCodeableConcept.coding[0] diff --git a/layer/nrlf/producer/fhir/r4/model.py b/layer/nrlf/producer/fhir/r4/model.py index 714cc39f2..dd6a6b09a 100644 --- a/layer/nrlf/producer/fhir/r4/model.py +++ b/layer/nrlf/producer/fhir/r4/model.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: swagger.yaml -# timestamp: 2025-09-05T08:22:07+00:00 +# timestamp: 2025-09-12T10:25:26+00:00 from __future__ import annotations @@ -284,8 +284,10 @@ class ContentStabilityExtensionCoding(Coding): display: Literal["Static", "Dynamic"] -class RetrievalMechanismExtensionCoding(Coding): - system: Literal["https://fhir.nhs.uk/England/CodeSystem/England-RetrievalMechanism"] +class NRLRetrievalMechanismExtensionCoding(Coding): + system: Literal[ + "https://fhir.nhs.uk/England/CodeSystem/England-NRLRetrievalMechanism" + ] code: Literal["SSP", "Direct", "LDR", "InContext"] display: Literal[ "Spine Secure Proxy", @@ -560,9 +562,9 @@ class ContentStabilityExtensionValueCodeableConcept(CodeableConcept): ] -class RetrievalMechanismExtensionValueCodeableConcept(CodeableConcept): +class NRLRetrievalMechanismExtensionValueCodeableConcept(CodeableConcept): coding: Annotated[ - List[RetrievalMechanismExtensionCoding], Field(max_length=1, min_length=1) + List[NRLRetrievalMechanismExtensionCoding], Field(max_length=1, min_length=1) ] @@ -627,11 +629,11 @@ class ContentStabilityExtension(Extension): valueCodeableConcept: ContentStabilityExtensionValueCodeableConcept -class RetrievalMechanismExtension(Extension): +class NRLRetrievalMechanismExtension(Extension): url: Literal[ - "https://fhir.nhs.uk/England/StructureDefinition/Extension-England-RetrievalMechanism" + "https://fhir.nhs.uk/England/StructureDefinition/Extension-England-NRLRetrievalMechanism" ] - valueCodeableConcept: RetrievalMechanismExtensionValueCodeableConcept + valueCodeableConcept: NRLRetrievalMechanismExtensionValueCodeableConcept class OperationOutcome(Parent): @@ -693,7 +695,9 @@ class DocumentReferenceContent(Parent): ), ] extension: Annotated[ - List[Union[ContentStabilityExtension, RetrievalMechanismExtension, Extension]], + List[ + Union[ContentStabilityExtension, NRLRetrievalMechanismExtension, Extension] + ], Field(min_length=1), ] diff --git a/layer/nrlf/producer/fhir/r4/strict_model.py b/layer/nrlf/producer/fhir/r4/strict_model.py index 6e3886bcf..94603fc7b 100644 --- a/layer/nrlf/producer/fhir/r4/strict_model.py +++ b/layer/nrlf/producer/fhir/r4/strict_model.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: # filename: swagger.yaml -# timestamp: 2025-09-05T08:22:08+00:00 +# timestamp: 2025-09-12T10:25:28+00:00 from __future__ import annotations @@ -255,8 +255,10 @@ class ContentStabilityExtensionCoding(Coding): display: Literal["Static", "Dynamic"] -class RetrievalMechanismExtensionCoding(Coding): - system: Literal["https://fhir.nhs.uk/England/CodeSystem/England-RetrievalMechanism"] +class NRLRetrievalMechanismExtensionCoding(Coding): + system: Literal[ + "https://fhir.nhs.uk/England/CodeSystem/England-NRLRetrievalMechanism" + ] code: Literal["SSP", "Direct", "LDR", "InContext"] display: Literal[ "Spine Secure Proxy", @@ -497,9 +499,9 @@ class ContentStabilityExtensionValueCodeableConcept(CodeableConcept): ] -class RetrievalMechanismExtensionValueCodeableConcept(CodeableConcept): +class NRLRetrievalMechanismExtensionValueCodeableConcept(CodeableConcept): coding: Annotated[ - List[RetrievalMechanismExtensionCoding], Field(max_length=1, min_length=1) + List[NRLRetrievalMechanismExtensionCoding], Field(max_length=1, min_length=1) ] @@ -558,11 +560,11 @@ class ContentStabilityExtension(Extension): valueCodeableConcept: ContentStabilityExtensionValueCodeableConcept -class RetrievalMechanismExtension(Extension): +class NRLRetrievalMechanismExtension(Extension): url: Literal[ - "https://fhir.nhs.uk/England/StructureDefinition/Extension-England-RetrievalMechanism" + "https://fhir.nhs.uk/England/StructureDefinition/Extension-England-NRLRetrievalMechanism" ] - valueCodeableConcept: RetrievalMechanismExtensionValueCodeableConcept + valueCodeableConcept: NRLRetrievalMechanismExtensionValueCodeableConcept class OperationOutcome(Parent): @@ -618,7 +620,9 @@ class DocumentReferenceContent(Parent): ), ] extension: Annotated[ - List[Union[ContentStabilityExtension, RetrievalMechanismExtension, Extension]], + List[ + Union[ContentStabilityExtension, NRLRetrievalMechanismExtension, Extension] + ], Field(min_length=1), ] diff --git a/resources/fhir/NRLF-Retrieval-CodeSystem.json b/resources/fhir/NRLF-Retrieval-CodeSystem.json index 406c02677..76eaeb7de 100644 --- a/resources/fhir/NRLF-Retrieval-CodeSystem.json +++ b/resources/fhir/NRLF-Retrieval-CodeSystem.json @@ -1,9 +1,9 @@ { "resourceType": "CodeSystem", - "id": "England-RetrievalMechanismNRL", - "url": "https://fhir.nhs.uk/England/CodeSystem/England-RetrievalMechanismNRL", + "id": "England-NRLRetrievalMechanismNRL", + "url": "https://fhir.nhs.uk/England/CodeSystem/England-NRLRetrievalMechanismNRL", "version": "1.1.0", - "name": "EnglandRetrievalMechanismNRL", + "name": "EnglandNRLRetrievalMechanismNRL", "title": "England Retrieval MechanismNRL", "status": "draft", "experimental": false, diff --git a/resources/fhir/NRLF-RetrievalMechanism-ValueSet.json b/resources/fhir/NRLF-RetrievalMechanism-ValueSet.json index e680a09d2..989ac03e4 100644 --- a/resources/fhir/NRLF-RetrievalMechanism-ValueSet.json +++ b/resources/fhir/NRLF-RetrievalMechanism-ValueSet.json @@ -1,9 +1,9 @@ { "resourceType": "ValueSet", - "id": "England-RetrievalMechanism", - "url": "https://fhir.nhs.uk/England/ValueSet/England-RetrievalMechanism", + "id": "England-NRLRetrievalMechanism", + "url": "https://fhir.nhs.uk/England/ValueSet/England-NRLRetrievalMechanism", "version": "1.1.0", - "name": "EnglandRetrievalMechanism", + "name": "EnglandNRLRetrievalMechanism", "status": "draft", "date": "2025-02-28", "publisher": "NHS Digital", @@ -20,7 +20,7 @@ "compose": { "include": [ { - "system": "https://fhir.nhs.uk/England/CodeSystem/England-RetrievalMechanismNRL", + "system": "https://fhir.nhs.uk/England/CodeSystem/England-NRLRetrievalMechanismNRL", "concept": [ { "code": "Direct", diff --git a/tests/data/samples/SYNTHETIC_IN_CONTEXT_LAUNCH_EXAMPLE.json b/tests/data/samples/SYNTHETIC_IN_CONTEXT_LAUNCH_EXAMPLE.json index 94b54f179..4daa75f8f 100644 --- a/tests/data/samples/SYNTHETIC_IN_CONTEXT_LAUNCH_EXAMPLE.json +++ b/tests/data/samples/SYNTHETIC_IN_CONTEXT_LAUNCH_EXAMPLE.json @@ -79,13 +79,13 @@ "valueCodeableConcept": { "coding": [ { - "system": "https://fhir.nhs.uk/England/CodeSystem/England-RetrievalMechanism", + "system": "https://fhir.nhs.uk/England/CodeSystem/England-NRLRetrievalMechanism", "code": "InContext", "display": "Direct using In-Context" } ] }, - "url": "https://fhir.nhs.uk/England/StructureDefinition/Extension-England-RetrievalMechanism" + "url": "https://fhir.nhs.uk/England/StructureDefinition/Extension-England-NRLRetrievalMechanism" } ] } diff --git a/tests/features/consumer/readDocumentReference-success.feature b/tests/features/consumer/readDocumentReference-success.feature index 4fd465fde..9a3c81d55 100644 --- a/tests/features/consumer/readDocumentReference-success.feature +++ b/tests/features/consumer/readDocumentReference-success.feature @@ -89,11 +89,11 @@ Feature: Consumer - readDocumentReference - Success Scenarios } }, { - "url": "https://fhir.nhs.uk/England/StructureDefinition/Extension-England-RetrievalMechanism", + "url": "https://fhir.nhs.uk/England/StructureDefinition/Extension-England-NRLRetrievalMechanism", "valueCodeableConcept": { "coding": [ { - "system": "https://fhir.nhs.uk/England/CodeSystem/England-RetrievalMechanism", + "system": "https://fhir.nhs.uk/England/CodeSystem/England-NRLRetrievalMechanism", "code": "Direct", "display": "Direct" } @@ -206,11 +206,11 @@ Feature: Consumer - readDocumentReference - Success Scenarios } }, { - "url": "https://fhir.nhs.uk/England/StructureDefinition/Extension-England-RetrievalMechanism", + "url": "https://fhir.nhs.uk/England/StructureDefinition/Extension-England-NRLRetrievalMechanism", "valueCodeableConcept": { "coding": [ { - "system": "https://fhir.nhs.uk/England/CodeSystem/England-RetrievalMechanism", + "system": "https://fhir.nhs.uk/England/CodeSystem/England-NRLRetrievalMechanism", "code": "Direct", "display": "Direct" } diff --git a/tests/features/producer/createDocumentReference-failure.feature b/tests/features/producer/createDocumentReference-failure.feature index 6651b90ac..ff1d2bfda 100644 --- a/tests/features/producer/createDocumentReference-failure.feature +++ b/tests/features/producer/createDocumentReference-failure.feature @@ -1045,7 +1045,7 @@ Feature: Producer - createDocumentReference - Failure Scenarios } """ - Scenario: RetrievalMechanism extension is empty + Scenario: NRLRetrievalMechanism extension is empty Given the application 'DataShare' (ID 'z00z-y11y-x22x') is registered to access the API And the organisation 'TSTCUS' is authorised to access pointer types: | system | value | @@ -1090,7 +1090,7 @@ Feature: Producer - createDocumentReference - Failure Scenarios } """ - Scenario: Multiple RetrievalMechanism extensions in content + Scenario: Multiple NRLRetrievalMechanism extensions in content Given the application 'DataShare' (ID 'z00z-y11y-x22x') is registered to access the API And the organisation 'TSTCUS' is authorised to access pointer types: | system | value | @@ -1110,11 +1110,11 @@ Feature: Producer - createDocumentReference - Failure Scenarios }, "extension": [ { - "url": "https://fhir.nhs.uk/England/StructureDefinition/Extension-England-RetrievalMechanism", + "url": "https://fhir.nhs.uk/England/StructureDefinition/Extension-England-NRLRetrievalMechanism", "valueCodeableConcept": { "coding": [ { - "system": "https://fhir.nhs.uk/England/CodeSystem/England-RetrievalMechanism", + "system": "https://fhir.nhs.uk/England/CodeSystem/England-NRLRetrievalMechanism", "code": "Direct", "display": "Direct" } @@ -1122,11 +1122,11 @@ Feature: Producer - createDocumentReference - Failure Scenarios } }, { - "url": "https://fhir.nhs.uk/England/StructureDefinition/Extension-England-RetrievalMechanism", + "url": "https://fhir.nhs.uk/England/StructureDefinition/Extension-England-NRLRetrievalMechanism", "valueCodeableConcept": { "coding": [ { - "system": "https://fhir.nhs.uk/England/CodeSystem/England-RetrievalMechanism", + "system": "https://fhir.nhs.uk/England/CodeSystem/England-NRLRetrievalMechanism", "code": "Direct", "display": "Direct" } @@ -1165,12 +1165,12 @@ Feature: Producer - createDocumentReference - Failure Scenarios } ] }, - "diagnostics": "Invalid content retrieval extension: Extension must have one content retrieval extension, see: ('https://fhir.nhs.uk/England/ValueSet/England-RetrievalMechanism')", + "diagnostics": "Invalid content retrieval extension: Extension must have one content retrieval extension, see: ('https://fhir.nhs.uk/England/ValueSet/England-NRLRetrievalMechanism')", "expression": ["content[0].extension"] } """ - Scenario: RetrievalMechanism extension with mismatched code and display + Scenario: NRLRetrievalMechanism extension with mismatched code and display Given the application 'DataShare' (ID 'z00z-y11y-x22x') is registered to access the API And the organisation 'TSTCUS' is authorised to access pointer types: | system | value | @@ -1190,11 +1190,11 @@ Feature: Producer - createDocumentReference - Failure Scenarios }, "extension": [ { - "url": "https://fhir.nhs.uk/England/StructureDefinition/Extension-England-RetrievalMechanism", + "url": "https://fhir.nhs.uk/England/StructureDefinition/Extension-England-NRLRetrievalMechanism", "valueCodeableConcept": { "coding": [ { - "system": "https://fhir.nhs.uk/England/CodeSystem/England-RetrievalMechanism", + "system": "https://fhir.nhs.uk/England/CodeSystem/England-NRLRetrievalMechanism", "code": "Direct", "display": "Spine Secure Proxy" } @@ -1238,7 +1238,7 @@ Feature: Producer - createDocumentReference - Failure Scenarios } """ - Scenario: RetrievalMechanism extension with invalid URL case + Scenario: NRLRetrievalMechanism extension with invalid URL case Given the application 'DataShare' (ID 'z00z-y11y-x22x') is registered to access the API And the organisation 'TSTCUS' is authorised to access pointer types: | system | value | @@ -1258,11 +1258,11 @@ Feature: Producer - createDocumentReference - Failure Scenarios }, "extension": [ { - "url": "https://fhir.nhs.uk/england/structuredefinition/extension-england-retrievalmechanism", + "url": "https://fhir.nhs.uk/england/structuredefinition/extension-england-nrlretrievalmechanism", "valueCodeableConcept": { "coding": [ { - "system": "https://fhir.nhs.uk/England/CodeSystem/England-RetrievalMechanism", + "system": "https://fhir.nhs.uk/England/CodeSystem/England-NRLRetrievalMechanism", "code": "Direct", "display": "Direct" } @@ -1301,12 +1301,12 @@ Feature: Producer - createDocumentReference - Failure Scenarios } ] }, - "diagnostics": "Invalid content retrieval extension (content[0].extension[0].url: Input should be 'https://fhir.nhs.uk/England/StructureDefinition/Extension-England-RetrievalMechanism', see: https://fhir.nhs.uk/England/ValueSet/England-RetrievalMechanism)", + "diagnostics": "Invalid content retrieval extension (content[0].extension[0].url: Input should be 'https://fhir.nhs.uk/England/StructureDefinition/Extension-England-NRLRetrievalMechanism', see: https://fhir.nhs.uk/England/ValueSet/England-NRLRetrievalMechanism)", "expression": ["content[0].extension[0].url"] } """ - Scenario: RetrievalMechanism extension with invalid code + Scenario: NRLRetrievalMechanism extension with invalid code Given the application 'DataShare' (ID 'z00z-y11y-x22x') is registered to access the API And the organisation 'TSTCUS' is authorised to access pointer types: | system | value | @@ -1326,11 +1326,11 @@ Feature: Producer - createDocumentReference - Failure Scenarios }, "extension": [ { - "url": "https://fhir.nhs.uk/England/StructureDefinition/Extension-England-RetrievalMechanism", + "url": "https://fhir.nhs.uk/England/StructureDefinition/Extension-England-NRLRetrievalMechanism", "valueCodeableConcept": { "coding": [ { - "system": "https://fhir.nhs.uk/England/CodeSystem/England-RetrievalMechanism", + "system": "https://fhir.nhs.uk/England/CodeSystem/England-NRLRetrievalMechanism", "code": "INVALID_CODE", "display": "Direct" } @@ -1369,12 +1369,12 @@ Feature: Producer - createDocumentReference - Failure Scenarios } ] }, - "diagnostics": "Invalid content retrieval extension (content[0].extension[0].valueCodeableConcept.coding[0].code: Input should be 'SSP', 'Direct', 'LDR' or 'InContext', see: https://fhir.nhs.uk/England/ValueSet/England-RetrievalMechanism)", + "diagnostics": "Invalid content retrieval extension (content[0].extension[0].valueCodeableConcept.coding[0].code: Input should be 'SSP', 'Direct', 'LDR' or 'InContext', see: https://fhir.nhs.uk/England/ValueSet/England-NRLRetrievalMechanism)", "expression": ["content[0].extension[0].valueCodeableConcept.coding[0].code"] } """ - Scenario: RetrievalMechanism extension with missing display + Scenario: NRLRetrievalMechanism extension with missing display Given the application 'DataShare' (ID 'z00z-y11y-x22x') is registered to access the API And the organisation 'TSTCUS' is authorised to access pointer types: | system | value | @@ -1394,11 +1394,11 @@ Feature: Producer - createDocumentReference - Failure Scenarios }, "extension": [ { - "url": "https://fhir.nhs.uk/England/StructureDefinition/Extension-England-RetrievalMechanism", + "url": "https://fhir.nhs.uk/England/StructureDefinition/Extension-England-NRLRetrievalMechanism", "valueCodeableConcept": { "coding": [ { - "system": "https://fhir.nhs.uk/England/CodeSystem/England-RetrievalMechanism", + "system": "https://fhir.nhs.uk/England/CodeSystem/England-NRLRetrievalMechanism", "code": "Direct" } ] @@ -1436,12 +1436,12 @@ Feature: Producer - createDocumentReference - Failure Scenarios } ] }, - "diagnostics": "Invalid content retrieval extension (content[0].extension[0].valueCodeableConcept.coding[0].display: Input should be 'Spine Secure Proxy', 'Direct', 'Large Document Retrieval' or 'Direct using In-Context', see: https://fhir.nhs.uk/England/ValueSet/England-RetrievalMechanism)", + "diagnostics": "Invalid content retrieval extension (content[0].extension[0].valueCodeableConcept.coding[0].display: Input should be 'Spine Secure Proxy', 'Direct', 'Large Document Retrieval' or 'Direct using In-Context', see: https://fhir.nhs.uk/England/ValueSet/England-NRLRetrievalMechanism)", "expression": ["content[0].extension[0].valueCodeableConcept.coding[0].display"] } """ - Scenario: RetrievalMechanism extension with missing valueCodeableConcept + Scenario: NRLRetrievalMechanism extension with missing valueCodeableConcept Given the application 'DataShare' (ID 'z00z-y11y-x22x') is registered to access the API And the organisation 'TSTCUS' is authorised to access pointer types: | system | value | @@ -1461,7 +1461,7 @@ Feature: Producer - createDocumentReference - Failure Scenarios }, "extension": [ { - "url": "https://fhir.nhs.uk/England/StructureDefinition/Extension-England-RetrievalMechanism" + "url": "https://fhir.nhs.uk/England/StructureDefinition/Extension-England-NRLRetrievalMechanism" }, { "url": "https://fhir.nhs.uk/England/StructureDefinition/Extension-England-ContentStability", @@ -1495,7 +1495,7 @@ Feature: Producer - createDocumentReference - Failure Scenarios } ] }, - "diagnostics": "Invalid content retrieval extension (content[0].extension[0].valueCodeableConcept: Input should be a valid dictionary or instance of RetrievalMechanismExtensionValueCodeableConcept, see: https://fhir.nhs.uk/England/ValueSet/England-RetrievalMechanism)", + "diagnostics": "Invalid content retrieval extension (content[0].extension[0].valueCodeableConcept: Input should be a valid dictionary or instance of NRLRetrievalMechanismExtensionValueCodeableConcept, see: https://fhir.nhs.uk/England/ValueSet/England-NRLRetrievalMechanism)", "expression": ["content[0].extension[0].valueCodeableConcept"] } """ diff --git a/tests/features/producer/createDocumentReference-success.feature b/tests/features/producer/createDocumentReference-success.feature index fa654a1fd..bb8218a43 100644 --- a/tests/features/producer/createDocumentReference-success.feature +++ b/tests/features/producer/createDocumentReference-success.feature @@ -410,11 +410,11 @@ Feature: Producer - createDocumentReference - Success Scenarios } }, { - "url": "https://fhir.nhs.uk/England/StructureDefinition/Extension-England-RetrievalMechanism", + "url": "https://fhir.nhs.uk/England/StructureDefinition/Extension-England-NRLRetrievalMechanism", "valueCodeableConcept": { "coding": [ { - "system": "https://fhir.nhs.uk/England/CodeSystem/England-RetrievalMechanism", + "system": "https://fhir.nhs.uk/England/CodeSystem/England-NRLRetrievalMechanism", "code": "Direct", "display": "Direct" } @@ -447,11 +447,11 @@ Feature: Producer - createDocumentReference - Success Scenarios } }, { - "url": "https://fhir.nhs.uk/England/StructureDefinition/Extension-England-RetrievalMechanism", + "url": "https://fhir.nhs.uk/England/StructureDefinition/Extension-England-NRLRetrievalMechanism", "valueCodeableConcept": { "coding": [ { - "system": "https://fhir.nhs.uk/England/CodeSystem/England-RetrievalMechanism", + "system": "https://fhir.nhs.uk/England/CodeSystem/England-NRLRetrievalMechanism", "code": "SSP", "display": "Spine Secure Proxy" } @@ -524,11 +524,11 @@ Feature: Producer - createDocumentReference - Success Scenarios } }, { - "url": "https://fhir.nhs.uk/England/StructureDefinition/Extension-England-RetrievalMechanism", + "url": "https://fhir.nhs.uk/England/StructureDefinition/Extension-England-NRLRetrievalMechanism", "valueCodeableConcept": { "coding": [ { - "system": "https://fhir.nhs.uk/England/CodeSystem/England-RetrievalMechanism", + "system": "https://fhir.nhs.uk/England/CodeSystem/England-NRLRetrievalMechanism", "code": "InContext", "display": "Direct using In-Context" } diff --git a/tests/features/producer/readDocumentReference-success.feature b/tests/features/producer/readDocumentReference-success.feature index c8d5215d4..f690c5bcc 100644 --- a/tests/features/producer/readDocumentReference-success.feature +++ b/tests/features/producer/readDocumentReference-success.feature @@ -91,11 +91,11 @@ Feature: Producer - readDocumentReference - Success Scenarios } }, { - "url": "https://fhir.nhs.uk/England/StructureDefinition/Extension-England-RetrievalMechanism", + "url": "https://fhir.nhs.uk/England/StructureDefinition/Extension-England-NRLRetrievalMechanism", "valueCodeableConcept": { "coding": [ { - "system": "https://fhir.nhs.uk/England/CodeSystem/England-RetrievalMechanism", + "system": "https://fhir.nhs.uk/England/CodeSystem/England-NRLRetrievalMechanism", "code": "Direct", "display": "Direct" } diff --git a/tests/features/utils/data.py b/tests/features/utils/data.py index dab741c80..b335e26ac 100644 --- a/tests/features/utils/data.py +++ b/tests/features/utils/data.py @@ -23,10 +23,10 @@ NRLCodeableConcept, NRLCoding, NRLFormatCode, + NRLRetrievalMechanismExtension, + NRLRetrievalMechanismExtensionCoding, + NRLRetrievalMechanismExtensionValueCodeableConcept, Reference, - RetrievalMechanismExtension, - RetrievalMechanismExtensionCoding, - RetrievalMechanismExtensionValueCodeableConcept, ) from tests.features.utils.constants import ( DEFAULT_TEST_AUTHOR, @@ -81,11 +81,11 @@ def create_test_document_reference(items: dict) -> DocumentReference: ] ), ), - RetrievalMechanismExtension( + NRLRetrievalMechanismExtension( url=CONTENT_RETRIEVAL_EXTENSION_URL, - valueCodeableConcept=RetrievalMechanismExtensionValueCodeableConcept( + valueCodeableConcept=NRLRetrievalMechanismExtensionValueCodeableConcept( coding=[ - RetrievalMechanismExtensionCoding( + NRLRetrievalMechanismExtensionCoding( system=CONTENT_RETRIEVAL_SYSTEM_URL, code="Direct", display="Direct", From e3033e30417d90da1382a59c64ca1d80b1270e1a Mon Sep 17 00:00:00 2001 From: "Axel Garcia K." Date: Fri, 12 Sep 2025 12:58:20 +0100 Subject: [PATCH 2/2] NRL-1612 Fix retrieval mechanism urls and titles --- resources/fhir/NRLF-Retrieval-CodeSystem.json | 8 ++++---- resources/fhir/NRLF-RetrievalMechanism-ValueSet.json | 3 ++- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/resources/fhir/NRLF-Retrieval-CodeSystem.json b/resources/fhir/NRLF-Retrieval-CodeSystem.json index 76eaeb7de..9bb302ad0 100644 --- a/resources/fhir/NRLF-Retrieval-CodeSystem.json +++ b/resources/fhir/NRLF-Retrieval-CodeSystem.json @@ -1,10 +1,10 @@ { "resourceType": "CodeSystem", - "id": "England-NRLRetrievalMechanismNRL", - "url": "https://fhir.nhs.uk/England/CodeSystem/England-NRLRetrievalMechanismNRL", + "id": "England-NRLRetrievalMechanism", + "url": "https://fhir.nhs.uk/England/CodeSystem/England-NRLRetrievalMechanism", "version": "1.1.0", - "name": "EnglandNRLRetrievalMechanismNRL", - "title": "England Retrieval MechanismNRL", + "name": "EnglandNRLRetrievalMechanism", + "title": "England NRL Retrieval Mechanism", "status": "draft", "experimental": false, "date": "2025-02-28", diff --git a/resources/fhir/NRLF-RetrievalMechanism-ValueSet.json b/resources/fhir/NRLF-RetrievalMechanism-ValueSet.json index 989ac03e4..34fd83494 100644 --- a/resources/fhir/NRLF-RetrievalMechanism-ValueSet.json +++ b/resources/fhir/NRLF-RetrievalMechanism-ValueSet.json @@ -4,6 +4,7 @@ "url": "https://fhir.nhs.uk/England/ValueSet/England-NRLRetrievalMechanism", "version": "1.1.0", "name": "EnglandNRLRetrievalMechanism", + "title": "England NRL Retrieval Mechanism", "status": "draft", "date": "2025-02-28", "publisher": "NHS Digital", @@ -20,7 +21,7 @@ "compose": { "include": [ { - "system": "https://fhir.nhs.uk/England/CodeSystem/England-NRLRetrievalMechanismNRL", + "system": "https://fhir.nhs.uk/England/CodeSystem/England-NRLRetrievalMechanism", "concept": [ { "code": "Direct",