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
| ID | Severidad | Mensaje |
|---|---|---|
CONSTRAINT_FAILED | varía | Constraint failed: {constraint}: ‘{human}’ |
CONSTRAINT_ERROR | warning | Constraint ‘{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_FAILEDCorrecció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:
| Clave | Contexto | Descripción | Severidad |
|---|---|---|---|
ele-1 | Element | All FHIR elements must have a @value or children | error |
dom-3 | DomainResource | If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource | error |
dom-6 | DomainResource | A resource should have narrative for robust management | warning |
obs-6 | Observation | dataAbsentReason SHALL only be present if Observation.value[x] is not present | error |
obs-7 | Observation | If Observation.code is the same as an Observation.component.code then the value element associated with the code SHALL NOT be present | error |
pat-1 | Patient.contact | SHALL at least contain a contact’s details or a reference to an organization | error |
ref-1 | Reference | SHALL have a contained resource if a local reference is provided | error |
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).
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