SPB Git
145.3 KB · 471 lines csv
1id,chapitre,description,script,test,resultat_attendu,resultat_obtenu,statut,date2CALC-16-01,16,Entonnoir de sélection (600→236→40→27→16→5),analysis/python/cases/ch16_selection.py,analysis/python/tests/test_ch16.py::test_entonnoir_et_comparables,600;236;40;27;16;5,600;236;40;27;16;5,verifie,2026-10-313CALC-16-02,16,Comparables retenus et prix,analysis/python/cases/ch16_selection.py,analysis/python/tests/test_ch16.py::test_entonnoir_et_comparables,G0574 598000;G0404 506500;G0468 624500;G0477 538000;G0575 513500,idem,verifie,2026-10-314CALC-16-03,16,Indication brute $/m² médian × 165 m²,analysis/python/cases/ch16_selection.py,analysis/python/tests/test_ch16.py::test_indication_brute,551029,551029,verifie,2026-10-315CALC-16-04,16,Statistiques $/m² candidats (méd/min/max) et prix bruts (min/max/moy/méd),analysis/python/cases/ch16_selection.py,analysis/python/tests/test_ch16.py::test_indication_brute,3286/2361/4140 ; 506500/624500/556100/538000,idem,verifie,2026-10-316CALC-16-05,16,Sensibilité (48 combinaisons) min/max/écart-type,analysis/python/cases/ch16_selection.py,analysis/python/tests/test_ch16.py::test_sensibilite,525768/608014/24069,idem,verifie,2026-10-317CALC-16-06,16,Solutions des exercices 16.1 16.3 16.4 16.5 16.7,solutions/ch16.tex,analysis/python/tests/test_ch16.py::test_solutions_exercices,569902 ; 0.509/2.504/1.807 ; 28200 ; 0.590/0.262/0.148 ; k*=4.27,idem,verifie,2026-10-318CALC-21-001,21,Coûts directs du devis cas 1 (33 postes),analysis/python/cases/ch21_cout_neuf.py,analysis/python/tests/test_ch21.py::TestDevis::test_totaux_cites,298826.17,298826.17,verifie,2026-10-319CALC-21-002,21,Coûts indirects du devis cas 1 (5 postes) et taux I/D,analysis/python/cases/ch21_cout_neuf.py,analysis/python/tests/test_ch21.py::TestDevis::test_totaux_cites,62598.68 ; 20.95 %,62598.68 ; 20.95 %,verifie,2026-10-3110CALC-21-003,21,Regroupement du devis en 7 blocs (somme = D+I),analysis/python/cases/ch21_cout_neuf.py,analysis/python/tests/test_ch21.py::TestDevis::test_regroupement,361424.85,361424.85,verifie,2026-10-3111CALC-21-004,21,Incitatif 10 % sur D+I et coût neuf C_N = D(1+τI)(1+τE),analysis/python/cases/ch21_cout_neuf.py,analysis/python/tests/test_ch21.py::TestDevis::test_identite_multiplicative,36142.49 ; 397567.33,36142.49 ; 397567.33,verifie,2026-10-3112CALC-21-005,21,Variante assiette directs seuls et écart D·τI·τE,analysis/python/cases/ch21_cout_neuf.py,analysis/python/tests/test_ch21.py::TestDevis::test_variante_assiette_direct,391307.47 ; 6259.87,391307.47 ; 6259.87,verifie,2026-10-3113CALC-21-006,21,Coûts unitaires ($/m² et $/pi²) sur 165 m² habitables et 190 m² bruts,analysis/python/cases/ch21_cout_neuf.py,analysis/python/tests/test_ch21.py::TestDevis::test_unitaires,2409 / 223.8 ; 2092 / 194.4,2409 / 223.8 ; 2092 / 194.4,verifie,2026-10-3114CALC-21-007,21,Fourchette Altus 155-215 $/pi² appliquée à 2045 pi² bruts et 1776 pi² habitables,analysis/python/cases/ch21_cout_neuf.py,analysis/python/tests/test_ch21.py::TestDevis::test_comparaison_altus,316997-439705 (milieu 378351) ; 275287-381849,idem,verifie,2026-10-3115CALC-21-008,21,Lecture IPCB Montréal 18-10-0289-01 (valeurs du tableau 21.4),analysis/python/cases/ch21_cout_neuf.py,analysis/python/tests/test_ch21.py::TestIPCB::test_valeurs_tableau,maison individuelle 66.1→116.5 ; résidentiel 65.5→117.8,idem,verifie,2026-10-3116CALC-21-009,21,Variation annuelle IPCB T3 2025→T3 2026 et ratios d'indexation,analysis/python/cases/ch21_cout_neuf.py,analysis/python/tests/test_ch21.py::TestIPCB::test_ratios_et_variations,8.57 % ; 1.7625 ; 1.620 ; 6.15 %/an,idem,verifie,2026-10-3117CALC-21-010,21,Exemples d'indexation (C_N en $ de 2021/2019 ; 290 000 $ de 2019 → 2026 ; erreur de série),analysis/python/cases/ch21_cout_neuf.py,analysis/python/tests/test_ch21.py::TestIPCB::test_indexation_exemples,294507 ; 245366 ; 469889 ; −5.9 %,idem,verifie,2026-10-3118CALC-21-011,21,Grille de sensibilité indirects × incitatif (min/max/étendue),analysis/python/cases/ch21_cout_neuf.py,analysis/python/tests/test_ch21.py::TestSensibilite::test_grille,351420-436436 (24.2 %),idem,verifie,2026-10-3119CALC-21-012,21,Tornade (indirects ±5 pts ; incitatif 5-15 % ; indice ±8.6 %),analysis/python/cases/ch21_cout_neuf.py,analysis/python/tests/test_ch21.py::TestSensibilite::test_tornade,381132-414003 ; 379496-415639 ; 366171-431655,idem,verifie,2026-10-3120CALC-21-013,21,Ajustement de taille (élasticités −0.05 à −0.20 ; 140 et 200 m² ; barème 2300 $/m²),analysis/python/cases/ch21_cout_neuf.py,analysis/python/tests/test_ch21.py::TestSensibilite::test_elasticite,477287/463711 ; 340112/348599 ; 386871 vs 379500,idem,verifie,2026-10-3121CALC-21-014,21,Exercices 21.1 à 21.7 (solutions),analysis/python/tests/test_ch21.py,analysis/python/tests/test_ch21.py::TestExercices,voir solutions/ch21.tex,idem,verifie,2026-10-3122CALC-29-001,29,RBP contractuel du cas 3 (12 baux × 12),analysis/python/cases/ch29_capitalisation.py (traite.cas3.revenus),analysis/python/tests/test_ch29.py::test_valeurs_citees_revenus,165540,165540.00,verifie,2026-10-3123CALC-29-002,29,"RBE = RBP(1−3,9 %) + autres revenus 9 360 $",analysis/python/cases/ch29_capitalisation.py,analysis/python/tests/test_ch29.py::test_valeurs_citees_revenus,168443.94,168443.94,verifie,2026-10-3124CALC-29-003,29,"Dépenses normalisées hors réserve (taxes sur rôle 2 200 000 $, postes 2025 × 1,03, gestion 4 % RBE)",analysis/python/cases/ch29_capitalisation.py (traite.cas3.depenses_normalisees),analysis/python/tests/test_ch29.py::test_valeurs_citees_revenus,70385.19,70385.19,verifie,2026-10-3125CALC-29-004,29,RNE normalisé après réserve 8 103 $ (= RNE année 1 des ch. 30 et 47),analysis/python/cases/ch29_capitalisation.py (traite.cas3.rne),analysis/python/tests/test_ch29.py::test_coherence_avec_cas3_partage,89955.75,89955.75,verifie,2026-10-3126CALC-29-005,29,"Taux extraits : médiane / moyenne / pondérée RNE / Q1 / Q3 / min / max sur 40 ventes 6-30 log., 24 mois",analysis/python/cases/ch29_capitalisation.py (traite.cas3.taux_extraits),analysis/python/tests/test_ch29.py::test_valeurs_citees_taux,"4,415 / 4,404 / 4,332 / 4,153 / 4,638 / 3,72 / 5,47 %","4,415 / 4,404 / 4,332 / 4,153 / 4,638 / 3,72 / 5,47 %",verifie,2026-10-3127CALC-29-006,29,"Régression R = a + b1(état−3) + b2(n−12) : a, b1, b2, R², σ résiduel",analysis/python/cases/ch29_capitalisation.py,analysis/python/tests/test_ch29.py::test_valeurs_citees_taux,"4,567 % ; −0,0441 pt ; −0,0227 pt ; 0,156 ; 0,383 pt","4,567 % ; −0,0441 pt ; −0,0227 pt ; 0,156 ; 0,383 pt",verifie,2026-10-3128CALC-29-007,29,Médiane des 10 ventes les plus proches (distance taille/état/âge/quartier/date),analysis/python/cases/ch29_capitalisation.py::comparables_proches,analysis/python/tests/test_ch29.py::test_valeurs_citees_taux,"4,52 %","4,52 %",verifie,2026-10-3129CALC-29-008,29,"Valeur par capitalisation directe V = 89 955,75 / 0,04415 (identique à cas3.tout()['valeur_capitalisation'])",analysis/python/cases/ch29_capitalisation.py,analysis/python/tests/test_ch29.py::test_valeurs_citees_valeur,2037502.89,2037502.89,verifie,2026-10-3130CALC-29-009,29,"Valeurs alternatives : taux de régression 4,567 % ; médiane des proches 4,52 % ; Q3 ; Q1",analysis/python/cases/ch29_capitalisation.py,analysis/python/tests/test_ch29.py::test_valeurs_citees_valeur,1 969 694 ; 1 990 172 ; 1 939 747 ; 2 166 303 $,1 969 694 ; 1 990 172 ; 1 939 747 ; 2 166 303 $,verifie,2026-10-3131CALC-29-010,29,"Constante hypothécaire f (4,12 % composé semestriellement, 480 mois)",analysis/python/cases/ch29_capitalisation.py (traite.finance.Hypotheque),analysis/python/tests/test_ch29.py::test_bande_et_rcd,"5,0789 %","5,0789 %",verifie,2026-10-3132CALC-29-011,29,"Bande d'investissement : R_E impliqué par R = 4,415 % avec M = 0,75 ; R pour R_E = 6 %",analysis/python/cases/ch29_capitalisation.py (traite.finance.taux_bande_investissement),analysis/python/tests/test_ch29.py::test_valeurs_citees_construction,"2,42 % ; 5,309 %","2,42 % ; 5,309 %",verifie,2026-10-3133CALC-29-012,29,"Formule RCD : R = 1,20 × 0,75 × f et valeur",analysis/python/cases/ch29_capitalisation.py (traite.finance.taux_par_rcd),analysis/python/tests/test_ch29.py::test_valeurs_citees_construction,"4,571 % ; 1 967 946 $","4,571 % ; 1 967 946 $",verifie,2026-10-3134CALC-29-013,29,"Gordon : R = 7,25 − 2,25 ; 7,25 − 3,10 ; g implicite = 7,25 − 4,415",analysis/python/cases/ch29_capitalisation.py (traite.finance.taux_gordon),analysis/python/tests/test_ch29.py::test_gordon,"5,00 % ; 4,15 % ; 2,835 %","5,00 % ; 4,15 % ; 2,835 %",verifie,2026-10-3135CALC-29-014,29,"Ellwood/Akerson : P (10 ans), SFF(7,25 %,10), Δ = 1,0225^10 − 1, R(Δ=0), R(Δ), R sans dette, Δ implicite, Y implicite ; égalité Ellwood = Akerson",analysis/python/cases/ch29_capitalisation.py (traite.finance.taux_ellwood/taux_akerson),analysis/python/tests/test_ch29.py::test_ellwood_egal_akerson,"12,25 % ; 0,071527 ; 24,92 % ; 4,965 % ; 3,182 % ; 5,468 % ; 7,68 % ; 10,70 %","12,25 % ; 0,071527 ; 24,92 % ; 4,965 % ; 3,182 % ; 5,468 % ; 7,68 % ; 10,70 %",verifie,2026-10-3136CALC-29-015,29,"Multiplicateurs : MRB médian des 40 ventes, V par MRB (RBP contrat / marché), MRN = 1/R, MRB implicite du sujet",analysis/python/cases/ch29_capitalisation.py,analysis/python/tests/test_ch29.py::test_valeurs_citees_multiplicateurs_coherence,"13,54 ; 2 241 412 $ ; 2 518 927 $ ; 22,65 ; 12,31","13,54 ; 2 241 412 $ ; 2 518 927 $ ; 22,65 ; 12,31",verifie,2026-10-3137CALC-29-016,29,"Cohérence : taxes sur rôle vs sur valeur indiquée (écart, effet capitalisé) ; taux avant réserve équivalent ; erreur taux avant réserve sur RNE après réserve",analysis/python/cases/ch29_capitalisation.py,analysis/python/tests/test_ch29.py::test_valeurs_citees_multiplicateurs_coherence,"880,88 $ ; 19 952 $ ; 4,81 % ; 1 869 136 $","880,88 $ ; 19 952 $ ; 4,81 % ; 1 869 136 $",verifie,2026-10-3138CALC-29-017,29,RNE aux loyers de marché et valeur (erreur « capitaliser le marché avec baux en place »),analysis/python/cases/ch29_capitalisation.py,analysis/python/tests/test_ch29.py::test_valeurs_citees_multiplicateurs_coherence,"108 864,54 $ ; 2 465 788 $ (+21,0 %)","108 864,54 $ ; 2 465 788 $ (+21,0 %)",verifie,2026-10-3139CALC-29-018,29,"Droits de mutation Montréal 2026 : base = max(prix, rôle × 1,00) = 2 200 000 $ ; droits ; droits sur le prix",analysis/python/cases/ch29_capitalisation.py::droits_mutation,analysis/python/tests/test_ch29.py::test_droits_mutation_bareme,"45 460,50 $ ; 40 763,07 $ (2,23 % du prix)","45 460,50 $ ; 40 763,07 $ (2,23 % du prix)",verifie,2026-10-3140CALC-29-019,29,"Sensibilité : grille V(R, RNE±5 %) 3,75-5,25 % ; ∂V/∂R = −V/R ; V(R±25 pb) exact vs linéaire",analysis/python/cases/ch29_capitalisation.py,analysis/python/tests/test_ch29.py::test_valeurs_citees_sensibilite,"−115 374 $/25 pb ; 1 928 312 $ (−5,36 % vs −5,66 %) ; 2 159 802 $","−115 374 $/25 pb ; 1 928 312 $ (−5,36 % vs −5,66 %) ; 2 159 802 $",verifie,2026-10-3141CALC-29-020,29,Exercices 29.1 à 29.8 (toutes les valeurs des solutions),analysis/python/cases/ch29_capitalisation.py::exercices,analysis/python/tests/test_ch29.py::test_exercices,voir solutions/ch29.tex,identiques (tolérances 1 $ / 1e-6),verifie,2026-10-3142CALC-30-01,30,RNE normalisé année 1 du cas 3 (RBP 165 540 ; RBE 168 444 ; dépenses 70 385 + réserve 8 103),analysis/python/cases/ch30_dcf.py,analysis/python/tests/test_ch30.py::test_valeurs_citees_dcf,89956,89955.75,verifie,2026-10-3143CALC-30-02,30,Taux global médian extrait des 40 comparables et valeur par capitalisation directe,analysis/python/cases/ch30_dcf.py,analysis/python/tests/test_ch30.py::test_valeurs_citees_dcf,"4,415 % ; 2 037 503",0.04415 ; 2037502.89,verifie,2026-10-3144CALC-30-03,30,Projection 11 ans (RBP 165 540 → 259 911 ; RNE 89 956 → 159 658) ; identités RNE = RBE − DE − RR et CF = RNE − CAPEX,analysis/python/cases/ch30_dcf.py,analysis/python/tests/test_ch30.py::test_tableau_dcf_identites,RNE_11 = 159 658,159658.38,verifie,2026-10-3145CALC-30-04,30,"Valeur terminale : VT brute 3 193 168 ; nette (2,5 %) 3 113 338 ; VA (×0,496623) 1 546 156 ; erreur si actualisée à T+1 = 104 519",analysis/python/cases/ch30_dcf.py,analysis/python/tests/test_ch30.py::test_valeur_terminale,3193168 ; 3113338 ; 1546156 ; 104519,3193167.52 ; 3113338.33 ; 1546156.00 ; 104518.71,verifie,2026-10-3146CALC-30-05,30,"Valeur DCF = VA flux 662 410 + VA VT 1 546 156 = 2 208 566 ; part VT 70,0 % ; écart vs capitalisation directe +171 063 (8,4 %)",analysis/python/cases/ch30_dcf.py,analysis/python/tests/test_ch30.py::test_valeurs_citees_dcf,2208566,2208565.91,verifie,2026-10-3147CALC-30-06,30,"TRI de l'investisseur non endetté payant V0 = r = 7,25 % ; VAN(r) = 0 ; MIRR(r,r) = r ; délai de récupération 9,42 ans",analysis/python/cases/ch30_dcf.py,analysis/python/tests/test_ch30.py::test_van_au_tri_nulle_sans_levier,0.0725,0.07250000,verifie,2026-10-3148CALC-30-07,30,"Taux implicites : R implicite DCF 4,07 % ; g implicite (r − R_med) 2,835 % ; g_T 2,25 % ; croissance RNE annualisée 5,90 % ; TRI si payé V_cap 8,25 %",analysis/python/cases/ch30_dcf.py,analysis/python/tests/test_ch30.py::test_taux_implicites,0.0407 ; 0.02835 ; 0.0225 ; 0.0590 ; 0.0825,0.040730 ; 0.028350 ; 0.022500 ; 0.059050 ; 0.082521,verifie,2026-10-3149CALC-30-08,30,"Financement (cas3.financement) : prêt RCD 1 475 959 (contrainte RCD) ; RPV 66,83 % ; SD 74 963 ; constante 5,079 % ; mise 732 606 ; solde 120 paiements 1 295 148 ; i_m 0,34042 % ; effectif 4,1624 %",analysis/python/cases/ch30_dcf.py,analysis/python/tests/test_ch30.py::test_levier,1475959 ; 74963 ; 732606 ; 1295148,1475959.45 ; 74963.13 ; 732606.46 ; 1295148.22,verifie,2026-10-3150CALC-30-09,30,"TRI des fonds propres avec levier 11,22 % (5 changements de signe ; VAN(TRI)=0) ; MIRR (4,12 % / 7,25 %) 10,61 % ; cash-on-cash an 1 2,05 %",analysis/python/cases/ch30_dcf.py,analysis/python/tests/test_ch30.py::test_levier,0.1122 ; 0.1061,0.112192 ; 0.106112,verifie,2026-10-3151CALC-30-10,30,"Proposition 30.1 : DCF = NOI_1/(r−g) pour T = 1, 5, 10, 25, 60 si R_T = r − g ; part VT = ((1+g)/(1+r))^T ; coûts de vente : V_G [1 − c_v q^T]",analysis/python/cases/ch30_dcf.py,analysis/python/tests/test_ch30.py::test_proposition_gordon,égalité à 1e-10 relatif,OK,verifie,2026-10-3152CALC-30-11,30,"Sensibilité R_T 4,25 → 5,75 % : V 2 481 417 → 2 006 893 (+12,4 % → −9,1 %) ; surfaces V(r,R_T) et V(r,g) monotones",analysis/python/cases/ch30_dcf.py,analysis/python/tests/test_ch30.py::test_sensibilite_monotone,2481417 ; 2006893,2481416.97 ; 2006893.39,verifie,2026-10-3153CALC-30-12,30,"Tornade : amplitude max = croissance des loyers de marché 368 235 ; scénarios : encadrement serré 1 912 046 (−13,4 %), hausse des taux 1 947 889 (−11,8 %) ; TRI FP si payé base 7,48 % / 8,31 % ; RCD min 1,04",analysis/python/cases/ch30_dcf.py,analysis/python/tests/test_ch30.py::test_tornade_et_scenarios,368235 ; 1912046 ; 1947889,368235.05 ; 1912046.35 ; 1947889.41,verifie,2026-10-3154CALC-30-13,30,Solutions des exercices 30.1 à 30.8 (fonction exercices()),analysis/python/cases/ch30_dcf.py,analysis/python/tests/test_ch30.py::test_exercices_coherence,voir solutions/ch30.tex,OK,verifie,2026-10-3155CALC-47-001,47,RBP contractuel = 12 × somme des loyers,analysis/python/cases/ch47_dossier.py,analysis/python/tests/test_ch47.py::test_identites_revenus_depenses,165540,165540.00,verifie,2026-10-3156CALC-47-002,47,RBE = RBP(1−0,039) + 9 360,analysis/python/cases/ch47_dossier.py,test_ch47.py::test_identites_revenus_depenses,168443.94,168443.94,verifie57CALC-47-003,47,Dépenses normalisées hors réserve (taxes recalculées ; gestion 4 % RBE ; +3 %),analysis/python/cases/ch47_dossier.py,test_ch47.py::test_valeurs_citees,70385.19,70385.19,verifie,2026-10-3158CALC-47-004,47,RNE normalisé = RBE − DE − réserve 8 103,analysis/python/cases/ch47_dossier.py,test_ch47.py::test_valeurs_citees,89955.75,89955.75,verifie,2026-10-3159CALC-47-005,47,Taux global : médiane de 40 ventes (moyenne 4,404 ; pondérée 4,332 ; Q1 4,1525 ; Q3 4,6375),analysis/python/cases/ch47_dossier.py,test_ch47.py::test_valeurs_citees60CALC-47-006,47,Valeur par capitalisation directe RNE/0,04415,analysis/python/cases/ch47_dossier.py,test_ch47.py::test_capitalisation_et_dcf,2037502.89,2037502.89,verifie61CALC-47-007,47,Projection DCF 10 ans (rotation 15 % ; g_c 3,1 ; g_m 3,5 ; g_d 3,0 ; CAPEX 85k/40k/120k) : RNE_11,analysis/python/cases/ch47_dossier.py,test_ch47.py::test_valeurs_citees,159658.3862CALC-47-008,47,Valeur terminale brute RNE_11/0,05 et nette ×0,975,analysis/python/cases/ch47_dossier.py,test_ch47.py::test_capitalisation_et_dcf,3193167.52 / 3113338.33,3193167.52 / 3113338.3363CALC-47-009,47,Valeur DCF (r 7,25 %) = VA flux 662 409,91 + VA terminale 1 546 156,00 ; part terminale 70,0 %,analysis/python/cases/ch47_dossier.py,test_ch47.py::test_capitalisation_et_dcf64CALC-47-010,47,OLS ln(prix/logement) : élasticité loyer 1,1707 ; taille 0,0079/log. ; R² 0,635,analysis/python/cases/ch47_dossier.py,test_ch47.py::test_valeurs_citees,1.1707 / 0.007965CALC-47-011,47,Comparaison par unité : prix/logement pondéré 155 908,56 × 12,analysis/python/cases/ch47_dossier.py,test_ch47.py::test_valeurs_citees,1870902.67,1870902.67,verifie66CALC-47-012,47,MRB médian des 10 comparables 11,94 × RBP contractuel,analysis/python/cases/ch47_dossier.py,test_ch47.py::test_valeurs_citees,1976547.60,1976547.60,verifie67CALC-47-013,47,Prêt max RCD 1,20 à 4,12 % / 480 mois (constante 5,0789 %) ; prêt RPV 75 % de V_dcf 1 656 424,43,analysis/python/traite/cas3.py,test_ch47.py::test_valeurs_citees68CALC-47-014,47,Service de la dette 74 963,13 ; paiement mensuel 6 246,93 ; solde après 60 mois 1 394 739,19 ; après 120 mois 1 295 148,22,analysis/python/cases/ch47_dossier.py,test_ch47.py::test_valeurs_citees69CALC-47-015,47,TRI fonds propres (achat à V_dcf) 11,22 % ; VAN nulle au TRI ; point mort 92,7 %,analysis/python/cases/ch47_dossier.py,test_ch47.py::test_financement_identites,0.1122 / 0.927,0.1122 / 0.92770CALC-47-016,47,Scénarios de renouvellement an 6 : SD +200 pb 95 920,20 ; RCD an 6 à +300 pb 1,222,analysis/python/cases/ch47_dossier.py,test_ch47.py::test_valeurs_citees,95920.20 / 1.222,95920.20 / 1.22271CALC-47-017,47,APH Select 40 ans (RPV 85 %,RCD 1,10) à la valeur finale : prêt,analysis/python/cases/ch47_dossier.py,test_ch47.py::test_valeurs_citees,1610137.58,1610137.5872CALC-47-018,47,Monte-Carlo 10 000 tirages graine 20261031 : médiane / q05 / q95 / moyenne / écart-type,analysis/python/cases/ch47_dossier.py,test_ch47.py::test_monte_carlo_citations_et_reproductibilite,2191607.87 / 1735194.21 / 2876902.35 / 2233505.68 / 350442.57,idem,verifie,2026-10-3173CALC-47-019,47,Monte-Carlo : P(RCD1<1,20) 0,4936 ; P(RCD1<1,00) 0 ; P(RCD6<1,20 | +200 pb) 0,0140 ; P(V<cap) 0,3094 ; P(V<rôle) 074CALC-47-020,47,Projection vectorisée (MC) reproduit cas3.projection_dcf aux paramètres de base (rtol 1e-12),analysis/python/cases/ch47_dossier.py,test_ch47.py::test_projection_vectorisee_reproduit_cas3,identique,identique,verifie,2026-10-3175CALC-47-021,47,Tornade : amplitude taux d'actualisation 636 535 ; croissance loyers marché 459 632 ; écart terminal 320 404,analysis/python/cases/ch47_dossier.py,test_ch47.py::test_projection_vectorisee_reproduit_cas3 (V_base),636534.56,636534.56,verifie,2026-10-3176CALC-47-022,47,Réconciliation 45/35/20 → 2 064 054,90 arrondie à 2 060 000 ; ratio/rôle 0,9364 ; MRB 12,44 ; taux implicite 4,367 %,analysis/python/cases/ch47_dossier.py,test_ch47.py::test_valeurs_citees77CALC-47-023,47,Droits de mutation Montréal 2026 sur 2 060 000 (7 tranches),analysis/python/cases/ch47_dossier.py,test_ch47.py::test_droits_mutation_montreal,41325.50,41325.50,verifie,2026-10-3178CALC-47-024,47,Valeur libre de baux (loyers de marché) : RNE 108 864,54 ; valeur 2 465 788,04,analysis/python/cases/ch47_dossier.py,test_ch47.py::test_valeurs_citees,2465788.04,2465788.0479CALC-47-025,47,Financement à la valeur finale : mise de fonds 584 040,55 ; RPV 71,65 % ; TRI FP 13,83 % ; TRI sans levier 8,11 %,analysis/python/cases/ch47_dossier.py,test_ch47.py::test_valeurs_citees80CALC-47-026,47,Exercices 1 à 7 (RNE 88 207,65 ; 88 949,51 ; V Q1/Q3 ; rotation 10/25 % ; prêt à 5,12 % 1 283 814,77 ; APH ; MC inoccupation 6 % P=0,9262),analysis/python/cases/ch47_dossier.py81CALC-01-01,1,Modèle hédonique de référence cas 1 : n ; k ; R² ; R² ajusté ; sigma,analysis/python/cases/ch01_valeur_prix.py,analysis/python/tests/test_ch01.py::test_modele_et_dispersion,"600;16;0,853;0,849;0,083","600;16;0,8530;0,8492;0,0830",verifie,2026-10-3182CALC-01-02,1,Résidus : écart-type ; part des ventes à ±10 % ; à ±5 % ; asymétrie ; aplatissement,analysis/python/cases/ch01_valeur_prix.py,analysis/python/tests/test_ch01.py::test_modele_et_dispersion,"0,082;0,745;0,448;≈0;≈0","0,0820;0,745;0,448;-0,070;-0,247",verifie,2026-10-3183CALC-01-03,1,Sujet : médiane ; moyenne (Duan 1,00335) ; mode ; IP 95 % (espérance conditionnelle log-normale),analysis/python/cases/ch01_valeur_prix.py,analysis/python/tests/test_ch01.py::test_esperance_conditionnelle_sujet,635 821;637 953;631 455;[539 682 ; 749 087],idem,verifie84CALC-01-04,1,P(|P/V−1| > 10 %) ; > 5 % ; > 20 % pour sigma = 0,083,analysis/python/cases/ch01_valeur_prix.py,analysis/python/tests/test_ch01.py::test_probabilites_ecart,"0,251;0,557;0,028","0,251;0,557;0,0281",verifie85CALC-01-05,1,Contributions au sujet : garage ; sous-sol ; étages ; superficie ; âge (net) ; tendance ; identité const + Σβx = ln V,analysis/python/cases/ch01_valeur_prix.py,analysis/python/tests/test_ch01.py::test_contributions,20 291;13 829;18 860;53 893;−84 497;57 385,idem,verifie,2026-10-3186CALC-01-06,1,Rendements décroissants : élasticité ; prix moyen ; prix marginal ; +10 m² ; 10 m² suivants,analysis/python/cases/ch01_valeur_prix.py,analysis/python/tests/test_ch01.py::test_rendements_decroissants,"0,539;3 853;2 077;20 491;19 958",idem,verifie,2026-10-3187CALC-01-07,1,Anticipation : 0,364 %/mois ; 4,46 %/an ; 26,0 mois ; facteur 1,0992 ; valeur à la référence 578 436 vs rôle 468 000,analysis/python/cases/ch01_valeur_prix.py,analysis/python/tests/test_ch01.py::test_anticipation88CALC-01-08,1,Conformité : sujet relocalisé Aylmer / Gatineau / Buckingham / Masson-Angers,analysis/python/cases/ch01_valeur_prix.py,analysis/python/tests/test_ch01.py::test_conformite,"692 518 (+8,9 %);621 798 (−2,2 %);494 999 (−22,1 %);488 712 (−23,1 %)",idem,verifie,2026-10-3189CALC-01-09,1,Comparables ch. 16 : écart prix/valeur estimée G0574 ; G0404 ; G0468 ; G0477 ; G0575,analysis/python/cases/ch01_valeur_prix.py,analysis/python/tests/test_ch01.py::test_comparables_ch16,"+0,7 %;−14,9 %;−9,9 %;−10,5 %;−8,0 %",idem,verifie,2026-10-3190CALC-01-10,1,Modèle de recherche (sim. 20 000) : prix de réserve/m ; prix moyen/m ; CV ; délai moyen (théorique) ; point fixe vérifié,analysis/python/cases/ch01_valeur_prix.py,analysis/python/tests/test_ch01.py::test_recherche,"1,0267;1,068;0,0317;5,08 (5,05)",idem,verifie,2026-10-3191CALC-01-11,1,Recherche : sensibilité au coût de détention 0,2/0,4/0,8/1,5 % (prix de réserve ; délai ; prix moyen ; CV),analysis/python/cases/ch01_valeur_prix.py,analysis/python/tests/test_ch01.py::test_recherche92CALC-01-12,1,PHMU (hypothèses déclarées) : valeur résiduelle unifamiliale / duplex / triplex,analysis/python/cases/ch01_valeur_prix.py,analysis/python/tests/test_ch01.py::test_phmu,170 000;160 000;140 000,idem,verifie,2026-10-3193CALC-01-13,1,Sensibilité à sigma (0,04–0,16) : moyenne/médiane ; mode/médiane ; bornes IP ; P(>5 %) ; P(>10 %) ; n pour ±2 %,analysis/python/cases/ch01_valeur_prix.py,analysis/python/tests/test_ch01.py::test_sensibilite_sigma,tableau 1.8 ; n = 16/36/68/142/251,idem94CALC-01-14,1,Solutions des exercices 1.2 à 1.7 (contributions ; rendements ; log-normale ; Gordon/coût d'usage ; prix de réserve uniforme ; lambda d'ancrage),analysis/python/cases/ch01_valeur_prix.py,analysis/python/tests/test_ch01.py::test_solutions_exercices,"16 964/20 958 ; 3 853/2 077/50 241 ; 503 613/492 852/[395 206;632 581]/0,427 ; 600 000/30 000/39 000 ; W=1,0553, T=4,47 ; λ=0,437",idem,verifie,2026-10-3195CALC-02-01,2,Écart contractuel/marché du cas 3 (RBP contrat ; RBP marché ; écart ; écart net de vacance 3,9 %),analysis/python/cases/ch02_droits.py,analysis/python/tests/test_ch02.py::test_ecart_contractuel,"165540 ; 186036 ; 20496 (11,0 %) ; 19697",idem,verifie96CALC-02-02,2,Écarts par logement (tableau 2.4) ; logement 103 : 319 $/mois ; 3 828 $/an ; ratio 0,695 ; ratio moyen 0,884,analysis/python/cases/ch02_droits.py,analysis/python/tests/test_ch02.py::test_ecart_contractuel,"1176;2592;3828;264;2412;588;2460;2244;336;2640;1152;804 ; 0,695 ; 0,884",idem97CALC-02-03,2,Décomposition DCF : V_locateur (= cas3.tout dcf) ; V_pleine libre de baux ; V_locataires ; part,analysis/python/cases/ch02_droits.py,analysis/python/tests/test_ch02.py::test_decomposition_dcf,"2208566 ; 2235712 ; 27146 ; 1,21 %",idem,verifie,2026-10-3198CALC-02-04,2,Composantes : RNE1 89 956 / 108 865 ; RBE1 168 444 / 188 141 ; VA flux 662 410 / 699 966 ; VA VT 1 546 156 / 1 535 746 ; écarts RNE années 1-6 et 11,analysis/python/cases/ch02_droits.py,analysis/python/tests/test_ch02.py::test_decomposition_dcf,18909;13166;8821;3692;1241;-394;…;-1075,idem,verifie,2026-10-3199CALC-02-05,2,Capitalisation naïve de l'écart au taux médian 4,415 % : Vcap contrat / marché / écart,analysis/python/cases/ch02_droits.py,analysis/python/tests/test_ch02.py::test_capitalisation_naive_et_formules,2037503 ; 2465788 ; 428285,idem,verifie100CALC-02-06,2,"Formule fermée éq. 2.8 : Δ1 = 19 697, r 7,25 %, g 3,5 % : sans rotation ; ρ = 15 % ; horizon 10 ans",analysis/python/cases/ch02_droits.py,analysis/python/tests/test_ch02.py::test_formule_fermee_rotation;test_capitalisation_naive_et_formules,"525244 ; 102188 (dénominateur 0,19275) ; 88094",idem,verifie,2026-10-31101CALC-02-07,2,Sensibilité rotation (0/1/2/3/6 logements/an) × taux (6,25/7,25/8,25 %) : V_locataires et part (tableau 2.6),analysis/python/cases/ch02_droits.py,analysis/python/tests/test_ch02.py::test_sensibilite,"397186 ; 59858 ; 27146 ; 17360 ; 5195 (à 7,25 %) ; part 18,39-18,50 % → 0,17-0,30 % ; facteur 76"102CALC-02-08,2,Identité d'additivité droit temporaire + réversion = pleine propriété (Gordon) et formule fermée vs somme brute,analysis/python/cases/ch02_droits.py,analysis/python/tests/test_ch02.py::test_additivite_droit_temporaire_et_reversion;test_formule_fermee_rotation,somme = V_pleine à 1e-12 ; série = formule à 1e-9,idem,verifie,2026-10-31103CALC-02-09,2,Solutions : ex. 2.3 (15 591 ; 26 578 ; 52 800) ; ex. 2.4 (309 341 ; 290 659 ; 696 581 ; 51,6 % ; viager 8 ans 192 361 / 407 639) ; ex. 2.5 (1,0985 ; 514 084) ; ex. 2.6 (159 168 ; 93 795) ; ex. 2.7 (79 254 ; 2 287 820) ; encadré (1 955 638 ; 252 928),analysis/python/cases/ch02_droits.py,analysis/python/tests/test_ch02.py::TestExercices,idem,idem104CALC-10-01,10,Contrôle lexical strict des 12 éléments : extraits fictifs A/B/C/D (éléments détectés),analysis/python/cases/ch10_controle_rapport.py,analysis/python/tests/test_ch10.py::test_extrait_complet_et_lacunaires,A 2;B 10;C 6;D 12,A 2;B 10;C 6;D 12,verifie,2026-10-31105CALC-10-02,10,Éléments non détectés (lexique strict) A ; B ; C,analysis/python/cases/ch10_controle_rapport.py,analysis/python/tests/test_ch10.py::test_extrait_complet_et_lacunaires,"A {1,2,4,5,6,7,9,10,11,12} ; B {6,10} ; C {2,3,4,9,11,12}",idem,verifie,2026-10-31106CALC-10-03,10,"Lexique souple : A détecte 5/12 (manquants 2,4,5,7,9,10,11) ; B/C/D inchangés",analysis/python/cases/ch10_controle_rapport.py,analysis/python/tests/test_ch10.py::test_extrait_complet_et_lacunaires;test_lexique_souple_jamais_plus_severe,"5 ; {2,4,5,7,9,10,11}",idem,verifie,2026-10-31107CALC-10-04,10,Taux de conformité τ̂ = détectés/12 (tableau 10.9),analysis/python/cases/ch10_controle_rapport.py,analysis/python/tests/test_ch10.py::test_taux_conformite_identite,"0,167 ; 0,417 ; 0,833 ; 0,500 ; 1,000","0,167 ; 0,417 ; 0,833 ; 0,500 ; 1,000",verifie,2026-10-31108CALC-10-05,10,"Probabilité de détection P_n = 1-(1-d)^n pour d ∈ {0,5;0,7;0,9} et n ∈ {1;2;3} (tableau 10.8)",analysis/python/cases/ch10_controle_rapport.py,analysis/python/tests/test_ch10.py::test_p_detection,"0,500/0,750/0,875 ; 0,700/0,910/0,973 ; 0,900/0,990/0,999",idem,verifie,2026-10-31109CALC-10-06,10,"Incidence d'une hypothèse extraordinaire (extrait B fictif) : 612 000 − 575 000 ; espérance à p = 0,6 ; p = 0,25",analysis/python/cases/ch10_controle_rapport.py,analysis/python/tests/test_ch10.py::test_incidence_hypothese,"37 000 $ (6,43 %) ; 597 200 $ ; 584 250 $","37 000 $ (6,43 %) ; 597 200 $ ; 584 250 $ (ex. 10.5 d : calcul manuel)",verifie,2026-10-31110CALC-10-07,10,"Formation continue (r. 127.1) : 26 h + report 5 h, 2 h éthique → déficit éthique 1 h, report 1 h ; 33 h/3 h → conforme, report 3 h",analysis/python/cases/ch10_controle_rapport.py,analysis/python/tests/test_ch10.py::test_conservation_et_formation,non conforme ; report 1 ; conforme ; report 3,idem,verifie,2026-10-31111CALC-10-08,10,Conservation minimale du dossier (r. 133 art. 6) : 2026-11-15 + 5 ans,analysis/python/cases/ch10_controle_rapport.py,analysis/python/tests/test_ch10.py::test_conservation_et_formation,2031-11-15,2031-11-15,verifie,2026-10-31112CALC-10-09,10,"Matrice normes-C : 100 dispositions, 17 domaines, 28 chapitres ; OEAQ+Code des professions 43 ; ch10 visé par 51 ; moyenne 1,70 chapitre/disposition ; 51 % multi-chapitres ; max 4 (tableau 10.7)",analysis/python/cases/ch10_matrice_normes.py,analysis/python/tests/test_ch10.py::test_matrice_normes,"100;17;28;43;51;1,70;51 %;4",idem,verifie,2026-10-31113CALC-10-10,10,"Familles : hors Québec 27, finance 20, NPP 15, déontologie 14, règlements 14, données 10 ; dont ch10 : 10,1,12,14,14,0",analysis/python/cases/ch10_matrice_normes.py,analysis/python/tests/test_ch10.py::test_matrice_normes,27;20;15;14;14;10,27;20;15;14;14;10,verifie,2026-10-31114CALC-10-11,10,"Chronologie : 8 documents sur 10 en vigueur/référence au 2026-10-31 ; délai publication→effet IVS 2025 = 366 j, RICS = 51 j",analysis/python/cases/ch10_matrice_normes.py,analysis/python/tests/test_ch10.py::test_chronologie,8 ; 366 ; 51,8 ; 366 ; 51,verifie,2026-10-31115CALC-10-12,10,"Solution ex. 10.6 c : probabilité d'échapper à deux contrôles indépendants (0,95 ; 0,7) = 0,05 × 0,3",—,calcul manuel (solutions/ch10.tex),"0,015 (détection 98,5 %)","0,015",verifie,2026-10-31116CALC-07-01,7,"Ventes appariées (n=12) : moyenne, médiane, écart-type, erreur-type, t, IC 95 %",analysis/python/cases/ch07_servitudes_copro.py,analysis/python/tests/test_ch07.py::TestServitude::test_paires_citees,"-20333 ; -19000 ; 10026 ; 2894 ; -7,03 ; [-26703 ; -13963]",idem,verifie,2026-10-31117CALC-07-02,7,"Effet relatif de la servitude : moyenne des ratios, rapport des moyennes, semi-log exp(β)−1 ; prix moyen sans",analysis/python/cases/ch07_servitudes_copro.py,analysis/python/tests/test_ch07.py::TestServitude::test_paires_citees,"-4,51 % ; -4,46 % ; -4,54 % (β=-0,0465) ; 455 792",idem,verifie,2026-10-31118CALC-07-03,7,Identités : moyenne des différences = différence des moyennes ; s_d (n−1) ; ET = s_d/√n ; concordance avec traite.comparables.ventes_appariees,analysis/python/cases/ch07_servitudes_copro.py,analysis/python/tests/test_ch07.py::TestServitude::test_identites_paires,identités à 1e-9,idem,verifie,2026-10-31119CALC-07-04,7,"Modèle de la bande : 120 m² × 180 $/m² × 0,5",analysis/python/cases/ch07_servitudes_copro.py,analysis/python/tests/test_ch07.py::TestServitude::test_modele_bande,"21 600 ; 10 800 ; 17,1 % du terrain",idem,verifie,2026-10-31120CALC-07-05,7,"Quotes-parts en dix-millièmes (somme 10 000) ; Σv = 716,91 ; ΣS = 710 m²",analysis/python/cases/ch07_servitudes_copro.py,analysis/python/tests/test_ch07.py::TestCopropriete::test_quotes_parts,935;1352;974;1408;1196;1644;1186;1305,idem,verifie,2026-10-31121CALC-07-06,7,Répartition des charges : 40 000 + 21 891 + 5 000 = 66 891 (général) + 3 200 (stationnements) = 70 091 ; F1 6 254 ; F4 10 218 ; F6 11 797,analysis/python/cases/ch07_servitudes_copro.py,analysis/python/tests/test_ch07.py::TestCopropriete::test_repartition,Σ contributions = budget ; valeurs citées,idem,verifie,2026-10-31122CALC-07-07,7,Contribution minimale au fonds d'auto assurance (r. 4.1 art. 2) : moitié de la franchise 10 000 → 5 000,analysis/python/cases/ch07_servitudes_copro.py,analysis/python/tests/test_ch07.py::TestCopropriete::test_auto_assurance,5000 ; 3000 ; 0,idem,verifie,2026-10-31123CALC-07-08,7,Dépenses prévues 25 ans : 479 000 $ (2026) ; 651 959 $ courants ; fenêtres an 14 = 197 816 ; toiture an 7 = 89 151,analysis/python/cases/ch07_servitudes_copro.py,analysis/python/tests/test_ch07.py::TestFondsPrevoyance::test_depenses,idem,idem,verifie,2026-10-31124CALC-07-09,7,"Cotisation de seuil A* = 21 891 (plancher 0), min = 0 an 14, solde an 25 = 239 241, A_25 = 39 595 ; plancher 25 000 → 23 228 ; récurrence F_t vérifiée",analysis/python/cases/ch07_servitudes_copro.py,analysis/python/tests/test_ch07.py::TestFondsPrevoyance::test_cotisation_seuil,idem,idem,verifie,2026-10-31125CALC-07-10,7,"Scénarios : cotisation actuelle 12 000 → négatif an 13, min -233 300 an 22, fin -182 783 ; règle 0,5 % = 21 000 → min -16 660 an 14",analysis/python/cases/ch07_servitudes_copro.py,analysis/python/tests/test_ch07.py::TestFondsPrevoyance::test_scenarios,idem,idem,verifie,2026-10-31126CALC-07-11,7,"Toiture seule : 89 151 ; SFF(2 %,7) = 0,13451 ; versement 11 992 ; accumulation exacte",analysis/python/cases/ch07_servitudes_copro.py,analysis/python/tests/test_ch07.py::TestFondsPrevoyance::test_toiture_sff,idem,idem,verifie,2026-10-31127CALC-07-12,7,"Sensibilité A* (π 1,5-3,5 % × r 1-3 %) : 19 342 à 24 442 ; monotonie",analysis/python/cases/ch07_servitudes_copro.py,analysis/python/tests/test_ch07.py::TestFondsPrevoyance::test_sensibilite,idem,idem,verifie,2026-10-31128CALC-07-13,7,"Déficit de capitalisation : solde requis 235 908 − 85 000 = 150 908 ; ajustements F1 -14 110, F4 -21 248, F6 -24 809",analysis/python/cases/ch07_servitudes_copro.py,analysis/python/tests/test_ch07.py::TestFondsPrevoyance::test_incidence_valeur,idem,idem,verifie,2026-10-31129CALC-07-14,7,Solutions des exercices 7.1 à 7.7 (82 $ ; quotes-parts ; paires n=6 ; bande 13 860 ; toiture ; script 21 409/23 228/17 304/25 625 ; PV 11 929 ; indivision 322 000/297 500),solutions/ch07.tex,analysis/python/tests/test_ch07.py::TestExercices,idem,idem,verifie,2026-10-31130CALC-08-001,8,Jeu synthétique Val-Fictif : 400 lots (H1 200 dont 36 rezonés ; H2 60 ; H3 60 ; C 60 ; P 20) ; 482 ventes dont 305 en H1 et 29 traitées,analysis/python/cases/ch08_zonage.py,analysis/python/tests/test_ch08.py::TestDonneesSynthetiques::test_structure,400 ; 36 ; 482 ; 305 ; 29,400 ; 36 ; 482 ; 305 ; 29,verifie,2026-10-31131CALC-08-002,8,"Ventes appariées (29 paires, témoin ajusté temps/superficies/âge) : différence moyenne, médiane, écart-type, erreur-type",analysis/python/cases/ch08_zonage.py,analysis/python/tests/test_ch08.py::TestPaires::test_resume_cite,32 285 $ ; 19 944 $ ; 51 335 $ ; 9 533 $,32 285 $ ; 19 944 $ ; 51 335 $ ; 9 533 $,verifie,2026-10-31132CALC-08-003,8,"Ventes appariées en % du témoin ajusté : moyenne, médiane, IC95, < 40 ans (n=16), ≥ 40 ans (n=13) ; prime moyenne injectée",analysis/python/cases/ch08_zonage.py,analysis/python/tests/test_ch08.py::TestPaires::test_resume_cite,"9,29 % ; 6,28 % ; [4,32 ; 14,26] ; 4,85 % ; 14,75 % ; 6,15 %","9,29 % ; 6,28 % ; [4,32 ; 14,26] ; 4,85 % ; 14,75 % ; 6,15 %",verifie,2026-10-31133CALC-08-004,8,"Doubles différences H1 (n=305 ; cases 134/112/30/29) : δ 2×2 et δ régression (e.-t.), en log et en %",analysis/python/cases/ch08_zonage.py,analysis/python/tests/test_ch08.py::TestDiD::test_valeurs_citees,"0,1061 → 11,19 % ; 0,0657 (0,0208) → 6,79 % ; σ 0,0709","0,1061 → 11,19 % ; 0,0657 (0,0208) → 6,79 % ; σ 0,0709",verifie,2026-10-31134CALC-08-005,8,Lecture de la grille H2 : lot 600 m² conforme (min 450) ; logements = min(4 ; ⌊600/150⌋) = 4 ; plancher = 0,60 × 600 = 360 m²,analysis/python/cases/ch08_zonage.py,analysis/python/tests/test_ch08.py::TestOutils::test_grille,4 ; 360,4 ; 360,verifie135CALC-08-006,8,"Valeur résiduelle quadruplex : GDV 2 088 000 ; directs 1 044 000 ; indirects 125 280 ; démolition 30 000 ; marge 313 200 ; financement 62 640 ; reste 512 880 ; parcs 46 625 ; V_L 466 255 ; prime 86 255 (22,7 %)",analysis/python/cases/ch08_zonage.py,analysis/python/tests/test_ch08.py::TestOutils::test_redeveloppement,"466 254,55 ; 86 254,55","466 254,55 ; 86 254,55",verifie,2026-10-31136CALC-08-007,8,"Grille p × T de la prime espérée (r = 8 %) et exemple p = 0,75, T = 2, coût 8 000 $ → V = 427 462 $",analysis/python/cases/ch08_zonage.py,analysis/python/tests/test_ch08.py::TestOutils::test_grille_attendue,55 462 ; 82 998 ; 17 118 ; 427 462,55 462 ; 82 998 ; 17 118 ; 427 462,verifie,2026-10-31137CALC-08-008,8,"Droits acquis : RNE duplex 22 620 ; RNE maison 19 320 ; ΔRNE 3 300 ; V_Δ = 3 300/(0,055+λ) pour λ ∈ {0 ; 1 ; 2 ; 5 %} ; horizon 25 ans ; V_conf + V_Δ (λ = 2 %) = 474 000",analysis/python/cases/ch08_zonage.py,analysis/python/tests/test_ch08.py::TestOutils::test_droits_acquis,60 000 ; 50 769 ; 44 000 ; 31 429 ; 44 830 ; 40 772 ; 37 252 ; 29 152 ; 474 000,60 000 ; 50 769 ; 44 000 ; 31 429 ; 44 830 ; 40 772 ; 37 252 ; 29 152 ; 474 000,verifie,2026-10-31138CALC-08-009,8,"Contribution pour fins de parcs (site 2 400 m², 960 000 $) : 240 m² ou 96 000 $ ; zone agricole : V_agr 75 000, V_aut 157 500, V attendue 90 796",analysis/python/cases/ch08_zonage.py,analysis/python/tests/test_ch08.py::TestOutils::test_parcs_et_agricole,240 ; 96 000 ; 90 796,240 ; 96 000 ; 90 796,verifie,2026-10-31139CALC-08-010,8,"Exercices 8.1 à 8.7 (solutions/ch08.tex) : 3 logements/324 m² ; 310 m²/125 000 $ ; ΔRNE 6 060, 101 000, 67 333, 56 203 ; δ 0,05 → 5,13 % ; 125 837 / 145 675 ; V_L 308 255 / 267 345, prime 28 255 ; dV/dλ, 42 857",analysis/python/cases/ch08_zonage.py,analysis/python/tests/test_ch08.py::TestExercices,voir solutions,identiques,verifie,2026-10-31140CALC-05-001,5,Gradient exponentiel du modèle monocentrique simulé gamma = t/(beta y) et demi-distance,analysis/python/cases/ch05_rente.py,analysis/python/tests/test_ch05.py::TestMonocentrique::test_gradient_et_frontiere,0.02917 /km ; 23.8 km,0.02917 /km ; 23.8 km,verifie,2026-10-31141CALC-05-002,5,Frontière urbaine d_bar (r = ra) et identité r(d_bar) = ra,analysis/python/cases/ch05_rente.py,analysis/python/tests/test_ch05.py::TestMonocentrique::test_gradient_et_frontiere,32.29 km ; p(d_bar) = 85.97,32.29 km ; 85.97,verifie,2026-10-31142CALC-05-003,5,Condition de Muth p'(d) q(d) = -t vérifiée numériquement sur la solution fermée,analysis/python/cases/ch05_rente.py,analysis/python/tests/test_ch05.py::TestMonocentrique::test_condition_de_muth_numerique,-700 à 1e-6 rel.,-700,verifie,2026-10-31143CALC-05-004,5,"Prix exact vs exponentiel à 10 et 25 km, q(0)/q(10)/q(d_bar), rente et densité à 10 km (tab. 5.2)",analysis/python/cases/ch05_rente.py,analysis/python/tests/test_ch05.py::TestMonocentrique::test_valeurs_tableau,191.61/194.22 (+1.4 %) ; 114.18/125.40 (+9.8 %) ; 92.3/114.3/200.3 m² ; 28.92 ; 0.396,idem,verifie,2026-10-31144CALC-05-005,5,"Frontières entre usages d'Alonso (commerces/dense, dense/pavillonnaire, pavillonnaire/agricole)",analysis/python/cases/ch05_rente.py,analysis/python/tests/test_ch05.py::TestMonocentrique::test_alonso,9.47 ; 14.29 ; 32.22 km,9.47 ; 14.29 ; 32.22 km,verifie,2026-10-31145CALC-05-006,5,Cas 1 : effectifs et médianes par tranche de distance (tab. 5.3),analysis/python/cases/ch05_rente.py,analysis/python/tests/test_ch05.py::TestCas1::test_tranches,n = 116/67/37/97/100/64/30/89 ; 3600 et 2684 $/m² ; terrain 1184 m²,idem,verifie,2026-10-31146CALC-05-007,5,"Cas 1 : gradients brut (-1.020 %/km), contrôlé (-1.083), aire urbaine ≤16 km (+0.266), quadratique (0.900 ; -0.0697 ; sommet 6.5 km ; -0.493 à 10 km ; -1.89 à 20 km)",analysis/python/cases/ch05_rente.py,analysis/python/tests/test_ch05.py::TestCas1::test_gradients,voir description,idem,verifie,2026-10-31147CALC-05-008,5,"Cas 1 : coefficient dist_centre du modèle de référence (-0.357 %/km, e.-t. 0.265, t = -1.35), effets de secteur, gradients implicites entre médianes, 1 km = 5 969 $",analysis/python/cases/ch05_rente.py ; traite.cas1.hedonique,analysis/python/tests/test_ch05.py::TestCas1::test_modele_reference,-0.357 ; -2.2/+8.9/-22.1/-23.1 % ; -0.345 et -0.973 %/km ; 5969 $ ; 29050 $,idem,verifie,2026-10-31148CALC-05-009,5,"Cas 4 : valeur par logement, RNE par logement et taux pondéré par RMR ; identité écart = contrib RNE + contrib taux (tab. 5.5)",analysis/python/cases/ch05_rente.py ; traite.cas4.sommaire,analysis/python/tests/test_ch05.py::TestCas4::test_decomposition,Montréal 206237 … Saguenay 101969 ; Québec -0.248/-0.249 ; Gatineau +0.077/-0.190,idem,verifie,2026-10-31149CALC-05-010,5,"Valeur résiduelle du terrain du cas 1 (C_N 397 567,33 ; dépréciation 30 % hypothétique ; V 551 029) et levier",analysis/python/cases/ch05_rente.py,analysis/python/tests/test_ch05.py::TestResidu::test_valeur_residuelle,272 732 $ (49.5 %) ; levier 2.02 ; -5 % → -10.1 % ; -10 % → -20.2 %,idem,verifie,2026-10-31150CALC-05-011,5,Décomposition de Capozza–Helsley à 10 km (simulation),analysis/python/cases/ch05_rente.py,analysis/python/tests/test_ch05.py::TestResidu::test_capozza,40 + 25 + 538.4 + 60 = 663.4 $/m² (81 %),663.4,verifie,2026-10-31151CALC-05-012,5,Capitalisation d'un écart de taxe : exact -dT/(i+tau1) vs approché -dT/i ; 10 pb et 22.4 pb sur 500 000 $ à i = 5 %,analysis/python/cases/ch05_rente.py,analysis/python/tests/test_ch05.py::TestTaxe::test_formule_exacte_et_approchee,-8621 (-1.72 %) vs -10000 ; -18906 (-3.78 %) vs -22400 ; ratio 1.16,idem,verifie,2026-10-31152CALC-05-013,5,"Taux 2026 : écart Québec–Gatineau 22.4 pb ; taux effectifs 0.5122 (Gatineau, F 1.02) et 0.6785 (Québec, F hypothétique 1.10) ; sujet cas 1 : 2 445 $ + 370 $ ; écart 6+ Québec : 466 $/an, 8 473 $ ; part de la taxe dans le coût d'usage 14 %",analysis/python/cases/ch05_rente.py,analysis/python/tests/test_ch05.py::TestTaxe::test_taux_2026,voir description,idem,verifie,2026-10-31153CALC-05-014,5,Grille de sensibilité écart de taux × taux de capitalisation (tab. 5.7),analysis/python/cases/ch05_rente.py,analysis/python/tests/test_ch05.py::TestTaxe::test_grille,-5000 … -125000 ; ratio 4 %/7 % = 1.75,idem,verifie,2026-10-31154CALC-05-015,5,Exercices 5.1 à 5.7 (solutions/ch05.tex),analysis/python/cases/ch05_rente.py,analysis/python/tests/test_ch05.py::TestExercices,voir solutions,idem,verifie,2026-10-31155CALC-06-001,6,Table de mortalité synthétique Gompertz–Makeham (A=0.0004 B=0.000025 c=1.102 ; ω=111) : espérances de vie et survies,analysis/python/cases/ch06_demembrements.py,analysis/python/tests/test_ch06.py::TestMortalite,e_55 25.9 ; e_65 17.9 ; e_75 11.1 ; e_85 6.2 ; 10p65 0.789 ; 20p65 0.424,idem,verifie,2026-10-31156CALC-06-002,6,Valeur de la pleine propriété du cas 1 (traite.cas1 prédiction hédonique) arrondie et valeur locative nette L=(r−g)V,analysis/python/cases/ch06_demembrements.py,analysis/python/tests/test_ch06.py::TestUsufruit::test_valeur_cas1_et_loyer,637 952.85 → 638 000 ; L = 22 330 $/an (1 861 $/mois),idem,verifie,2026-10-31157CALC-06-003,6,Usufruit à terme fixe 10/20/30 ans (U ; NP ; NP/V) et identité NP = V((1+g)/(1+r))^n,analysis/python/cases/ch06_demembrements.py,analysis/python/tests/test_ch06.py::TestUsufruit::test_terme_fixe,183 443/454 557 (71.2 %) ; 314 141/323 859 (50.8 %) ; 407 260/230 740 (36.2 %),idem,verifie,2026-10-31158CALC-06-004,6,Usufruit viager 55/65/75/85 ans : U ; NP ; NP/V ; annuité viagère ; rente équivalente (art. 1171) ; identité U + NP_direct = V,analysis/python/cases/ch06_demembrements.py,analysis/python/tests/test_ch06.py::TestUsufruit::test_viager,65 ans : 280 357 / 357 643 (56.1 %) ; 12.555 ; 25 335 $/an ; 55 : 43.6 % ; 75 : 69.0 % ; 85 : 80.6 %,idem,verifie,2026-10-31159CALC-06-005,6,Approximation par la durée espérée (n_eff = e_x + 1/2) à 65 ans et inégalité de Jensen (NP viager ≥ NP approx) sur 50–95 ans × 3 taux,analysis/python/cases/ch06_demembrements.py,analysis/python/tests/test_ch06.py::TestUsufruit::test_approximation_terme_fixe_sous_estime_np,n_eff 18.36 ; NP 53.7 % ; écart 15 271 $,idem,verifie,2026-10-31160CALC-06-006,6,Grille NP/V âge (55–85) × taux (4/5/6 %) et monotonie,analysis/python/cases/ch06_demembrements.py,analysis/python/tests/test_ch06.py::TestUsufruit::test_grille_sensibilite,65 ans : 65.4 / 56.1 / 48.4 % ; écart 2 pts de taux ≈ 108 000 $,idem,verifie,2026-10-31161CALC-06-007,6,Emphytéose de référence (RNE_1 cas 3 = 89 955.75 ; r 7 % ; g 2.5 % ; rente 30 000 ; n = 35) : V pleine ; V emph ; rentes ; reprise ; somme,analysis/python/cases/ch06_demembrements.py,analysis/python/tests/test_ch06.py::TestEmphyteose::test_reference,1 999 017 ; 1 166 242 (58.3 %) ; 388 430 ; 444 344 ; 832 774 ; somme = V,idem,verifie,2026-10-31162CALC-06-008,6,Grille emphytéose selon la durée restante (60 → 5 ans) et identité somme = V pour n = 1…100,analysis/python/cases/ch06_demembrements.py,analysis/python/tests/test_ch06.py::TestEmphyteose,60 ans : 71.3 % ; 20 ans : 41.8 % ; 5 ans : 13.2 %,idem,verifie,2026-10-31163CALC-06-009,6,Emphytéose avec taux du propriétaire 5.5 % : V prop et excédent de la somme sur V,analysis/python/cases/ch06_demembrements.py,analysis/python/tests/test_ch06.py::TestEmphyteose::test_taux_distincts,1 190 025 ; somme 2 356 268 ; +357 251,idem,verifie,2026-10-31164CALC-06-010,6,Part indivise 50 % du cas 1 avec décote 0/10/20 %,analysis/python/cases/ch06_demembrements.py,analysis/python/tests/test_ch06.py::TestAutres::test_indivision,319 000 ; 287 100 ; 255 200,idem,verifie,2026-10-31165CALC-06-011,6,Servitude de non-construction 120 m² / 620 m² par l'élasticité prix-terrain du modèle hédonique cas 1 (0.0937),analysis/python/cases/ch06_demembrements.py,analysis/python/tests/test_ch06.py::TestAutres::test_servitude,ΔV 12 725 $ (2.0 %),idem,verifie,2026-10-31166CALC-06-012,6,Rang hypothécaire : produit net 560 000 ; créances 455 000 / 90 000 / 40 000,analysis/python/cases/ch06_demembrements.py,analysis/python/tests/test_ch06.py::TestAutres::test_rang,3e rang recouvre 15 000 (37.5 %),idem,verifie,2026-10-31167CALC-06-013,6,Droits de mutation 2026 (tranches 62 900 / 315 000 ; 0.5/1/1.5 %) sur 638 000 $ et sur 750 000 $ avec taux municipal 2 % > 500 000 $,analysis/python/cases/ch06_demembrements.py,analysis/python/tests/test_ch06.py::TestAutres::test_mutation,314.50 + 2 521.00 + 4 845.00 = 7 680.50 (1.204 %) ; 9 360.50 + 1 250.00 = 10 610.50,idem,verifie,2026-10-31168CALC-06-014,6,Quantum d'un vice caché (prix 520 000 ; réparations 46 000 ; plus-value 9 000 ; autres 6 500) et budget registre 5 comparables,analysis/python/cases/ch06_demembrements.py,analysis/python/tests/test_ch06.py::TestAutres::test_vice_et_registre,37 000 (7.1 %) ; 43 500 si vendeur connaissait ; 15 $,idem,verifie,2026-10-31169CALC-06-015,6,Exercices 6.1 à 6.7 (solutions/ch06.tex),analysis/python/cases/ch06_demembrements.py,analysis/python/tests/test_ch06.py::TestExercices,voir solutions/ch06.tex,idem,verifie,2026-10-31170CALC-04-001,4,Recensement 2021 Québec : ménages 3 749 035 ; propriétaires 2 245 600 (59,9 %) ; locataires 1 497 005 ; Canada 66,5 %,analysis/python/cases/ch04_marches.py,analysis/python/tests/test_ch04.py::TestRecensement::test_totaux,3749035 ; 0.599 ; 0.665,3749035 ; 0.5990 ; 0.6646171CALC-04-002,4,Parts par type (Québec) : maison individuelle 44,6 % ; app. < 5 étages 33,2 % ; duplex 7,2 % ; app. ≥ 5 étages 6,0 % ; jumelée 5,3 % ; rangée 2,6 % ; Canada 52172CALC-04-003,4,Taux de propriété par type (Québec) : maison 92,2 % ; duplex 42,9 % ; app. < 5 étages 21,0 % ; app. ≥ 5 étages 28,7 % ; solde des modes = 6 430 logements fournis,analysis/python/cases/ch04_marches.py,analysis/python/tests/test_ch04.py::TestRecensement::test_taux_propriete_par_type173CALC-04-004,4,Indice de dissimilarité Québec/Canada sur 8 types (eq. 4.2) ; duplex + app. < 5 étages = 1 512 395 ménages (40,3 %),analysis/python/cases/ch04_marches.py,analysis/python/tests/test_ch04.py::TestRecensement::test_dissimilarite,0.1715 ; 1512395 ; 0.403,0.1715 ; 1512395 ; 0.4034,verifie174CALC-04-005,4,Ménages locataires par RMR 2021 (98-10-0231-01) : Montréal 837 470/1 835 705 = 45,6 % ; Québec 161 800/387 955 = 41,7 % ; Ottawa-Gatineau (ensemble) 34,6 % ; province 39,9 % ; Canada 33,1 %,analysis/python/cases/ch04_marches.py175CALC-04-006,4,Population RMR 2025 (17-10-0148-01) et TCAC 2020-2025 (eq. 4.3) : Montréal 1,08 % ; Québec 1,46 % ; Gatineau 1,18 % ; Sherbrooke 1,55 % ; Trois-Rivières 1,56 % ; Saguenay 0,96 % ; var. 2024-2025 Montréal 0176CALC-04-007,4,"IPLN sept. 2026 (18-10-0205-01) : Montréal 159,5 (+1,2 % a/a ; +59,5 % depuis déc. 2016 ; +35,6 % janv. 2020–déc. 2022 ; +76,1 % janv. 2000–déc. 2016) ; Québec 144,2 (+1,9 % ; +25,0 % 2020-22) ; Gatineau 116,6 (+0,3 % ; +9,2 %) ; Sherbrooke 112,1 (+7,3 %) ; Trois-Rivières 119,4 ; province 150,0 (+30,2 %) ; Canada 120,2 (−2,0 % ; sommet août 2022 126,1 ; −4,7 %) ; composantes Montréal maison 169,9 / terrain 132,6, province 158,3 / 128,0",analysis/python/cases/ch04_marches.py,analysis/python/tests/test_ch04.py::TestIPLN,voir description,identiques (lecture du CSV brut),verifie,2026-10-31177CALC-04-008,4,"SCHL ELL oct. 2025 : inoccupation (tous) Montréal 2,9 (2,1) ; Québec 2,4 (0,9) ; Gatineau 3,8 (1,9) ; Sherbrooke 2,7 (1,4) ; Trois-Rivières 2,7 (0,9) ; Saguenay 1,3 (1,6) ; loyer 2 ch. 1 346 / 1 277 / 1 460 / 1 062 / 1 016 / 985 ; univers 667 266 / 118 693 / 33 553 / 41 949 / 22 505 / 16 241",analysis/python/cases/ch04_marches.py,analysis/python/tests/test_ch04.py::TestSCHL::test_valeurs_citees,voir description,identiques (lecture du xlsx brut),verifie,2026-10-31178CALC-04-009,4,Variation brute vs « même échantillon » (eq. 4.5-4.6) : Montréal 2 ch. 1176→1346 = +14,5 % brute vs +7,2 % estimative ; Sherbrooke +6,0 % brute vs +9,8 % estimative ; tous logements Gatineau +4,5 %,Saguenay +12179CALC-04-010,4,Mois d'inventaire T3 2026 (eq. 4.7) = inscriptions/(ventes/3) : province 6,1 ; Montréal 6,6 ; Québec 3,1 ; Gatineau 6,5 ; Sherbrooke 4,4 ; Trois-Rivières 3,6 ; Saguenay 4180CALC-04-011,4,"Rapports de prix et MRB implicite (eq. 4.8) : plex/unifamiliale Montréal 1,33, Québec 1,29 ; copro/unifamiliale 0,67, 0,72 ; MRB plex 3 log. au loyer 2 ch. : Montréal 17,8 ; Québec 13,1 ; Gatineau 11,8 ; Sherbrooke 14,2 ; Trois-Rivières 11,5 ; Saguenay 10,5",analysis/python/cases/ch04_marches.py,analysis/python/tests/test_ch04.py::TestAPCIQ::test_rapports_et_mrb,voir description,1.333 ; 1.294 ; 0.674 ; 0.723 ; 17.76 ; 13.05 ; 11.75 ; 14.24 ; 11.48 ; 10.53,verifie,2026-10-31181CALC-04-012,4,"Banque du Canada (Valet) : taux directeur 2,50 % (2026-10-29) ; min 0,25 % (2009-04-21) ; 0,25 % en mars 2022 → 5,00 % le 2023-07-13 (dix hausses) ; 2,25 % le 2025-10-30 ; hyp. 5 ans affiché 6,19 % (2026-10-28), max 8,75 % (2000-05-24), min 4,64 % (2015-04-08) ; obligations 5 ans 3,58 %, 10 ans 3,84 % (2026-10-29)",analysis/python/cases/ch04_marches.py,analysis/python/tests/test_ch04.py::TestBanqueDuCanada,voir description,identiques (lecture des CSV Valet),verifie,2026-10-31182CALC-04-013,4,"Droits de mutation 2026 (eq. 4.9) : 500 000 $ → 5 610,50 $ (1,12 %) tous barèmes ; 645 500 $ : province 7 793, Montréal 8 259, Gatineau 9 975,50, Québec 9 248 ; 860 500 $ : 11 018 / 12 559 / 16 425,50 / 15 175,50 ; 1,5 M$ : 20 610,50 / 27 325,50 / 35 610,50 / 34 360,50 ; continuité aux bornes et monotonie du taux effectif (prop. 4.1)",analysis/python/cases/ch04_marches.py,analysis/python/tests/test_ch04.py::TestMutations,voir description,identiques,verifie,2026-10-31183CALC-04-014,4,"Prix soutenable (eq. 4.10-4.11) : prêt 400 000 $ à 4,12 % sur 25 ans → 2 130,18 $/mois ; à paiement constant : 3,00 % → 562 653 $ (+12,5 %) ; 6,19 % → 408 931 $ (−18,2 %) ; 7,00 % → 380 164 $ (−24,0 %) ; semi-élasticité −10,7 %/pt (3→3,5 %) vs −9,0 %/pt (6,19→7 %) ; élasticité −0,33 (3 %) vs −0,56 (6 %)",analysis/python/cases/ch04_marches.py,analysis/python/tests/test_ch04.py::TestTauxEtPrix;TestExercices::test_ex6,voir description,2130.18 ; 562652.61 ; 408930.96 ; 380163.94 ; −0.1071 ; −0.0901 ; −0.325 ; −0.557,verifie,2026-10-31184CALC-04-015,4,"Exercices 4.1-4.6 : 54,8 % / 33,3 % (QC) vs 46,2 % / 39,5 % (CA) ; 4,35 / 3,60 / 5,65 mois ; 1 105,71 $, +10,57 % vs +6 % ; Gatineau 9 210,50 $ (1,49 %) et 8 664,50 $ sur base 601 800 $ (1,55 % du prix) ; TCAC 1,46 %, 1 044 650 (2035), ISQ 0,57 %/an ; 540 666 $ et 458 582 $",analysis/python/cases/ch04_marches.py (exercices),analysis/python/tests/test_ch04.py::TestExercices,voir description,identiques,verifie,2026-10-31185CALC-04-016,4,"Mises en chantier Québec (34-10-0135-01, sommes annuelles) : 2000 24 695 ; 2005 50 910 ; 2021 67 810 ; 2023 38 912 ; 2025 59 864 ; individuelles 15 349 (62 %) → 8 477 (14 %) ; part appartements 29,1 % → 79,6 % ; moyennes 2000-2019 44 205 et 2020-2025 54 412",analysis/python/cases/ch04_marches.py,analysis/python/tests/test_ch04.py::TestMisesEnChantier,voir description,identiques (lecture du CSV brut),verifie,2026-10-31186CALC-3-01,3,"Paramètres dérivés du marché type (b, a, P0, C0, c1)",analysis/python/cases/ch03_cycles.py,analysis/python/tests/test_ch03.py::TestQuatreQuadrants::test_parametres_derives,"b 3,4722 ; a 150 000 ; P0 288 000 ; C0 1 000 ; c1 48","b 3,4722 ; a 150 000 ; P0 288 000 ; C0 1 000 ; c1 48",verifie,2026-10-31187CALC-3-02,3,"Équilibre stationnaire en forme fermée S* = (a − b i c0)/(1 + b i c1 δ) = itération de point fixe ; identités P = R/i, C = δS, C = (P − c0)/c1",analysis/python/cases/ch03_cycles.py,analysis/python/tests/test_ch03.py::TestQuatreQuadrants::test_equilibre_ferme_egal_iteratif,S* 100 000 ; R* 14 400 ; P* 288 000 ; C* 1 000,idem (rel. 1e-6),verifie,2026-10-31188CALC-3-03,3,"Baisse du taux de capitalisation 5 % → 4 % : court terme P 360 000 ; long terme S 109 375, R 11 700, P 292 500, C 1 093,75",analysis/python/cases/ch03_cycles.py,analysis/python/tests/test_ch03.py::TestQuatreQuadrants::test_baisse_du_taux,"360 000 ; 109 375 ; 11 700 ; 292 500 ; 1 093,75","idem (abs 0,5)",verifie,2026-10-31189CALC-3-04,3,"Statique comparative (tableau 3.1) : demande +10 % (R ct 18 720, S lt 113 846, R lt 14 732, +30 % / +2,31 %) ; coût +10 % (S 96 154, P +7,69 %) ; taux (P lt +1,56 %, R lt −18,75 %)",analysis/python/cases/ch03_cycles.py,analysis/python/tests/test_ch03.py::TestQuatreQuadrants::test_statique_comparative,voir description,"idem (abs 0,5 ; 0,05 pt)",verifie,2026-10-31190CALC-3-05,3,"Élasticités au point initial : construction/prix 6,0 ; κ = 1/(b i c1) = 0,12 ; stock stationnaire/demande 1,385",analysis/python/cases/ch03_cycles.py,analysis/python/tests/test_ch03.py::TestQuatreQuadrants::test_elasticites,"6,0 ; 0,12 ; 1,385","6,00 ; 0,1200 ; 1,385",verifie,2026-10-31191CALC-3-06,3,"Simulation dynamique : état initial stationnaire (sans choc S, R constants, v = v*) ; c0 recalibré 276 000 ; κ 0,48",analysis/python/cases/ch03_cycles.py,analysis/python/tests/test_ch03.py::TestDynamique::test_etat_initial_stationnaire,"constant ; 276 000 ; 0,48",idem,verifie,2026-10-31192CALC-3-07,3,"État stationnaire après choc (+6 %) : S 108 902, R 14 453 (1 204 $/mois), C 1 089/an ; convergence de la simulation à T = 600",analysis/python/cases/ch03_cycles.py,analysis/python/tests/test_ch03.py::TestDynamique::test_stationnaire_apres_choc,108 902 ; 14 453 ; convergence rel. 2e-3,idem,verifie,2026-10-31193CALC-3-08,3,"Mesures du cycle de référence (L = 6, κ = 0,48, λ = 0,75) : pointe loyer +15,0 % à t = 13, creux −7,0 % à t = 35, v min 1,17 %, v max 5,0 %, chantiers max 4 711/an, période 47 trim., amortissement 0,17",analysis/python/cases/ch03_cycles.py,analysis/python/tests/test_ch03.py::TestDynamique::test_mesures_du_cycle_cite,voir description,"idem (abs 0,1 pt)",verifie,2026-10-31194CALC-3-09,3,"Sensibilité (tableau 3.3) : L = 12 creux −18,1 % ; L = 2 creux −1,2 % ; κ = 0,12 pas de second cycle ; période croissante avec L",analysis/python/cases/ch03_cycles.py,analysis/python/tests/test_ch03.py::TestDynamique::test_sensibilite,voir description,idem,verifie,2026-10-31195CALC-3-10,3,"Condition d'oscillation L = 1 : seuil (1−δ)²/4 = 0,2450 ; κ = 0,12 réel (module 0,849) ; κ = 0,48 complexe, module 0,693, période 8,1 ans ; κ = 1,2 instable ; L = 3 à κ = 0,48 instable (module 1,014) ; forme fermée = racines numpy",analysis/python/cases/ch03_cycles.py,analysis/python/tests/test_ch03.py::TestDynamique::test_condition_oscillation,voir description,idem (rel. 1e-9),verifie,2026-10-31196CALC-3-11,3,"Mises en chantier Québec (34-10-0135-01) : sommes annuelles 1990 48 070 ; 2000 24 695 ; 2005 50 910 ; 2015 37 926 ; 2020 54 066 ; 2021 67 810 ; 2022 57 107 ; 2023 38 912 ; 2024 48 713 ; 2025 59 864 ; 2026 (3 trim.) 42 159 ; −42,6 % 2021→2023 ; +53,8 % 2023→2025 ; tableau 3.4 par type",analysis/python/cases/ch03_cycles.py,analysis/python/tests/test_ch03.py::TestDonneesReelles::test_mises_en_chantier_quebec,voir description,idem (exact),verifie,2026-10-31197CALC-3-12,3,34-10-0143-01 : RMR de Montréal 2024 = 17 570 (12 mois) ; 2025 = 21 138 sur 9 mois seulement (juillet-septembre absents) ; Québec centres 10 000+ 2025 = 54 220 (12 mois),analysis/python/cases/ch03_cycles.py,analysis/python/tests/test_ch03.py::TestDonneesReelles::test_montreal_incomplet,17 570 ; 21 138 (9 mois) ; 54 220,idem,verifie,2026-10-31198CALC-3-13,3,"Taux directeur (V39079) : 23 changements depuis 2020 ; +475 pb du 2022-03-03 au 2023-07-13 (10 hausses) ; −275 pb du 2024-06-06 au 2025-10-30 (9 baisses) ; 2,50 % le 2026-10-29",analysis/python/cases/ch03_cycles.py,analysis/python/tests/test_ch03.py::TestDonneesReelles::test_taux_directeur,voir description,idem,verifie,2026-10-31199CALC-3-14,3,"Taux effectifs A4 août 2026 : assuré fixe ≥ 5 ans 4,12 % (V122667780) ; non assuré 4,58 % (V122667786)",analysis/python/cases/ch03_cycles.py,analysis/python/tests/test_ch03.py::TestDonneesReelles::test_taux_effectifs_a4,"4,12 ; 4,58",idem,verifie,2026-10-31200CALC-3-15,3,"IPC Québec sept. 2026 167,7 (+3,14 % a/a) ; loyer 174,2 (+3,3 %) ; IPLN Québec 150,0 (+1,28 %)",analysis/python/cases/ch03_cycles.py,analysis/python/tests/test_ch03.py::TestDonneesReelles::test_ipc_ipln,voir description,idem,verifie,2026-10-31201CALC-3-16,3,"Série coût d'usage 2001-01 → 2026-09 (tableau 3.6 : taux hyp. 7,79/7,49/5,29/4,94/7,04/6,09 ; inflation 2,76/2,02/2,84/0,30/4,16/3,14 ; P/R IPC 12,0/11,4/17,3/12,6/16,1/15,9) ; identité P/R × u = 1 ; u_IPLN < 1,5 % en 2021-2022",analysis/python/cases/ch03_cycles.py,analysis/python/tests/test_ch03.py::TestDonneesReelles::test_serie_cout_usage,voir description,"idem (0,01)",verifie,2026-10-31202CALC-3-17,3,"Exemple intégral (463 500 $) : u affiché/IPC 6,415 % → 29 735 $/an, 2 478 $/mois, P/R 15,6 ; u effectif/IPC 4,805 % → 22 273 $/an, 1 856 $/mois, P/R 20,8 ; effectif/IPLN 6,605 % → 2 551 $/mois, P/R 15,1 ; +100 pb → P/R 17,2 (−17,2 %) ; semi-élasticité −20,8 ; prix implicite d'un loyer de 1 475 $ : 368 336 $ ; τ = 0,82539 %",analysis/python/cases/ch03_cycles.py,analysis/python/tests/test_ch03.py::TestCoutUsageExemple::test_exemple_cite,voir description,"idem (abs 0,5 $ ; 5e-5)",verifie,2026-10-31203CALC-3-18,3,"Grille de sensibilité P/R (tableau 3.7) : 1/(i + 0,00825 + 0,025 − g) pour i ∈ {3,58 ; 4,58 ; 5,58 ; 6,19 ; 7,19} et g ∈ {1,3 ; 2,0 ; 3,1 ; 4,0}",analysis/python/cases/ch03_cycles.py (ratio_prix_loyer),analysis/python/tests/test_ch03.py::TestCoutUsageExemple::test_formules,"ex. 4,58/3,1 → 20,8 ; 6,19/3,1 → 15,6 ; 3,58/4,0 → 34,4",valeurs du tableau recalculées à la main depuis la formule testée,verifie,2026-10-31204CALC-3-19,3,"Mois d'inventaire T3 2026 (APCIQ) : province 6,1 ; Montréal 6,6 ; Québec 3,1 ; Gatineau 6,5 ; Sherbrooke 4,3 ; Trois-Rivières 3,6 ; Saguenay 4,0",analysis/python/cases/ch03_cycles.py,analysis/python/tests/test_ch03.py::TestIndicateurs::test_mois_inventaire,voir description,"idem (0,005)",verifie,2026-10-31205CALC-3-20,3,"Solutions des exercices 1 à 7 (fonction exercices) : flux 1,597 % ; net 1,097 % ; 8,7 ans ; 11,97 M ; mois d'inventaire ; équilibres 4Q ; coût d'usage Montréal 2 625 $/mois, P/R 20,5 → 17,0 ; variantes de simulation ; seuils c1 5,76 et 23,5",analysis/python/cases/ch03_cycles.py,analysis/python/tests/test_ch03.py (fonctions sous-jacentes testées ; valeurs d'exercices imprimées par le script),voir solutions/ch03.tex,idem,verifie,2026-10-31206CALC-09-001,9,Ratios bruts rôle/prix des 600 ventes du cas 1 : médiane ; COD ; PRD ; PRB (e.-t.),analysis/python/cases/ch09_ratios.py,analysis/python/tests/test_ch09.py::TestEtude::test_valeurs_citees_brut,"0,9136 ; 6,90 ; 1,0015 ; 0,0327 (0,0114)","0,9136 ; 6,90 ; 1,0015 ; 0,0327 (0,0114)",verifie,2026-10-31207CALC-09-002,9,Taux de variation mensuel du marché (modèle hédonique partagé traite.cas1) et annuel,analysis/python/cases/ch09_ratios.py,analysis/python/tests/test_ch09.py::TestEtude::test_valeurs_citees_rajuste,"0,3642 % / mois ; 4,46 % / an","0,3642 % ; 4,46 %",verifie,2026-10-31208CALC-09-003,9,Ratios rajustés au 2024-07-01 : médiane ; COD ; PRD ; PRB (e.-t.) ; PRB de contrôle (log2 prix seul),analysis/python/cases/ch09_ratios.py,analysis/python/tests/test_ch09.py::TestEtude::test_valeurs_citees_rajuste,"0,9245 ; 6,12 ; 0,9988 ; 0,0640 (0,0099) ; 0,0196 (0,0106)",idem,verifie,2026-10-31209CALC-09-004,9,"Épuration r. 10 (médiane ± 2σ, σ sur n−1 autour de la médiane) : σ ; bornes ; ventes retirées ; proportion médiane ; facteur comparatif",analysis/python/cases/ch09_ratios.py,analysis/python/tests/test_ch09.py::TestEtude::test_epuration_et_facteur,"0,0708 ; [0,7830 ; 1,0661] ; 29 (13 basses, 16 hautes) ; 0,9244 ; 1,0818",idem,verifie,2026-10-31210CALC-09-005,9,"Statistiques après épuration (n = 571) : COD ; PRD ; PRB ; écart type relatif annexe III (brut, rajusté, épuré) ; plafond r. 13",analysis/python/cases/ch09_ratios.py,analysis/python/tests/test_ch09.py::TestEtude::test_epuration_et_facteur,"5,48 ; 0,9990 ; 0,0489 ; 0,0870 / 0,0766 / 0,0660 ; 0,14",idem,verifie,2026-10-31211CALC-09-006,9,"Médianes des ratios par secteur (0,920-0,931) ; par type (0,926 ; 0,922) ; par tranche de prix (0,919-0,933) ; par année brut/rajusté (2023 : 0,9538/0,9111 ; 2026 : 0,8692/0,9408)",analysis/python/cases/ch09_ratios.py,analysis/python/tests/test_ch09.py::TestEtude::test_sous_groupes,voir script,conforme,verifie,2026-10-31212CALC-09-007,9,"Liste de base r. 10 art. 5 : max(30 ; N/(15,5+0,001N)) pour N = 1 000 ; 10 000 ; 103 355 ; 514 614",analysis/python/cases/ch09_ratios.py,analysis/python/tests/test_ch09.py::TestIdentitesRatio::test_liste_de_base,61 ; 393 ; 870 ; 971,61 ; 393 ; 870 ; 971,verifie,2026-10-31213CALC-09-008,9,Taux de voisinage de l'annexe I du règlement 994-2025 (Gatineau 2026) : n ; min ; médiane ; moyenne ; max ($/1 000 $),analysis/python/cases/ch09_ratios.py,analysis/python/tests/test_ch09.py::TestEtude::test_taux_voisinage,"1 092 ; 1,613 ; 5,232 ; 5,377 ; 7,544",idem,verifie,2026-10-31214CALC-09-009,9,Sujet au 2024-07-01 : prédiction hédonique (Duan) et IC 95 % ; comparables ± 12 mois (5) médiane/moyenne ajustée ; valeur réelle retenue,analysis/python/cases/ch09_ratios.py,analysis/python/tests/test_ch09.py::TestDossiers::test_sujet,580 375 (491 138-681 251) ; 565 414 / 563 175 ; 573 000,idem,verifie,2026-10-31215CALC-09-010,9,"Grille des 5 comparables à la date de référence (G0264, G0334, G0404, G0388, G0188) : ajustements en cascade, prix ajustés 602 082 / 620 958 / 492 375 / 565 414 / 535 048 ; identité prix + Σ ajustements = prix ajusté",analysis/python/cases/ch09_ratios.py,analysis/python/tests/test_ch09.py::TestDossiers::test_sujet,voir tableau 9.8,conforme,verifie,2026-10-31216CALC-09-011,9,"Dossier du sujet : ratio personnel ; écart à la PM ; valeur à inscrire (art. 147 : V/F) ; variation ; compte de taxes 2026 (Hull, voisinage médian) ; variation annuelle ; frais",analysis/python/cases/ch09_ratios.py,analysis/python/tests/test_ch09.py::TestDossiers::test_sujet;TestTaxes::test_compte_sujet,"0,8168 ; −11,6 % ; 529 681 ; +61 681 ; 4 076,01 (municipal 3 517,02 à 7,515/1 000 ; uniformisée 506 275 ; scolaire 380,16 ; 178,83) ; +516,24/an ; 80 $ (TAQ 93,20 $)",idem,verifie,2026-10-31217CALC-09-012,9,"Dossier acheteur G0258 (2024-07-04, 509 500 $, rôle 592 100 $) : prix rajusté ; ratio ; valeur à inscrire ; réduction ; taxes 5 114,66 → 4 099,55 ; gain annuel ; gain triennal ; frais ; gain net ; seuil de rentabilité",analysis/python/cases/ch09_ratios.py,analysis/python/tests/test_ch09.py::TestDossiers::test_acheteur,"509 317 ; 1,1625 ; 470 813 ; 121 287 ; 1 015,11 ; 3 045,34 ; 325 ; 2 720,34 ; 12 944",idem,verifie,2026-10-31218CALC-09-013,9,"Sensibilité du gain net triennal (écart −10 % à +10 % × taux min/médian/max) : 9 lignes, toutes positives, décroissantes",analysis/python/cases/ch09_ratios.py,analysis/python/tests/test_ch09.py::TestDossiers::test_sensibilite,médiane : 3 902 → 1 538 ; min : 2 075 → 733 ; max : 5 070 → 2 053,idem,verifie,2026-10-31219CALC-09-014,9,"Droits de mutation 2026 sur 573 000 $ (général, Montréal, Gatineau) ; exemple facteur (prix 450 000, base 468 000 × 1,02 = 477 360)",analysis/python/cases/ch09_ratios.py,analysis/python/tests/test_ch09.py::TestDossiers::test_mutations;TestTaxes::test_droits_mutation,"6 705,50 ; 6 809,00 ; 7 800,50 ; 5 270,90 vs 4 860,50",idem,verifie,2026-10-31220CALC-09-015,9,"Écart attendu prix/valeur au rôle : F × (1+g)^m − 1 pour m = 0 ; 1,5 ; 4,5 ans (PM 0,9244, g 4,46 %)",analysis/python/cases/ch09_ratios.py (formule eq. 9.14),calcul direct (voir ch09.md),"8,2 % ; 15,5 % ; 31,6 %","8,2 % ; 15,5 % ; 31,6 %",verifie,2026-10-31221CALC-09-016,9,"Échéancier légal du rôle fictif 2026-2028 et du rôle 2027-2029 de Gatineau (art. 46, 70-71, 81, 130, 138.3-138.5)",analysis/python/cases/ch09_ratios.py,analysis/python/tests/test_ch09.py::TestDossiers::test_echeancier,2026-04-30 ; 2026-09-01 ; 2026-10-01 ; 2026-10-31 / 2027-04-30 …,idem,verifie,2026-10-31222CALC-09-017,9,"Exercices 1-5 et 7 (facteur 1,0870 ; compte 4 053,17 / 3 627,76 ; étude de 8 ratios médiane 0,9221, COD 2,50, PRD 1,0031, ETR 0,0311 ; mutations 6 735,50 / 6 849 / 7 860,50 / 9 582,50 ; liste de base ; simulation régressive PRD 1,0159, PRB −0,0681)",analysis/python/cases/ch09_ratios.py,analysis/python/tests/test_ch09.py::TestExercices,voir solutions/ch09.tex,conforme,verifie,2026-10-31223CALC-09-018,9,"Identités : COD/PRD/PRB nuls ou unitaires pour un rôle proportionnel ; PRD > 1 et PRB < 0 pour un rôle régressif (γ = 0,9) ; biais positif du PRB avec proxy IAAO quand l'erreur du rôle domine (simulation)",analysis/python/tests/test_ch09.py,analysis/python/tests/test_ch09.py::TestIdentitesRatio,vrai,vrai,verifie,2026-10-31224CALC-17-01,17,Mêmes cinq comparables et prix que le ch. 16,analysis/python/cases/ch17_ajustements.py,analysis/python/tests/test_ch17.py::test_memes_comparables_que_ch16,G0574 598000;G0404 506500;G0468 624500;G0477 538000;G0575 513500,idem,verifie,2026-10-31225CALC-17-02,17,Prix ajustés par la cascade hédonique (traite.cas1.ajustements_hedoniques),analysis/python/cases/ch17_ajustements.py,analysis/python/tests/test_ch17.py::test_prix_ajustes_et_statistiques,640247;541222;572793;568853;584862 ; moyenne 581595 ; médiane 572793,640247;541222;572793;568853;584862 ; 581595 ; 572793,verifie,2026-10-31226CALC-17-03,17,Ajustements bruts (%) et identité prix de vente + Σ ajustements = prix ajusté,analysis/python/cases/ch17_ajustements.py,analysis/python/tests/test_ch17.py::test_identite_somme_des_ajustements,"brut 19,8;10,9;17,6;22,4;26,8 ; identité exacte",idem (écart < 1e-6 $),verifie,2026-10-31227CALC-17-04,17,Identité P_aj_j = exp(x_s'β)·exp(e_j) ; moyenne exp(e)−1 des 5 comparables ; prédiction hédonique,analysis/python/cases/ch17_ajustements.py,analysis/python/tests/test_ch17.py::test_identite_prix_ajuste_egal_prediction_fois_residu,"point 635821 ; Duan 637953 ; moyenne exp(e)−1 = −8,53 % ; moyenne log −9,07 %",idem,verifie,2026-10-31228CALC-17-05,17,Cascade G0404 (ordre conventionnel et ordre inverse : même total),analysis/python/cases/ch17_ajustements.py,analysis/python/tests/test_ch17.py::test_cascade_g0404,"temps 28733 ; superficie 8953 ; terrain 7279 ; âge −10242 ; total 541222 ; ordre inverse : temps 29054, âge −9407, total 541222",idem,verifie,2026-10-31229CALC-17-06,17,Formes additive / multiplicative / mixte (écarts < 0,5 %),analysis/python/cases/ch17_ajustements.py,analysis/python/tests/test_ch17.py::test_formes_additive_multiplicative_mixte,"G0574 additif 641341 vs multiplicatif 640247 ; |écart| < 0,4 % (additif) et < 0,5 % (mixte)",idem,verifie230CALC-17-07,17,Ajustement de temps G0404 par cinq écritures,analysis/python/cases/ch17_ajustements.py,analysis/python/tests/test_ch17.py::test_ajustement_de_temps,"coefficient 28733 = taux composé 4,46 % = indices ; génération 4,43 % → 28558 ; linéaire 27998 ; g mensuel 0,364 %",idem,verifie,2026-10-31231CALC-17-08,17,Ventes appariées garage et sous-sol (critères : même secteur/type/qualité/piscine,superficie ±5 %,âge ±5 ans,dates ≤ 12 mois,alignement temporel),analysis/python/cases/ch17_ajustements.py,analysis/python/tests/test_ch17.py::test_paires232CALC-17-09,17,Halvorsen–Palmquist et Kennedy sur les indicatrices du modèle,analysis/python/cases/ch17_ajustements.py,analysis/python/tests/test_ch17.py::test_halvorsen_palmquist_kennedy,"garage 3,297 / 3,295 % ; Buckingham −25,04 → −22,15 / −22,35 %",idem,verifie,2026-10-31233CALC-17-10,17,Poids inverse du brut et réconciliation,analysis/python/cases/ch17_ajustements.py,analysis/python/tests/test_ch17.py::test_ponderation_et_reconciliation,"poids 0,179;0,327;0,202;0,159;0,133 ; valeur pondérée 575565 ; moyenne 581595 ; étendue 17,2 %",idem,verifie,2026-10-31234CALC-17-11,17,Analyse relative et encadrement,analysis/python/cases/ch17_ajustements.py,analysis/python/tests/test_ch17.py::test_analyse_qualitative,4 inférieurs + G0468 supérieur ; encadrement [598000 ; 624500],idem,verifie,2026-10-31235CALC-17-12,17,Sensibilité de la valeur pondérée (coefficients ±1,96 ET ; taux 3–6 % ; omissions),analysis/python/cases/ch17_ajustements.py,analysis/python/tests/test_ch17.py::test_sensibilite,omission temps 545208 ; omission qualité 597252 ; taux 3–6 % étendue 16734 ; superficie étendue < 1000 ; max étendue 30357,idem,verifie236CALC-17-13,17,Solutions des exercices 17.1 à 17.7,analysis/python/cases/ch17_ajustements.py,analysis/python/tests/test_ch17.py::test_solutions_exercices,"17.1 551500 ; 17.2 28587/28954/28039 ; 17.3 15083/15250/11151/4552 ; 17.4 4,60/4,58 et −22,12/−22,37 ; 17.5 523640/525000/524700 ; 17.6 poids 0,254/0,508/0,238 valeur 576556 ; 17.7 moyenne 579001 pondérée 573963",idem,verifie,2026-10-31237CALC-18-01,18,"Modèle de référence (traite.cas1.hedonique) : n, k, R², R² ajusté, σ",analysis/python/cases/ch18_hedonique.py,analysis/python/tests/test_ch18.py::test_modele_reference_retrouve_les_lois,"600 ; 16 ; 0,853 ; 0,849 ; 0,083","600 ; 16 ; 0,8530 ; 0,8492 ; 0,0830",verifie,2026-10-31238CALC-18-02,18,Coefficients clés et couverture des paramètres de génération (IC 95 %),analysis/python/cases/ch18_hedonique.py,analysis/python/tests/test_ch18.py::test_modele_reference_retrouve_les_lois,"ln_S 0,5391 (0,0127) ; ln_T 0,0937 ; qualité 0,0611 ; garage 0,0324 ; Buckingham −0,2504 (0,0718) ; const 13,2074 → 544 400 $ ; 15/15 couverts",idem,verifie,2026-10-31239CALC-18-03,18,Croissance mensuelle et annuelle implicites vs croissance de génération,analysis/python/cases/ch18_hedonique.py,analysis/python/tests/test_ch18.py::test_modele_reference_retrouve_les_lois,"0,364 %/mois ; 4,46 %/an ; vraie 4,43 %",idem,verifie,2026-10-31240CALC-18-04,18,"Diagnostics : Breusch–Pagan (Koenker), Jarque–Bera, asymétrie, aplatissement, étendue des résidus",analysis/python/cases/ch18_hedonique.py,analysis/python/tests/test_ch18.py::test_diagnostics,"LM 16,09 ddl 15 p 0,38 ; JB 2,11 p 0,35 ; −0,07 ; 2,75 ; [−0,238 ; 0,224] ; 7,0 % > 0,15",idem,verifie,2026-10-31241CALC-18-05,18,"VIF (âge 11,85 ; distance 43,7 ; Buckingham 30,3 ; Masson-Angers 28,0 ; Aylmer 8,0 ; Gatineau 4,15 ; physiques < 2)",analysis/python/cases/ch18_hedonique.py,analysis/python/tests/test_ch18.py::test_diagnostics,voir description,idem,verifie,2026-10-31242CALC-18-06,18,"Distances de Cook (seuil 4/n = 0,0067 ; 29 au-dessus ; max 0,022 G0541) et I de Moran des résidus (8 voisins)",analysis/python/cases/ch18_hedonique.py,analysis/python/tests/test_ch18.py::test_diagnostics,"29 ; 0,022 ; G0541 ; I −0,013 z −0,59 p 0,56",idem,verifie,2026-10-31243CALC-18-07,18,"Six variantes : R², EQM $, COD, prédiction du sujet (semi-log 637 953 ; linéaire 615 985 ; log-log 627 260 ; Box–Cox 635 171 ; sans secteurs 664 342 ; trimestrielles 649 980)",analysis/python/cases/ch18_hedonique.py,analysis/python/tests/test_ch18.py::test_variantes,voir tab:18:variantes,idem,verifie,2026-10-31244CALC-18-08,18,"Box–Cox : λ̂ 0,157 ; IC 95 % [−0,036 ; 0,353] ; RV vs λ=0 : 2,5 ; vs λ=1 : 66",analysis/python/cases/ch18_hedonique.py,analysis/python/tests/test_ch18.py::test_variantes,"0,157 ; [−0,036 ; 0,353] ; 2,5 ; 66",idem,verifie,2026-10-31245CALC-18-09,18,"Omission des secteurs : distance −0,0036 → −0,0117 ; terrain 0,0937 → 0,0419 ; σ 0,083 → 0,104 ; sujet +4,1 %",analysis/python/cases/ch18_hedonique.py,analysis/python/tests/test_ch18.py::test_variantes,voir description,idem,verifie,2026-10-31246CALC-18-10,18,Prix implicites au sujet (2 084 $/m² ; 96 $/m² terrain ; −2 308 $/an ; 2 319 $/mois ; qualité 40 182 ; garage 21 031 ; sous-sol 14 183 ; piscine 17 023 ; étages 19 502 ; Aylmer 56 886 ; Gatineau −14 070) et corrections de Kennedy,analysis/python/cases/ch18_hedonique.py,analysis/python/tests/test_ch18.py::test_prix_implicites,voir tab:18:prix-implicites,idem,verifie,2026-10-31247CALC-18-11,18,"Prédiction du sujet : ln 13,3627 ; naïve 635 821 ; Duan ×1,00335 = 637 953 ; log-normale 638 016 ; x'Vx 0,000105 (1,5 %) ; s_p 0,0836 ; IC 95 % [539 682 ; 749 087] ; IC 80 % [571 192 ; 707 764]",analysis/python/cases/ch18_hedonique.py,analysis/python/tests/test_ch18.py::test_prediction_et_intervalle,voir description,idem,verifie,2026-10-31248CALC-18-12,18,"Prédiction au 2024-07-01 (580 375 $) et ratio rôle fictif du sujet 468 000 / 580 375 = 0,81",analysis/python/cases/ch18_hedonique.py,analysis/python/tests/test_ch18.py::test_prediction_et_intervalle,"580 375 ; 0,806",idem,verifie,2026-10-31249CALC-18-13,18,"Statistiques de ratio du modèle : in-sample COD 6,68 PRD 1,007 PRB −0,058 médiane 0,997 ; validation croisée 10 plis COD 6,83 RMSE 40 888 erreur abs. médiane 5,67 %",analysis/python/cases/ch18_hedonique.py,analysis/python/tests/test_ch18.py::test_ratios_et_validation_croisee,voir tab:18:ratios,idem,verifie,2026-10-31250CALC-18-14,18,"Rôle fictif vs prix ramenés au 2024-07-01 : médiane 0,925 COD 6,12 PRD 0,999 PRB 0,064 ; sans rajustement : 0,914 / 6,90",analysis/python/cases/ch18_hedonique.py,analysis/python/tests/test_ch18.py::test_ratios_et_validation_croisee,voir description,idem,verifie,2026-10-31251CALC-18-15,18,"Indice trimestriel (15 trimestres, 2026T3 = 122,0 vs tendance 116,5 ; 22 ventes ; IC +3,6 %) ; écart abs moyen 2,57 % max 5,03 %",analysis/python/cases/ch18_hedonique.py,analysis/python/tests/test_ch18.py::test_indice_et_sensibilite,voir fig:18:indice,idem,verifie,2026-10-31252CALC-18-16,18,"Sensibilité à l'échantillon : Hull 186 → 625 967 ; 18 mois 236 → 640 098 ; étages 330 → 629 272 ; sans Cook 571 → 636 872 ; 110-230 m² 495 → 635 048 ; étendue 2,2 %",analysis/python/cases/ch18_hedonique.py,analysis/python/tests/test_ch18.py::test_indice_et_sensibilite,voir tab:18:sensibilite,idem,verifie,2026-10-31253CALC-18-17,18,"Résidus des cinq comparables du ch. 16 (G0574 +0,007 ; G0404 −0,161 ; G0468 −0,104 ; G0477 −0,111 ; G0575 −0,084 ; moyenne −8,7 %)",analysis/python/cases/ch18_hedonique.py,analysis/python/tests/test_ch18.py::test_residus_des_comparables,voir description,idem,verifie,2026-10-31254CALC-18-18,18,Solutions des exercices 18.1 à 18.8 (chiffres des solutions/ch18.tex),analysis/python/cases/ch18_hedonique.py,analysis/python/tests/test_ch18.py::test_solutions_exercices,voir solutions/ch18.tex,idem,verifie,2026-10-31255CALC-11-001,11,Facteur de majoration C_N/D des coûts de composantes (coût neuf ch. 21 / coûts directs),analysis/python/cases/ch11_inspection.py,analysis/python/tests/test_ch11.py::TestFiche::test_couverture_du_devis,1.33043,1.33043,verifie,2026-10-31256CALC-11-002,11,Fiche d'état : 20 composantes couvrant les 33 postes directs ; Σ coûts neufs = 397 567,33 $ ; courte/moyenne durée 224 956,09 $ (56,6 %) ; structure 172 611,24 $ (43,4 %),analysis/python/cases/ch11_inspection.py257CALC-11-003,11,"Âges effectifs cités (bardeaux 12,00 ; gouttières 23,38 ; fenêtres 21,50 ; VRC 20 (borné) ; structure 29,00 ; vie restante 31)",analysis/python/cases/ch11_inspection.py,analysis/python/tests/test_ch11.py::TestFiche::test_valeurs_citees ; TestConvention::test_cas_limites,"12 ; 23,375 ; 21,5 ; 20 ; 29 ; 31","12 ; 23,375 ; 21,5 ; 20 ; 29 ; 31",verifie,2026-10-31258CALC-11-004,11,"Propriétés de la convention a_eff = (1−λ)a + λφ(c)L bornée : bornes [0, L], monotonie en a et c, a_eff = a si φ(c)L = a",analysis/python/cases/ch11_inspection.py,analysis/python/tests/test_ch11.py::TestConvention,propriétés vraies,propriétés vraies,verifie,2026-10-31259CALC-11-005,11,"Indice d'état pondéré I_E = 2,809 ; répartition des notes {2: 7, 3: 8, 4: 4, 5: 1} ; fraction moyenne de vie consommée 0,547 (32,8 ans / 60)",analysis/python/cases/ch11_inspection.py,analysis/python/tests/test_ch11.py::TestFiche::test_indice_etat,"2,809 ; 0,547","2,809 ; 0,547",verifie,2026-10-31260CALC-11-006,11,Travaux immédiats (5) : total curable 10 479,98 $ = 2,64 % de C_N ; entrée 3 438,43 $ ; thermos 2 788,93 $,analysis/python/cases/ch11_inspection.py,analysis/python/tests/test_ch11.py::TestTravaux261CALC-11-007,11,"Dépréciation ventilée : courte durée 130 584,55 $ ; base longue 165 569,69 $ ; longue 80 025,35 $ ; total 221 089,88 $ = 55,61 % ; contribution 176 477,45 $ ; identités (somme, base = C_N − curable − Σ courtes)",analysis/python/cases/ch11_inspection.py,analysis/python/tests/test_ch11.py::TestDepreciation,221089.88 ; 55.61 %,221089.88 ; 55.61 %,verifie,2026-10-31262CALC-11-008,11,"Âge-vie simple : 29 ans → 192 157,55 $ (48,33 %) ; 28 ans → 185 531,42 $ (46,67 %) ; écart ventilée − âge-vie = 28 932,34 $",analysis/python/cases/ch11_inspection.py,analysis/python/tests/test_ch11.py::TestDepreciation::test_valeurs_citees,192157.55 ; 185531.42 ; 28932.34,192157.55 ; 185531.42 ; 28932.34,verifie,2026-10-31263CALC-11-009,11,"Sensibilité λ × état de la structure (25 cellules) : 63,68 % à λ = 0 ; 46,24-66,02 % à λ = 0,5 ; 27,38-66,94 % à λ = 1 ; monotonie en état ; indépendance de l'état à λ = 0",analysis/python/cases/ch11_inspection.py,analysis/python/tests/test_ch11.py::TestSensibilite,grille du tableau 11.8,grille du tableau 11.8,verifie,2026-10-31264CALC-11-010,11,"Valeur de l'information : radon (p 10 %, C 3 000 $, t 50 $) VEI 250 $ ; pyrite (5 %, 25 000 $, 1 200 $) 50 $ ; pyrite (2 %) −700 $ ; seuil p* = t/C = 0,048 ; p* radon 50/3000 ≈ 1,7 %",analysis/python/cases/ch11_inspection.py,analysis/python/tests/test_ch11.py::TestValeurInformation,250 ; 50 ; −700 ; 0,048,250 ; 50 ; −700 ; 0,048265CALC-11-011,11,"Exercices : ex. 3 âges effectifs (13,5 ; 6 ; 21,25 ; 30) ; ex. 4 ventilée 159 350 $ (53,12 %) vs âge-vie 150 000 $ ; ex. 5 VEI 700 $, p* 0,045 et 0,02 ; ex. 6 λ = 0,25 → 59,77 % (28,5 ans), λ = 0,75 → 50,93 % (29,5 ans)",analysis/python/cases/ch11_inspection.py ; traite.cout,analysis/python/tests/test_ch11.py::TestExercices,voir solutions/ch11.tex,voir solutions/ch11.tex,verifie,2026-10-31266CALC-12-001,12,"Superficies du sujet : aire au sol 7,92 × 12,00 ; périmètre ; aire des étages (2 niveaux) ; périmètre des étages",analysis/python/cases/ch12_mesurage.py,analysis/python/tests/test_ch12.py::TestPlan::test_superficies_sujet,"95,04 ; 39,84 ; 190,08 ; 79,68","95,04 ; 39,84 ; 190,08 ; 79,68",verifie,2026-10-31267CALC-12-002,12,"Superficie habitable = 2 × (7,36 × 11,44) − trémie 3,40 ; nette (− cloisons 5,06) ; habitable + sous-sol fini 70",analysis/python/cases/ch12_mesurage.py,analysis/python/tests/test_ch12.py::TestPlan::test_superficies_sujet,"165,0 ; 159,9 ; 235,0","164,9968 ; 159,9368 ; 234,9968",verifie,2026-10-31268CALC-12-003,12,Formule des murs A_int/A = 1 − tP/A + 4t²/A (= calcul direct) ; rapport brute/habitable,analysis/python/cases/ch12_mesurage.py,analysis/python/tests/test_ch12.py::TestPlan::test_formule_murs,"0,8859 ; 1,152","0,8859 ; 1,152",verifie,2026-10-31269CALC-12-004,12,"Conversions : 1 pi² = 0,3048² m² ; 165 m² = 1 776 pi² ; 190,08 m² = 2 046 pi²",analysis/python/cases/ch12_mesurage.py,analysis/python/tests/test_ch12.py::TestConversions::test_facteurs,"0,09290304 ; 1 776 ; 2 046","0,09290304 ; 1 776,0 ; 2 046,0",verifie,2026-10-31270CALC-12-005,12,"Prix unitaires implicites du sujet (V = 637 953 $, traite.cas1.predire) selon la convention",analysis/python/cases/ch12_mesurage.py,analysis/python/tests/test_ch12.py::TestPrixUnitaires::test_valeurs,6 712 / 3 989 / 3 866 / 3 356 / 2 715 $/m²,6 712 / 3 989 / 3 866 / 3 356 / 2 715 $/m²,verifie,2026-10-31271CALC-12-006,12,"Prix marginal ∂V/∂S = β V/S avec β = 0,539 (traite.cas1.hedonique)",analysis/python/cases/ch12_mesurage.py,analysis/python/tests/test_ch12.py::TestPropagation::test_derivee,2 084 $/m² ; rapport au prix moyen = β,"2 084,25 $/m² ; 0,5391",verifie,2026-10-31272CALC-12-007,12,"Erreur de 5 % sur S : linéaire 17 195 $ (2,695 %) ; exact +17 002 / −17 398 $ ; naïf 31 898 $ ; 10 % : +5,27 / −5,52 %",analysis/python/cases/ch12_mesurage.py,analysis/python/tests/test_ch12.py::TestPropagation::test_cinq_pour_cent,17 195 ; 17 002 ; −17 398 ; 31 898,"17 195,07 ; 17 001,60 ; −17 398,19 ; 31 897,64",verifie,2026-10-31273CALC-12-008,12,"Mélange de conventions : sujet brut (190,08) vs habitable (165) → +7,93 % = +50 573 $ ; inverse −7,35 % = −46 858 $",analysis/python/cases/ch12_mesurage.py,analysis/python/tests/test_ch12.py::TestPropagation::test_melange_conventions,"+7,93 % ; 50 573 $ ; −7,35 % ; −46 858 $","+7,9274 % ; 50 573,11 $ ; −7,3451 % ; −46 858,45 $",verifie,2026-10-31274CALC-12-009,12,"Ajustement de superficie du comparable G0404 (506 500 $, 160 m²) : +8 472 $ ; avec S erronée 170 m² : −8 086 $ ; erreur −16 558 $ (approx. −17 065 $)",analysis/python/cases/ch12_mesurage.py,analysis/python/tests/test_ch12.py::TestPropagation::test_comparable,8 472 ; −8 086 ; −16 558,"8 471,94 ; −8 085,79 ; −16 557,72",verifie,2026-10-31275CALC-12-010,12,"Variance combinée β√(σs² + σc²/n) : 2 %/2 %/5 → 1,181 % = 7 535 $ (part du sujet 83,3 %) ; sujet seul 6 878 $ ; comparables seuls 3 076 $ ; 5 %/2 % → 17 468 $",analysis/python/cases/ch12_mesurage.py,analysis/python/tests/test_ch12.py::TestPropagation::test_variance_combinee,7 535 ; 6 878 ; 3 076 ; 17 468,7 535 ; 6 878 ; 3 076 ; 17 468,verifie,2026-10-31276CALC-12-011,12,"Atténuation : Var(ẽ) = 0,0609 ; sd(ln S) = 0,2487 ; λ(0,10) = 0,859, β̂ moyen 0,465 ; λ(0,20) = 0,604, β̂ 0,328 ; 200 réplications, graine 20261031",analysis/python/cases/ch12_mesurage.py,analysis/python/tests/test_ch12.py::TestAttenuation::test_theorie_et_simulation,"0,0609 ; 0,859/0,465 ; 0,604/0,328","0,06092 ; 0,8590/0,4651 ; 0,6037/0,3280",verifie,2026-10-31277CALC-12-012,12,"Exercices 1, 3, 4, 5, 6 : 1 176 pi² = 109,25 m², 42,67 m ; 87,36 m², 171,52 m², 1,154 ; 2 042,86 $/m², 8 580 $, +8 523/−8 639 $, 15 600 $ ; +7,91 %, 10 447 $, 55 572 $ ; λ = 0,905, 0,488",analysis/python/tests/test_ch12.py,analysis/python/tests/test_ch12.py::TestExercices,voir solutions/ch12.tex,idem,verifie,2026-10-31278CALC-19-01,19,I de Moran des résidus (W knn8) : référence / sans secteur / sans secteur ni distance / ln P,analysis/python/cases/ch19_spatial.py,analysis/python/tests/test_ch19.py::test_moran_residus_avec_et_sans_secteur,-0.0136 (z -0.63) ; 0.3237 (z 17.11) ; 0.3595 ; 0.2013,idem (esda : z 17.11),verifie,2026-10-31279CALC-19-02,19,Corrélogramme des résidus sans secteur (bandes 0-0.5 et 2-3 km ; inversion au-delà de 8 km),analysis/python/cases/ch19_spatial.py,analysis/python/tests/test_ch19.py::test_correlogramme,0.225 ; 0.261 ; 12-15 km : -0.286,idem,verifie,2026-10-31280CALC-19-03,19,Tests LM sans secteur (LM-err/LM-lag/RLM-err/RLM-lag) et référence,analysis/python/cases/ch19_spatial.py,analysis/python/tests/test_ch19.py::test_tests_lm,285.18 / 116.21 / 170.06 / 1.09 (p 0.297) ; référence tous p > 0.1,idem (spreg identique),verifie,2026-10-31281CALC-19-04,19,SAR/SEM/SDM sans secteur par MV concentrée : rho 0.4385 (0.0412) ; lambda 0.6486 (0.0447) ; rho SDM 0.5089 ; logL 510.71/554.23/590.58/606.72 ; AIC -995.4/-1080.5/-1153.2/-1163.4 ; référence logL 650.00 AIC -1266.0,analysis/python/cases/ch19_spatial.py,analysis/python/tests/test_ch19.py::test_sar_sem_sdm,voir description,idem (spreg ML_Lag/ML_Error à 1e-6),verifie,2026-10-31282CALC-19-05,19,Effets directs/indirects/totaux ln_S : SAR 0.5715/0.4206/0.9921 (= beta/(1-rho)) ; SDM 0.5484/0.0666/0.6150,analysis/python/cases/ch19_spatial.py,analysis/python/tests/test_ch19.py::test_effets_directs_indirects,voir description,idem,verifie,2026-10-31283CALC-19-06,19,GWR noyau gaussien : bande CV 4.99 km (mgwr 4.87) ; tr(S) 44.8 ; AICc -1233.2 vs -994.8 (MCO) et -1264.9 (référence) ; R² 0.861 ; localisation par secteur vs référence vs générateur,analysis/python/cases/ch19_spatial.py,analysis/python/tests/test_ch19.py::test_gwr,Buckingham -0.313 / -0.344 / -0.342 ; Aylmer 0.003 / 0.057 / 0.062,idem,verifie,2026-10-31284CALC-19-07,19,Effets fixes : grilles 5/3/2 km (19/39/67 cellules) AIC -1252.1/-1240.4/-1225.4 ; 14 trimestres AIC -1253.8 ; indice 2026T3 0.199,analysis/python/cases/ch19_spatial.py,analysis/python/tests/test_ch19.py::test_effets_fixes,voir description,idem,verifie,2026-10-31285CALC-19-08,19,Variogramme sans secteur : gamma(0-1 km) 0.00699 ; max 0.01702 ; exponentiel pépite 0.00455 palier partiel 0.00897 portée 5.0 (borne) ; krigeage sujet -0.0597 (var 0.00567),analysis/python/cases/ch19_spatial.py,analysis/python/tests/test_ch19.py::test_variogramme_krigeage,voir description,idem,verifie,2026-10-31286CALC-19-09,19,Spatio-temporel (2 km / 12 mois) : 582 ventes retenues ; I 0.305 ; rho_st 0.3696 (0.0532) ; I résidus 0.128 ; SEM-st lambda 0.7485 AIC -1154.8,analysis/python/cases/ch19_spatial.py,analysis/python/tests/test_ch19.py::test_spatio_temporel,voir description,idem,verifie,2026-10-31287CALC-19-10,19,Validation croisée EQM log : 0.0841 / 0.1053 / 0.0878 / 0.0882 / 0.0950 / 0.0860,analysis/python/cases/ch19_spatial.py,analysis/python/tests/test_ch19.py::test_validation_croisee,voir description,idem,verifie,2026-10-31288CALC-19-11,19,Indications sujet : 637 953 / 664 342 / 624 799 / 633 352 / 654 429 / 627 519 $,analysis/python/cases/ch19_spatial.py,analysis/python/tests/test_ch19.py::test_indications_sujet,voir description,idem,verifie,2026-10-31289CALC-19-12,19,Sensibilité à W : rho 0.2359 (k=4) → 0.6537 (k=16) ; lambda 0.5066 → 0.7855 ; I stable 0.32-0.33,analysis/python/cases/ch19_spatial.py,analysis/python/tests/test_ch19.py::test_sensibilite,voir description,idem,verifie,2026-10-31290CALC-19-13,19,Solutions des exercices 19.1 (I = 0.6917 ; alternés -1) 19.3 19.4 19.5 19.6 (krigeage 0.0489 var 0.00869) 19.7 (SEM k=4/8/16 : 656 724 / 633 352 / 628 672 $),solutions/ch19.tex,analysis/python/tests/test_ch19.py::test_solutions_exercices et ::test_solution_exercice_7,voir description,idem,verifie,2026-10-31291CALC-19-14,19,Fonctions génériques ajoutées à traite.hedonique (sem_mv sar_mv tests_lm_spatial effets_sar gwr variogramme krigeage W spatio-temporelle),analysis/python/traite/hedonique.py,analysis/python/tests/test_ch19.py (8 tests de simulation),recouvrement des paramètres simulés ; identités (total = direct + indirect ; W_st nilpotente ; krigeage exact),idem,verifie,2026-10-31292CALC-22-001,22,Cohérence avec le ch. 21 : D / I / C_N inchangés (38 postes) et bordereau q × p = montant,analysis/python/cases/ch22_metre.py,analysis/python/tests/test_ch22.py::TestCoherenceCh21,298826.17 ; 62598.68 ; 397567.33 ; 361424.85,idem,verifie,2026-10-31293CALC-22-002,22,"Dimensions de base du plan coté : aire au sol, périmètre, garage, sous-sol ; invariance du périmètre en L",analysis/python/cases/ch22_metre.py,analysis/python/tests/test_ch22.py::TestGeometrie::test_empreinte_et_perimetre,95.04 m² ; 39.84 m ; 24.95 m² ; 70.09 m²,idem,verifie,2026-10-31294CALC-22-003,22,"Superficies selon les conventions : aire des étages MEFQ, périmètre des étages, habitable, nette hors sol, sous-sol net et fini",analysis/python/cases/ch22_metre.py,analysis/python/tests/test_ch22.py::TestGeometrie::test_superficies_conventions,190.08 (2046 pi²) ; 79.68 m ; 165.13 (1777 pi²) ; 135.37 (58.56 + 76.81) ; 58.65 ; 49.31,idem,verifie,2026-10-31295CALC-22-004,22,Couverture des niveaux par les pièces (somme des aires brutes = 95.04 / 95.04 / 70.09) et longueurs de cloisons,analysis/python/cases/ch22_metre.py,analysis/python/tests/test_ch22.py::TestGeometrie::test_pieces_couvrent_les_niveaux ; test_cloisons,21.52 / 47.94 / 20.80 m ; séparation 10.26 m,idem,verifie,2026-10-31296CALC-22-005,22,"Formules élémentaires : aire décalée A + P·e + 4e², prismoïde (exact pour un tronc de pyramide), facteur de pente √(1+p²)",analysis/python/cases/ch22_metre.py,analysis/python/tests/test_ch22.py::TestGeometrie::test_formules_elementaires,identités à 1e-9 ; 1.1180,idem,verifie,2026-10-31297CALC-22-006,22,"Quantités géométriques des 17 postes mesurés (excavation 408.94 m³, fondations 36.79 m³, dalle 95.04, drain 42.24 m, charpente 324.65, fermes 111.62, couverture 124.79, revêtement 238.79, isolation 419.82, gypse/peinture 733.00, bois franc 103.56, céramique 31.81, flottant 70.09, gouttières 48.80 m, balcon 14.10, entrée 55.00)",analysis/python/cases/ch22_metre.py,analysis/python/tests/test_ch22.py::TestQuantites::test_mesures_citees ; test_details_cites,voir description (tolérance 0.05),idem,verifie,2026-10-31298CALC-22-007,22,"Dénombrements : 16 fenêtres (6/8/2), 3 portes ext., 1 porte de garage, 2 escaliers, 14 portes int. (4/7/3), 14 appareils, 26 semaines",analysis/python/cases/ch22_metre.py,analysis/python/tests/test_ch22.py::TestQuantites::test_denombrements,exact,idem,verifie,2026-10-31299CALC-22-008,22,"Métré de contrôle : verdicts (20 conformes, 2 à préciser, 2 à justifier, 14 forfaits) ; écarts cités (gypse +18.2 %, bois franc +9.0 %, céramique −9.1 %, excavation −2.6 %, fondations −3.2 %, charpente −1.6 %) ; planchers hors sol 135.37 vs 130",analysis/python/cases/ch22_metre.py,analysis/python/tests/test_ch22.py::TestVerification::test_verdicts ; test_ecarts_cites,voir description,idem,verifie,2026-10-31300CALC-22-009,22,Effet du métré de contrôle sur D et C_N (ΔD = +3410.22 $ = +1.14 % ; D' = 302236.39 ; C_N' = 401318.58 ; ΔC_N = +3751.24 $ = +0.94 % ; ΔC_N = ΔD × 1.10 ; multiplicateur 1.3304),analysis/python/cases/ch22_metre.py,analysis/python/tests/test_ch22.py::TestVerification::test_effet_metre_controle,voir description,idem,verifie,2026-10-31301CALC-22-010,22,Sensibilité : erreur uniforme ±5/±10 % par bloc (enveloppe ±7739 $ = 1.95 % ; tous les directs ±32871 $ = 8.27 %) ; linéarité ΔC_N = e·M·1.10,analysis/python/cases/ch22_metre.py,analysis/python/tests/test_ch22.py::TestSensibilitePropagation::test_sensibilite,voir description,idem,verifie,2026-10-31302CALC-22-011,22,"Propagation : Herfindahl 0.0539 (18.6 postes effectifs), σ_D/D = 1.16 % (σ = 5 %), σ_D = 3467.78 $, poste max charpente 13.2 % ; bornes 1/n ≤ H ≤ 1",analysis/python/cases/ch22_metre.py,analysis/python/tests/test_ch22.py::TestSensibilitePropagation::test_propagation,voir description,idem,verifie,2026-10-31303CALC-22-012,22,"Pertes et chutes (taux illustratifs) : gypse 694.4, bardeaux 137.5 ; surplus valorisé au prix posé 11283.78 $ ; répartition par type d'unité (mesuré 174351.56 / dénombré 89850.00 / forfait 97223.29)",analysis/python/cases/ch22_metre.py,analysis/python/tests/test_ch22.py::TestSensibilitePropagation::test_pertes ; test_repartition_types,voir description,idem,verifie,2026-10-31304CALC-22-013,22,"Coûts unitaires de C_N selon la convention (190.08 → 2092 ; 165.13 → 2408 ; 135.37 → 2937 $/m²) et ratios nette/habitable 82.0 %, nette/étages 71.2 %",analysis/python/cases/ch22_metre.py,analysis/python/tests/test_ch22.py::TestGeometrie::test_couts_unitaires_conventions,voir description,idem,verifie,2026-10-31305CALC-22-014,22,Exercices 22.1 à 22.7 (solutions),analysis/python/tests/test_ch22.py,analysis/python/tests/test_ch22.py::TestExercices,voir solutions/ch22.tex,idem,verifie,2026-10-31306CALC-13-001,13,"Structure du CSV brut 18-10-0289-01 : lignes, colonnes, membres des 3 dimensions, vecteurs, périodes",analysis/python/cases/ch13_sources.py,analysis/python/tests/test_ch13.py::TestIPCB::test_structure,318954 lignes ; 16 col. ; 25 géo ; 16 types ; 24 divisions ; 8750 vecteurs ; 1981-01 à 2026-07 (183),318954 ; 16 ; 25 ; 16 ; 24 ; 8750 ; 1981-01 à 2026-07 (183),verifie,2026-10-31307CALC-13-002,13,IPCB Montréal bâtiments résidentiels : 2017T1 65.5 ; 2023T1 99.9 ; 2025T3 108.5 ; 2026T3 117.8 ; var. annuelle ; facteurs,analysis/python/cases/ch13_sources.py,analysis/python/tests/test_ch13.py::TestIPCB::test_series_citees,+8.57 % ; 1.798 (2017T1→2026T3) ; 1.179 (2023T1→2026T3),8.571 % ; 1.7985 ; 1.1792,verifie,2026-10-31308CALC-13-003,13,IPCB RMR de Québec bâtiments résidentiels : début 2023T1 (15 obs.) ; 98.8 → 124.8 ; var. annuelle ; facteur,analysis/python/cases/ch13_sources.py,analysis/python/tests/test_ch13.py::TestIPCB::test_series_citees,+9.19 % ; 1.263,9.186 % ; 1.2632,verifie,2026-10-31309CALC-13-004,13,"Trois indices rebasés T1 2017 = 100 au T3 2026 (IPCB Mtl résid., IPLN Mtl, IPC Québec ; moyennes trimestrielles des séries mensuelles)",analysis/python/cases/ch13_sources.py,analysis/python/tests/test_ch13.py::TestIndices::test_rebasage,179.8 ; 159.0 ; 132.2,179.85 ; 158.98 ; 132.17,verifie,2026-10-31310CALC-13-005,13,"Dictionnaire du rôle v2.5 (PDF) : 2 pages, 62 codes distincts, répartition par section 21/2/17/5/17, 24 répétitifs",analysis/python/cases/ch13_sources.py,analysis/python/tests/test_ch13.py::TestDictionnaireEtRoles::test_dictionnaire,62 ; {1:21 2:2 3:17 4:5 5:17} ; 24,62 ; {1:21 2:2 3:17 4:5 5:17} ; 24,verifie,2026-10-31311CALC-13-006,13,Index des rôles 2026 : 1134 municipalités ; URL Gatineau RL81017_2026.xml,analysis/python/cases/ch13_sources.py,analysis/python/tests/test_ch13.py::TestDictionnaireEtRoles::test_index_roles,1134,1134,verifie,2026-10-31312CALC-13-007,13,"RFU 2026 : évaluation imposable uniformisée Montréal 430.75 G$, Québec 105.22 G$, Gatineau 60.01 G$ ; facteurs 1.00/1.08/1.02 ; parts par catégorie ; identité somme des postes = imposable",analysis/python/cases/ch13_sources.py,analysis/python/tests/test_ch13.py::TestRFU::test_structure_et_villes,Gatineau 1 log. 56.5 % ; Montréal logements+condos 60.6 % ; Québec 40.2/38.8 % ; total RFU 2077.9 G$ ; 3 villes 31.1 %,56.5 ; 60.6 ; 40.2/38.8 ; 2077.9 ; 31.1 ; écart somme/imposable 0 $,verifie,2026-10-31313CALC-13-008,13,"SCHL ELL oct. 2025, six RMR : inoccupation 2024/2025, loyer 2 ch. 2024/2025, univers, variation brute vs estimative, vacants implicites",analysis/python/cases/ch13_sources.py,analysis/python/tests/test_ch13.py::TestSCHL::test_tableau,Montréal brute 14.5 % vs estim. 7.2 % ; vacants 19351 ; Saguenay 211 ; Sherbrooke brute < estimative,14.456 % ; 7.2 ; 19350.7 ; 211.1 ; 6.0 < 9.8,verifie,2026-10-31314CALC-13-009,13,"Biais de datation b = (1+g)^(delta/12) - 1 : grille g ∈ {-3,0,3,6,10} × delta ∈ {1,2,3,6}",analysis/python/cases/ch13_sources.py,analysis/python/tests/test_ch13.py::TestDatation::test_biais,6 %/3 mois : 1.47 ; 10 %/3 : 2.41 ; 10 %/6 : 4.88 ; -3 %/6 : -1.51,1.467 ; 2.411 ; 4.881 ; -1.512,verifie,2026-10-31315CALC-13-010,13,Sensibilité loyer 1300 $ indexé Montréal 2 ch. : variation brute vs estimative ; écart mensuel/annuel ; valeur 12 log. à 4.5 %,analysis/python/cases/ch13_sources.py,analysis/python/tests/test_ch13.py::TestExercices::test_ex4_indexation,1487.93 vs 1393.60 ; 94 $/mois ; 1132 $/an ; ≈ 300 000 $,1487.93 ; 1393.60 ; 94.33 ; 1131.9 ; 301840,verifie,2026-10-31316CALC-13-011,13,Exercice 1 : coût registre foncier 25 actes + 25 index à 1 $ + 3 états certifiés (16 + 16 $),analysis/python/cases/ch13_sources.py,analysis/python/tests/test_ch13.py::TestExercices::test_ex1_registre,146 $,146 $,verifie,2026-10-31317CALC-13-012,13,Exercice 2 : prix 612 000 - 12 000 meubles ; délai 75 j = 2.464 mois ; facteur 1.06^(2.464/12) ; écart,analysis/python/cases/ch13_sources.py,analysis/python/tests/test_ch13.py::TestExercices::test_ex2_prix_corrige,600 000 $ ; 1.0120 ; 7 222 $,600000 ; 1.01204 ; 7222.04,verifie,2026-10-31318CALC-13-013,13,Exercice 5 : IPCB résidentiel Montréal/Québec/composite : facteurs 2023T1→2026T3 et TCAC ; 2019T3→2026T3 ; 350 000 $ indexé,analysis/python/cases/ch13_sources.py,analysis/python/tests/test_ch13.py::TestExercices::test_ex5_ipcb_quebec,1.1792 (4.82 %) ; 1.2632 (6.90 %) ; 1.1391 (3.79 %) ; 1.6453 ; 1.7406 ; 442 105 / 412 713 / 398 671 $,idem (test vert),verifie,2026-10-31319CALC-13-014,13,"Exercice 6 (chiffres fictifs) : couverture 1044/1500, appariement 920/1044, moyenne mixte, biais",analysis/python/cases/ch13_sources.py,analysis/python/tests/test_ch13.py::TestExercices::test_ex6_couverture,0.696 ; 0.881 ; 493 280 $ ; 16 720 $ (3.39 %),0.696 ; 0.8812 ; 493280 ; 16720 (3.39 %),verifie,2026-10-31320CALC-14-001,14,Jeu brut reproductible (graine 20261031) et identique au fichier : 618 inscriptions ; 127 anomalies (109 lignes + 18 doublons) ; rôle 600,analysis/python/cases/ch14_nettoyage.py,analysis/python/tests/test_ch14.py::test_brut_reproductible_et_identique_au_fichier,618;127;600,618;127;600,verifie,2026-10-31321CALC-14-002,14,Comptes d'anomalies injectées par type (tab. 14.1),analysis/python/cases/ch14_nettoyage.py,analysis/python/tests/test_ch14.py::test_anomalies_injectees,18;5;8;12;10;9;6;8;6;20;15;10,idem,verifie,2026-10-31322CALC-14-003,14,Entonnoir 618→600 (R1)→595 (R4)→587 (R7)→587 (I1)→581 (S1)→579 (E1),analysis/python/cases/ch14_nettoyage.py,analysis/python/tests/test_ch14.py::test_entonnoir_et_journal,618;600;595;587;587;581;579,618;600;595;587;587;581;579,verifie,2026-10-31323CALC-14-004,14,Journal : 144 lignes ; R1 18 ; R2 10 ; R3 8 ; R4 5 ; R5 12 ; R6 15 ; R7 8 ; G1 15 ; I1 45 ; S1 6 ; E1 2,analysis/python/cases/ch14_nettoyage.py,analysis/python/tests/test_ch14.py::test_entonnoir_et_journal,144,144,verifie,2026-10-31324CALC-14-005,14,Corrections R2/R3/R5 restituent les valeurs du jeu propre (dates ; prix net ; superficie),analysis/python/cases/ch14_nettoyage.py,analysis/python/tests/test_ch14.py::test_corrections_restituent_les_valeurs_propres,écart ≤ 0.5,écart ≤ 0.5,verifie,2026-10-31325CALC-14-006,14,Exclusions S1 : B0003 B0006 B0021 B0105 B0173 B0558 (4 liées + 2 faux positifs) ; E1 : B0039 (t −5.84 ; D 0.084) ; B0410 (t −6.70 ; D 0.048),analysis/python/cases/ch14_nettoyage.py,analysis/python/tests/test_ch14.py::test_entonnoir_et_journal,idem,idem,verifie,2026-10-31326CALC-14-007,14,Itérations E1 : n 581→579 ; σ 0.0897→0.0837 ; Cook max 0.084 < 1 ; 25 obs > 4/n ; 18 leviers > 2k/n,analysis/python/cases/ch14_nettoyage.py,analysis/python/tests/test_ch14.py::test_iterations_regression,581;579;0.0897;0.0837;25;18,581;579;0.0897;0.0837;25;18,verifie,2026-10-31327CALC-14-008,14,Identités : tr(H) = k ; D_i = r_i² h/(k(1−h)) = forme par réestimation ; t_i = r_i sqrt((n−k−1)/(n−k−r_i²)),analysis/python/cases/ch14_nettoyage.py (diagnostics ; cook_direct),analysis/python/tests/test_ch14.py::test_identites_levier_cook,égalité à 1e-6,égalité à 1e-6,verifie,2026-10-31328CALC-14-009,14,Constante 1/Φ⁻¹(0.75) = 1.4826 ; 1.4826·MAD → σ (simulation 200 000 N(0;2)),scipy.stats.norm,analysis/python/tests/test_ch14.py::test_constante_mad_et_score,1.4826 ; 2.00 ± 1 %,1.4826 ; 2.00,verifie,2026-10-31329CALC-14-010,14,Masquage Hull (tab. 14.3) : n 193 ; s 1.395 ; 1.4826·MAD 0.181 ; 2 vs 10 signalées ; 2 prix à 1 $,analysis/python/cases/ch14_nettoyage.py (illustration_masquage),analysis/python/tests/test_ch14.py::test_masquage,193;1.395;0.181;2;10,193;1.395;0.181;2;10,verifie,2026-10-31330CALC-14-011,14,Modèles (tab. 14.6) : brut n 573 R² 0.039 σ 1.231 lnS 0.2009 préd 565 471 ; règles σ 0.1132 ; S1 σ 0.0897 ; nettoyé n 579 R² 0.850 σ 0.0837 lnS 0.5335 préd 637 017 ; référence n 600 R² 0.853 σ 0.0830 lnS 0.5391 préd 637 953,analysis/python/cases/ch14_nettoyage.py (comparer_modeles),analysis/python/tests/test_ch14.py::test_modeles_avant_apres,idem,idem,verifie,2026-10-31331CALC-14-012,14,Écart nettoyé − référence ≤ 0.44 erreur-type sur les 16 coefficients,analysis/python/cases/ch14_nettoyage.py,analysis/python/tests/test_ch14.py::test_modeles_avant_apres,< 0.5,0.44,verifie,2026-10-31332CALC-14-013,14,Géocodage (tab. 14.5) : erreurs médianes 6/18/47/177/1199 m ; voisins conservés 99.1/97.1/93.1/76.1/17.6 % ; rayon modifié 0/0/0.33/1.33/6.67 % ; 103 ventes dans 3 km ; médiane Rayleigh 1.1774σ,analysis/python/cases/ch14_nettoyage.py (simulation_geocodage),analysis/python/tests/test_ch14.py::test_geocodage,idem,idem,verifie,2026-10-31333CALC-14-014,14,Appariement (tab. 14.7) : 367 (59.4 %) ; 198 (32.0 %) ; 45 (7.3 %) ; 8 (1.3 %) ; 3 ambigus ; 0 faux,analysis/python/cases/ch14_nettoyage.py (appariement_role),analysis/python/tests/test_ch14.py::test_appariement,idem,idem,verifie,2026-10-31334CALC-14-015,14,Imputations (tab. 14.8) : suppression n 535 lnT 0.0969 préd 640 921 ; médiane 0.0941 / 637 017 ; régression 0.0940 / 637 166 ; indicateur 0.0945 / 638 354 ; coef manq_terrain −0.0215,analysis/python/cases/ch14_nettoyage.py (comparer_imputations),analysis/python/tests/test_ch14.py::test_imputations,idem,idem,verifie,2026-10-31335CALC-14-016,14,Sensibilité (tab. 14.9) : 12 combinaisons ; 6 liées détectées partout ; faux positifs 22 (2.5;2.5) / 2 (3.5;3) / 0 (4;3) ; σ 0.0783–0.0838 ; prédiction 633 813–638 476,analysis/python/cases/ch14_nettoyage.py (sensibilite_seuils),analysis/python/tests/test_ch14.py::test_sensibilite_seuils,idem,idem,verifie,2026-10-31336CALC-14-017,14,Variante MNAR (sol. 14.7) : suppression n 536 lnT 0.1007 préd 638 976 ; médiane 0.0977 / 636 195 ; régression 0.0972 / 636 224 ; indicateur 0.0978 / 638 201 ; coef manq_terrain −0.0502 (e.-t. 0.0143),analysis/python/cases/ch14_nettoyage.py (variante_mnar_terrain),analysis/python/tests/test_ch14.py::test_variante_mnar,idem,idem,verifie,2026-10-31337CALC-14-018,14,Solutions 14.1–14.5 : méd 3260 MAD 110 z 16.68 / zc 2.65 ; 1776 pi² = 165.0 m² ; r −3.074 t −3.097 D 0.0246 ; εδ −0.0347 (−3.4 %) σ 0.173 ; poids FS 16.35 / 11.18 / 0.78,solutions/ch14.tex,analysis/python/tests/test_ch14.py::test_solutions_exercices,idem,idem,verifie,2026-10-31338CALC-15-01,15,Mois d'inventaire T3 2026 par RMR (inscriptions / (ventes/3)) : province/Montréal/Québec/Gatineau/Sherbrooke/Trois-Rivières/Saguenay,analysis/python/cases/ch15_segmentation.py,analysis/python/tests/test_ch15.py::test_mois_inventaire_et_absorption,"6,1 ; 6,6 ; 3,1 ; 6,5 ; 4,3 ; 3,6 ; 4,0","6,08 ; 6,59 ; 3,06 ; 6,48 ; 4,35 ; 3,60 ; 4,03",verifie,2026-10-31339CALC-15-02,15,Taux d'absorption mensuel = 1/MI (Québec 32,7 % ; Montréal 15,2 %) et ratio stock/flux = MI / (délai unifamiliale en mois) : Montréal 5,0 ; Gatineau 5,8 ; Québec 3,2,analysis/python/cases/ch15_segmentation.py340CALC-15-03,15,Parts des ventes par secteur de Gatineau : APCIQ T3 2026 (1 044) vs jeu synthétique (600) ; Hull 16,7 % vs 31,0 %,analysis/python/cases/ch15_segmentation.py,analysis/python/tests/test_ch15.py::test_parts_secteurs_gatineau,"33,1/16,7/19,3/10,3/20,6 vs 33,3/31,0/20,8/14,8/0",idem341CALC-15-04,15,Test de Chow par secteur (G=5 k0=12) : SCR contraint 4,0245 / classique 6,4024 / libre 3,7360 ; F pentes 0,948 (44;540) p 0,570 ; F classique 8,029 (48;540) ; Wald HC1 54342CALC-15-05,15,Coefficients hédoniques par secteur (HC1) : ln_S 0,513 (Aylmer) à 0,558 (Masson-Angers) ; qualité 0,048 à 0,078 ; tendance 0,0030 à 0,0044343CALC-15-06,15,"Tests de Chow pour les autres partitions : Est regroupé p 0,426 ; type (k0=11, « etages » retiré) F p 0,079 / Wald p 0,0096 ; période F p 0,034 / classique 0,024 / Wald 0,037 (non rejeté à 1 %) ; k-moyennes k=2 p 0,588 ; k=5 p 0,427 / Wald 0,057",analysis/python/cases/ch15_segmentation.py,analysis/python/tests/test_ch15.py::test_chow_autres_partitions,voir tableau 15.8,idem,verifie,2026-10-31344CALC-15-07,15,"Classification k-moyennes (20 init., graine 20261031) et Ward : silhouette k=2 0,417 ; k=3 0,225 ; k=5 0,188 (Ward 0,156) ; k optimal 2 ; ARI k-moyennes/secteurs 0,213 (k=2) et 0,124 (k=5) ; segment Est = 42 Buckingham + 47 Masson-Angers ; silhouette manuelle = sklearn",analysis/python/cases/ch15_segmentation.py,analysis/python/tests/test_ch15.py::test_classification,voir tableaux 15.5 et 15.6,idem,verifie,2026-10-31345CALC-15-08,15,"Sensibilité au jeu de variables : attributs seuls silhouette 0,221 / ARI 0,001 ; coordonnées seules 0,735 / ARI k=5 0,986 ; les deux 0,417 / 0,124",analysis/python/cases/ch15_segmentation.py,analysis/python/tests/test_ch15.py::test_classification,voir tableau 15.10,idem,verifie,2026-10-31346CALC-15-09,15,"Validation croisée 10 plis : RMSE log 0,1053 (sans segment) ; 0,0839 (indicatrices de secteur, référence) ; 0,0888 (équation par secteur) ; 0,0942 (équation par segment k=5) ; erreurs abs. médianes 7,08 / 5,81 / 6,26 / 6,71 %",analysis/python/cases/ch15_segmentation.py,analysis/python/tests/test_ch15.py::test_validation_croisee,voir tableau 15.9,idem,verifie,2026-10-31347CALC-15-10,15,"Cas 3 (traite.cas3.revenus) : RBP contrat 165 540 $, marché 186 036 $, écart 20 496 $ = 11,0 % du marché ; par type 15,8 / 11,1 / 4,9 % ; loyers de marché à 98,5 / 99,4 / 94,4 % des moyennes SCHL zone 9",analysis/python/cases/ch15_segmentation.py,analysis/python/tests/test_ch15.py::test_locatif,"20 496 ; 11,0 ; 15,8 ; 11,1 ; 4,9",idem,verifie,2026-10-31348CALC-15-11,15,"SCHL zone 9 : parts de l'univers 12,5/27,8/50,5/9,1 % (somme 44 554) ; écart loyer inoccupé/occupé 1 ch. 22,9 %, RMR tous 27,1 % ; prime du parc neuf 55,2 %, part 1,41 % ; zone = 6,7 % de l'univers RMR ; 3 ch.+ zone vs RMR +7,6 %",analysis/python/cases/ch15_segmentation.py,analysis/python/tests/test_ch15.py::test_locatif,voir texte §15.6,idem,verifie,2026-10-31349CALC-15-12,15,"Rattrapage des loyers : rotation 15 % / 9,4 % / 8,5 % → an 1 : 3 074 / 1 927 / 1 742 $ ; horizon 6,7 / 10,6 / 11,8 ans ; part en 5 ans 55,6 / 39,0 / 35,9 %",analysis/python/cases/ch15_segmentation.py,analysis/python/tests/test_ch15.py::test_locatif;test_solutions_exercices,idem,idem,verifie,2026-10-31350CALC-15-13,15,"Solutions des exercices 15.1 (4,35 mois ; 23,0 % ; 5,80), 15.3 (4 059 ; 80,1 %), 15.4 (s = 0,644), 15.5 (F 0,948 / 8,03 ; quantiles 1,40 / 1,38), 15.6 (0,556 / 0,390 / 0,359 ; 15,8 % ; 22,9 %) ; 1 − 0,95^6 = 26,5 %",solutions/ch15.tex,analysis/python/tests/test_ch15.py::test_solutions_exercices,idem,idem,verifie,2026-10-31351CALC-31-01,31,"Taux mensuel canadien et taux effectif pour 4,12 % composé semestriellement ; comparaison i/12",analysis/python/cases/ch31_financement.py,analysis/python/tests/test_ch31.py::test_taux_canadien_et_effectif,"0,34042 % ; 4,1624 % ; 0,34333 %",0.0034042 ; 0.041624 ; 0.0034333,verifie,2026-10-31352CALC-31-02,31,Identités de l'hypothèque : PMT × facteur VA = capital ; solde prospectif = solde du tableau ; solde final nul ; Σ capital = capital ; f = 12·PMT/M_0 ; C_k géométrique,analysis/python/cases/ch31_financement.py,analysis/python/tests/test_ch31.py::test_identites_hypotheque,identités à 1e-9,identités vérifiées,verifie,2026-10-31353CALC-31-03,31,"Dimensionnement du prêt du cas 3 : prêt RPV 1 656 424 ; prêt RCD 1 475 959 (liant) ; RPV 66,83 % ; mise 732 606 ; PMT 6 246,93 ; SD 74 963 ; f 5,0789 %",analysis/python/cases/ch31_financement.py,analysis/python/tests/test_ch31.py::test_valeurs_citees_financement,"1 475 959 ; 74 963 ; 0,050789",1475959.45 ; 74963.13 ; 0.0507894,verifie,2026-10-31354CALC-31-04,31,"Intérêts/capital an 1 (60 016 / 14 947) ; soldes 60 et 120 mois (1 394 739 / 1 295 148) ; RCD 1,20 ; flux après dette 14 993 ; cash-on-cash 2,05 % ; point mort 92,7 % / 87,8 %",analysis/python/cases/ch31_financement.py,analysis/python/tests/test_ch31.py::test_valeurs_citees_financement,voir description,60016.26 / 14946.86 ; 1394739.19 / 1295148.22 ; 0.020465 ; 0.92697 / 0.87803,verifie,2026-10-31355CALC-31-05,31,"Convention canadienne vs américaine sur le prêt du cas 3 : PMT 6 246,93 vs 6 279,21 ; SD +387 $ ; f 5,1052 % ; solde 60 : 1 395 377",analysis/python/cases/ch31_financement.py,analysis/python/tests/test_ch31.py::test_conventions,"6 279,21 ; +387",6279.21 ; 387.43,verifie,2026-10-31356CALC-31-06,31,"Extraits du tableau d'amortissement (mois 1 : I 5 024,50 / C 1 222,42 ; part d'intérêts 80,4 %) ; Σ intérêts 40 ans 1 522 566",analysis/python/cases/ch31_financement.py,analysis/python/tests/test_ch31.py::test_tableau_extraits,"5 024,50 ; 1 522 566",5024.50 ; 1522565.6,verifie,2026-10-31357CALC-31-07,31,"Prêt max par RCD ⇒ RCD = seuil ; grille taux × amortissement × RCD ; 40 ans/25 ans = 1,258 ; seuil de liaison R = RCD·f·LTV = 4,571 %",analysis/python/cases/ch31_financement.py,analysis/python/tests/test_ch31.py::test_pret_max_par_rcd_donne_rcd_seuil;test_seuil_rpv_max_par_rcd,"1,258 ; 4,571 %",1.2582 ; 0.045710,verifie,2026-10-31358CALC-31-08,31,"Règles résidentielles : MQR 6,58 % (4,58 + 2) et 5,25 % (plancher) ; mise de fonds minimale 20 000 / 40 000 / 75 000 / 125 000 ; capacité 594 162 → 491 344 (−17,3 %)",analysis/python/cases/ch31_financement.py,analysis/python/tests/test_ch31.py::test_regles_residentielles,voir description,0.0658 ; 0.0525 ; 20000/40000/75000/125000 ; 594161.56 → 491343.62,verifie,2026-10-31359CALC-31-09,31,"Barème des primes APH (prime_aph) : 4,10 % (RPV 72,9 %, 40 ans), 5,35 % (76,2 %, 45 ans), 5,60 % (78,8 %, 50 ans) ; cohérence avec ch. 47 (5,10 / 6,35 / 6,60)",analysis/python/cases/ch31_financement.py,analysis/python/tests/test_ch31.py::test_prime_aph_bareme;test_aph_select,"0,0410 ; 0,0535 ; 0,0560",0.0410 ; 0.0535 ; 0.0560,verifie,2026-10-31360CALC-31-10,31,Variante APH Select sur la valeur DCF : prêts 1 610 138 / 1 682 397 / 1 741 328 (RCD liant) ; SD 81 778 ; mise 598 428 → 467 238 ; primes 66 016 → 97 514,analysis/python/cases/ch31_financement.py,analysis/python/tests/test_ch31.py::test_aph_select,voir description,1610138 / 1682397 / 1741328 ; 81777.96 ; 66015.64 / 97514.38,verifie,2026-10-31361CALC-31-11,31,"Test de résistance RCD : taux +100/+200/+300 pb → SD 86 183 / 97 988 / 110 279 ; RCD 1,044 / 0,918 / 0,816 ; prêt qualifié 1 283 815 / 1 129 149 / 1 003 298",analysis/python/cases/ch31_financement.py,analysis/python/tests/test_ch31.py::test_stress_rcd,voir description,86182.63 / 97987.52 / 110278.87 ; 1.0438 / 0.9180 / 0.8157,verifie,2026-10-31362CALC-31-12,31,"Levier courant : R_E = (R − Mf)/(1 − M) = R + (R − f)D/E = 2,05 % (base DCF) ; 2,67 % (base capitalisation directe)",analysis/python/cases/ch31_financement.py,analysis/python/tests/test_ch31.py::test_levier_courant_formule,"0,0205 ; 0,0267",0.020465 ; 0.026699,verifie,2026-10-31363CALC-31-13,31,"Levier par RPV (0 → 85 %) : TRI FP 7,25 → 15,24 % croissant ; cash-on-cash 4,07 → −1,63 % décroissant ; à 75 % RCD 1,07 et flux min −69 617 ; à 85 % RCD 0,94",analysis/python/cases/ch31_financement.py,analysis/python/tests/test_ch31.py::test_levier_par_rpv_monotone,voir description,0.0725 → 0.1524 ; 0.0407 → −0.0163 ; 1.0693 ; −69616.75,verifie,2026-10-31364CALC-31-14,31,"Proposition : y_E > y ⇔ y > k ; cas 3 y = 7,25 % > k = 4,06 % ⇒ TRI FP 11,22 % ; contre-exemple dette à 9 % ⇒ TRI FP < 7,25 % ; dette au TRI = y ⇒ y_E = y",analysis/python/cases/ch31_financement.py,analysis/python/tests/test_ch31.py::test_proposition_levier_positif,"k 0,0406 ; y_E = y à 1e-9",0.040615 ; vérifié,verifie,2026-10-31365CALC-31-15,31,"Risque : σ_E = σ/(1 − M) ; multiplicateur 3,01 au RPV 66,8 %",analysis/python/cases/ch31_financement.py,analysis/python/tests/test_ch31.py::test_risque_levier,"3,01",3.0147,verifie,2026-10-31366CALC-31-16,31,"Renouvellement exact : solde 1 394 739 sur 420 mois ; +0/100/200/300 pb → PMT 6 246,93 / 7 098,10 / 7 993,35 / 8 926,64 ; SD 74 963 / 85 177 / 95 920 / 107 120 (= ch. 47) ; RCD an 6 1,746 / 1,537 / 1,365 / 1,222 ; TRI FP 11,22 / 10,78 / 10,32 / 9,86 % ; approx ch. 30 : 11,22 / 10,03 / 8,81 / 7,57 % ; seuils RCD 1,20 à +317 pb, 1,00 à +502 pb",analysis/python/cases/ch31_financement.py,analysis/python/tests/test_ch31.py::test_renouvellement_exact,voir description,toutes valeurs reproduites,verifie,2026-10-31367CALC-31-17,31,"Sensibilité SD et RCD au taux et à l'amortissement : 480 mois RCD < 1 au-delà de 5,44 % ; 300 mois à 4,12 % RCD 0,954 ; équivalence 25→40 ans ≈ 212 pb",analysis/python/cases/ch31_financement.py,analysis/python/tests/test_ch31.py::test_sensibilite_service_dette,"0,954 ; 5,44 %",0.9537 ; 0.05445,verifie,2026-10-31368CALC-31-18,31,Exercices 1-7 (conventions 850 000 $ ; prêt 1 M$ 480 vs 300 mois ; prêt max 16 logements + APH ; levier courant ; mise de fonds/MQR/LTI 720 000 $ ; renouvellement +150 pb ; levier 50 % vs 85 %),analysis/python/cases/ch31_financement.py,analysis/python/tests/test_ch31.py::test_exercices_coherence,voir solutions/ch31.tex,toutes valeurs reproduites,verifie,2026-10-31369CALC-25-001,25,Jeu synthétique de 200 ventes de terrains (graine 20261031) : 156 desservis ; somme des prix ; reproductibilité,analysis/python/cases/ch25_terrain.py,analysis/python/tests/test_ch25.py::TestJeuTerrains::test_reproductibilite,200 ; 156 ; 52 123 500 $,200 ; 156 ; 52 123 500 $,verifie,2026-10-31370CALC-25-002,25,Modèle hédonique des terrains : élasticité ln T ; non desservi ; mois ; R² ; prédiction du terrain du sujet,analysis/python/cases/ch25_terrain.py,analysis/python/tests/test_ch25.py::TestHedoniqueTerrains,"0,5267 ; −0,2939 ; 0,0028 ; 0,895 ; 253 412 $","0,5267 ; −0,2939 ; 0,0028 ; 0,895 ; 253 412 $",verifie,2026-10-31371CALC-25-003,25,Entonnoir de sélection des terrains (200 → 101 → 29 → 21 → 20 → 5) et comparables T059 T004 T030 T038 T049,analysis/python/cases/ch25_terrain.py,analysis/python/tests/test_ch25.py::TestComparaison::test_entonnoir_et_selection,5 comparables à Hull,5 comparables à Hull,verifie,2026-10-31372CALC-25-004,25,Grille d'ajustements des terrains (cascade hédonique) : prix ajustés ; identité P_aj = P + ΣA ; brut ≥ |net|,analysis/python/cases/ch25_terrain.py,analysis/python/tests/test_ch25.py::TestComparaison::test_grille_identites,265 383 ; 259 943 ; 274 166 ; 294 813 ; 232 086 $,idem,verifie,2026-10-31373CALC-25-005,25,Réconciliation (poids inverse du brut) : valeur pondérée ; moyenne ; médiane ; étendue ; $/m²,analysis/python/cases/ch25_terrain.py,analysis/python/tests/test_ch25.py::TestComparaison::test_reconciliation,"267 388 ; 265 278 ; 265 383 ; 23,5 % ; 431 $/m²",idem,verifie,2026-10-31374CALC-25-006,25,Allocation : part du terrain Hull (médiane ; Q1 ; Q3) ; sur grille ch17 ; sur prédiction hédonique,analysis/python/cases/ch25_terrain.py,analysis/python/tests/test_ch25.py::TestAllocationExtraction::test_allocation,"48,2 % ; 42,4 ; 54,3 ; 280 412 ; 307 584 $",idem,verifie,2026-10-31375CALC-25-007,25,Prix implicite marginal du terrain (cas 1) : β ln T × P/T ; contribution marginale ; facteur d'âge 28 ans ; dépréciation implicite,analysis/python/cases/ch25_terrain.py,analysis/python/tests/test_ch25.py::TestAllocationExtraction::test_prix_implicite_marginal,"96,4 $/m² ; 59 750 $ ; 0,8852 ; 20,8 %",idem,verifie,2026-10-31376CALC-25-008,25,Extraction sur les 5 comparables du ch. 16 (âge-vie 60 ans vs dépréciation de marché) ; médianes transposées à 620 m²,analysis/python/cases/ch25_terrain.py,analysis/python/tests/test_ch25.py::TestAllocationExtraction::test_extraction_comparables,354 826 $ ; 242 545 $,354 826 $ ; 242 545 $,verifie,2026-10-31377CALC-25-009,25,Technique résiduelle cas 3 : C_B ; R_B ; revenus ; V_L ; identité RNE = R_L V_L + R_B C_B ; écart vs capitalisation ; R_L implicite,analysis/python/cases/ch25_terrain.py,analysis/python/tests/test_ch25.py::TestResiduelle::test_cas_de_base,"1 140 000 ; 6,25 % ; 71 250 / 18 706 ; 498 820 $ ; −19,6 % ; 2,08 %",idem,verifie,2026-10-31378CALC-25-010,25,Sensibilité résiduelle (δ × n × R_L) : cellules citées dont valeur négative et −38,6 % pour +50 pb,analysis/python/cases/ch25_terrain.py,analysis/python/tests/test_ch25.py::TestResiduelle::test_sensibilite,−256 531 ; 306 018 ; 750 946 ; 1 233 254 $,idem,verifie379CALC-25-011,25,Lotissement actualisé : prix du lot ; produit ; flux ; VA (traite.finance.van) ; statique ; ratio,analysis/python/cases/ch25_terrain.py,analysis/python/tests/test_ch25.py::TestLotissement::test_cas_de_base,"254 486 ; 3 053 830 ; 1 230 878 ; 1 579 602 $ ; 40,3 %",idem,verifie,2026-10-31380CALC-25-012,25,Sensibilité du lotissement (absorption,taux,prix ±10 %,viabilisation,profit),analysis/python/cases/ch25_terrain.py,analysis/python/tests/test_ch25.py::TestLotissement::test_sensibilite381CALC-25-013,25,Rente foncière : perpétuelle ; Gordon ; bail 40 ans + réversion,analysis/python/cases/ch25_terrain.py,analysis/python/tests/test_ch25.py::TestRenteEtSynthese::test_rente,220 000 ; 366 667 ; 294 278 $,idem,verifie,2026-10-31382CALC-25-014,25,"Valeur du terrain retenue pour le sujet du cas 1 (= valeur extraite par le ch. 24, confirmée) et parts de la grille ch17 / prédiction hédonique",analysis/python/cases/ch25_terrain.py,analysis/python/tests/test_ch25.py::TestRenteEtSynthese::test_valeur_retenue,"277 000 $ (447 $/m²) ; 47,6 % ; 43,4 %",idem,verifie,2026-10-31383CALC-25-015,25,Exercices 25.1 à 25.7 (unités,allocation,extraction G0477,résiduelle,élasticité,lotissement 2 lots/an à 12 %,rente)384CALC-23-001,23,Cohérence avec le ch. 21 : D ; I ; E ; C_N du devis cas 1,analysis/python/cases/ch23_structure_couts.py,analysis/python/tests/test_ch23.py::TestStructure::test_coherence_ch21,298826.17 ; 62598.68 ; 36142.49 ; 397567.33,idem,verifie,2026-10-31385CALC-23-002,23,Structure complète des 38 postes (part du bloc et part de C_N ; somme des parts = 1),analysis/python/cases/ch23_structure_couts.py,analysis/python/tests/test_ch23.py::TestStructure::test_structure_complete,supervision 57.04 % de I ; 8.98 % de C_N,idem,verifie,2026-10-31386CALC-23-003,23,Ratios des 5 postes indirects (% D ; % D+I ; % C_N) et total hors supervision,analysis/python/cases/ch23_structure_couts.py,analysis/python/tests/test_ch23.py::TestStructure::test_ratios_indirects,20.95 ; 17.32 ; 15.75 % ; hors supervision 9.00 % de D,idem,verifie,2026-10-31387CALC-23-004,23,Coûts directs par nature dominante (convention du chapitre),analysis/python/cases/ch23_structure_couts.py,analysis/python/tests/test_ch23.py::TestStructure::test_parts_nature,mixte 64.5 % ; matériaux 21.7 % ; main-d'œuvre 7.8 % ; services 3.2 % ; équipement 2.8 %,idem,verifie,2026-10-31388CALC-23-005,23,Taux documentés BdC lus dans data/raw (affiché 5 ans ; fonds avancés août 2026),analysis/python/cases/ch23_structure_couts.py,analysis/python/tests/test_ch23.py::TestFinancement::test_taux_documentes,6.19 % ; 4.58 / 4.34 / 3.90 / 4.19 %,idem,verifie,2026-10-31389CALC-23-006,23,Formules d'intérêts intérimaires (continu L·i·T/2 ; mensuel ×(n+1)/n ; capitalisé ; mise de fonds d'abord ; i·T implicite),analysis/python/traite/finance.py,analysis/python/tests/test_ch23.py::TestFinancement::test_formules_interets,identités exactes,idem,verifie,2026-10-31390CALC-23-007,23,Vérification du forfait de financement du cas 1 (base hors financement ; intérêts 6 mois à 6.19 % ; i·T implicite ; durée implicite),analysis/python/cases/ch23_structure_couts.py,analysis/python/tests/test_ch23.py::TestFinancement::test_financement_cas1,352895.22 ; 5461.05 / 6371.23 / 6426.29 ; 0.04834 ; 9.4 mois ; C_N 394191.90,idem,verifie,2026-10-31391CALC-23-008,23,Grille intérêts durée × taux et C_N correspondant (linéarité),analysis/python/cases/ch23_structure_couts.py,analysis/python/tests/test_ch23.py::TestFinancement::test_grille,3529 → 23820 $ ; C_N 392067 → 414387 $,idem,verifie,2026-10-31392CALC-23-009,23,Taxes de vente par profil (TPS 5 % ; TVQ 9.975 % ; remboursements RC4028) sur 577567 $,analysis/python/cases/ch23_structure_couts.py,analysis/python/tests/test_ch23.py::TestTaxes::test_profils,86491 (14.98 %) ; 57612 (9.98 %) ; 0 ; TTC 664058 / 635180 / 577567,idem,verifie,2026-10-31393CALC-23-010,23,Remboursements TPS (général et premiers acheteurs) et TVQ aux seuils ; interpolation linéaire signalée,analysis/python/cases/ch23_structure_couts.py,analysis/python/tests/test_ch23.py::TestTaxes::test_remboursements,6120 (340 k$) ; 6300 (350 k$) ; 3150 (400 k$) ; 0 (450 k$) ; 4987.50 TVQ (250 k$),idem,verifie,2026-10-31394CALC-23-011,23,Marges (m_p = m_c/(1+m_c)) ; rendement implicite du capital ; transmission salariale,analysis/python/traite/finance.py;analysis/python/cases/ch23_structure_couts.py,analysis/python/tests/test_ch23.py::TestIncitatif,9.09 % ; 13.4 %/an (9 mois) ; ΔD 8367/9562/11953 $,idem,verifie,2026-10-31395CALC-23-012,23,IPCB par région et type (T3 2025 ; T3 2026 ; var. a/a ; var. depuis T1 2020 ; couverture Québec 2023T1),analysis/python/cases/ch23_structure_couts.py,analysis/python/tests/test_ch23.py::TestIPCB,Montréal rés. 108.5→117.8 (+8.57 % ; +62.0 %) ; Québec +9.2 % ; O-G ont. +4.6 % ; composite +2.7 % ; pic 18.9 % 2022T1,idem,verifie,2026-10-31396CALC-23-013,23,IPCB Montréal maison individuelle par division (var. 2020T1-2022T4 et a/a),analysis/python/cases/ch23_structure_couts.py,analysis/python/tests/test_ch23.py::TestIPCB::test_divisions,bois +85.1 % / +8.7 % ; béton +29.0 % / +15.4 % ; agrégat +36.0 % / +8.6 %,idem,verifie,2026-10-31397CALC-23-014,23,Transposition multilogement cas 3 (hypothèses déclarées) : D ; I ; E ; C_N ; par logement ; par m² ; variante 18 mois 7 %,analysis/python/cases/ch23_structure_couts.py,analysis/python/tests/test_ch23.py::TestMultilogement::test_cas3,1552717.60 ; 312868.76 ; 186558.64 ; 2052145.00 ; 171012 ; 2487/2114 ; 2076595.18,idem,verifie,2026-10-31398CALC-23-015,23,Tornade du coût neuf (durée ; taux ; indirects ; salaires ; incitatif),analysis/python/cases/ch23_structure_couts.py,analysis/python/tests/test_ch23.py::TestSensibilite::test_tornade,394192-406206 ; 395948-405653 ; 381132-414003 ; 397567-408086 ; 379496-415639,idem,verifie,2026-10-31399CALC-23-016,23,Exercices 23.1 à 23.7 (solutions),analysis/python/tests/test_ch23.py,analysis/python/tests/test_ch23.py::TestExercices,voir solutions/ch23.tex,idem,verifie,2026-10-31400CALC-24-001,24,"Âges du sujet : chronologique 28, effectif structure 29 (convention ch. 11), vie restante 31, indice d'état 2,809, âge effectif pondéré 32,8",analysis/python/cases/ch24_depreciation.py,analysis/python/tests/test_ch24.py::TestAges,28 ; 29 ; 31 ; 2.809 ; 32.8,idem,verifie,2026-10-31401CALC-24-002,24,"Âge-vie simple (28/60 et 29/60), âge-vie modifiée (curable 10 479,98 + reste × 29/60)",analysis/python/cases/ch24_depreciation.py,analysis/python/tests/test_ch24.py::TestPhysique::test_quatre_lectures,185531.42 (46.67 %) ; 192157.55 (48.33 %) ; 197572.20 (49.70 %),idem,verifie,2026-10-31402CALC-24-003,24,Dépréciation ventilée (import ch11_inspection) : curable + 18 composantes + longue durée ; identité de base et proposition d'écart,analysis/python/cases/ch24_depreciation.py,analysis/python/tests/test_ch24.py::TestPhysique,10479.98 + 130584.55 + 80025.35 = 221089.88 (55.61 %) ; base longue 165569.69 ; écart vs âge-vie 28932.33,idem,verifie,2026-10-31403CALC-24-004,24,"Désuétude fonctionnelle curable (salle d'eau) : 16 000 − coût à neuf 8 394,69 (direct 6 309,76 × 1,33043)",analysis/python/cases/ch24_depreciation.py,analysis/python/tests/test_ch24.py::TestDesuetudes::test_salle_eau,7605.31,7605.31,verifie,2026-10-31404CALC-24-005,24,"Exemples incurables : 75 $/mois × (12 × 19,82) ; 6 000/0,045 × 0,70 ; paires (520 000 − 490 000) × 0,60",analysis/python/cases/ch24_depreciation.py,analysis/python/tests/test_ch24.py::TestDesuetudes::test_exemples,17838.00 ; 133333.33 → 93333.33 ; 18000,idem,verifie,2026-10-31405CALC-24-006,24,"Valeur du terrain par secteur extraite des ventes ≤ 10 ans (600 ventes, prix ramenés au 2026-09-01, C_N transposé) ; Hull médiane → V_L retenue",analysis/python/cases/ch24_depreciation.py,analysis/python/tests/test_ch24.py::TestExtraction::test_valeur_terrain,"Hull 276953.99 (13 ventes, 50,5 %) → 277 000 $ (447 $/m²) ; Aylmer 321579 ; Gatineau 270089 ; Buckingham 182678 ; Masson-Angers 175657",idem,verifie,2026-10-31406CALC-24-007,24,Extraction D = C_N − (P_adj − V_L) sur 600 ventes ; médianes par tranche ; ajustements linéaire / quadratique / origine,analysis/python/cases/ch24_depreciation.py,analysis/python/tests/test_ch24.py::TestExtraction,tranches 3.8/14.3/19.2/24.4/30.5/33.1/40.3 % ; 0.0878+0.00447a (R² 0.228) ; 0.0107+0.00891a−0.0000514a² (R² 0.250) ; 0.619 %/an → 162 ans ; δ(28) = 22.00 %,idem,verifie,2026-10-31407CALC-24-008,24,"Profils : prix neuf hédonique du sujet, α, hédonique total/bâtiment et générateur total/bâtiment à 28 ans",analysis/python/cases/ch24_depreciation.py,analysis/python/tests/test_ch24.py::TestProfils,720727 $ ; α 0.384 ; 11.48 → 18.65 % ; 12.23 → 19.86 %,idem,verifie,2026-10-31408CALC-24-009,24,"Valeur par le coût : (A) ventilée 277 000 + 397 567,33 − 221 089,88 − 7 605,31 ; (B) extraction D = 22,00 % × C_N = 87 461,05",analysis/python/cases/ch24_depreciation.py,analysis/python/tests/test_ch24.py::TestValeur::test_deux_lectures,A 445872.14 (57.52 %) ; B 579500.97 → 580 000 $ (D 95066.36 = 23.91 % ; contribution 302500.97) ; écart 133628.83,idem,verifie,2026-10-31409CALC-24-010,24,Erreur d'ordre : désuétude externe 10 % sur C_N vs sur base restante,analysis/python/cases/ch24_depreciation.py,analysis/python/tests/test_ch24.py::TestValeur::test_ordre_externe,39756.73 vs 30250.10 ; écart 9506.64,idem,verifie,2026-10-31410CALC-24-011,24,Grille âge-vie modifiée (vie 50-100 × âge effectif 20-37) ; variantes d'extraction ; tornade,analysis/python/cases/ch24_depreciation.py,analysis/python/tests/test_ch24.py::TestSensibilite,22.1-74.7 % ; δ(28) 19.68-27.20 % ; terrain ±15 % → 537951-621051 ; indice → 554944-606170 ; extraction → 558807-588716 ; ventilée → 445872,idem,verifie,2026-10-31411CALC-24-012,24,Exercices 24.1 à 24.7 (solutions),analysis/python/tests/test_ch24.py,analysis/python/tests/test_ch24.py::TestExercices,voir solutions/ch24.tex,idem,verifie,2026-10-31412CALC-26-001,26,"RBP contractuel / au marché / écart du cas 3 (traite.cas3.revenus ; identiques aux ch. 2, 27, 29, 30, 47)",analysis/python/cases/ch26_etat_locatif.py (indicateurs),analysis/python/tests/test_ch26.py::test_valeurs_citees_etat_locatif,165 540 / 186 036 / 20 496 $,165 540 / 186 036 / 20 496 $,verifie,2026-10-31413CALC-26-002,26,Écart moyen pondéré δ̄ = Σ(Lm−Lc)/ΣLm ; ratio pondéré ; moyenne simple des ratios,analysis/python/cases/ch26_etat_locatif.py (indicateurs),analysis/python/tests/test_ch26.py::test_valeurs_citees_etat_locatif,"11,02 % ; 0,890 ; 0,884","11,02 % ; 0,890 ; 0,884",verifie,2026-10-31414CALC-26-003,26,Part des baux sous le marché à 5 / 10 / 20 % (nombre de logements) ; concentration de l'écart sur 3 baux,analysis/python/cases/ch26_etat_locatif.py (indicateurs),analysis/python/tests/test_ch26.py::test_valeurs_citees_etat_locatif,"8 / 6 / 2 (66,7 / 50,0 / 16,7 %) ; 44,2 %","8 / 6 / 2 ; 44,2 %",verifie,2026-10-31415CALC-26-004,26,Ancienneté moyenne / médiane / max ; écart mensuel moyen ; loyers moyens contrat / marché ; $/m² contrat / marché ; mois avant échéance,analysis/python/cases/ch26_etat_locatif.py (tableau_etat/indicateurs),analysis/python/tests/test_ch26.py::test_valeurs_citees_etat_locatif,"6,33 / 6,5 / 18 ans ; 142,33 $ ; 1 149,58 / 1 291,92 $ ; 16,72 / 18,79 $/m² ; 9,9 mois",identiques,verifie,2026-10-31416CALC-26-005,26,"Durée espérée d'occupation E[n] = 1/ρ pour ρ = 8,5 / 9,4 / 15 / 13 %",analysis/python/cases/ch26_etat_locatif.py (esperance_duree),analysis/python/tests/test_ch26.py::test_survie_et_duree,"11,76 / 10,64 / 6,67 / 7,69 ans","11,76 / 10,64 / 6,67 / 7,69 ans",verifie,2026-10-31417CALC-26-006,26,"VA espérée de l'écart par logement Δ₁/(r−g+ρ(1+g)) (Δ₁ net de 3,9 %) ; totaux à ρ = 8,5 / 9,4 / 15 % et sans rotation ; logement 103 et 104",analysis/python/cases/ch26_etat_locatif.py (va_ecart_logements),analysis/python/tests/test_ch26.py::test_valeurs_citees_va_et_sensibilite,156 977 / 146 128 / 102 188 / 525 244 $ ; 103 : 29 318 / 27 292 / 19 085 / 98 099 $ ; 104 : 1 316 $ (15 %),identiques (±1 $),verifie,2026-10-31418CALC-26-007,26,Cohérence avec le chapitre 2 : Σ VA par logement à ρ = 15 % = 102 188 $ ; sans rotation 525 244 $ ; Δ₁ net total 19 697 $ ; formule fermée = série explicite,analysis/python/cases/ch26_etat_locatif.py,analysis/python/tests/test_ch26.py::test_coherence_chapitre_2 ; ::test_formule_fermee_egale_serie,102 188 ; 525 244 ; 19 697 $,102 188 ; 525 244 ; 19 697 $,verifie,2026-10-31419CALC-26-008,26,"Sensibilité : VA agrégée pour ρ ∈ {5, 8,5, 9,4, 15, 25 %} × r ∈ {6,25, 7,25, 8,25 %} (g 3,5 %) et × g ∈ {2,5, 3,5, 4,5 %} (r 7,25 %)",analysis/python/cases/ch26_etat_locatif.py (sensibilite_va),analysis/python/tests/test_ch26.py::test_valeurs_citees_va_et_sensibilite,tableau 26.7 du chapitre (p. ex. 220 691 ; 66 487 ; 107 779 ; 97 148 ; 97 872 ; 106 902 $),identiques (±1 $),verifie,2026-10-31420CALC-26-009,26,"Loyer économique sur la valeur au rôle 2 200 000 $ (R médian 4,415 %) : RNE*, DE hors gestion, RBE*, RBP*, loyer mensuel ; identité sur la valeur par capitalisation (= loyer contractuel)",analysis/python/cases/ch26_etat_locatif.py (loyer_economique),analysis/python/tests/test_ch26.py::test_loyer_economique_identite ; ::test_valeurs_citees_economique_normalisation,"97 130 ; 63 647,43 ; 175 917 ; 173 316 $ ; 1 203,59 $/mois ; identité 1 149,58 $",identiques,verifie,2026-10-31421CALC-26-010,26,"Tarif D 2026 : coût mensuel par mois (redevance 0,46154 $/j ; 7,065 ¢ ≤ 40 kWh/j ; 11,142 ¢ au-delà) pour le profil 12 000 kWh ; coût annuel, moyenne mensuelle, part redevance, kWh en T2, mois > seuil ; loyer nu 1 450 − moyenne ; indexation 3 %",analysis/python/cases/ch26_etat_locatif.py (normalisation_electricite),analysis/python/tests/test_ch26.py::test_tarif_d_structure ; ::test_valeurs_citees_economique_normalisation,"1 073,34 $ ; 89,45 $ ; 15,7 % ; 1 400 kWh ; 3 mois ; 1 360,55 $ ; 92,13 $ ; janvier 175,45 $ ; juillet 49,63 $",identiques,verifie,2026-10-31422CALC-26-011,26,"Calendrier des avis (bail 2026-07-01 → 2027-06-30 ; bail de 6 mois → 2026-12-31) : fenêtre d'avis, réponse, demande TAL, reprise, nouveau locataire 10 j / 2 mois",analysis/python/cases/ch26_etat_locatif.py (calendrier),analysis/python/tests/test_ch26.py::test_calendrier,2026-12-30 → 2027-03-30 ; 2027-04-30 ; 2027-05-30 ; 2026-12-30 ; 2027-07-11 ; 2027-09-01,identiques,verifie,2026-10-31423CALC-26-012,26,Indemnité d'éviction minimale du logement 103 (18 ans × 728 $),calcul direct dans le texte (éq. indemnite),—,13 104 $,13 104 $,verifie,2026-10-31424CALC-26-013,26,"Cas 2 : RBP contrat / marché / écart ; écart pondéré ; ancienneté moyenne ; baux > 10 % sous le marché ; RC 383 $ (ratio 0,732) ; RBE",analysis/python/cases/ch26_etat_locatif.py (cas2_etat ; traite.cas2.revenus),analysis/python/tests/test_ch26.py::test_valeurs_citees_cas2,"41 832 / 49 332 / 7 500 $ ; 15,2 % ; 4,0 ans ; 2 ; 40 577,04 $",identiques,verifie,2026-10-31425CALC-26-014,26,"Perte d'une année d'indexation à 3,1 % sur 165 540 $ (≈ 5 100 $) ; VA de l'écart RC du cas 2 à ρ = 13 % (≈ 26 000 $)",calcul direct (165 540 × 0,031 = 5 132 $ ; 12×383×0,97/(0,0725−0,035+0,13×1426CALC-26-015,26,"Exercices 26.1 à 26.7 (toutes les valeurs des solutions : calendrier, indicateurs 6 logements, normalisation 14 000 kWh, VA logement 103, loyer économique triplex, art. 1955, bail commercial)",analysis/python/cases/ch26_etat_locatif.py (exercices),analysis/python/tests/test_ch26.py::test_exercices,voir solutions/ch26.tex,"identiques (tolérances 1 $ / 0,01 $ / 5e-5)",verifie,2026-10-31427CALC-27-001,27,RBP contractuel du cas 3 (12 baux × 12 ; 13 795 $/mois),analysis/python/cases/ch27_revenus.py (traite.cas3.revenus),analysis/python/tests/test_ch27.py::test_valeurs_citees_cas3,165540,165540.00,verifie,2026-10-31428CALC-27-002,27,RBP au marché du cas 3 (15 503 $/mois × 12) et déficit de loyer,analysis/python/cases/ch27_revenus.py,analysis/python/tests/test_ch27.py::test_valeurs_citees_cas3,186036 ; 20496 (11,02 %),186036.00 ; 20496.00 (0.1102),verifie429CALC-27-003,27,"Provision inoccupation et pertes 3,9 % du RBP contractuel ; loyers effectifs",analysis/python/cases/ch27_revenus.py,analysis/python/tests/test_ch27.py::test_valeurs_citees_cas3,6456.06 ; 159083.94,6456.06 ; 159083.94,verifie,2026-10-31430CALC-27-004,27,RBE cas 3 = RBP(1−v) + autres 9 360 $ ; RBE/RBP ; par logement ; par m²,analysis/python/cases/ch27_revenus.py (traite.finance.revenu_brut_effectif),analysis/python/tests/test_ch27.py::test_valeurs_citees_cas3,168443.94 ; 1,0175 ; 14037 ; 204,17,168443.94 ; 1.0175 ; 14037.00 ; 204.17431CALC-27-005,27,Taux d'occupation économique cas 3 = (1−v)·RBP_c/RBP_m,analysis/python/cases/ch27_revenus.py,analysis/python/tests/test_ch27.py::test_valeurs_citees_cas3,0,8551,0.8551,verifie432CALC-27-006,27,"Variantes de convention : v sur tous les revenus (−365,04 $) ; RBE aux loyers de marché",analysis/python/cases/ch27_revenus.py,analysis/python/tests/test_ch27.py::test_valeurs_citees_cas3,168078.90 ; 188140.60,168078.90 ; 188140.60,verifie,2026-10-31433CALC-27-007,27,"Décomposition déclarée de v : frictionnel 15 % × 1/12 = 1,25 % ; résiduel 2,65 %",analysis/python/cases/ch27_revenus.py (traite.finance.taux_vacance_frictionnelle),analysis/python/tests/test_ch27.py::test_valeurs_citees_cas3,0,0125 ; 0,0265,0.0125 ; 0.0265434CALC-27-008,27,"État locatif par type (3½ : 15,8 % ; 4½ : 11,1 % ; 5½ : 4,9 % ; total 11,0 % ; ancienneté 9,0/5,8/2,5/6,3 ans)",analysis/python/cases/ch27_revenus.py (par_type_cas3),analysis/python/tests/test_ch27.py::test_par_type_cas3,15.76;11.07;4.93;11.02,15.76;11.07;4.93;11.02,verifie,2026-10-31435CALC-27-009,27,"Cas 2 : RBP 41 832 ; marché 49 332 ; déficit 7 500 (15,2 %) ; provision 3 % ; RBE ; RBE marché ; θ ; variante occupant",analysis/python/cases/ch27_revenus.py (traite.cas2.revenus),analysis/python/tests/test_ch27.py::test_cascade_cas2,41832;49332;7500;1254.96;40577.04;47852.04;0.8225;40953.96,idem,verifie,2026-10-31436CALC-27-010,27,"Lecture SCHL : inoccupation et rotation par RMR 2024/2025 (tableaux 1.1.1 et 1.1.6, fichier Québec)",analysis/python/cases/ch27_revenus.py (schl_inoccupation_rmr; schl_rotation_rmr),analysis/python/tests/test_ch27.py::test_schl_lectures,"Mtl 2,1/2,9 ; 11,1/9,4 ; Qc 0,9/2,4 ; 13,9/13,0 ; Gat 1,9/3,8 ; 17,3/16,2 ; Sher 1,4/2,7 ; 10,4/12,0 ; T-R 0,9/2,7 ; 10,2/10,1 ; Sag 1,6/1,3 ; 13,3/12,6",idem,verifie,2026-10-31437CALC-27-011,27,"Lecture SCHL : inoccupation et rotation selon la taille (RMR et île de Montréal, tableaux 1.3.1 et 1.3.4)",analysis/python/cases/ch27_revenus.py (schl_taille_montreal),analysis/python/tests/test_ch27.py::test_schl_lectures,"île 2,3/2,2/3,9/3,8/5,1/3,1 ; RMR 2,1/2,1/3,4/3,7/5,7/2,9 ; rotation RMR 7,6/8,5/9,4/12,3/14,2/9,4",idem,verifie,2026-10-31438CALC-27-012,27,"Lecture SCHL : quartiles (RMR : 1,3/1,9/3,0/4,9), loyers inoccupés/occupés île (1 573/1 275 ; 2 ch. 1 815/1 349), année de construction île (2015+ : 5,6)",analysis/python/cases/ch27_revenus.py,analysis/python/tests/test_ch27.py::test_schl_lectures,idem,idem,verifie,2026-10-31439CALC-27-013,27,"IPC loyer Québec (18-10-0004-01) : sept. 2026 174,2 / sept. 2025 168,6 = +3,32 % ; TCAC 10 ans 4,02 % ; 5 ans 6,49 %",analysis/python/cases/ch27_revenus.py (ipc_loyer_quebec),analysis/python/tests/test_ch27.py::test_ipc_loyer,3.32 ; 4.02,3.32 ; 4.02,verifie,2026-10-31440CALC-27-014,27,"Grille frictionnelle v_f = ρ·d/12 (ρ 5-25 %, d 0,5-3 mois)",analysis/python/cases/ch27_revenus.py (grille_frictionnelle),analysis/python/tests/test_ch27.py::test_grille_et_sensibilite,"9,4 %×1 mois = 0,78 ; 13 %×2 = 2,17 ; 15 %×1 = 1,25",idem,verifie,2026-10-31441CALC-27-015,27,"Sensibilité à v (R = 4,415 %) : RBE, RNE, valeur pour v = 2,0/2,9/3,9/5,0/6,0/8,0 % ; pentes −1 655,40 / −1 589,18 / −35 995,11 $ par point",analysis/python/cases/ch27_revenus.py (sensibilite_v ; traite.cas3.rne),analysis/python/tests/test_ch27.py::test_grille_et_sensibilite,"V(2,9) 2073497.99 ; V(3,9) 2037502.89 ; V(8) 1889922.94",idem,verifie,2026-10-31442CALC-27-016,27,"Trajectoires RBP : TAL seul, rotation 9,4 %, rotation 15 %, marché ; RBP année 10 ; TCAC ; sommes ; valeurs DCF",analysis/python/cases/ch27_revenus.py (trajectoires_cas3 ; traite.cas3.projection_dcf ; valeur_dcf),analysis/python/tests/test_ch27.py::test_trajectoires,"217886.81/247211.89/251101.39/253547.97 ; 3,10/4,56/4,74/3,50 % ; V_DCF 1756414.23/2140916.43/2208565.91",idem,verifie,2026-10-31443CALC-27-017,27,"Cohérence inter-chapitres : RBE, RBP, projection de base et V_DCF = traite.cas3.tout() (ch. 29, 30, 47)",analysis/python/cases/ch27_revenus.py,analysis/python/tests/test_ch27.py::test_cascade_cas3_identites;test_trajectoires,égalité à 1e-12,égalité,verifie,2026-10-31444CALC-27-018,27,"Exercices 27.1-27.8 (RBP 78 360/87 000 ; RBE 80 025,60/79 833,60/79 929,60 ; v_f Québec 1,083/1,625 % ; concession 1 191,67 ; cas 2 ; mini-projection 47 400→62 177,79 ; V(2,9)/V(5,9) ; ratios SCHL 1,234/1,345/3,77)",analysis/python/cases/ch27_revenus.py (exercices ; mini_projection),analysis/python/tests/test_ch27.py::test_exercices;test_mini_projection,voir solutions/ch27.tex,idem,verifie,2026-10-31445CALC-27-019,27,"Nouvelles fonctions de bibliothèque : traite.finance.taux_vacance_frictionnelle, loyer_effectif_concession (identités : linéarité, 12 mois = ρ, 1/12 ≡ 2/24, erreurs sur arguments négatifs)",analysis/python/traite/finance.py,analysis/python/tests/test_ch27.py::test_vacance_frictionnelle_identites;test_loyer_effectif_concession,identités vraies,identités vraies,verifie,2026-10-31446CALC-32-001,32,"RBP contractuel du cas 2 (3 baux × 12) et RBP aux loyers de marché ; écart 7 500 $ (15,2 %) ; loyer relatif ρ_s",analysis/python/cases/ch32_plex.py (traite.cas2.revenus),analysis/python/tests/test_ch32.py::test_coherence_cas2_partage,41832;49332;0.848,41832.00;49332.00;0.8480,verifie,2026-10-31447CALC-32-002,32,"RBE = RBP(1−3 %) ; dépenses normalisées (gestion imputée 4 % du RBE = 1 623,08 $ ; réserve 1 800 $) ; RNE normalisé ; ratio 45,7 %",analysis/python/cases/ch32_plex.py (traite.cas2.rne),analysis/python/tests/test_ch32.py::test_coherence_cas2_partage,40577.04;18543.08;22033.96;0.457,40577.04;18543.08;22033.9584;0.4570,verifie,2026-10-31448CALC-32-003,32,"RNE aux loyers de marché (mêmes dépenses, gestion 4 % du RBE de marché)",analysis/python/cases/ch32_plex.py::calculer,analysis/python/tests/test_ch32.py::test_sensibilite,29017.96,29017.96,verifie,2026-10-31449CALC-32-004,32,"Indicateurs des 127 ventes (60 duplex, 67 triplex, 4 quartiers, 24 mois) : MRB médian 19,68 (triplex 19,82), taux médian 3,17 % (Q1 2,76, Q3 3,62), prix/logement 285 667 $ (triplex 281 000 $), prix/m² 3 200 $",analysis/python/cases/ch32_plex.py (traite.cas2.indicateurs_marche),analysis/python/tests/test_ch32.py::test_valeurs_citees_indicateurs,127;19.82;0.0317;281000,127;19.82;0.0317;281000,verifie,2026-10-31450CALC-32-005,32,Indicateurs médians par taille et par quartier (tableau 32.3),analysis/python/cases/ch32_plex.py::indicateurs_par_groupe,analysis/python/tests/test_ch32.py::test_valeurs_citees_indicateurs,duplex 583 500 $ / triplex 843 000 $ ; Limoilou 718 000 $,583500;843000;718000,verifie,2026-10-31451CALC-32-006,32,"Identité R = (1−v)(1−d)/MRB sur chaque vente (v = 2,4 %, d = ratio de la vente)",analysis/python/cases/ch32_plex.py::decomposition_taux,analysis/python/tests/test_ch32.py::test_identite_mrb_taux,écart max < 2e-4,< 2e-4,verifie,2026-10-31452CALC-32-007,32,"Décomposition R_c = ρ R_m (dépenses proportionnelles) ; taux au marché médian 3,41 % vs 3,17 % au contrat ; ρ médian 0,947 ; MRB marché médian 18,33",analysis/python/cases/ch32_plex.py::decomposition_taux,analysis/python/tests/test_ch32.py::test_decomposition_rho,0.0341;0.0317;0.947,0.0341;0.0317;0.9468,verifie,2026-10-31453CALC-32-008,32,"Régression taux = a + b(ρ−1) sur 127 ventes : a = 3,451 %, b = 0,0284, R² 0,071, σ 0,685 % ; avec état et taille : a 3,426 %, b_ρ 0,0302, b_état −0,0007, b_n −0,0006, R² 0,080 ; ln MRB = 2,9109 − 0,9564(ρ−1), R² 0,108",analysis/python/cases/ch32_plex.py::regression_taux_loyer_relatif,analysis/python/tests/test_ch32.py::test_valeurs_citees_regression_et_indications,0.03451;0.0284;-0.9564,0.034514;0.02838;-0.9564,verifie,2026-10-31454CALC-32-009,32,"Indications brutes des 127 ventes : MRB 829 110,24 $ ; capitalisation 695 077,55 $ ; par logement 843 000 $ ; au m² 838 400 $ (identiques à traite.cas2.tout, ch. 46)",analysis/python/cases/ch32_plex.py::indications,analysis/python/tests/test_ch32.py::test_valeurs_citees_indicateurs,829110.24;695077.55;843000;838400,829110.24;695077.55;843000.00;838400.00,verifie,2026-10-31455CALC-32-010,32,"Taux ajusté au loyer relatif du sujet 3,02 % → V_cap 729 549 $ ; MRB ajusté 21,25 → 888 878 $",analysis/python/cases/ch32_plex.py::indications,analysis/python/tests/test_ch32.py::test_valeurs_citees_regression_et_indications,0.0302;729549;888878,0.030202;729549.19;888877.79,verifie,2026-10-31456CALC-32-011,32,"Sélection de 5 comparables triplex Limoilou parmi 28 candidats par distance d'attributs (6 caractéristiques, échelles et poids déclarés) : Q0187, Q0222, Q0243, Q0207, Q0235",analysis/python/cases/ch32_plex.py::selection_comparables (traite.comparables.distance_attributs),analysis/python/tests/test_ch32.py::test_comparables_selection,28 candidats ; 5 retenus,28;5,verifie,2026-10-31457CALC-32-012,32,"Médianes des 5 comparables : prix/logement 306 000 $, MRB 22,05, taux 2,97 %, prix/m² 3 352,73 $ → indications 918 000 $, 922 395,60 $, 741 884 $, 878 415 $",analysis/python/cases/ch32_plex.py::indications,analysis/python/tests/test_ch32.py::test_valeurs_citees_regression_et_indications,918000;922396;741884;878415,918000;922395.60;741884.12;878414.55,verifie,2026-10-31458CALC-32-013,32,"Indication pondérée 0,40 × 918 000 + 0,35 × 922 396 + 0,25 × 729 549 = 872 425,76 $ ≈ 870 000 $ ; taux implicite 2,53 % ; MRB implicite 20,86 ; 290 809 $/log. ; 3 330 $/m² ; +76,2 % vs rôle 495 000 $",analysis/python/cases/ch32_plex.py::indications,analysis/python/tests/test_ch32.py::test_valeurs_citees_regression_et_indications,872426;870000;0.0253;20.86,872425.76;870000;0.02526;20.855,verifie,2026-10-31459CALC-32-014,32,"Explication de l'écart capitalisation/comparaison : RNE au ratio médian des ventes (35,7 %) 26 091 $ → 863 880 $ ; indexation du prix/logement des 127 ventes (ancienneté médiane 11,3 mois, 7,29 %/an) → 900 926 $",analysis/python/cases/ch32_plex.py::indications,analysis/python/tests/test_ch32.py::test_valeurs_citees_regression_et_indications,863880;900926,863879.94;900926.12,verifie,2026-10-31460CALC-32-015,32,"Prime d'occupation (R* = 5,00 %, borne basse CBRE Québec basse hauteur B) : 440 679 $ + 139 680 $ + 292 067 $ (33,5 %) = 872 426 $ ; en taux : 5,00 → R_m 3,33 % → R_c 2,53 %",analysis/python/cases/ch32_plex.py::prime_occupant,analysis/python/tests/test_ch32.py::test_prime_occupant,440679.17;139680;292067;0.335,440679.17;139680.00;292066.59;0.3348,verifie,2026-10-31461CALC-32-016,32,Mise de fonds minimale assurée (Finances Canada 2024) : 450 000 → 22 500 ; 843 000 → 59 300 ; 870 000 → 62 000 ; 1 200 000 → 95 000 ; 1 500 000 → 125 000 ; 1 600 000 → non assurable,analysis/python/cases/ch32_plex.py::mise_de_fonds_minimale_assuree,analysis/python/tests/test_ch32.py::test_mise_de_fonds_minimale,22500;59300;62000;95000;125000;NaN,22500;59300;62000;95000;125000;nan,verifie,2026-10-31462CALC-32-017,32,"Financement de l'acheteur-occupant : prêt 808 000 $ (RPV 92,9 %), 4,12 % composé semestriellement, 300 mois → 4 302,97 $/mois, 51 635,62 $/an, constante 6,39 % ; intérêts an 1 32 654,64 $, capital an 1 18 980,98 $ ; solde après 60 mois 704 858,60 $ ; TAM 6,12 % → 5 227,41 $/mois",analysis/python/cases/ch32_plex.py::financement_occupant (traite.finance.Hypotheque),analysis/python/tests/test_ch32.py::test_financement_occupant,4302.97;51635.62;5227.41;704858.60,4302.9687;51635.6243;5227.4114;704858.6046,verifie,2026-10-31463CALC-32-018,32,"Coût net d'occupation (reprise du RC) : 51 635,62 + 16 920 + 2 219,60 − 28 389,96 = 42 385,26 $/an = 3 532,11 $/mois ; hors capital (−1 719,02) 1 813,08 $/mois vs loyer de marché 1 430 $ (+26,8 %)",analysis/python/cases/ch32_plex.py::cout_occupation,analysis/python/tests/test_ch32.py::test_financement_occupant,42385.26;3532.11;1813.08,42385.2643;3532.1054;1813.0821,verifie,2026-10-31464CALC-32-019,32,"Sensibilité au loyer relatif (ρ 0,85/0,90/0,95/1,00) : V_cap taux ajusté 731 244 / 771 019 / 807 385 / 840 764 ; V_cap taux médian 698 021 / 770 478 / 842 936 / 915 393 ; V_MRB 924 605 / 978 994 / 1 033 382 / 1 087 771 ; écart 74 629 $ à ρ = 1",analysis/python/cases/ch32_plex.py::sensibilite,analysis/python/tests/test_ch32.py::test_sensibilite,monotonie ; RNE(ρ=1) = RNE marché,ok,verifie,2026-10-31465CALC-32-020,32,"Sensibilité au taux (2,50 → 4,00 % par 25 pb) : 881 358 ; 801 235 ; 734 465 ; 677 968 ; 629 542 ; 587 572 ; 550 849 $",analysis/python/cases/ch32_plex.py::sensibilite,analysis/python/tests/test_ch32.py::test_sensibilite,V = RNE/R,ok,verifie,2026-10-31466CALC-32-021,32,"Scénarios de financement (tableau 32.8 C) : 30 ans 3 897,25 $/mois ; MF 10 % 4 169,83 ; non assuré 20 % à 4,58 % 3 883,19 (hors capital 2 044,28) ; +100 pb 4 754,72 (2 458,56) ; +200 pb 5 227,41 (3 108,26)",analysis/python/cases/ch32_plex.py::sensibilite,analysis/python/tests/test_ch32.py::test_sensibilite,ordre des coûts,ok,verifie,2026-10-31467CALC-32-022,32,"Élasticité de la valeur capitalisée aux loyers (dépenses fixes) = RBE/RNE = 40 577/22 034 = 1,84",analysis/python/cases/ch32_plex.py (calcul direct),—,1.84,1.8416,verifie,2026-10-31468CALC-32-023,32,"Contrôle investisseur : 80 % du prix (696 000 $) non assuré 4,58 %/25 ans → SD 46 598 $, RCD 0,47, flux −24 564 $",analysis/python/cases/ch32_plex.py (traite.finance.Hypotheque),—,46598;0.47;-24564,46598;0.473;-24564,verifie,2026-10-31469CALC-32-024,32,"Exercices 32.1 à 32.7 (MRB 18,75 ; mises de fonds ; décomposition 105,4 pb ; coût d'occupation 2e 3 668,88 $ ; régression ; pondérations 856 648 / 805 809 / 920 198 ; VA du manque à gagner 4 335,85 / 12 835,08 / 40 791,47 $)",analysis/python/cases/ch32_plex.py::exercices,analysis/python/tests/test_ch32.py::test_exercices,voir solutions/ch32.tex,ok,verifie,2026-10-31470CALC-25-016,25,"Rapprochement avec le ch. 24 (appel de ch24_depreciation.extraction) : 13 ventes récentes de Hull, médiane 276 954 $ → 277 000 $, part 50,5 % ; écarts : comparaison −3,5 % (0,60 écart-type pondéré), allocation +1,2 %, extraction marché −12,4 %, hédonique terrains −8,5 % ; médiane des trois indications = 277 000 $",analysis/python/cases/ch25_terrain.py,analysis/python/tests/test_ch25.py::TestRenteEtSynthese::test_rapprochement_ch24,277 000 $ confirmé,277 000 $ confirmé,verifie,2026-10-31471
Files · 774056809e670c3d870d087d88dfeb8a0dd87f8e
Menu

Theme