-- 分配决策快照五列 —— 记录「当初为什么选了这个人」
--
-- 【为什么必须现在加】这五列记的东西**都会被就地覆盖,事后无法重建**:
--   · patients.preferences.dedicatedCs   摄入时 upsert 覆盖,只留当前值
--   · 「在岗」判定                        "近 N 月有回访"是滚动窗口,今天在岗半年后变离岗
--   · priority_score                      引擎在 reason 未变时**就地改分、不升版本**
--   · confidenceFactor                    同上,且它是 score 里的 2× 乘子
--   · 探索配额标记                        不记则随机探索配额白留(无法与正常入选区分)
-- 分配一旦开始跑,每一批没记的都是永久空洞。几十字节 vs 一次不可逆的信息丢失。
--
-- 【为什么不重写 25 万行】五列全部可空、全部无默认 → PG 11+ 纯元数据操作。
--   与 20260802090000 同一条纪律:任何一列加 DEFAULT 或 NOT NULL,前提当场失效。
--   存量 NULL 即语义正确(= 快照上线前分配的单 / 自助认领单),**不回填**。
--
-- 【为什么可以用普通 DDL】本次不建任何索引:这五列是**取数时读**的快照,
--   不是筛选维度(要按它筛才该建索引 —— T17 同一条口径)。
--   单条 ALTER 带五个 ADD COLUMN,一次拿锁。锁窗口与迁移 A 同量级(1-3 秒)。
--
-- 【失败后】整份 SQL 在一个隐式事务里,不会出现半吊子 schema。
--   npx prisma migrate resolve --rolled-back 20260802140000_add_assignment_decision_snapshot

SET LOCAL lock_timeout = '10s';

ALTER TABLE "followup_plans"
    ADD COLUMN "dedicated_cs_at_assign"        TEXT,
    ADD COLUMN "dedicated_cs_last_visit_at"    TIMESTAMPTZ(3),
    ADD COLUMN "priority_score_at_assign"      DOUBLE PRECISION,
    ADD COLUMN "source_confidence_at_assign"   DOUBLE PRECISION,
    ADD COLUMN "selection_mode"                TEXT;
