#!/usr/bin/env python3 """Ch. 31, figure « service-dette » (DONNÉES SYNTHÉTIQUES, cas 3) : service de la dette annuel du prêt de 1 475 959 $ et ratio de couverture sur le RNE de l'année 1 (89 956 $) en fonction du taux nominal (composition semestrielle), pour des amortissements de 25, 30 et 40 ans ; repères : taux de base 4,12 %, seuil RCD 1,20 et 1,00. Sortie : ch31-fig-service-dette.pdf.""" from __future__ import annotations import sys, pathlib sys.path.insert(0, str(pathlib.Path(__file__).resolve().parents[1])) import numpy as np, matplotlib.pyplot as plt from traite.style import setup, palette, savefig, LARGEUR from cases import ch31_financement as c def main(): setup() r = c.base(); fi = c.financement(r) s = c.sensibilite_service_dette(r, taux=np.arange(0.03, 0.0801, 0.001)) fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(LARGEUR, 3.0)) for k, (n, lab) in enumerate(((480, "40 ans"), (360, "30 ans"), (300, "25 ans"))): d = s[s["amortissement_mois"] == n] ax1.plot(d["taux"] * 100, d["service_dette"] / 1000, color=palette.cat[k], lw=1.6, label=f"amortissement {lab}") ax2.plot(d["taux"] * 100, d["rcd_1"], color=palette.cat[k], lw=1.6, label=f"amortissement {lab}") for ax in (ax1, ax2): ax.axvline(4.12, color=palette.ink2, lw=0.8, ls="--"); ax.set_xlabel("Taux nominal, composition semestrielle (%)"); ax.set_xlim(3, 8) ax1.text(4.2, 53, "taux de base 4,12 %", fontsize=7.5, color=palette.ink) ax1.axhline(fi["rne_1"] / 1000, color=palette.cat[1], lw=0.8, ls=":"); ax1.text(6.6, fi["rne_1"] / 1000 + 2, "RNE$_1$ = 89 956 $", fontsize=7.5, color=palette.ink) ax1.plot([4.12], [fi["service_dette"] / 1000], "o", color=palette.cat[0], ms=4.5) ax1.set_ylabel("Service de la dette (milliers de $/an)"); ax1.set_ylim(50, 150); ax1.legend(loc="upper left", fontsize=7.2, bbox_to_anchor=(0.0, 1.0)) ax1.set_title("Service de la dette du prêt retenu", loc="left") ax2.axhline(1.20, color=palette.cat[1], lw=0.8, ls=":"); ax2.text(6.4, 1.22, "RCD minimal 1,20", fontsize=7.5, color=palette.ink) ax2.axhline(1.00, color=palette.ink2, lw=0.8, ls=":"); ax2.text(6.4, 1.02, "RCD 1,00 (point mort)", fontsize=7.5, color=palette.ink) ax2.plot([4.12], [1.20], "o", color=palette.cat[0], ms=4.5) ax2.set_ylabel("Ratio de couverture, année 1"); ax2.set_ylim(0.6, 1.5) ax2.set_title("Couverture de la dette", loc="left") savefig(fig, "ch31/ch31-fig-service-dette.pdf") if __name__ == "__main__": main()