# patient_relation — FRIDAY 患者-患者关系边(customer_referee_circle → patient_relations 独立表)
#
# 源表双向成对存储(A→B 与 B→A 各一行,互为视角)。upsert 资源(无 emits),同 jvs-dw。
#
# ── 关系码 = 官方枚举(源码实锤,2026-07-20)──
# friday-saas/customer …/enums/RecommendRelationshipEnum.java:
#   1配偶 2爸爸 3子女 4兄弟 5爷爷 6孙子女 7朋友 8其他亲属 9姐妹 10妈妈 11奶奶
#   12姐弟 13兄妹 14其他 15外公 16外婆 17外孙子女
#
# ── 语义方向:码 = **对方(referee)是本人(customer)的 X**,与 PAC 契约同向,直译不取逆 ──
# 2026-07-30 源库全量实测(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%),平均大 38.9 岁
#   码11 奶奶  → 关系人年长  17/19 (89%),平均大 40.9 岁
#   码16 外婆  → 关系人年长  15/17 (88%),平均大 40.0 岁
#   码17 外孙女→ 本人年长    31/36 (86%),平均小 38.5 岁
#   码 6 孙子女→ 本人年长    32/46 (70%)
# 方法学对照:对称码(1配偶 348/354、4兄弟 56/55、7朋友 265/264)全是 50/50 —— 说明这个
# 年龄判据本身干净,有方向的码上的强烈偏斜不是判据偏差。
#
# ⚠️ 本版修正的历史错误:此前注释称「码 = 本人是对方的 X」(依据 reverseValue() 源码 +
#   早期年龄差推断),于是 enum_mapping 全部取逆(码2→child、码3→father/mother、
#   码5→grandchild…)。实测把这个假设推翻了:PAC 侧 friday 父母/子女/祖孙边的方向矛盾率
#   高达 94.6%(1187/1255),而同口径走 cold-import 的 jvs-dw 只有 4.0%(432/10842,人工零星
#   录错水平)。互反对更硬:mother↔child 326 对里只有 8 对方向正确(2.5%)。
#   实样:秦佳(47) --mother--> 韩秦瑜(21) —— 47 岁的人有个 21 岁的「妈妈」。
#   剩余 3–5% 符合逆读法的边判为源侧人工录错(与 jvs-dw 的 4% 同量级),不为它们反转全局。
#
# 【为什么不再需要 rel_sex_key 的性别拆分】
#   逆映射时码3(子女)要按对方性别拆成 father/mother,才需要 lookup 对方 sex。同向之后
#   码2→father、码10→mother **本身就带性别**,码3→child 不分性别 —— 性别彻底用不上了。
#   transforms 里的 _referee_with_sex(含 push_fallback)因此变成死配置,留待单独一次清理,
#   不跟本次方向修正混在一起改。这里仍按 "码|性别" 建键,但每个码的 |1 / |2 / |(性别缺失)
#   三个变体都显式列全 —— 旧版码3 只有 "3|1"/"3|2" 没有 "3|",对方性别缺失的边(源库 15 条)
#   会静默掉进 _default: other,顺手一并修掉。
canonical: patient_relation

primary:
  table: patient_relation_rows
  key: customer_id       # 非真 PK;去重靠 PatientRelation @@unique(patientId, relatedExternalId, relationship)

field_mapping:
  patientExternalId:  customer_id
  relatedExternalId:  referee_patient_id
  relationship:       rel_sex_key      # "码|对方性别";同向直译,性别不参与判定(见上方说明)

enum_mapping:
  relationship:
    # 1 配偶(对称)
    "1|1":  spouse
    "1|2":  spouse
    "1|":   spouse
    # 2 爸爸 → 对方是本人的 father;10 妈妈 → mother(码本身带性别)
    "2|1":  father
    "2|2":  father
    "2|":   father
    "10|1": mother
    "10|2": mother
    "10|":  mother
    # 3 子女 → 对方是本人的 child(不分性别)
    "3|1":  child
    "3|2":  child
    "3|":   child
    # 4 兄弟 / 9 姐妹 / 12 姐弟 / 13 兄妹 → sibling(对称)
    "4|1":  sibling
    "4|2":  sibling
    "4|":   sibling
    "9|1":  sibling
    "9|2":  sibling
    "9|":   sibling
    "12|1": sibling
    "12|2": sibling
    "12|":  sibling
    "13|1": sibling
    "13|2": sibling
    "13|":  sibling
    # 5 爷爷 / 11 奶奶 / 15 外公 / 16 外婆 → 对方是本人的 grandparent
    "5|1":  grandparent
    "5|2":  grandparent
    "5|":   grandparent
    "11|1": grandparent
    "11|2": grandparent
    "11|":  grandparent
    "15|1": grandparent
    "15|2": grandparent
    "15|":  grandparent
    "16|1": grandparent
    "16|2": grandparent
    "16|":  grandparent
    # 6 孙子女 / 17 外孙子女 → 对方是本人的 grandchild
    "6|1":  grandchild
    "6|2":  grandchild
    "6|":   grandchild
    "17|1": grandchild
    "17|2": grandchild
    "17|":  grandchild
    # 7 朋友
    "7|1":  friend
    "7|2":  friend
    "7|":   friend
    # 8 其他亲属 / 14 其他 / NULL / 未知码
    _default: other
