# diagnosis — 独立诊断 fact
# 消费 transforms 输出表 diagnosis_rows(split_json_array + trim + coalesce 拼好)
#
# code 来源(diag_code_src):有 stdCode → K 码(已截短);否则 → 归一中文名,由下方 enum_mapping 翻译。
# 翻不出的中文名 → _default "" → parser 落 code=null(不丢 fact,留 message 给 Layer C LLM 补码)。
canonical: diagnosis

emits:
  action: diagnosis_recorded
  subjectType: diagnosis
  occurredAtField: occurredAt

primary:
  table: diagnosis_rows
  key: diag_external_id

field_mapping:
  externalId:                   diag_external_id
  patientExternalId:            patient_id
  clinicId:                     organization_id
  occurredAt:                   rq
  sourceEncounterExternalId:    emr_id
  code:                         diag_code_src    # K 码 或 归一中文名 → enum_mapping 翻译
  stdCodeRaw:                   std_code         # 溯源:判 code_source(std_code / name_map / null)
  name:                         message          # 原始中文名(展示 + LLM 输入)
  toothPosition:                tooth_position

# ── code 翻译 ──
# ① ICD K 大类直通(已 substring 的 stdCode);② 中文标准术语 → K 码白名单(草案,⚠️ 待牙医 review)
# 实测 ~98% 诊断没填 stdCode,只给标准中文名,这张表把高频高置信术语救回 K 码。
# 不在白名单的(复合 / 不确定 / 流程性,如"龋(16.继发龋)"、"种植术后")→ _default → code=null。
enum_mapping:
  code:
    # K 大类直通
    K00: K00
    K01: K01
    K02: K02
    K03: K03
    K04: K04
    K05: K05
    K06: K06
    K07: K07
    K08: K08
    K09: K09
    K10: K10
    K11: K11
    K12: K12
    K13: K13
    K14: K14
    # ── 中文术语 → K 码(高置信草案,trim 已去尾部标点)──
    # K05 牙周 / 牙龈
    慢性牙龈炎: K05
    牙龈炎: K05
    慢性龈炎: K05
    龈炎: K05
    菌斑性龈炎: K05
    慢性牙周炎: K05
    牙周炎: K05
    重度牙周炎: K05
    中度牙周炎: K05
    侵袭性牙周炎: K05
    # K02 龋
    龋: K02
    龋齿: K02
    龋坏: K02
    浅龋: K02
    中龋: K02
    深龋: K02
    继发龋: K02
    # K04 牙髓 / 根尖周
    牙髓炎: K04
    慢性牙髓炎: K04
    急性牙髓炎: K04
    根尖周炎: K04
    慢性根尖周炎: K04
    慢性根尖炎: K04
    急性根尖周炎: K04
    牙髓坏死: K04
    # K03 牙体硬组织其他(楔缺 / 缺损 / 残根冠)
    楔状缺损: K03
    楔形缺损: K03
    楔缺: K03
    牙体缺损: K03
    残根: K03
    残冠: K03
    # K01 阻生 / 埋伏
    阻生齿: K01
    阻生牙: K01
    阻生: K01
    埋伏牙: K01
    # K07 牙颌面异常 / 错颌
    错颌畸形: K07
    牙列不齐: K07
    牙列拥挤: K07
    安氏I类错颌畸形: K07
    安氏II类错颌畸形: K07
    安氏III类错颌畸形: K07
    # K08 缺牙 / 缺失
    牙缺失: K08
    缺失: K08
    缺失牙: K08
    牙列缺损: K08
    牙列缺失: K08
    # 兜底:翻不出 → 空 → parser 落 code=null(不丢 fact)
    _default: ""
