Skip to content

Commit a4aeccd

Browse files
Merge pull request #1034 from NHSDigital/feature/axkr1-NRL-1612-update-retrievalmechanism-url
NRL-1612 Consistent NRLRetrievalMechanism url
2 parents 5cfe71d + e3033e3 commit a4aeccd

File tree

16 files changed

+141
-128
lines changed

16 files changed

+141
-128
lines changed

api/consumer/swagger.yaml

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -812,7 +812,7 @@ components:
812812
items:
813813
oneOf:
814814
- $ref: "#/components/schemas/ContentStabilityExtension"
815-
- $ref: "#/components/schemas/RetrievalMechanismExtension"
815+
- $ref: "#/components/schemas/NRLRetrievalMechanismExtension"
816816
- $ref: "#/components/schemas/Extension"
817817
description: Additional extensions which include Content Stability and Retrieval Mechanism.
818818
minItems: 1
@@ -977,42 +977,42 @@ components:
977977
- system
978978
- code
979979
- display
980-
RetrievalMechanismExtension:
980+
NRLRetrievalMechanismExtension:
981981
allOf:
982982
- $ref: "#/components/schemas/Extension"
983983
- type: object
984984
properties:
985985
url:
986986
type: string
987987
enum:
988-
- "https://fhir.nhs.uk/England/StructureDefinition/Extension-England-RetrievalMechanism"
988+
- "https://fhir.nhs.uk/England/StructureDefinition/Extension-England-NRLRetrievalMechanism"
989989
valueCodeableConcept:
990-
$ref: "#/components/schemas/RetrievalMechanismExtensionValueCodeableConcept"
990+
$ref: "#/components/schemas/NRLRetrievalMechanismExtensionValueCodeableConcept"
991991
required:
992992
- url
993993
- valueCodeableConcept
994-
RetrievalMechanismExtensionValueCodeableConcept:
994+
NRLRetrievalMechanismExtensionValueCodeableConcept:
995995
allOf:
996996
- $ref: "#/components/schemas/CodeableConcept"
997997
- type: object
998998
properties:
999999
coding:
10001000
type: array
10011001
items:
1002-
$ref: "#/components/schemas/RetrievalMechanismExtensionCoding"
1002+
$ref: "#/components/schemas/NRLRetrievalMechanismExtensionCoding"
10031003
minItems: 1
10041004
maxItems: 1
10051005
required:
10061006
- coding
1007-
RetrievalMechanismExtensionCoding:
1007+
NRLRetrievalMechanismExtensionCoding:
10081008
allOf:
10091009
- $ref: "#/components/schemas/Coding"
10101010
- type: object
10111011
properties:
10121012
system:
10131013
type: string
10141014
enum:
1015-
- "https://fhir.nhs.uk/England/CodeSystem/England-RetrievalMechanism"
1015+
- "https://fhir.nhs.uk/England/CodeSystem/England-NRLRetrievalMechanism"
10161016
code:
10171017
type: string
10181018
enum: ["SSP", "Direct", "LDR", "InContext"]

