Files
threadcount-community/prisma/migrations/20260911030000_approval_by_staff/migration.sql
T
ThreadCount 822c0b7c0b ThreadCount Community edition
Uniform stock management for healthcare linen rooms: the coordinator app, the phone counter and the staff app, for your own server. Built from 8685140 on 2026-09-13. Licensed under the Functional Source License (FSL-1.1-ALv2).
2026-09-13 11:09:20 +10:00

27 lines
1.9 KiB
SQL

-- Which person on the register signed the form, not just what they were called at the time.
--
-- "Approved by" has been a typed name since the first form was entered, and the typed name is
-- staying exactly where it is. byName is the name AS SIGNED: a signed order form does not start
-- reading differently because the manager who signed it was later married, promoted or taken off
-- the register. What the typed name could never do was point at a person, so the only way to find
-- what a manager had approved was to match a string, and a spelling change broke the match
-- silently.
--
-- Nullable, and deliberately not backfilled. Every approval already recorded in this linen room
-- was typed before the register search existed, and guessing which person a signature meant would
-- put somebody's name against an approval nobody actually chose them for. Those rows keep their
-- signature and no link, which is the truth about them. New approvals get both, and a manager who
-- is not on the register at all — agency, visiting — still records as a signature alone.
ALTER TABLE "Approval" ADD COLUMN "byStaffId" TEXT;
-- The history of forms per staff member reads this column to answer "what has this manager
-- approved?". Without it that question is a scan of every approval the facility has ever recorded.
CREATE INDEX "Approval_byStaffId_idx" ON "Approval"("byStaffId");
-- ON DELETE SET NULL, and byName is what makes it safe. Removing a manager from the register must
-- not delete the approvals they signed — the sets somebody was actually issued would go off the
-- record with them — and it must not be refused either, or a room could never tidy up a manager
-- who has ever approved anything, which is most of them. The link goes, the approval and the
-- signature stay.
ALTER TABLE "Approval" ADD CONSTRAINT "Approval_byStaffId_fkey" FOREIGN KEY ("byStaffId") REFERENCES "Staff"("id") ON DELETE SET NULL ON UPDATE CASCADE;