@@ -1522,3 +1522,205 @@ 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+
1527+ def test_validate_practiceSetting_no_coding ():
1528+ validator = DocumentReferenceValidator ()
1529+ document_ref_data = load_document_reference_json ("Y05868-736253002-Valid" )
1530+
1531+ document_ref_data ["context" ]["practiceSetting" ] = {
1532+ "text" : "Description of the clinic"
1533+ }
1534+
1535+ result = validator .validate (document_ref_data )
1536+
1537+ assert result .is_valid is False
1538+ assert len (result .issues ) == 1
1539+ assert result .issues [0 ].model_dump (exclude_none = True ) == {
1540+ "severity" : "error" ,
1541+ "code" : "value" ,
1542+ "details" : {
1543+ "coding" : [
1544+ {
1545+ "system" : "https://fhir.nhs.uk/ValueSet/Spine-ErrorOrWarningCode-1" ,
1546+ "code" : "INVALID_RESOURCE" ,
1547+ "display" : "Invalid validation of resource" ,
1548+ }
1549+ ]
1550+ },
1551+ "diagnostics" : "Invalid practice setting: must contain a Coding" ,
1552+ "expression" : ["context.practiceSetting.coding" ],
1553+ }
1554+
1555+
1556+ def test_validate_practiceSetting_coding_invalid_system ():
1557+ validator = DocumentReferenceValidator ()
1558+ document_ref_data = load_document_reference_json ("Y05868-736253002-Valid" )
1559+
1560+ document_ref_data ["context" ]["practiceSetting" ] = {
1561+ "coding" : [
1562+ {
1563+ "system" : "http://snoooooomed/sctfffffg" ,
1564+ "code" : "788002001" ,
1565+ "display" : "Adult mental health service" ,
1566+ }
1567+ ]
1568+ }
1569+
1570+ result = validator .validate (document_ref_data )
1571+
1572+ assert result .is_valid is False
1573+ assert len (result .issues ) == 1
1574+ assert result .issues [0 ].model_dump (exclude_none = True ) == {
1575+ "severity" : "error" ,
1576+ "code" : "value" ,
1577+ "details" : {
1578+ "coding" : [
1579+ {
1580+ "system" : "https://fhir.nhs.uk/ValueSet/Spine-ErrorOrWarningCode-1" ,
1581+ "code" : "INVALID_RESOURCE" ,
1582+ "display" : "Invalid validation of resource" ,
1583+ }
1584+ ]
1585+ },
1586+ "diagnostics" : "Invalid practice setting system: http://snoooooomed/sctfffffg Practice Setting system must be 'http://snomed.info/sct'" ,
1587+ "expression" : ["context.practiceSetting.coding[0].system" ],
1588+ }
1589+
1590+
1591+ def test_validate_practiceSetting_coding_invalid_code ():
1592+ validator = DocumentReferenceValidator ()
1593+ document_ref_data = load_document_reference_json ("Y05868-736253002-Valid" )
1594+
1595+ document_ref_data ["context" ]["practiceSetting" ] = {
1596+ "coding" : [
1597+ {
1598+ "system" : "http://snomed.info/sct" ,
1599+ "code" : "123" ,
1600+ "display" : "Adult mental health service" ,
1601+ }
1602+ ]
1603+ }
1604+
1605+ result = validator .validate (document_ref_data )
1606+
1607+ assert result .is_valid is False
1608+ assert len (result .issues ) == 1
1609+ assert result .issues [0 ].model_dump (exclude_none = True ) == {
1610+ "severity" : "error" ,
1611+ "code" : "value" ,
1612+ "details" : {
1613+ "coding" : [
1614+ {
1615+ "system" : "https://fhir.nhs.uk/ValueSet/Spine-ErrorOrWarningCode-1" ,
1616+ "code" : "INVALID_RESOURCE" ,
1617+ "display" : "Invalid validation of resource" ,
1618+ }
1619+ ]
1620+ },
1621+ "diagnostics" : "Invalid practice setting code: 123 Practice Setting coding must be a member of value set https://fhir.nhs.uk/England/ValueSet/England-PracticeSetting" ,
1622+ "expression" : ["context.practiceSetting.coding[0].code" ],
1623+ }
1624+
1625+
1626+ def test_validate_practiceSetting_coding_missing_code ():
1627+ validator = DocumentReferenceValidator ()
1628+ document_ref_data = load_document_reference_json ("Y05868-736253002-Valid" )
1629+
1630+ document_ref_data ["context" ]["practiceSetting" ] = {
1631+ "coding" : [
1632+ {
1633+ "system" : "http://snomed.info/sct" ,
1634+ "display" : "Adult mental health service" ,
1635+ }
1636+ ]
1637+ }
1638+
1639+ result = validator .validate (document_ref_data )
1640+
1641+ assert result .is_valid is False
1642+ assert len (result .issues ) == 1
1643+ assert result .issues [0 ].model_dump (exclude_none = True ) == {
1644+ "severity" : "error" ,
1645+ "code" : "value" ,
1646+ "details" : {
1647+ "coding" : [
1648+ {
1649+ "system" : "https://fhir.nhs.uk/ValueSet/Spine-ErrorOrWarningCode-1" ,
1650+ "code" : "INVALID_RESOURCE" ,
1651+ "display" : "Invalid validation of resource" ,
1652+ }
1653+ ]
1654+ },
1655+ "diagnostics" : "Invalid practice setting code: None Practice Setting coding must be a member of value set https://fhir.nhs.uk/England/ValueSet/England-PracticeSetting" ,
1656+ "expression" : ["context.practiceSetting.coding[0].code" ],
1657+ }
1658+
1659+
1660+ def test_validate_practiceSetting_coding_missing_display ():
1661+ validator = DocumentReferenceValidator ()
1662+ document_ref_data = load_document_reference_json ("Y05868-736253002-Valid" )
1663+
1664+ document_ref_data ["context" ]["practiceSetting" ] = {
1665+ "coding" : [
1666+ {
1667+ "system" : "http://snomed.info/sct" ,
1668+ "code" : "788002001" ,
1669+ }
1670+ ]
1671+ }
1672+
1673+ result = validator .validate (document_ref_data )
1674+
1675+ assert result .is_valid is False
1676+ assert len (result .issues ) == 1
1677+ assert result .issues [0 ].model_dump (exclude_none = True ) == {
1678+ "severity" : "error" ,
1679+ "code" : "value" ,
1680+ "details" : {
1681+ "coding" : [
1682+ {
1683+ "system" : "https://fhir.nhs.uk/ValueSet/Spine-ErrorOrWarningCode-1" ,
1684+ "code" : "INVALID_RESOURCE" ,
1685+ "display" : "Invalid validation of resource" ,
1686+ }
1687+ ]
1688+ },
1689+ "diagnostics" : "Invalid practice setting coding: display None does not match the expected display for 788002001 Practice Setting coding is bound to value set https://fhir.nhs.uk/England/ValueSet/England-PracticeSetting" ,
1690+ "expression" : ["context.practiceSetting.coding[0]" ],
1691+ }
1692+
1693+
1694+ def test_validate_practiceSetting_coding_mismatch_code_and_display ():
1695+ validator = DocumentReferenceValidator ()
1696+ document_ref_data = load_document_reference_json ("Y05868-736253002-Valid" )
1697+
1698+ document_ref_data ["context" ]["practiceSetting" ] = {
1699+ "coding" : [
1700+ {
1701+ "system" : "http://snomed.info/sct" ,
1702+ "code" : "788002001" ,
1703+ "display" : "Nephrology service" ,
1704+ }
1705+ ]
1706+ }
1707+
1708+ result = validator .validate (document_ref_data )
1709+
1710+ assert result .is_valid is False
1711+ assert len (result .issues ) == 1
1712+ assert result .issues [0 ].model_dump (exclude_none = True ) == {
1713+ "severity" : "error" ,
1714+ "code" : "value" ,
1715+ "details" : {
1716+ "coding" : [
1717+ {
1718+ "system" : "https://fhir.nhs.uk/ValueSet/Spine-ErrorOrWarningCode-1" ,
1719+ "code" : "INVALID_RESOURCE" ,
1720+ "display" : "Invalid validation of resource" ,
1721+ }
1722+ ]
1723+ },
1724+ "diagnostics" : "Invalid practice setting coding: display Nephrology service does not match the expected display for 788002001 Practice Setting coding is bound to value set https://fhir.nhs.uk/England/ValueSet/England-PracticeSetting" ,
1725+ "expression" : ["context.practiceSetting.coding[0]" ],
1726+ }
0 commit comments