api/producer/swagger.yaml

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1417,7 +1417,7 @@ components:
14171417
items:
14181418
oneOf:
14191419
- $ref: "#/components/schemas/ContentStabilityExtension"
1420-
- $ref: "#/components/schemas/RetrievalMechanismExtension"
1420+
- $ref: "#/components/schemas/NRLRetrievalMechanismExtension"
14211421
- $ref: "#/components/schemas/Extension"
14221422
description: Additional extensions which include Content Stability and Retrieval Mechanism.
14231423
minItems: 1
@@ -1633,42 +1633,42 @@ components:
16331633
- system
16341634
- code
16351635
- display
1636-
RetrievalMechanismExtension:
1636+
NRLRetrievalMechanismExtension:
16371637
allOf:
16381638
- $ref: "#/components/schemas/Extension"
16391639
- type: object
16401640
properties:
16411641
url:
16421642
type: string
16431643
enum:
1644-
- "https://fhir.nhs.uk/England/StructureDefinition/Extension-England-RetrievalMechanism"
1644+
- "https://fhir.nhs.uk/England/StructureDefinition/Extension-England-NRLRetrievalMechanism"
16451645
valueCodeableConcept:
1646-
$ref: "#/components/schemas/RetrievalMechanismExtensionValueCodeableConcept"
1646+
$ref: "#/components/schemas/NRLRetrievalMechanismExtensionValueCodeableConcept"
16471647
required:
16481648
- url
16491649
- valueCodeableConcept
1650-
RetrievalMechanismExtensionValueCodeableConcept:
1650+
NRLRetrievalMechanismExtensionValueCodeableConcept:
16511651
allOf:
16521652
- $ref: "#/components/schemas/CodeableConcept"
16531653
- type: object
16541654
properties:
16551655
coding:
16561656
type: array
16571657
items:
1658-
$ref: "#/components/schemas/RetrievalMechanismExtensionCoding"
1658+
$ref: "#/components/schemas/NRLRetrievalMechanismExtensionCoding"
16591659
minItems: 1
16601660
maxItems: 1
16611661
required:
16621662
- coding
1663-
RetrievalMechanismExtensionCoding:
1663+
NRLRetrievalMechanismExtensionCoding:
16641664
allOf:
16651665
- $ref: "#/components/schemas/Coding"
16661666
- type: object
16671667
properties:
16681668
system:
16691669
type: string
16701670
enum:
1671-
- "https://fhir.nhs.uk/England/CodeSystem/England-RetrievalMechanism"
1671+
- "https://fhir.nhs.uk/England/CodeSystem/England-NRLRetrievalMechanism"
16721672
code:
16731673
type: string
16741674
enum: ["SSP", "Direct", "LDR", "InContext"]

layer/nrlf/consumer/fhir/r4/model.py

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# generated by datamodel-codegen:
22
# filename: swagger.yaml
3-
# timestamp: 2025-09-05T08:22:10+00:00
3+
# timestamp: 2025-09-12T10:25:30+00:00
44

55
from __future__ import annotations
66

@@ -240,8 +240,10 @@ class ContentStabilityExtensionCoding(Coding):
240240
display: Literal["Static", "Dynamic"]
241241

242242

243-
class RetrievalMechanismExtensionCoding(Coding):
244-
system: Literal["https://fhir.nhs.uk/England/CodeSystem/England-RetrievalMechanism"]
243+
class NRLRetrievalMechanismExtensionCoding(Coding):
244+
system: Literal[
245+
"https://fhir.nhs.uk/England/CodeSystem/England-NRLRetrievalMechanism"
246+
]
245247
code: Literal["SSP", "Direct", "LDR", "InContext"]
246248
display: Literal[
247249
"Spine Secure Proxy",
@@ -512,9 +514,9 @@ class ContentStabilityExtensionValueCodeableConcept(CodeableConcept):
512514
]
513515

514516

515-
class RetrievalMechanismExtensionValueCodeableConcept(CodeableConcept):
517+
class NRLRetrievalMechanismExtensionValueCodeableConcept(CodeableConcept):
516518
coding: Annotated[
517-
List[RetrievalMechanismExtensionCoding], Field(max_length=1, min_length=1)
519+
List[NRLRetrievalMechanismExtensionCoding], Field(max_length=1, min_length=1)
518520
]
519521

520522

@@ -591,11 +593,11 @@ class ContentStabilityExtension(Extension):
591593
valueCodeableConcept: ContentStabilityExtensionValueCodeableConcept
592594

593595

594-
class RetrievalMechanismExtension(Extension):
596+
class NRLRetrievalMechanismExtension(Extension):
595597
url: Literal[
596-
"https://fhir.nhs.uk/England/StructureDefinition/Extension-England-RetrievalMechanism"
598+
"https://fhir.nhs.uk/England/StructureDefinition/Extension-England-NRLRetrievalMechanism"
597599
]
598-
valueCodeableConcept: RetrievalMechanismExtensionValueCodeableConcept
600+
valueCodeableConcept: NRLRetrievalMechanismExtensionValueCodeableConcept
599601

600602

601603
class OperationOutcome(Parent):
@@ -657,7 +659,9 @@ class DocumentReferenceContent(Parent):
657659
),
658660
]
659661
extension: Annotated[
660-
List[Union[ContentStabilityExtension, RetrievalMechanismExtension, Extension]],
662+
List[
663+
Union[ContentStabilityExtension, NRLRetrievalMechanismExtension, Extension]
664+
],
661665
Field(min_length=1),
662666
]
663667

