TT Lab
ブログ はじめる
学ぶ 学習パス コース

銀行現場の言葉

返済スケジュールの計算と利息の検証

TT Labで続きを見る

目標

貸出の返済スケジュールを2つの方式で自分で計算してみて、預金利息と税金、延滞利息、資産健全性分類と引当金まで、銀行の預金・融資の数字がどこから出るのかを、手で確認します。

なぜ重要なのか

銀行システムの要求事項の半分は、「この数字がなぜこう出るのか」です。元利均等返済は毎月払うお金が同じで、元金均等返済は毎月返す元金が同じです。同じ貸出なのに、総利息が違い、初月の返済額が違い、繰上返済のときに残る元金が違います。この違いを知らなければ、返済スケジュール画面のバグと正常動作を区別できません。

利息計算には慣行があります。月利は年利を12で割った値で、預金利息は日数を数えて365で割り、ウォン未満はどの段階でどう切り捨てるかが、会社ごとに決められています。このラボは、その慣行をこのラボのルールとして固定しておきます。実務では、そのルールは、自社の商品定義書にあります。ルールが違うと、数字が1ウォンずつずれ、その1ウォンが元帳の突合で見つかります。

延滞は、利息の問題であると同時に、分類の問題です。何日遅れたかによって、正常・要注意・固定に分かれ、その分類が、銀行が積まなければならない引当金を決めます。引当金は損益にすぐ反映されるので、分類1つがその四半期の業績を変えます。

このラボのルール

ステップ

  1. 右の例にあるジェネレーターを/root/bank/make_loans.pyとして保存し、python3 make_loans.pyで実行してください。loans.csv(貸出6件)、payments.csv(返済32回次)、deposits.csv(預金3件)が作られます。
  2. L001の元利均等返済スケジュールを、/root/bank/schedule_L001.csvにn,payment,interest,principal,balanceのヘッダーで360行書いてください。
  3. L002の元金均等返済スケジュールを、/root/bank/schedule_L002.csvに同じヘッダーで36行書いてください。
  4. L003を2つの方式の両方で計算し、/root/bank/compare_L003.txtにannuity_payment=、annuity_total_interest=、equal_first_payment=、equal_last_payment=、equal_total_interest=、interest_diff=の6行を書いてください。interest_diffは、元利均等の総利息から元金均等の総利息を引いた値です。
  5. 預金3件の満期利息と税金を、/root/bank/deposit_interest.csvにdep_id,principal,days,interest,income_tax,local_tax,netのヘッダーで書いてください。netは、元金に利息を足して、税金2つを引いた値です。
  6. payments.csvから、遅れて払った、またはまだ払っていない回次を、/root/bank/overdue.csvにloan_id,seq,due_date,days_late,late_interestのヘッダーで書き、/root/bank/overdue.txtにoverdue_rows=、late_interest_total=、max_days_late=、max_loan=の4行を書いてください。
  7. 貸出6件すべてを、/root/bank/provision.csvにloan_id,days_overdue,class,outstanding,rate_pct,provisionのヘッダーで書き、/root/bank/provision.txtにtotal_outstanding=、total_provision=、substandard_count=の3行を書いてください。outstandingは、loans.csvのoutstanding_20260831です。
  8. /root/bank/loan_report.mdに、## Repayment comparison(返済方式の比較)、## Deposit interest and tax(預金利息と税金)、## Overdue and classification(延滞と健全性分類)、## What the system must keep(システムに残すべきもの)の4つの節で報告書を書いてください。

参考

貸出・預金データを作る

右の例にあるジェネレーターを/root/bank/make_loans.pyとして保存し、python3 make_loans.pyで実行してください。loans.csv(貸出6件)、payments.csv(返済32回次)、deposits.csv(預金3件)が作られます。

ラボの案内にあるジェネレーターを/root/bank/make_loans.pyとして保存し、python3で実行してください。手で直すと、後のステップの数字がすべてずれます。

元利均等スケジュールを出す

