fix(friday): 患者关系边方向反了 —— enum_mapping 去掉多余的逆映射
patient_relation.yaml 的注释断言「码 = 本人(customer)是对方(referee)的 X」(依据 RecommendRelationshipEnum.reverseValue() 源码 + 早期年龄差推断),于是 enum_mapping 整体取逆:码2 爸爸→child、码3 子女→father/mother、码5 爷爷→grandchild…… 数据把这个假设推翻了:码本来就是「对方是本人的 X」,与 PAC 契约同向,不该反转。 【证据一:PAC 侧方向矛盾率】按「关系人比本人年长/年轻是否合理」判定,只算两边都建档 且都有生日的边: friday 1187/1255 = 94.6% ← 系统性反转 jvs-dw 432/10842 = 4.0% ← 人工零星录错的正常水平(其 yaml 是对的,不动) 互反对更硬:mother↔ child 326 对里只有 8 对方向正确(2.5%);father↔ child 231 对里 9 对。 实样:秦佳(47) --mother--> 韩秦瑜(21),同时 韩秦瑜(21) --child--> 秦佳(47) —— 两条边互相自洽但都与年龄矛盾,去掉逆映射两条就都对了。 【证据二:源库独立复核(不经 PAC 摄入)】join customer_basic_info 两侧 birthday: 码10 妈妈 关系人年长 419/430(97%),平均大 27.4 岁 码 3 子女 本人年长 643/675(95%),平均小 26.8 岁 码 2 爸爸 关系人年长 252/277(91%),平均大 26.1 岁 码15 外公 关系人年长 20/22 (91%) | 码11 奶奶 17/19(89%) | 码16 外婆 15/17(88%) 码17 外孙 本人年长 31/36 (86%) | 码 6 孙辈 32/46(70%) 方法学对照:对称码(1配偶 348/354、4兄弟 56/55、7朋友 265/264)全是 50/50,说明这个 年龄判据本身干净,有方向码上的强烈偏斜不是判据偏差。 剩余 3–5% 符合逆读法的边判为源侧人工录错(与 jvs-dw 的 4% 同量级),不为它们反转全局。 顺手修掉一个静默 bug:旧版码3 只配了 "3|1"/"3|2",没有 "3|" —— 对方性别缺失的边 (源库 15 条)会掉进 _default: other。本版每个码的 |1 / |2 / | 三个变体都列全。 同向映射后性别不再参与判定(码2 自带 father、码10 自带 mother、码3→child 不分性别), transforms 里的 _referee_with_sex + push_fallback 成了死配置 —— 留待单独一次清理, 不跟方向修正混在一起改。 回归闸 tests/friday-relation-direction.spec.ts:不比对字符串字面量,而是用源库实测的 辈分方向锁语义(长辈码不得映射成晚辈词,反之亦然)。已验证该闸对旧 yaml 报 21 项失败。⚠ ️ 未含数据修复:patient_relations 唯一键是 (patient_id, related_external_id, relationship),relationship 变了就是新行而非更新 —— 重摄只会在错边旁边新增对边。 必须先删 friday 存量关系边再重摄。该步骤待部署后单独执行。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>