- 계좌 관리 대출 폼에 '월 상환금(선택)' 입력(원리금균등) - repayment.js: loanPayment 있으면 이자=잔액×이율, 원금=상환금-이자로 상각 → 남은 개월수 추정 오차(±1회) 없이 은행 조회액과 일치. 미입력 시 기존 추정 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -71,6 +71,25 @@ export function loanSchedule(w, now = currentYm(), cap = 600) {
|
||||
}
|
||||
|
||||
// EQUAL_PAYMENT 원리금균등
|
||||
// (0) 월 상환금(고정)이 입력돼 있으면 그대로 사용 → 이자=잔액×이율, 원금=상환금-이자 로 은행과 정확히 일치
|
||||
const fixed = Number(w.loanPayment) || 0
|
||||
if (fixed > 0) {
|
||||
while (bal > 0 && rows.length < cap) {
|
||||
const interest = Math.round(bal * r)
|
||||
let principal = fixed - interest
|
||||
if (principal <= 0) {
|
||||
// 상환금이 이자에 못 미침(데이터 이상) → 더 진행 못함
|
||||
rows.push({ label: label(y, m), principal: Math.max(0, principal), interest, total: fixed, balance: bal })
|
||||
break
|
||||
}
|
||||
principal = Math.min(principal, bal)
|
||||
bal = Math.max(0, bal - principal)
|
||||
rows.push({ label: label(y, m), principal, interest, total: principal + interest, balance: bal })
|
||||
;({ y, m } = addMonths(y, m, 1))
|
||||
}
|
||||
return { rows, partial: false }
|
||||
}
|
||||
|
||||
// (1) 남은 개월수 n 산출: 최초 상환액으로 역산(loanStart 없어도 정확) → 안되면 loanStart 경과
|
||||
let n = null
|
||||
if (w.loanAmount && w.loanMonths && r > 0) {
|
||||
|
||||
Reference in New Issue
Block a user