Skip to main content

Endpoint

POST https://fhiron.cl/api/validate

Headers

HeaderRequeridoDescripción
Content-Typeapplication/json
X-API-KeyAPI key del tenant. Disponible en fhiron.cl/dashboard/settings.

Request body

Cualquier recurso FHIR® R4 válido como JSON. Inspect detecta el resourceType y busca el perfil CL Core correspondiente automáticamente.

Ejemplo: Encounter con class.system no canónico

Caso típico al migrar de un HIS interno hacia FHIR: el desarrollador clasifica el encuentro con un CodeSystem propio (https://miempresa.cl/encounter-types) en vez del CodeSystem v3-ActCode que es la convención FHIR R4. Un consumidor que valide terminología (FONASA, bus MINSAL, EHR externo) lo rechaza.
curl -X POST https://fhiron.cl/api/validate \
  -H "Content-Type: application/json" \
  -H "X-API-Key: $FHIRON_API_KEY" \
  -d '{
    "resourceType": "Encounter",
    "status": "finished",
    "class": {
      "system": "https://miempresa.cl/encounter-types",
      "code": "ambulatorio"
    },
    "subject": { "reference": "Patient/example" },
    "period": {
      "start": "2026-05-11T09:00:00-04:00",
      "end":   "2026-05-11T09:25:00-04:00"
    }
  }'

Response

{
  "resourceType": "OperationOutcome",
  "issue": [
    {
      "severity": "error",
      "code": "invalid",
      "details": {
        "text": "Encounter.class.system debería ser canónico v3-ActCode (http://terminology.hl7.org/CodeSystem/v3-ActCode). Códigos esperados: AMB · IMP · EMER · HH · entre otros."
      },
      "expression": ["Encounter.class.system"],
      "diagnostics": "{\"code\":\"cl-enc-05\",\"why\":\"FHIR R4 + HL7 v3: Encounter.class usa v3-ActCode. Usar un system propio rompe interoperabilidad con bus MINSAL.\",\"quickFix\":{\"jsonPointer\":\"/class\",\"replacement\":{\"system\":\"http://terminology.hl7.org/CodeSystem/v3-ActCode\",\"code\":\"AMB\"}}}"
    }
  ]
}
Si el recurso es válido, issue[] viene vacío y el HTTP status es 200.

Códigos HTTP

CódigoSignificado
200Validación ejecutada. Revisar issue[] para los problemas encontrados.
400JSON inválido o falta resourceType.
401X-API-Key ausente, inválida o revocada.
429Cuota mensual del plan agotada. Ver headers X-RateLimit-*.
5xxError de gateway o validador. Reintentar con backoff exponencial.

Rate limits

Cada plan tiene una cuota mensual de validaciones. Los headers de respuesta incluyen:
  • X-RateLimit-Limit: cuota total del mes.
  • X-RateLimit-Remaining: validaciones restantes.
  • X-RateLimit-Reset: timestamp Unix del próximo reseteo.
Las tools offline del MCP (fhiron_lint, fhiron_apply_fix, fhiron_get_example, fhiron_search_terminology, fhiron_explain_code, fhiron_score_endpoint) no consumen cuota: se ejecutan localmente en el connector. Para el detalle completo (Bundle = N validaciones, MCP, qué descuenta y qué no, qué pasa al agotar la cuota), ver Cómo se cuentan las validaciones.

Idempotencia

POST /api/validate es idempotente. El mismo body produce el mismo output. No hay efectos colaterales: el recurso no se persiste (ver Stateless Gateway).