backend: prescription start/end dates + dispense ledger

Add optional startDate/endDate columns to prescriptions (schema,
validation, types, service) — when set, endDate drives expiry.

Add a new append-only `dispenses` resource (schema, types, validation,
service, route at /api/dispenses) recording who received which medication,
gated on the existing inventory RBAC statement. Migration 0020.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Khalid Abdi
2026-06-16 20:44:47 +03:00
parent 15fc7fdf26
commit f0fe501d62
15 changed files with 3749 additions and 0 deletions
+4
View File
@@ -22,6 +22,8 @@ function toPrescription(row: PrescriptionRow): Prescription {
frequency: row.frequency,
prescriber: row.prescriber,
prescribedAt: row.prescribedAt,
startDate: row.startDate,
endDate: row.endDate,
status: row.status,
duration: row.duration,
notes: row.notes,
@@ -45,6 +47,8 @@ function columns(orgId: string, input: PrescriptionInput, createdBy?: string) {
duration: input.duration ?? null,
notes: input.notes ?? null,
source: input.source,
startDate: input.startDate ?? null,
endDate: input.endDate ?? null,
// Only set prescribedAt when supplied; otherwise the column default (today).
...(input.prescribedAt ? { prescribedAt: input.prescribedAt } : {}),
...(createdBy ? { createdBy } : {}),