Saltar al contenido

Errores de Constraints

Los errores de constraints ocurren cuando una invariante FHIRPath definida en el StructureDefinition se evalúa como false o encuentra un error de evaluación. FHIR define constraints (invariantes) en elementos usando expresiones FHIRPath. Cada constraint tiene una clave (ej., ele-1, dom-6), una severidad (error o warning), una descripción legible por humanos y una expresión FHIRPath que debe evaluarse como true para que el recurso sea válido.

Códigos de Error

IDSeveridadMensaje
CONSTRAINT_FAILEDvaríaConstraint failed: {constraint}: ‘{human}’
CONSTRAINT_ERRORwarningConstraint ‘{constraint}’ evaluation error: {error}

CONSTRAINT_FAILED

Un constraint FHIRPath se evaluó como false. La severidad de este issue está determinada por la definición del constraint en sí – cada constraint declara si la violación es un error o un warning.

Ejemplo – recurso inválido:

El constraint ele-1 está definido en el tipo base Element con la expresión hasValue() or (children().count() > id.count()) y la descripción humana “All FHIR elements must have a @value or children”. Si un elemento no tiene ni valor ni hijos, este constraint falla:

{
  "resourceType": "Patient",
  "name": [
    {}
  ]
}

Salida de validación:

ERROR: Constraint failed: ele-1: 'All FHIR elements must have a @value or children'
  Path: Patient.name[0]
  MessageID: CONSTRAINT_FAILED

Corrección: Asegúrate de que el elemento tenga un valor o hijos:

{
  "resourceType": "Patient",
  "name": [
    {
      "family": "Smith"
    }
  ]
}

Constraints Comunes

Aquí hay algunos constraints FHIR encontrados frecuentemente:

ClaveContextoDescripciónSeveridad
ele-1ElementAll FHIR elements must have a @value or childrenerror
dom-3DomainResourceIf the resource is contained in another resource, it SHALL be referred to from elsewhere in the resourceerror
dom-6DomainResourceA resource should have narrative for robust managementwarning
obs-6ObservationdataAbsentReason SHALL only be present if Observation.value[x] is not presenterror
obs-7ObservationIf Observation.code is the same as an Observation.component.code then the value element associated with the code SHALL NOT be presenterror
pat-1Patient.contactSHALL at least contain a contact’s details or a reference to an organizationerror
ref-1ReferenceSHALL have a contained resource if a local reference is providederror

Severidad Desde la Definición del Constraint

La severidad de CONSTRAINT_FAILED no es fija. Se lee del campo ElementDefinition.constraint.severity en el StructureDefinition:

{
  "key": "ele-1",
  "severity": "error",
  "human": "All FHIR elements must have a @value or children",
  "expression": "hasValue() or (children().count() > id.count())"
}

Si severity es "error", el issue es un error. Si severity es "warning", el issue es un warning. Los perfiles pueden agregar nuevos constraints o cambiar la severidad del constraint (dentro de ciertos límites).

Los constraints se evalúan usando FHIRPath, un lenguaje de navegación y extracción basado en rutas para FHIR. La expresión del constraint debe retornar un valor booleano. Cuando retorna false, el constraint se considera violado.

CONSTRAINT_ERROR

La expresión FHIRPath de un constraint no se pudo evaluar debido a un error en tiempo de ejecución. Esto no necesariamente significa que el recurso sea inválido – significa que el validador no pudo determinar si el constraint se satisface. Esto siempre se reporta como un warning.

Causas comunes:

  • La expresión FHIRPath referencia un tipo de elemento que el motor no soporta completamente
  • La expresión usa una función FHIRPath que no está implementada
  • Ocurrió un error en tiempo de ejecución durante la evaluación de la expresión (ej., discrepancia de tipos en una comparación)

Ejemplo de salida:

WARNING: Constraint 'inv-1' evaluation error: Function 'iif' not implemented
  Path: Observation
  MessageID: CONSTRAINT_ERROR
Los errores de evaluación de constraints indican una limitación del motor FHIRPath, no necesariamente un problema con el recurso. Si los encuentras consistentemente, verifica si la función FHIRPath utilizada en el constraint está soportada por el GoFHIR Validator.
Última actualización