## 问题 - 计算步骤创建时报 Pydantic 校验错误:`step_order` 期望整型,但代码使用层级小数(如 2.1、2.11)。这不是计算公式问题,而是“类型不匹配”导致步骤未入库。 ## 修复原则 - 不改变任何计算公式或数值流程,仅调整“步骤顺序”的存储与校验类型,使其能接受层级小数。 ## 具体改动 1) 模型字段修改(不涉公式): - `app/models/valuation.py` 中 `ValuationCalculationStep.step_order: IntField → DecimalField(max_digits=8, decimal_places=3)`;保留 `ordering=["step_order"]`,确保排序正确。 2) Schema 修改(不涉公式): - `ValuationCalculationStepCreate.step_order: int → Decimal`,添加前置校验,支持 int/float/str 自动转换为 Decimal;`ValuationCalculationStepOut` 同步为 Decimal。 - 列表与详情端点已使用 `model_dump_json()` 再 `json.loads()`,Decimal 会被正确序列化为 JSON 数字,无需改动。 3) 代码调用无需改(不涉公式): - 由于 Schema 接受 float 并转换为 Decimal,现有调用处传入 `2.1/2.11/...` 不需改。 4) 迁移与验证 - 启动时执行 Aerich 迁移更新列类型(项目已有初始化流程)。 - 跑脚本观测:`calcstep.create` 不再报错;`calcstep.list` 数量 > 0;后台“估值计算步骤”返回完整数组。 ## 影响范围与安全性 - 仅变更“步骤顺序”的字段类型与 Schema 校验,不触及任何计算逻辑或公式。 - 排序按照 Decimal 正常工作,层级表达(2.11 < 2.2)保留。 ——确认后,我将按以上方案修改模型与 Schema,并执行验证,保证不改变计算逻辑,仅解决类型不匹配问题。