Document toolboxDocument toolbox

TOP-KT-010 - Validatie

 Versiegeschiedenis...
VersieDatumStatusWijzigingen
1.0.0

 

definitief

Beschrijving

Om interoperabiliteit te kunnen waarborgen is het van belang dat iedereen dezelfde taal spreekt. Deze taal wordt afgedwongen middels validatie. Wanneer resources niet valide bevonden worden, moet er ook een duidelijke set aan afspraken zijn om te herleiden wát er fout bevonden wordt.

Overwegingen

Centrale validatie

Validatie van de resources vindt plaats op de FHIR resource service. Wanneer er een resource aangemaakt of geüpdatet wordt, moet deze voldoen aan een set van eisen. Eén van deze eisen is conformiteit aan de officiële Koppeltaal profielen. Op deze manier kunnen enkel valide resources uitgewisseld worden. Validatie wordt door FHIR in de volgende categorieën opgedeeld (irrelevante categorieën voor Koppeltaal weggelaten):

EisBeschrijving
StructuurControleer of alle inhoud in de bron wordt beschreven door de specificatie en dat er niets extra's aanwezig is
KardinaliteitControleer of de kardinaliteit van alle eigenschappen correct is (min & max)
WaardedomeinenControleer of de waarden van alle eigenschappen voldoen aan de regels voor de opgegeven typen (inclusief controleren of de meegegeven codes geldig zijn)
Coding/CodeableConcept-bindingenControleer of de codes/displays in de Coding/CodeableConcept typen geldig zijn
InvariantenControleer of de invarianten (regels voor gelijktijdig voorkomen, etc.) correct zijn gevolgd
ProfielenControleer of alle regels in profielen zijn gevolgd (inclusief die vermeld in de Resource.meta.profile, of in CapabilityStatement, of in een ImplementationGuide, of anderszins vereist door de context)

Validatie-overzicht

De FHIR resource service MOET de volgende methoden uit de FHIR implementation guide implementeren:

MethodeXMLJSONStructuurKardinaliteitWaardedomeinenCoding/CodeableConcept-bindingenInvariantenProfielen
XML Schema + Schematron

JSON Schema


Validation Operation

Koppeltaal Profielen

Elke resource die gebruikt wordt binnen Koppeltaal kent een eigen profiel. Een profiel wordt opgeleverd middels een StructureDefinition resource. Deze resource beschrijft welke eigenschappen een resource heeft, en bijvoorbeeld ook wat de kardinaliteit van elk veld is. De officiële Koppeltaal profielen zijn hier te vinden.

De StructureDefinition resources MOETEN door de FHIR resource service ingeladen te worden. Applicatie-instanties mogen deze niet zelf aanmaken of bewerken.

Daarnaast MOET elke resource die aangemaakt wordt, verwijzen naar het bijbehorende Koppeltaal profiel. Indien dit niet gebeurd MOET de server de request afkeuren middels een HTTP 422 en de melding welk profiel verwacht wordt in een OperationOutcome.

Onderliggende bouwstenen

De Koppeltaal profielen zijn, waar mogelijk, gebaseerd op het nl-core profiel van Nictiz. Het nl-core project maakt weer gebruik van het zorginformatiebouwstenen (ZIB) profiel. Door het gebruik van deze zogenaamde “base definitions” wordt de kans op interoperabiliteit vergroot tussen andere standaarden en Koppeltaal die ook gebruik maken van nl-core en/of ZIBs.

Simplifier Releases

Koppeltaal voert releases uit in simplifier. Dit resulteer in packages op Node Package Manager (npm). Deze packages bevatten alle resources die nodig zijn voor de Koppeltaal-specifieke validatie. Ook bevat deze de resources uit de dependencies (nl-core en zib). Sommige FHIR resource services kunnen direct deze npm package downloaden en installeren.

Validatie

De FHIR resource service dwingt de bovenstaande profielen af. Zo MOET elke Resource - bij zowel een POST (Create) als een PUT, PATCH (Update) - naar het bijbehorende profiel verwijzen. De URI van het profiel voor elke ondersteunde resource is te vinden in simplifier:

Deze URI moet meegegeven worden aan de Resource.meta.profile array.

Aangezien de StructureDefinition exact beschrijft waar een Resource aan moet voldoen, wordt dit gebruikt om de Resources te valideren.

Foutmeldingen

Wanneer een resource niet door de validatie komt, zal de FHIR resource service reageren met een HTTP 422 error code. De exacte reden waarom hiervoor wordt in de response body beschreven middels een OperationOutcome resource. Let op dat deze outcome verschillende “severities” heeft, enkel de severity error zal leiden tot een 422 response:

