Skip to main content
validate() envía el recurso al motor de Fhiron (HAPI más perfiles CL Core) y devuelve los hallazgos en español. Descuenta 1 de la cuota mensual del tenant por recurso validado.
import { Fhiron } from '@fhiron/sdk';

const fhiron = new Fhiron({ apiKey: process.env.FHIRON_API_KEY });

const result = await fhiron.validate(medicationRequest);

if (result.ok) {
  // sigue tu flujo: persistir, reenviar al EHR, etc.
} else {
  result.errors.forEach((e) => console.log(e.code, e.path, e.message));
}

Firma

validate(resource: object, opts?: {
  profile?: string;        // "hl7.fhir.cl.clcore@1.9.4" o "1.9.4"
  clCoreVersion?: string;  // override puntual de la versión
  timeout?: number;        // ms
}): Promise<ValidateResult>
El resource debe tener resourceType en la raíz. Funciona también con Bundles (resourceType: "Bundle").

El resultado

interface ValidateResult {
  valid: boolean;            // el motor no encontró errores
  ok: boolean;               // valid && !engineDegraded: úsalo como gate
  engineDegraded: boolean;   // el motor no pudo validar (no se descontó cuota)
  resourceType: string | null;
  profile: string | null;
  issues: Issue[];           // todos los hallazgos
  errors: Issue[];           // atajo: severity === 'error'
  warnings: Issue[];
  information: Issue[];
  messages: { errors: string[]; warnings: string[] };
  raw: Record<string, unknown>;  // respuesta cruda del endpoint
}
Cada Issue trae code, severity, path, message y, cuando aplica, profileUrl, suggestion, why y quickFix. Ver referencia.

Usar ok como gate

const result = await fhiron.validate(resource);
if (!result.ok) {
  throw new Error(`Recurso no cumple CL Core: ${result.errors.map((e) => e.message).join('; ')}`);
}
await ehr.post(resource);
ok es valid && !engineDegraded: solo es true cuando el motor realmente validó y no encontró errores. Cuando engineDegraded es true, el motor remoto tuvo un problema sistémico, no se descontó cuota y conviene reintentar.

Elegir la versión de CL Core

Por defecto la versión la resuelve tu tenant. Para fijar una puntual:
await fhiron.validate(resource, { profile: 'hl7.fhir.cl.clcore@1.9.4' });
// o
await fhiron.validate(resource, { clCoreVersion: '1.9.4' });

Lint local + validación remota

check() corre el lint offline y la validación remota en un solo llamado, y adjunta localIssues:
const result = await fhiron.check(resource);
console.log(result.localIssues); // hallazgos estructurales inmediatos
console.log(result.errors);      // hallazgos del motor remoto

Manejo de errores

validate() lanza errores tipados ante fallos HTTP o de red. Ver errores.
import { FhironQuotaError } from '@fhiron/sdk';

try {
  await fhiron.validate(resource);
} catch (err) {
  if (err instanceof FhironQuotaError) {
    console.log('Cuota agotada. Upgrade en', err.upgradeUrl);
  }
}