feat: 摄入 treat_stages 字段 + PAC 标准 step enum
设计原则:字段名 + 内容都用 PAC 标准,host 字面值在 yaml 翻译
- canonical 跟宿主无关(其他宿主接入只改 yaml,代码不动)
- host "开髓"/"拔髓" → PAC pulp_extirpation
- host "根备"/"根管预备" → PAC canal_preparation
- host "根充"/"根管充填" → PAC canal_filling
- host "种植体植入"/"种植一期" → PAC implant_placement
- host "种植上部修复"/"种植冠修复"/"种植戴牙" → PAC crown_placement
- 等 22 个 PAC 标准 step
改动:
1. canonical-codes.ts:
- 新加 PACTreatmentStep enum(22 个,英文 snake_case + 中文 label)
- TreatmentMilestones.steps 改用 PAC step key(不再用中文词)
- 新加 LegacyStepSubtypeKeywords:host 没填 stages 时词根 fallback
2. canonical.ts: TreatmentCanonicalSchema 加 treatStages?: string[]
3. fact-content-schemas.ts: treatment_record.content 加 treat_stages
4. manifest.yaml § C.1/C.2: element_fields 加 treatStages
5. treatment_actual.yaml + treatment_planned.yaml:
- field_mapping 加 treatStages
- enum_mapping 新加 treatStages 段(host 字面 → PAC enum,22 条)
6. assembler-engine.applyEnum: 支持 array 字段(每元素 lookup mapping)
7. treatment.parser: content.treat_stages 存数组(已 PAC 标准)
8. chain-composer.matchMilestoneSteps:
- 优先用 treat_stages 精确匹配 PAC step
- fallback 用 LegacyStepSubtypeKeywords + subtype.includes()
- S3 title 用 PACTreatmentStep 字典渲染中文(非 enum key)
验证(杨光宗 27 牙):
入库:
4-10 stages=["pulp_extirpation"] ← host "开髓"
4-20 stages=["canal_preparation"] ← host "根备"
5-04 stages=null ← host 没填,落空
5-18 stages=null ← 充填 actual host 没填
Chain:
根管治疗 S3 done ✓ "开髓/拔 → 根管预备" / 已完成 3 次
牙体修复 S3 done ✓ "树脂充填" / 已完成 1 次(走 subtype 词根 fallback)
待办(后续):
- lifecycle="linear_then_crown" 新加,endodontic 闭环额外要求 prosthodontic actual(冠)
- 当前杨光宗 27 没戴冠仍 closed,临床其实差最后一步
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Showing
Please
register
or
sign in
to comment