# -*- coding: utf-8 -*-
"""
起诉状(草稿)诉讼请求二利息计算与核对脚本
依据:起诉状草稿.txt 诉讼请求二及事实与理由部分;口径备注见《待核与待定清单》第3-8项。
用法:python3 利息计算.py
输出:屏幕打印 + 利息计算结果.txt(均在本文件夹内)
起诉日确定后,修改下方"参数区"的 起诉日 再跑一次即可。
"""
from datetime import date, timedelta
from decimal import Decimal, ROUND_HALF_UP
# ───────────────────────── 参数区 ─────────────────────────
起诉日 = date(2026, 10, 16) # 【起诉状:起诉之日待定】暂按 2026-10-16,立案后改此处
月利率 = Decimal("0.01") # 微信承诺"利息按一分算",诉状暂按月利率1%主张(清单第4项:月1%/年10%待定)
年利率备用 = Decimal("0.10") # "一分"如被理解为年利率10%的备用口径(清单第4项)
已还抵充款 = Decimal("5000") # 2024-09-02 微信转账,诉请主张先行抵充利息(清单第3项:抵息/抵本待定)
抵充日 = date(2024, 9, 2)
借款 = [ # (本金, 起息日, 交付方式及起诉状出处)——与诉请二及事实部分逐笔对应
(Decimal("80000"), date(2024, 3, 8), "银行转账,起诉状第39-40行"),
(Decimal("10000"), date(2024, 3, 10), "现金交付(借条出具当日),起诉状第44行"),
(Decimal("20000"), date(2024, 3, 12), "茶行账户转入被告指定公司账户,起诉状第47行"),
]
LPR备选 = {
"基数": Decimal("105000"), # 备选方案下2025-07-01前无利息,5,000元(2024-09-02)只能抵充本金
"起算日": date(2025, 7, 1), # 展期届满次日(起诉状第28-29行)
"年利率": Decimal("0.03"), # 2025年5月20日起一年期LPR为3.0%【待核:以起诉日最新报价为准】
}
# ───────────────────────────────────────────────────────────
D2 = Decimal("0.01")
def 四舍五入(x: Decimal) -> Decimal:
return x.quantize(D2, rounding=ROUND_HALF_UP)
def 计息(本金: Decimal, 起: date, 止: date, 日利率: Decimal) -> tuple[int, Decimal]:
"""算头不算尾:起息日计息、截止日不计息;利息=本金×日利率×天数。"""
天数 = (止 - 起).days
return 天数, 四舍五入(本金 * 日利率 * 天数)
def 整月余日(起: date, 止: date) -> tuple[int, int]:
"""日历上的整月数与零头天数,仅用于展示。"""
月, 游标 = 0, 起
while True:
try:
下月 = 游标.replace(month=游标.month + 1)
except ValueError:
下月 = 游标.replace(year=游标.year + 1, month=1)
if 下月 <= 止:
游标, 月 = 下月, 月 + 1
else:
return 月, (止 - 游标).days
行: list[str] = []
def 输出(s: str = "") -> None:
行.append(s)
print(s)
输出("利息计算与核对报告(脚本自动生成)")
输出(f"生成日期:{date.today().isoformat()}")
输出("依据:起诉状草稿.txt 诉讼请求二(第21-24行)、事实与理由(第39-50行);"
"口径备注见《待核与待定清单》第3-8项")
输出()
输出("一、计息参数")
输出(f" 月利率:{月利率:%}(微信原话\"利息按一分算\"按月利率1%主张——清单第4项:月1%或年10%待定)")
输出(f" 计息终点:{起诉日.isoformat()}【起诉状\"暂计至起诉之日\",起诉之日待定,本报告暂按今日;"
"诉请仍主张计至实际清偿之日,起诉后继续生息】")
输出(" 天数口径:算头不算尾(起息日计息、截止日不计息),日利率=月利率÷30")
输出()
输出("二、分笔算式(按诉请二逐笔)")
利息合计 = Decimal("0")
本金合计 = Decimal("0")
for 本金, 起息日, 说明 in 借款:
天数, 利息 = 计息(本金, 起息日, 起诉日, 月利率 / 30)
月数, 零头 = 整月余日(起息日, 起诉日)
利息合计 += 利息
本金合计 += 本金
输出(f" 第{借款.index((本金, 起息日, 说明)) + 1}笔 本金{本金:,.0f}元({说明})")
输出(f" 起止:{起息日.isoformat()} 至 {起诉日.isoformat()},共{天数}天"
f"(日历上为{月数}个整月零{零头}天)")
输出(f" 算式:{本金:,.0f} × {月利率:%} ÷ 30 × {天数} = {利息:,.2f} 元")
输出()
输出("三、合计与抵充")
输出(f" 本金合计:{本金合计:,.0f} 元")
输出(f" 利息合计(自各笔起息日至{起诉日.isoformat()}):{利息合计:,.2f} 元")
抵充日利息 = sum(计息(p, d, 抵充日, 月利率 / 30)[1] for p, d, _ in 借款)
输出(f" 减:{抵充日.isoformat()}已还 {已还抵充款:,.0f} 元(诉请主张先行抵充利息;"
f"截至该日已生息 {抵充日利息:,.2f} 元 > 5,000 元,抵充时点不影响合计)")
净利息 = 利息合计 - 已还抵充款
输出(f" 利息诉请暂计(至{起诉日.isoformat()}):{净利息:,.2f} 元")
输出(f" 本金+暂计利息合计:{本金合计 + 净利息:,.2f} 元")
输出(" 注:若法院认定5,000元抵充本金(清单第3项),本金应为105,000元;"
"各笔利息不受影响,但诉请须改列\"105,000元本金+全额利息\",需整体重列。")
输出()
输出("四、与起诉状核对")
核对 = [
(本金合计 == Decimal("110000"), "本金合计110,000元=诉请一(第18-19行)及事实部分\"交付借款110,000元\""),
([b for b, _, _ in 借款] == [Decimal("80000"), Decimal("10000"), Decimal("20000")],
"三笔本金80,000/10,000/20,000元与诉请二(第21-23行)逐项一致"),
([d.isoformat() for _, d, _ in 借款] == ["2024-03-08", "2024-03-10", "2024-03-12"],
"三笔起息日与诉请二一致,且与事实部分交付日一致(八万以银行凭证2024-03-08为准,清单第14项)"),
(月利率 == Decimal("0.01"), "利率与诉请二\"按月利率1%\"一致"),
(已还抵充款 == Decimal("5000"), "5,000元(2024-09-02)先行抵充利息,与诉请二(第23行)一致"),
]
for 通过, 说明 in 核对:
输出(f" {'✓' if 通过 else '✗'} {说明}")
输出(" ⚠ 诉请二\"暂计至起诉之日为【待定】元\":本报告按暂定起诉日"
f"{起诉日.isoformat()}填列 {净利息:,.2f} 元;起诉日最终确定后改脚本顶部参数重跑。")
输出(" ⚠ \"一分\"按月利率1%系暂定口径(清单第4项):若按年利率10%,"
f"同口径利息约 {sum(计息(p, d, 起诉日, 年利率备用 / 365)[1] for p, d, _ in 借款):,.2f} 元、"
f"抵充后约 {sum(计息(p, d, 起诉日, 年利率备用 / 365)[1] for p, d, _ in 借款) - 已还抵充款:,.2f} 元。")
输出(" ⚠ 2024-12-31的3,000元按茶叶货款主张、未作抵充(清单第8项);若被认定为还款,"
"需另行抵减并重算。")
输出()
输出("五、备选方案(LPR逾期利息,起诉状第28-30行,均待定,仅参考)")
备选天数, 备选利息 = 计息(LPR备选["基数"], LPR备选["起算日"], 起诉日, LPR备选["年利率"] / 365)
输出(f" 口径:以105,000元为基数(2025-07-01前无约定利息,5,000元只能抵本金)、"
f"自{LPR备选['起算日'].isoformat()}(展期届满次日)起按一年期LPR {LPR备选['年利率']:%}计至{起诉日.isoformat()},"
f"共{备选天数}天")
输出(f" 算式:105,000 × {LPR备选['年利率']:%} ÷ 365 × {备选天数} = {备选利息:,.2f} 元"
"【LPR数值待核,天数按年利率÷365折算】")
输出(f" 与主方案差额:{净利息 - 备选利息:,.2f} 元(两方案差额较大,待承办律师确定,见起诉状第28-30行)")
输出()
输出("六、口径备注")
输出(" 1. 不足月部分按\"月利率÷30×实际天数\"折算(与诉请\"按月利率1%\"配套的通行做法);"
"若按\"整月按月计、零头按日历天计\",三笔合计约34,360.00元、抵充后约29,360.00元,"
"相差约513元,口径待定。")
输出(" 2. 天数为算头不算尾(截止日不计息);各笔利息四舍五入至分后加总。")
输出(" 3. 本脚本只做算术核对,不构成对诉请可获支持程度的判断;"
"待定事项以《待核与待定清单》为准。")
with open("利息计算结果.txt", "w", encoding="utf-8") as f:
f.write("\n".join(行) + "\n")
print(f"\n[已写入 {__import__('os').path.abspath('利息计算结果.txt')}]")