fujian_water_biz_doc/docs/evidence/rev004-split-adjust-current-state-comparison-summary-2026-04-14.md

225 lines
6.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# REV004 / 分账现状对照摘要2026-04-14
## 1. 目的
本摘要用于把 **旧设计**、**老数据字典**、**当前代码状态** 三者放在一起对“分账SplitAdjust”给出一页式结论回答
- 旧系统/旧设计里的分账到底是什么
- 当前 REV004 设计里把它定位成什么
- 当前后端代码做到哪一步了
- 三者之间的差距到底在哪里
---
## 2. 一句话结论
> **旧系统里的分账是“真正的账单拆分/重分摊业务对象”,有汇总表、明细表和拆分后的结果对象;当前 REV004 设计也把它定义为独立正式对象,但当前后端代码只落到了“分账申请态”,还没有落到“审批通过后真正拆账生成子账单”的执行态。**
---
## 3. 旧设计口径12_REV_Detailed.md
来源:
- `../water-docs/docs/design/02_Detailed_Design/12_REV_Detailed.md`
### 旧设计里怎么定义分账
文档明确把:
- `SplitAdjust`
列为:
- **目标正式业务对象**
- 并且属于:
- **L2 独立业务层**
### 旧设计里的关键语义
文档明确写到:
- `SplitAdjust | 分账调整 | 当前作为费用组成重分摊场景表达 | 支持按水量 / 按费用组成等分摊策略`
并在迁移补充里写到:
- **分账调整汇总 / 明细**
- 承接方式:
- 在线主模型 + 费用重分摊场景
- 需要保留:
- 原分摊结果
- 调整后结果
- 策略类型
- 责任链
### 从旧设计可得的结论
旧设计的分账不是普通字段修改,也不是一条审批备注,而是:
- 有独立业务语义
- 有汇总/明细层
- 有原结果与新结果的前后对照
- 有策略与责任链
---
## 4. 老数据字典口径(营收数据字典.md
来源:
- `../water-docs/docs/design/04_Appendix/Archive/05_Data_Dictionary/营收数据字典.md`
### 老系统真实表结构
#### 4.1 汇总表
- `PM_SEPARATE_RECORDS`
关键字段:
- `Applicant`
- `Mobile`
- `ApplyType`
- `SeparateType`
- `State`
- `Remark`
- `TaskId`
- `StepId`
- `FlowRemark`
- `BusinessType`
#### 4.2 明细表
- `PM_SEPARATE_RECORD_DETAILS`
关键字段:
- `SeparateRecordId`
- `CustId / CustCode / CustName / CustAddress`
- `FeeId`
- `NewFeeId`
- `BillMonth`
- `BillWater / NewBillWater`
- `LateFee / NewLateFee`
- `BillAmount / NewBillAmount`
- `ExtendedAmount / NewExtendedAmount`
- `ItemStr`
- `ProcType / ProcPerson / ProcDate / ProcRemark`
- `State`
### 从老数据字典可得的结论
老系统里的分账已经明显是**执行态对象**,因为它不只是有申请信息,还已经有:
- 原费用对象:`FeeId`
- 新产生对象:`NewFeeId`
- 原水量 / 分账水量
- 原金额 / 新金额
- 原滞纳金 / 新滞纳金
- 费用组成
也就是说,老系统分账不是“申请单”,而是:
> **有申请、有明细、有拆后结果对象的完整业务表族。**
---
## 5. 当前代码状态
来源:
- `sw-business/sw-business-server/src/main/java/.../AccountingAdjustProcessServiceImpl.java`
- `sw-business/sw-business-server/src/main/java/.../ChargeServiceImpl.java`
### 当前入口
当前分账提交入口:
- `POST /admin-api/business/accounting-adjust/unsold-split-submit`
调用路径:
- `AccountingAdjustProcessServiceImpl.createUnsoldSplit(...)`
- 转成统一账务调整:
- `objectType = SPLIT_ADJUST`
- `adjustType = SPLIT`
- 进入 `chargeService.adjustAccounting(...)`
### 当前真正处理逻辑
`ChargeServiceImpl.handleSplitAdjust(...)` 中,只做了:
- `approvalRequired = true`
- `resultStatus = PENDING_APPROVAL`
- `approvalStatus = PENDING_APPROVAL`
- `writeBackStatus = PENDING`
- `message = 账单拆分申请已提交,待审批`
- `needUpdate = false`
### 当前校验逻辑
只校验:
- 原账单必须未收费
- `splitCount >= 2`
- `splitCount <= 12`
- 必须填写原因编码
- 必须填写调整原因
### 从当前代码可得的结论
当前代码实现的是:
- **分账申请态**
没有做到:
- 生成分账主表/明细表
- 生成目标账单
- 回填新账单 ID
- 原账单失效/已拆分标记
- 执行态回看
---
## 6. 三者对照
| 对照维度 | 旧设计 | 老数据字典 | 当前代码 |
|---|---|---|---|
| 是否独立对象 | 是,`SplitAdjust` | 是,汇总表+明细表 | 语义上是,代码上仍挂统一入口 |
| 是否支持按水量 / 按费用组成 | 是 | 是(`SeparateType` | 申请态支持对象类型,但未落执行规则 |
| 是否有汇总表 | 有方向 | 有真实表 | 当前没有真实表落地 |
| 是否有明细表 | 有方向 | 有真实表 | 当前没有真实表落地 |
| 是否有“原对象 -> 新对象”关系 | 有方向 | 有(`FeeId -> NewFeeId` | 没有 |
| 是否有拆前拆后水量/金额 | 有方向 | 有 | 没有执行态数据 |
| 是否只到审批申请 | 否 | 否 | 是 |
| 是否真正生成子账单 | 应该要 | 已有新费用ID表达 | 当前未实现 |
---
## 7. 当前最大的差距
最核心的差距不是“少几个字段”,而是:
### 旧系统 / 旧设计的分账
是:
- **完整业务对象**
- **有结果承接**
- **有拆后对象**
### 当前 REV004 代码的分账
只是:
- **申请态入口**
- **待审批状态表达**
- **统一日志/查询承接**
所以差距本质上是:
> **从“受理态”到“执行态”的整层能力还没有落。**
---
## 8. 为什么会停在这里
结合三者判断,原因可以归纳成:
1. 当前这轮 REV004 后端优先目标是统一入口、状态、日志、查询,不是重建所有独立执行对象。
2. 真正分账执行涉及:
- 分摊规则
- 主表/明细表
- 目标账单生成
- 守恒校验
- 收费/开票承接
3. 因此当前才先落成:
- `SPLIT_ADJUST` 申请态
而没有一步到位落成:
- `SplitAdjust` 执行态。
---
## 9. 最终判断
### 业务真值
分账本质上是:
- **账单拆分 / 重分摊**
- 不是退款
- 不是减免
- 也不只是审批单
### 当前状态
当前 REV004
- 已经把“分账”纳入正式对象语义
- 但后端实现仍停在申请态
### 最适合对外讲的一句话
> 旧系统与旧设计里的分账本来就是“有汇总、有明细、有拆后结果对象”的正式业务对象;当前 REV004 后端只先落了统一申请与审批承接,没有把真正的拆账执行态一起落出来,所以它现在更像“分账申请”,还不是“已执行的分账对象”。
---
## 10. 建议下一步
若要继续推进分账执行态,建议:
1. 以老表结构 + 旧设计为真值来源,先冻结最小执行态模型
2. 先做按水量分账 MVP
3. 再扩按费用组成分账
4. 最后补前端执行态页面与回看能力