# diagnosis — FRIDAY 诊断 fact(med_emr_info.diag[] 拆行)
# 消费 transforms 输出表 diagnosis_rows(split + std_diag lookup + normalize/substring/coalesce)
#
# code 解析规则(用户定,2026-07-18):
#   linkCode 非空 → std_diag.std_code K 开头 → 截 K 大类(std_code_k 直通下方共享字典 passthrough);
#   非 K(DA0E.50 等 ICD-11)→ substring 产物("DA0")不在字典 → _default → code=null(自由文本);
#   linkCode 空(99.7%)→ 归一中文名 → 共享 diagnosis-kcode 字典救码(与 jvs-dw 完全同一套)。
# 任何情况下 name=原文保留(展示 + LLM 输入),不丢 fact。
canonical: diagnosis

emits:
  action: diagnosis_recorded
  subjectType: diagnosis
  occurredAtField: occurredAt

primary:
  table: diagnosis_rows
  key: diag_external_id
  dedup_by: diag_external_id

field_mapping:
  externalId:                   diag_external_id
  updatedAt:                    updated_gmt_at
  createdAt:                    created_gmt_at
  patientExternalId:            patient_id
  clinicId:                     organization_id
  occurredAt:                   clinic_time      # 就诊时刻(100% 填充)
  sourceEncounterExternalId:    emr_sub_id       # 同诊聚合锚(病历不普遍挂预约,用小病历号)
  code:                         diag_code_src    # K 码 或 归一中文名 → 共享字典翻译
  stdCodeRaw:                   std_code         # 溯源:字典 join 到的原始 std_code(可 null)
  name:                         value            # 原始中文名(展示 + LLM 输入)
  toothPosition:                tooth_position   # "41;42" / "42 L;43 D"(FDI+牙面,分号分隔)
  doctorId:                     user_id
  doctorName:                   user_name

# ── 字典分层:临床通用层(K 直通 + 中文术语→K 码 + keyword 兜底)全在共享文件 ──
dict_includes:
  - ../../_shared/dict/diagnosis-kcode.yaml

enum_mapping:
  code:
    # 兜底:共享 enum/keyword 都翻不出 → 空 → code=null(不丢 fact,name 保留)
    _default: ""