{
  "resourceType": "OperationOutcome",
  "text": {
    "status": "generated",
    "div": "<div xmlns=\\"<http://www.w3.org/1999/xhtml\\>"><h1>Operation Outcome</h1><table border=\\"0\\"><tr><td style=\\"font-weight: bold;\\">WARNING</td><td>[Patient, Line 1, Col 2]</td><td><pre>dom-6: 'A resource should have narrative for robust management' Rule 'A resource should have narrative for robust management' Failed</pre></td>\\n\\t\\t\\t</tr>\\n\\t\\t\\t<tr>\\n\\t\\t\\t\\t<td style=\\"font-weight: bold;\\">INFORMATION</td>\\n\\t\\t\\t\\t<td>[Patient.identifier[0], Line 1, Col 179]</td>\\n\\t\\t\\t\\t<td><pre>This element does not match any known slice defined in the profile <http://koppeltaal.nl/fhir/StructureDefinition/KT2Patient></pre></td>\\n\\t\\t\\t</tr>\\n\\t\\t\\t<tr>\\n\\t\\t\\t\\t<td style=\\"font-weight: bold;\\">ERROR</td>\\n\\t\\t\\t\\t<td>[Patient, Line 1, Col 2]</td>\\n\\t\\t\\t\\t<td><pre>Patient.birthDate: minimum required = 1, but only found 0 (from <http://koppeltaal.nl/fhir/StructureDefinition/KT2Patient>)</pre></td>\\n\\t\\t\\t</tr>\\n\\t\\t\\t<tr>\\n\\t\\t\\t\\t<td style=\\"font-weight: bold;\\">ERROR</td>\\n\\t\\t\\t\\t<td>[Patient.name[0], Line 1, Col 256]</td>\\n\\t\\t\\t\\t<td><pre>Patient.name:nameInformation.family: minimum required = 1, but only found 0 (from <http://koppeltaal.nl/fhir/StructureDefinition/KT2Patient>)</pre></td>\\n\\t\\t\\t</tr>\\n\\t\\t\\t<tr>\\n\\t\\t\\t\\t<td style=\\"font-weight: bold;\\">ERROR</td>\\n\\t\\t\\t\\t<td>[Patient.name[0], Line 1, Col 256]</td>\\n\\t\\t\\t\\t<td><pre>Patient.name:nameInformation.given: minimum required = 1, but only found 0 (from <http://koppeltaal.nl/fhir/StructureDefinition/KT2Patient>)</pre></td>\\n\\t\\t\\t</tr>\\n\\t\\t</table>\\n\\t</div>"
  },
  "issue": [ {
    "severity": "warning",
    "code": "processing",
    "diagnostics": "dom-6: 'A resource should have narrative for robust management' Rule 'A resource should have narrative for robust management' Failed",
    "location": [ "Patient", "Line 1, Col 2" ]
  }, {
    "severity": "information",
    "code": "processing",
    "diagnostics": "This element does not match any known slice defined in the profile <http://koppeltaal.nl/fhir/StructureDefinition/KT2Patient>",
    "location": [ "Patient.identifier[0]", "Line 1, Col 179" ]
  }, {
    "severity": "error",
    "code": "processing",
    "diagnostics": "Patient.birthDate: minimum required = 1, but only found 0 (from <http://koppeltaal.nl/fhir/StructureDefinition/KT2Patient>)",
    "location": [ "Patient", "Line 1, Col 2" ]
  }, {
    "severity": "error",
    "code": "processing",
    "diagnostics": "Patient.name:nameInformation.family: minimum required = 1, but only found 0 (from <http://koppeltaal.nl/fhir/StructureDefinition/KT2Patient>)",
    "location": [ "Patient.name[0]", "Line 1, Col 256" ]
  }, {
    "severity": "error",
    "code": "processing",
    "diagnostics": "Patient.name:nameInformation.given: minimum required = 1, but only found 0 (from <http://koppeltaal.nl/fhir/StructureDefinition/KT2Patient>)",
    "location": [ "Patient.name[0]", "Line 1, Col 256" ]
  } ]
}

$validate operatie

Applicatie-instanties kunnen ook enkel resources valideren bij de FHIR resource service conform de specificatie.

Referentiële integriteit

De FHIR resource service dient referentiële integriteit af te dwingen. Dit is ook een vorm van validatie die uitgevoerd moet worden. De implementatiedetails en eisen zijn te vinden bij het topic Logische ID, bedrijfsidentifier, referenties en referentie integriteit#Referentie integriteit.

Links naar gerelateerde onderwerpen

Eisen

VAL - Eisen aan validatie