mirror of
https://github.com/temetro/temetro.git
synced 2026-08-27 19:06:52 +00:00
36461a5498
Patient record: - Add `bloodType` and `phone` to the patient model (schema, canonical types on both backend + frontend, zod validation). `phone` is a demographic field (reception can read/write); `bloodType` is clinical PHI, redacted for the reception role. Surface both in the record sheet, chat summary card, and the add/edit patient form. Migration 0033. Clinic location: - New org-scoped `clinic_settings` table (address/city/country + optional lat/long), service, and routes: GET /api/clinic/settings (any clinician) and PUT /api/clinic/location (owner/admin). Edited in Settings → Signing → Clinic location. Consumed later by the wallet app. Migration 0034. i18n: - Translate all new keys into every shipped locale (en/de/fr/ar/so) and document the "translate into every locale" rule in frontend/CLAUDE.md. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
26 lines
1.1 KiB
TypeScript
26 lines
1.1 KiB
TypeScript
import { doublePrecision, pgTable, text, timestamp } from "drizzle-orm/pg-core";
|
|
|
|
import { organization } from "./auth.js";
|
|
|
|
// Per-clinic (organization) settings. Currently holds the clinic's physical
|
|
// location — a free-text address plus optional map coordinates — set in
|
|
// Settings → Location by an owner/admin and surfaced to patients in the wallet
|
|
// app later (e.g. a map pin for a clinic that shared a record). One row per org
|
|
// (PK = organizationId), mirroring `clinic_signing_keys`.
|
|
export const clinicSettings = pgTable("clinic_settings", {
|
|
organizationId: text("organization_id")
|
|
.primaryKey()
|
|
.references(() => organization.id, { onDelete: "cascade" }),
|
|
address: text("address").notNull().default(""),
|
|
city: text("city").notNull().default(""),
|
|
country: text("country").notNull().default(""),
|
|
// Optional map coordinates (WGS84). Null until the clinic sets them.
|
|
latitude: doublePrecision("latitude"),
|
|
longitude: doublePrecision("longitude"),
|
|
createdAt: timestamp("created_at").defaultNow().notNull(),
|
|
updatedAt: timestamp("updated_at")
|
|
.defaultNow()
|
|
.$onUpdate(() => new Date())
|
|
.notNull(),
|
|
});
|