# patient — 主档 upsert(不进 transaction,无 emits)
# 源:customer.customer_basic_info(原始表);phone 由 manifest.transforms.lookup
#     从 customer_contacts 挑默认号附加进来,故这里直接映射标量 phone。
canonical: patient

primary:
  table: customer_basic_info
  key: id

field_mapping:
  externalId:          id             # customer_basic_info 主键 = host 内部患者唯一 id(→ String 化)
  name:                name
  phone:               phone          # 由 transforms.lookup 从 customer_contacts 挑默认号附加
  gender:              sex            # tinyint 1/2 → enum_mapping 归一;0/空 → 空
  birthDate:           birthday       # date;空值入库为 null
  medicalRecordNumber: file_number    # 档案号(病历号,客服沟通用)
  createdAt:           created_gmt_at
  updatedAt:           updated_gmt_at
  # source_unit(品牌)由 manifest.identity_namespace_field=brand_id 填,不在此声明。
  # organization_id / status / 获客渠道 等首版不接,后续资源(encounter/settlement)接入再补。

# 性别:host tinyint → PAC gender(自由文本,前端 formatGender 认 male/female)
enum_mapping:
  gender:
    '1':      male
    '2':      female
    _default: ''      # 0 / 空 / 未知 → 空(gender 可空,不阻挡入库)
