Skip to content

Commit 40750a5

Browse files
NRL-518 Validate display as per the definition
1 parent b77abb9 commit 40750a5

File tree

4 files changed

+65
-21
lines changed

4 files changed

+65
-21
lines changed

layer/nrlf/core/tests/test_validators.py

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1029,7 +1029,7 @@ def test_validate_content_extension_invalid_display():
10291029
}
10301030
]
10311031
},
1032-
"diagnostics": "Invalid content extension display: invalid Extension display must be the same as code either 'static' or 'dynamic'",
1032+
"diagnostics": "Invalid content extension display: invalid Extension display must be 'Static' or 'Dynamic'",
10331033
"expression": [
10341034
"content[0].extension[0].valueCodeableConcept.coding[0].display"
10351035
],
@@ -1522,3 +1522,43 @@ def test_validate_ssp_content_with_multiple_asids():
15221522
"diagnostics": "Multiple ASID identifiers provided. Only a single valid ASID identifier can be provided in the context.related.",
15231523
"expression": ["context.related"],
15241524
}
1525+
1526+
def test_validate_content_extension_invalid_code_and_display_mismatch():
1527+
validator = DocumentReferenceValidator()
1528+
document_ref_data = load_document_reference_json("Y05868-736253002-Valid")
1529+
1530+
document_ref_data["content"][0]["extension"][0] = {
1531+
"url": "https://fhir.nhs.uk/England/StructureDefinition/Extension-England-ContentStability",
1532+
"valueCodeableConcept": {
1533+
"coding": [
1534+
{
1535+
"system": "https://fhir.nhs.uk/England/CodeSystem/England-NRLContentStability",
1536+
"code": "static",
1537+
"display": "Dynamic",
1538+
}
1539+
]
1540+
},
1541+
}
1542+
1543+
result = validator.validate(document_ref_data)
1544+
1545+
assert result.is_valid is False
1546+
assert result.resource.id == "Y05868-99999-99999-999999"
1547+
assert len(result.issues) == 1
1548+
assert result.issues[0].model_dump(exclude_none=True) == {
1549+
"severity": "error",
1550+
"code": "value",
1551+
"details": {
1552+
"coding": [
1553+
{
1554+
"system": "https://fhir.nhs.uk/ValueSet/Spine-ErrorOrWarningCode-1",
1555+
"code": "INVALID_RESOURCE",
1556+
"display": "Invalid validation of resource",
1557+
}
1558+
]
1559+
},
1560+
"diagnostics": "Invalid content extension display: Dynamic Extension display must be the same as code either 'Static' or 'Dynamic'",
1561+
"expression": [
1562+
"content[0].extension[0].valueCodeableConcept.coding[0].display"
1563+
],
1564+
}

layer/nrlf/core/validators.py

Lines changed: 22 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -508,50 +508,54 @@ def _validate_content_extension(self, model: DocumentReference):
508508
return
509509

510510
if (
511-
content.extension[0].valueCodeableConcept.coding[0].system
511+
content.extension[0].url
512+
!= "https://fhir.nhs.uk/England/StructureDefinition/Extension-England-ContentStability"
513+
):
514+
self.result.add_error(
515+
issue_code="value",
516+
error_code="INVALID_RESOURCE",
517+
diagnostics=f"Invalid content extension url: {content.extension[0].url} Extension url must be 'https://fhir.nhs.uk/England/StructureDefinition/Extension-England-ContentStability'",
518+
field=f"content[{i}].extension[0].url",
519+
)
520+
return
521+
522+
coding = content.extension[0].valueCodeableConcept.coding[0]
523+
if (
524+
coding.system
512525
!= "https://fhir.nhs.uk/England/CodeSystem/England-NRLContentStability"
513526
):
514527
self.result.add_error(
515528
issue_code="value",
516529
error_code="INVALID_RESOURCE",
517-
diagnostics=f"Invalid content extension system: {content.extension[0].valueCodeableConcept.coding[0].system} Extension system must be 'https://fhir.nhs.uk/England/CodeSystem/England-NRLContentStability'",
530+
diagnostics=f"Invalid content extension system: {coding.system} Extension system must be 'https://fhir.nhs.uk/England/CodeSystem/England-NRLContentStability'",
518531
field=f"content[{i}].extension[0].valueCodeableConcept.coding[0].system",
519532
)
520533
return
521534

522-
if content.extension[0].valueCodeableConcept.coding[0].code not in [
523-
"static",
524-
"dynamic",
525-
]:
535+
if coding.code not in ["static", "dynamic"]:
526536
self.result.add_error(
527537
issue_code="value",
528538
error_code="INVALID_RESOURCE",
529-
diagnostics=f"Invalid content extension code: {content.extension[0].valueCodeableConcept.coding[0].code} Extension code must be 'static' or 'dynamic'",
539+
diagnostics=f"Invalid content extension code: {coding.code} Extension code must be 'static' or 'dynamic'",
530540
field=f"content[{i}].extension[0].valueCodeableConcept.coding[0].code",
531541
)
532542
return
533543

534-
if (
535-
content.extension[0].valueCodeableConcept.coding[0].code
536-
!= content.extension[0].valueCodeableConcept.coding[0].display.lower()
537-
):
544+
if coding.display not in ["Static", "Dynamic"]:
538545
self.result.add_error(
539546
issue_code="value",
540547
error_code="INVALID_RESOURCE",
541-
diagnostics=f"Invalid content extension display: {content.extension[0].valueCodeableConcept.coding[0].display} Extension display must be the same as code either 'static' or 'dynamic'",
548+
diagnostics=f"Invalid content extension display: {coding.display} Extension display must be 'Static' or 'Dynamic'",
542549
field=f"content[{i}].extension[0].valueCodeableConcept.coding[0].display",
543550
)
544551
return
545552

546-
if (
547-
content.extension[0].url
548-
!= "https://fhir.nhs.uk/England/StructureDefinition/Extension-England-ContentStability"
549-
):
553+
if coding.code != coding.display.lower():
550554
self.result.add_error(
551555
issue_code="value",
552556
error_code="INVALID_RESOURCE",
553-
diagnostics=f"Invalid content extension url: {content.extension[0].url} Extension url must be 'https://fhir.nhs.uk/England/StructureDefinition/Extension-England-ContentStability'",
554-
field=f"content[{i}].extension[0].url",
557+
diagnostics=f"Invalid content extension display: {coding.display} Extension display must be the same as code either 'Static' or 'Dynamic'",
558+
field=f"content[{i}].extension[0].valueCodeableConcept.coding[0].display",
555559
)
556560
return
557561

tests/data/DocumentReference/RQI-736253002-Valid.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@
7979
{
8080
"system": "https://fhir.nhs.uk/England/CodeSystem/England-NRLContentStability",
8181
"code": "static",
82-
"display": "static"
82+
"display": "Static"
8383
}
8484
]
8585
}

tests/data/DocumentReference/Y05868-736253002-Valid.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@
7979
{
8080
"system": "https://fhir.nhs.uk/England/CodeSystem/England-NRLContentStability",
8181
"code": "static",
82-
"display": "static"
82+
"display": "Static"
8383
}
8484
]
8585
}

0 commit comments

Comments
 (0)