layer/nrlf/core/constants.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -677,12 +677,12 @@ def coding_value(self):
677677
CONTENT_STABILITY_EXTENSION_URL = (
678678
"https://fhir.nhs.uk/England/StructureDefinition/Extension-England-ContentStability"
679679
)
680-
CONTENT_RETRIEVAL_EXTENSION_URL = "https://fhir.nhs.uk/England/StructureDefinition/Extension-England-RetrievalMechanism"
680+
CONTENT_RETRIEVAL_EXTENSION_URL = "https://fhir.nhs.uk/England/StructureDefinition/Extension-England-NRLRetrievalMechanism"
681681
CONTENT_STABILITY_SYSTEM_URL = (
682682
"https://fhir.nhs.uk/England/CodeSystem/England-NRLContentStability"
683683
)
684684
CONTENT_RETRIEVAL_SYSTEM_URL = (
685-
"https://fhir.nhs.uk/England/CodeSystem/England-RetrievalMechanism"
685+
"https://fhir.nhs.uk/England/CodeSystem/England-NRLRetrievalMechanism"
686686
)
687687
CONTENT_RETRIEVAL_CODE_MAP = {
688688
"Direct": "Direct",

layer/nrlf/core/tests/test_validators.py

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,11 @@
2121
ContentStabilityExtensionCoding,
2222
ContentStabilityExtensionValueCodeableConcept,
2323
DocumentReference,
24+
NRLRetrievalMechanismExtension,
25+
NRLRetrievalMechanismExtensionCoding,
26+
NRLRetrievalMechanismExtensionValueCodeableConcept,
2427
OperationOutcomeIssue,
2528
RequestQueryType,
26-
RetrievalMechanismExtension,
27-
RetrievalMechanismExtensionCoding,
28-
RetrievalMechanismExtensionValueCodeableConcept,
2929
)
3030
from nrlf.tests.data import load_document_reference_json
3131

