Open
Description
Describe the bug
During validation of a Resource on Create (ProfileValidationOnCreate = true), I get the following error:
Internal logic failure: StructureDefinition 'http://nictiz.nl/fhir/StructureDefinition/ext-SOAPReport.SOAPLineCode' has no snapshot component. (Parameter 'sd')
Which is true, but shouldn't profile snapshots be generated?
These are the profiles I'm trying to use:
SoapLine:
{
"resourceType": "StructureDefinition",
"id": "nl-core-SOAPReport.SOAPLine",
"text": {
"status": "empty",
"div": "<div xmlns=\"http://www.w3.org/1999/xhtml\">No narrative is provided for definitional resources. A human-readable rendering can be found in the implementation guide(s) where this resource is used.</div>"
},
"url": "http://nictiz.nl/fhir/StructureDefinition/nl-core-SOAPReport.SOAPLine",
"name": "NlcoreSOAPReportSOAPLine",
"title": "nl core SOAPReport.SOAPLine",
"status": "draft",
"publisher": "Nictiz",
"contact": [
{
"name": "Nictiz",
"telecom": [
{
"system": "url",
"value": "https://www.nictiz.nl",
"use": "work"
}
]
}
],
"description": "A SOAP report is a textual report of a (partial) consult with relation to a single problem according to the SOAP structure. SOAP (acronym for subjective, objective, assessment, plan) is a method used by health professionals to structurally record information that comes up during contact between the patient and a health professionals in the patient's record. The following standardized format is used for reporting:\r\n\r\n* Subjective: the patient's complaint and request for help and the amnesic data\r\n* Objective: the findings from the physical and supplementary examination.\r\n* Assessment: the working hypothesis and the thinking process, for example a differential diagnosis of the healthcare professional.\r\n* Plan: the diagnostic plan or treatment plan and what has been discussed or agreed with the patient.\r\n\r\nThe SOAP report is mainly used in general practice care.\r\n\r\nNote: the zib doesn't state explicitly if zib SOAPReport pertains a consult or a partial consult, but it has become clear that the zib, and thus this profile, should be interpreted as a partial consult with relation to a single problem (see <https://bits.nictiz.nl/browse/ZIB-1474>). The text above has been adjusted according to this insight.",
"purpose": "A derived profile from [zib-SOAPReport.SOAPLine](http://nictiz.nl/fhir/StructureDefinition/zib-SOAPReport.SOAPLine) to provide a version better suited for implementation purposes. This profile augments the base profile with elements found in the various use cases that have adopted the zib.",
"copyright": "Copyright and related rights waived via CC0, https://creativecommons.org/publicdomain/zero/1.0/. This does not apply to information from third parties, for example a medical terminology system. The implementer alone is responsible for identifying and obtaining any necessary licenses or authorizations to utilize third party IP in connection with the specification or otherwise.",
"fhirVersion": "4.0.1",
"mapping": [
{
"identity": "zib-soapreport-v1.0-2020EN",
"uri": "https://zibs.nl/wiki/SOAPReport-v1.0(2020EN)",
"name": "zib SOAPReport-v1.0(2020EN)"
}
],
"kind": "resource",
"abstract": false,
"type": "Observation",
"baseDefinition": "http://nictiz.nl/fhir/StructureDefinition/zib-SOAPReport.SOAPLine",
"derivation": "constraint",
"differential": {
"element": [
{
"id": "Observation",
"path": "Observation",
"comment": "Zib SOAPReport is implemented using two profiles: this profile implements the SOAPLine concept of the zib, while <http://nictiz.nl/fhir/StructureDefinition/nl-core-SOAPReport> represents the SOAPReport concept of the zib.",
"alias": [
"nl-core-SOAPReport.SOAPLine"
]
},
{
"id": "Observation.subject",
"path": "Observation.subject",
"type": [
{
"code": "Reference",
"targetProfile": [
"http://hl7.org/fhir/StructureDefinition/Patient",
"http://hl7.org/fhir/StructureDefinition/Group",
"http://hl7.org/fhir/StructureDefinition/Device",
"http://hl7.org/fhir/StructureDefinition/Location",
"http://nictiz.nl/fhir/StructureDefinition/nl-core-Patient"
]
}
]
}
]
}
}
ZIB SoapLine:
{
"resourceType": "StructureDefinition",
"id": "zib-SOAPReport.SOAPLine",
"text": {
"status": "empty",
"div": "<div xmlns=\"http://www.w3.org/1999/xhtml\">No narrative is provided for definitional resources. A human-readable rendering can be found in the implementation guide(s) where this resource is used.</div>"
},
"url": "http://nictiz.nl/fhir/StructureDefinition/zib-SOAPReport.SOAPLine",
"name": "ZibSOAPReportSOAPLine",
"title": "zib SOAPReport.SOAPLine",
"status": "draft",
"publisher": "Nictiz",
"contact": [
{
"name": "Nictiz",
"telecom": [
{
"system": "url",
"value": "https://www.nictiz.nl",
"use": "work"
}
]
}
],
"description": "A SOAP report is a textual report of a (partial) consult with relation to a single problem according to the SOAP structure. SOAP (acronym for subjective, objective, assessment, plan) is a method used by health professionals to structurally record information that comes up during contact between the patient and a health professionals in the patient's record. The following standardized format is used for reporting:\r\n\r\n* Subjective: the patient's complaint and request for help and the amnesic data\r\n* Objective: the findings from the physical and supplementary examination.\r\n* Assessment: the working hypothesis and the thinking process, for example a differential diagnosis of the healthcare professional.\r\n* Plan: the diagnostic plan or treatment plan and what has been discussed or agreed with the patient.\r\n\r\nThe SOAP report is mainly used in general practice care.\r\n\r\nNote: the zib doesn't state explicitly if zib SOAPReport pertains a consult or a partial consult, but it has become clear that the zib, and thus this profile, should be interpreted as a partial consult with relation to a single problem (see <https://bits.nictiz.nl/browse/ZIB-1474>). The text above has been adjusted according to this insight.",
"purpose": "This Observation resource represents the SOAPLine concept of the Dutch [zib ('Zorginformatiebouwsteen', i.e. Health and Care Information Model) SOAPReport v1.0 (2020)](https://zibs.nl/wiki/SOAPReport-v1.0(2020EN)).",
"copyright": "Copyright and related rights waived via CC0, https://creativecommons.org/publicdomain/zero/1.0/. This does not apply to information from third parties, for example a medical terminology system. The implementer alone is responsible for identifying and obtaining any necessary licenses or authorizations to utilize third party IP in connection with the specification or otherwise.",
"fhirVersion": "4.0.1",
"mapping": [
{
"identity": "zib-soapreport-v1.0-2020EN",
"uri": "https://zibs.nl/wiki/SOAPReport-v1.0(2020EN)",
"name": "zib SOAPReport-v1.0(2020EN)"
}
],
"kind": "resource",
"abstract": true,
"type": "Observation",
"baseDefinition": "http://hl7.org/fhir/StructureDefinition/Observation",
"derivation": "constraint",
"differential": {
"element": [
{
"id": "Observation",
"path": "Observation",
"short": "SOAPLine",
"comment": "Zib SOAPReport is implemented using two profiles: this profile implements the SOAPLine concept of the zib, while <http://nictiz.nl/fhir/StructureDefinition/zib-SOAPReport> represents the SOAPReport concept of the zib.",
"alias": [
"SOEPRegel"
],
"constraint": [
{
"key": "zib-SOAPReport-1",
"severity": "error",
"human": "In a SOAP report an ICPC code may be assigned, but only to the S and A line.",
"expression": "extension('http://nictiz.nl/fhir/StructureDefinition/ext-SOAPReport.SOAPLineCode').exists() implies (code.coding.where(code = '255362007' and system = 'http://snomed.info/sct').exists() or code.coding.where(code = '129265001' and system = 'http://snomed.info/sct').exists())"
}
],
"mapping": [
{
"identity": "zib-soapreport-v1.0-2020EN",
"map": "NL-CM:13.6.4",
"comment": "SOAPLine"
}
]
},
{
"id": "Observation.extension:soapLineCode",
"path": "Observation.extension",
"sliceName": "soapLineCode",
"type": [
{
"code": "Extension",
"profile": [
"http://nictiz.nl/fhir/StructureDefinition/ext-SOAPReport.SOAPLineCode"
]
}
],
"condition": [
"zib-SOAPReport-1"
]
},
{
"id": "Observation.extension:soapLineCode.value[x]",
"path": "Observation.extension.value[x]",
"condition": [
"zib-SOAPReport-1"
]
},
{
"id": "Observation.status",
"path": "Observation.status",
"comment": "Unless explicitly recorded, a value of _final_ would be expected."
},
{
"id": "Observation.code",
"path": "Observation.code",
"short": "SOAPLineHeader",
"definition": "The name of the SOAP line as a coded description. In a SOAP report this can be one of the following: subjective, objective, assessment or plan.",
"alias": [
"SOEPRegelNaam"
],
"condition": [
"zib-SOAPReport-1"
],
"binding": {
"strength": "required",
"valueSet": "http://decor.nictiz.nl/fhir/ValueSet/2.16.840.1.113883.2.4.3.11.60.40.2.13.6.2--20200901000000"
},
"mapping": [
{
"identity": "zib-soapreport-v1.0-2020EN",
"map": "NL-CM:13.6.6",
"comment": "SOAPLineHeader"
}
]
},
{
"id": "Observation.code.coding",
"path": "Observation.code.coding",
"condition": [
"zib-SOAPReport-1"
]
},
{
"id": "Observation.value[x]",
"path": "Observation.value[x]",
"slicing": {
"discriminator": [
{
"type": "type",
"path": "$this"
}
],
"rules": "open"
}
},
{
"id": "Observation.value[x]:valueString",
"path": "Observation.value[x]",
"sliceName": "valueString",
"short": "SOAPLineText",
"definition": "The actual content of the section as free formatted text.",
"alias": [
"SOEPRegelTekst"
],
"type": [
{
"code": "string"
}
],
"mapping": [
{
"identity": "zib-soapreport-v1.0-2020EN",
"map": "NL-CM:13.6.7",
"comment": "SOAPLineText"
}
]
}
]
}
}
SoapLineCode Extension:
{
"resourceType": "StructureDefinition",
"id": "ext-SOAPReport.SOAPLineCode",
"text": {
"status": "empty",
"div": "<div xmlns=\"http://www.w3.org/1999/xhtml\">No narrative is provided for definitional resources. A human-readable rendering can be found in the implementation guide(s) where this resource is used.</div>"
},
"url": "http://nictiz.nl/fhir/StructureDefinition/ext-SOAPReport.SOAPLineCode",
"name": "ExtSOAPReportSOAPLineCode",
"title": "ext SOAPReport.SOAPLineCode",
"status": "draft",
"publisher": "Nictiz",
"contact": [
{
"name": "Nictiz",
"telecom": [
{
"system": "url",
"value": "https://www.nictiz.nl",
"use": "work"
}
]
}
],
"description": "An extension to provide the SOAPLine code. The extension can be seen as an addition to the SOAPLineHeader and SOAPLineText concept mapped to the code and text element.",
"purpose": "This extension represents the SOAPLineCode concept of the Dutch [zib ('Zorginformatiebouwsteen', i.e. Health and Care Information Model) SOAPReport v1.0 (2020)](https://zibs.nl/wiki/SOAPReport-v1.0(2020EN)).",
"copyright": "Copyright and related rights waived via CC0, https://creativecommons.org/publicdomain/zero/1.0/. This does not apply to information from third parties, for example a medical terminology system. The implementer alone is responsible for identifying and obtaining any necessary licenses or authorizations to utilize third party IP in connection with the specification or otherwise.",
"fhirVersion": "4.0.1",
"mapping": [
{
"identity": "zib-soapreport-v1.0-2020EN",
"uri": "https://zibs.nl/wiki/SOAPReport-v1.0(2020EN)",
"name": "zib SOAPReport-v1.0(2020EN)"
}
],
"kind": "complex-type",
"abstract": false,
"context": [
{
"type": "element",
"expression": "Observation"
}
],
"type": "Extension",
"baseDefinition": "http://hl7.org/fhir/StructureDefinition/Extension",
"derivation": "constraint",
"differential": {
"element": [
{
"id": "Extension",
"path": "Extension",
"max": "1"
},
{
"id": "Extension.url",
"path": "Extension.url",
"fixedUri": "http://nictiz.nl/fhir/StructureDefinition/ext-SOAPReport.SOAPLineCode"
},
{
"id": "Extension.value[x]",
"path": "Extension.value[x]",
"short": "SOAPLineCode",
"definition": "Coded values can be added to a line that describe essential aspects of the line.\r\nIn a SOAP report an ICPC code may be assigned, but only to the S and A line.",
"alias": [
"SOEPRegelCode"
],
"type": [
{
"code": "CodeableConcept"
}
],
"binding": {
"strength": "required",
"valueSet": "http://decor.nictiz.nl/fhir/ValueSet/2.16.840.1.113883.2.4.3.11.60.40.2.13.6.1--20200901000000"
},
"mapping": [
{
"identity": "zib-soapreport-v1.0-2020EN",
"map": "NL-CM:13.6.5",
"comment": "SOAPLineCode"
}
]
},
{
"id": "Extension.value[x].coding",
"path": "Extension.value[x].coding",
"binding": {
"strength": "required",
"valueSet": "http://decor.nictiz.nl/fhir/ValueSet/2.16.840.1.113883.2.4.3.11.60.40.2.13.6.1--20200901000000"
}
}
]
}
}
FHIR Version?
R4
Data provider?
SQL Server
To Reproduce
Steps to reproduce the behavior:
- Set ProfileValidationOnCreate = true
- POST the above profiles
- POST A SoapLine, like:
{
"id": "00db645f-557c-490a-9a48-46377b6a2cde",
"resourceType": "Observation",
"meta": {
"profile": [
"http://nictiz.nl/fhir/StructureDefinition/nl-core-SOAPReport.SOAPLine"
]
},
"extension": [
{
"url": "http://nictiz.nl/fhir/StructureDefinition/ext-SOAPReport.SOAPLineCode",
"valueCodeableConcept": {
"coding": { "system":"http://hl7.org/fhir/sid/icpc-1-nl", "code": "T90", "display": "Diabetes mellitus" }
}
}
],
"status": "final",
"encounter": {
"type": "Encounter",
"reference": "Encounter/34833a30-44f9-42f6-9eb3-2786ddf0cee5"
},
"valueString": "test",
"code": {
"coding": [
{
"system": "http://snomed.info/sct",
"code": "260224007",
"display": "Objective"
}
]
}
}
Expected behavior
201 Created result.
Actual behavior
400 Bad Request:
"issue": [
{
"severity": "fatal",
"code": "exception",
"details": {
"coding": [
{
"system": "http://hl7.org/fhir/dotnet-api-operation-outcome",
"code": "5003"
}
],
"text": "Internal logic failure: StructureDefinition 'http://nictiz.nl/fhir/StructureDefinition/ext-SOAPReport.SOAPLineCode' has no snapshot component. (Parameter 'sd')"
},
"location": [
"Observation // OperationOutcome.Location is deprecated, please use OperationOutcome.Expression"
],
"expression": [
"Observation"
]
}
]