1
0
forked from erp-dev/erp
Files
erpnew/docs/STATEMENT_BUG_FIX_PLAN.md
2026-05-19 23:41:34 +08:00

167 lines
4.8 KiB
Markdown
Raw Permalink 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.
# 客户对账单 Bug 修复计划
本文档列出 antd-demo 后端对账单同步与计算中已确认的所有问题,按优先级排序。
---
## 问题总览
| # | 问题 | 影响金额(腾飞案例) | 影响金额(张晓鹏案例) | 优先级 |
|---|------|---:|---:|:---:|
| 1 | 退货单金额放错列 | 7,378 | 17,224 | P0 |
| 2 | 退货单被冗余写入收款桶 | 7,378 | 17,224 | P0 |
| 3 | SfJinE 未按 BianHaoID 去重 | 0 | 197,280 | P0 |
| 4 | 销售折扣F_Skd XS% 行 ZkJinE无法获取 | 2 | 583 | P1 |
---
## Bug 1退货单金额放错列
### 现象
"外部销售退货单"行的金额被放到了"已收金额"列,应该放到"本单应收"列(负数)。
| | antd-demo 当前 | ERP 正确值 |
|---|---|---|
| 本单应收 | 0 | -7,378负数 |
| 已收金额 | 7,378 | 0 |
### 影响
退货对欠款的减少效果被抵消,导致累欠偏高。
### 修复
同步 `sale_return` 类型的 `ExternalCustomerStatementOrder` 时:
- `positive_amount` = 0
- `negative_amount` = |JinE|(取绝对值,如 7,378
对账单视图中"本单应收"显示为负数(= positive_amount - negative_amount = -7,378
---
## Bug 2退货单被冗余写入收款桶
### 现象
同一笔 XT 退货单同时出现在"外部销售退货单"和"收款单"两种类型里。
腾飞纺织:收款单 101 行(应为 92多出的 9 行 = 退货单。
### 影响
收款行数虚增,但金额被退货冲减,导致退货效果完全抵消。
### 修复
同步逻辑中XT 退货单只写入退货桶(`external_sales_return_order`),不写入收款桶(`receipt_order`)。
检查点:`finance/by-customer?record_types=refund` 返回的 XT 记录不应该再创建 `ReceiptOrder`
---
## Bug 3SfJinE 未按 BianHaoID 去重
### 现象
`I_Sale.SfJinE` 是单据头级别字段,被冗余写到同一 BianHaoID 的每一行明细上。直接对所有明细行求和会重复计入。
张晓鹏案例:
- 7 笔现场收款订单,共 22 行明细
- 去重后 SfJinE = 77,132正确
- 直接 SUM = 274,412错误多算 197,280
### 影响
欠款被严重低估(张晓鹏少算了 197,280 元)。
### 修复
同步时按 BianHaoID 分组,每组只取一次 SfJinE
```python
seen = set()
total_sf = 0.0
for record in sales_records:
if record.BianHaoID not in seen:
seen.add(record.BianHaoID)
total_sf += record.SfJinE
```
---
## Bug 4销售折扣数据缺失
### 现象
`/api/v1/i-sale/by-customer` 返回的 `ZkJinE` 全部为 0。真实的销售折扣存在于 `F_Skd` 表的 XS% 行中,但当前只从 F_Skd 拉 SK%(收款)记录。
张晓鹏案例:
- receipt.ZkJinE = 233已正确获取
- sales.ZkJinE = 583存在于 F_Skd XS% 行,无法获取)❌
- 总差额 = 816 元
### 影响
欠款偏高 583 元(销售折扣未扣减)。影响较小,大部分客户折扣为 0 或极小。
### 解决方案(需 haobuye API 配合)
**方案 A推荐**:让 haobuye API 的 `finance/by-customer` 接口支持 `record_types=sale`
```http
GET /api/v1/finance/by-customer?customer_name_b64=xxx&record_types=sale
```
返回 F_Skd 中 `sType=1 AND BianHaoID LIKE 'XS%'` 的记录,包含 ZkJinE 字段。
**方案 B**:用 `db/select` 补查非零折扣
```http
GET /api/v1/db/select?table=dbo.F_Skd
&columns=BianHaoID,ZkJinE
&where=KhID='KH00308' AND BianHaoID LIKE 'XS%' AND ZkJinE<>0
&limit=1000
```
非零折扣行通常很少,不会触及 1000 行上限。
**方案 C**:让 haobuye API 修改 `i-sale/by-customer` 接口,按 BianHaoID join F_Skd 把真实 ZkJinE 填入返回值。
---
## 修复优先级建议
```text
第一步:修 Bug 1 + Bug 2退货相关影响最大纯后端改动
第二步:修 Bug 3SfJinE 去重,纯后端改动)
第三步:修 Bug 4需要 haobuye API 配合,影响最小)
```
---
## 修复后预期结果
以腾飞纺织为例:
| 项目 | 修复前 | 修复后 | ERP 正确值 |
|------|---:|---:|---:|
| 累欠金额 | 60,899 | 53,521 | 53,521 |
以张晓鹏为例(截至 5-18
| 项目 | 修复前 | 修复后(不含 Bug4 | 修复后(含 Bug4 | ERP |
|------|---:|---:|---:|---:|
| 累欠金额 | 748,563 | 748,330 | 747,747 | 747,747 |
---
## 验证方法
修复后用以下客户验证:
1. **木棉KH01078**— SfJinE=0无折扣预期 10,718
2. **腾飞纺织KH00311**— SfJinE=0折扣=2预期 53,521
3. **金庸KH00290**— SfJinE=23,3941笔1行不涉及去重折扣=13,009预期 82,670
4. **张晓鹏KH00308**— SfJinE=77,1327笔22行必须去重折扣=816预期与 ERP 实时值一致