feat(borç): borç takibi ekranları (Panel kartı, /borc, /taksitler)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,81 @@
|
||||
import { describe, expect, it } from 'vitest'
|
||||
import {
|
||||
debtSeries,
|
||||
debtTotal,
|
||||
installmentLoad,
|
||||
monthEnd,
|
||||
monthIndex,
|
||||
monthName,
|
||||
remainingAfter,
|
||||
} from './debt'
|
||||
|
||||
// Kaynak belgedeki 8 taksit (paidCount Kasım 2026 itibarıyla → ilk ay = Kasım − paid + 1)
|
||||
const nov = monthIndex('2026-11')!
|
||||
const plans = (
|
||||
[
|
||||
[271_761, 7, 5],
|
||||
[33_324, 9, 5],
|
||||
[11_945, 7, 5],
|
||||
[12_717, 7, 4],
|
||||
[17_067, 7, 3],
|
||||
[7_428, 7, 3],
|
||||
[18_202, 7, 2],
|
||||
[58_738, 3, 2],
|
||||
] as const
|
||||
).map(([monthly_amount, total_count, paid]) => ({
|
||||
monthly_amount,
|
||||
total_count,
|
||||
first_month: monthName(nov - paid + 1),
|
||||
}))
|
||||
|
||||
describe('debt (backend ile aynı, kabul rakamları)', () => {
|
||||
it('totals', () => {
|
||||
expect(
|
||||
debtTotal({
|
||||
kmh: 0,
|
||||
positive_balance: 236_311,
|
||||
card_balance: 6_671_590,
|
||||
remaining_installments: 1_417_769,
|
||||
}),
|
||||
).toBe(7_853_048)
|
||||
expect(
|
||||
debtTotal({
|
||||
kmh: 3_926_444,
|
||||
positive_balance: 0,
|
||||
card_balance: 2_994_854,
|
||||
remaining_installments: 986_587,
|
||||
}),
|
||||
).toBe(7_907_885)
|
||||
})
|
||||
|
||||
it('installment loads and remaining', () => {
|
||||
const loads = ['2026-11', '2026-12', '2027-01', '2027-02', '2027-03', '2027-04'].map((m) =>
|
||||
installmentLoad(plans, monthIndex(m)!),
|
||||
)
|
||||
expect(loads).toEqual([431_182, 431_182, 372_444, 88_738, 76_021, 18_202])
|
||||
expect(remainingAfter(plans, monthIndex('2026-10')!)).toBe(1_417_769)
|
||||
expect(remainingAfter(plans, nov)).toBe(986_587)
|
||||
})
|
||||
|
||||
it('months', () => {
|
||||
expect(monthName(monthIndex('2026-12')! + 1)).toBe('2027-01')
|
||||
expect(monthIndex('2026-13')).toBeNull()
|
||||
expect(monthEnd('2026-11')).toBe('2026-11-30')
|
||||
expect(monthEnd('2028-02')).toBe('2028-02-29')
|
||||
})
|
||||
|
||||
it('chart series: actual + target from the first snapshot', () => {
|
||||
const s = debtSeries(
|
||||
[
|
||||
{ date: '2026-11-13', total: 7_907_885 },
|
||||
{ date: '2026-10-31', total: 7_853_048 },
|
||||
],
|
||||
[{ month: '2026-11', closing_target: 6_699_500 }],
|
||||
)
|
||||
expect(s.map((p) => [p.date, p.actual, p.target])).toEqual([
|
||||
['2026-10-31', 7_853_048, 7_853_048],
|
||||
['2026-11-13', 7_907_885, undefined],
|
||||
['2026-11-30', undefined, 6_699_500],
|
||||
])
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user