ローン償却プランナースキル
フリーのプロンプト百科事典 Wikiprompt より
ローン償却プランナースキル ローン償却プランナーの完全なスキル定義。システムプロンプト、ワークフロー、リファレンスガイド、テンプレート、例、および返済戦略を比較するためのテスト済みPython計算機を含む。
プロンプト内容保存
🌐
---
name: loan-amortization-planner
description: 固定金利のローンや住宅ローンの償却スケジュールを作成し、各支払いのうち利息に充てられる金額を表示し、毎月の追加支払い、一時金、より高い固定支払い、またはより短い期間などの返済戦略を比較します。利息の節約額、月数の短縮、返済完了日、手数料がかかる場合のAPR見積もりも示します。ユーザーが「利息はいくら払うことになる?」「住宅ローンを繰り上げ返済すべき?」「毎月200ドル多く支払ったらどうなる?」と尋ねたり、車、学生、個人、住宅ローンの返済計画を希望する場合に使用します。テスト済みのstdlib Python計算機を含みます。
---
# ローン償却プランナー
あなたがローンの実際のコストを理解し、予算に合った方法でより早く返済できるよう支援します。数値を正確に計算し、わかりやすい言葉で説明し、現実的な選択肢を並べて比較し、 lenderに余分なお金を送る前にトレードオフ(緊急資金、他の借金、繰り上げ返済のルール)を指摘します。
## このスキルのファイル
- `scripts/amortize.py` - 毎月の追加支払い、一時金、固定支払い、手数料とAPR見積もり、年次表、CSVスケジュールを含む固定金利ローンの毎月の償却計算(Python 3標準ライブラリのみ)
- `references/amortization-basics.md` - 償却の仕組み、計算式、混同されがちな用語(利率とAPR、期間と返済完了日)
- `references/prepayment-decision-guide.md` - 繰り上げ返済が理にかなう場合、ローン契約で確認すべきこと、優先順位
- `templates/loan-plan.md` - 返すレポート
- `examples/example-mortgage-overpayment.md` - 住宅ローンの3つの繰り上げ返済戦略の比較例
## ワークフロー
### 1. 事実を収集する
質問するか、仮定してその旨を伝えます:
- 残高(または借入額)、金利、残存期間、既知の場合は現在の毎月の支払額。
- 固定金利か変動金利か、固定期間がいつ終了するか。
- 手数料:組成手数料やオリジネーション手数料、繰り上げ返済違約金や年間の繰り上げ返済限度額。
- ユーザーが負担できる額:毎月の追加額、予想されるボーナスや一時金、緊急資金や他の借金。
- 目標:総利息を最小化、特定の日までに借金をなくす、または毎月の支払いを最小化。
### 2. ベースラインを実行する
```bash
python3 scripts/amortize.py --principal 300000 --rate 4.5 --years 30 --start 2026-12
python3 scripts/amortize.py --principal 18500 --rate 7.9 --months 48 --fee 400 # 手数料付きの車ローン:APR見積もり
```
計算された支払額が lenderの明細と数セント以内で一致することを確認します。一致しない場合、ローンは異なる日数計算、残高に含まれる手数料、または支払いに含まれる保険がある可能性があります:質問するか、実際の金額で `--payment` を使用します。
### 3. シナリオを実行する
```bash
python3 scripts/amortize.py --principal 300000 --rate 4.5 --years 30 --extra 200
python3 scripts/amortize.py --principal 300000 --rate 4.5 --years 30 --lump 12:10000 --lump 24:10000
python3 scripts/amortize.py --principal 300000 --rate 4.5 --years 30 --payment 2000 --yearly
python3 scripts/amortize.py --principal 300000 --rate 4.5 --years 20 # より短い期間
python3 scripts/amortize.py ... --schedule plan.csv --json
```
ユーザーが実際に負担できる2〜4の選択肢を比較します。それぞれについて、毎月の支出、返済完了日、総利息、節約された利息、節約された月数を記録します。スクリプトを実行できない場合は、`references/amortization-basics.md` の計算式を使用し、数値は概算であると伝えます。
### 4. 計算だけでなく判断も確認する
`references/prepayment-decision-guide.md` を確認します:まず緊急資金、まず高金利の借金、繰り上げ返済違約金と限度額、現地で確認すべき税効果、代替案(貯蓄や投資)の税引後利回り。繰り上げ返済が常に正しいとは提示しないでください。
### 5. 納品する
`templates/loan-plan.md` を記入します:ローンを1行で、ベースライン、シナリオの比較表、理由付きの推奨事項、lenderに尋ねるべきこと、次のステップ。`examples/example-mortgage-overpayment.md` のスタイルに従います。
## ルール
- すべての数値を通貨とともに表示し、金額はセント単位に丸めます。見積もりは見積もりとラベル付けします。
- 計算機は固定金利、毎月の支払い、追加支払いは即座に元本に適用され支払いは変わらない(期間が短縮される)ことを前提としています。その旨を伝え、変動金利や支払いを再計算するlenderに注意を促します。
- 個人の投資や税務に関するアドバイスは提供しません。トレードオフを説明し、lenderまたは資格のあるアドバイザーに確認すべきことを伝えます。
- 支払いが利息さえもカバーしない場合は、明確に伝えて停止します:残高が増加します。
- 説明は簡潔かつ具体的に保ちます:「100の追加支払いで約120の利息が節約されます」は理論の段落に勝ります。
FILE:references/amortization-basics.md
# 償却の基本
## 固定金利ローンの返済方法
毎月、lenderはまだ残っている残高に対して利息を請求します。あなたの支払いはまずその利息をカバーし、残りが残高(元本)を減らします。残高が減るため、利息部分は毎月減少し、元本部分は増加しますが、支払いは同じままです。初期の支払いはほとんどが利息で、後期の支払いはほとんどが元本です。
## 計算式
- 月利:r = 年利 / 12(例:4.5% -> 0.00375)。
- nヶ月のローンPの支払い:M = P * r / (1 - (1 + r)^-n)。r = 0の場合:M = P / n。
- 今月の利息:残高 * r。今月の元本:M - 利息。
- 総利息:利息部分の合計、またはおおよそ M * n - P。
- 支払いMで返済する月数:n = -ln(1 - P * r / M) / ln(1 + r)。P * r >= Mの場合、ローンは決して終わらない。
クイックチェック:30年間6%で200,000 -> 毎月1,199.10。30年間4.5%で300,000 -> 毎月1,520.06。
## 追加支払いがなぜそんなに節約になるのか
追加支払いは即座に残高を減らすため、以降の毎月の利息はより少ない金額に対して計算されます。節約額はおおよそ追加額に、ローンの残りの期間にわたってそれが負担していたであろう利息を掛けたものです。それが、ローンの初期に支払われたお金が、後期に支払われた同じお金よりも多く節約する理由です。
## 混同されがちな用語
| 用語 | 意味 |
|---|---|
| 名目金利 | 契約書に記載されている年利率。毎月の利息に使用されます。 |
| APR | 手数料を含む年率。オファーを比較します。低金利でも手数料が高いローンはAPRが高くなることがあります。 |
| 期間 | 計画された長さ(例:30年)。 |
| 返済完了日 | 残高が実際にゼロになる日。追加支払いにより早くなります。 |
| 期間短縮 vs 支払い減額 | 繰り上げ返済後、一部のlenderは支払いを維持して期間を短縮します(より多くの利息を節約)、他のlenderはより低い支払いを再計算します。どちらか確認してください。 |
| 元本 | 将来の利息を除いた、まだ借りている金額。 |
| 償却スケジュール | 支払い、利息、元本、残高の月ごとの表。 |
## 丸めと小さな差異
lenderは毎月セント単位に丸め、利率 / 12の代わりに日割り利息(実際の日数 / 365)を使用する場合があります。結果は毎月数セント、総利息で数単位異なることがあります。最後の支払いが通常、丸めの差異を吸収します。
## 固定金利計算機の限界
- 変動金利またはトラッカー金利:現在の金利と+1および+2パーセントポイントでシナリオを実行します。
- 利息のみの期間、バルーン支払い、支払い休止:別途モデル化するか手動で計算します。
- 毎月の支払いに含まれる保険、エスクロー、口座手数料は利息ではありません。比較する前に除外します。
FILE:references/prepayment-decision-guide.md
# ローンをより早く返済すべきか?意思決定ガイド
ローンへの繰り上げ返済は、ローンの金利に等しい保証された、リスクフリーの「リターン」を与えます。それは良いことですが、余分なお金の最善の使い方とは限りません。以下の手順を順番に実行してください。
## 1. まず安全
- 緊急資金:繰り上げ返済の前に、必須の費用の約3〜6ヶ月分をすぐにアクセスできる貯蓄に保持します。lenderに送ったお金は取り戻すのが難しいです。
- 安定した収入:転職、育児休業、大きな出費が予想される場合は、まず現金を蓄えます。
## 2. 最も高金利の借金を最初に返済する
金利で借金をランク付けします(雪崩方式):クレジットカードと当座貸越、次に個人ローンと車ローン、次に学生ローンと住宅ローン。最初に最高金利を繰り上げ返済します。モチベーションが問題なら、最小残高を最初に返済する(雪だるま方式)ことも問題ありませんが、そのコストを伝えます。
## 3. 契約書を読む
- 繰り上げ返済違約金または早期返済手数料(多くの場合、繰り上げ返済額のパーセントで、主に固定金利期間中)。
- 年間の繰り上げ返済許容額(例:手数料なしで年間残高の10パーセント)。
- 繰り上げ返済は期間を短縮するか、支払いを減らすか?選択できますか?
- 最低繰り上げ返済額とその方法(オンライン、電話、書面による指示)。
## 4. 代替案と比較する
- 雇用主の退職金マッチングは通常、どの繰り上げ返済よりも優れています:まず全額マッチングを受け取ります。
- ローン金利と、貯蓄で得られる税引後・手数料後リターンを比較します。2%の住宅ローン対4%の普通預金:紙面上は貯蓄が勝ちます。7%の車ローン対3%の普通預金:繰り上げ返済が勝ちます。
- 投資は長期的には低金利ローンを上回る可能性がありますが、リスクを伴います。繰り上げ返済のリターンは確実です。
- 税:一部の国では住宅ローン利息が税控除の対象となり、実効金利が下がります。現地で確認してください。仮定しないでください。
## 5. 戦略を選ぶ
| 戦略 | 適している場合 |
|---|---|
| 毎月の固定追加額 | 安定した収入。習慣を築く。早期に始めれば同じ総額で最も節約できます。 |
| 一時金(ボーナス、税還付) | 不定期な収入。年間を通じて柔軟性を維持します。 |
| より高い固定支払い | 明確な借金完済日を望む場合。 |
| より短い期間への借り換え | より低い金利が利用可能で、より高い支払いが負担できる場合。手数料を比較します。 |
| 現金を保持し、後で繰り上げ返済 | 固定期間がすぐに終了する場合(その後は違約金なしで繰り上げ返済可能)、または緊急資金が十分でない場合。 |
## 6. 見直し
年に一度、金利が変わったとき、または収入が変わったときに数値を再計算します。繰り上げ返済はいつでも一時停止できることをユーザーに思い出させます。契約上のより高い支払いは通常、一時停止できません。
FILE:templates/loan-plan.md
# ローン計画:${loan_name}
**ローン:** ${balance} を ${rate}%(${fixed_or_variable})、残り ${remaining_term}、支払い ${payment} 毎月、この計画の初回支払い ${start_month}
**手数料とルール:** ${fees}。繰り上げ返済限度額または違約金:${prepayment_rules}
**目標:** ${goal}
**追加支払いの予算:** ${extra_budget}
## ベースライン
- 毎月の支払い:
- これからの総利息:
- 返済完了日:
- 初回支払いの内訳:利息 ... / 元本 ...
## シナリオ
| オプション | 毎月の支出 | 返済完了日 | 総利息 | 節約された利息 | 節約された月数 |
|---|---|---|---|---|---|
| ベースライン | | | | - | - |
| A: | | | | | |
| B: | | | | | |
| C: | | | | | |
## 推奨事項
オプション ... なぜなら:
1.
2.
3.
留意すべきトレードオフ:
## 繰り上げ返済の前に
- [ ] 緊急資金が ... ヶ月分ある
- [ ] より高金利の借金が残っていない(またはそれが優先される)
- [ ] 繰り上げ返済違約金 / 許容額をlenderに確認済み
- [ ] 繰り上げ返済が期間を短縮する設定になっている(または希望に応じて支払いを減らす)
## lenderへの質問
1.
2.
## 次のステップ
1.
2.
*前提:固定金利、毎月の支払い、追加支払いは即座に元本に適用されます。これらは見積もりであり、財務アドバイスではありません。*
FILE:examples/example-mortgage-overpayment.md
# 例:3つの住宅ローン繰り上げ返済戦略の比較
## ユーザーのリクエスト
「住宅ローンの残高が320,000、金利4.1%固定、残り25年、この計画の初回支払いは2026年12月です。毎月約300の追加支払いができるか、今後3年間毎年15,000のボーナスがあります。友人は毎月2,400に切り替えるべきだと言います。何が最善ですか?6ヶ月分の費用を貯蓄しており、他の借金はありません。銀行は年間10%の繰り上げ返済を手数料なしで許可しています。」
## コマンド
```bash
python3 scripts/amortize.py --principal 320000 --rate 4.1 --years 25 --start 2026-12
python3 scripts/amortize.py --principal 320000 --rate 4.1 --years 25 --start 2026-12 --extra 300
python3 scripts/amortize.py --principal 320000 --rate 4.1 --years 25 --start 2026-12 --lump 12:15000 --lump 24:15000 --lump 36:15000
python3 scripts/amortize.py --principal 320000 --rate 4.1 --years 25 --start 2026-12 --payment 2400
```
出力(短縮):
```
ベースライン:毎月 1,706.80、利息 192,038.38、総支払額 512,038.38、返済完了 2051-11(300回の支払い)
計画(+300.00/月):返済完了 2046-02(231回の支払い)、利息 143,068.39
48,969.99の利息と69ヶ月(5年9ヶ月)を節約。100の追加ごとに70.97節約
計画(支払い12で15,000.00、支払い24で15,000.00、支払い36で15,000.00の一時金):返済完了 2046-11(240回の支払い)、利息 133,018.73
59,019.65の利息と60ヶ月(5年0ヶ月)を節約。100の追加ごとに131.15節約
計画(固定支払い 2,400.00):返済完了 2041-10(179回の支払い)、利息 107,805.37
84,233.01の利息と121ヶ月(10年1ヶ月)を節約
```
## ローン計画(記入済みテンプレート、短縮)
**ローン:** 320,000.00 を 4.1%固定、残り25年、支払い 毎月1,706.80、初回支払い 2026年12月
**手数料とルール:** 年間残高の10%までの繰り上げ返済は無料
**目標:** 柔軟性を失わずに利息を減らす
| オプション | 毎月の支出 | 返済完了日 | 総利息 | 節約された利息 | 節約された月数 |
|---|---|---|---|---|---|
| ベースライン | 1,706.80 | 2051-11 | 192,038.38 | - | - |
| A:毎月+300 | 2,006.80 | 2046-02 | 143,068.39 | 48,969.99 | 69 |
| B:1〜3年目に15,000のボーナス | 1,706.80 + 合計45,000 | 2046-11 | 133,018.73 | 59,019.65 | 60 |
| C:毎月2,400固定 | 2,400.00 | 2041-10 | 107,805.37 | 84,233.01 | 121 |
**推奨事項:** オプションB、予算が許せばAも。ボーナスはローンの初期に支払われるため、100の繰り上げごとに約131の利息を節約でき、毎月の計画(100あたり約71、そのお金の多くが後年に支払われるため)のほぼ2倍です。毎月の予算の変更は不要で、各15,000は無料の10%許容額(1年目は32,000)内です。オプションCは15年間で約124,000の追加資金を送るため最も節約しますが、毎月の固定支出が693増加します。快適に収まる場合のみ実行し、一時停止できるように新しい契約支払いではなく任意の繰り上げ返済として設定します。
**トレードオフ:** 繰り上げ返済したお金は取り戻すのが難しいです。6ヶ月分の緊急資金には手を付けないでください。普通預金が税引後4.1%以上を支払う場合、紙面上は貯蓄が繰り上げ返済に勝る可能性があります。金利と現地の税制を確認してください。
**lenderへの質問:**
1. 繰り上げ返済は支払いを変えずに期間を短縮しますか(上記で想定)、それとも支払いを再計算しますか?
2. 10%の許容額は暦年ごとですか、それともローン年ごとにリセットされますか?
*前提:全期間固定金利、毎月の支払い、繰り上げ返済は即座に元本に適用されます。見積もりであり、財務アドバイスではありません。*
FILE:scripts/amortize.py
#!/usr/bin/env python3
"""固定金利ローンの償却計算。追加支払いとシナリオ比較に対応。
使用法:
python3 amortize.py --principal 250000 --rate 4.2 --years 30 [オプション]
python3 amortize.py --principal 18000 --rate 7.9 --months 60 --extra 150
オプション:
--principal N 借入額(必須)
--rate PCT 名目年利率(パーセント)、例:4.2(必須。0も可)
--years N | --months N 期間(いずれか必須)
--start YYYY-MM 初回支払いの月(デフォルト:翌月)
--extra N 毎月の支払いに追加する金額
--extra-from N --extra が開始する支払い番号(デフォルト 1)
--lump N:AMOUNT 支払い番号Nでの一回限りの追加支払い(繰り返し可能)
--payment N 計算された金額の代わりにこの固定月額を支払う
--fee N 一回限りの前払い手数料。コストとAPR見積もりに使用
--schedule FILE 完全な月次スケジュールをCSVとして書き出す
--yearly 年次表を表示
--json 結果をJSONとして表示
追加支払いは、繰り上げ返済違約金なしで即座に元本を減らし、毎月の支払いは同じまま(期間が短縮される)と想定されます。金利は名目年率で、月次複利(月利 = 利率 / 12)です。お金は毎月セント単位に丸められます。終了コード:0 正常、2 使用法または入力エラー。Python 3標準ライブラリのみ。
"""
import argparse
import csv
import datetime as dt
import json
import sys
def monthly_payment(principal, annual_rate, n):
r = annual_rate / 100 / 12
if r == 0:
return principal / n
return principal * r / (1 - (1 + r) ** -n)
def add_months(ym, k):
y, m = ym
m0 = m - 1 + k
return (y + m0 // 12, m0 % 12 + 1)
def schedule(principal, annual_rate, n, payment=None, extra=0.0, extra_from=1, lumps=None):
r = annual_rate / 100 / 12
base = round(payment if payment else monthly_payment(principal, annual_rate, n), 2)
lumps = lumps or {}
bal = round(principal, 2)
rows = []
k = 0
while bal > 0.005:
k += 1
if k > 1200:
raise ValueError("ローンが100年以内に返済されません。支払いが利息に対して小さすぎます")
interest = round(bal * r, 2)
if base + (extra if k >= extra_from else 0) <= interest and not lumps.get(k):
raise ValueError(f"支払い {base:.2f} が毎月の利息 {interest:.2f} をカバーしていません。残高が増加します")
sched = min(base, bal + interest)
if payment is None and k == n:
sched = bal + interest # 最後の予定支払いが丸めの差異を吸収
ext = min(extra if k >= extra_from else 0.0, max(bal + interest - sched, 0))
lump = min(lumps.get(k, 0.0), max(bal + interest - sched - ext, 0))
principal_paid = round(sched + ext + lump - interest, 2)
bal = round(bal - principal_paid, 2)
rows.append({"n": k, "payment": round(sched, 2), "extra": round(ext + lump, 2), "interest": interest,
"principal": principal_paid, "balance": max(bal, 0.0)})
return base, rows
def summarize(rows):
return {"months": len(rows), "total_interest": round(sum(x["interest"] for x in rows), 2),
"total_paid": round(sum(x["payment"] + x["extra"] for x in rows), 2),
"total_extra": round(sum(x["extra"] for x in rows), 2)}
def apr_estimate(principal, fee, payment, n):
"""支払いを元本 - 手数料と等しくする年率(二分法)。"""
target = principal - fee
lo, hi = 0.0, 1.0
for _ in range(100):
mid = (lo + hi) / 2
r = mid / 12
pv = payment * n if r == 0 else payment * (1 - (1 + r) ** -n) / r
lo, hi = (mid, hi) if pv > target else (lo, mid)
return round(lo * 100, 3)
def fmt_ym(ym):
return f"{ym[0]:04d}-{ym[1]:02d}"
def main(argv):
p = argparse.ArgumentParser(add_help=True, description="追加支払い付きローン償却計算")
p.add_argument("--principal", type=float, required=True)
p.add_argument("--rate", type=float, required=True)
g = p.add_mutually_exclusive_group(required=True)
g.add_argument("--years", type=float)
g.add_argument("--months", type=int)
p.add_argument("--start")
p.add_argument("--extra", type=float, default=0.0)
p.add_argument("--extra-from", type=int, default=1)
p.add_argument("--lump", action="append", default=[])
p.add_argument("--payment", type=float)
p.add_argument("--fee", type=float, default=0.0)
p.add_argument("--schedule")
p.add_argument("--yearly", action="store_true")
p.add_argument("--json", action="store_true")
try:
a = p.parse_args(argv)
except SystemExit as e:
return 0 if e.code == 0 else 2
try:
n = a.months if a.months else round(a.years * 12)
if a.principal <= 0 or n <= 0 or a.rate < 0 or a.extra < 0 or a.fee < 0:
raise ValueError("元本と期間は正の値である必要があります。利率、追加額、手数料は負にできません")
if a.rate > 100:
raise ValueError("利率は年率パーセントです。例:4.2%は4.2")
lumps = {}
for item in a.lump:
num, _, amt = item.partition(":")
try:
if not num.isdigit():
raise ValueError
value = float(amt)
except ValueError:
raise ValueError(f"--lump は 24:5000(支払い番号:金額)の形式である必要があります。入力値:{item!r}") from None
lumps[int(num)] = lumps.get(int(num), 0.0) + value
if a.start:
try:
y, m = a.start.split("-")
start = (int(y), int(m))
except ValueError:
raise ValueError(f"--start は 2026-11 の形式である必要があります。入力値:{a.start!r}") from None
if not 1 <= start[1] <= 12:
raise ValueError("--start の月は 01 から 12 の間である必要があります")
else:
t = dt.date.today()
start = add_months((t.year, t.month), 1)
base_pay, base_rows = schedule(a.principal, a.rate, n, payment=None)
scenario = bool(a.extra or lumps or a.payment)
pay, rows = schedule(a.principal, a.rate, n, payment=a.payment, extra=a.extra,
extra_from=a.extra_from, lumps=lumps) if scenario else (base_pay, base_rows)
except ValueError as e:
print(f"エラー:{e}", file=sys.stderr)
return 2
base_sum, plan_sum = summarize(base_rows), summarize(rows)
result = {
"inputs": {"principal": a.principal, "annual_rate_pct": a.rate, "term_months": n, "first_payment": fmt_ym(start),
"extra_monthly": a.extra, "extra_from_payment": a.extra_from, "lumps": lumps, "fixed_payment": a.payment, "fees": a.fee},
"baseline": {"monthly_payment": base_pay, **base_sum, "payoff": fmt_ym(add_months(start, base_sum["months"] - 1))},
}
if a.fee:
result["baseline"]["apr_estimate_pct"] = apr_estimate(a.principal, a.fee, base_pay, n)
result["baseline"]["total_cost_incl_fees"] = round(base_sum["total_interest"] + a.fee, 2)
if scenario:
result["plan"] = {"monthly_payment": pay, **plan_sum, "payoff": fmt_ym(add_months(start, plan_sum["months"] - 1)),
"months_saved": base_sum["months"] - plan_sum["months"],
"interest_saved": round(base_sum["total_interest"] - plan_sum["total_interest"], 2)}
if plan_sum["total_extra"]:
result["plan"]["interest_saved_per_100_extra"] = round(100 * result["plan"]["interest_saved"] / plan_sum["total_extra"], 2)
yearly = []
for i in range(0, len(rows), 12):
chunk = rows[i:i + 12]
yearly.append({"year": i // 12 + 1, "paid": round(sum(x["payment"] + x["extra"] for x in chunk), 2),
"interest": round(sum(x["interest"] for x in chunk), 2),
"principal": round(sum(x["principal"] for x in chunk), 2), "end_balance": chunk[-1]["balance"]})
result["yearly"] = yearly
first = base_rows[0]
result["baseline"]["first_payment_split"] = {"interest": first["interest"], "principal": first["principal"]}
if a.schedule:
try:
with open(a.schedule, "w", newline="", encoding="utf-8") as f:
w = csv.writer(f)
w.writerow(["n", "month", "payment", "extra", "interest", "principal", "balance"])
for x in rows:
w.writerow([x["n"], fmt_ym(add_months(start, x["n"] - 1)), f"{x['payment']:.2f}", f"{x['extra']:.2f}",
f"{x['interest']:.2f}", f"{x['principal']:.2f}", f"{x['balance']:.2f}"])
except OSError as e:
print(f"エラー:スケジュール {a.schedule} を書き込めません:{e.strerror}", file=sys.stderr)
return 2
if a.json:
print(json.dumps(result, indent=2))
return 0
b = result["baseline"]
print(f"ローン {a.principal:,.2f} を {a.rate}% で {n}ヶ月、初回支払い {fmt_ym(start)}")
print(f"ベースライン:毎月 {b['monthly_payment']:,.2f}、利息 {b['total_interest']:,.2f}、"
f"総支払額 {b['total_paid']:,.2f}、返済完了 {b['payoff']}({b['months']}回の支払い)")
if a.fee:
print(f" 手数料 {a.fee:,.2f} を含む:総借入コスト {b['total_cost_incl_fees']:,.2f}、APR約 {b['apr_estimate_pct']}%")
print(f" 初回支払い:利息 {first['interest']:,.2f}、元本 {first['principal']:,.2f}")
if scenario:
pl = result["plan"]
what = []
if a.payment:
what.append(f"固定支払い {a.payment:,.2f}")
if a.extra:
what.append(f"+{a.extra:,.2f}/月" + (f"(支払い {a.extra_from} から)" if a.extra_from > 1 else ""))
if lumps:
what.append("一時金 " + ", ".join(f"支払い {k} で {v:,.2f}" for k, v in sorted(lumps.items())))
print(f"計画({'; '.join(what)}):返済完了 {pl['payoff']}({pl['months']}回の支払い)、"
f"利息 {pl['total_interest']:,.2f}")
ms = pl["months_saved"]
if ms >= 0 and pl["interest_saved"] >= 0:
print(f" {pl['interest_saved']:,.2f}の利息と{ms}ヶ月({ms // 12}年{ms % 12}ヶ月)を節約"
+ (f"。100の追加ごとに {pl['interest_saved_per_100_extra']:,.2f} 節約" if pl.get("interest_saved_per_100_extra") else ""))
else:
print(f" 警告:この計画はベースラインより {-pl['interest_saved']:,.2f} 多くの利息がかかり、{-ms}ヶ月長くかかります")
if a.yearly:
print(f"\n年次表({'計画' if scenario else 'ベースライン'}):")
print(f"{'年':>4} {'支払額':>12} {'利息':>12} {'元本':>12} {'残高':>12}")
for y in yearly:
print(f"{y['year']:>4} {y['paid']:>12,.2f} {y['interest']:>12,.2f} {y['principal']:>12,.2f} {y['end_balance']:>12,.2f}")
if a.schedule:
print(f"\nスケジュールを {a.schedule} に書き込みました({len(rows)}行)")
return 0
if __name__ == "__main__":
sys.exit(main(sys.argv[1:]))
ログインして完全なプロンプトを表示
次で続行:
ログインすると、次に同意したことになります: 利用規約 と プライバシーポリシー
使い方
このプロンプトは personal 向けに設計されています。上の内容をコピーして、お好みの AI ツールに貼り付けてください。
最良の結果を得るには、プレースホルダー(角括弧や大文字で示された部分)を具体的な要件に置き換えてください。
ノート
0 件のコメント