1
0
forked from erp-dev/erp

feat: correct first

This commit is contained in:
2026-05-19 23:41:34 +08:00
parent f409f2e6ee
commit b97e86257e
25 changed files with 3885 additions and 25 deletions

View File

@@ -0,0 +1,166 @@
# 客户对账单 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 实时值一致