From c71bb5a11cd9bf5aa2625c00ce4f7291315d599b Mon Sep 17 00:00:00 2001 From: zlwu <704541015@qq.com> Date: Mon, 12 Oct 2026 18:10:13 +0800 Subject: [PATCH] fix(web-admin): align schedule paid/arrears with yjf-only rule MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Period 已缴费 now counts only 付款完成 transfers, matching backend summarize_period. Co-authored-by: Cursor --- .../src/utils/protocol-sample-payment.test.ts | 6 ++-- .../src/utils/protocol-sample-payment.ts | 29 +++++++++---------- 2 files changed, 16 insertions(+), 19 deletions(-) diff --git a/web-admin/src/utils/protocol-sample-payment.test.ts b/web-admin/src/utils/protocol-sample-payment.test.ts index 2c9f9465..ddae9126 100644 --- a/web-admin/src/utils/protocol-sample-payment.test.ts +++ b/web-admin/src/utils/protocol-sample-payment.test.ts @@ -118,7 +118,7 @@ describe('sumSampleContractAmounts', () => { }) describe('schedulePaidArrears', () => { - it('display paid includes dfj + jfqrz + yjf', () => { + it('display paid includes only yjf', () => { const { paid, arrears } = schedulePaidArrears(25880, [ { payStatus: 'dfj', transferAmount: 480 }, { payStatus: 'dfj', transferAmount: 6000 }, @@ -126,8 +126,8 @@ describe('schedulePaidArrears', () => { { payStatus: 'yjf', transferAmount: 200 }, { payStatus: 'ytf', transferAmount: 50 } ]) - assert.equal(paid, 6780) - assert.equal(arrears, 19100) + assert.equal(paid, 200) + assert.equal(arrears, 25680) }) }) diff --git a/web-admin/src/utils/protocol-sample-payment.ts b/web-admin/src/utils/protocol-sample-payment.ts index 3602e913..795abcdb 100644 --- a/web-admin/src/utils/protocol-sample-payment.ts +++ b/web-admin/src/utils/protocol-sample-payment.ts @@ -98,9 +98,6 @@ export function sampleScheduleDuesMismatchHint(pay: SamplePaymentLike): string | return null } -/** 展示口径已缴:与后端 chase_period_money / 缴费信息期次一致 */ -const DISPLAY_PAID_STATUSES = new Set(['dfj', 'jfqrz', 'yjf']) - function sumTransferAmountByStatuses( transfers: TransferLike[] | undefined, statuses: Set @@ -110,18 +107,6 @@ function sumTransferAmountByStatuses( .reduce((s, t) => s + (Number(t.transferAmount) || 0), 0) } -/** - * 期次已缴/欠缴(展示):已缴 = dfj + jfqrz + yjf;欠缴 = max(应缴 − 已缴, 0) - */ -export function schedulePaidArrears( - dueAmount: number, - transfers: TransferLike[] -): { paid: number; arrears: number } { - const paid = Math.round(sumTransferAmountByStatuses(transfers, DISPLAY_PAID_STATUSES) * 100) / 100 - const arrears = Math.round((dueAmount - paid) * 100) / 100 - return { paid, arrears: arrears > 0 ? arrears : 0 } -} - /** 财务已确认口径(仅 yjf):用于分改趸并期等与后端 plan_fq_to_fgd_merge 对齐 */ export function scheduleFinanceConfirmedPaidArrears( dueAmount: number, @@ -132,6 +117,18 @@ export function scheduleFinanceConfirmedPaidArrears( return { paid, arrears: Math.round((dueAmount - paid) * 100) / 100 } } +/** + * 期次已缴/欠缴(展示):已缴 = 仅 yjf;欠缴 = max(应缴 − 已缴, 0) + * 与后端 summarize_period / chase_period_money 一致 + */ +export function schedulePaidArrears( + dueAmount: number, + transfers: TransferLike[] +): { paid: number; arrears: number } { + const { paid, arrears } = scheduleFinanceConfirmedPaidArrears(dueAmount, transfers) + return { paid, arrears: arrears > 0 ? arrears : 0 } +} + /** 单样本合同金额 = 优惠价格;未填优惠价则 null */ export function resolveSampleContractAmount( sample: SamplePriceLike | null | undefined @@ -346,7 +343,7 @@ export function applyExpandRemainingToInstallment> for (const s of schList) { if ((s.transfers || []).some((t) => t.payStatus === 'jfqrz')) { - throw new Error('存在缴费确认中的转账,请先完成财务确认') + throw new Error('存在付款确认中的转账,请先完成财务确认') } }