@@ -1379,11 +1379,11 @@ def test_validate_content_extension_missing_content_stability():
13791379
# Remove all ContentStability extensions
13801380
document_ref_data["content"][0]["extension"] = [
13811381
{
1382-
"url": "https://fhir.nhs.uk/England/StructureDefinition/Extension-England-RetrievalMechanism",
1382+
"url": "https://fhir.nhs.uk/England/StructureDefinition/Extension-England-NRLRetrievalMechanism",
13831383
"valueCodeableConcept": {
13841384
"coding": [
13851385
{
1386-
"system": "https://fhir.nhs.uk/England/CodeSystem/England-RetrievalMechanism",
1386+
"system": "https://fhir.nhs.uk/England/CodeSystem/England-NRLRetrievalMechanism",
13871387
"code": "Direct",
13881388
"display": "Direct",
13891389
}
@@ -1421,11 +1421,11 @@ def test_validate_content_extension_mismatch_between_retrieval_mechanism_display
14211421
# Add a retrieval mechanism extension with a valid code but wrong display
14221422
document_ref_data["content"][0]["extension"].append(
14231423
{
1424-
"url": "https://fhir.nhs.uk/England/StructureDefinition/Extension-England-RetrievalMechanism",
1424+
"url": "https://fhir.nhs.uk/England/StructureDefinition/Extension-England-NRLRetrievalMechanism",
14251425
"valueCodeableConcept": {
14261426
"coding": [
14271427
{
1428-
"system": "https://fhir.nhs.uk/England/CodeSystem/England-RetrievalMechanism",
1428+
"system": "https://fhir.nhs.uk/England/CodeSystem/England-NRLRetrievalMechanism",
14291429
"code": "Direct",
14301430
"display": "Spine Secure Proxy",
14311431
}
@@ -1604,11 +1604,11 @@ def test_validate_content_multiple_content_retrieval_extensions():
16041604

16051605
# Add 2 content retrieval extensions
16061606
content_retrieval_extension = {
1607-
"url": "https://fhir.nhs.uk/England/StructureDefinition/Extension-England-RetrievalMechanism",
1607+
"url": "https://fhir.nhs.uk/England/StructureDefinition/Extension-England-NRLRetrievalMechanism",
16081608
"valueCodeableConcept": {
16091609
"coding": [
16101610
{
1611-
"system": "https://fhir.nhs.uk/England/CodeSystem/England-RetrievalMechanism",
1611+
"system": "https://fhir.nhs.uk/England/CodeSystem/England-NRLRetrievalMechanism",
16121612
"code": "Direct",
16131613
"display": "Direct",
16141614
}
@@ -1634,7 +1634,7 @@ def test_validate_content_multiple_content_retrieval_extensions():
16341634
}
16351635
]
16361636
},
1637-
"diagnostics": "Invalid content retrieval extension: Extension must have one content retrieval extension, see: ('https://fhir.nhs.uk/England/ValueSet/England-RetrievalMechanism')",
1637+
"diagnostics": "Invalid content retrieval extension: Extension must have one content retrieval extension, see: ('https://fhir.nhs.uk/England/ValueSet/England-NRLRetrievalMechanism')",
16381638
"expression": ["content[0].extension"],
16391639
}
16401640

@@ -1672,11 +1672,11 @@ def test_validate_two_content_with_different_retrieval_mechanisms():
16721672
"format": unstructured_format,
16731673
"extension": [
16741674
{
1675-
"url": "https://fhir.nhs.uk/England/StructureDefinition/Extension-England-RetrievalMechanism",
1675+
"url": "https://fhir.nhs.uk/England/StructureDefinition/Extension-England-NRLRetrievalMechanism",
16761676
"valueCodeableConcept": {
16771677
"coding": [
16781678
{
1679-
"system": "https://fhir.nhs.uk/England/CodeSystem/England-RetrievalMechanism",
1679+
"system": "https://fhir.nhs.uk/England/CodeSystem/England-NRLRetrievalMechanism",
16801680
"code": "SSP",
16811681
"display": "Spine Secure Proxy",
16821682
}
@@ -1713,11 +1713,11 @@ def test_validate_two_content_with_different_retrieval_mechanisms():
17131713
"format": unstructured_format,
17141714
"extension": [
17151715
{
1716-
"url": "https://fhir.nhs.uk/England/StructureDefinition/Extension-England-RetrievalMechanism",
1716+
"url": "https://fhir.nhs.uk/England/StructureDefinition/Extension-England-NRLRetrievalMechanism",
17171717
"valueCodeableConcept": {
17181718
"coding": [
17191719
{
1720-
"system": "https://fhir.nhs.uk/England/CodeSystem/England-RetrievalMechanism",
1720+
"system": "https://fhir.nhs.uk/England/CodeSystem/England-NRLRetrievalMechanism",
17211721
"code": "Direct",
17221722
"display": "Direct",
17231723
}
@@ -1737,17 +1737,17 @@ def test_validate_two_content_with_different_retrieval_mechanisms():
17371737

17381738

17391739
def test_validate_content_retrieval_lowercase_urls():
1740-
"""Test that the extension is recognised when 'RetrievalMechanism' is in lowercase and throws an error for mismatching the URL case."""
1740+
"""Test that the extension is recognised when 'NRLRetrievalMechanism' is in lowercase and throws an error for mismatching the URL case."""
17411741
validator = DocumentReferenceValidator()
17421742
document_ref_data = load_document_reference_json("Y05868-736253002-Valid")
17431743

17441744
document_ref_data["content"][0]["extension"] = [
17451745
{
1746-
"url": "https://fhir.nhs.uk/england/structuredefinition/extension-england-retrievalmechanism",
1746+
"url": "https://fhir.nhs.uk/england/structuredefinition/extension-england-nrlretrievalmechanism",
17471747
"valueCodeableConcept": {
17481748
"coding": [
17491749
{
1750-
"system": "https://fhir.nhs.uk/England/CodeSystem/England-RetrievalMechanism",
1750+
"system": "https://fhir.nhs.uk/England/CodeSystem/England-NRLRetrievalMechanism",
17511751
"code": "Direct",
17521752
"display": "Direct",
17531753
}
@@ -1784,7 +1784,7 @@ def test_validate_content_retrieval_lowercase_urls():
17841784
}
17851785
]
17861786
},
1787-
"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)",
1787+
"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)",
17881788
"expression": ["content[0].extension[0].url"],
17891789
}
17901790

@@ -1805,12 +1805,12 @@ def make_content_stability_extension(code, display):
18051805

18061806

18071807
def make_retrieval_mechanism_extension(code, display):
1808-
return RetrievalMechanismExtension(
1809-
url="https://fhir.nhs.uk/England/StructureDefinition/Extension-England-RetrievalMechanism",
1810-
valueCodeableConcept=RetrievalMechanismExtensionValueCodeableConcept(
1808+
return NRLRetrievalMechanismExtension(
1809+
url="https://fhir.nhs.uk/England/StructureDefinition/Extension-England-NRLRetrievalMechanism",
1810+
valueCodeableConcept=NRLRetrievalMechanismExtensionValueCodeableConcept(
18111811
coding=[
1812-
RetrievalMechanismExtensionCoding(
1813-
system="https://fhir.nhs.uk/England/CodeSystem/England-RetrievalMechanism",
1812+
NRLRetrievalMechanismExtensionCoding(
1813+
system="https://fhir.nhs.uk/England/CodeSystem/England-NRLRetrievalMechanism",
18141814
code=code,
18151815
display=display,
18161816
)
@@ -1837,7 +1837,7 @@ def test_has_valid_extensions_multiple_retrieval_mechanism():
18371837
]
18381838
assert validator._has_valid_extensions(extensions, 0) is False
18391839
assert any(
1840-
"Invalid content retrieval extension: Extension must have one content retrieval extension, see: ('https://fhir.nhs.uk/England/ValueSet/England-RetrievalMechanism')"
1840+
"Invalid content retrieval extension: Extension must have one content retrieval extension, see: ('https://fhir.nhs.uk/England/ValueSet/England-NRLRetrievalMechanism')"
18411841
in issue.diagnostics
18421842
for issue in validator.result.issues
18431843
)
@@ -1927,11 +1927,11 @@ def test_validate_structured_format_with_text_html_for_incontext_launch():
19271927
}
19281928
document_ref_data["content"][0]["extension"] = [
19291929
{
1930-
"url": "https://fhir.nhs.uk/England/StructureDefinition/Extension-England-RetrievalMechanism",
1930+
"url": "https://fhir.nhs.uk/England/StructureDefinition/Extension-England-NRLRetrievalMechanism",
19311931
"valueCodeableConcept": {
19321932
"coding": [
19331933
{
1934-
"system": "https://fhir.nhs.uk/England/CodeSystem/England-RetrievalMechanism",
1934+
"system": "https://fhir.nhs.uk/England/CodeSystem/England-NRLRetrievalMechanism",
19351935
"code": "InContext",
19361936
"display": "Direct using In-Context",
19371937
}

layer/nrlf/core/validators.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
from nrlf.producer.fhir.r4 import model as producer_model
2828
from nrlf.producer.fhir.r4.model import (
2929
ContentStabilityExtension,
30-
RetrievalMechanismExtension,
30+
NRLRetrievalMechanismExtension,
3131
)
3232

3333

@@ -547,7 +547,7 @@ def _has_valid_extensions(self, extensions, i):
547547
self.result.add_error(
548548
issue_code="business-rule",
549549
error_code="UNPROCESSABLE_ENTITY",
550-
diagnostics="Invalid content retrieval extension: Extension must have one content retrieval extension, see: ('https://fhir.nhs.uk/England/ValueSet/England-RetrievalMechanism')",
550+
diagnostics="Invalid content retrieval extension: Extension must have one content retrieval extension, see: ('https://fhir.nhs.uk/England/ValueSet/England-NRLRetrievalMechanism')",
551551
field=f"content[{i}].extension",
552552
)
553553
return False
@@ -588,13 +588,13 @@ def _validate_content_stability_extension(self, extension, i, j):
588588

589589
def _validate_retrieval_mechanism_extension(self, extension, i, j):
590590
try:
591-
RetrievalMechanismExtension.model_validate(extension.model_dump())
591+
NRLRetrievalMechanismExtension.model_validate(extension.model_dump())
592592
except ValidationError as exc:
593593
raise ParseError.from_validation_error(
594594
exc,
595595
details=SpineErrorConcept.from_code("BAD_REQUEST"),
596596
msg="Invalid content retrieval extension",
597-
value_set="https://fhir.nhs.uk/England/ValueSet/England-RetrievalMechanism",
597+
value_set="https://fhir.nhs.uk/England/ValueSet/England-NRLRetrievalMechanism",
598598
root_location=("content", i, "extension", j),
599599
) from None
600600
coding = extension.valueCodeableConcept.coding[0]

0 commit comments

Comments
 (0)