Files
temetro/backend/src/services/fhir-server/outcome.ts
T
Khalid Abdi 0d2494d67a feat: read-only FHIR R4 server (share records over /fhir)
Expose temetro's own records as a read-only FHIR R4 server at /fhir,
authenticated with per-clinic API keys (tmf_… bearer tokens, SHA-256
hashed, shown once). Serves Patient, Observation (labs + vitals),
AllergyIntolerance, Condition, MedicationRequest, Encounter and
Appointment as text-only CodeableConcepts (temetro stores free-text
clinical values); CapabilityStatement at /fhir/metadata (unauth).
Searchset Bundles with _count/_offset pagination and self/next/prev
links; every request is org-scoped and written to the activity log.
Keys are created/revoked under Settings → Integrations (owner/admin).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-04 01:27:32 +03:00

37 lines
911 B
TypeScript

// FHIR OperationOutcome helpers. Errors on a FHIR endpoint are returned as an
// OperationOutcome resource (not our usual `{ error }` JSON), with the
// `application/fhir+json` content type, so conformant clients can parse them.
export const FHIR_CONTENT_TYPE = "application/fhir+json";
export type IssueSeverity = "fatal" | "error" | "warning" | "information";
export type IssueCode =
| "not-found"
| "not-supported"
| "security"
| "login"
| "forbidden"
| "invalid"
| "processing"
| "exception";
export type OperationOutcome = {
resourceType: "OperationOutcome";
issue: {
severity: IssueSeverity;
code: IssueCode;
diagnostics?: string;
}[];
};
export function operationOutcome(
severity: IssueSeverity,
code: IssueCode,
diagnostics: string,
): OperationOutcome {
return {
resourceType: "OperationOutcome",
issue: [{ severity, code, diagnostics }],
};
}