fhir_validation

pub package

Validation of FHIR resources against their StructureDefinitions, for every FHIR version: structure, cardinality, bindings, extensions and invariants (FHIRPath constraints), plus a QuestionnaireResponse against its Questionnaire.

FHIR® is the registered trademark of HL7 and is used with the permission of HL7. Use of the FHIR trademark does not constitute endorsement of this product by HL7.

How it is version-free

The resource under validation is JSON. Definitions (StructureDefinition, ValueSet, CodeSystem, Questionnaire) come from a fhir_path ResourceCache and are read by element name through the fhir_node contract. A version's binding (fhir_r4_validation, fhir_r5_validation, fhir_r6_validation) supplies a ValidationModel: its primitive-value rules, how a JSON value becomes a typed FHIRPath context, and its fhir_path binding.

Usage with a binding

import 'package:fhir_r4_validation/fhir_r4_validation.dart';

final cache = CanonicalResourceCache()..see(patientStructureDefinition);
final results = await const FhirValidationEngine().validateFhirMap(
  structureToValidate: {'resourceType': 'Patient', 'id': 'p1'},
  resourceCache: cache,
);
if (results.hasErrors) print(results.toOperationOutcome().toJson());

Supply a cache. The default CanonicalResourceCache is empty, so without one the engine answers "No StructureDefinition found for resourceType".

Usage without a binding

Implement ValidationModel for whatever implements FhirNode and pass it:

final engine = FhirValidationEngine(myModel);

Libraries

fhir_validation
FHIR resource validation for every FHIR version: a resource (as JSON) is checked against its StructureDefinition for structure, cardinality, bindings, extensions and invariants, and a QuestionnaireResponse against its Questionnaire.