# 本体字段治理 ## 背景 当前费用申请、报销助手、单据详情、风险规则和预算控制中存在字段口径不一致的问题。例如同一语义在不同环节被命名为 `transport_type`、`transport_mode`、`application_transport_mode`,或 `occurred_date`、`business_time`、`time_range`。这些字段如果不先进入本体层,会导致语义识别、规则判断、草稿保存和前端展示各自解释同一业务事实。 ## 原则 所有业务字段必须先设计为本体字段,再下放到业务模块使用。 - 本体字段注册表是唯一字段源。 - 业务层只允许消费本体 canonical 字段。 - 非本体字段只能作为输入别名,必须在语义入口归一。 - 页面控件字段、兼容字段、后端历史字段不能直接进入业务判断。 - 新增业务字段时,必须先更新本体字段设计,再更新表单、助手上下文、持久化、风险规则和测试。 ## 当前第一阶段范围 第一阶段先治理费用申请和报销链路: - 个人工作台意图识别。 - 费用申请预览和提交。 - 报销助手快速发起报销。 - 关联申请单生成报销草稿。 - 报销详情智能录入和附件归集。 - AI 预审、风险规则、审批流和预算流。 ## 字段分层 本体 canonical 字段: - `expense_type` - `time_range` - `location` - `reason` - `amount` - `transport_mode` - `attachments` - `customer_name` - `merchant_name` - `participants` - `application_claim_id` - `application_claim_no` - `application_days` - `application_date` - `application_lodging_daily_cap` - `application_subsidy_daily_cap` - `application_transport_policy` - `application_policy_estimate` 输入兼容别名: - `transport_type`、`transportMode`、`application_transport_mode` -> `transport_mode` - `occurred_date`、`business_time`、`application_business_time` -> `time_range` - `business_location`、`application_location` -> `location` - `reason_value`、`business_reason`、`application_reason` -> `reason` - `attachment_names` -> `attachments` - `reimbursement_type`、`scene_label` -> `expense_type` ## 非合规判断 以下情况视为字段不合规: - 新业务流程直接新增 `context_json` 字段但没有进入本体注册表。 - 风险规则读取未注册字段。 - 前端 `review_form_values` 输出页面控件字段。 - 后端服务用别名字段做业务判断,而不是先归一成本体字段。 - 同一业务事实在申请、报销、审批、预算中使用不同字段名。 ## 验收口径 完成后应满足: - 语义层能从上下文中生成统一本体实体。 - 报销助手关联申请单后不再因为字段别名丢失追问出行方式。 - `review_form_values` 对外输出本体字段,不输出页面别名字段。 - 后端测试覆盖别名归一到本体字段。 - 前端测试覆盖快速报销和核对抽屉只输出本体字段。