L001の元利均等返済スケジュールを、/root/bank/schedule_L001.csvにn,payment,interest,principal,balanceのヘッダーで360行書いてください。

月利r = 4.50 ÷ 100 ÷ 12。返済額 = P × r ÷ (1 − (1 + r)^−360)をウォン未満四捨五入。毎月の利息 = 直前の残高 × rを四捨五入、元金 = 返済額 − 利息、最後の月は残りの残高すべて。int(x + 0.5)で四捨五入してください。

元金均等スケジュールを出す

L002の元金均等返済スケジュールを、/root/bank/schedule_L002.csvに同じヘッダーで36行書いてください。

月々の元金 = 30,000,000 // 36(切り捨て)。毎月の利息 = 直前の残高 × (7.50 ÷ 100 ÷ 12)を四捨五入。返済額 = 利息 + 元金。最後の月の元金は残りの残高すべてなので、余りの12ウォンがそこに付きます。

同じ貸出を2つの方式で比べる

L003を2つの方式の両方で計算し、/root/bank/compare_L003.txtにannuity_payment=、annuity_total_interest=、equal_first_payment=、equal_last_payment=、equal_total_interest=、interest_diff=の6行を書いてください。interest_diffは、元利均等の総利息から元金均等の総利息を引いた値です。

ステップ2・3の計算器を、L003(50,000,000・3.75%・36か月)にそのまま適用して、2つのスケジュールの利息の列を、それぞれ合計してください。元利均等のほうが大きくなります。

預金利息と源泉徴収税を計算する

預金3件の満期利息と税金を、/root/bank/deposit_interest.csvにdep_id,principal,days,interest,income_tax,local_tax,netのヘッダーで書いてください。netは、元金に利息を足して、税金2つを引いた値です。

days = 満期日 − 加入日(datetime.date同士を引くと.days)。interest = int(P × rate/100 × days/365)。income_tax = int(interest × 0.14)を10ウォン未満切り捨て、local_tax = その10%を10ウォン未満切り捨て。

延滞回次と延滞利息を計算する

payments.csvから、遅れて払った、またはまだ払っていない回次を、/root/bank/overdue.csvにloan_id,seq,due_date,days_late,late_interestのヘッダーで書き、/root/bank/overdue.txtにoverdue_rows=、late_interest_total=、max_days_late=、max_loan=の4行を書いてください。

paid_dateがあればpaid_date − due_date、なければ2026-08-31 − due_dateが延滞日数です。0以下は延滞ではありません。延滞利息 = int(amount_due × (rate + 3.0)/100 × days/365)。約定金利は、loans.csvから貸出ごとに持ってきてください。

健全性分類と引当金を算出する

貸出6件すべてを、/root/bank/provision.csvにloan_id,days_overdue,class,outstanding,rate_pct,provisionのヘッダーで書き、/root/bank/provision.txtにtotal_outstanding=、total_provision=、substandard_count=の3行を書いてください。outstandingは、loans.csvのoutstanding_20260831です。

貸出ごとに、paid_dateが空の回次のうち最も早いdue_dateを探して、2026-08-31から引いてください。未払いがなければ0日です。0–29はNORMAL、30–89はPRECAUTIONARY、90以上はSUBSTANDARD。引当金 = int(outstanding × 比率/100)。

預金・融資の検証報告書を書く

/root/bank/loan_report.mdに、## Repayment comparison(返済方式の比較)、## Deposit interest and tax(預金利息と税金)、## Overdue and classification(延滞と健全性分類)、## What the system must keep(システムに残すべきもの)の4つの節で報告書を書いてください。

taskの節の見出し4つ(バッククォートの中の英語の見出し、または括弧の中の日本語の見出しや、同じ意味の韓国語・中国語の見出し)を、それぞれ## で始まる1行で書いてください。返済方式の比較にはL003の総利息の差(interest_diff)を、預金の節には税率(tax rate)を、延滞の節にはSUBSTANDARDに落ちた貸出の番号すべてと引当金(provision)の合計を、数字で書いてください。