assignment-proposal.service.ts
33 KB
-
feat(plan): 首批 N 按「在岗人数×20」估 + 与候选取小;专属改为硬约束独占 · 61537b7d
① 基数 N 的取值改成产品定的算法: 首次 min(在岗人数 × 20, 候选总数),之后 min(上一次的 N, 候选总数),时效首次 3 天后沿用。
⚠ ️ 与候选取小压低的是 target,⛔ **不回写基数** —— 候选不够是这一批的偶然事实, 存进去的话主管点一次 44 人的小格子,以后所有批次永远 44 人,而他看不出为什么。 所以确认单同时给 batchSize(基数)与 target(本批实际),卡片存前者。⚠ ️ fetchLimit 改按基数算,让 count 与取明细还能并发,不多一个来回。 ②🔴 硬约束:**客服不能接别人的专属患者**。有专属(且在名册内)的患者只有一个去处, 给不下就落不下(unplaced),不允许溢出给第三个人。 · 推翻原「专属已满 → 溢出转铺平」,SPREAD_OVERFLOW 不再产生(枚举保留,老批次在用); · 两趟分工改为「专属独占 → 无主患者水位法」,后者负责抹平前者造成的不齐; · maxThisBatch 精调压过专属:说了只给 5 条,第 6 个她的专属患者就落不下,⛔ 不许改派; · 上一版给专属加的"目标水位封顶"与本约束冲突(会把专属患者改派给第三人),撤掉。⚠ ️ 直接后果,已在教条里写明:「最后齐平」变成尽力而为。实测 N=340 时康慧捧 一个人是其中 248 人的专属,他就拿 248 条 —— 那些患者只有他能接。 调节手段是给他设 maxThisBatch 或换更小的 N,⛔ 不是让系统偷偷分给别人。 本地实测:1,081 候选 → 首批 340 人(17×20),池子里还有 741 人排队。988 tests green。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>luoqi committed