mirror of
https://github.com/temetro/temetro.git
synced 2026-08-18 22:26:19 +00:00
0d2494d67a
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>
37 lines
911 B
TypeScript
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 }],
|
|
};
|
|
}
|