Ch. 25 livré et validé (compilation isolée, tests, fusion des registres)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
34 changed files +1,376 −6
modified
analysis/python/cases/ch33_six_logements.py
+6 −2
@@ -144,7 +144,11 @@ def unites_cas3(et: dict, valeur: float = V_FINALE_CH47) -> dict: | ||
| 144 | 144 | "m2_par_logement": m2 / n, "chambres_par_logement": chambres / n, "mrb": fin.multiplicateur_revenu_brut(valeur, rbp), |
| 145 | 145 | "mrb_marche": fin.multiplicateur_revenu_brut(valeur, base["rbp_marche"]), "taux_implicite": fin.taux_global_extrait(rne, valeur), |
| 146 | 146 | "rne_par_logement": rne / n, "loyer_moyen": float(etat["loyer_mensuel_contrat"].mean()), "loyer_moyen_m2": float((etat["loyer_mensuel_contrat"].sum()) / m2), |
| 147 | − "valeur_cap": et["cas3_valeur_cap"], "valeur_cap_par_logement": et["cas3_valeur_cap"] / n} | |
| 147 | + "valeur_cap": et["cas3_valeur_cap"], "valeur_cap_par_logement": et["cas3_valeur_cap"] / n, | |
| 148 | + "mrb_cap": et["cas3_valeur_cap"] / rbp, | |
| 149 | + # proposition 33.1 : MRB = (1 - v)(1 - rho) / R, autres revenus négligés | |
| 150 | + "mrb_theorique": (1 - base["taux_vacance_pertes"]) * (1 - base["ratio_depenses"]) / et["cas3_mediane"], | |
| 151 | + "mrb_theorique_rho55": (1 - base["taux_vacance_pertes"]) * (1 - 0.55) / et["cas3_mediane"]} | |
| 148 | 152 | |
| 149 | 153 | |
| 150 | 154 | # ----------------------------------------------------------------------------- P45 : 36 logements à Gatineau |
@@ -308,7 +312,7 @@ def imprimer(R: dict) -> None: | ||
| 308 | 312 | print("\n=== Unités (cas 3, valeur finale ch. 47) ===") |
| 309 | 313 | print(f"V = {_d(u['valeur'])} ; {u['n']} log., {u['m2']:.0f} m², {u['chambres']} chambres → {_d(u['par_logement'])}/log., {_d(u['par_m2'])}/m², {_d(u['par_chambre'])}/chambre ; " |
| 310 | 314 | f"{u['m2_par_logement']:.1f} m²/log. ; {u['chambres_par_logement']:.2f} ch./log. ; MRB contrat {u['mrb']:.2f}, marché {u['mrb_marche']:.2f} ; taux implicite {_p(u['taux_implicite'])} ; " |
| 311 | − f"RNE/log. {_d(u['rne_par_logement'])} ; loyer moyen {_d(u['loyer_moyen'])}/mois ; loyer {u['loyer_moyen_m2']:.2f} $/m²/mois ; V_cap {_d(u['valeur_cap'])} ({_d(u['valeur_cap_par_logement'])}/log.)") | |
| 315 | + f"MRB théorique (prop. 33.1) {u['mrb_theorique']:.2f} (ρ = 55 % : {u['mrb_theorique_rho55']:.2f}) ; MRB de V_cap {u['mrb_cap']:.2f} ; RNE/log. {_d(u['rne_par_logement'])} ; loyer moyen {_d(u['loyer_moyen'])}/mois ; loyer {u['loyer_moyen_m2']:.2f} $/m²/mois ; V_cap {_d(u['valeur_cap'])} ({_d(u['valeur_cap_par_logement'])}/log.)") | |
| 312 | 316 | p = R["p45"] |
| 313 | 317 | print(f"\n=== {p['id']} : {p['n']} logements, {p['rmr']}, {p['annee']} ({p['age']:.0f} ans), état {p['etat']} ===") |
| 314 | 318 | print(f"Loyer moyen {_d(p['loyer_moyen'])}/mois ; RBP {_d(p['rbp'])} ; ratio dépenses {_p(p['ratio_depenses'], 1)} ; inoccupation de marché {_p(p['inocc_marche'], 1)} ; RNE {_d(p['rne'])} ({_d(p['rne_par_logement'])}/log.)") |
added
analysis/python/cases/ch38_sig.py
+352 −0
@@ -0,0 +1,352 @@ | ||
| 1 | +#!/usr/bin/env python3 | |
| 2 | +"""Chapitre 38 — SIG et risques géospatiaux (cas 1 Gatineau et cas 4 portefeuille, DONNÉES SYNTHÉTIQUES, graine 20261031). | |
| 3 | + | |
| 4 | +Reproduit tous les chiffres cités dans manuscript/chapters/ch38.tex : | |
| 5 | + 1. systèmes de référence : projection des 600 ventes du cas 1 en NAD83 / MTM zone 9 (EPSG 32189) ; comparaison avec la | |
| 6 | + projection équirectangulaire locale du chapitre 19, le haversine et la géodésique WGS84 ; facteur d'échelle ; | |
| 7 | + 2. géométries FICTIVES déclarées : « cours d'eau fictif » et ses deux classes d'exposition (tampons), « corridor de | |
| 8 | + transport fictif » et ses tampons, trois « pôles » fictifs pour l'accessibilité ; | |
| 9 | + 3. opérations SIG : jointure spatiale (point dans polygone), tampons, distances (euclidienne, Manhattan, au corridor), | |
| 10 | + agrégation par cellule hexagonale, pondération surfacique, interpolation IDW ; | |
| 11 | + 4. accessibilité gravitaire (Hansen) ; | |
| 12 | + 5. intégration au modèle hédonique de référence (traite.cas1.hedonique) : variables d'exposition, de corridor et | |
| 13 | + d'accessibilité — l'effet attendu est NUL (le générateur ne contient pas ces variables) ; | |
| 14 | + 6. faux positifs spatiaux : polygones aléatoires et part de coefficients « significatifs » selon la spécification ; | |
| 15 | + 7. sensibilité au rayon du tampon et à la méthode de classification des cartes choroplèthes ; | |
| 16 | + 8. cas 4 : 48 immeubles par RMR, part de la valeur en zone inondable, coefficient « inondable » des effets régionaux. | |
| 17 | +Usage (racine du dépôt) : PYTHONPATH=analysis/python python3 analysis/python/cases/ch38_sig.py""" | |
| 18 | +from __future__ import annotations | |
| 19 | +import sys, pathlib, warnings | |
| 20 | +import numpy as np, pandas as pd | |
| 21 | +sys.path.insert(0, str(pathlib.Path(__file__).resolve().parents[1])) | |
| 22 | +from traite import cas1, cas4, geo | |
| 23 | +from traite import hedonique as h | |
| 24 | + | |
| 25 | +ROOT = pathlib.Path(__file__).resolve().parents[3] | |
| 26 | +GRAINE = 20261031 | |
| 27 | +EPSG_WGS84, EPSG_MTM9, EPSG_LAMBERT = 4326, 32189, 32198 | |
| 28 | +LON0_MTM9 = -76.5 # méridien central de la zone MTM 9 | |
| 29 | +RAYON_HEX_M = 1200.0 # rayon circonscrit des cellules hexagonales (m) ; aire ≈ 3,74 km² | |
| 30 | +MIN_VENTES_CELLULE = 5 | |
| 31 | +RAYONS_CORRIDOR_M = [100, 150, 200, 300, 400, 500, 750, 1000] | |
| 32 | +RAYON_CORRIDOR_REF_M = 300 | |
| 33 | +N_POLYGONES_ALEATOIRES = 500 | |
| 34 | +RAYONS_POLYGONES_KM = [0.5, 1.0, 2.0] | |
| 35 | +K_CLASSES = 5 | |
| 36 | +# géométries FICTIVES (coordonnées MTM zone 9, mètres) — aucune correspondance avec un cours d'eau ou une route réels | |
| 37 | +COURS_EAU_FICTIF = [(351000, 5028200), (358000, 5029000), (363500, 5029400), (369000, 5031200), (376000, 5033500), (384000, 5036800), (393000, 5039500)] | |
| 38 | +LARGEUR_CLASSE_A_M, LARGEUR_CLASSE_B_M = 350.0, 900.0 # classe A (intensité élevée) : ≤ 350 m ; classe B (modérée) : 350–900 m | |
| 39 | +CORRIDOR_FICTIF = [(359500, 5025500), (362500, 5030000), (365500, 5034500), (369500, 5040500), (373000, 5046000)] | |
| 40 | +MASSES_POLES = {"Pôle central": 100.0, "Pôle est": 40.0, "Pôle ouest": 30.0} | |
| 41 | +FRICTION = 0.25 # λ (par km) de l'indice gravitaire exponentiel | |
| 42 | + | |
| 43 | +_CACHE: dict = {} | |
| 44 | + | |
| 45 | + | |
| 46 | +def _gpd(): | |
| 47 | + import geopandas as gpd | |
| 48 | + return gpd | |
| 49 | + | |
| 50 | + | |
| 51 | +# ----------------------------------------------------------------------------- 1. projections | |
| 52 | + | |
| 53 | +def charger_base() -> dict: | |
| 54 | + """600 ventes du cas 1 et sujet en GeoDataFrame WGS84 → NAD83 / MTM zone 9 ; comparaisons de distances.""" | |
| 55 | + from shapely.geometry import Point | |
| 56 | + from pyproj import Geod, CRS | |
| 57 | + gpd = _gpd() | |
| 58 | + d = cas1.charger(); v = d["ventes"].copy(); s = d["sujet"] | |
| 59 | + g = gpd.GeoDataFrame(v, geometry=gpd.points_from_xy(v["lon"], v["lat"]), crs=EPSG_WGS84).to_crs(EPSG_MTM9) | |
| 60 | + gs = gpd.GeoSeries([Point(s["lon"], s["lat"])], crs=EPSG_WGS84).to_crs(EPSG_MTM9) | |
| 61 | + xs, ys = float(gs.x.iloc[0]), float(gs.y.iloc[0]) | |
| 62 | + xy_m = np.column_stack([g.geometry.x.values, g.geometry.y.values]) | |
| 63 | + # distances sujet → ventes : MTM 9, équirectangulaire locale (ch. 19), haversine, géodésique WGS84 | |
| 64 | + d_mtm = np.sqrt(((xy_m - [xs, ys]) ** 2).sum(1)) / 1000 | |
| 65 | + lat0, lon0 = float(v["lat"].mean()), float(v["lon"].mean()) | |
| 66 | + xy_eq = h.coordonnees_km(v["lat"].values, v["lon"].values, lat0, lon0); cs_eq = h.coordonnees_km([s["lat"]], [s["lon"]], lat0, lon0)[0] | |
| 67 | + d_eq = np.sqrt(((xy_eq - cs_eq) ** 2).sum(1)) | |
| 68 | + d_hav = geo.haversine_km(s["lat"], s["lon"], v["lat"].values, v["lon"].values) | |
| 69 | + geod = Geod(ellps="WGS84"); _, _, d_geod = geod.inv(np.full(len(v), s["lon"]), np.full(len(v), s["lat"]), v["lon"].values, v["lat"].values) | |
| 70 | + d_geod = d_geod / 1000 | |
| 71 | + # distance en degrés « naïve » (erreur classique) | |
| 72 | + d_deg = np.sqrt((v["lat"].values - s["lat"]) ** 2 + (v["lon"].values - s["lon"]) ** 2) | |
| 73 | + k_sujet = float(geo.facteur_echelle_tm(s["lat"], s["lon"], LON0_MTM9)) | |
| 74 | + crs = CRS.from_epsg(EPSG_MTM9) | |
| 75 | + comp = pd.DataFrame({"mtm9": d_mtm, "equirect": d_eq, "haversine": d_hav, "geodesique": d_geod}) | |
| 76 | + ecarts = {c: {"max_m": float(np.abs(comp[c] - comp["geodesique"]).max() * 1000), "max_rel_pct": float((np.abs(comp[c] / comp["geodesique"] - 1)).max() * 100)} | |
| 77 | + for c in ["mtm9", "equirect", "haversine"]} | |
| 78 | + # distance de Manhattan (réseau orthogonal idéalisé) vs euclidienne | |
| 79 | + man = (np.abs(xy_m - [xs, ys]).sum(1)) / 1000; ratio = man / np.where(d_mtm > 0, d_mtm, np.nan) | |
| 80 | + return {"ventes": g, "sujet": s, "xs": xs, "ys": ys, "xy_m": xy_m, "comparaison_distances": comp, "ecarts": ecarts, | |
| 81 | + "k_sujet": k_sujet, "crs_nom": crs.name, "d_deg_vs_km": pd.DataFrame({"deg": d_deg, "km": d_geod}), | |
| 82 | + "manhattan": {"moyenne_ratio": float(np.nanmean(ratio)), "max_ratio": float(np.nanmax(ratio)), "mediane_ratio": float(np.nanmedian(ratio))}, | |
| 83 | + "etendue_km": ((xy_m[:, 0].max() - xy_m[:, 0].min()) / 1000, (xy_m[:, 1].max() - xy_m[:, 1].min()) / 1000)} | |
| 84 | + | |
| 85 | + | |
| 86 | +# ----------------------------------------------------------------------------- 2. géométries fictives | |
| 87 | + | |
| 88 | +def geometries_fictives(b: dict) -> dict: | |
| 89 | + from shapely.geometry import LineString, Point | |
| 90 | + gpd = _gpd() | |
| 91 | + riv = LineString(COURS_EAU_FICTIF); corr = LineString(CORRIDOR_FICTIF) | |
| 92 | + zA = riv.buffer(LARGEUR_CLASSE_A_M); zB = riv.buffer(LARGEUR_CLASSE_B_M).difference(zA) | |
| 93 | + zones = gpd.GeoDataFrame({"classe": ["A", "B"], "intensite": ["élevée (fictive)", "modérée (fictive)"]}, geometry=[zA, zB], crs=EPSG_MTM9) | |
| 94 | + tampons = gpd.GeoDataFrame({"rayon_m": RAYONS_CORRIDOR_M}, geometry=[corr.buffer(r) for r in RAYONS_CORRIDOR_M], crs=EPSG_MTM9) | |
| 95 | + v = b["ventes"] | |
| 96 | + # pôles fictifs : le pôle central est placé à la vente de plus petite distance au centre du générateur ; les deux autres | |
| 97 | + # aux médianes des coordonnées des secteurs Gatineau (est) et Aylmer (ouest) | |
| 98 | + i0 = int(v["dist_centre_km"].values.argmin()); pc = (float(v.geometry.x.iloc[i0]), float(v.geometry.y.iloc[i0])) | |
| 99 | + pe = (float(v.loc[v["secteur"] == "Gatineau"].geometry.x.median()), float(v.loc[v["secteur"] == "Gatineau"].geometry.y.median())) | |
| 100 | + po = (float(v.loc[v["secteur"] == "Aylmer"].geometry.x.median()), float(v.loc[v["secteur"] == "Aylmer"].geometry.y.median())) | |
| 101 | + poles = gpd.GeoDataFrame({"pole": list(MASSES_POLES), "masse": list(MASSES_POLES.values())}, geometry=[Point(pc), Point(pe), Point(po)], crs=EPSG_MTM9) | |
| 102 | + return {"cours_eau": riv, "corridor": corr, "zones": zones, "tampons": tampons, "poles": poles, | |
| 103 | + "aires_km2": {"A": zA.area / 1e6, "B": zB.area / 1e6, "corridor_300": corr.buffer(RAYON_CORRIDOR_REF_M).area / 1e6}, | |
| 104 | + "longueurs_km": {"cours_eau": riv.length / 1000, "corridor": corr.length / 1000}} | |
| 105 | + | |
| 106 | + | |
| 107 | +# ----------------------------------------------------------------------------- 3. opérations SIG | |
| 108 | + | |
| 109 | +def jointure_et_distances(b: dict, gf: dict) -> "pd.DataFrame": | |
| 110 | + """Jointure spatiale (point dans polygone) avec les classes d'exposition, distances au corridor et au cours d'eau, | |
| 111 | + indicatrices de tampon, accessibilité gravitaire.""" | |
| 112 | + gpd = _gpd(); v = b["ventes"].copy() | |
| 113 | + j = gpd.sjoin(v[["geometry"]], gf["zones"][["classe", "geometry"]], how="left", predicate="within") | |
| 114 | + j = j[~j.index.duplicated(keep="first")] | |
| 115 | + v["classe_expo"] = j["classe"].reindex(v.index).fillna("hors zone") | |
| 116 | + v["zone_A"] = (v["classe_expo"] == "A").astype(float); v["zone_B"] = (v["classe_expo"] == "B").astype(float) | |
| 117 | + v["dist_cours_eau_m"] = v.geometry.distance(gf["cours_eau"]); v["dist_corridor_m"] = v.geometry.distance(gf["corridor"]) | |
| 118 | + for r in RAYONS_CORRIDOR_M: | |
| 119 | + v[f"corr_{r}"] = (v["dist_corridor_m"] <= r).astype(float) | |
| 120 | + v["ln_dist_corridor"] = np.log(1.0 + v["dist_corridor_m"] / 100.0) # ln(1 + d/100 m) | |
| 121 | + coords = np.column_stack([v.geometry.x.values, v.geometry.y.values]) / 1000 | |
| 122 | + pc = np.column_stack([gf["poles"].geometry.x.values, gf["poles"].geometry.y.values]) / 1000 | |
| 123 | + v["acces"] = geo.accessibilite_gravitaire(coords, pc, gf["poles"]["masse"].values, FRICTION) | |
| 124 | + v["ln_acces"] = np.log(v["acces"]); v["dist_pole_min_km"] = np.sqrt(((coords[:, None, :] - pc[None, :, :]) ** 2).sum(-1)).min(1) | |
| 125 | + # contrôle : le lancer de rayon de traite.geo donne le même résultat que shapely pour la zone A (polygone extérieur sans trou) | |
| 126 | + ext = np.asarray(gf["zones"].geometry.iloc[0].exterior.coords)[:-1] | |
| 127 | + v["zone_A_rayon"] = geo.point_dans_polygone(np.column_stack([v.geometry.x.values, v.geometry.y.values]), ext).astype(float) | |
| 128 | + return v | |
| 129 | + | |
| 130 | + | |
| 131 | +def tableau_secteurs(v) -> pd.DataFrame: | |
| 132 | + g = v.groupby("secteur").agg(n=("id_vente", "count"), zone_A=("zone_A", "sum"), zone_B=("zone_B", "sum"), | |
| 133 | + corridor_300=(f"corr_{RAYON_CORRIDOR_REF_M}", "sum"), dist_corr_med_km=("dist_corridor_m", lambda x: x.median() / 1000), | |
| 134 | + acces_moy=("acces", "mean"), prix_m2_med=("prix_vente", lambda x: np.nan)) | |
| 135 | + for sct, w in v.groupby("secteur"): | |
| 136 | + g.loc[sct, "prix_m2_med"] = float((w["prix_vente"] / w["superficie_habitable_m2"]).median()) | |
| 137 | + g = g.reindex(cas1.SECTEURS) | |
| 138 | + tot = pd.Series({"n": len(v), "zone_A": v["zone_A"].sum(), "zone_B": v["zone_B"].sum(), "corridor_300": v[f"corr_{RAYON_CORRIDOR_REF_M}"].sum(), | |
| 139 | + "dist_corr_med_km": v["dist_corridor_m"].median() / 1000, "acces_moy": v["acces"].mean(), | |
| 140 | + "prix_m2_med": float((v["prix_vente"] / v["superficie_habitable_m2"]).median())}, name="Total") | |
| 141 | + return pd.concat([g, tot.to_frame().T]) | |
| 142 | + | |
| 143 | + | |
| 144 | +def grille_et_agregation(b: dict, v) -> dict: | |
| 145 | + """Agrégation des ventes par cellule hexagonale (médiane du prix au m², effectif, résidu moyen du modèle de référence), | |
| 146 | + puis pondération surfacique vers une grille carrée grossière comparée au comptage exact.""" | |
| 147 | + from shapely.geometry import Polygon, box | |
| 148 | + gpd = _gpd() | |
| 149 | + xy = b["xy_m"]; xmin, ymin, xmax, ymax = xy[:, 0].min(), xy[:, 1].min(), xy[:, 0].max(), xy[:, 1].max() | |
| 150 | + cells = geo.grille_hexagonale(xmin - RAYON_HEX_M, ymin - RAYON_HEX_M, xmax, ymax, RAYON_HEX_M) | |
| 151 | + hexes = gpd.GeoDataFrame({"cellule": range(len(cells))}, geometry=[Polygon(c) for c in cells], crs=EPSG_MTM9) | |
| 152 | + m = cas1.hedonique(b["ventes"].drop(columns="geometry")) | |
| 153 | + pts = v[["geometry", "prix_vente", "superficie_habitable_m2"]].copy(); pts["prix_m2"] = pts["prix_vente"] / pts["superficie_habitable_m2"] | |
| 154 | + pts["residu"] = m["residus"] | |
| 155 | + j = gpd.sjoin(pts, hexes, how="inner", predicate="within") | |
| 156 | + agg = j.groupby("cellule").agg(n=("prix_m2", "count"), prix_m2_med=("prix_m2", "median"), residu_moy=("residu", "mean")) | |
| 157 | + hexes = hexes.join(agg, on="cellule"); hexes["n"] = hexes["n"].fillna(0).astype(int) | |
| 158 | + occ = hexes[hexes["n"] > 0].copy(); ok = occ[occ["n"] >= MIN_VENTES_CELLULE].copy() | |
| 159 | + # classification de la médiane du prix au m² (cellules avec n ≥ 5) | |
| 160 | + z = ok["prix_m2_med"].values | |
| 161 | + bornes = {"intervalles égaux": geo.bornes_intervalles_egaux(z, K_CLASSES), "quantiles": geo.bornes_quantiles(z, K_CLASSES), "Jenks": geo.bornes_jenks(z, K_CLASSES)} | |
| 162 | + classif = {k: {"bornes": bv, "gvf": geo.gvf(z, bv), "effectifs": np.bincount(geo.classer(z, bv), minlength=K_CLASSES)} for k, bv in bornes.items()} | |
| 163 | + # pondération surfacique : des hexagones (n) vers une grille carrée de 4 km ; comparaison au comptage exact des points | |
| 164 | + pas = 4000.0; cols = np.arange(xmin - 0.5 * pas, xmax + pas, pas); rows = np.arange(ymin - 0.5 * pas, ymax + pas, pas) # origine décalée : aucun point sur une frontière | |
| 165 | + carres = gpd.GeoDataFrame(geometry=[box(x, y, x + pas, y + pas) for x in cols for y in rows], crs=EPSG_MTM9) | |
| 166 | + carres["exact"] = [int(v.geometry.within(c).sum()) for c in carres.geometry] | |
| 167 | + carres = carres[carres["exact"] > 0].copy(); est = [] | |
| 168 | + for c in carres.geometry: | |
| 169 | + tot = 0.0 | |
| 170 | + for _, hx in occ.iterrows(): | |
| 171 | + inter = hx.geometry.intersection(c).area | |
| 172 | + if inter > 0: | |
| 173 | + tot += hx["n"] * inter / hx.geometry.area | |
| 174 | + est.append(tot) | |
| 175 | + carres["pond_surf"] = est; carres["erreur"] = carres["pond_surf"] - carres["exact"] | |
| 176 | + assert int(hexes["n"].sum()) == len(v), "toutes les ventes doivent tomber dans une cellule" | |
| 177 | + return {"hexes": hexes, "occupees": occ, "cartographiees": ok, "classif": classif, "n_cellules": len(hexes), "n_occupees": len(occ), "n_cartographiees": len(ok), | |
| 178 | + "aire_cellule_km2": float(hexes.geometry.iloc[0].area / 1e6), "carres": carres, | |
| 179 | + "pond_surf": {"eam": float(carres["erreur"].abs().mean()), "max": float(carres["erreur"].abs().max()), "total_exact": int(carres["exact"].sum()), "total_est": float(carres["pond_surf"].sum()), "n_carres": len(carres)}, | |
| 180 | + "modele": m} | |
| 181 | + | |
| 182 | + | |
| 183 | +def interpolation_idw(b: dict, grille: dict) -> dict: | |
| 184 | + """IDW du résidu du modèle sans secteur au sujet (comparaison avec le krigeage du chapitre 19) et validation croisée.""" | |
| 185 | + m = grille["modele"]; Xr = m["X"].drop(columns=[c for c in m["X"].columns if c.startswith("sect_")]) | |
| 186 | + r = h.mco(Xr.values, m["y"]); res = r["residus"]; xy = b["xy_m"] / 1000; cs = np.array([[b["xs"], b["ys"]]]) / 1000 | |
| 187 | + out = {} | |
| 188 | + for p in [1.0, 2.0, 3.0]: | |
| 189 | + au_sujet = float(geo.idw(xy, res, cs, puissance=p, voisins=40)[0]) | |
| 190 | + loo = np.array([geo.idw(np.delete(xy, i, 0), np.delete(res, i), xy[i:i + 1], puissance=p, voisins=40)[0] for i in range(len(res))]) | |
| 191 | + out[p] = {"sujet": au_sujet, "eqm_loo": float(np.sqrt(np.mean((res - loo) ** 2)))} | |
| 192 | + out["eqm_sans_correction"] = float(np.sqrt(np.mean(res ** 2))) | |
| 193 | + return out | |
| 194 | + | |
| 195 | + | |
| 196 | +# ----------------------------------------------------------------------------- 5. modèle hédonique augmenté | |
| 197 | + | |
| 198 | +def _X_ref(v): | |
| 199 | + return cas1.matrice(v.drop(columns="geometry") if "geometry" in v else v) | |
| 200 | + | |
| 201 | + | |
| 202 | +def modeles_augmentes(v) -> dict: | |
| 203 | + """Modèle de référence + variables géospatiales (indicatrices d'exposition, corridor ≤ 300 m, ln distance au corridor, ln accessibilité), | |
| 204 | + pour trois spécifications de la localisation : référence (secteurs + gradient), sans secteur, sans secteur ni gradient.""" | |
| 205 | + X = _X_ref(v); y = np.log(v["prix_vente"].values.astype(float)) | |
| 206 | + extra = {"zone_A": v["zone_A"].values, "zone_B": v["zone_B"].values, f"corr_{RAYON_CORRIDOR_REF_M}": v[f"corr_{RAYON_CORRIDOR_REF_M}"].values, | |
| 207 | + "ln_dist_corridor": v["ln_dist_corridor"].values, "ln_acces": v["ln_acces"].values} | |
| 208 | + specs = {"référence": X, "sans secteur": X.drop(columns=[c for c in X.columns if c.startswith("sect_")]), | |
| 209 | + "sans secteur ni gradient": X.drop(columns=[c for c in X.columns if c.startswith("sect_")] + ["dist_centre"])} | |
| 210 | + from scipy.stats import t as student | |
| 211 | + out = {} | |
| 212 | + for nom, Xs in specs.items(): | |
| 213 | + Xa = Xs.copy() | |
| 214 | + for k, col in extra.items(): | |
| 215 | + Xa[k] = col | |
| 216 | + r = h.mco(Xa.values, y); n, k = r["n"], r["k"] | |
| 217 | + coef = pd.DataFrame({"coef": r["beta"], "se": r["se_hc1"]}, index=Xa.columns); coef["t"] = coef["coef"] / coef["se"] | |
| 218 | + coef["p"] = 2 * student.sf(np.abs(coef["t"]), n - k); coef["ic_bas"] = coef["coef"] - 1.96 * coef["se"]; coef["ic_haut"] = coef["coef"] + 1.96 * coef["se"] | |
| 219 | + coef["effet_pct"] = (np.exp(coef["coef"]) - 1) * 100 | |
| 220 | + base = h.mco(Xs.values, y) | |
| 221 | + # test F conjoint des cinq variables géospatiales (homoscédastique, à titre indicatif) | |
| 222 | + q = len(extra); rss_r = base["residus"] @ base["residus"]; rss_u = r["residus"] @ r["residus"] | |
| 223 | + F = ((rss_r - rss_u) / q) / (rss_u / (n - k)) | |
| 224 | + from scipy.stats import f as fdist | |
| 225 | + out[nom] = {"coef": coef.loc[list(extra)], "r2": r["r2"], "r2_base": base["r2"], "sigma": float(np.sqrt(r["sigma2"])), "F": float(F), "p_F": float(fdist.sf(F, q, n - k)), "n": n, "k": k, | |
| 226 | + "mde": {k2: geo.effet_minimal_detectable(float(coef.loc[k2, "se"])) for k2 in extra}} | |
| 227 | + return out | |
| 228 | + | |
| 229 | + | |
| 230 | +def sensibilite_tampon(v) -> pd.DataFrame: | |
| 231 | + """Coefficient de l'indicatrice « à moins de r m du corridor » selon le rayon r, modèle de référence et modèle sans secteur.""" | |
| 232 | + X = _X_ref(v); y = np.log(v["prix_vente"].values.astype(float)); Xr = X.drop(columns=[c for c in X.columns if c.startswith("sect_")]) | |
| 233 | + rows = [] | |
| 234 | + for r in RAYONS_CORRIDOR_M: | |
| 235 | + col = v[f"corr_{r}"].values; n_in = int(col.sum()) | |
| 236 | + for nom, Xs in [("référence", X), ("sans secteur", Xr)]: | |
| 237 | + Xa = Xs.copy(); Xa["corr"] = col; m = h.mco(Xa.values, y); i = list(Xa.columns).index("corr") | |
| 238 | + rows.append({"rayon_m": r, "n_dans_tampon": n_in, "spec": nom, "coef": m["beta"][i], "se": m["se_hc1"][i], "t": m["beta"][i] / m["se_hc1"][i]}) | |
| 239 | + return pd.DataFrame(rows) | |
| 240 | + | |
| 241 | + | |
| 242 | +# ----------------------------------------------------------------------------- 6. faux positifs spatiaux | |
| 243 | + | |
| 244 | +def faux_positifs(b: dict, v, n_poly: int = N_POLYGONES_ALEATOIRES, graine: int = GRAINE) -> dict: | |
| 245 | + """Pour chaque rayon, n_poly disques centrés sur une vente tirée au hasard ; indicatrice « dans le disque » ajoutée au modèle ; | |
| 246 | + part des |t| > 1,96 (et > 2,576) selon la spécification. Sous le générateur (aucun effet), la part attendue est 5 % (1 %) | |
| 247 | + si la spécification est correcte ; les résidus spatialement corrélés des spécifications sans secteur gonflent cette part.""" | |
| 248 | + rng = np.random.default_rng(graine); X = _X_ref(v); y = np.log(v["prix_vente"].values.astype(float)); xy = b["xy_m"] | |
| 249 | + specs = {"référence": X, "sans secteur": X.drop(columns=[c for c in X.columns if c.startswith("sect_")]), | |
| 250 | + "sans secteur ni gradient": X.drop(columns=[c for c in X.columns if c.startswith("sect_")] + ["dist_centre"])} | |
| 251 | + rows = []; tstats = {s: {r: [] for r in RAYONS_POLYGONES_KM} for s in specs} | |
| 252 | + for r in RAYONS_POLYGONES_KM: | |
| 253 | + centres = rng.integers(0, len(v), size=n_poly); n_ok = 0 | |
| 254 | + for c in centres: | |
| 255 | + d = np.sqrt(((xy - xy[c]) ** 2).sum(1)) / 1000; ind = (d <= r).astype(float); n_in = int(ind.sum()) | |
| 256 | + if n_in < 10 or n_in > len(v) - 10: | |
| 257 | + continue | |
| 258 | + n_ok += 1 | |
| 259 | + for s, Xs in specs.items(): | |
| 260 | + Xa = np.column_stack([Xs.values, ind]); m = h.mco(Xa, y) | |
| 261 | + tstats[s][r].append((float(m["beta"][-1] / m["se"][-1]), float(m["beta"][-1] / m["se_hc1"][-1]))) # (t classique, t HC1) | |
| 262 | + for s in specs: | |
| 263 | + tt = np.array(tstats[s][r]); seuil_bonf = _z(0.05 / len(tt)) | |
| 264 | + for j, et in enumerate(["classique", "HC1"]): | |
| 265 | + t = tt[:, j] | |
| 266 | + rows.append({"rayon_km": r, "spec": s, "erreur_type": et, "n_polygones": len(t), "part_5pct": float(np.mean(np.abs(t) > 1.96)), "part_1pct": float(np.mean(np.abs(t) > 2.576)), | |
| 267 | + "part_bonferroni": float(np.mean(np.abs(t) > seuil_bonf)), "ecart_type_t": float(t.std()), "t_max_abs": float(np.abs(t).max())}) | |
| 268 | + return {"tableau": pd.DataFrame(rows), "t": tstats} | |
| 269 | + | |
| 270 | + | |
| 271 | +def _z(alpha_bilateral: float) -> float: | |
| 272 | + from scipy.stats import norm | |
| 273 | + return float(norm.ppf(1 - alpha_bilateral / 2)) | |
| 274 | + | |
| 275 | + | |
| 276 | +# ----------------------------------------------------------------------------- 8. cas 4 | |
| 277 | + | |
| 278 | +def cas4_geo() -> dict: | |
| 279 | + """48 immeubles du cas 4 : projection en NAD83 / Québec Lambert (EPSG 32198), part de la valeur en zone inondable par RMR, | |
| 280 | + coefficient « inondable » des effets régionaux, distances entre centroïdes de RMR.""" | |
| 281 | + from pyproj import Geod | |
| 282 | + gpd = _gpd(); d = cas4.charger(); pf = d["portefeuille"]; som = cas4.sommaire(pf); eff = cas4.effets_regionaux(pf) | |
| 283 | + g = gpd.GeoDataFrame(pf, geometry=gpd.points_from_xy(pf["lon"], pf["lat"]), crs=EPSG_WGS84).to_crs(EPSG_LAMBERT) | |
| 284 | + par = pf.groupby("rmr").agg(n=("id_immeuble", "count"), valeur=("valeur_2026", "sum"), n_inond=("zone_inondable", "sum"), n_sol=("contamination_sol", "sum"), | |
| 285 | + val_inond=("valeur_2026", lambda x: x[pf.loc[x.index, "zone_inondable"] == 1].sum()), lat=("lat", "mean"), lon=("lon", "mean")) | |
| 286 | + par["part_inond_rmr"] = par["val_inond"] / par["valeur"]; par["part_inond_total"] = par["val_inond"] / pf["valeur_2026"].sum() | |
| 287 | + par = par.sort_values("valeur", ascending=False) | |
| 288 | + geod = Geod(ellps="WGS84"); cen = par[["lat", "lon"]] | |
| 289 | + dist = pd.DataFrame(index=cen.index, columns=cen.index, dtype=float) | |
| 290 | + for a in cen.index: | |
| 291 | + for bb in cen.index: | |
| 292 | + dist.loc[a, bb] = geod.inv(cen.loc[a, "lon"], cen.loc[a, "lat"], cen.loc[bb, "lon"], cen.loc[bb, "lat"])[2] / 1000 | |
| 293 | + inond = pf[pf["zone_inondable"] == 1][["id_immeuble", "rmr", "nb_logements", "valeur_2026", "taux_global", "etat_1a5"]] | |
| 294 | + # taux global moyen des immeubles inondables vs non, à état et RMR comparables : le coefficient du modèle le mesure | |
| 295 | + return {"gdf": g, "par_rmr": par, "total": som["total"], "effets": eff, "coef_inondable": float(eff.loc["inondable", "coef"]), "se_inondable": float(eff.loc["inondable", "se_hc1"]), | |
| 296 | + "effet_pct_inondable": float(eff.loc["inondable", "effet_pct"] * 100), "coef_sol": float(eff.loc["sol", "coef"]), "effet_pct_sol": float(eff.loc["sol", "effet_pct"] * 100), | |
| 297 | + "distances_km": dist, "inondables": inond, "n_inond": int(pf["zone_inondable"].sum()), "n_sol": int(pf["contamination_sol"].sum()), | |
| 298 | + "etendue_km": (float((g.geometry.x.max() - g.geometry.x.min()) / 1000), float((g.geometry.y.max() - g.geometry.y.min()) / 1000))} | |
| 299 | + | |
| 300 | + | |
| 301 | +# ----------------------------------------------------------------------------- capitalisation du risque (exemple numérique du texte) | |
| 302 | + | |
| 303 | +def exemple_capitalisation(P25=(0.70, 0.20, 0.07), dommage_pct=(0.15, 0.08, 0.03), R=0.055, prix=637953.0) -> pd.DataFrame: | |
| 304 | + """Décote capitalisée d'une perte annuelle espérée : ΔV/V = −p_1 · D / R, avec p_1 déduit de la probabilité sur 25 ans (bornes de classe).""" | |
| 305 | + rows = [] | |
| 306 | + for p, D in zip(P25, dommage_pct): | |
| 307 | + p1 = geo.probabilite_annuelle(p); rows.append({"P25": p, "p_annuelle": p1, "dommage_pct": D, "perte_annuelle_pct": p1 * D, "decote_pct": p1 * D / R, "decote_dollars": p1 * D / R * prix}) | |
| 308 | + return pd.DataFrame(rows) | |
| 309 | + | |
| 310 | + | |
| 311 | +# ----------------------------------------------------------------------------- orchestration | |
| 312 | + | |
| 313 | +def tout() -> dict: | |
| 314 | + if "tout" in _CACHE: | |
| 315 | + return _CACHE["tout"] | |
| 316 | + warnings.filterwarnings("ignore") | |
| 317 | + b = charger_base(); gf = geometries_fictives(b); v = jointure_et_distances(b, gf) | |
| 318 | + grille = grille_et_agregation(b, v); idw_ = interpolation_idw(b, grille) | |
| 319 | + res = {"base": b, "geom": gf, "ventes": v, "secteurs": tableau_secteurs(v), "grille": grille, "idw": idw_, "modeles": modeles_augmentes(v), | |
| 320 | + "tampon": sensibilite_tampon(v), "faux_positifs": faux_positifs(b, v), "cas4": cas4_geo(), "capitalisation": exemple_capitalisation()} | |
| 321 | + _CACHE["tout"] = res | |
| 322 | + return res | |
| 323 | + | |
| 324 | + | |
| 325 | +def main(): | |
| 326 | + r = tout(); b = r["base"]; pd.set_option("display.width", 200); pd.set_option("display.max_columns", 30) | |
| 327 | + print("=== 1. Projection (NAD83 / MTM zone 9, EPSG 32189) :", b["crs_nom"]) | |
| 328 | + print(f"sujet : x = {b['xs']:.1f} m, y = {b['ys']:.1f} m ; facteur d'échelle k = {b['k_sujet']:.6f} ; étendue {b['etendue_km'][0]:.1f} × {b['etendue_km'][1]:.1f} km") | |
| 329 | + print("écarts max à la géodésique WGS84 (sujet → 600 ventes) :", {k: (round(x["max_m"], 1), round(x["max_rel_pct"], 4)) for k, x in b["ecarts"].items()}) | |
| 330 | + print("Manhattan / euclidienne :", {k: round(x, 3) for k, x in b["manhattan"].items()}) | |
| 331 | + print("\n=== 2. Géométries fictives :", {k: round(x, 2) for k, x in r["geom"]["aires_km2"].items()}, {k: round(x, 1) for k, x in r["geom"]["longueurs_km"].items()}) | |
| 332 | + print("\n=== 3. Jointure spatiale et distances par secteur\n", r["secteurs"].round(3).to_string()) | |
| 333 | + v = r["ventes"]; print("contrôle lancer de rayon = shapely :", bool((v["zone_A"] == v["zone_A_rayon"]).all())) | |
| 334 | + g = r["grille"]; print(f"\n=== 4. Grille hexagonale : {g['n_cellules']} cellules ({g['aire_cellule_km2']:.2f} km²), {g['n_occupees']} occupées, {g['n_cartographiees']} avec n ≥ {MIN_VENTES_CELLULE}") | |
| 335 | + for k, c in g["classif"].items(): | |
| 336 | + print(f" {k:20s} bornes = {np.round(c['bornes'], 0)} ; effectifs = {c['effectifs']} ; GVF = {c['gvf']:.3f}") | |
| 337 | + print(" pondération surfacique :", {k: (round(x, 2) if isinstance(x, float) else x) for k, x in g["pond_surf"].items()}) | |
| 338 | + print("\n=== IDW du résidu sans secteur au sujet :", {k: (x if not isinstance(x, dict) else {kk: round(vv, 4) for kk, vv in x.items()}) for k, x in r["idw"].items()}) | |
| 339 | + print("\n=== 5. Modèles augmentés") | |
| 340 | + for nom, m in r["modeles"].items(): | |
| 341 | + print(f"-- {nom} : R² = {m['r2']:.4f} (base {m['r2_base']:.4f}), σ = {m['sigma']:.4f}, F({len(m['coef'])}, {m['n'] - m['k']}) = {m['F']:.3f}, p = {m['p_F']:.3f}") | |
| 342 | + print(m["coef"].round(4).to_string()); print(" EMD (80 %) :", {k: round(x, 4) for k, x in m["mde"].items()}) | |
| 343 | + print("\n=== 6. Sensibilité au rayon du tampon\n", r["tampon"].round(4).to_string()) | |
| 344 | + print("\n=== 7. Faux positifs spatiaux\n", r["faux_positifs"]["tableau"].round(3).to_string()) | |
| 345 | + c4 = r["cas4"]; print("\n=== 8. Cas 4 par RMR\n", c4["par_rmr"].round(4).to_string()) | |
| 346 | + print(f"part de la valeur en zone inondable : {c4['total']['part_zone_inondable']*100:.2f} % ; {c4['n_inond']} immeubles ; coef inondable = {c4['coef_inondable']:.4f} ({c4['se_inondable']:.4f}) → {c4['effet_pct_inondable']:.2f} % ; sol {c4['effet_pct_sol']:.2f} %") | |
| 347 | + print("distances géodésiques entre centroïdes de RMR (km)\n", c4["distances_km"].round(0).to_string()) | |
| 348 | + print("\n=== Capitalisation du risque (exemple)\n", r["capitalisation"].round(4).to_string()) | |
| 349 | + | |
| 350 | + | |
| 351 | +if __name__ == "__main__": | |
| 352 | + main() | |
modified
analysis/python/figures/ch25_figures.py
+1 −1
@@ -109,7 +109,7 @@ def fig_residuelle(S): | ||
| 109 | 109 | arrowprops=dict(arrowstyle="-", color=palette.ink2, lw=0.6)) |
| 110 | 110 | ext = rs["V_cap"] - rs["C_B"] |
| 111 | 111 | ax.axhline(ext, color=palette.ink2, lw=0.8, ls=":") |
| 112 | − ax.text(3.02, ext + 25_000, f"Extraction sur la valeur capitalisée (V − bâtiment déprécié) : {fmt_dollars(ext)}", fontsize=7.5, color=palette.ink2) | |
| 112 | + ax.text(3.02, ext - 75_000, f"Extraction sur la valeur capitalisée (V − bâtiment déprécié) : {fmt_dollars(ext)}", fontsize=7.5, color=palette.ink2) | |
| 113 | 113 | ax.set_xlabel("Taux de rendement du terrain $R_L$ (%)"); ax.set_ylabel("Valeur résiduelle du terrain (dollars)") |
| 114 | 114 | ax.yaxis.set_major_formatter(plt.FuncFormatter(fmt_dollars)); ax.set_ylim(-300_000, 1_300_000) |
| 115 | 115 | ax.legend(loc="lower left", fontsize=7.5) |
added
analysis/python/figures/ch36_figures.py
+136 −0
@@ -0,0 +1,136 @@ | ||
| 1 | +#!/usr/bin/env python3 | |
| 2 | +"""Figures du chapitre 36 — données de panel et identification causale (cas 4, DONNÉES SYNTHÉTIQUES, graine 20261031). | |
| 3 | +Sorties (assets/figures/ch36/) : | |
| 4 | + ch36-fig-trajectoires.pdf ln RNE moyen (cumul depuis 2016T1) des cohortes traitées et des témoins de la même RMR | |
| 5 | + ch36-fig-event-study.pdf étude d'événement TWFE (RMR × trimestre) et agrégation dynamique de Callaway–Sant'Anna, avec la vérité | |
| 6 | + ch36-fig-bacon.pdf décomposition de Goodman-Bacon : cas 4 et laboratoire à effets croissants | |
| 7 | + ch36-fig-synthetique.pdf contrôle synthétique de la cohorte A : trajectoires, écarts et placebos, poids des donneurs | |
| 8 | + ch36-fig-discontinuite.pdf discontinuité spatiale à une frontière de zone (simulation transversale) | |
| 9 | + ch36-fig-sensibilite.pdf étude d'événement lorsque les tendances parallèles sont violées (+1 pt/an pour les traités) | |
| 10 | +Usage (racine du dépôt) : PYTHONPATH=analysis/python python3 analysis/python/figures/ch36_figures.py""" | |
| 11 | +import sys, pathlib | |
| 12 | +ROOT = pathlib.Path(__file__).resolve().parents[3] | |
| 13 | +sys.path.insert(0, str(ROOT / "analysis/python")); sys.path.insert(0, str(ROOT / "analysis/python/cases")) | |
| 14 | +import numpy as np, pandas as pd | |
| 15 | +import matplotlib.pyplot as plt | |
| 16 | +from traite.style import setup, palette, savefig, LARGEUR | |
| 17 | +import ch36_panel as c36 | |
| 18 | + | |
| 19 | +TRIMS = pd.period_range("2016Q1", "2026Q2", freq="Q") | |
| 20 | +def _etiq(ax, pas=8): | |
| 21 | + ax.set_xticks(range(0, len(TRIMS), pas)); ax.set_xticklabels([str(TRIMS[i]).replace("Q", "T") for i in range(0, len(TRIMS), pas)], fontsize=7.5) | |
| 22 | + | |
| 23 | +def fig_trajectoires(res): | |
| 24 | + se = res["panel"] | |
| 25 | + fig, axes = plt.subplots(1, 2, figsize=(LARGEUR, 3.0), sharey=True) | |
| 26 | + for ax, (rmr, coh, T0, titre) in zip(axes, [(c36.RMR_A, "A", c36.T_A, "Montréal : cohorte A (2022T3)"), (c36.RMR_B, "B", c36.T_B, "Gatineau : cohorte B (2024T3)")]): | |
| 27 | + for i, (lab, m) in enumerate([("Immeubles traités", (se["cohorte"] == coh)), ("Témoins jamais traités, même RMR", (se["cohorte"] == "jamais") & (se["rmr"] == rmr))]): | |
| 28 | + W = se[m].pivot(index="id_immeuble", columns="t", values="y") | |
| 29 | + traj = (W.sub(W[0], axis=0)).mean(axis=0) | |
| 30 | + ax.plot(traj.index, traj.values, color=palette.cat[i], lw=1.7, label=f"{lab} (n = {W.shape[0]})") | |
| 31 | + # contrefactuel déclaré : trajectoire traitée moins l'effet vrai moyen | |
| 32 | + if i == 0: | |
| 33 | + d = se[m].groupby("t")["delta_vrai"].mean() | |
| 34 | + ax.plot(traj.index, traj.values - d.values, color=palette.cat[0], lw=1.0, ls=":", label="Traités sans traitement, Y(0) (connu ici)") | |
| 35 | + ax.axvline(T0, color=palette.ink2, lw=0.9, ls="--"); ax.text(T0 + 0.4, 0.0, "mise en service", fontsize=7, color=palette.ink2, rotation=90, va="bottom") | |
| 36 | + ax.set_title(titre, fontsize=8.5); _etiq(ax); ax.grid(True, lw=0.4) | |
| 37 | + axes[0].set_ylabel("ln RNE moyen, écart à 2016T1"); axes[0].legend(fontsize=6.8, loc="upper left") | |
| 38 | + savefig(fig, "ch36/ch36-fig-trajectoires.pdf") | |
| 39 | + | |
| 40 | +def fig_event_study(res): | |
| 41 | + es = res["es"]; cs = res["cs"]["dynamique"].loc[-8:15] | |
| 42 | + fig, axes = plt.subplots(1, 2, figsize=(LARGEUR, 3.1), sharey=True) | |
| 43 | + ax = axes[0] | |
| 44 | + ax.fill_between(es.index, es["ic_bas"], es["ic_haut"], color=palette.cat[0], alpha=0.18, lw=0) | |
| 45 | + ax.plot(es.index, es["coef"], "o-", color=palette.cat[0], ms=3.8, lw=1.4, label="Coefficient estimé (IC à 95 %, grappes)") | |
| 46 | + ax.step(es.index, es["vrai"], where="mid", color=palette.ink, lw=1.1, ls="--", label="Effet déclaré δ(k)") | |
| 47 | + ax.set_title("Étude d'événement TWFE (RMR × trimestre), k de −8 à +8 regroupés", fontsize=8); ax.set_xlabel("Trimestres depuis la mise en service, k") | |
| 48 | + ax.set_ylabel("Effet sur ln RNE (points de log)") | |
| 49 | + ax = axes[1] | |
| 50 | + ax.fill_between(cs.index, cs["ic_bas"], cs["ic_haut"], color=palette.cat[1], alpha=0.18, lw=0) | |
| 51 | + ax.plot(cs.index, cs["att"], "s-", color=palette.cat[1], ms=3.4, lw=1.4, label="ATT(k) de Callaway–Sant'Anna (IC bootstrap)") | |
| 52 | + kk = np.arange(-8, 16); ax.step(kk, c36.effet_vrai(kk), where="mid", color=palette.ink, lw=1.1, ls="--", label="Effet déclaré δ(k)") | |
| 53 | + ax.set_title("Agrégation dynamique de Callaway–Sant'Anna, témoins de la même RMR", fontsize=8); ax.set_xlabel("Trimestres depuis la mise en service, k") | |
| 54 | + for ax in axes: | |
| 55 | + ax.axhline(0, color=palette.ink2, lw=0.8); ax.axvline(-0.5, color=palette.ink2, lw=0.8, ls=":"); ax.legend(fontsize=6.8, loc="upper left"); ax.grid(True, lw=0.4) | |
| 56 | + savefig(fig, "ch36/ch36-fig-event-study.pdf") | |
| 57 | + | |
| 58 | +def fig_bacon(res): | |
| 59 | + fig, axes = plt.subplots(1, 2, figsize=(LARGEUR, 3.0)) | |
| 60 | + marqueurs = {"traités vs jamais traités": "o", "précoce vs tardive (pas encore traitée)": "^", "tardive vs précoce (déjà traitée)": "D"} | |
| 61 | + for ax, (b, vrai, titre) in zip(axes, [(res["bacon"], res["verite"]["att_global"], "Cas 4 : cohortes A et B, 35 témoins"), (res["labo"]["bacon"], res["labo"]["verite"], "Laboratoire : effets croissants, 10 témoins")]): | |
| 62 | + t = b["table"] | |
| 63 | + for j, (typ, mk) in enumerate(marqueurs.items()): | |
| 64 | + s = t[t["type"] == typ] | |
| 65 | + ax.scatter(s["poids"], s["beta"], marker=mk, s=55, color=palette.cat[j], edgecolor=palette.ink, lw=0.5, label=typ, zorder=5) | |
| 66 | + ax.axhline(b["beta_twfe"], color=palette.ink, lw=1.1, label=f"TWFE = Σ poids × 2×2 = {b['beta_twfe']:.3f}") | |
| 67 | + ax.axhline(vrai, color=palette.ink2, lw=1.0, ls="--", label=f"Effet moyen vrai = {vrai:.3f}") | |
| 68 | + ax.axhline(0, color=palette.grid, lw=0.8) | |
| 69 | + ax.set_xlabel("Poids de la comparaison 2 × 2"); ax.set_title(titre, fontsize=8.5); ax.grid(True, lw=0.4) | |
| 70 | + ax.legend(fontsize=6.3, loc="best") | |
| 71 | + axes[0].set_ylabel("Estimation 2 × 2 (points de log)") | |
| 72 | + savefig(fig, "ch36/ch36-fig-bacon.pdf") | |
| 73 | + | |
| 74 | +def fig_synthetique(res): | |
| 75 | + s = res["sc"]; T0 = s["T0"]; t = np.arange(len(s["traite"])) | |
| 76 | + fig, axes = plt.subplots(1, 3, figsize=(LARGEUR, 2.9), gridspec_kw={"width_ratios": [1.3, 1.3, 1.0]}) | |
| 77 | + ax = axes[0] | |
| 78 | + ax.plot(t, s["traite"], color=palette.cat[0], lw=1.7, label="Cohorte A (moyenne des 8 immeubles)") | |
| 79 | + ax.plot(t, s["synthetique"], color=palette.cat[1], lw=1.5, ls="--", label="Contrôle synthétique") | |
| 80 | + ax.plot(t, s["traite"] - np.concatenate([np.zeros(T0), c36.effet_vrai(np.arange(len(t) - T0))]), color=palette.cat[0], lw=0.9, ls=":", label="Y(0) déclaré") | |
| 81 | + ax.axvline(T0 - 0.5, color=palette.ink2, lw=0.9, ls="--"); ax.set_title("Trajectoires (ln RNE centré sur la moyenne pré)", fontsize=8); _etiq(ax, 10); ax.legend(fontsize=6.3, loc="upper left"); ax.grid(True, lw=0.4) | |
| 82 | + ax = axes[1] | |
| 83 | + W = res["panel"].pivot(index="id_immeuble", columns="t", values="y"); coh = res["panel"].groupby("id_immeuble")["cohorte"].first() | |
| 84 | + donneurs = W.loc[coh[coh == "jamais"].index]; Y0 = (donneurs.values - donneurs.values[:, :T0].mean(axis=1, keepdims=True)).T | |
| 85 | + from traite import panel as pn | |
| 86 | + for j in range(Y0.shape[1]): | |
| 87 | + r = pn.controle_synthetique(np.delete(Y0, j, axis=1), Y0[:, j], T0) | |
| 88 | + ax.plot(t, r["ecarts"], color=palette.grid, lw=0.7, alpha=0.9, label="Placebos (35 donneurs)" if j == 0 else None) | |
| 89 | + ax.plot(t, s["ecarts"], color=palette.cat[0], lw=1.8, label="Cohorte A") | |
| 90 | + ax.plot(t, np.concatenate([np.zeros(T0), c36.effet_vrai(np.arange(len(t) - T0))]), color=palette.ink, lw=1.0, ls="--", label="Effet déclaré") | |
| 91 | + ax.axvline(T0 - 0.5, color=palette.ink2, lw=0.9, ls="--"); ax.axhline(0, color=palette.ink2, lw=0.7) | |
| 92 | + ax.set_title("Écarts traité − synthétique et placebos", fontsize=8); _etiq(ax, 10); ax.legend(fontsize=6.3, loc="upper left"); ax.grid(True, lw=0.4); ax.set_ylim(-0.12, 0.12) | |
| 93 | + ax = axes[2] | |
| 94 | + w = s["poids"].sort_values(ascending=True); w = w[w > 0.005] | |
| 95 | + ax.barh(range(len(w)), w.values, color=palette.cat[1], height=0.7) | |
| 96 | + ax.set_yticks(range(len(w))); ax.set_yticklabels(w.index, fontsize=7); ax.set_xlabel("Poids"); ax.set_title(f"Poids > 0,5 % ({len(w)} donneurs)", fontsize=8); ax.grid(True, axis="x", lw=0.4) | |
| 97 | + savefig(fig, "ch36/ch36-fig-synthetique.pdf") | |
| 98 | + | |
| 99 | +def fig_discontinuite(res): | |
| 100 | + r = res["rdd"]; x, y = r["x"], r["y"] | |
| 101 | + fig, ax = plt.subplots(figsize=(LARGEUR, 3.0)) | |
| 102 | + ax.scatter(x, y, s=6, color=palette.grid, lw=0, label="Immeubles simulés (n = 400)") | |
| 103 | + bords = np.arange(-2, 2.01, 0.2); centres = (bords[:-1] + bords[1:]) / 2 | |
| 104 | + moy = [y[(x >= a) & (x < b)].mean() for a, b in zip(bords[:-1], bords[1:])] | |
| 105 | + ax.plot(centres, moy, "o", color=palette.cat[0], ms=4.5, label="Moyenne par tranche de 200 m") | |
| 106 | + e = r["estimations"][1.0]; b = e["beta"] | |
| 107 | + xg = np.linspace(-1, 0, 50); ax.plot(xg, b[0] + b[2] * xg, color=palette.cat[1], lw=1.8, label="Ajustement local linéaire (h = 1 km)") | |
| 108 | + xd = np.linspace(0, 1, 50); ax.plot(xd, b[0] + b[1] + (b[2] + b[3]) * xd, color=palette.cat[1], lw=1.8) | |
| 109 | + ax.axvline(0, color=palette.ink2, lw=0.9, ls="--"); ax.text(0.03, y.min() + 0.01, "frontière de zone", fontsize=7.5, color=palette.ink2) | |
| 110 | + ax.annotate("", xy=(0, b[0] + b[1]), xytext=(0, b[0]), arrowprops=dict(arrowstyle="<->", color=palette.ink, lw=1.0)) | |
| 111 | + ax.text(0.05, b[0] + b[1] / 2, f"saut estimé τ̂ = {e['tau']:.3f}\n(vrai 0,050)", fontsize=7.5, color=palette.ink, va="center") | |
| 112 | + ax.set_xlabel("Distance signée à la frontière (km ; positif = zone de densité supérieure)"); ax.set_ylabel("ln de la valeur simulée") | |
| 113 | + ax.legend(fontsize=7, loc="upper left"); ax.grid(True, lw=0.4) | |
| 114 | + savefig(fig, "ch36/ch36-fig-discontinuite.pdf") | |
| 115 | + | |
| 116 | +def fig_sensibilite(res): | |
| 117 | + es0 = res["es"]; esv = res["sens"]["event_study"] | |
| 118 | + fig, ax = plt.subplots(figsize=(LARGEUR, 3.0)) | |
| 119 | + ax.fill_between(esv.index, esv["ic_bas"], esv["ic_haut"], color=palette.cat[1], alpha=0.15, lw=0) | |
| 120 | + ax.plot(es0.index, es0["coef"], "o-", color=palette.cat[0], ms=3.6, lw=1.3, label="Tendances parallèles respectées (générateur)") | |
| 121 | + ax.plot(esv.index, esv["coef"], "s-", color=palette.cat[1], ms=3.6, lw=1.3, label="Traités avec +1 point de croissance par an (IC à 95 %)") | |
| 122 | + ax.step(es0.index, es0["vrai"], where="mid", color=palette.ink, lw=1.1, ls="--", label="Effet déclaré δ(k)") | |
| 123 | + pre = esv.loc[-7:-2]; p = np.polyfit(pre.index.values.astype(float), pre["coef"].values, 1) | |
| 124 | + xx = np.linspace(-8, -1, 20); ax.plot(xx, np.polyval(p, xx), color=palette.cat[1], lw=0.9, ls=":") | |
| 125 | + ax.text(-7.9, np.polyval(p, -7.9) + 0.012, f"pente pré-traitement\n{p[0]:.4f} par trimestre", fontsize=7, color=palette.ink) | |
| 126 | + ax.axhline(0, color=palette.ink2, lw=0.8); ax.axvline(-0.5, color=palette.ink2, lw=0.8, ls=":") | |
| 127 | + ax.set_xlabel("Trimestres depuis la mise en service, k"); ax.set_ylabel("Effet sur ln RNE (points de log)"); ax.legend(fontsize=7, loc="upper left"); ax.grid(True, lw=0.4) | |
| 128 | + savefig(fig, "ch36/ch36-fig-sensibilite.pdf") | |
| 129 | + | |
| 130 | +def main(): | |
| 131 | + setup(); res = c36.main(verbose=False) | |
| 132 | + for f in (fig_trajectoires, fig_event_study, fig_bacon, fig_synthetique, fig_discontinuite, fig_sensibilite): | |
| 133 | + f(res); print("ok", f.__name__) | |
| 134 | + | |
| 135 | +if __name__ == "__main__": | |
| 136 | + main() | |
modified
analysis/python/tests/test_ch33.py
+2 −0
@@ -69,6 +69,8 @@ def test_unites_cas3(R): | ||
| 69 | 69 | assert u["taux_implicite"] == pytest.approx(b["rne"] / 2_060_000) and u["taux_implicite"] == pytest.approx(0.04367, abs=1e-5) |
| 70 | 70 | assert u["valeur_cap"] == pytest.approx(2_037_502.89, abs=0.01) and u["rne_par_logement"] == pytest.approx(7_496.31, abs=0.01) |
| 71 | 71 | assert u["loyer_moyen_m2"] == pytest.approx(16.72, abs=0.01) |
| 72 | + assert u["mrb_theorique"] == pytest.approx((1 - 0.039) * (1 - b["ratio_depenses"]) / 0.04415) and u["mrb_theorique"] == pytest.approx(11.62, abs=0.01) | |
| 73 | + assert u["mrb_theorique_rho55"] == pytest.approx(9.8, abs=0.05) and u["mrb_cap"] == pytest.approx(12.31, abs=0.01) | |
| 72 | 74 | |
| 73 | 75 | def test_valeur_finale_ch47_coherente(): |
| 74 | 76 | """La valeur finale citée (2 060 000 $) est celle de la réconciliation du chapitre 47.""" |
modified
assets/figures/ch25/ch25-fig-carte-terrains.pdf
+0 −0
Binary file not shown.
modified
assets/figures/ch25/ch25-fig-lotissement.pdf
+0 −0
Binary file not shown.
modified
assets/figures/ch25/ch25-fig-residuelle-sensibilite.pdf
+0 −0
Binary file not shown.
modified
assets/figures/ch25/ch25-fig-valeur-unitaire-superficie.pdf
+0 −0
Binary file not shown.
modified
assets/figures/ch33/ch33-fig-p45-sensibilite.pdf
+0 −0
Binary file not shown.
modified
assets/figures/ch33/ch33-fig-rmr.pdf
+0 −0
Binary file not shown.
modified
assets/figures/ch33/ch33-fig-schl-typologie.pdf
+0 −0
Binary file not shown.
modified
assets/figures/ch33/ch33-fig-taux-taille.pdf
+0 −0
Binary file not shown.
modified
manuscript/chapters/ch25.tex
+1 −1
@@ -394,7 +394,7 @@ L'immeuble de douze logements du cas 3, construit en 1962 sur un terrain de \msq | ||
| 394 | 394 | res/.style={bloc, fill=brandPrimary, text=white, draw=brandPrimary}, |
| 395 | 395 | op/.style={font=\sffamily\footnotesize, color=brandGray, align=center}, |
| 396 | 396 | fl/.style={-{Stealth[length=2mm]}, line width=0.6pt, color=brandGray}] |
| 397 | − \node[rev] (noi) at (0,0) {Revenu net d'exploitation stabilisé\\ $\NOI = \dollars{89956}$}; | |
| 397 | + \node[rev, text width=44mm] (noi) at (0,0) {Revenu net d'exploitation stabilisé\\ $\NOI = \dollars{89956}$}; | |
| 398 | 398 | \node[bat, below left=10mm and -6mm of noi] (cb) {Contribution du bâtiment\\ $C_B = C_N(1-\delta) = \dollars{1140000}$}; |
| 399 | 399 | \node[bat, below=6mm of cb] (rb) {Taux du bâtiment\\ $R_B = R_L + 1/n = 6{,}25\,\%$}; |
| 400 | 400 | \node[bat, right=8mm of rb, text width=34mm] (rbcb) {Revenu requis par le bâtiment\\ $R_B C_B = \dollars{71250}$}; |
modified
manuscript/chapters/ch33.tex
+1 −1
@@ -200,7 +200,7 @@ Soit un immeuble dont le revenu brut effectif est $RBE = RBP\,(1 - v)$ (autres r | ||
| 200 | 200 | Par définition, $\NOI = RBE - \rho\,RBE = RBP\,(1 - v)(1 - \rho)$ et $V = \NOI / R$. En divisant par $RBP$, $V / RBP = (1 - v)(1 - \rho) / R$. |
| 201 | 201 | \end{proof} |
| 202 | 202 | |
| 203 | −Pour le douze logements du cas~3, avec $v = \pct{3.9}$, $\rho = \pct{46.6}$ et $R = \pct{4.415}$, l'\cref{eq:33:mrb-taux} donne un multiplicateur de \num{11.63} hors autres revenus ; le multiplicateur effectif de l'indication par capitalisation, \num{12.31}, est plus élevé parce que les autres revenus (stationnement, buanderie) s'ajoutent au revenu capitalisé sans figurer au dénominateur. Un immeuble chauffé par le propriétaire, dont le ratio de dépenses atteindrait \pct{55}, aurait au même taux un multiplicateur de \num{9.8} : les multiplicateurs ne sont comparables qu'entre immeubles de même structure de dépenses, ce qui revient à dire entre immeubles de même type au sens de la \cref{sec:33:typologie}. | |
| 203 | +Pour le douze logements du cas~3, avec $v = \pct{3.9}$, $\rho = \pct{46.6}$ et $R = \pct{4.415}$, l'\cref{eq:33:mrb-taux} donne un multiplicateur de \num{11.62} hors autres revenus ; le multiplicateur effectif de l'indication par capitalisation, \num{12.31}, est plus élevé parce que les autres revenus (stationnement, buanderie) s'ajoutent au revenu capitalisé sans figurer au dénominateur. Un immeuble chauffé par le propriétaire, dont le ratio de dépenses atteindrait \pct{55}, aurait au même taux un multiplicateur de \num{9.8} : les multiplicateurs ne sont comparables qu'entre immeubles de même structure de dépenses, ce qui revient à dire entre immeubles de même type au sens de la \cref{sec:33:typologie}. | |
| 204 | 204 | |
| 205 | 205 | \subsection{Le cas 3 par ses unités} |
| 206 | 206 | |
modified
manuscript/chapters/ch34.tex
+485 −1
@@ -1,2 +1,486 @@ | ||
| 1 | 1 | \chapter{TAL, encadrement locatif et scénarios}\label{ch:34} |
| 2 | −\stubchapter | |
| 2 | + | |
| 3 | +Un immeuble locatif québécois ne rapporte pas ce que le marché paierait pour ses logements ; il rapporte ce que ses baux stipulent, et ces baux ne peuvent être modifiés qu'à l'intérieur d'un cadre que le Code civil et le Tribunal administratif du logement (TAL) fixent année après année. Le \cref{ch:26} a décrit le bail de logement, sa reconduction et les avis qui l'accompagnent ; le \cref{ch:30} a montré que la valeur d'un immeuble dont les loyers sont inférieurs au marché dépend de la vitesse à laquelle cet écart se résorbe. Le présent chapitre fait le lien entre les deux. Il expose d'abord la méthode de fixation du loyer telle qu'elle s'applique depuis le 1\textsuperscript{er} janvier 2026, en la comparant à celle qu'elle remplace, et il en déroule un calcul complet sur un logement du cas 3. Il examine ensuite les autres leviers dont dispose, ou ne dispose pas, le locateur pour ramener un loyer au marché : relocation, reprise, éviction, cession, et les réformes de 2024 qui les encadrent. Il construit enfin un modèle de la trajectoire des loyers sous contrainte, en dérive l'espérance sous rotation aléatoire, et l'applique à des scénarios dont il mesure l'effet sur la valeur par flux actualisés. Un encadré critique situe l'expérience québécoise dans la littérature internationale sur le contrôle des loyers. | |
| 4 | + | |
| 5 | +\begin{objectifs} | |
| 6 | +\begin{itemize} | |
| 7 | +\item Décrire les six critères de la fixation du loyer en vigueur depuis 2026, calculer le pourcentage de base à partir de l'indice des prix à la consommation et reconstituer une augmentation pas à pas, en sachant ce que le formulaire officiel ajoute ou retranche à ce calcul. | |
| 8 | +\item Expliquer en quoi l'ancienne méthode différait de la nouvelle et pourquoi les pourcentages publiés par le TAL ne se comparent pas d'un régime à l'autre. | |
| 9 | +\item Identifier les règles du Code civil qui gouvernent la relocation, la reprise, l'éviction et la cession de bail, y compris les modifications des lois 31 et 65 de 2024, et en déduire ce qu'un évaluateur peut ou ne peut pas supposer quant au rattrapage des loyers. | |
| 10 | +\item Modéliser l'écart entre loyer contractuel et loyer de marché, dériver l'espérance de sa trajectoire sous rotation aléatoire et en connaître la limite de long terme. | |
| 11 | +\item Construire des scénarios de loyers cohérents avec le droit et en mesurer l'effet sur la valeur DCF du cas 3, puis présenter cette fourchette dans un rapport. | |
| 12 | +\item Situer l'encadrement québécois dans la littérature économique internationale sur le contrôle des loyers et en tirer les conséquences pour l'analyse de l'offre, de l'entretien et de la mobilité. | |
| 13 | +\end{itemize} | |
| 14 | +\end{objectifs} | |
| 15 | + | |
| 16 | +\section{L'encadrement des loyers comme variable d'évaluation}\label{sec:34:cadre} | |
| 17 | + | |
| 18 | +\subsection{Deux trajectoires pour un même immeuble} | |
| 19 | + | |
| 20 | +Le \cref{ch:30} a introduit la distinction entre la trajectoire \emph{contractuelle} des loyers, celle que produisent les baux en cours reconduits par les mêmes locataires, et la trajectoire de \emph{marché}, celle que suivrait le loyer d'un logement remis en location à chaque échéance. Dans un marché sans encadrement, les deux trajectoires ne s'écartent guère : le locateur qui constate que son locataire paie moins que le marché relève le loyer à la reconduction, et le locataire qui refuse s'en va. Au Québec, le locataire qui refuse une augmentation reste dans les lieux et c'est le Tribunal qui fixe le loyer selon des critères réglementaires qui ne font aucune place à la valeur locative \parencite[art.~1945 et 1947]{ccq}. Les deux trajectoires divergent donc aussi longtemps que le locataire demeure, et ne se rejoignent qu'à son départ. L'évaluateur qui analyse l'état locatif d'un immeuble québécois mesure cet écart logement par logement (\cref{ch:26,ch:47}) ; celui qui projette les revenus doit ensuite décider à quelle vitesse il se résorbe, et cette décision commande une part importante de la valeur : dans le cas 3, le \cref{ch:30} a établi que l'écart entre la valeur par flux actualisés et la valeur par capitalisation directe, \pct{8.4}, s'explique presque entièrement par le rattrapage attendu des loyers. | |
| 21 | + | |
| 22 | +\begin{definition}{Écart contractuel-marché et rapport de loyer}{ecart} | |
| 23 | +Pour un logement $i$ à la date $t$, l'\motcle{écart contractuel-marché} est la différence $M_{i,t} - L_{i,t}$ entre le loyer mensuel qu'obtiendrait le logement s'il était reloué à un nouveau locataire et le loyer stipulé au bail en cours ; le \motcle{rapport de loyer} est $q_{i,t} = L_{i,t}/M_{i,t}$. Un rapport inférieur à un signale un loyer sous le marché ; sa trajectoire dans le temps est l'objet de la \cref{sec:34:modele}. | |
| 24 | +\end{definition} | |
| 25 | + | |
| 26 | +Trois forces agissent sur ce rapport. L'\emph{indexation} des baux reconduits, gouvernée par la méthode de fixation, le fait dériver vers le bas lorsque le pourcentage de base est inférieur à la croissance des loyers de marché, ce qui a été le cas de façon marquée en 2023 et 2024, lorsque les loyers moyens des logements de deux chambres de la RMR de Montréal progressaient de plus de \pct{7} par an pour un échantillon constant \parencite{schlLocatif2025}. La \emph{rotation} des locataires le ramène vers un, mais seulement dans la mesure où le droit permet de relouer au marché. Enfin, les \emph{leviers extraordinaires} que sont la reprise, l'éviction et la cession de bail modifient la rotation elle-même, ou la rendent impossible. Les trois sections qui suivent examinent ces forces dans l'ordre. | |
| 27 | + | |
| 28 | +\subsection{Le Tribunal administratif du logement et la reconduction du bail} | |
| 29 | + | |
| 30 | +Le Tribunal administratif du logement, qui a remplacé la Régie du logement en 2020, connaît en première instance et à l'exclusion de tout autre tribunal des demandes relatives au bail de logement et, notamment, de toutes les matières des articles 1941 à 1964 du Code civil, c'est-à-dire la reconduction, la fixation, la reprise et l'éviction \parencite[art.~28]{loiTAL}. Ses décisions en matière de fixation de loyer ne sont pas susceptibles d'appel \parencite[art.~91]{loiTAL}. Le gouvernement détient le pouvoir d'établir par règlement les critères de fixation et leurs règles d'application \parencite[art.~108]{loiTAL} ; c'est le Règlement sur les critères de fixation de loyer, dont la version actuelle résulte du décret 1455-2025 \parencite{reglCriteresFixation,decret1455_2025}, qui en est l'instrument. Le \cref{ch:26} a décrit la mécanique de la reconduction : le bail à durée fixe se reconduit de plein droit aux mêmes conditions, le locateur qui veut en modifier le loyer transmet un avis de trois à six mois avant le terme, le locataire dispose d'un mois pour refuser tout en restant dans les lieux, et le locateur a alors un mois pour demander la fixation au Tribunal, faute de quoi le bail est reconduit aux conditions antérieures \parencite[art.~1941 à 1947]{ccq}. Le locateur qui saisit le Tribunal doit déposer dans les quatre-vingt-dix jours le formulaire de renseignements nécessaires, dit formulaire RN, et la preuve de sa notification au locataire, sinon sa demande est périmée \parencite[art.~56.3]{loiTAL}. | |
| 31 | + | |
| 32 | +\begin{quebec}[{{Ce que le Tribunal fixe, et à partir de quoi}}] | |
| 33 | +Le Tribunal « fixe le loyer en tenant compte des normes fixées par règlement » et sa décision vaut pour la durée du bail reconduit, douze mois au plus \parencite[art.~1952 et 1953]{ccq}. Les renseignements qu'il utilise sont ceux du formulaire RN : pour la fixation 2026-2027, les revenus de décembre 2025 multipliés par douze, les autres revenus de 2025, les taxes municipales de 2026 et de 2025, les taxes scolaires de 2025-2026 et de 2024-2025, les primes d'assurance en vigueur au 31 décembre 2025 et 2024, et les dépenses d'immobilisation de 2025 avec le nombre de logements concernés \parencite{talFormulaireRN2026}. Le Tribunal publie chaque année, en janvier, les pourcentages applicables aux critères de fixation, après la diffusion de l'indice des prix à la consommation de décembre ; ceux de 2027 n'étaient pas publiés le 31 octobre 2026 \parencite{talIndices2026}. Il met aussi à la disposition des parties un outil de calcul en ligne, dans deux versions selon que l'avis a été donné avant ou à compter du 1\textsuperscript{er} janvier 2026 \parencite{talOutilCalcul2026}. Dans ce chapitre, les calculs reconstituent la logique du Règlement à des fins pédagogiques ; en cas de divergence, \emph{le formulaire officiel et la décision du Tribunal font foi}. | |
| 34 | +\end{quebec} | |
| 35 | + | |
| 36 | +\section{La méthode de fixation du loyer}\label{sec:34:fixation} | |
| 37 | + | |
| 38 | +\subsection{Les six critères de la méthode en vigueur depuis 2026} | |
| 39 | + | |
| 40 | +Le Règlement sur les critères de fixation de loyer a été profondément remanié par le décret 1455-2025 du 3 décembre 2025, publié à la \emph{Gazette officielle} le 17 décembre 2025 et entré en vigueur le 1\textsuperscript{er} janvier 2026 \parencite{decret1455_2025,quebecNouvelleMethodeLoyers2025}. L'ancien article 3, qui énumérait une dizaine de postes de dépenses ajustés chacun par un pourcentage propre, est remplacé par un article qui ne retient plus que six critères, et l'ancien article 3.1, qui définissait des pourcentages par composante de l'indice des prix à la consommation, par une formule unique \parencite[art.~3 et 3.1]{reglCriteresFixation}. Le \cref{tab:34:criteres} les présente avec leur règle d'application. | |
| 41 | + | |
| 42 | +\begin{table}[htbp] | |
| 43 | +\caption{Les six critères de l'article 3 du Règlement sur les critères de fixation de loyer (version en vigueur le 1\textsuperscript{er} janvier 2026) et leur règle d'application}\label{tab:34:criteres} | |
| 44 | +\centering\small | |
| 45 | +\begin{tabularx}{\textwidth}{clYY} | |
| 46 | +\toprule | |
| 47 | +N\textsuperscript{o} & Critère & Mesure & Application au logement \\ | |
| 48 | +\midrule | |
| 49 | +1\textsuperscript{o} & Pourcentage de base & Moyenne des trois dernières variations annuelles de l'IPC du Québec (art.~3.1) ; négatif réputé nul & Appliqué au loyer du logement \\ | |
| 50 | +2\textsuperscript{o} & Taxes foncières municipales et de services & Variation entre la période de référence et l'année suivante, en pourcentage, moins la valeur absolue du pourcentage de base ; négatif réputé nul (art.~4) & Pourcentage net appliqué au montant mensuel des taxes de la période de référence, selon la part attribuable \\ | |
| 51 | +3\textsuperscript{o} & Taxes foncières scolaires & Variation entre l'année précédant la période de référence et celle-ci, même règle de soustraction (art.~4) & Pourcentage net appliqué au montant mensuel de la période précédente, selon la part attribuable \\ | |
| 52 | +4\textsuperscript{o} & Primes d'assurance incendie et responsabilité & Même règle que les taxes scolaires, pour une période maximale de douze mois (art.~4) & Idem \\ | |
| 53 | +5\textsuperscript{o} & Dépenses d'immobilisation de la période de référence & Pourcentage fixe de \pct{5} (annexe I : liste non exhaustive des travaux admissibles) & Montant annuel réparti selon la part attribuable, converti en mensualité \\ | |
| 54 | +6\textsuperscript{o} & Nouveau service, accessoire ou dépendance & Dépenses d'exploitation estimées pour une année complète, hors immobilisations & Idem \\ | |
| 55 | +\bottomrule | |
| 56 | +\end{tabularx} | |
| 57 | +\tabsource{Règlement sur les critères de fixation de loyer, RLRQ, c.~T-15.01, r.~2, art.~1, 3, 3.1, 4, 5 et annexe~I, à jour au 1\textsuperscript{er} juillet 2026, consulté le 2026-10-31 \parencite{reglCriteresFixation}.} | |
| 58 | +\end{table} | |
| 59 | + | |
| 60 | +Deux notions structurent l'ensemble. La \motcle{période de référence} est l'année civile qui précède le terme du bail pour un bail se terminant entre le 1\textsuperscript{er} avril et le 31 décembre, et l'avant-dernière année civile pour un bail se terminant entre le 1\textsuperscript{er} janvier et le 31 mars \parencite[art.~1]{reglCriteresFixation} ; pour les baux montréalais typiques, échéant le 30 juin, la période de référence de la fixation de 2026 est donc l'année 2025. La \motcle{part attribuable au logement} est la proportion que le loyer du logement représente par rapport aux revenus de l'immeuble ; si une dépense ne concerne que certains logements, la proportion est établie sur les loyers de ces seuls logements, et aucune part n'est attribuable à un logement pour une dépense qui concerne un local non résidentiel \parencite[art.~5]{reglCriteresFixation} : | |
| 61 | +\begin{equation}\label{eq:34:part} | |
| 62 | +s_i = \frac{12\,L_i}{\mathit{Rev}}, \qquad \sum_{i} s_i \leq 1 , | |
| 63 | +\end{equation} | |
| 64 | +où $\mathit{Rev}$ désigne les revenus annuels de l'immeuble. Dans ce chapitre, les revenus comprennent les loyers résidentiels et les autres revenus (stationnement, buanderie), de sorte que la somme des parts des logements est légèrement inférieure à un ; le formulaire RN décrit précisément les revenus à déclarer et c'est lui qui fait foi. | |
| 65 | + | |
| 66 | +\subsection{Le pourcentage de base} | |
| 67 | + | |
| 68 | +Le pourcentage de base est le cœur de la réforme. Il se calcule par la formule de l'article 3.1 : | |
| 69 | +\begin{equation}\label{eq:34:base} | |
| 70 | +p_b = \max\left\{0,\ \frac{1}{3}\left[\frac{A - B}{B} + \frac{B - C}{C} + \frac{C - D}{D}\right]\right\}, | |
| 71 | +\end{equation} | |
| 72 | +où $A$ est la moyenne, pour la période de référence, de l'indice des prix à la consommation du Québec non désaisonnalisé, $B$ la moyenne de la période précédente, et $C$ et $D$ les moyennes des deux périodes de douze mois antérieures ; un résultat négatif est réputé égal à zéro \parencite[art.~3.1]{reglCriteresFixation}. Le pourcentage de base n'est donc pas l'inflation de l'année écoulée : c'est la moyenne des trois dernières inflations annuelles, ce qui lisse les chocs et introduit un retard. Le \cref{tab:34:ipc} applique la formule aux moyennes annuelles de l'indice publié par Statistique Canada et retrouve, à l'arrondi près, les pourcentages publiés par le Tribunal : \pct{4.5} pour 2025 et \pct{3.1} pour 2026 \parencite{statcanipc,talIndices2026}. | |
| 73 | + | |
| 74 | +\begin{table}[htbp] | |
| 75 | +\caption{Reconstitution du pourcentage de base des fixations de 2025 et de 2026 à partir des moyennes annuelles de l'IPC du Québec (ensemble, 2002 = 100, non désaisonnalisé)}\label{tab:34:ipc} | |
| 76 | +\centering\small | |
| 77 | +\begin{tabular}{lS[table-format=3.3]S[table-format=3.3]S[table-format=3.3]S[table-format=3.3]S[table-format=1.2]S[table-format=1.2]S[table-format=1.2]S[table-format=1.3]S[table-format=1.1]} | |
| 78 | +\toprule | |
| 79 | +Fixation & {$A$} & {$B$} & {$C$} & {$D$} & {$\frac{A-B}{B}$ (\%)} & {$\frac{B-C}{C}$ (\%)} & {$\frac{C-D}{D}$ (\%)} & {Formule (\%)} & {TAL (\%)} \\ | |
| 80 | +\midrule | |
| 81 | +2025 (réf. 2024) & 157.158 & 153.583 & 146.983 & 137.792 & 2.33 & 4.49 & 6.67 & 4.496 & 4.5 \\ | |
| 82 | +2026 (réf. 2025) & 161.033 & 157.158 & 153.583 & 146.983 & 2.47 & 2.33 & 4.49 & 3.095 & 3.1 \\ | |
| 83 | +\bottomrule | |
| 84 | +\end{tabular} | |
| 85 | +\tabsource{Statistique Canada, tableau 18-10-0004-01, vecteur v41691783 (IPC Québec, ensemble), diffusion du 19 octobre 2026, extrait dans \texttt{data/processed/ipc\_quebec\_mensuel.csv} ; moyennes et formule : \texttt{analysis/python/cases/ch34\_tal.py} (fonction \texttt{pourcentage\_base}) ; pourcentages publiés : TAL, page « Pourcentages applicables », consultée le 2026-10-31 \parencite{statcanipc,talIndices2026}.} | |
| 86 | +\end{table} | |
| 87 | + | |
| 88 | +La \cref{fig:34:ipc} prolonge l'exercice de 2006 à 2026. Avant 2026, la formule n'existait pas et la série est contrefactuelle ; elle montre néanmoins ce que la réforme change pour la projection des revenus. Lorsque l'inflation accélère, comme en 2022 et 2023, le pourcentage de base reste en retrait : la formule aurait donné \pct{3.75} pour la fixation de 2023 alors que l'inflation de la période de référence atteignait \pct{6.67}. Lorsque l'inflation ralentit, comme en 2025 et 2026, le pourcentage de base demeure au-dessus d'elle : \pct{4.5} contre \pct{2.33} en 2025, \pct{3.1} contre \pct{2.47} en 2026. Pour l'évaluateur, la conséquence est double. D'une part, le pourcentage de base de l'année suivante est en grande partie connu dès la fin de la période de référence, puisque deux des trois variations qui le composent sont déjà observées ; d'autre part, un immeuble dont les locataires ne bougent pas voit ses loyers suivre l'inflation avec un retard de l'ordre d'un an, alors que ses dépenses la suivent sans retard, ce qui comprime la marge dans les phases d'accélération et la restaure dans les phases de ralentissement. | |
| 89 | + | |
| 90 | +\begin{figure}[htbp] | |
| 91 | +\centering | |
| 92 | +\includegraphics[width=135mm]{ch34/ch34-fig-ipc-base.pdf} | |
| 93 | +\caption{Inflation de la période de référence (variation de la moyenne annuelle de l'IPC du Québec) et pourcentage de base qu'aurait produit la formule de l'article~3.1 pour chaque année de fixation de 2006 à 2026 ; les losanges marquent les pourcentages publiés par le TAL pour 2025 et 2026. La moyenne mobile sur trois ans retarde et lisse l'inflation : la formule reste sous l'inflation quand celle-ci accélère et au-dessus quand elle ralentit.}\label{fig:34:ipc} | |
| 94 | +\figsource{Statistique Canada, tableau 18-10-0004-01, consulté le 2026-10-31 ; TAL, « Pourcentages applicables aux critères de fixation de loyer », consulté le 2026-10-31 ; script \texttt{analysis/python/figures/ch34\_ipc\_base.py}. Avant 2026, la formule est appliquée rétrospectivement à titre d'illustration.} | |
| 95 | +\end{figure} | |
| 96 | + | |
| 97 | +\subsection{Taxes, assurances et dépenses d'immobilisation} | |
| 98 | + | |
| 99 | +Les critères 2\textsuperscript{o} à 4\textsuperscript{o} obéissent à une règle de franchise que l'article 4 formule avec précision. Pour chaque poste, le Tribunal calcule la variation en pourcentage, positive ou négative ; si elle est positive, il en soustrait la valeur absolue du pourcentage de base \emph{brut}, c'est-à-dire avant l'application du plancher à zéro, et si le résultat est négatif, il est réputé nul \parencite[art.~4, 2\textsuperscript{e} al.]{reglCriteresFixation} : | |
| 100 | +\begin{equation}\label{eq:34:net} | |
| 101 | +\tau^{\text{net}}_j = \max\left\{0,\ \Delta_j - \abs{p_b^{\text{brut}}}\right\} \quad \text{si } \Delta_j > 0, \qquad \tau^{\text{net}}_j = 0 \quad \text{sinon}, | |
| 102 | +\end{equation} | |
| 103 | +où $\Delta_j$ est la variation du poste $j$. La logique est que le pourcentage de base, appliqué à l'ensemble du loyer, couvre déjà l'inflation générale, taxes et assurances comprises ; seule la part de leur hausse qui \emph{excède} l'inflation moyenne est répercutée en sus. Une baisse de taxes ou d'assurances ne réduit pas le loyer. Le pourcentage net est ensuite appliqué au montant mensuel du poste, celui de la période de référence pour les taxes municipales et celui de la période précédente pour les taxes scolaires et les assurances, puis à la part attribuable au logement \parencite[art.~4, 3\textsuperscript{e} al.]{reglCriteresFixation}. Les dépenses d'immobilisation, enfin, donnent lieu à une hausse égale à \pct{5} de leur montant, répartie selon la part attribuable et convertie en mensualité ; ce pourcentage est fixe, alors que l'ancienne méthode le liait au taux des certificats de placement garanti \parencite{talAugmentationLoyer}. L'augmentation mensuelle du logement $i$ s'écrit donc | |
| 104 | +\begin{equation}\label{eq:34:augmentation} | |
| 105 | +\Delta L_i = L_i\, p_b + s_i \left[ \tau^{\text{net}}_{\text{mun}}\, \frac{T^{\text{mun}}_{\text{réf}}}{12} + \tau^{\text{net}}_{\text{scol}}\, \frac{T^{\text{scol}}_{\text{préc}}}{12} + \tau^{\text{net}}_{\text{ass}}\, \frac{A_{\text{préc}}}{12} + \frac{0{,}05\, I_{\text{réf}} + N_{\text{réf}}}{12} \right], | |
| 106 | +\end{equation} | |
| 107 | +où $I_{\text{réf}}$ désigne les dépenses d'immobilisation de la période de référence et $N_{\text{réf}}$ les dépenses d'exploitation annuelles d'un nouveau service, et le nouveau loyer est arrondi au dollar le plus près, une fraction inférieure à cinquante cents étant abandonnée et une fraction égale ou supérieure étant portée au dollar supérieur \parencite[art.~15.1]{reglCriteresFixation}. | |
| 108 | + | |
| 109 | +Trois règles complètent le dispositif et pèsent sur les stratégies d'investissement. Une dépense n'est prise en considération qu'une fois, seulement si elle est supportée par le locateur, et elle est réduite des aides publiques et des indemnités reçues \parencite[art.~13]{reglCriteresFixation} ; le Tribunal a rappelé qu'un propriétaire ne peut regrouper les dépenses d'immobilisation de plusieurs années pour les présenter en une seule fixation, ni récupérer des travaux déjà connus lors de la conclusion du bail initial \parencite{talResumesDecisions}. Lorsqu'une dépense d'immobilisation a bénéficié d'un prêt à intérêt réduit, l'augmentation correspondante ne peut excéder le remboursement annuel en capital et intérêts \parencite[art.~3, 4\textsuperscript{e} al.]{reglCriteresFixation}. Enfin, l'annexe I dresse une liste non exhaustive des travaux admissibles comme dépenses d'immobilisation : maintien de l'intégrité du bâtiment (fondations, charpente, toiture, revêtement, balcons, maçonnerie, portes et fenêtres, drains, sécurité), amélioration et modernisation (cuisines, salles de bain, planchers, électricité, insonorisation, buanderies, espaces communs), efficacité énergétique et adaptation climatique (isolation, chauffage et climatisation, énergie solaire, bornes de recharge) \parencite[annexe~I]{reglCriteresFixation}. Le \cref{ch:44} revient sur la rentabilité des travaux à la lumière de cette récupération de \pct{5}. | |
| 110 | + | |
| 111 | +\subsection{L'ancienne méthode et les pourcentages publiés} | |
| 112 | + | |
| 113 | +La méthode qui s'applique encore aux demandes dont l'avis a été donné avant le 1\textsuperscript{er} janvier 2026, et dont les anciens articles 1, 3, 3.1, 5, 11 et 13 continuent de régir les réajustements prenant effet avant cette date \parencite[art.~6]{decret1455_2025}, procédait poste par poste. Chaque catégorie de dépenses d'exploitation de l'immeuble était ajustée par un pourcentage tiré d'une composante de l'indice des prix à la consommation : électricité, gaz, mazout et autres sources d'énergie, frais d'entretien, frais de services rattachés à l'immeuble, frais de gestion, ces derniers étant évalués forfaitairement à \pct{5} des revenus bruts ou aux frais réels jusqu'à concurrence de \pct{10} \parencite{talCommunique2025,talformulaire2021}. Les taxes et les assurances entraient pour leur variation réelle en dollars. Le \emph{revenu net} de l'immeuble, différence entre les revenus et les dépenses d'exploitation, était majoré d'un pourcentage propre, et les dépenses d'immobilisation d'un pourcentage égal à la moyenne des taux des certificats de placement garanti de cinq ans majorée d'un point \parencite{talCommunique2025}. La somme de ces ajustements, répartie selon la part attribuable, donnait l'augmentation. Schématiquement : | |
| 114 | +\begin{equation}\label{eq:34:ancienne} | |
| 115 | +\Delta L_i^{\text{anc}} = \frac{s_i}{12}\left[\sum_{j \in \text{expl.}} D_j\, \pi_j + \Delta T^{\text{mun}} + \Delta T^{\text{scol}} + \Delta A + \left(\mathit{Rev} - \sum_j D_j\right)\pi_{\text{RN}} + I\, \pi_I\right], | |
| 116 | +\end{equation} | |
| 117 | +où les $\pi_j$ sont les pourcentages publiés par composante, $\pi_{\text{RN}}$ celui du revenu net et $\pi_I$ celui des dépenses d'immobilisation. Cette écriture reconstitue la structure du formulaire de calcul sans en reproduire les lignes ; le formulaire officiel, avec ses exclusions et ses définitions, fait foi. Le Tribunal indiquait que, de 2015 à 2024, cette méthode avait conduit à des ajustements moyens de \pct{3.8}, sur un peu plus de \num{8650} calculs en 2023-2024 \parencite{talCommunique2025}. | |
| 118 | + | |
| 119 | +Le \cref{tab:34:pourcentages} juxtapose les pourcentages publiés pour 2025 et 2026 selon les deux régimes. Les deux colonnes ne se comparent pas directement : dans l'ancienne méthode, les pourcentages s'appliquent à des dépenses, de sorte que l'augmentation résultante dépend du ratio de dépenses de l'immeuble et du poids de son revenu net ; dans la nouvelle, le pourcentage de base s'applique au loyer lui-même. Un immeuble dont les dépenses d'exploitation absorbent la moitié des revenus et dont le revenu net est majoré de \pct{5.7} obtient, par l'ancienne méthode, une hausse différente de \pct{3.1} même sans aucun travaux ; l'exemple de la \cref{sec:34:exemple} chiffre cet écart sur le cas 3. | |
| 120 | + | |
| 121 | +\begin{table}[htbp] | |
| 122 | +\caption{Pourcentages applicables aux critères de fixation de loyer publiés par le TAL pour 2025 et 2026, selon la date de l'avis de modification du bail}\label{tab:34:pourcentages} | |
| 123 | +\centering\small | |
| 124 | +\begin{tabular}{lS[table-format=-1.1]S[table-format=2.1]} | |
| 125 | +\toprule | |
| 126 | +Composante & {2025 (\%)} & {2026 (\%)} \\ | |
| 127 | +\midrule | |
| 128 | +\multicolumn{3}{l}{\textit{Avis donné à compter du 1\textsuperscript{er} janvier 2026 (méthode actuelle)}} \\ | |
| 129 | +Pourcentage de base pour le loyer & 4.5 & 3.1 \\ | |
| 130 | +Partie du loyer relative aux services rattachés à la personne (RPA) & 6.0 & 6.7 \\ | |
| 131 | +Dépenses d'immobilisation & 5.0 & 5.0 \\ | |
| 132 | +\addlinespace | |
| 133 | +\multicolumn{3}{l}{\textit{Avis donné avant le 1\textsuperscript{er} janvier 2026 (ancienne méthode)}} \\ | |
| 134 | +Électricité & 2.9 & 2.9 \\ | |
| 135 | +Gaz & -5.8 & 13.7 \\ | |
| 136 | +Mazout et autres sources d'énergie & -2.9 & 4.9 \\ | |
| 137 | +Frais d'entretien & 6.9 & 5.7 \\ | |
| 138 | +Frais de services rattachés à l'immeuble & 4.5 & 3.4 \\ | |
| 139 | +Frais de services rattachés à la personne (RPA seulement) & 5.9 & 6.3 \\ | |
| 140 | +Frais de gestion & 8.2 & 7.2 \\ | |
| 141 | +Revenu net & 6.9 & 5.7 \\ | |
| 142 | +Dépenses d'immobilisation & 4.7 & 4.0 \\ | |
| 143 | +\bottomrule | |
| 144 | +\end{tabular} | |
| 145 | +\tabsource{Tribunal administratif du logement, « Pourcentages applicables aux critères de fixation de loyer », page consultée et revérifiée le 2026-10-31 \parencite{talIndices2026} ; communiqué du 19 janvier 2026 \parencite{talCommunique2026}. Aucun pourcentage pour 2027 n'était publié à cette date.} | |
| 146 | +\end{table} | |
| 147 | + | |
| 148 | +\subsection{Ce que la fixation ne fait pas} | |
| 149 | + | |
| 150 | +Il importe de dire clairement ce que la méthode, ancienne ou nouvelle, ne permet pas. Elle ne permet pas de rattraper un retard accumulé : aucun des six critères ne fait intervenir le loyer des logements comparables ou la valeur locative du logement, et le Tribunal a rappelé que « la valeur marchande locative n'est pas un critère à prendre en considération » lorsqu'il fixe le loyer d'un nouveau locataire \parencite{talResumesDecisions}. La seule exception est le loyer de faveur, consenti à un parent, un allié ou un employé du locateur, que le Tribunal fixe en considérant celui des logements comparables \parencite[art.~1 et 6]{reglCriteresFixation}. Elle ne permet pas non plus de répercuter une hausse des dépenses d'exploitation courantes, puisque les postes d'énergie, d'entretien et de gestion ont disparu des critères ; seul le pourcentage de base, qui suit l'inflation générale, en tient compte. Elle ne garantit pas davantage au locateur le rendement de ses travaux : \pct{5} d'une dépense d'immobilisation, répartie sur les logements, est un rendement brut, avant impôt et avant toute considération de financement, et un prêt à intérêt réduit le plafonne. Pour l'évaluateur, la leçon est que le pourcentage de base est la seule variable de la trajectoire contractuelle qui ait un contenu prévisible, et que le rattrapage du marché, s'il doit venir, viendra d'ailleurs. | |
| 151 | + | |
| 152 | +\section{Exemple intégral : la fixation 2026 d'un logement du cas 3}\label{sec:34:exemple} | |
| 153 | + | |
| 154 | +\begin{synthetique} | |
| 155 | +L'immeuble du cas 3 est fictif : douze logements construits en 1962 dans Rosemont--La Petite-Patrie, à Montréal, dont l'état locatif, l'historique de dépenses et les hypothèses de projection sont décrits dans \texttt{data/synthetic/cas3\_montreal\_*} (script \texttt{analysis/python/traite/synth.py}, graine 20261031 ; voir les \cref{ch:30,ch:47}). Les loyers contractuels y ont été générés en appliquant une décote de \pct{2} par année d'ancienneté du bail au loyer de marché, hypothèse pédagogique calibrée sur l'écart cumulé entre les augmentations accordées par le TAL et la croissance des loyers de la SCHL. Tous les chiffres de ce chapitre relatifs au cas 3 proviennent de \texttt{analysis/python/cases/ch34\_tal.py}, qui n'appelle que \texttt{traite.cas3} et \texttt{traite.finance} ; seuls l'indice des prix à la consommation et les pourcentages du TAL sont des données réelles. | |
| 156 | +\end{synthetique} | |
| 157 | + | |
| 158 | +\begin{exemple}{Augmentation du loyer du logement 103 selon les pourcentages de 2026}{34:fixation} | |
| 159 | +Le logement 103 est un 3½ de \msq{51} dont le locataire est en place depuis 2008 ; son loyer contractuel est de \dollars{728} par mois alors que son loyer de marché est estimé à \dollars{1047}, soit un écart de \dollars{319} par mois, \pct{43.8} du loyer payé. Tous les baux de l'immeuble échoient le 30 juin 2027 ; l'avis de modification sera donné entre le 1\textsuperscript{er} janvier et le 31 mars 2027 et relèvera des pourcentages de 2027, non publiés à la date de rédaction. L'exemple applique donc les pourcentages de 2026, dernière année connue, à la situation de l'immeuble telle que le dossier la décrit, puis à une variante illustrative. | |
| 160 | +\end{exemple} | |
| 161 | + | |
| 162 | +La part attribuable au logement se calcule sur les revenus de l'immeuble, soit \dollars{165540} de loyers contractuels et \dollars{9360} d'autres revenus, \dollars{174900} au total : $s_{103} = 8\,736 / 174\,900 = \pct{4.995}$. Le pourcentage de base de \pct{3.1} appliqué au loyer donne \dollars{22.57}. Les données du dossier donnent ensuite, pour la variante A, des variations de taxes et d'assurances qui ne franchissent pas la franchise de l'\cref{eq:34:net} : les taxes municipales passent de \dollars{10631} en 2025 à \dollars{10188} en 2026 une fois recalculées sur la valeur au rôle et le taux de 2026 (\cref{ch:28}), soit $-\pct{4.2}$ ; les taxes scolaires augmentent de \dollars{1712} à \dollars{1744}, soit $+\pct{1.9}$, inférieur à \pct{3.1} ; les primes d'assurance reculent de \dollars{12614} à \dollars{11060}, soit $-\pct{12.3}$. Aucune dépense d'immobilisation n'a été engagée en 2025. L'augmentation est donc de \dollars{22.57}, arrondie à \dollars{23} : le loyer passe à \dollars{751}, en hausse de \pct{3.16}. La variante B conserve le loyer et les revenus mais suppose une hausse de \pct{8} des taxes municipales, une hausse de \pct{10} des primes d'assurance et la réalisation, pendant la période de référence, des travaux de maçonnerie et de balcons de \dollars{85000} que le dossier programme en 2027. Le \cref{tab:34:fixation} déroule les deux calculs et la \cref{fig:34:calcul} en donne l'image. | |
| 163 | + | |
| 164 | +\begin{table}[htbp] | |
| 165 | +\caption{Calcul pas à pas de l'augmentation mensuelle du logement 103 du cas 3 selon la méthode en vigueur depuis 2026, pourcentages de 2026 (données synthétiques ; reconstitution pédagogique, le formulaire officiel fait foi)}\label{tab:34:fixation} | |
| 166 | +\centering\small | |
| 167 | +\begin{tabular}{lS[table-format=-2.1]S[table-format=1.1]S[table-format=2.2]S[table-format=-2.1]S[table-format=1.1]S[table-format=2.2]} | |
| 168 | +\toprule | |
| 169 | + & \multicolumn{3}{c}{Variante A (dossier)} & \multicolumn{3}{c}{Variante B (illustrative)} \\ | |
| 170 | +\cmidrule(lr){2-4}\cmidrule(lr){5-7} | |
| 171 | +Étape & {Variation (\%)} & {Net (\%)} & {\$/mois} & {Variation (\%)} & {Net (\%)} & {\$/mois} \\ | |
| 172 | +\midrule | |
| 173 | +Loyer au terme du bail (\$/mois) & & & 728.00 & & & 728.00 \\ | |
| 174 | +Part attribuable $s_{103}$ (\%) & & & 4.995 & & & 4.995 \\ | |
| 175 | +1\textsuperscript{o} Pourcentage de base ($728 \times 3{,}1\,\%$) & & 3.1 & 22.57 & & 3.1 & 22.57 \\ | |
| 176 | +2\textsuperscript{o} Taxes municipales (10 631 \$ $\to$ 10 188 \$ ; variante B : +8 \%) & -4.2 & 0.0 & 0.00 & 8.0 & 4.9 & 2.17 \\ | |
| 177 | +3\textsuperscript{o} Taxes scolaires (1 712 \$ $\to$ 1 744 \$) & 1.9 & 0.0 & 0.00 & 1.9 & 0.0 & 0.00 \\ | |
| 178 | +4\textsuperscript{o} Assurances (12 614 \$ $\to$ 11 060 \$ ; variante B : +10 \%) & -12.3 & 0.0 & 0.00 & 10.0 & 6.9 & 3.62 \\ | |
| 179 | +5\textsuperscript{o} Dépenses d'immobilisation (0 \$ ; variante B : 85 000 \$ × 5 \%) & & & 0.00 & & 5.0 & 17.69 \\ | |
| 180 | +6\textsuperscript{o} Nouveau service & & & 0.00 & & & 0.00 \\ | |
| 181 | +\midrule | |
| 182 | +Augmentation avant arrondi & & & 22.57 & & & 46.05 \\ | |
| 183 | +Nouveau loyer arrondi (art.~15.1) & & & 751.00 & & & 774.00 \\ | |
| 184 | +Augmentation effective (\%) & & & 3.16 & & & 6.32 \\ | |
| 185 | +\addlinespace | |
| 186 | +\multicolumn{7}{l}{\textit{Pour comparaison : structure de l'ancienne méthode, pourcentages 2026 des avis donnés avant 2026}} \\ | |
| 187 | +Nouveau loyer reconstitué (\$/mois) & & & 755.00 & & & 786.00 \\ | |
| 188 | +Augmentation effective (\%) & & & 3.71 & & & 7.97 \\ | |
| 189 | +\bottomrule | |
| 190 | +\end{tabular} | |
| 191 | +\tabsource{\synth{\texttt{analysis/python/cases/ch34\_tal.py}, fonctions \texttt{exemple\_fixation}, \texttt{fixation\_nouvelle} et \texttt{fixation\_ancienne}. Le pourcentage net des taxes municipales s'applique au montant mensuel de 2025 ($10\,631/12$), celui des assurances au montant mensuel de 2024 ($12\,614/12$), chacun multiplié par la part attribuable.}} | |
| 192 | +\end{table} | |
| 193 | + | |
| 194 | +\begin{figure}[htbp] | |
| 195 | +\centering | |
| 196 | +\includegraphics[width=135mm]{ch34/ch34-fig-calcul-tal.pdf} | |
| 197 | +\caption{Composantes de l'augmentation mensuelle du logement 103 selon la méthode de 2026 : dans la variante A, seules les données du dossier interviennent et le pourcentage de base est la seule composante non nulle ; dans la variante B, la hausse des taxes et des assurances au-delà de \pct{3.1} et les travaux de \dollars{85000} ajoutent \dollars{23.48}. L'écart au loyer de marché, \dollars{319} par mois, est hors de portée des deux calculs.}\label{fig:34:calcul} | |
| 198 | +\figsource{\synth{script \texttt{analysis/python/figures/ch34\_calcul\_tal.py}, graine 20261031}} | |
| 199 | +\end{figure} | |
| 200 | + | |
| 201 | +Trois enseignements se dégagent. Le premier est l'ordre de grandeur : même dans la variante B, qui cumule des hausses de coûts supérieures à l'inflation et des travaux lourds, l'augmentation reste de \dollars{46} par mois, soit un septième de l'écart au marché. Au rythme du pourcentage de base, et si le loyer de marché cessait de croître, il faudrait près de douze ans pour que le loyer du logement 103 rejoigne \dollars{1047} ; comme le marché ne s'arrête pas, il ne le rejoindra jamais par la fixation. Le deuxième est l'effet de la franchise : des hausses de taxes de \pct{8} et d'assurances de \pct{10} ne se répercutent qu'à hauteur de \pct{4.9} et de \pct{6.9}, et sur la seule part attribuable au logement, ce qui donne \dollars{5.79} par mois ; dans l'ancienne méthode, la variation réelle des taxes et des assurances passait intégralement, et le revenu net de l'immeuble était en outre majoré de \pct{5.7}, d'où un loyer reconstitué de \dollars{786} au lieu de \dollars{774}. Le troisième est le rendement des travaux : \dollars{85000} de maçonnerie et de balcons rapportent \dollars{4250} par an à l'immeuble, soit \dollars{17.69} par mois pour le logement 103, et ce montant, une fois intégré au loyer, est indexé les années suivantes ; la \cref{sec:34:scenarios} mesure ce qu'une telle récupération vaut pour l'immeuble entier. | |
| 202 | + | |
| 203 | +\section{Reprise, éviction et autres leviers : la capacité à ramener les loyers au marché}\label{sec:34:leviers} | |
| 204 | + | |
| 205 | +Si la fixation ne résorbe pas l'écart, quels mécanismes le peuvent ? La réponse du droit québécois est restrictive, et elle l'est davantage depuis 2024. Le \cref{tab:34:droit} résume les mécanismes et leur effet sur la capacité du locateur à porter les loyers au marché ; les paragraphes qui suivent les commentent du point de vue de l'évaluateur, en renvoyant au \cref{ch:26} pour la mécanique des avis et des délais. | |
| 206 | + | |
| 207 | +\begin{table}[htbp] | |
| 208 | +\caption{Mécanismes juridiques qui gouvernent le rattrapage des loyers et leur traduction en hypothèses de projection}\label{tab:34:droit} | |
| 209 | +\centering\small | |
| 210 | +\begin{tabularx}{\textwidth}{lYY} | |
| 211 | +\toprule | |
| 212 | +Mécanisme (disposition) & Règle & Conséquence pour la projection \\ | |
| 213 | +\midrule | |
| 214 | +Reconduction et fixation (art.~1941--1953 C.c.Q. ; Règlement) & Le locataire qui refuse l'augmentation reste ; le Tribunal fixe selon les critères, sans référence au marché & Trajectoire contractuelle bornée par le pourcentage de base, plus taxes et assurances au-delà de la franchise et \pct{5} des immobilisations \\ | |
| 215 | +Relocation (art.~1896 et 1950 C.c.Q.) & Le nouveau locataire est informé du loyer le plus bas payé dans les douze mois précédents (section G du bail) et peut demander la fixation dans les dix jours, ou deux mois sans avis ; dommages-intérêts punitifs en cas de fausse déclaration & Relocation au marché possible mais non garantie : modéliser un rattrapage partiel $\varphi \leq 1$ ou une probabilité de recours \\ | |
| 216 | +Cession de bail (art.~1978.1--1978.4, Loi 31) & Le locateur peut refuser la cession pour un motif autre que sérieux ; le bail est alors résilié à la date de cession ; le cédant ne peut exiger de contrepartie & Le départ d'un locataire ne transmet plus le bail à loyer bas : la rotation ramène plus sûrement au marché \\ | |
| 217 | +Vente de l'immeuble (art.~1937 C.c.Q.) & L'aliénation ne permet pas au nouveau locateur de résilier le bail & L'acheteur hérite de l'état locatif : aucun rattrapage à la vente \\ | |
| 218 | +Reprise (art.~1957--1958, 1960--1964, 1970 C.c.Q.) & Réservée au propriétaire personne physique, pour lui-même ou des proches ; impossible pour un indivisaire sauf avec son seul conjoint ; relouer ensuite exige l'autorisation du Tribunal, qui fixe le loyer & Aucun effet sur la valeur marchande d'un immeuble de placement ; pertinent pour un acheteur-occupant de plex (\cref{ch:32}) \\ | |
| 219 | +Éviction (art.~1959, 1959.1, 1965 C.c.Q. ; Loi 65) & Subdivision, agrandissement substantiel ou changement d'affectation ; interdite jusqu'au 6 juin 2027 ; protection des locataires de 65 ans et plus occupant depuis dix ans à revenu modeste ; indemnité d'un mois de loyer par année d'occupation, de trois à vingt-quatre mois, plus déménagement & Aucune stratégie de repositionnement par éviction ne peut être valorisée dans la valeur marchande avant juin 2027 ; au-delà, coût d'indemnisation explicite \\ | |
| 220 | +Immeubles neufs et coopératives (art.~1955 C.c.Q., « clause F ») & Pas de fixation dans les cinq ans suivant la mise en service, si le bail l'indique et, depuis le 21 février 2024, s'il précise le loyer maximal des cinq années ; coopératives d'habitation depuis le 24 février 2026 & Trajectoire contractuelle libre dans la limite du loyer maximal inscrit, puis retour au régime général \\ | |
| 221 | +Conversion en copropriété divise (Loi sur le TAL, art.~51--54.13) & Autorisation du Tribunal ; interdite dans l'agglomération de Montréal sauf dérogation ; droit de préemption du locataire ; pas de reprise après l'avis d'intention & Hors du champ de la valeur locative ; voir \cref{ch:42} \\ | |
| 222 | +\bottomrule | |
| 223 | +\end{tabularx} | |
| 224 | +\tabsource{Code civil du Québec, à jour au 15 octobre 2026 \parencite{ccq} ; Loi sur le TAL \parencite{loiTAL} ; L.Q. 2024, c.~2 \parencite{loi31_2024} ; L.Q. 2024, c.~23 \parencite{loi65_2024} ; notes de vérification du dépôt (\texttt{sources/notes-A.md}, §~5--6), consultées le 2026-10-31.} | |
| 225 | +\end{table} | |
| 226 | + | |
| 227 | +\subsection{La relocation : le levier ordinaire, et ses limites} | |
| 228 | + | |
| 229 | +Le départ volontaire du locataire est, de très loin, le mécanisme qui ramène le plus de loyers au marché, et c'est celui que le modèle de la \cref{sec:34:modele} place au centre. Il n'est pourtant pas sans contrainte. Le locateur qui conclut un nouveau bail doit y indiquer, à la section G du formulaire obligatoire, le loyer le plus bas payé au cours des douze mois précédents \parencite[art.~1896]{ccq}, et le nouveau locataire qui paie davantage peut demander au Tribunal de fixer le loyer, dans les dix jours de la conclusion du bail, ou dans les deux mois s'il n'a pas reçu l'avis ou s'il découvre une fausse déclaration \parencite[art.~1950]{ccq} ; la Loi 31 a ajouté des dommages-intérêts punitifs contre le locateur qui fait sciemment une fausse déclaration ou omet l'avis \parencite{loi31_2024}. Si le nouveau locataire exerce ce recours, le Tribunal fixe le loyer à partir de l'ancien loyer et des critères du Règlement, sans égard au marché \parencite{talResumesDecisions} : le rattrapage est alors ramené à ce que la fixation aurait accordé. La pratique montre que ce recours est peu exercé, pour des raisons que la littérature sur la mobilité résidentielle éclaire, le nouveau locataire ayant accepté le loyer en connaissance du marché et redoutant un conflit au début du bail ; mais un évaluateur ne peut pas l'ignorer, et la \cref{sec:34:modele} introduit un paramètre $\varphi$, fraction de l'écart effectivement rattrapée à la relocation, pour en tenir compte. La Loi 31 a par ailleurs modifié la cession de bail dans un sens favorable au locateur : celui-ci peut désormais refuser une cession pour un motif autre qu'un motif sérieux, auquel cas le bail est résilié à la date de cession indiquée, et le cédant ne peut exiger aucune contrepartie \parencite[art.~1978.2 et 1978.3]{ccq}. La pratique antérieure, qui permettait à un locataire de transmettre un bail à loyer bas à un cessionnaire de son choix, perpétuait l'écart au-delà du départ du locataire initial ; depuis le 21 février 2024, le départ d'un locataire ouvre normalement la voie à une relocation. | |
| 230 | + | |
| 231 | +\subsection{Reprise et éviction : des leviers qui ne créent pas de valeur marchande} | |
| 232 | + | |
| 233 | +La reprise de possession permet au propriétaire personne physique de reprendre un logement pour l'habiter lui-même ou y loger un ascendant ou un descendant au premier degré, un parent ou allié dont il est le principal soutien, ou un ex-conjoint dont il demeure le principal soutien \parencite[art.~1957]{ccq}. Elle est fermée au propriétaire d'une part indivise, sauf si l'unique autre indivisaire est son conjoint, et donc à toute société \parencite[art.~1958]{ccq}. Le logement repris ne peut être reloué ni affecté à un autre usage sans l'autorisation du Tribunal, qui fixe alors le loyer \parencite[art.~1970]{ccq}. Pour l'évaluation d'un immeuble de placement, la reprise n'est donc pas un levier : elle ne peut servir qu'à un acheteur-occupant de duplex ou de triplex, dont elle fonde la valeur d'usage, question traitée au \cref{ch:32}. | |
| 234 | + | |
| 235 | +L'éviction, qui vise la subdivision du logement, son agrandissement substantiel ou le changement d'affectation \parencite[art.~1959]{ccq}, a longtemps été le levier des stratégies de repositionnement : vider l'immeuble, rénover lourdement, relouer au marché ou convertir. La Loi 65, sanctionnée le 6 juin 2024, l'a suspendue : « malgré l'article 1959 du Code civil, aucun locataire ne peut être évincé d'un logement avant le 6 juin 2027 aux fins prévues à cet article » \parencite[art.~1]{loi65_2024}. Le moratoire peut prendre fin plus tôt dans les centres de \num{10000} habitants et plus où le taux d'inoccupation mesuré par la SCHL atteint \pct{3}, soixante jours après un avis ministériel, et le gouvernement peut en soustraire des territoires ; aucun avis de cette nature n'avait été repéré au 31 octobre 2026, et le gouvernement doit recevoir un rapport sur l'application de la loi au plus tard le 6 février 2027 \parencite[art.~2, 11 et 12]{loi65_2024}. La même loi a étendu la protection des locataires aînés : aucune reprise ni éviction n'est possible lorsque le locataire ou son conjoint est âgé de 65 ans ou plus, occupe le logement depuis au moins dix ans et dispose d'un revenu égal ou inférieur à \pct{125} du revenu maximal d'admissibilité au logement à loyer modique, alors que le seuil était auparavant de 70 ans et de \pct{100} \parencite[art.~1959.1]{ccq}. Enfin, la Loi 31 avait déjà relevé l'indemnité due au locataire évincé : outre les frais raisonnables de déménagement, un mois de loyer par année de location ininterrompue, avec un minimum de trois et un maximum de vingt-quatre mois, le Tribunal pouvant accorder davantage ; le locateur doit prouver sa bonne foi et s'expose à des dommages punitifs en cas de mauvaise foi \parencite[art.~1965 et 1968]{ccq}. | |
| 236 | + | |
| 237 | +Pour l'évaluateur, la conséquence est nette. La valeur marchande d'un immeuble locatif occupé doit être établie dans l'hypothèse de la continuation de l'exploitation locative, avec un rattrapage des loyers au gré des départs volontaires. Une valeur qui reposerait sur l'éviction des locataires avant juin 2027 contreviendrait au droit ; une valeur qui reposerait sur des évictions après cette date supposerait la non-reconduction du moratoire, l'inapplicabilité de l'article 1959.1 à chaque locataire visé et le paiement d'indemnités qui, pour le logement 103 occupé depuis dix-huit ans, atteindraient dix-huit mois de loyer, soit \dollars{13104} ; l'\cref{ex:34:5} en fait le calcul. De telles hypothèses relèvent de la valeur d'investissement d'un acheteur particulier, ou d'une hypothèse extraordinaire que les Normes de pratique professionnelle de l'OEAQ exigent de divulguer avec son incidence sur la valeur \parencite{oeaqNormes}, et non de la valeur marchande. | |
| 238 | + | |
| 239 | +\subsection{La « clause F » et les immeubles neufs} | |
| 240 | + | |
| 241 | +L'article 1955 du Code civil soustrait à la fixation les logements situés dans un immeuble nouvellement bâti ou dont l'utilisation à des fins résidentielles résulte d'un changement d'affectation récent, pendant les cinq années qui suivent la date à laquelle l'immeuble est prêt pour l'usage auquel il est destiné, ainsi que, depuis le 24 février 2026, tout logement loué par une coopérative d'habitation \parencite[art.~1955]{ccq}. Dans l'usage, cette restriction est désignée par la « clause F », du nom de la section F du formulaire de bail où elle doit être cochée ; l'appellation n'apparaît pas dans le Règlement sur les formulaires de bail obligatoires, dont les annexes ne sont pas reproduites dans le texte refondu, et c'est pourquoi le présent ouvrage la met entre guillemets \parencite{reglFormulairesBail}. La restriction n'est opposable au locataire que si elle est mentionnée au bail et, pour les baux conclus depuis le 21 février 2024, que si le bail indique le loyer maximal que le locateur pourra exiger au cours des cinq années \parencite[art.~1955]{ccq}. Dans un logement visé, le locataire qui refuse une augmentation ne peut demeurer dans les lieux : il doit quitter le logement à la fin du bail \parencite[art.~1945]{ccq}. Pour l'évaluation d'un immeuble neuf, la trajectoire contractuelle des cinq premières années est donc libre, dans la limite du loyer maximal inscrit, et elle rejoint le régime général ensuite ; le Tribunal a confirmé l'application de l'exception à un immeuble de moins de cinq ans \parencite{talResumesDecisions}. Le praticien vérifie au bail la présence de la mention et du loyer maximal, car leur absence replace le logement sous le régime ordinaire dès le premier renouvellement. | |
| 242 | + | |
| 243 | +\section{Modéliser l'écart contractuel-marché et sa résorption}\label{sec:34:modele} | |
| 244 | + | |
| 245 | +\subsection{La dérive sans relocation} | |
| 246 | + | |
| 247 | +Reprenons les notations du \cref{ch:30} : $L_{i,t}$ est le loyer contractuel du logement $i$ l'année $t$, $M_{i,t}$ son loyer de marché, $g_c$ le taux d'indexation des baux reconduits et $g_m$ la croissance des loyers de marché. Tant que le locataire reste, le rapport de loyer évolue mécaniquement : | |
| 248 | +\begin{equation}\label{eq:34:derive} | |
| 249 | +q_{i,t} = q_{i,0}\, \delta^{t}, \qquad \delta = \frac{1 + g_c}{1 + g_m}, | |
| 250 | +\end{equation} | |
| 251 | +et il décroît si $g_c < g_m$. Avec $g_c = \pct{3.1}$ et $g_m = \pct{3.5}$, $\delta = 0{,}99614$ : la dérive est lente, un peu moins de quatre dixièmes de point par an, et un logement loué au marché aujourd'hui serait encore à \pct{96.2} du marché après dix ans. Mais la dérive est cumulative et, dans le cas 3, l'écart de \pct{30.5} du logement 103 résulte de dix-huit années pendant lesquelles les augmentations accordées sont restées très en deçà de la croissance des loyers de marché, surtout entre 2021 et 2025. Sans relocation, l'immeuble entier passerait d'un rapport de loyer de \pct{89.0} en 2026 à \pct{85.6} en 2036, et son revenu brut potentiel resterait \dollars{37781} sous le marché la dixième année. | |
| 252 | + | |
| 253 | +\subsection{La rotation comme processus aléatoire} | |
| 254 | + | |
| 255 | +Le départ d'un locataire est un événement incertain. Le modèle le plus simple suppose que chaque locataire quitte son logement, au cours d'une année donnée, avec une probabilité $\rho$ constante et indépendante du passé, et que le logement est alors reloué à son loyer de marché. La probabilité qu'un locataire en place à la date d'évaluation y soit encore après $t$ années, et la durée espérée de son occupation à venir, s'écrivent | |
| 256 | +\begin{equation}\label{eq:34:survie} | |
| 257 | +\Pr\{\text{en place à } t\} = (1 - \rho)^{t}, \qquad \E[\text{années avant le départ}] = \frac{1}{\rho}. | |
| 258 | +\end{equation} | |
| 259 | +Avec la rotation de \pct{15} du cas 3, un locataire sur cinq est encore là après dix ans et la durée espérée d'occupation restante est de six ans et huit mois ; avec \pct{5}, trois locataires sur cinq sont encore là après dix ans et la durée espérée est de vingt ans. La SCHL mesurait en octobre 2025 un taux de rotation de \pct{9.4} dans la RMR de Montréal, en baisse par rapport à \pct{11.1} un an plus tôt \parencite{schlLocatif2025,schlrmltables2025} ; ce taux porte sur l'ensemble du parc, et il est vraisemblablement plus faible encore pour les locataires dont le loyer est très inférieur au marché, puisque ce sont eux qui ont le plus à perdre à déménager. C'est la mobilité réduite que la littérature attribue aux contrôles de loyers (\cref{sec:34:litterature}) : le taux de rotation n'est pas une donnée exogène de la projection, il dépend de l'écart lui-même. | |
| 260 | + | |
| 261 | +\begin{proposition}{Espérance du rapport de loyer sous rotation aléatoire}{rotation} | |
| 262 | +Soit un logement de rapport de loyer initial $q_0$, dont le locataire part chaque année avec probabilité $\rho$ indépendamment du passé, le logement étant alors reloué à son loyer de marché puis indexé au taux $g_c$, le marché croissant au taux $g_m$. En posant $\delta = (1+g_c)/(1+g_m)$ et $a = (1-\rho)\,\delta$, l'espérance du rapport de loyer après $t$ années est | |
| 263 | +\begin{equation}\label{eq:34:fermee} | |
| 264 | +\E[q_t] = q_0\, a^{t} + \rho\, \frac{1 - a^{t}}{1 - a}, | |
| 265 | +\end{equation} | |
| 266 | +et elle converge, lorsque $t \to \infty$, vers la limite | |
| 267 | +\begin{equation}\label{eq:34:limite} | |
| 268 | +q_\infty = \frac{\rho}{1 - (1-\rho)\,\delta}, | |
| 269 | +\end{equation} | |
| 270 | +qui est inférieure à un si $g_c < g_m$, égale à un si $g_c = g_m$, croissante en $\rho$ et indépendante de $q_0$. | |
| 271 | +\end{proposition} | |
| 272 | +\begin{proof} | |
| 273 | +Conditionnellement à l'état en $t-1$, le rapport en $t$ vaut $q_{t-1}\delta$ si le locataire reste, avec probabilité $1-\rho$, et $1$ s'il part, avec probabilité $\rho$ ; d'où la récurrence $\E[q_t] = (1-\rho)\,\delta\, \E[q_{t-1}] + \rho = a\, \E[q_{t-1}] + \rho$. Cette récurrence affine se résout par itération : $\E[q_t] = a^t q_0 + \rho\,(1 + a + \dots + a^{t-1})$, et la somme géométrique donne \eqref{eq:34:fermee} puisque $a \neq 1$. Comme $0 < a < 1$, $a^t \to 0$ et $\E[q_t] \to \rho/(1-a)$, ce qui est \eqref{eq:34:limite}. Si $g_c = g_m$, $\delta = 1$ et $q_\infty = \rho/\rho = 1$ ; si $g_c < g_m$, $\delta < 1$ et $1 - (1-\rho)\delta > \rho$, donc $q_\infty < 1$. La dérivée $\partial q_\infty / \partial \rho = (1-\delta)/[1-(1-\rho)\delta]^2$ est positive dès que $\delta < 1$. | |
| 274 | +\end{proof} | |
| 275 | + | |
| 276 | +La limite \eqref{eq:34:limite} est la clé de lecture de la section. Elle dit qu'un parc dont les locataires tournent à un rythme $\rho$ se stabilise, en moyenne, à une fraction $q_\infty$ du marché, quel que soit son point de départ ; le passé ne pèse que sur la vitesse de convergence, par le terme $q_0 a^t$. Le \cref{tab:34:qt} chiffre la trajectoire pour le logement 103 et trois taux de rotation, et la \cref{fig:34:rotation} la met en regard d'une simulation de vingt mille trajectoires, qui confirme la forme fermée à trois décimales près. Avec \pct{15}, l'espérance du rapport passe de \pct{69.5} à \pct{92.5} en dix ans et tend vers \pct{97.9} ; avec \pct{5}, elle n'atteint que \pct{79.5} en dix ans et sa limite est \pct{93.2} ; avec \pct{25}, elle est à \pct{97.3} dès la dixième année. La dérivée de la limite par rapport à la rotation vaut $1{,}34$ à \pct{5} et $0{,}16$ à \pct{15} : c'est aux faibles rotations que chaque point de rotation supplémentaire compte le plus, résultat que l'\cref{ex:34:7} explore. | |
| 277 | + | |
| 278 | +\begin{table}[htbp] | |
| 279 | +\caption{Espérance du rapport de loyer d'un logement partant de $q_0 = 0{,}695$ (logement 103 du cas 3), $g_c = \pct{3.1}$, $g_m = \pct{3.5}$, selon le taux de rotation}\label{tab:34:qt} | |
| 280 | +\centering\small | |
| 281 | +\begin{tabular}{S[table-format=2.0]S[table-format=1.4]S[table-format=1.4]S[table-format=1.4]S[table-format=1.4]S[table-format=1.4]S[table-format=1.4]S[table-format=1.3]} | |
| 282 | +\toprule | |
| 283 | +{Rotation $\rho$ (\%)} & {$a = (1-\rho)\delta$} & {$\E[q_1]$} & {$\E[q_2]$} & {$\E[q_5]$} & {$\E[q_{10}]$} & {$q_\infty$} & {$\Pr\{\text{en place à } 10\}$} \\ | |
| 284 | +\midrule | |
| 285 | +0 & 0.9961 & 0.6923 & 0.6896 & 0.6816 & 0.6685 & 0.0000 & 1.000 \\ | |
| 286 | +5 & 0.9463 & 0.7077 & 0.7197 & 0.7520 & 0.7953 & 0.9316 & 0.599 \\ | |
| 287 | +15 & 0.8467 & 0.7385 & 0.7753 & 0.8552 & 0.9249 & 0.9786 & 0.197 \\ | |
| 288 | +25 & 0.7471 & 0.7692 & 0.8247 & 0.9202 & 0.9726 & 0.9885 & 0.056 \\ | |
| 289 | +\bottomrule | |
| 290 | +\end{tabular} | |
| 291 | +\tabsource{\synth{\texttt{analysis/python/cases/ch34\_tal.py}, fonctions \texttt{ratio\_espere}, \texttt{ratio\_limite}. Pour $\rho = 0$, la limite n'est pas définie par \eqref{eq:34:limite} et le rapport tend vers zéro ; la ligne donne la dérive \eqref{eq:34:derive}.}} | |
| 292 | +\end{table} | |
| 293 | + | |
| 294 | +\begin{figure}[htbp] | |
| 295 | +\centering | |
| 296 | +\includegraphics[width=135mm]{ch34/ch34-fig-rotation-esperee.pdf} | |
| 297 | +\caption{À gauche, espérance du rapport loyer contractuel sur loyer de marché d'un logement partant de 0,695, pour une rotation de 5, 15 et 25 \% par an : forme fermée \eqref{eq:34:fermee} en trait plein, moyenne de \num{20000} trajectoires simulées en cercles, limites $q_\infty$ en pointillé et dérive sans relocation en tireté. À droite, probabilité que le locataire initial soit encore en place. La convergence est rapide pour les fortes rotations et la limite s'éloigne de un lorsque la rotation faiblit.}\label{fig:34:rotation} | |
| 298 | +\figsource{\synth{script \texttt{analysis/python/figures/ch34\_rotation.py}, graine 20261031}} | |
| 299 | +\end{figure} | |
| 300 | + | |
| 301 | +\subsection{Du logement à l'immeuble : espérance ou ordre de départ} | |
| 302 | + | |
| 303 | +L'espérance du revenu brut potentiel de l'immeuble s'obtient en appliquant \eqref{eq:34:fermee} à chaque logement et en sommant : | |
| 304 | +\begin{equation}\label{eq:34:rbp} | |
| 305 | +\E[RBP_t] = 12 \sum_{i=1}^{n} M_{i,0}\,(1+g_m)^{t}\; \E[q_{i,t}] . | |
| 306 | +\end{equation} | |
| 307 | +La projection du module commun \texttt{traite.cas3.projection\_dcf}, utilisée aux \cref{ch:30,ch:47}, procède autrement : elle reloue chaque année un nombre entier de logements, $k = \mathrm{round}(\rho n)$, soit deux logements sur douze pour $\rho = \pct{15}$, en choisissant \emph{les plus sous le marché}. Cette hypothèse d'ordre n'est pas neutre. Dans le cas 3, le rapport de loyer de l'immeuble part de \pct{89.0} ; après dix ans, il atteint \pct{99.0} sous l'hypothèse déterministe « les plus sous le marché d'abord », mais seulement \pct{96.2} en espérance sous départs indépendants, et \pct{85.6} sans relocation. L'écart de \dollars{7523} sur le revenu brut de la onzième année se traduit, après capitalisation dans la valeur terminale, par une différence de valeur de \dollars{116937}, soit \pct{5.3} : \dollars{2208566} dans le dossier contre \dollars{2091629} en espérance. L'hypothèse du dossier revient à supposer que le propriétaire sait lesquels de ses locataires partiront, et que ce sont ceux dont le départ lui rapporte le plus ; elle est favorable au locateur. L'hypothèse d'indépendance est plus prudente mais ignore qu'un locataire très avantagé déménage moins qu'un autre, ce qui la rend à son tour optimiste. La vérité se situe vraisemblablement en deçà des deux, et c'est pourquoi la \cref{sec:34:scenarios} fait varier la rotation sur une large plage plutôt que de chercher la « bonne » valeur. | |
| 308 | + | |
| 309 | +\subsection{Rattrapage partiel et récupération des dépenses d'immobilisation} | |
| 310 | + | |
| 311 | +Deux extensions rendent le modèle plus fidèle au droit décrit à la \cref{sec:34:leviers}. La première introduit la fraction $\varphi$ de l'écart effectivement rattrapée à la relocation, qui représente soit la probabilité qu'un nouveau locataire fasse fixer le loyer en vertu de l'article 1950, soit une concession commerciale à la relocation : | |
| 312 | +\begin{equation}\label{eq:34:phi} | |
| 313 | +L_{i,t} = L_{i,t-1}(1+g_c) + \varphi\left[M_{i,t} - L_{i,t-1}(1+g_c)\right] \quad \text{si le logement } i \text{ est reloué l'année } t . | |
| 314 | +\end{equation} | |
| 315 | +Avec $\varphi = 1$, on retrouve la relocation au marché du \cref{ch:30} ; avec $\varphi = 0$, la relocation ne change rien et l'immeuble suit la dérive \eqref{eq:34:derive} ; la récurrence de la \cref{prop:rotation} devient $\E[q_t] = [(1-\rho) + \rho(1-\varphi)]\,\delta\,\E[q_{t-1}] + \rho\varphi$, dont la limite est $\rho\varphi/[1 - (1-\rho\varphi)\delta]$, soit la limite d'une rotation « efficace » $\rho\varphi$. La seconde extension incorpore la récupération de \pct{5} des dépenses d'immobilisation : l'année qui suit des travaux admissibles d'un montant $I$, les loyers de l'immeuble sont majorés, au total, de $0{,}05\,I$ par an, répartis selon la part attribuable, et cette majoration est ensuite indexée avec le reste du loyer : | |
| 316 | +\begin{equation}\label{eq:34:recup} | |
| 317 | +L_{i,t} \leftarrow L_{i,t}\left(1 + \frac{0{,}05\, I_{t-1}}{RBP_{t-1}}\right) . | |
| 318 | +\end{equation} | |
| 319 | +Le \cref{ch:30} avait volontairement ignoré cette récupération, ce qui est prudent ; la \cref{sec:34:scenarios} en mesure la valeur pour les \dollars{245000} de travaux que le dossier programme. | |
| 320 | + | |
| 321 | +\subsection{La valeur actualisée de l'écart} | |
| 322 | + | |
| 323 | +Enfin, l'écart contractuel-marché a lui-même une valeur. La somme actualisée des écarts annuels sur l'horizon, | |
| 324 | +\begin{equation}\label{eq:34:vaecart} | |
| 325 | +\mathit{VA}_{\text{écart}} = \sum_{t=1}^{T} \frac{RBP^{\text{marché}}_t - RBP_t}{(1+r)^{t}}, | |
| 326 | +\end{equation} | |
| 327 | +mesure ce que l'encadrement coûte au propriétaire en revenus bruts pendant la période de projection, avant inoccupation et avant dépenses ; elle est aussi, au signe près, l'avantage locatif que les locataires en place détiennent collectivement, dont le \cref{ch:02} a montré qu'il constitue un droit réel au sens économique du terme. Dans le cas 3, cette valeur est de \dollars{56008} sous les hypothèses du dossier, de \dollars{104837} en espérance et de \dollars{184956} sans relocation ; elle ne capture toutefois pas l'essentiel de l'effet sur la valeur, qui passe par le revenu de l'année terminale et sa capitalisation. | |
| 328 | + | |
| 329 | +\section{Scénarios de loyers et valeur}\label{sec:34:scenarios} | |
| 330 | + | |
| 331 | +\subsection{Construction des scénarios} | |
| 332 | + | |
| 333 | +Les scénarios de ce chapitre reposent sur une fonction locale, \texttt{projection\_scenario}, qui reprend ligne pour ligne la logique de \texttt{traite.cas3.projection\_dcf} en y ajoutant les paramètres introduits plus haut : taux de rotation, pourcentage de base, croissance du marché, fraction de rattrapage $\varphi$, récupération des dépenses d'immobilisation, et choix entre le mode déterministe du dossier et le mode en espérance. Lorsque ses paramètres sont ceux du dossier, elle reproduit exactement la projection du \cref{ch:30}, ce que le test \texttt{test\_ch34.py} vérifie à chaque exécution ; la valeur de chaque scénario est ensuite obtenue par \texttt{traite.cas3.valeur\_dcf}, avec le taux d'actualisation de \pct{7.25}, le taux terminal de \pct{5.00}, les coûts de vente de \pct{2.5} et l'horizon de dix ans du dossier, qui ne varient pas ici. Les dépenses, la réserve, l'inoccupation et les travaux sont ceux du \cref{ch:30} : seule la trajectoire des loyers change. Cette discipline isole l'effet de l'encadrement ; le \cref{ch:40} croisera ces variations avec celles des taux et des dépenses dans une simulation de Monte-Carlo. | |
| 334 | + | |
| 335 | +\subsection{La grille rotation et pourcentage de base} | |
| 336 | + | |
| 337 | +Le \cref{tab:34:grille} croise trois taux de rotation, \pct{5}, \pct{15} et \pct{25}, qui correspondent en mode déterministe à un, deux et trois logements relocalisés par an, et trois pourcentages de base, \pct{2.0}, \pct{3.1} et \pct{4.0}, la croissance des loyers de marché restant à \pct{3.5}. La \cref{fig:34:trajectoires} montre les trajectoires du revenu brut potentiel et la \cref{fig:34:valeur} les valeurs. | |
| 338 | + | |
| 339 | +\begin{table}[htbp] | |
| 340 | +\caption{Valeur DCF du cas 3 selon la rotation annuelle et le pourcentage de base de la fixation (croissance du marché \pct{3.5}, relocation intégrale au marché, autres hypothèses du dossier ; mode déterministe)}\label{tab:34:grille} | |
| 341 | +\centering\small | |
| 342 | +\begin{tabular}{S[table-format=2.0]S[table-format=1.1]S[table-format=6.0]S[table-format=-1.1]S[table-format=6.0]S[table-format=7.0]S[table-format=-2.1]} | |
| 343 | +\toprule | |
| 344 | +{Rotation (\%)} & {Base (\%)} & {$RBP_{11}$ (\$)} & {Écart au marché en $t = 11$ (\%)} & {$\mathit{VA}_{\text{écart}}$ (\$)} & {Valeur $V_0$ (\$)} & {Écart à la base (\%)} \\ | |
| 345 | +\midrule | |
| 346 | +5 & 2.0 & 243052 & 7.4 & 135975 & 1974822 & -10.6 \\ | |
| 347 | +5 & 3.1 & 256471 & 2.3 & 93090 & 2140916 & -3.1 \\ | |
| 348 | +5 & 4.0 & 268162 & -2.2 & 56612 & 2284775 & 3.5 \\ | |
| 349 | +\addlinespace | |
| 350 | +15 & 2.0 & 253139 & 3.5 & 84026 & 2118624 & -4.1 \\ | |
| 351 | +15 & 3.1 & 259911 & 1.0 & 56008 & 2208566 & 0.0 \\ | |
| 352 | +15 & 4.0 & 269809 & -2.8 & 29613 & 2326053 & 5.3 \\ | |
| 353 | +\addlinespace | |
| 354 | +25 & 2.0 & 256683 & 2.2 & 60100 & 2174597 & -1.5 \\ | |
| 355 | +25 & 3.1 & 260880 & 0.6 & 41372 & 2231655 & 1.0 \\ | |
| 356 | +25 & 4.0 & 270200 & -3.0 & 18667 & 2340208 & 6.0 \\ | |
| 357 | +\bottomrule | |
| 358 | +\end{tabular} | |
| 359 | +\tabsource{\synth{\texttt{analysis/python/cases/ch34\_tal.py}, fonction \texttt{grille\_scenarios} ; valeur par \texttt{traite.cas3.valeur\_dcf} ($r = \pct{7.25}$, $R_T = \pct{5.00}$, $c_v = \pct{2.5}$, $T = 10$). Un écart négatif au marché signifie que les loyers indexés dépassent le marché, ce que le modèle ne plafonne pas.}} | |
| 360 | +\end{table} | |
| 361 | + | |
| 362 | +\begin{figure}[htbp] | |
| 363 | +\centering | |
| 364 | +\includegraphics[width=135mm]{ch34/ch34-fig-trajectoires-rbp.pdf} | |
| 365 | +\caption{Revenu brut potentiel contractuel du cas 3 sur dix ans selon la rotation (base \pct{3.1}), comparé au revenu au loyer de marché, à l'indexation seule et au scénario d'encadrement renforcé. La rotation détermine la vitesse de convergence vers le marché ; le pourcentage de base et le rattrapage partiel déterminent la pente de long terme.}\label{fig:34:trajectoires} | |
| 366 | +\figsource{\synth{script \texttt{analysis/python/figures/ch34\_trajectoires.py}, graine 20261031}} | |
| 367 | +\end{figure} | |
| 368 | + | |
| 369 | +\begin{figure}[htbp] | |
| 370 | +\centering | |
| 371 | +\includegraphics[width=135mm]{ch34/ch34-fig-valeur-scenarios.pdf} | |
| 372 | +\caption{Valeur DCF du cas 3 pour les neuf combinaisons de rotation et de pourcentage de base, avec en repères la valeur de base du dossier, la valeur par capitalisation directe au taux médian extrait, la valeur sans aucune relocation et celle du scénario d'encadrement renforcé. La fourchette de la grille, de \dollars{1974822} à \dollars{2340208}, encadre la valeur par capitalisation directe par le bas et la dépasse largement par le haut.}\label{fig:34:valeur} | |
| 373 | +\figsource{\synth{script \texttt{analysis/python/figures/ch34\_valeur\_scenarios.py}, graine 20261031}} | |
| 374 | +\end{figure} | |
| 375 | + | |
| 376 | +La lecture du tableau appelle quatre remarques. D'abord, la valeur croît avec la rotation et avec le pourcentage de base, sans exception, ce qui est attendu puisque les deux accélèrent la convergence des loyers vers le marché. Ensuite, les deux paramètres ne sont pas substituables à parts égales : passer de \pct{5} à \pct{15} de rotation, à base de \pct{3.1}, ajoute \dollars{67650} ; passer de \pct{15} à \pct{25} n'ajoute plus que \dollars{23089}, parce que la convergence est déjà presque achevée à \pct{15} dans le mode déterministe ; à l'inverse, chaque point de pourcentage de base vaut à peu près le même montant quelle que soit la rotation, de l'ordre de \dollars{80000} à \dollars{130000}, parce qu'il agit sur l'ensemble des loyers chaque année et non sur les seuls logements relocalisés. Troisièmement, la grille est asymétrique autour de la base : le pire scénario perd \pct{10.6} alors que le meilleur gagne \pct{6.0}, et le scénario qui combine la rotation la plus faible et le pourcentage de base le plus bas est aussi celui dont l'écart au marché à l'horizon, \pct{7.4}, est le plus grand, ce qui signifie que sa valeur terminale capitalise un revenu encore déprimé. Enfin, les scénarios à base de \pct{4.0} conduisent les loyers contractuels \emph{au-dessus} du marché à l'horizon ; ils décrivent une situation où l'inflation passée excède la croissance du marché locatif, comme en 2025-2026, et le modèle ne plafonne pas les loyers au marché, de sorte qu'ils doivent être lus comme une borne supérieure, un locateur qui indexe au-dessus du marché s'exposant à des départs et à de l'inoccupation que la projection ne capte pas. | |
| 377 | + | |
| 378 | +\subsection{Scénarios complémentaires} | |
| 379 | + | |
| 380 | +Le \cref{tab:34:complementaires} ajoute à la grille des scénarios qui mobilisent les extensions de la \cref{sec:34:modele}. Le scénario d'\emph{encadrement serré} du \cref{ch:30}, qui combine un pourcentage de base de \pct{2}, une rotation de \pct{8} et une croissance du marché de \pct{3}, est retrouvé à l'identique, \dollars{1912046}. Le scénario d'\emph{encadrement renforcé} y ajoute un rattrapage partiel de $\varphi = 0{,}5$ à la relocation, qui représenterait un exercice systématique du recours de l'article 1950, ou une forme de contrôle du loyer à la relocation telle que certaines juridictions la pratiquent ; la valeur tombe à \dollars{1701507}, soit \pct{23.0} de moins que la base, et même en deçà de la valeur sans aucune relocation, parce que la croissance du marché y est aussi plus faible. Le rattrapage partiel seul, toutes autres hypothèses égales, coûte \pct{6.9}. La récupération de \pct{5} des trois tranches de travaux, \dollars{85000} en 2027, \dollars{40000} en 2029 et \dollars{120000} en 2032, ajoute \pct{3.7}, soit \dollars{80937} : ce que le \cref{ch:30} avait laissé de côté par prudence n'est pas négligeable, et un évaluateur qui dispose des factures et sait que les travaux sont admissibles à l'annexe I peut le modéliser explicitement, à condition d'en déclarer l'hypothèse. Enfin, la borne théorique où tous les logements seraient au marché dès la première année ne vaut que \pct{2.7} de plus que la base : l'essentiel du rattrapage que le modèle déterministe accorde se produit dès les trois premières années. | |
| 381 | + | |
| 382 | +\begin{table}[htbp] | |
| 383 | +\caption{Scénarios complémentaires pour le cas 3 : hypothèses, revenu net de l'année 11, valeur actualisée de l'écart au marché et valeur DCF}\label{tab:34:complementaires} | |
| 384 | +\centering\small | |
| 385 | +\begin{tabularx}{\textwidth}{YS[table-format=6.0]S[table-format=6.0]S[table-format=7.0]S[table-format=-2.1]} | |
| 386 | +\toprule | |
| 387 | +Scénario & {$\NOI_{11}$ (\$)} & {$\mathit{VA}_{\text{écart}}$ (\$)} & {Valeur $V_0$ (\$)} & {Écart (\%)} \\ | |
| 388 | +\midrule | |
| 389 | +Base du dossier (rotation \pct{15}, base \pct{3.1}, marché \pct{3.5}, $\varphi = 1$) & 159658 & 56008 & 2208566 & 0.0 \\ | |
| 390 | +Base en mode espérance (départs indépendants, rotation fractionnaire) & 152429 & 104837 & 2091629 & -5.3 \\ | |
| 391 | +Indexation seule, aucune relocation & 125765 & 184956 & 1756414 & -20.5 \\ | |
| 392 | +Encadrement serré (\cref{ch:30} : base \pct{2}, rotation \pct{8}, marché \pct{3}) & 137845 & 114922 & 1912046 & -13.4 \\ | |
| 393 | +Rattrapage partiel à la relocation ($\varphi = 0{,}5$) & 149437 & 111687 & 2056076 & -6.9 \\ | |
| 394 | +Encadrement renforcé (base \pct{2}, rotation \pct{8}, $\varphi = 0{,}5$, marché \pct{3}) & 120877 & 163020 & 1701507 & -23.0 \\ | |
| 395 | +Récupération de \pct{5} des dépenses d'immobilisation (2027, 2029, 2032) & 165413 & 29781 & 2289503 & 3.7 \\ | |
| 396 | +Rotation \pct{25} et base \pct{4} & 169546 & 18667 & 2340208 & 6.0 \\ | |
| 397 | +Tous les logements au marché dès l'année 1 (borne théorique) & 162072 & 19110 & 2267398 & 2.7 \\ | |
| 398 | +\midrule | |
| 399 | +Capitalisation directe au taux médian extrait (\pct{4.415}, \cref{ch:29}) & & & 2037503 & -7.7 \\ | |
| 400 | +\bottomrule | |
| 401 | +\end{tabularx} | |
| 402 | +\tabsource{\synth{\texttt{analysis/python/cases/ch34\_tal.py}, fonction \texttt{scenarios\_complementaires} ; la dernière ligne provient de \texttt{traite.cas3.tout}.}} | |
| 403 | +\end{table} | |
| 404 | + | |
| 405 | +\subsection{Sensibilité : ce qui pèse le plus} | |
| 406 | + | |
| 407 | +Pour hiérarchiser les intrants sans l'effet de seuil que produit l'arrondi du nombre de logements relocalisés, les dérivées de la valeur ont été calculées en mode espérance par différences centrées autour de la base. Un point de rotation vaut environ \dollars{11900} ; un point de pourcentage de base vaut environ \dollars{131200}, onze fois plus. Cette hiérarchie ne doit pas être mal lue : la rotation varie, d'un immeuble à l'autre et d'une conjoncture à l'autre, sur une plage bien plus large que le pourcentage de base, de quelques points à plus de vingt, alors que le pourcentage de base, lissé sur trois ans, bouge d'un point ou deux ; les plages de la grille, choisies pour refléter cette dispersion, donnent des amplitudes de valeur comparables, de l'ordre de \dollars{90000} à \dollars{200000} pour la rotation et de \dollars{140000} à \dollars{310000} pour la base. Le \cref{ch:30} avait classé l'indexation des baux parmi les intrants dominants de sa tornade, et le présent chapitre en explique la raison : elle agit chaque année sur la totalité du revenu, et son effet se capitalise dans la valeur terminale, qui porte \pct{70} de la valeur. | |
| 408 | + | |
| 409 | +\subsection{Du scénario au rapport} | |
| 410 | + | |
| 411 | +Comment l'évaluateur traduit-il ces résultats dans une conclusion de valeur marchande ? Trois principes se dégagent. Le premier est que l'hypothèse de projection retenue doit être celle qu'un acheteur type formerait à la date d'évaluation, informé du droit en vigueur : relocation au gré des départs volontaires, au loyer de marché mais sans garantie, indexation au pourcentage de base attendu, aucune éviction avant juin 2027 et aucune reprise pour un immeuble de placement ; les scénarios qui s'en écartent dans un sens favorable relèvent de la valeur d'investissement ou d'une hypothèse extraordinaire à divulguer. Le deuxième est que la fourchette produite par la grille n'est pas un intervalle de confiance : elle décrit la sensibilité de la conclusion à des hypothèses dont certaines sont plus vraisemblables que d'autres, et le rapport doit dire laquelle est retenue et pourquoi, par exemple en rapprochant la rotation retenue de celle que la SCHL mesure et de l'historique de l'immeuble. Le troisième est que la capitalisation directe fournit un point de comparaison utile : la valeur de \dollars{2037503} obtenue au \cref{ch:29} se situe dans la partie basse de la grille, entre les scénarios de rotation faible, ce qui est cohérent avec le fait qu'un taux extrait de ventes d'immeubles dont les loyers sont eux aussi encadrés incorpore un rattrapage « moyen » ; si l'immeuble évalué présente un écart au marché plus grand que la moyenne des comparables, la DCF l'emporte, et inversement. Le \cref{ch:47} procède à cette réconciliation pour le dossier complet. | |
| 412 | + | |
| 413 | +\section{L'encadrement des loyers dans la littérature économique}\label{sec:34:litterature} | |
| 414 | + | |
| 415 | +\begin{encadre}{Ce que la recherche internationale enseigne sur le contrôle des loyers}{litterature} | |
| 416 | +Le régime québécois appartient à ce que la littérature appelle, depuis \textcite{arnott1995}, les contrôles de \emph{deuxième génération} : ils n'imposent pas de plafond absolu aux loyers, mais encadrent la hausse des baux en cours, laissent le loyer des nouvelles locations largement libre et prévoient des mécanismes de répercussion des coûts et des travaux. Arnott soutenait qu'un tel régime, bien conçu, pouvait corriger certaines imperfections du marché locatif, notamment le pouvoir de négociation du locateur face à un locataire en place qui supporte des coûts de déménagement élevés, et que les conclusions très négatives tirées des contrôles de première génération ne lui étaient pas transposables sans examen. Trois décennies d'études empiriques permettent aujourd'hui de préciser ce jugement. | |
| 417 | + | |
| 418 | +Sur l'\emph{allocation des logements}, \textcite{glaeserLuttmer2003} montrent qu'à New York une fraction substantielle des logements contrôlés est occupée par des ménages qui, dans un marché libre, auraient choisi un logement de taille différente : le contrôle décourage les déménagements qu'un changement de situation familiale appellerait, et crée une inadéquation entre ménages et logements qui est un coût social distinct du transfert entre locateurs et locataires. Sur l'\emph{offre et l'entretien}, la fin du contrôle des loyers au Massachusetts en 1995 a fourni une expérience naturelle : \textcite{sims2007} observe que les loyers des logements anciennement contrôlés ont rejoint ceux des autres, que l'offre locative a modestement augmenté et que les locateurs ont accru l'entretien ; \textcite{autorPalmerPathak2014} montrent qu'à Cambridge la décontrôle a relevé la valeur non seulement des immeubles anciennement contrôlés, mais aussi des immeubles voisins qui ne l'avaient jamais été, par un effet de voisinage attribuable à la rénovation et au changement de composition des quartiers. Sur la \emph{mobilité et les transferts}, \textcite{diamondMcquadeQian2019} exploitent l'extension du contrôle des loyers à San Francisco en 1994 aux petits immeubles d'avant 1980 : les locataires protégés sont restés dans leur logement sensiblement plus longtemps et ont bénéficié de transferts importants, mais les locateurs visés ont réduit l'offre de logements locatifs d'environ \pct{15}, en convertissant en copropriétés ou en reconstruisant, ce qui a contribué à une hausse des loyers de l'ordre de \pct{5} à l'échelle de la ville : la protection des locataires en place s'est faite au détriment des locataires futurs. La recension quasi exhaustive de \textcite{kholodilin2024}, qui couvre plus d'une centaine d'études, conclut que le contrôle réduit les loyers des logements visés et la mobilité de leurs occupants, qu'il tend à réduire la construction neuve et l'entretien, et qu'il déplace la hausse vers le segment non contrôlé ; les effets sur la ségrégation et sur le bien-être agrégé demeurent plus discutés. | |
| 419 | + | |
| 420 | +L'expérience canadienne est documentée surtout pour l'Ontario : \textcite{fallisSmith1985} mesurent à Toronto le rationnement des locataires et la distribution des bénéfices du contrôle, concentrés sur les locataires de longue date, et \textcite{smith1988} dresse un bilan économique du régime ontarien qui met en évidence la baisse de la construction locative privée. Aucune étude arbitrée propre au régime québécois actuel n'a pu être vérifiée dans la préparation de cet ouvrage ; les ordres de grandeur du présent chapitre, écart de \pct{30} pour un bail de dix-huit ans, rotation inférieure à \pct{10}, sont cohérents avec ce que cette littérature prédit d'un contrôle de deuxième génération sans contrôle à la relocation. Pour l'évaluateur, trois conséquences en découlent : la rotation est endogène et décroît avec l'écart au marché ; l'entretien des immeubles anciens à loyers très déprimés tend à être différé, ce que l'inspection du \cref{ch:11} doit vérifier ; et le marché des logements neufs, non soumis à la fixation pendant cinq ans, se forme à des loyers qui ne sont pas ceux du parc ancien, de sorte que les loyers de marché des comparables neufs ne sont pas directement transposables aux logements anciens. | |
| 421 | +\end{encadre} | |
| 422 | + | |
| 423 | +\begin{erreurs} | |
| 424 | +\begin{itemize} | |
| 425 | +\item \textbf{Projeter les loyers contractuels au rythme du marché.} Le pourcentage de base suit l'inflation moyenne des trois années précédentes, non les loyers demandés ; un bail reconduit en 2026 progresse de \pct{3.1}, pas de \pct{7}. L'écart au marché ne se résorbe qu'à la relocation. | |
| 426 | +\item \textbf{Supposer la relocation au marché sans réserve.} Le nouveau locataire est informé du loyer précédent et peut en demander la fixation ; l'hypothèse $\varphi = 1$ est une borne, à tempérer ou à déclarer. | |
| 427 | +\item \textbf{Valoriser une éviction ou une reprise dans la valeur marchande.} Le moratoire de la Loi 65 court jusqu'au 6 juin 2027, l'article 1959.1 protège les aînés de longue date, la reprise est fermée aux sociétés et aux indivisaires, et l'indemnité d'éviction atteint jusqu'à vingt-quatre mois de loyer. | |
| 428 | +\item \textbf{Comparer les pourcentages de l'ancienne et de la nouvelle méthode.} Les uns s'appliquent à des dépenses, l'autre au loyer ; un « revenu net » majoré de \pct{5.7} et un pourcentage de base de \pct{3.1} ne mesurent pas la même chose. | |
| 429 | +\item \textbf{Appliquer la variation brute des taxes.} Seule la part de la hausse qui excède le pourcentage de base est répercutée, sur le montant de l'année de référence et selon la part attribuable ; une baisse ne réduit pas le loyer. | |
| 430 | +\item \textbf{Supposer que les travaux rapportent \pct{5} à l'investisseur.} Les \pct{5} sont un rendement brut sur la dépense admissible, réduit des subventions, plafonné en cas de prêt bonifié, comptés une seule fois et répartis entre les logements ; un locataire qui part l'année suivante emporte la hausse dans le loyer de marché. | |
| 431 | +\item \textbf{Confondre l'ordre de départ et l'espérance.} Relouer d'abord les logements les plus sous le marché accélère le rattrapage de façon irréaliste ; dans le cas 3, cette hypothèse vaut \pct{5.3} de la valeur. | |
| 432 | +\item \textbf{Oublier l'arrondi et la période de référence.} Le loyer fixé est arrondi au dollar ; la période de référence d'un bail échéant en janvier-mars est l'avant-dernière année civile. | |
| 433 | +\end{itemize} | |
| 434 | +\end{erreurs} | |
| 435 | + | |
| 436 | +\begin{limites} | |
| 437 | +Les calculs de fixation de ce chapitre reconstituent la logique du Règlement à partir de son texte et des pourcentages publiés ; ils ne reproduisent pas les lignes du formulaire officiel, dont les définitions de revenus et de dépenses admissibles, les cas particuliers (locaux non résidentiels, services à la personne, loyers de faveur, chambres) et les règles de preuve peuvent modifier le résultat, et c'est la décision du Tribunal qui fait foi. L'appellation « clause F » n'a pu être vérifiée dans les annexes du règlement sur les formulaires de bail. Les pourcentages de 2027 n'étaient pas publiés à la date de rédaction et l'exemple applique ceux de 2026 à des baux qui relèveront de 2027. La reconstitution de l'ancienne méthode est schématique. Le modèle de rotation suppose des départs indépendants à taux constant, alors que la rotation dépend de l'écart au marché, du cycle et de l'âge des locataires ; le mode déterministe du dossier suppose un ordre de départ favorable au locateur ; aucune des deux hypothèses n'est une mesure. La croissance des loyers de marché de \pct{3.5} et le taux de rotation de \pct{15} sont des hypothèses du dossier synthétique, non des observations ; la SCHL mesure \pct{9.4} de rotation dans la RMR de Montréal en 2025 pour l'ensemble du parc. Le modèle ne plafonne pas les loyers indexés au niveau du marché et ne fait pas varier l'inoccupation avec la rotation, de sorte que les scénarios à pourcentage de base élevé sont des bornes supérieures. Enfin, la littérature internationale porte sur des régimes qui diffèrent du régime québécois par le contrôle à la relocation, les exemptions et le contexte fiscal ; ses ordres de grandeur ne sont pas transposables sans précaution, et aucune étude arbitrée du régime québécois actuel n'a été identifiée. | |
| 438 | +\end{limites} | |
| 439 | + | |
| 440 | +\begin{synthese} | |
| 441 | +\begin{itemize} | |
| 442 | +\item Depuis le 1\textsuperscript{er} janvier 2026, la fixation repose sur six critères : un pourcentage de base égal à la moyenne des trois dernières variations annuelles de l'IPC du Québec (\pct{3.1} en 2026, \pct{4.5} en 2025, reproduits à partir des données de Statistique Canada), les hausses de taxes et d'assurances au-delà de ce pourcentage, \pct{5} des dépenses d'immobilisation et les nouveaux services, répartis selon la part attribuable, le tout arrondi au dollar. | |
| 443 | +\item La fixation ne tient aucun compte de la valeur locative : l'écart au marché d'un bail ancien ne se résorbe qu'à la relocation. Pour le logement 103 du cas 3, l'augmentation de 2026 est de \dollars{23} par mois dans le dossier et de \dollars{46} avec des hausses de coûts et des travaux, contre un écart au marché de \dollars{319}. | |
| 444 | +\item Relocation (art.~1896 et 1950), cession (Loi 31), reprise (art.~1957-1958, 1970), éviction (art.~1959, 1959.1, 1965 ; moratoire de la Loi 65 jusqu'au 6 juin 2027) et « clause F » (art.~1955) déterminent ce qu'un évaluateur peut supposer : continuation de l'exploitation locative, rattrapage au gré des départs volontaires, pas de repositionnement par éviction dans la valeur marchande. | |
| 445 | +\item Sous rotation aléatoire $\rho$, $\E[q_t] = q_0 a^t + \rho(1-a^t)/(1-a)$ avec $a = (1-\rho)(1+g_c)/(1+g_m)$, et $q_\infty = \rho/[1-(1-\rho)\delta]$ : \pct{93.2}, \pct{97.9} et \pct{98.9} du marché pour \pct{5}, \pct{15} et \pct{25} de rotation ; la limite ne dépend pas du point de départ, et chaque point de rotation compte davantage quand la rotation est faible. | |
| 446 | +\item Dans le cas 3, la grille rotation $\times$ base donne des valeurs de \dollars{1974822} à \dollars{2340208} autour de \dollars{2208566} ; l'indexation seule vaut \dollars{1756414} ($-\pct{20.5}$), l'encadrement renforcé \dollars{1701507} ($-\pct{23.0}$), la récupération des immobilisations $+\pct{3.7}$ ; l'ordre de départ du dossier vaut \pct{5.3}. | |
| 447 | +\item Un point de pourcentage de base pèse environ onze fois plus qu'un point de rotation, mais la rotation varie sur une plage dix fois plus large ; les deux doivent être déclarés et testés dans tout rapport par flux actualisés. | |
| 448 | +\item La littérature internationale (Arnott, Glaeser et Luttmer, Sims, Autor et coll., Diamond et coll., Kholodilin) associe les contrôles de deuxième génération à une mobilité réduite, à un entretien différé et à une offre locative moindre ; l'évaluateur en retient que la rotation est endogène et que les loyers du neuf ne sont pas ceux du parc ancien. | |
| 449 | +\end{itemize} | |
| 450 | +\end{synthese} | |
| 451 | + | |
| 452 | +\section*{Exercices} | |
| 453 | +\addcontentsline{toc}{section}{Exercices} | |
| 454 | + | |
| 455 | +\begin{exercice}[1]{Pourcentage de base}{ex:34:1} | |
| 456 | +Les moyennes annuelles d'un indice des prix sont $A = 161{,}0$, $B = 157{,}2$, $C = 153{,}6$ et $D = 147{,}0$. Calculez les trois variations annuelles et le pourcentage de base selon l'\cref{eq:34:base}. Que deviendrait ce pourcentage si $A$ valait $155{,}0$ ? Expliquez pourquoi le pourcentage de base de l'année suivante est en grande partie prévisible dès la fin de la période de référence. | |
| 457 | +\end{exercice} | |
| 458 | + | |
| 459 | +\begin{exercice}[1]{Franchise sur les taxes}{ex:34:2} | |
| 460 | +Les taxes municipales d'un immeuble passent de \dollars{24000} à \dollars{26400} ; le pourcentage de base est de \pct{3.1} ; le logement évalué a un loyer de \dollars{1100} par mois et l'immeuble des revenus de \dollars{180000}. Calculez la part attribuable, le pourcentage net et le montant mensuel répercuté selon l'\cref{eq:34:net,eq:34:augmentation}. Reprenez le calcul pour des hausses de \pct{6} et de \pct{2}. | |
| 461 | +\end{exercice} | |
| 462 | + | |
| 463 | +\begin{exercice}[2]{Fixation complète du logement 201}{ex:34:3} | |
| 464 | +Le logement 201 du cas 3 a un loyer de \dollars{1144} et un loyer de marché de \dollars{1345}. Avec les revenus de l'immeuble du \cref{tab:34:fixation}, un pourcentage de base de \pct{3.1}, des taxes municipales passant de \dollars{10631} à une valeur supérieure de \pct{5}, les taxes scolaires et les assurances du dossier, et des travaux de remplacement des fenêtres de \dollars{40000} réalisés pendant la période de référence, calculez l'augmentation mensuelle et le nouveau loyer arrondi. Quelle part de l'écart au marché cette augmentation résorbe-t-elle ? | |
| 465 | +\end{exercice} | |
| 466 | + | |
| 467 | +\begin{exercice}[2]{Espérance du rapport de loyer}{ex:34:4} | |
| 468 | +Un logement a un rapport de loyer de $0{,}70$ ; la rotation est de \pct{10}, $g_c = \pct{3.1}$ et $g_m = \pct{3.5}$. Calculez $\E[q_t]$ pour $t = 1$, $5$ et $10$ par l'\cref{eq:34:fermee}, la limite $q_\infty$, la probabilité que le locataire soit encore en place après dix ans et la durée espérée de son occupation. Que devient $q_\infty$ si la rotation passe à \pct{20} ? | |
| 469 | +\end{exercice} | |
| 470 | + | |
| 471 | +\begin{exercice}[2]{Éviction : coût et délai de récupération}{ex:34:5} | |
| 472 | +Le locataire du logement 103 occupe son logement depuis 2008 au loyer de \dollars{728}, contre un loyer de marché de \dollars{1047}. En supposant qu'une éviction devienne possible après le 6 juin 2027, calculez l'indemnité minimale de l'article 1965 C.c.Q. (un mois de loyer par année d'occupation, de trois à vingt-quatre mois), ajoutez des frais de déménagement de \dollars{1500}, et déterminez en combien d'années le gain de loyer annuel rembourse cette somme. Discutez ensuite les conditions juridiques qui rendraient cette éviction impossible ou ce calcul inapplicable à la valeur marchande. | |
| 473 | +\end{exercice} | |
| 474 | + | |
| 475 | +\begin{exercice}[3]{Scénarios par script}{ex:34:6} | |
| 476 | +À l'aide de \texttt{analysis/python/cases/ch34\_tal.py} (fonction \texttt{valeur\_scenario}), calculez la valeur du cas 3 pour une rotation de \pct{10} et un pourcentage de base de \pct{2.5}, puis ajoutez successivement un rattrapage partiel $\varphi = 0{,}5$ et la récupération de \pct{5} des dépenses d'immobilisation. Comparez à la valeur de base et à la valeur par capitalisation directe, et rédigez le paragraphe du rapport qui présenterait cette fourchette à un prêteur. | |
| 477 | +\end{exercice} | |
| 478 | + | |
| 479 | +\begin{exercice}[3]{Statique comparative de la limite}{ex:34:7} | |
| 480 | +Dérivez l'\cref{eq:34:limite} à partir de la récurrence de la \cref{prop:rotation} et montrez que $\partial q_\infty/\partial\rho = (1-\delta)/[1-(1-\rho)\delta]^2$. Calculez cette dérivée pour $\rho = \pct{5}$ et $\rho = \pct{15}$ avec $\delta = 1{,}031/1{,}035$, puis généralisez la proposition au cas d'un rattrapage partiel $\varphi$ et montrez que la limite est celle d'une rotation efficace $\rho\varphi$. Interprétez : pourquoi un évaluateur doit-il porter plus d'attention à la rotation d'un immeuble dont les locataires bougent peu ? | |
| 481 | +\end{exercice} | |
| 482 | + | |
| 483 | +\section*{Pour aller plus loin} | |
| 484 | +\addcontentsline{toc}{section}{Pour aller plus loin} | |
| 485 | + | |
| 486 | +Le texte du Règlement sur les critères de fixation de loyer \parencite{reglCriteresFixation} et le décret 1455-2025 qui l'a remanié \parencite{decret1455_2025} sont courts et doivent être lus dans leur version refondue ; les pages du Tribunal administratif du logement sur les pourcentages applicables \parencite{talIndices2026}, sur l'augmentation de loyer \parencite{talAugmentationLoyer} et sur l'outil de calcul \parencite{talOutilCalcul2026}, ainsi que le formulaire RN \parencite{talFormulaireRN2026}, donnent la mise en œuvre pratique, et les résumés de décisions \parencite{talResumesDecisions} éclairent les points que le texte laisse ouverts. Les lois 31 et 65 \parencite{loi31_2024,loi65_2024} se lisent dans la \emph{Gazette officielle}. Sur l'économie du contrôle des loyers, l'article de \textcite{arnott1995} reste le point d'entrée indispensable pour comprendre la distinction entre première et deuxième génération ; \textcite{kholodilin2024} offre la recension la plus complète des résultats empiriques et peut servir de guide bibliographique. Les études de cas de \textcite{glaeserLuttmer2003} sur New York, de \textcite{sims2007} et \textcite{autorPalmerPathak2014} sur le Massachusetts et de \textcite{diamondMcquadeQian2019} sur San Francisco illustrent trois méthodes d'identification différentes et méritent d'être lues pour leur démarche autant que pour leurs résultats ; le \cref{ch:36} y reviendra. Pour le Canada, \textcite{fallisSmith1985} et \textcite{smith1988} demeurent, faute de travaux plus récents arbitrés sur le Québec, les références de langue anglaise sur les effets distributifs et l'offre. Enfin, les enquêtes annuelles de la SCHL \parencite{schlLocatif2025,schlrmltables2025} fournissent les taux de rotation et la croissance des loyers à échantillon constant qui calibrent les projections ; l'évaluateur les consulte à chaque mission et en date l'usage. | |
added
references/lib-ch28.bib
+15 −0
@@ -0,0 +1,15 @@ | ||
| 1 | +% ============================================================================== | |
| 2 | +% lib-ch28.bib — Chapitre 28 (Dépenses, réserves, CAPEX et RNE), rédigé le 2026-10-31. | |
| 3 | +% AUCUNE NOUVELLE ENTRÉE : toutes les citations du chapitre et des solutions utilisent des clés | |
| 4 | +% déjà présentes dans references/library.bib : | |
| 5 | +% appraisal2026, appraisalCdn, fisherMartin2007, brueggemanFisher2022, geltnerMillerClaytonEichholtz2014, | |
| 6 | +% bokhariGeltner2018, hardingRosenthalSirmans2007, schlfraisexploitation2015, schlLocatif2025, | |
| 7 | +% bacprimes2025, hydrotarifs2026, regieenergie2026, statcanipc, | |
| 8 | +% talIndices2026, talAugmentationLoyer, talFormulaireRN2026, reglCriteresFixation, ccq, lip, | |
| 9 | +% ledevoirmtl2026, mtltaux2026, taxescolaire2026, vqtaux2026, gatineaureglement994. | |
| 10 | +% | |
| 11 | +% Références volontairement NON créées : | |
| 12 | +% - Aucune enquête publique récente sur les frais d'exploitation ou la réserve de remplacement des immeubles | |
| 13 | +% locatifs québécois n'a été trouvée (notes-E §ch. 28, « Non trouvé » points 5-6) ; le chapitre le déclare. | |
| 14 | +% - Blogues de courtage (ratio 35-50 %, réserve 2-3 % du revenu brut) : non retenus comme sources. | |
| 15 | +% ============================================================================== | |
added
references/lib-ch33.bib
+7 −0
@@ -0,0 +1,7 @@ | ||
| 1 | +% lib-ch33.bib — chapitre 33 : AUCUNE nouvelle entrée. Toutes les citations du chapitre utilisent des clés existantes de references/library.bib : | |
| 2 | +% schlaphselect, osfib20, oaciqFormulaireDV, lfm, vqtaux2026, montrealrole2026, mtlrole2026, gatineaurole2027, schlrmltables2025, schlLocatif2025, | |
| 3 | +% cbrecaprates2026q3, altusmontreal2026q2, apciqt32026, jlr202609, statcanrec2021type, bdctauxhypothecaires2026, loiTAL, ccq, loi65_2024, | |
| 4 | +% oeaqNormes, deontOEAQ, cuspap2026, ivs2025, rprt, lqe, loibatiment, codesecurite, registreFoncier, bacprimes2025, schlfraisexploitation2015, | |
| 5 | +% statcanIPCB, geltnerMillerClaytonEichholtz2014, brueggemanFisher2022, geltner1993, fisherGeltnerWebb1994, claytonGeltnerHamilton2001, | |
| 6 | +% sivitanidouSivitanides1999, sivitanidesTortoWheaton2003, hendershottMacgregor2005, plazziTorousValkanov2010, chervachidzeWheaton2013, ducaLing2020, | |
| 7 | +% bokhariGeltner2018, shillingSirmansDombrow1991, appraisal2026, fisherMartin2007, isakson1986, vandell1991, arnott1995, kholodilin2024. | |
modified
sources/registry.csv
+1 −0
@@ -379,4 +379,5 @@ SRC-23-006,page_web,"Contribution pour fins de parcs, de terrains de jeux et d'e | ||
| 379 | 379 | SRC-23-007,loi,"Loi sur l'aménagement et l'urbanisme, art. 117.6 (texte)",LégisQuébec / CanLII,—,https://www.legisquebec.gouv.qc.ca/fr/document/lc/A-19.1,2026-10-31,inaccessible,23,HTTP 403 sur LégisQuébec et CanLII le 2026-10-31 ; art. 117.1-117.4 lus par le lot B (SRC-B-038) |
| 380 | 380 | SRC-25-001,donnees_synthetiques,ch25_terrains_ventes.csv — 200 ventes synthétiques de terrains vacants (Gatineau fictif),Auteur (analysis/python/cases/ch25_terrain.py),"Généré le 2026-10-31, graine 20261031",data/synthetic/ch25_terrains_ventes.csv,2026-10-31,verifie,25,Lois déclarées dans data/synthetic/README.md (section « Chapitre 25 ») ; prix de référence 225 000 $ = hypothèse pédagogique ; aucune vente réelle utilisée |
| 381 | 381 | SRC-26-001,web,Jour du déménagement au Québec (L'Encyclopédie canadienne),Historica Canada,2024-04-23,https://thecanadianencyclopedia.ca/fr/article/jour-du-demenagement-au-quebec,2026-10-31,partiellement_verifie,ch26,Clé patterson2024demenagement déjà dans library.bib ; source secondaire pour l'historique du 1er juillet |
| 382 | +# Aucune nouvelle source : le chapitre 33 ne cite que des clés déjà présentes dans references/library.bib (voir ch33.md) ; aucune vérification web supplémentaire n'a été nécessaire.,,,,,,,,, | |
| 382 | 383 | # Aucune nouvelle source : le chapitre 47 ne cite que des clés déjà présentes dans references/library.bib (voir ch47.md).,,,,,,,,, |
modified
verification/calculations.csv
+48 −0
@@ -468,3 +468,51 @@ CALC-32-022,32,"Élasticité de la valeur capitalisée aux loyers (dépenses fix | ||
| 468 | 468 | CALC-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-31 |
| 469 | 469 | CALC-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-31 |
| 470 | 470 | CALC-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-31 |
| 471 | +CALC-28-001,28,"RBE du cas 3 = 165 540 × (1 − 0,039) + 9 360",analysis/python/cases/ch28_depenses.py (traite.cas3.revenus),analysis/python/tests/test_ch28.py::test_valeurs_citees_cas3,168443.94,168443.94,verifie,2026-10-31 | |
| 472 | +CALC-28-002,28,"Dépenses normalisées hors réserve (taxes rôle × taux ; postes 2025 × 1,03 ; gestion 4 % RBE)",analysis/python/cases/ch28_depenses.py (traite.cas3.depenses_normalisees),analysis/python/tests/test_ch28.py::test_valeurs_citees_cas3,70385.19,70385.19,verifie,2026-10-31 | |
| 473 | +CALC-28-003,28,"Dépenses totales (réserve 8 103 $ comprise) et ratio 46,6 % du RBE",analysis/python/cases/ch28_depenses.py,analysis/python/tests/test_ch28.py::test_valeurs_citees_cas3,78488.19 ; 0.466,78488.19 ; 0.4660,verifie,2026-10-31 | |
| 474 | +CALC-28-004,28,RNE₁ = RBE − DE − RR ; par logement (12) ; par m² (825 m²),analysis/python/cases/ch28_depenses.py (traite.cas3.rne),analysis/python/tests/test_ch28.py::test_identite_rne;test_valeurs_citees_cas3,89955.75 ; 7496.31 ; 109.04,89955.75 ; 7496.31 ; 109.04,verifie,2026-10-31 | |
| 475 | +CALC-28-005,28,"Cohérence avec traite.cas3.tout() utilisé par les ch. 29, 30 et 47 (RNE, dépenses, taux médian, V)",analysis/python/cases/ch28_depenses.py,analysis/python/tests/test_ch28.py::test_coherence_avec_cas3_partage,identité,identité (rel 1e-12),verifie,2026-10-31 | |
| 476 | +CALC-28-006,28,"Classement : fixes 23 317,78 (29,7 %), variables 47 067,41 (60,0 %) dont gestion 6 737,76, réserve 8 103 (10,3 %) ; fixes = 13,8 % du RBE",analysis/python/cases/ch28_depenses.py::classement,analysis/python/tests/test_ch28.py::test_classement_somme;test_valeurs_citees_cas3,23317.78 ; 47067.41 ; 8103.00,23317.78 ; 47067.41 ; 8103.00,verifie,2026-10-31 | |
| 477 | +CALC-28-007,28,"Groupes en % du RBE : taxes 7,08 ; assurances 6,76 ; énergie 4,37 ; entretien 6,97 ; conciergerie et services 10,11 ; honoraires 2,49 ; gestion 4,00 ; réserve 4,81",analysis/python/cases/ch28_depenses.py::classement,analysis/python/tests/test_ch28.py::test_valeurs_citees_cas3,voir description,conforme,verifie,2026-10-31 | |
| 478 | +CALC-28-008,28,"Historique 2023-2025 : totaux 66 992 / 70 438 / 70 693 ; +5,5 % ; TCAC 2,7 % ; variations par poste",analysis/python/cases/ch28_depenses.py::historique_cas3,analysis/python/tests/test_ch28.py::test_historique,66992 ; 70438 ; 70693 ; 0.055 ; 0.027,66992 ; 70438 ; 70693 ; 0.0552 ; 0.0273,verifie,2026-10-31 | |
| 479 | +CALC-28-009,28,"Écart de normalisation : dépenses déclarées 2025 70 693 vs normalisées 78 488,19 (+7 795,19) ; RNE historique 97 750,94 ; surévaluation 176 561 $ (8,7 %) à 4,415 %",analysis/python/cases/ch28_depenses.py,analysis/python/tests/test_ch28.py::test_historique,7795.19 ; 97750.94 ; 176561,7795.19 ; 97750.94 ; 176561,verifie,2026-10-31 | |
| 480 | +CALC-28-010,28,"Normalisation alternative (moyenne indexée à 3 %) : assurances 12 437,31 vs 11 391,80 (+1 045,51) ; entretien −130,75 ; conciergerie +131,24 ; déneigement −266,55 ; honoraires −163,69 ; électricité −107,53",analysis/python/cases/ch28_depenses.py::normalisation_alternative,analysis/python/tests/test_ch28.py::test_normalisation_alternative,voir description,conforme (0,01 $),verifie | |
| 481 | +CALC-28-011,28,"Démonstration réserve/taux : R' = R + RR/V = 4,8127 % (+39,8 pb) ; V' = 1 869 136 ; ΔV = RR/R' = 168 367 ; erreur −8,26 % = −RR/(RNE+RR) ; inverse +9,0 %",analysis/python/cases/ch28_depenses.py::demonstration_reserve,analysis/python/tests/test_ch28.py::test_demonstration_reserve,identités + valeurs,identités (1e-6) + valeurs (1 $),verifie,2026-10-31 | |
| 482 | +CALC-28-012,28,"Réserve par composantes (hypothèses pédagogiques) : linéaire 687,62 $/log. (8 251,43) ; fonds 3 % 580,71 $/log. (6 968,47) ; fonds 5 % 518,77 ; limite i→0 = linéaire",analysis/python/cases/ch28_depenses.py::reserve_par_composantes (traite.finance.facteur_fonds_amortissement),analysis/python/tests/test_ch28.py::test_reserve_composantes,687.62 ; 580.71 ; 518.77,687.62 ; 580.71 ; 518.77,verifie,2026-10-31 | |
| 483 | +CALC-28-013,28,"Équivalence VA des remplacements perpétuels C/((1+i)^N − 1) et VA de la réserve au fonds d'amortissement RR/i (C = 26 400, N = 12, i = 3 %) : 62 006,64 ; RR = 1 860,20",analysis/python/cases/ch28_depenses.py::exercices (ex7),analysis/python/tests/test_ch28.py::test_equivalence_reserve_capex,62006.64 ; 1860.20,62006.64 ; 1860.20,verifie,2026-10-31 | |
| 484 | +CALC-28-014,28,"CAPEX programmés 85 000 (2027) + 40 000 (2029) + 120 000 (2032) : VA à 7,25 % = 177 647,94 ; annuité équivalente 10 ans = 25 586,15 ; double comptage → RNE 64 369,60, V 1 457 975 (−28,4 %)",analysis/python/cases/ch28_depenses.py::equivalence_capex,analysis/python/tests/test_ch28.py::test_equivalence_capex_dossier;test_exercices,177647.94 ; 25586.15 ; 1457975,177647.94 ; 25586.15 ; 1457975,verifie,2026-10-31 | |
| 485 | +CALC-28-015,28,"Loyers au marché : RBE 188 140,60 ; RNE 108 864,54 ; ratio 42,1 % ; loyer moyen 1 291,92 vs 1 149,58 contractuel",analysis/python/cases/ch28_depenses.py::calculer,analysis/python/tests/test_ch28.py::test_valeurs_citees_marche_et_comparables,188140.60 ; 108864.54 ; 0.421,188140.60 ; 108864.54 ; 0.4214,verifie,2026-10-31 | |
| 486 | +CALC-28-016,28,"Comparables (40) : ratio médian 39,85 %, Q1 37,88, Q3 41,85, min 31,0, max 46,3 ; corrélation ratio–loyer −0,04 ; courbe iso-dépenses passe par les deux points du sujet",analysis/python/cases/ch28_depenses.py::ratio_iso_depenses,analysis/python/tests/test_ch28.py::test_valeurs_citees_marche_et_comparables,0.3985 ; 0.3788 ; 0.4185,0.3985 ; 0.3788 ; 0.4185,verifie,2026-10-31 | |
| 487 | +CALC-28-017,28,"Sensibilité réserve (0 → 1 200 $/log.) : RNE 98 058,75 → 83 658,75 ; ΔV +9,0 % → −7,0 % ; 100 $/log. +7,7 %",analysis/python/cases/ch28_depenses.py::sensibilites,analysis/python/tests/test_ch28.py::test_sensibilites,voir description,conforme,verifie,2026-10-31 | |
| 488 | +CALC-28-018,28,"Sensibilité taxe : compte indexé 5,3 % 11 194,44 (−1,1 %) ; +10 pb 12 388,20 (−2,4 %) ; Gatineau 6+ 15 320,80 (−5,7 %) ; Québec 6+ 16 933,40 (−7,5 %)",analysis/python/cases/ch28_depenses.py::sensibilites,analysis/python/tests/test_ch28.py::test_sensibilites,voir description,conforme,verifie,2026-10-31 | |
| 489 | +CALC-28-019,28,"Sensibilité gestion : 0 % +7,5 % ; 3 % +1,9 % ; 5 % −1,9 % ; 6 % −3,7 % ; 10 % −11,2 % ; ∂V/∂DE = −1/R = −22,65 ; élasticité RNE/dépenses −0,873 ; élasticité RNE/RBE 1,80 ; 25 pb ≡ 4 820,78 $ de dépenses",analysis/python/cases/ch28_depenses.py::sensibilites,analysis/python/tests/test_ch28.py::test_sensibilites,voir description,conforme,verifie,2026-10-31 | |
| 490 | +CALC-28-020,28,Pentes citées (légende fig. 28.5) : 12/R = 272 $ par $ de réserve/log. ; 2 200/R ≈ 49 830 $ par 10 pb de taxe ; RBE/100/R = 38 153 $ par point de gestion,analysis/python/cases/ch28_depenses.py,analysis/python/tests/test_ch28.py::test_sensibilites,272 ; 49830 ; 38153,271.8 ; 49830 ; 38153,verifie,2026-10-31 | |
| 491 | +CALC-28-021,28,"Indexation IPC Québec (18-10-0004-01, v41691783) : 124,7 (2015-04) → 167,7 (2026-09) = +34,5 % ; barème SCHL 2015 indexé : entretien 672 $, salaires 403 $, réserve 134 $",analysis/python/cases/ch28_depenses.py::indexation_ipc,analysis/python/tests/test_ch28.py::test_indexation_ipc,1.3448 ; 672.4 ; 403.4 ; 134.5,1.3448 ; 672.4 ; 403.4 ; 134.5,verifie,2026-10-31 | |
| 492 | +CALC-28-022,28,"Cas 2 : RBE 40 577,04 ; gestion imputée 1 623,08 ; dépenses hors réserve 16 743,08 ; totales 18 543,08 ; ratio 45,7 % ; RNE 22 033,96 ; 7 344,65 $/log. ; 84,10 $/m² ; fixes 52,7 % ; dépenses 6 181,03 $/log., 70,78 $/m²",analysis/python/cases/ch28_depenses.py::cas2_detail (traite.cas2.rne),analysis/python/tests/test_ch28.py::test_cas2,voir description,conforme (0,01 $),verifie | |
| 493 | +CALC-28-023,28,"Cas 2 : vérification des taxes de Québec 2026 : 495 000 × 0,7464 % = 3 694,68 + 3 × (386 + 195) = 5 437,68 vs 5 900 déclaré (écart 462,32) ; scolaire (495 000 − 25 000) × 0,07899 % = 371,25 vs 470",analysis/python/cases/ch28_depenses.py::cas2_detail,analysis/python/tests/test_ch28.py::test_cas2,5437.68 ; 462.32 ; 371.25,5437.68 ; 462.32 ; 371.25,verifie,2026-10-31 | |
| 494 | +CALC-28-024,28,"Exercices 28.1 à 28.7 (solutions/ch28.tex) : RBE 118 800, RNE 79 999,70, ratio 32,66 % ; écart 1 046,00 → 23 692 $ ; taxe 1 006,24 → −22 791 $ ; réserve 687,62 / 580,71 / 518,77 ; comparable 20 log. : 4,439 % / 4,768 %, V' 1 886 540 (−6,91 %) ; cas 2 sans gestion 23 657,04, +7,37 % ; CAPEX 25 586,15, V 1 457 975",analysis/python/cases/ch28_depenses.py::exercices,analysis/python/tests/test_ch28.py::test_exercices,voir description,conforme,verifie,2026-10-31 | |
| 495 | +CALC-33-001,33,Lecture SCHL île de Montréal : 6-19 unités inoccupation 2,2 % / loyer 2 ch. 1 177 $ / tous 1 162 $ ; 100+ : 5,1 % / 1 966 $ ; 2015+ : 5,6 % / 1 882 $,analysis/python/cases/ch33_six_logements.py,analysis/python/tests/test_ch33.py::test_schl_lecture_coherente_avec_notes,"2,2 ; 1177 ; 1162 ; 5,1 ; 1966 ; 5,6 ; 1882" | |
| 496 | +CALC-33-002,33,Cas 4 : sommaire par RMR (n RMR = 48 ; 888 logements ; valeur 143 363 000 ; taux pondéré 5,19 % ; 161 445 $/log.),analysis/python/cases/ch33_six_logements.py,test_ch33.py::test_sommaire_cas4_identites,"143363000 ; 0,051945 ; 161445","143363000 ; 0,051945 ; 161445",verifie | |
| 497 | +CALC-33-003,33,Cas 4 : taux pondéré Montréal 4,49 % ; Gatineau 5,44 % ; Trois-Rivières 6,29 % ; valeur/log. Montréal 206 237 ; Gatineau 184 173 ; Québec 125 455 ; Saguenay 101 969,analysis/python/cases/ch33_six_logements.py,test_ch33.py::test_sommaire_cas4_identites,"0,044948 ; 0,054359 ; 0,062883 ; 206237 ; 184173 ; 125455 ; 101969" | |
| 498 | +CALC-33-004,33,Effet de taille cas 3 : pente −2,27 pb/logement ; 12→36 = −54,6 pb (régression traite.cas3.taux_extraits),analysis/python/cases/ch33_six_logements.py,test_ch33.py::test_effet_taille,"-2,27 ; -54,6","-2,27 ; -54,6" | |
| 499 | +CALC-33-005,33,Effet de taille cas 4 : coefficient ln(n/12) = −0,0315 (ET HC1 0,0122) ; doublement −2,16 % ; 12→36 Montréal état 3 = −15,7 pb,analysis/python/cases/ch33_six_logements.py,test_ch33.py::test_effet_taille | |
| 500 | +CALC-33-006,33,Effets cas 4 (traite.cas4.effets_regionaux) : état −3,96 %/point ; inondable +7,9 % ; sol +5,5 % ; RMR Gatineau +19,6 % ; Québec +26,8 % ; Sherbrooke +25,3 % ; Trois-Rivières +40 | |
| 501 | +CALC-33-007,33,Unités cas 3 (V = 2 060 000) : 171 667 $/log. ; 2 497 $/m² ; 93 636 $/chambre (22 chambres) ; MRB 12,44 (contrat) et 11,07 (marché) ; taux implicite 4,37 % ; 16,72 $/m²/mois,analysis/python/cases/ch33_six_logements.py,test_ch33.py::test_unites_cas3 | |
| 502 | +CALC-33-008,33,Valeur finale du ch. 47 (2 060 000 $) reprise comme constante : égale à ch47_dossier.reconciliation.valeur_finale,analysis/python/cases/ch33_six_logements.py,test_ch33.py::test_valeur_finale_ch47_coherente,2060000,2060000,verifie,2026-10-31 | |
| 503 | +CALC-33-009,33,Proposition 33.1 : MRB = (1−v)(1−ρ)/R ; cas 3 : (1−0,039)(1−0,466)/0,04415 = 11,63,analysis/python/cases/ch33_six_logements.py,— | |
| 504 | +CALC-33-010,33,P45 : RNE 366 800 ; taux Montréal cas 3 4,415 % → 8 308 041 ; Gatineau pondéré 5,436 % → 6 747 739 ; médiane 5,710 % → 6 423 818 ; régression 5,461 % → 6 716 534 (186 570 $/log.),analysis/python/cases/ch33_six_logements.py,test_ch33.py::test_p45_identites_et_valeurs | |
| 505 | +CALC-33-011,33,P45 contrefactuels : si Montréal 4,565 % → 8 034 343 ; si 12 logements 5,654 % → 6 487 875 ; si état 3 5,245 % → 6 993 820 ; taux fichier 5,10 % → 7 192 157,analysis/python/cases/ch33_six_logements.py,test_ch33.py::test_p45_identites_et_valeurs | |
| 506 | +CALC-33-012,33,Décomposition multiplicative : Montréal 12 log. état 2 âge 72 = 4,726 % ; effet taille −16,1 pb ; effet RMR +89,6 pb ; produit = 5,461 % ; écart Montréal/régression +23,7 %,analysis/python/cases/ch33_six_logements.py | |
| 507 | +CALC-33-013,33,Facteur de Duan de la régression cas 4 : 1,0011 ; prédiction R̂ = exp(xβ)×Duan,analysis/python/cases/ch33_six_logements.py,test_ch33.py::test_p45_identites_et_valeurs,"1,0011","1,0011",verifie | |
| 508 | +CALC-33-014,33,P45 financement (hyp. amortissement 480 mois) : dette 5 416 000 à 5,17 % → service 318 363 $ ; RCD 1,15 ; RPV 75,4 % (dossier) et 80,6 % (régression),analysis/python/cases/ch33_six_logements.py,test_ch33.py::test_p45_identites_et_valeurs | |
| 509 | +CALC-33-015,33,Sensibilité P45 : +25 pb → −4,38 % ; −25 pb → +4,80 % ; ±50 pb → −8,39 % / +10,08 % ; grille RMR × état (Montréal état 2 223 176 $/log. ; Trois-Rivières 159 220 ; Gatineau état 1 179 173 / état 5 210 645),analysis/python/cases/ch33_six_logements.py,test_ch33.py::test_sensibilite | |
| 510 | +CALC-33-016,33,Courbe de taille Gatineau état 2 : 6 log. 5,78 % (176 323 $/log.) → 72 log. 5,34 % (190 693 $/log.),analysis/python/cases/ch33_six_logements.py,test_ch33.py::test_sensibilite,"0,0578 ; 176323 ; 0,0534 ; 190693",idem | |
| 511 | +CALC-33-017,33,Un point de base : 12 299 $ pour P45 ; 2 265 $ par million à 4,415 % ; 1 831 $ par million à 5,461 %,analysis/python/cases/ch33_six_logements.py,test_ch33.py::test_sensibilite,12299 ; 2265 ; 1831,idem | |
| 512 | +CALC-33-018,33,Ex. 33.1 : 16 log./1 040 m²/26 ch. → 2 746 667 / 2 596 848 / 2 434 545 $ ; écart max 12,8 %,analysis/python/cases/ch33_six_logements.py,test_ch33.py::test_exercices,"2746667 ; 2596848 ; 2434545 ; 0,128",idem,verifie | |
| 513 | +CALC-33-019,33,Ex. 33.2 : rôle 1 800 000 ; taxe 5 log. 16 340,20 ; 6 log. 17 340,60 ; écart taux 419,40 ; total 1 000,40 ; capitalisé à 5,5 % 7 625 $,analysis/python/cases/ch33_six_logements.py | |
| 514 | +CALC-33-020,33,Ex. 33.3 : R36 = 4,021 % ; valeur/log. 164 141 → 186 426 (+13,6 %),analysis/python/cases/ch33_six_logements.py,test_ch33.py::test_exercices,"0,04021 ; 164141 ; 186426 ; 0,1358",idem | |
| 515 | +CALC-33-021,33,Ex. 33.4 : écart 1 591 507 $ (+23,7 %),analysis/python/cases/ch33_six_logements.py,test_ch33.py::test_exercices,"1591507 ; 0,237",idem,verifie | |
| 516 | +CALC-33-022,33,Ex. 33.5 : ΔRBP 5 760 ; ΔRNE 5 319,48 ; ΔV 97 406 (1,45 %),analysis/python/cases/ch33_six_logements.py,test_ch33.py::test_exercices,"5760 ; 5319,48 ; 97406 ; 0,0145",idem | |
| 517 | +CALC-33-023,33,Ex. 33.6 : 24 log. état 3 45 ans : Montréal 4,52 % ; Québec 5,74 ; Gatineau 5,41 ; Sherbrooke 5,67 ; Trois-Rivières 6,34 ; Saguenay 6,01 ; IC Gatineau [14 | |
| 518 | +CALC-33-024,33,Ex. 33.7 : coût 2026 6 988 800 ; total 8 088 800 (337 033 $/log.) ; RBP 568 800 ; RBE 536 947 ; RNE 365 124 ; V 8 113 869 (4,50 %) et 7 686 823 (4,75 %) ; taux implicite 4,51 %,analysis/python/cases/ch33_six_logements.py,test_ch33.py::test_exercices,"6988800 ; 8088800 ; 365124 ; 8113869 ; 7686823 ; 0,0451" | |
added
verification/chapters/ch25.md
+45 −0
@@ -0,0 +1,45 @@ | ||
| 1 | +# Chapitre 25 — Évaluation du terrain : bilan de rédaction (2026-10-31) | |
| 2 | + | |
| 3 | +## Compteurs | |
| 4 | +- Prose : ≈ 14 180 mots selon la regex de `tools/check_manuscript.py` (tableaux et légendes compris) ; ≈ 11 470 mots de prose hors environnements `table`/`figure`. 40 pages compilées (chapitre + solutions + bibliographie du chapitre). | |
| 5 | +- Figures : 5 — 4 PDF Matplotlib (`ch25-fig-valeur-unitaire-superficie`, `ch25-fig-carte-terrains`, `ch25-fig-lotissement`, `ch25-fig-residuelle-sensibilite`, toutes synthétiques) + 1 schéma TikZ (technique résiduelle du terrain). | |
| 6 | +- Tableaux : 9 (unités de comparaison ; six méthodes ; grille d'ajustements des terrains ; modèle hédonique des terrains ; cinq terrains comparables et grille ; extraction sur les cinq comparables du ch. 16 ; synthèse des indications ; sensibilité résiduelle ; flux du lotissement). | |
| 7 | +- Équations numérotées : 16 (élasticité et valeur unitaire, logement constructible, comparaison, allocation, prix implicite marginal, extraction, bandes de capital, résiduelle, élasticités de la résiduelle, lotissement, Gordon, bail fini, densification, indication, valeur retenue) ; 1 définition, 1 proposition démontrée (sensibilité de la valeur résiduelle). | |
| 8 | +- Exercices : 7 (niveaux 1, 1, 2, 2, 2, 3, 3) ; solutions détaillées dans `solutions/ch25.tex`, chiffres testés (`TestExercices`). | |
| 9 | +- Encadrés : objectifs, 2 × quebec (terrain dans la LFM ; lotissement/parcs/zones inondables/LPTAA), synthetique, exemple intégral (4 étapes + synthèse et rapprochement avec le ch. 24), erreurs, limites, synthese. | |
| 10 | +- Citations : 46 clés, toutes dans `references/library.bib` ; `references/lib-ch25.bib` ne contient aucune entrée (aucune source web nouvelle ; `ch25-registry.csv` = le jeu synthétique de terrains). | |
| 11 | + | |
| 12 | +## Contrôles | |
| 13 | +- `tools/compile_chapter.sh 25` → `OK ch25 : 40 pages, 0 references/citations non definies, 0 overfull hbox`. | |
| 14 | +- `python3 -m pytest -q analysis/python/tests/test_ch25.py` → 25 passed (72 passed avec test_ch24, test_ch21, test_cas1 : aucune régression ; aucun module `traite/*.py` modifié). | |
| 15 | +- `python3 tools/check_manuscript.py --no-log` : rien de spécifique au ch. 25 hormis les figures inscrites dans `ch25-figures.csv` plutôt que dans le CSV global (règle de collision). | |
| 16 | +- PDF relu : planche de contact des 40 pages + pages 17, 18, 19, 22, 23, 24, 25 à 65 dpi ; aucun débordement, tableaux et figures dans la largeur. | |
| 17 | +- Convention `\cref` sans article : vérifiée par grep (article/préposition écrits à la main ; aucun `\Cref` précédé d'un article). | |
| 18 | +- Gotcha : une virgule dans l'argument optionnel de `\begin{quebec}[...]` ou dans le titre d'un `\begin{exemple}{...}` casse pgfkeys (`title=#1`) ; titres reformulés sans virgule (le ch. 24 a signalé la même chose : corriger `title={#1}` dans le style lors de l'harmonisation). | |
| 19 | + | |
| 20 | +## Valeur de terrain du sujet du cas 1 — à reprendre par les ch. 20 et 45 | |
| 21 | +- **V_L retenue = 277 000 $ (447 $/m² × 620 m²)**, fourchette 240 000 – 285 000 $. C'est la valeur extraite par le ch. 24 (médiane 276 953,99 $ sur 13 ventes ≤ 10 ans de Hull, âge-vie 60, prix ramenés au 2026-09-01), **confirmée** par le ch. 25 : comparaison directe avec 5 terrains vacants synthétiques 267 388 $ (−3,5 %, soit 0,60 écart-type pondéré des prix ajustés), allocation (ratio médian 48,2 % × 581 595 $ de la grille du ch. 17) 280 412 $ (+1,2 %), prédiction hédonique du marché des terrains 253 412 $ (−8,5 %), extraction à dépréciation de marché sur les 5 comparables de 23-30 ans 242 545 $ (−12,4 %). 277 000 $ est la médiane des trois indications concordantes (comparaison, extraction récente, allocation). Parts : 47,6 % de 581 595 $ (grille ch. 17), 43,4 % de 637 953 $ (hédonique ch. 18). Le rapprochement chiffré figure à la fin de l'exemple intégral (§25.6) et dans `tab:25:synthese` ; l'indication par le coût du ch. 24 (580 000 $) est donc inchangée. | |
| 22 | +- Le jeu de terrains synthétique (`data/synthetic/ch25_terrains_ventes.csv`, prix de référence 225 000 $ pour 560 m² à Hull en 2024-07) a été calibré **avant** la livraison du ch. 24 pour la cohérence interne avec l'extraction du cas 1 ; il n'a pas été recalibré sur 277 000 $ (l'écart de 3,5 % est documenté plutôt qu'effacé). | |
| 23 | +- Repères pour le ch. 24/45 : dépréciation implicite du marché pour le sujet à 28 ans = 20,8 % de C_N (profil d'âge hédonique) ; part médiane du terrain dans les ventes de Hull 48,2 % (interquartile 42,4-54,3 %) ; prix implicite marginal du terrain 96,4 $/m² (β ln T = 0,0937 × 637 953 $/620). | |
| 24 | + | |
| 25 | +## Chiffres clés des autres exemples | |
| 26 | +- Technique résiduelle (cas 3, RNE 89 955,75 $ de `traite.cas3`) : C_N 2 375 000 $ (2 500 $/m² × 950 m²), δ 52 % → C_B 1 140 000 $, R_L 3,75 % (= 7,25 % − 3,5 % des hypothèses du cas 3), R_B 6,25 % (1/40) → V_L 498 820 $ (674 $/m²) ; somme 1 638 820 $ = −19,6 % vs capitalisation directe 2 037 503 $ ; R_L implicite 2,08 % ; extraction sur V_cap 897 503 $ ; +50 pb → −38,6 % ; valeurs négatives possibles (grille δ × n × R_L). Cohérent avec le rejet de la méthode du coût au ch. 47. | |
| 27 | +- Lotissement fictif 10 000 m² → 12 lots de 625 m² (+1 500 m² de rue, 1 000 m² de parc = 10 %) : lot 254 486 $, produit 3 053 830 $, VA 1 230 878 $ (123,1 $/m², 40,3 % du produit), statique 1 579 602 $ ; sensibilité : prix ±10 % → ±16,7 % ; absorption 2 lots/an → 963 545 $ ; taux 8-15 % → 1 291 537-1 095 222 $. | |
| 28 | +- Rente foncière : 11 000 $/an → 220 000 $ (perpétuelle), 366 667 $ (Gordon g = 2 %), 294 278 $ (bail 40 ans + réversion 300 000 $). | |
| 29 | + | |
| 30 | +## Points non vérifiés ou hypothèses déclarées (voir ch25-claims.csv) | |
| 31 | +1. Jeu de terrains synthétique : prix de référence, élasticités et décotes = hypothèses pédagogiques ; aucune vente réelle de terrain à Gatineau ; la grille de terrains de l'auteur n'est pas dans le dépôt (CLM-25-018). | |
| 32 | +2. Hypothèses du cas 3 pour la résiduelle (coût neuf multilogement introuvable en source publique, notes-E) et paramètres du lotissement (CLM-25-018). | |
| 33 | +3. LFM art. 244.49 « jusqu'au quadruple » : repris de notes-B/normes-B et corroboré par le ratio exact 4,0 des taux 2026 de Québec ; texte à relire mot à mot avant publication (CLM-25-003). Art. 117.6 LAU non lu (non affirmé). *Jardins de Vérone* en délibéré. | |
| 34 | +4. F-2.1 r. 10 art. 8-10 (plafonnement des terrains vagues dans l'échantillon) : d'après les notes B, texte non relu (CLM-25-007, partiellement_verifie). | |
| 35 | +5. Primauté professionnelle de la comparaison directe, règle 4-3-2-1, prime d'option ≈ 6 % (Quigg), dépréciation 0,5-1 %/an : d'après notes D et usage, ouvrages non relus page à page (CLM-25-015 à -017). | |
| 36 | +6. Façade du sujet (20 m) et transposition du coût neuf des comparables (ε = 0,90, ±10 %/classe) : hypothèses de l'exemple ; le ch. 24 utilise ±5 %/classe — écart de convention sans effet sur la valeur retenue, à harmoniser dans `traite.cout` (fonction `cout_neuf_ventes` proposée par le ch. 24). | |
| 37 | + | |
| 38 | +## Fichiers livrés | |
| 39 | +`manuscript/chapters/ch25.tex`, `solutions/ch25.tex`, `analysis/python/cases/ch25_terrain.py` (importe `ch24_depreciation` pour le rapprochement), `analysis/python/figures/ch25_figures.py`, `analysis/python/tests/test_ch25.py`, `assets/figures/ch25/*.pdf` (4), `data/synthetic/ch25_terrains_ventes.csv` + section ajoutée à `data/synthetic/README.md`, `verification/chapters/ch25-{figures,calculations,claims,registry}.csv`, `references/lib-ch25.bib` (vide), ce bilan. Rien n'a été écrit dans les CSV globaux, `library.bib`, `traite/*.py`, `styles/`, `main.tex` ni dans les fichiers d'autres chapitres. | |
| 40 | + | |
| 41 | +## Suggestions pour l'harmonisation | |
| 42 | +- Ch. 20 et 45 : utiliser V_L = 277 000 $ (coût : 277 000 + 397 567 − 95 066 = 579 501 → 580 000 $ au ch. 24). | |
| 43 | +- Unifier la transposition du coût neuf des comparables (élasticité −0,10 ; ±5 % ou ±10 % par classe) dans `traite.cout` ; unifier la convention de dépréciation pour l'extraction (ventes récentes, comme au ch. 24). | |
| 44 | +- Ch. 41 : réutiliser `lotissement`, `residuelle_cas3` et le jeu de terrains (prime de 15 %/logement constructible) pour l'analyse de PHMU et la valeur d'option ; ne pas dupliquer. | |
| 45 | +- Style : `title={#1}` dans les tcolorbox `quebec`/`pratique`/`erreurs` pour tolérer les virgules. | |
added
verification/chapters/ch28-calculations.csv
+25 −0
@@ -0,0 +1,25 @@ | ||
| 1 | +id,chapitre,description,script,test,resultat_attendu,resultat_obtenu,statut,date | |
| 2 | +CALC-28-001,28,"RBE du cas 3 = 165 540 × (1 − 0,039) + 9 360",analysis/python/cases/ch28_depenses.py (traite.cas3.revenus),analysis/python/tests/test_ch28.py::test_valeurs_citees_cas3,168443.94,168443.94,verifie,2026-10-31 | |
| 3 | +CALC-28-002,28,"Dépenses normalisées hors réserve (taxes rôle × taux ; postes 2025 × 1,03 ; gestion 4 % RBE)",analysis/python/cases/ch28_depenses.py (traite.cas3.depenses_normalisees),analysis/python/tests/test_ch28.py::test_valeurs_citees_cas3,70385.19,70385.19,verifie,2026-10-31 | |
| 4 | +CALC-28-003,28,"Dépenses totales (réserve 8 103 $ comprise) et ratio 46,6 % du RBE",analysis/python/cases/ch28_depenses.py,analysis/python/tests/test_ch28.py::test_valeurs_citees_cas3,78488.19 ; 0.466,78488.19 ; 0.4660,verifie,2026-10-31 | |
| 5 | +CALC-28-004,28,"RNE₁ = RBE − DE − RR ; par logement (12) ; par m² (825 m²)",analysis/python/cases/ch28_depenses.py (traite.cas3.rne),analysis/python/tests/test_ch28.py::test_identite_rne;test_valeurs_citees_cas3,89955.75 ; 7496.31 ; 109.04,89955.75 ; 7496.31 ; 109.04,verifie,2026-10-31 | |
| 6 | +CALC-28-005,28,"Cohérence avec traite.cas3.tout() utilisé par les ch. 29, 30 et 47 (RNE, dépenses, taux médian, V)",analysis/python/cases/ch28_depenses.py,analysis/python/tests/test_ch28.py::test_coherence_avec_cas3_partage,identité,identité (rel 1e-12),verifie,2026-10-31 | |
| 7 | +CALC-28-006,28,"Classement : fixes 23 317,78 (29,7 %), variables 47 067,41 (60,0 %) dont gestion 6 737,76, réserve 8 103 (10,3 %) ; fixes = 13,8 % du RBE",analysis/python/cases/ch28_depenses.py::classement,analysis/python/tests/test_ch28.py::test_classement_somme;test_valeurs_citees_cas3,23317.78 ; 47067.41 ; 8103.00,23317.78 ; 47067.41 ; 8103.00,verifie,2026-10-31 | |
| 8 | +CALC-28-007,28,"Groupes en % du RBE : taxes 7,08 ; assurances 6,76 ; énergie 4,37 ; entretien 6,97 ; conciergerie et services 10,11 ; honoraires 2,49 ; gestion 4,00 ; réserve 4,81",analysis/python/cases/ch28_depenses.py::classement,analysis/python/tests/test_ch28.py::test_valeurs_citees_cas3,voir description,conforme,verifie,2026-10-31 | |
| 9 | +CALC-28-008,28,"Historique 2023-2025 : totaux 66 992 / 70 438 / 70 693 ; +5,5 % ; TCAC 2,7 % ; variations par poste",analysis/python/cases/ch28_depenses.py::historique_cas3,analysis/python/tests/test_ch28.py::test_historique,66992 ; 70438 ; 70693 ; 0.055 ; 0.027,66992 ; 70438 ; 70693 ; 0.0552 ; 0.0273,verifie,2026-10-31 | |
| 10 | +CALC-28-009,28,"Écart de normalisation : dépenses déclarées 2025 70 693 vs normalisées 78 488,19 (+7 795,19) ; RNE historique 97 750,94 ; surévaluation 176 561 $ (8,7 %) à 4,415 %",analysis/python/cases/ch28_depenses.py,analysis/python/tests/test_ch28.py::test_historique,7795.19 ; 97750.94 ; 176561,7795.19 ; 97750.94 ; 176561,verifie,2026-10-31 | |
| 11 | +CALC-28-010,28,"Normalisation alternative (moyenne indexée à 3 %) : assurances 12 437,31 vs 11 391,80 (+1 045,51) ; entretien −130,75 ; conciergerie +131,24 ; déneigement −266,55 ; honoraires −163,69 ; électricité −107,53",analysis/python/cases/ch28_depenses.py::normalisation_alternative,analysis/python/tests/test_ch28.py::test_normalisation_alternative,voir description,conforme (0,01 $),verifie,2026-10-31 | |
| 12 | +CALC-28-011,28,"Démonstration réserve/taux : R' = R + RR/V = 4,8127 % (+39,8 pb) ; V' = 1 869 136 ; ΔV = RR/R' = 168 367 ; erreur −8,26 % = −RR/(RNE+RR) ; inverse +9,0 %",analysis/python/cases/ch28_depenses.py::demonstration_reserve,analysis/python/tests/test_ch28.py::test_demonstration_reserve,identités + valeurs,identités (1e-6) + valeurs (1 $),verifie,2026-10-31 | |
| 13 | +CALC-28-012,28,"Réserve par composantes (hypothèses pédagogiques) : linéaire 687,62 $/log. (8 251,43) ; fonds 3 % 580,71 $/log. (6 968,47) ; fonds 5 % 518,77 ; limite i→0 = linéaire",analysis/python/cases/ch28_depenses.py::reserve_par_composantes (traite.finance.facteur_fonds_amortissement),analysis/python/tests/test_ch28.py::test_reserve_composantes,687.62 ; 580.71 ; 518.77,687.62 ; 580.71 ; 518.77,verifie,2026-10-31 | |
| 14 | +CALC-28-013,28,"Équivalence VA des remplacements perpétuels C/((1+i)^N − 1) et VA de la réserve au fonds d'amortissement RR/i (C = 26 400, N = 12, i = 3 %) : 62 006,64 ; RR = 1 860,20",analysis/python/cases/ch28_depenses.py::exercices (ex7),analysis/python/tests/test_ch28.py::test_equivalence_reserve_capex,62006.64 ; 1860.20,62006.64 ; 1860.20,verifie,2026-10-31 | |
| 15 | +CALC-28-014,28,"CAPEX programmés 85 000 (2027) + 40 000 (2029) + 120 000 (2032) : VA à 7,25 % = 177 647,94 ; annuité équivalente 10 ans = 25 586,15 ; double comptage → RNE 64 369,60, V 1 457 975 (−28,4 %)",analysis/python/cases/ch28_depenses.py::equivalence_capex,analysis/python/tests/test_ch28.py::test_equivalence_capex_dossier;test_exercices,177647.94 ; 25586.15 ; 1457975,177647.94 ; 25586.15 ; 1457975,verifie,2026-10-31 | |
| 16 | +CALC-28-015,28,"Loyers au marché : RBE 188 140,60 ; RNE 108 864,54 ; ratio 42,1 % ; loyer moyen 1 291,92 vs 1 149,58 contractuel",analysis/python/cases/ch28_depenses.py::calculer,analysis/python/tests/test_ch28.py::test_valeurs_citees_marche_et_comparables,188140.60 ; 108864.54 ; 0.421,188140.60 ; 108864.54 ; 0.4214,verifie,2026-10-31 | |
| 17 | +CALC-28-016,28,"Comparables (40) : ratio médian 39,85 %, Q1 37,88, Q3 41,85, min 31,0, max 46,3 ; corrélation ratio–loyer −0,04 ; courbe iso-dépenses passe par les deux points du sujet",analysis/python/cases/ch28_depenses.py::ratio_iso_depenses,analysis/python/tests/test_ch28.py::test_valeurs_citees_marche_et_comparables,0.3985 ; 0.3788 ; 0.4185,0.3985 ; 0.3788 ; 0.4185,verifie,2026-10-31 | |
| 18 | +CALC-28-017,28,"Sensibilité réserve (0 → 1 200 $/log.) : RNE 98 058,75 → 83 658,75 ; ΔV +9,0 % → −7,0 % ; 100 $/log. +7,7 %",analysis/python/cases/ch28_depenses.py::sensibilites,analysis/python/tests/test_ch28.py::test_sensibilites,voir description,conforme,verifie,2026-10-31 | |
| 19 | +CALC-28-018,28,"Sensibilité taxe : compte indexé 5,3 % 11 194,44 (−1,1 %) ; +10 pb 12 388,20 (−2,4 %) ; Gatineau 6+ 15 320,80 (−5,7 %) ; Québec 6+ 16 933,40 (−7,5 %)",analysis/python/cases/ch28_depenses.py::sensibilites,analysis/python/tests/test_ch28.py::test_sensibilites,voir description,conforme,verifie,2026-10-31 | |
| 20 | +CALC-28-019,28,"Sensibilité gestion : 0 % +7,5 % ; 3 % +1,9 % ; 5 % −1,9 % ; 6 % −3,7 % ; 10 % −11,2 % ; ∂V/∂DE = −1/R = −22,65 ; élasticité RNE/dépenses −0,873 ; élasticité RNE/RBE 1,80 ; 25 pb ≡ 4 820,78 $ de dépenses",analysis/python/cases/ch28_depenses.py::sensibilites,analysis/python/tests/test_ch28.py::test_sensibilites,voir description,conforme,verifie,2026-10-31 | |
| 21 | +CALC-28-020,28,"Pentes citées (légende fig. 28.5) : 12/R = 272 $ par $ de réserve/log. ; 2 200/R ≈ 49 830 $ par 10 pb de taxe ; RBE/100/R = 38 153 $ par point de gestion",analysis/python/cases/ch28_depenses.py,analysis/python/tests/test_ch28.py::test_sensibilites,272 ; 49830 ; 38153,271.8 ; 49830 ; 38153,verifie,2026-10-31 | |
| 22 | +CALC-28-021,28,"Indexation IPC Québec (18-10-0004-01, v41691783) : 124,7 (2015-04) → 167,7 (2026-09) = +34,5 % ; barème SCHL 2015 indexé : entretien 672 $, salaires 403 $, réserve 134 $",analysis/python/cases/ch28_depenses.py::indexation_ipc,analysis/python/tests/test_ch28.py::test_indexation_ipc,1.3448 ; 672.4 ; 403.4 ; 134.5,1.3448 ; 672.4 ; 403.4 ; 134.5,verifie,2026-10-31 | |
| 23 | +CALC-28-022,28,"Cas 2 : RBE 40 577,04 ; gestion imputée 1 623,08 ; dépenses hors réserve 16 743,08 ; totales 18 543,08 ; ratio 45,7 % ; RNE 22 033,96 ; 7 344,65 $/log. ; 84,10 $/m² ; fixes 52,7 % ; dépenses 6 181,03 $/log., 70,78 $/m²",analysis/python/cases/ch28_depenses.py::cas2_detail (traite.cas2.rne),analysis/python/tests/test_ch28.py::test_cas2,voir description,conforme (0,01 $),verifie,2026-10-31 | |
| 24 | +CALC-28-023,28,"Cas 2 : vérification des taxes de Québec 2026 : 495 000 × 0,7464 % = 3 694,68 + 3 × (386 + 195) = 5 437,68 vs 5 900 déclaré (écart 462,32) ; scolaire (495 000 − 25 000) × 0,07899 % = 371,25 vs 470",analysis/python/cases/ch28_depenses.py::cas2_detail,analysis/python/tests/test_ch28.py::test_cas2,5437.68 ; 462.32 ; 371.25,5437.68 ; 462.32 ; 371.25,verifie,2026-10-31 | |
| 25 | +CALC-28-024,28,"Exercices 28.1 à 28.7 (solutions/ch28.tex) : RBE 118 800, RNE 79 999,70, ratio 32,66 % ; écart 1 046,00 → 23 692 $ ; taxe 1 006,24 → −22 791 $ ; réserve 687,62 / 580,71 / 518,77 ; comparable 20 log. : 4,439 % / 4,768 %, V' 1 886 540 (−6,91 %) ; cas 2 sans gestion 23 657,04, +7,37 % ; CAPEX 25 586,15, V 1 457 975",analysis/python/cases/ch28_depenses.py::exercices,analysis/python/tests/test_ch28.py::test_exercices,voir description,conforme,verifie,2026-10-31 | |
added
verification/chapters/ch28-claims.csv
+21 −0
@@ -0,0 +1,21 @@ | ||
| 1 | +id,chapitre,affirmation,source_id,verification,date,statut,notes | |
| 2 | +CLM-28-001,28,"Barème SCHL « Frais d'exploitation — immeubles locatifs au Québec » (avril 2015) : entretien 500 $/log. ; salaires 125 $ (5-6 log.), 170 $ (7-11), 300 $ (12+) ; gestion-administration 3 % (5-6), 3-4 % (7-11), 5 % (12+) du revenu brut ; réserve 100 $/log. (cuisinière-réfrigérateur) ; taxes, assurance, énergie au coût réel ; « à titre indicatif »",SRC-E-047,sources/notes-E.md §ch. 28 ; data/synthetic/calibration.json,2026-10-31,verifie,"Document daté (2015), hébergé par un tiers (PMML) ; aucune mise à jour publique trouvée" | |
| 3 | +CLM-28-002,28,"TAL, ancienne méthode : frais de gestion forfaitaires 5 % des revenus, frais réels admis jusqu'à 10 % ; formulaire RN 2026-2027 détaille taxes, assurances, énergie, entretien, services, gestion (si > 5 %), dépenses d'immobilisation 2025",SRC-E-049;SRC-A-009;SRC-A-010,sources/notes-A.md §6.2 ; notes-E §ch. 28,2026-10-31,verifie,"Règle de fixation de loyer, pas une norme d'évaluation" | |
| 4 | +CLM-28-003,28,"Règlement sur les critères de fixation de loyer (T-15.01, r. 2) modifié par D. 1455-2025, en vigueur le 1er janvier 2026 : six critères (art. 3) ; pourcentage de base = moyenne de trois variations annuelles de l'IPC Québec (art. 3.1) ; critères 2° à 6° selon la part attribuable au logement (art. 5) ; 5 % des dépenses d'immobilisation ; transition pour les avis donnés avant le 1er janvier 2026",SRC-A-003,sources/notes-A.md §6.2 (texte des art. 3, 3.1, 4, 5 relu dans les notes),2026-10-31,verifie, | |
| 5 | +CLM-28-004,28,"TAL pourcentages 2026 : taux de base 3,1 % (avis dès le 1er janvier 2026) ; ancienne méthode 2025/2026 : gaz −5,8 / +13,7 ; électricité 2,9 / 2,9 ; entretien 6,9 / 5,7 ; gestion 8,2 / 7,2 ; dépenses d'immobilisation amorties au taux CPG 5 ans + 1 % (ancienne méthode)",SRC-A-005;SRC-A-010,sources/notes-A.md §6.2 ; notes-E §ch. 28,2026-10-31,verifie, | |
| 6 | +CLM-28-005,28,"C.c.Q. art. 1947 (demande de fixation dans le mois du refus) et 1953 (fixation selon les normes réglementaires)",SRC-A-001,sources/notes-A.md §bail (art. 1947 et 1953 résumés),2026-10-31,verifie,"Texte intégral non relu par le rédacteur du ch. 28 ; résumé de notes-A" | |
| 7 | +CLM-28-006,28,"Taxe scolaire : LIP art. 303-303.6, taux unique, assiette = évaluation uniformisée ajustée excédant 25 000 $ ; 0,07899 $/100 $ pour 2026-2027 (communiqué CSS) ; 0,08423 $ pour 2025-2026",SRC-B-035;SRC-B-037;SRC-E-026,notes-B.md §9.9 ; ch09 (CLM-09-013),2026-10-31,partiellement_verifie,"Avis officiel 2026-2027 ((2026) 158 G.O. 1, 520) non consulté ; mécanisme d'ajustement non modélisé" | |
| 8 | +CLM-28-007,28,"Taxe foncière générale résidentielle Montréal 2026 = 0,4631 $/100 $ (Le Devoir, 2026-01-12) ; hausse moyenne 3,8 %, Rosemont 5,3 % ; taux « 6 logements et plus » et taxes d'arrondissement non vérifiés",SRC-B-024;SRC-B-023,notes-B.md §9.9 ; notes-E §ch. 28 ; ch09 (CLM-09-016),2026-10-31,partiellement_verifie,"Source secondaire ; document officiel Constellio non lisible ; déclaré dans limites ; le cas 3 n'utilise que la taxe générale" | |
| 9 | +CLM-28-008,28,"Ville de Québec 2026 (R.V.Q. 3492) : 0,7464 $/100 $ (1-5 log.), 0,7697 (6 log. et plus) ; tarifs 386 $/log. aqueduc-égout + 195 $/log. matières résiduelles",SRC-B-025;SRC-E-027,page officielle (notes-B §9.9 ; ch09 CLM-09-014),2026-10-31,verifie, | |
| 10 | +CLM-28-009,28,"Gatineau 2026 (règl. 994-2025) : taux de base 5,224 $/1 000 $ ; sous-catégorie six logements ou plus 6,964 $/1 000 $",SRC-E-028;SRC-09-001,règlement lu intégralement au ch. 9 (CLM-09-015),2026-10-31,verifie,"Utilisé seulement comme scénario de transposition dans la sensibilité" | |
| 11 | +CLM-28-010,28,"Prime moyenne d'assurance habitation au Québec : 1 103 $ en 2024, +9 % sur un an, +63 % en dix ans (BAC via Infoassurance) ; porte sur les ménages, aucune statistique pour les immeubles locatifs",SRC-E-039,notes-E §ch. 28,2026-10-31,partiellement_verifie,"Industrie ; la page attribue le même chiffre à 2023 et 2024 (incohérence signalée dans notes-E)" | |
| 12 | +CLM-28-011,28,"Hydro-Québec tarif D au 2026-04-01 : 46,154 ¢/jour ; 7,065 ¢/kWh jusqu'à 40 kWh/jour ; 11,142 ¢/kWh au-delà",SRC-E-037,notes-E §ch. 28 ; document tarifaire,2026-10-31,verifie, | |
| 13 | +CLM-28-012,28,"Régie de l'énergie D-2026-033 : hausse clientèle domestique 3,0 % (2026), 3,0 % (2027), 2,6 % (2028)",SRC-E-038,notes-E §ch. 28 ; communiqué du 2026-03-16,2026-10-31,verifie, | |
| 14 | +CLM-28-013,28,"IPC Québec (18-10-0004-01, ensemble, 2002 = 100) : +3,1 % sur un an en septembre 2026 ; niveaux 124,7 (avril 2015) et 167,7 (septembre 2026), soit +34,5 %",SRC-E-015;SRC-C-049,data/raw/statcan_18100004/18100004.csv (vecteur v41691783, relu le 2026-10-31) ; notes-E,2026-10-31,verifie,"Calcul de l'auteur (indexation du barème SCHL 2015)" | |
| 15 | +CLM-28-014,28,"SCHL Rapport sur le marché locatif (données d'octobre 2025) : inoccupation RMR Québec 2,4 %",SRC-E-007,notes-E §ch. 4/46,2026-10-31,verifie, | |
| 16 | +CLM-28-015,28,"Aucune statistique officielle du ratio de dépenses d'exploitation typique ni de la réserve de remplacement par logement au Québec ; fourchettes 35-50 % des blogues de courtage non retenues",SRC-E-047,notes-E §ch. 28 et « Non trouvé » (points 5-6) ; calibration.json (NON_VERIFIE),2026-10-31,verifie,"Déclaré dans limites ; conventions du dossier déclarées comme telles" | |
| 17 | +CLM-28-016,28,"Valeur au rôle : la vente ne modifie pas en elle-même l'inscription ; taxes normalisées sur le rôle en vigueur × taux de l'exercice (renvoi ch. 9 et 29)",SRC-B-001,ch29 (CLM-29-010, CLM-29-011) ; notes-B §9,2026-10-31,partiellement_verifie,"Même réserve qu'au ch. 29 : art. 174 LFM non relu intégralement" | |
| 18 | +CLM-28-017,28,"Appraisal Institute (2026) et Fisher & Martin (2007) : état des résultats reconstitué, classement fixes/variables/réserve, réserve de remplacement ; Brueggeman & Fisher (2022) : RNE vs flux de trésorerie ; Geltner et al. (2014) : cohérence revenu/CAPEX/taux",SRC-D-001;SRC-D-009;SRC-D-005;SRC-D-004,sources/notes-D.md §ch. 28 ; ouvrages de référence (registry-D),2026-10-31,partiellement_verifie,"Attribution générale de notions standard ; pages précises non citées" | |
| 19 | +CLM-28-018,28,"Bokhari & Geltner (2018, Real Estate Economics 46(4)) : ampleur des dépenses en capital récurrentes du multirésidentiel et rôle dans la dépréciation nette",lib-D:bokhariGeltner2018,DOI 10.1111/1540-6229.12156 vérifié par Crossref (notes-D) ; résumé de notes-D §ch. 28,2026-10-31,partiellement_verifie,"Article non relu intégralement par le rédacteur ; aucun chiffre repris" | |
| 20 | +CLM-28-019,28,"Harding, Rosenthal & Sirmans (2007, JUE 61(2)) : dépréciation du capital résidentiel par ventes répétées ; entretien de l'ordre de 1 %/an de la valeur (propriétaires-occupants américains)",lib-D:hardingRosenthalSirmans2007,DOI 10.1016/j.jue.2006.07.007 vérifié par Crossref (notes-D) ; ordre de grandeur de notes-D §ch. 28,2026-10-31,partiellement_verifie,"Ordre de grandeur cité avec « de l'ordre de » ; article non relu intégralement" | |
| 21 | +CLM-28-020,28,"Dossier cas 3 : les locataires paient électricité et chauffage (chauffage_inclus = 0 dans les 12 baux) ; aucune tarification distincte de l'eau",données synthétiques,data/synthetic/cas3_montreal_etat_locatif.csv ; cas3_montreal_depenses.csv,2026-10-31,verifie,"Hypothèse du jeu synthétique, pas une affirmation sur Montréal" | |
added
verification/chapters/ch28-figures.csv
+6 −0
@@ -0,0 +1,6 @@ | ||
| 1 | +fichier,chapitre,script,donnees,type_donnees,legende_courte,statut | |
| 2 | +ch28/ch28-fig-cascade.pdf,28,analysis/python/figures/ch28_figures.py,data/synthetic/cas3_montreal_etat_locatif.csv;cas3_montreal_depenses.csv;cas3_montreal_hypotheses_dcf.json,synthetique,"Cascade du RBP au RNE normalisé du cas 3 (inoccupation, autres revenus, fixes, variables, gestion, réserve) [données synthétiques]",verifie | |
| 3 | +ch28/ch28-fig-structure.pdf,28,analysis/python/figures/ch28_figures.py,data/synthetic/cas3_montreal_depenses.csv;cas2_quebec_depenses.csv,synthetique,"Structure des dépenses normalisées en % du RBE par groupe de postes, cas 3 vs cas 2 (barres groupées) [données synthétiques]",verifie | |
| 4 | +ch28/ch28-fig-evolution.pdf,28,analysis/python/figures/ch28_figures.py,data/synthetic/cas3_montreal_depenses.csv,synthetique,"Évolution 2023-2025 des groupes de dépenses du cas 3 (indice 2023 = 100) et montant déclaré 2025 vs normalisé [données synthétiques]",verifie | |
| 5 | +ch28/ch28-fig-ratio-loyer.pdf,28,analysis/python/figures/ch28_figures.py,data/synthetic/cas3_montreal_comparables.csv;traite.cas3.rne,synthetique,"Ratio de dépenses vs loyer moyen des 40 comparables du cas 3 et courbe iso-dépenses du sujet (contractuel 46,6 %, marché 42,1 %) [données synthétiques]",verifie | |
| 6 | +ch28/ch28-fig-sensibilite.pdf,28,analysis/python/figures/ch28_figures.py,ch28_depenses.sensibilites (traite.cas3),synthetique,"RNE normalisé du cas 3 selon la réserve par logement, le taux de taxe municipale et le taux de gestion (3 panneaux) [données synthétiques]",verifie | |
added
verification/chapters/ch28-registry.csv
+25 −0
@@ -0,0 +1,25 @@ | ||
| 1 | +id,type,titre,organisme,version_ou_date,url,date_consultation,statut,utilise_dans,notes | |
| 2 | +SRC-E-047,document,Frais d'exploitation de la SCHL — immeubles locatifs au Québec (avril 2015),SCHL (diffusé par PMML),avril 2015,https://pmml.ca/wp-content/uploads/2020/10/Frais-dexploitation-avril-2015.pdf,2026-10-31,verifie,ch28,"RATTACHEMENT : barème entretien 500 $/log., salaires, gestion 3-5 %, réserve 100 $/log. (tab. 28.7, §28.3, §28.5, §28.6)" | |
| 3 | +SRC-A-005,page_web,Pourcentages applicables aux critères de fixation de loyer (2025 et 2026),Tribunal administratif du logement,2026,https://www.tal.gouv.qc.ca/fr/reconduction-du-bail-et-fixation-de-loyer/pourcentages-applicables-aux-criteres-de-fixation-de-loyer,2026-10-31,verifie,ch28,"RATTACHEMENT : taux de base 3,1 % ; gaz −5,8/+13,7 (encadré Québec, §28.3)" | |
| 4 | +SRC-A-003,reglement,"Règlement sur les critères de fixation de loyer (RLRQ, c. T-15.01, r. 2)",Québec (LégisQuébec),À jour au 1er juillet 2026 (D. 1455-2025),https://www.legisquebec.gouv.qc.ca/fr/document/rc/T-15.01,%20r.%202,2026-10-31,verifie,ch28,"RATTACHEMENT : art. 3, 3.1, 5 (encadré Québec)" | |
| 5 | +SRC-A-009,guide,Formulaire « Renseignements nécessaires à la fixation du loyer » (RN) — Fixation 2026-2027,Tribunal administratif du logement,TAL-004-E RN (2025-11),https://www.tal.gouv.qc.ca/sites/default/files/RN_2026_F.pdf,2026-10-31,verifie,ch28,"RATTACHEMENT : lignes de dépenses du formulaire (encadré Québec, §28.3)" | |
| 6 | +SRC-A-010,page_web,Augmentation de loyer — critères de fixation (avis à compter du / avant le 1er janvier 2026),Tribunal administratif du logement,Consultée le 2026-10-31,https://www.tal.gouv.qc.ca/fr/reconduction-du-bail-et-fixation-de-loyer/augmentation-de-loyer,2026-10-31,verifie,ch28,"RATTACHEMENT : ancienne méthode (gestion 5 %, CPG + 1 %), nouvelle méthode" | |
| 7 | +SRC-E-049,document,"Formulaire de calcul de l'ajustement des loyers (frais de gestion : forfait 5 %, max 10 % des revenus)",Tribunal administratif du logement,2021 (règle stable),https://www.tal.gouv.qc.ca/sites/default/files/CSAL_2021_F.pdf,2026-10-31,partiellement_verifie,ch28,"RATTACHEMENT : gestion 5 %/10 % (§28.3, §28.8)" | |
| 8 | +SRC-A-001,loi,"Code civil du Québec (RLRQ, c. CCQ-1991)",Québec (LégisQuébec),À jour au 15 octobre 2026,https://www.legisquebec.gouv.qc.ca/fr/document/lc/CCQ-1991,2026-10-31,verifie,ch28,"RATTACHEMENT : art. 1947 et 1953 (encadré Québec)" | |
| 9 | +SRC-B-035,loi,"Loi sur l'instruction publique (RLRQ, c. I-13.3)",Québec (LégisQuébec),À jour au 15 octobre 2026,https://www.legisquebec.gouv.qc.ca/fr/document/lc/I-13.3,2026-10-31,verifie,ch28,"RATTACHEMENT : art. 303 à 303.6 (taxe scolaire, §28.3)" | |
| 10 | +SRC-E-026,communique,"Taxe scolaire 2026-2027 — taux 0,07899 $/100 $ (communiqué CSS des Hautes-Rivières)",CSSDHR (taux fixé par le ministre),2026-07-02,https://www.cssdhr.gouv.qc.ca/wp-content/uploads/2026/07/2026-07-02_Comm_Pres_Taxe_Scol.pdf,2026-10-31,verifie,ch28,"RATTACHEMENT : taxe scolaire du cas 3 (1 737,78 $)" | |
| 11 | +SRC-B-024,page_web,"Budget Montréal 2026 : les taxes foncières augmenteront de 3,8 % en moyenne (Le Devoir)",Le Devoir,2026-01-12,https://www.ledevoir.com/economie/947379/montreal-hausse-taxes-residentielles-3-8-2026,2026-10-31,partiellement_verifie,ch28,"RATTACHEMENT : 0,4631 $/100 $ ; Rosemont +5,3 % (source secondaire)" | |
| 12 | +SRC-B-023,page_web,Taux de taxes pour 2026 (Ville de Montréal),Ville de Montréal,Mise à jour du 29 janvier 2026,https://montreal.ca/articles/taux-de-taxes-pour-2026-106147,2026-10-31,partiellement_verifie,ch28,"RATTACHEMENT : document officiel non lisible hors navigateur (limites)" | |
| 13 | +SRC-B-025,page_web,Taux de taxes (Ville de Québec) — exercice 2026,Ville de Québec,Règlement R.V.Q. 3492 ; consulté 2026-10-31,https://www.ville.quebec.qc.ca/apropos/profil-financier/taux-taxation.aspx,2026-10-31,verifie,ch28,"RATTACHEMENT : 0,7464 / 0,7697 ; tarifs 386 + 195 $/log. (cas 2, sensibilité)" | |
| 14 | +SRC-E-028,reglement,Règlement 994-2025 décrétant l'imposition des taxes foncières 2026,Ville de Gatineau,2025-12-18,https://docweb.gatineau.ca/Doc-Web/masson/documents/pdf/R%20994-2025.pdf,2026-10-31,verifie,ch28,"RATTACHEMENT : taux six logements ou plus 6,964 $/1 000 $ (sensibilité)" | |
| 15 | +SRC-E-039,page_web,Pourquoi mon assurance habitation coûte plus cher (prime moyenne Québec 1 103 $ en 2024),Infoassurance (Bureau d'assurance du Canada),2025,https://infoassurance.ca/blogue/habitation/pourquoi-mon-assurance-habitation-coute-plus-cher,2026-10-31,partiellement_verifie,ch28,"RATTACHEMENT : §28.3 assurances" | |
| 16 | +SRC-E-037,document,Tarifs d'électricité en vigueur le 1er avril 2026 (section 2.5 — structure du tarif D),Hydro-Québec,2026-04-01,https://www.hydroquebec.com/data/documents-donnees/pdf/tarifs-electricite.pdf?v=20261001,2026-10-31,verifie,ch28,"RATTACHEMENT : §28.3 énergie" | |
| 17 | +SRC-E-038,communique,"Décision D-2026-033 — hausse tarifaire moyenne 3,2 % ; domestique 3,0 % au 1er avril 2026",Régie de l'énergie,2026-03-16,https://www.regie-energie.qc.ca/storage/app/media/la-regie/publications-documentations-conference-colloques/communiques-de-presse/2026/cp-20260316-hqd.pdf,2026-10-31,verifie,ch28,"RATTACHEMENT : §28.3 énergie (3,0 / 3,0 / 2,6 %)" | |
| 18 | +SRC-E-015,tableau,Indice des prix à la consommation mensuel non désaisonnalisé — tableau 18-10-0004-01,Statistique Canada,sept. 2026 (diffusé 2026-10-19),https://www150.statcan.gc.ca/t1/tbl1/fr/tv.action?pid=1810000401,2026-10-31,verifie,ch28,"RATTACHEMENT : +3,1 % ; indexation 124,7 → 167,7 (v41691783, data/raw/statcan_18100004)" | |
| 19 | +SRC-E-007,rapport,Rapport sur le marché locatif — données d'octobre 2025,SCHL,2025-12-11,https://www.cmhc-schl.gc.ca/fr/professionnels/marche-du-logement-donnees-et-recherche/marches-de-lhabitation/rapports-sur-le-marche-locatif,2026-10-31,verifie,ch28,"RATTACHEMENT : inoccupation RMR Québec 2,4 % (cas 2)" | |
| 20 | +SRC-B-001,loi,"Loi sur la fiscalité municipale (RLRQ, c. F-2.1)",Québec / LégisQuébec,À jour au 15 octobre 2026,https://www.legisquebec.gouv.qc.ca/fr/document/lc/F-2.1,2026-10-31,verifie,ch28,"RATTACHEMENT : taxes sur la valeur au rôle (renvoi ch. 9 et 29)" | |
| 21 | +SRC-D-001,manuel,"The Appraisal of Real Estate, 16th Edition",Appraisal Institute (Chicago),2026,https://www.appraisalinstitute.org/insights-and-resources/resources/books/the-appraisal-of-real-estate-16th-edition,2026-10-31,verifie,ch28,"RATTACHEMENT : état des résultats reconstitué, réserve (§28.1, §28.4, Pour aller plus loin)" | |
| 22 | +SRC-D-003,manuel,"The Appraisal of Real Estate, Third Canadian Edition",UBC Real Estate Division / AIC,2010,https://openlibrary.org/search?q=Appraisal+of+Real+Estate+Canadian+Edition,2026-10-31,verifie,ch28,"RATTACHEMENT : Pour aller plus loin" | |
| 23 | +SRC-D-009,manuel,"Income Property Valuation, 3rd ed.",Fisher & Martin (Dearborn),2007,,2026-10-31,verifie,ch28,"RATTACHEMENT : normalisation, classement (§28.1, §28.2, §28.4)" | |
| 24 | +SRC-D-005,manuel,"Real Estate Finance and Investments, 17th ed.",Brueggeman & Fisher (McGraw Hill),2022,,2026-10-31,verifie,ch28,"RATTACHEMENT : §28.4, Pour aller plus loin" | |
| 25 | +SRC-D-004,manuel,"Commercial Real Estate Analysis and Investments, 3rd ed.",Geltner, Miller, Clayton & Eichholtz (OnCourse),2014,,2026-10-31,verifie,ch28,"RATTACHEMENT : RNE vs flux, cohérence avec le taux (§28.1, Pour aller plus loin)" | |
added
verification/chapters/ch28.md
+41 −0
@@ -0,0 +1,41 @@ | ||
| 1 | +# Chapitre 28 — Dépenses, réserves, CAPEX et RNE : bilan de rédaction (2026-10-31) | |
| 2 | + | |
| 3 | +## Livrables | |
| 4 | +| Fichier | Contenu | | |
| 5 | +|---|---| | |
| 6 | +| `manuscript/chapters/ch28.tex` | ≈ 12 650 mots (compteur `valider_chapitre.sh`, tableaux compris ; ≈ 10 500 mots de prose) ; 8 sections (28.1 périmètre du RNE, 28.2 classement fixes/variables/réserve, 28.3 postes québécois, 28.4 normalisation, 28.5 réserve vs CAPEX et cohérence avec le taux, 28.6 ratios de référence, 28.7 exemple intégral cas 3 + cas 2, 28.8 sensibilité) ; encadrés `synthetique`, `quebec` (dépenses de l'évaluateur vs dépenses du TAL), `erreurs`, `limites`, `synthese` ; 2 définitions, 1 proposition avec démonstration (erreur d'une réserve asymétrique : ΔV = RR/R'), 1 exemple | | |
| 7 | +| `analysis/python/cases/ch28_depenses.py` | tous les chiffres du chapitre et des solutions : `calculer()` (historique, normalisation, classement, démonstration réserve/taux, réserve par composantes, annuité équivalente des CAPEX, loyers au marché, comparables, sensibilités, indexation IPC, cas 2), `exercices()` ; appuyé sur `traite.cas3`, `traite.cas2`, `traite.finance` (aucune formule partagée réécrite, aucune modification de `traite/`) | | |
| 8 | +| `analysis/python/figures/ch28_figures.py` | 5 figures → `assets/figures/ch28/ch28-fig-{cascade,structure,evolution,ratio-loyer,sensibilite}.pdf` | | |
| 9 | +| `analysis/python/tests/test_ch28.py` | 17 tests : identités (RNE = RBE − DE − RR ; R' = R + RR/V ; ΔV = RR/R' ; VA CAPEX perpétuels = VA réserve au fonds d'amortissement ; fonds → linéaire quand i → 0), cohérence avec `cas3.tout()` et `cas2.tout()` (ch. 29/30/32/46/47), valeurs citées (0,01 $ / 1 $), exercices, présence des figures | | |
| 10 | +| `solutions/ch28.tex` | 7 solutions détaillées (ex. 28.1 → 28.7) | | |
| 11 | +| `verification/chapters/ch28-{figures,calculations,claims,registry}.csv`, `references/lib-ch28.bib` | 5 figures, 24 calculs, 20 affirmations, 24 lignes de rattachement ; aucune nouvelle entrée bib (clés existantes seulement) | | |
| 12 | + | |
| 13 | +## Compteurs | |
| 14 | +- Figures : 5 (toutes synthétiques) — tableaux : 8 — équations numérotées : 11 — exercices : 7 (niveaux 1, 1, 2, 2, 2, 3, 3) — définitions : 2 — proposition : 1 (avec démonstration) — `\cref` : 60 (tous précédés de l'article/préposition ou entre parenthèses). | |
| 15 | + | |
| 16 | +## Contrôles | |
| 17 | +- `tools/compile_chapter.sh 28` → `OK ch28 : 37 pages, 0 references/citations non definies, 0 overfull hbox` (solutions + bibliographie du chapitre incluses). | |
| 18 | +- `python3 -m pytest -q analysis/python/tests/test_ch28.py` → 17 passed. | |
| 19 | +- Inspection visuelle (`pdftoppm -r 45`, montages des 37 pages) : tableaux 28.1-28.8 dans la justification, figures 28.1-28.5 lisibles, encadrés, exercices, solutions ; aucune coupure anormale. | |
| 20 | +- `tools/check_manuscript.py --no-log` : signale seulement que les 5 figures ne sont pas dans `verification/figures.csv` global — attendu (règle de collision : CSV par chapitre, fusion par `tools/merge_sources.py`). | |
| 21 | +- Note : une première compilation a échoué (« File ended while scanning use of \@newl@bel ») parce que `tools/make_labels.py` relit désormais les `.aux` des autres chapitres et qu'un `.aux` (ch25) était en cours d'écriture par un autre rédacteur ; la relance a réussi. Course transitoire, pas un défaut du chapitre. | |
| 22 | + | |
| 23 | +## Chiffres clés (coïncident avec `traite.cas3.tout()` / `traite.cas2.tout()`) | |
| 24 | +Cas 3 : RBE 168 443,94 $ ; dépenses normalisées 78 488,19 $ (fixes 23 317,78 = 29,7 % ; variables 47 067,41 = 60,0 % dont gestion 6 737,76 ; réserve 8 103 = 10,3 %) ; ratio 46,6 % ; RNE₁ 89 955,75 $ = 7 496,31 $/log. = 109,04 $/m² ; dépenses 6 540,68 $/log., 95,14 $/m² ; historique 66 992 / 70 438 / 70 693 $ (+5,5 %, TCAC 2,7 %) ; écart normalisation +7 795,19 $ (V surévaluée de 176 561 $ = 8,7 % sur le RNE historique) ; démonstration réserve : R' = 4,8127 % (+39,8 pb), V' = 1 869 136 $, ΔV = 168 367 $ = RR/R', −8,26 % ; réserve par composantes (hypothèses pédagogiques) 687,62 $/log. linéaire, 580,71 $ fonds 3 % ; CAPEX 245 000 $ → VA 177 647,94 $, annuité 25 586,15 $ ; loyers au marché : ratio 42,1 % ; comparables : ratio médian 39,85 %. Cas 2 : RBE 40 577,04 $ ; gestion imputée 1 623,08 $ ; dépenses 18 543,08 $ (ratio 45,7 %, fixes 52,7 %) ; RNE 22 033,96 $ = 7 344,65 $/log. = 84,10 $/m² ; taxes Québec recalculées 5 437,68 $ vs 5 900 $ déclarés. | |
| 25 | + | |
| 26 | +## Points non vérifiés ou à confirmer | |
| 27 | +1. Taxe foncière générale Montréal 2026 (0,4631 $/100 $) : source secondaire (Le Devoir) ; taux « 6 logements et plus » et taxes d'arrondissement non trouvés → le cas 3 ne modélise que la taxe générale (CLM-28-007, `partiellement_verifie`), déclaré dans `limites` et chiffré dans la sensibilité (compte indexé de 5,3 % : −1,1 % de valeur). | |
| 28 | +2. Taxe scolaire 2026-2027 (0,07899 $) : communiqué de CSS, avis officiel non consulté ; exemption de 25 000 $ et ajustement non modélisés (écart 19,75 $) (CLM-28-006). | |
| 29 | +3. Prime d'assurance BAC 1 103 $ : ménages, pas immeubles locatifs ; incohérence 2023/2024 de la page (CLM-28-010). | |
| 30 | +4. Bokhari & Geltner (2018) et Harding et al. (2007) : cités d'après notes-D (DOI vérifiés), articles non relus intégralement ; aucun chiffre repris sauf « de l'ordre de 1 %/an » (CLM-28-018, CLM-28-019). | |
| 31 | +5. Art. 1947 et 1953 C.c.Q. : résumés de notes-A, texte intégral non relu par le rédacteur (CLM-28-005). | |
| 32 | +6. Aucune statistique publique du ratio de dépenses typique ni de la réserve de remplacement : conventions du dossier déclarées comme telles (CLM-28-015). | |
| 33 | +7. Composantes et durées de vie du tableau 28.4 : hypothèses pédagogiques déclarées (aucun barème). | |
| 34 | + | |
| 35 | +## Remarques pour l'harmonisation / la bibliothèque | |
| 36 | +- **Incohérence inter-chapitres sur la réserve** : `ch30.tex` (§30.2, ligne ≈ 119) parle d'une « réserve de 650 $ par logement » alors que le code (`traite.cas3`), le ch. 29, le ch. 47 et le présent chapitre utilisent 8 103 $ = 675,25 $/logement. À corriger dans ch30 (650 → 675). | |
| 37 | +- **Incohérence sur la nature des CAPEX du cas 3** : ch30 (85 000 $ maçonnerie et balcons 2027 ; 40 000 $ fenêtres 2029 ; 120 000 $ toiture et chauffage 2032) vs ch47 (85 000 $ toiture 2027 ; 40 000 $ balcons 2029 ; 120 000 $ cuisines/plomberie 2032). Le ch. 28 ne cite que les montants et les dates, sans nature des travaux ; à harmoniser entre ch30 et ch47. | |
| 38 | +- `tools/make_labels.py` relit maintenant les `.aux` des autres chapitres : les renvois fins (`tab:9:taux`, etc.) deviennent possibles, mais la course décrite ci-dessus suggère de rendre la lecture des `.aux` tolérante (ignorer les lignes `\newlabel` incomplètes ou copier l'`.aux` avant lecture). Le ch. 28 n'utilise que des renvois `ch:NN` / `app:` vers l'extérieur. | |
| 39 | +- `ch28_depenses.py` fixe deux constantes IPC (124,7 ; 167,7) lues dans `data/raw/statcan_18100004/18100004.csv` (162 Mo) plutôt que de relire le fichier à chaque exécution ; si l'IPC est mis à jour, ajuster les constantes (testées). | |
| 40 | +- Les figures ch28 utilisent `fig.text` pour la mention « DONNÉES SYNTHÉTIQUES » ; `tools/check_manuscript.py` exige leur présence dans `verification/figures.csv` global → fusionner `ch28-figures.csv`. | |
| 41 | +- Le barème SCHL 2015 indexé par l'IPC (entretien ≈ 672 $/log.) pourrait servir aux ch. 32/33/46 ; la fonction `indexation_ipc()` de `ch28_depenses.py` peut être déplacée dans `traite/` si plusieurs chapitres l'utilisent. | |
added
verification/chapters/ch33-calculations.csv
+25 −0
@@ -0,0 +1,25 @@ | ||
| 1 | +id,chapitre,description,script,test,resultat_attendu,resultat_obtenu,statut,date | |
| 2 | +CALC-33-001,33,Lecture SCHL île de Montréal : 6-19 unités inoccupation 2,2 % / loyer 2 ch. 1 177 $ / tous 1 162 $ ; 100+ : 5,1 % / 1 966 $ ; 2015+ : 5,6 % / 1 882 $,analysis/python/cases/ch33_six_logements.py,analysis/python/tests/test_ch33.py::test_schl_lecture_coherente_avec_notes,"2,2 ; 1177 ; 1162 ; 5,1 ; 1966 ; 5,6 ; 1882","2,2 ; 1177 ; 1162 ; 5,1 ; 1966 ; 5,6 ; 1882",verifie,2026-10-31 | |
| 3 | +CALC-33-002,33,Cas 4 : sommaire par RMR (n RMR = 48 ; 888 logements ; valeur 143 363 000 ; taux pondéré 5,19 % ; 161 445 $/log.),analysis/python/cases/ch33_six_logements.py,test_ch33.py::test_sommaire_cas4_identites,"143363000 ; 0,051945 ; 161445","143363000 ; 0,051945 ; 161445",verifie,2026-10-31 | |
| 4 | +CALC-33-003,33,Cas 4 : taux pondéré Montréal 4,49 % ; Gatineau 5,44 % ; Trois-Rivières 6,29 % ; valeur/log. Montréal 206 237 ; Gatineau 184 173 ; Québec 125 455 ; Saguenay 101 969,analysis/python/cases/ch33_six_logements.py,test_ch33.py::test_sommaire_cas4_identites,"0,044948 ; 0,054359 ; 0,062883 ; 206237 ; 184173 ; 125455 ; 101969",idem,verifie,2026-10-31 | |
| 5 | +CALC-33-004,33,Effet de taille cas 3 : pente −2,27 pb/logement ; 12→36 = −54,6 pb (régression traite.cas3.taux_extraits),analysis/python/cases/ch33_six_logements.py,test_ch33.py::test_effet_taille,"-2,27 ; -54,6","-2,27 ; -54,6",verifie,2026-10-31 | |
| 6 | +CALC-33-005,33,Effet de taille cas 4 : coefficient ln(n/12) = −0,0315 (ET HC1 0,0122) ; doublement −2,16 % ; 12→36 Montréal état 3 = −15,7 pb,analysis/python/cases/ch33_six_logements.py,test_ch33.py::test_effet_taille,"-0,0315 ; -0,0216 ; -15,7","-0,0315 ; -0,0216 ; -15,7",verifie,2026-10-31 | |
| 7 | +CALC-33-006,33,Effets cas 4 (traite.cas4.effets_regionaux) : état −3,96 %/point ; inondable +7,9 % ; sol +5,5 % ; RMR Gatineau +19,6 % ; Québec +26,8 % ; Sherbrooke +25,3 % ; Trois-Rivières +40,2 % ; Saguenay +32,9 % ; R² 0,883 ; constante 4,60 %,analysis/python/cases/ch33_six_logements.py,test_ch33.py::test_effet_taille,"-0,0396 ; 0,1962 ; 0,4017","-0,0396 ; 0,1962 ; 0,4017",verifie,2026-10-31 | |
| 8 | +CALC-33-007,33,Unités cas 3 (V = 2 060 000) : 171 667 $/log. ; 2 497 $/m² ; 93 636 $/chambre (22 chambres) ; MRB 12,44 (contrat) et 11,07 (marché) ; taux implicite 4,37 % ; 16,72 $/m²/mois,analysis/python/cases/ch33_six_logements.py,test_ch33.py::test_unites_cas3,"171667 ; 2497 ; 93636 ; 12,44 ; 11,07 ; 0,04367","171666,67 ; 2496,97 ; 93636,36 ; 12,44 ; 11,07 ; 0,04367",verifie,2026-10-31 | |
| 9 | +CALC-33-008,33,Valeur finale du ch. 47 (2 060 000 $) reprise comme constante : égale à ch47_dossier.reconciliation.valeur_finale,analysis/python/cases/ch33_six_logements.py,test_ch33.py::test_valeur_finale_ch47_coherente,2060000,2060000,verifie,2026-10-31 | |
| 10 | +CALC-33-009,33,Proposition 33.1 : MRB = (1−v)(1−ρ)/R ; cas 3 : (1−0,039)(1−0,466)/0,04415 = 11,63,analysis/python/cases/ch33_six_logements.py,—,"11,63","11,62 (calcul direct ; arrondi des intrants)",verifie,2026-10-31 | |
| 11 | +CALC-33-010,33,P45 : RNE 366 800 ; taux Montréal cas 3 4,415 % → 8 308 041 ; Gatineau pondéré 5,436 % → 6 747 739 ; médiane 5,710 % → 6 423 818 ; régression 5,461 % → 6 716 534 (186 570 $/log.),analysis/python/cases/ch33_six_logements.py,test_ch33.py::test_p45_identites_et_valeurs,"8308041 ; 6747739 ; 6423818 ; 6716534","8308041 ; 6747739 ; 6423818 ; 6716534",verifie,2026-10-31 | |
| 12 | +CALC-33-011,33,P45 contrefactuels : si Montréal 4,565 % → 8 034 343 ; si 12 logements 5,654 % → 6 487 875 ; si état 3 5,245 % → 6 993 820 ; taux fichier 5,10 % → 7 192 157,analysis/python/cases/ch33_six_logements.py,test_ch33.py::test_p45_identites_et_valeurs,"8034343 ; 6487875 ; 6993820 ; 7192157",idem,verifie,2026-10-31 | |
| 13 | +CALC-33-012,33,Décomposition multiplicative : Montréal 12 log. état 2 âge 72 = 4,726 % ; effet taille −16,1 pb ; effet RMR +89,6 pb ; produit = 5,461 % ; écart Montréal/régression +23,7 %,analysis/python/cases/ch33_six_logements.py,test_ch33.py::test_p45_identites_et_valeurs,"4,726 ; -16,1 ; +89,6 ; 0,237",idem,verifie,2026-10-31 | |
| 14 | +CALC-33-013,33,Facteur de Duan de la régression cas 4 : 1,0011 ; prédiction R̂ = exp(xβ)×Duan,analysis/python/cases/ch33_six_logements.py,test_ch33.py::test_p45_identites_et_valeurs,"1,0011","1,0011",verifie,2026-10-31 | |
| 15 | +CALC-33-014,33,P45 financement (hyp. amortissement 480 mois) : dette 5 416 000 à 5,17 % → service 318 363 $ ; RCD 1,15 ; RPV 75,4 % (dossier) et 80,6 % (régression),analysis/python/cases/ch33_six_logements.py,test_ch33.py::test_p45_identites_et_valeurs,"318363 ; 1,15 ; 0,754 ; 0,806",idem,verifie,2026-10-31 | |
| 16 | +CALC-33-015,33,Sensibilité P45 : +25 pb → −4,38 % ; −25 pb → +4,80 % ; ±50 pb → −8,39 % / +10,08 % ; grille RMR × état (Montréal état 2 223 176 $/log. ; Trois-Rivières 159 220 ; Gatineau état 1 179 173 / état 5 210 645),analysis/python/cases/ch33_six_logements.py,test_ch33.py::test_sensibilite,"-0,0438 ; 0,0480 ; 223176 ; 159220 ; 179173 ; 210645",idem,verifie,2026-10-31 | |
| 17 | +CALC-33-016,33,Courbe de taille Gatineau état 2 : 6 log. 5,78 % (176 323 $/log.) → 72 log. 5,34 % (190 693 $/log.),analysis/python/cases/ch33_six_logements.py,test_ch33.py::test_sensibilite,"0,0578 ; 176323 ; 0,0534 ; 190693",idem,verifie,2026-10-31 | |
| 18 | +CALC-33-017,33,Un point de base : 12 299 $ pour P45 ; 2 265 $ par million à 4,415 % ; 1 831 $ par million à 5,461 %,analysis/python/cases/ch33_six_logements.py,test_ch33.py::test_sensibilite,"12299 ; 2265 ; 1831",idem,verifie,2026-10-31 | |
| 19 | +CALC-33-018,33,Ex. 33.1 : 16 log./1 040 m²/26 ch. → 2 746 667 / 2 596 848 / 2 434 545 $ ; écart max 12,8 %,analysis/python/cases/ch33_six_logements.py,test_ch33.py::test_exercices,"2746667 ; 2596848 ; 2434545 ; 0,128",idem,verifie,2026-10-31 | |
| 20 | +CALC-33-019,33,Ex. 33.2 : rôle 1 800 000 ; taxe 5 log. 16 340,20 ; 6 log. 17 340,60 ; écart taux 419,40 ; total 1 000,40 ; capitalisé à 5,5 % 7 625 $,analysis/python/cases/ch33_six_logements.py,test_ch33.py::test_exercices,"16340,20 ; 17340,60 ; 419,40 ; 1000,40 ; 7625",idem,verifie,2026-10-31 | |
| 21 | +CALC-33-020,33,Ex. 33.3 : R36 = 4,021 % ; valeur/log. 164 141 → 186 426 (+13,6 %),analysis/python/cases/ch33_six_logements.py,test_ch33.py::test_exercices,"0,04021 ; 164141 ; 186426 ; 0,1358",idem,verifie,2026-10-31 | |
| 22 | +CALC-33-021,33,Ex. 33.4 : écart 1 591 507 $ (+23,7 %),analysis/python/cases/ch33_six_logements.py,test_ch33.py::test_exercices,"1591507 ; 0,237",idem,verifie,2026-10-31 | |
| 23 | +CALC-33-022,33,Ex. 33.5 : ΔRBP 5 760 ; ΔRNE 5 319,48 ; ΔV 97 406 (1,45 %),analysis/python/cases/ch33_six_logements.py,test_ch33.py::test_exercices,"5760 ; 5319,48 ; 97406 ; 0,0145",idem,verifie,2026-10-31 | |
| 24 | +CALC-33-023,33,Ex. 33.6 : 24 log. état 3 45 ans : Montréal 4,52 % ; Québec 5,74 ; Gatineau 5,41 ; Sherbrooke 5,67 ; Trois-Rivières 6,34 ; Saguenay 6,01 ; IC Gatineau [14,1 % ; 25,4 %],analysis/python/cases/ch33_six_logements.py,test_ch33.py::test_exercices,"0,0452 ; 0,0634 ; [0,141 ; 0,254]",idem,verifie,2026-10-31 | |
| 25 | +CALC-33-024,33,Ex. 33.7 : coût 2026 6 988 800 ; total 8 088 800 (337 033 $/log.) ; RBP 568 800 ; RBE 536 947 ; RNE 365 124 ; V 8 113 869 (4,50 %) et 7 686 823 (4,75 %) ; taux implicite 4,51 %,analysis/python/cases/ch33_six_logements.py,test_ch33.py::test_exercices,"6988800 ; 8088800 ; 365124 ; 8113869 ; 7686823 ; 0,0451",idem,verifie,2026-10-31 | |
added
verification/chapters/ch33-claims.csv
+33 −0
@@ -0,0 +1,33 @@ | ||
| 1 | +id,chapitre,affirmation,source_id,verification,date,statut,notes | |
| 2 | +CLM-33-001,33,APH Select / assurance SCHL immeubles collectifs : minimum 5 logements ; 50 points → RPV 85 % existant / 40 ans / RCD 1,10 ; jusqu'à 95 % et 50 ans à 100 points,SRC-C-040,page SCHL publiée 2026-09-21 (notes-C §4.4),2026-10-31,verifie,cellules 70/100 points déduites de la mise en page (notes-C) | |
| 3 | +CLM-33-002,33,Formulaire DV de l'OACIQ obligatoire pour l'immeuble principalement résidentiel de moins de 5 logements,SRC-A-026,notes-A §2.4,2026-10-31,verifie, | |
| 4 | +CLM-33-003,33,LFM art. 244.29 et s. : taux variés par catégories ; art. 45.1 : vendeur réputé détenir les droits du locataire (rôle libre de baux),SRC-B-001,notes-B §9.6 et §9.2,2026-10-31,verifie,la base légale précise des sous-catégories résidentielles (6 logements et plus) n'a pas été relue : partiellement_verifie pour ce point | |
| 5 | +CLM-33-004,33,Ville de Québec 2026 : 0,7464 $/100 $ (1 à 5 logements) ; 0,7697 $ (6 logements et plus) ; 386 $/logement aqueduc-égout ; 195 $/logement matières résiduelles (R.V.Q. 3492),SRC-B-025;SRC-E-027,page Ville de Québec (notes-B §9.9 ; notes-E ch. 28),2026-10-31,verifie, | |
| 6 | +CLM-33-005,33,Rôle 2026-2028 de Montréal : 6 logements et plus +10,9 % ; 5 logements ou moins +9,6 % ; agglomération +12,2 %,SRC-E-051;SRC-E-052,communiqué Ville + presse (notes-E ch. 47),2026-10-31,verifie, | |
| 7 | +CLM-33-006,33,Taux de taxation montréalais distinct pour les « 6 logements et plus » en 2026,—,document officiel « Taux de taxes 2026 » non lisible par script (notes-E),2026-10-31,non_verifie,déclaré comme limite dans le chapitre (comme au ch. 47) | |
| 8 | +CLM-33-007,33,Rôle 2027-2029 de Gatineau (déposé 2026-10-27) : 6 logements et plus médiane 1,99 M$ (+27,6 %) ; unifamiliale médiane +9,06 %,SRC-E-054;SRC-E-055;SRC-E-057,presse (TVA Gatineau Le Droit) + page Ville (notes-E ch. 45),2026-10-31,partiellement_verifie,chiffre de presse ; cité avec la clé gatineaurole2027 (page Ville) | |
| 9 | +CLM-33-008,33,SCHL ELL : couverture = immeubles d'initiative privée de 3 logements et plus ; tranches 3-5 / 6-19 / 20-49 / 50-99 / 100+,SRC-E-007,classeur rmr-montreal-2025-fr.xlsx lu (tableaux 1.3.x),2026-10-31,verifie, | |
| 10 | +CLM-33-009,33,"SCHL île de Montréal oct. 2025 par taille : inocc. 2,3 / 2,2 / 3,9 / 3,8 / 5,1 % ; loyer tous 1 288 / 1 162 / 1 122 / 1 226 / 1 665 $ ; 2 ch. 1 350 / 1 177 / 1 298 / 1 443 / 1 966 $ ; rotation 6-19 8,5 ; 20-49 9,6 ; 50-99 12,4 ; 100+ 12,4 ; tous 3,1 % / 1 283 $ / 9,3 %",SRC-E-007,lecture directe du classeur (script + test),2026-10-31,verifie,données réelles ; attribution SCHL dans tableau et figure | |
| 11 | +CLM-33-010,33,"SCHL île de Montréal oct. 2025 par année de construction : loyer tous avant 1940 1 238 ; 1940-59 1 050 ; 1960-74 1 186 ; 1975-89 1 262 ; 1990-2004 1 224 ; 2005-14 1 373 ; 2015+ 1 882 $ ; inocc. 2,2 / 2,6 / 3,3 / 2,8 / n.d. / n.d. / 5,6 % ; rotation 9,3 / 7,1 / 9,9 / 8,0 / n.d. / n.d. / 13,7 %",SRC-E-007,lecture directe du classeur (tableaux 1.2.1-1.2.3),2026-10-31,verifie, | |
| 12 | +CLM-33-011,33,SCHL oct. 2025 : Gatineau 6-19 unités inocc. 3,6 % ; Sherbrooke 6-19 unités 1,8 % ; Gatineau loyer 2 ch. 1 460 $,SRC-E-007,notes-E ch. 27 + classeurs,2026-10-31,verifie,qualité d pour Gatineau 6-19 | |
| 13 | +CLM-33-012,33,"CBRE T3 2026 : Montréal HR A 4,50-4,75 ; HR B 4,25-4,75 ; LR A 4,50-4,75 ; LR B 4,25-4,75 ; neuf 4,50-4,75 ; Québec 4,25-6,00 (LR B 5,00-6,00) ; national HR A 4,60 ; LR B 4,99 ; écart 256 pb vs 10 ans ; rien pour Gatineau Sherbrooke Trois-Rivières Saguenay",SRC-E-045,rapport CBRE publié 2026-10-21 (notes-E ch. 29),2026-10-31,verifie,valeurs ponctuelles en prose ; aucun tableau reproduit | |
| 14 | +CLM-33-013,33,Altus : 2,9 G$ d'investissement multirésidentiel à Montréal au S1 2026 (+30 %),SRC-E-046,notes-E ch. 29,2026-10-31,verifie,non recoupé | |
| 15 | +CLM-33-014,33,APCIQ T3 2026 : plex (2-5 log.) province 699 000 $ ; RMR Montréal 860 500 $ ; JLR sept. 2026 : 2 à 5 logements 622 000 $ sur 12 mois (+9 %),SRC-E-001;SRC-E-066,communiqué APCIQ ; rapport JLR (notes-E ch. 4 ; notes-C §4.9),2026-10-31,verifie,attribution APCIQ/Centris et « Source : JLR.ca » | |
| 16 | +CLM-33-015,33,"Recensement 2021 Québec : 1 242 910 ménages en appartement < 5 étages (33,2 %) ; 225 750 ≥ 5 étages (6,0 %) ; 271 240 duplex (7,2 %)",SRC-E-022,tableaux 98-10-0041-01 / 98-10-0240-01 (notes-C §4.7),2026-10-31,verifie,notes-E donne 1 242 980 (98-10-0240-01) : écart de 70 entre tableaux | |
| 17 | +CLM-33-016,33,BdC fonds avancés août 2026 : assuré fixe ≥ 5 ans 4,12 % ; non assuré 4,58 %,SRC-E-012,Valet A4_RATES_MORTGAGES (notes-C §4.1),2026-10-31,verifie, | |
| 18 | +CLM-33-017,33,BSIF B-20 : évaluations réalistes et documentées pour les prêts hypothécaires (principe 4),SRC-C-0xx (osfib20),notes-C §4.2,2026-10-31,verifie,id registre à compléter par l'orchestrateur | |
| 19 | +CLM-33-018,33,Loi sur le TAL art. 45 : ensemble immobilier = plusieurs immeubles à proximité comprenant ensemble plus de 12 logements en administration commune,SRC-A-002,notes-A §5,2026-10-31,verifie, | |
| 20 | +CLM-33-019,33,C.c.Q. art. 1955 : exclusion de la fixation 5 ans pour l'immeuble neuf ; opposable seulement si le bail indique le loyer maximal (depuis 2024-02-21),SRC-A-001,notes-A §5,2026-10-31,verifie, | |
| 21 | +CLM-33-020,33,C.c.Q. art. 1895-1896 (formulaire obligatoire ; loyer le plus bas des 12 mois) ; 1958 (indivision : pas de reprise sauf conjoint) ; 1978.2 (refus de cession Loi 31) ; 2695 (hypothèque des loyers),SRC-A-001,notes-A §4 et §5,2026-10-31,verifie, | |
| 22 | +CLM-33-021,33,Loi 65 (2024 c. 23) art. 1 : aucune éviction (art. 1959) avant le 6 juin 2027 ; art. 1959.1 protection aînés 65 ans/10 ans/125 %,SRC-A-001;SRC-A-014,notes-A §5,2026-10-31,verifie,aucun avis de fin anticipée au 2026-10-31 | |
| 23 | +CLM-33-022,33,NPP OEAQ : règle 1.2 (étendue du travail réserves) ; 2.3 (contenu minimal ; rejet d'une méthode motivé) ; 2.4 (inspection obligatoire) ; Code de déontologie art. 41 (méthodologie et étendue des recherches),SRC-C-001;SRC-C-003,notes-C §2.1-2.2,2026-10-31,verifie, | |
| 24 | +CLM-33-023,33,CUSPAP 2026 : étendue du travail ; hypothèse extraordinaire = « could materially alter the opinions or conclusions »,SRC-C-018,notes-C §2.5,2026-10-31,verifie,paraphrasé | |
| 25 | +CLM-33-024,33,IVS 2025 : approches par le revenu (IVS 103 sect. 60) ; choix des méthodes justifié,SRC-C-014,notes-C §3.2,2026-10-31,verifie, | |
| 26 | +CLM-33-025,33,RPRT (Q-2 r. 37) art. 1 : valeurs limites annexe I (résidentiel) / annexe II (industriel commercial institutionnel) ; LQE cadre,SRC-B-043;SRC-B-042,notes-B §ch. 43,2026-10-31,verifie, | |
| 27 | +CLM-33-026,33,Loi sur le bâtiment et Code de sécurité : obligations d'entretien et d'inspection périodique de certaines composantes pour les propriétaires de certains bâtiments,SRC-B-052;SRC-B-054,titres vérifiés ; texte du Code de sécurité non dépouillé (notes-B),2026-10-31,partiellement_verifie,formulé de façon générale ; signalé dans limites | |
| 28 | +CLM-33-027,33,SCHL Frais d'exploitation Québec (avril 2015) : salaires 125 $/log. (5-6 log.) et 300 $/log. (12+),SRC-E-047,document hébergé par un tiers,2026-10-31,partiellement_verifie,barème daté | |
| 29 | +CLM-33-028,33,BAC : prime moyenne d'assurance habitation Québec 1 103 $ (2024 ; +63 % en 10 ans) ; aucune statistique pour les immeubles locatifs,SRC-E-039,Infoassurance (notes-E ch. 28),2026-10-31,partiellement_verifie,même chiffre attribué à 2023 et 2024 sur la page | |
| 30 | +CLM-33-029,33,IPCB Montréal T3 2026 : immeuble < 5 étages +9,2 % ; tour ≥ 5 étages +7,9 % (18-10-0289-01),SRC-E-017,notes-E ch. 23,2026-10-31,verifie, | |
| 31 | +CLM-33-030,33,Description qualitative des marchés privé et institutionnel (acteurs tailles liquidité) et typologie walk-up / conciergerie / tour / neuf,—,pratique courante ; aucune statistique publique de liquidité par taille,2026-10-31,non_verifie,déclaré comme pratique courante dans le texte et les limites | |
| 32 | +CLM-33-031,33,Effets de taille d'état et de région (régression cas 4) et taux des RMR hors Montréal/Québec,—,propriétés du jeu synthétique (calibration.json : cap_rate_autres_rmr NON_VERIFIE),2026-10-31,non_verifie,données synthétiques déclarées ; encadré synthetique | |
| 33 | +CLM-33-032,33,P45 : amortissement 480 mois de la dette (hypothèse de l'auteur) ; RCD 1,15,—,hypothèse déclarée,2026-10-31,non_verifie, | |
added
verification/chapters/ch33-figures.csv
+5 −0
@@ -0,0 +1,5 @@ | ||
| 1 | +fichier,chapitre,script,donnees,type_donnees,legende_courte,statut | |
| 2 | +ch33/ch33-fig-schl-typologie.pdf,33,analysis/python/figures/ch33_figures.py,data/raw/schl_rml_2025/rmr-montreal-2025-fr.xlsx (tableaux 1.2.1 1.2.2 1.3.1 1.3.2),reelle,Loyer moyen et inoccupation par taille d'immeuble et par année de construction île de Montréal oct. 2025 (SCHL),verifie | |
| 3 | +ch33/ch33-fig-rmr.pdf,33,analysis/python/figures/ch33_figures.py,data/synthetic/cas4_portefeuille.csv,synthetique,Valeur par logement et taux global par RMR du portefeuille du cas 4 [données synthétiques],verifie | |
| 4 | +ch33/ch33-fig-taux-taille.pdf,33,analysis/python/figures/ch33_figures.py,data/synthetic/cas3_montreal_comparables.csv;cas4_portefeuille.csv,synthetique,Taux global selon le nombre de logements : 40 ventes du cas 3 et 48 immeubles du cas 4 avec régressions [données synthétiques],verifie | |
| 5 | +ch33/ch33-fig-p45-sensibilite.pdf,33,analysis/python/figures/ch33_figures.py,data/synthetic/cas4_portefeuille.csv,synthetique,Grille RMR × état des taux et valeurs par logement prédits pour P45 (36 logements) [données synthétiques],verifie | |
added
verification/chapters/ch33-registry.csv
+2 −0
@@ -0,0 +1,2 @@ | ||
| 1 | +id,type,titre,organisme,version_ou_date,url,date_consultation,statut,utilise_dans,notes | |
| 2 | +# Aucune nouvelle source : le chapitre 33 ne cite que des clés déjà présentes dans references/library.bib (voir ch33.md) ; aucune vérification web supplémentaire n'a été nécessaire. | |
added
verification/chapters/ch33.md
+31 −0
@@ -0,0 +1,31 @@ | ||
| 1 | +# Chapitre 33 — Immeubles de six logements et plus — bilan de rédaction (2026-10-31) | |
| 2 | + | |
| 3 | +## Livrables | |
| 4 | +- `manuscript/chapters/ch33.tex` : ≈ 11 500 mots de prose (≈ 15 200 au compteur brut, tableaux et équations compris), 7 sections (33.1 seuils → 33.7 exemple intégral + sensibilité), **10 tableaux** (dont une `longtable` : liste de contrôle de diligence raisonnable), **4 figures**, **12 équations numérotées**, 3 définitions, 1 proposition démontrée (MRB = (1−v)(1−ρ)/R), 1 exemple intégral, encadrés `synthetique`, `quebec`, `erreurs`, `limites`, `synthese`, **7 exercices** (niveaux 1-1-2-2-2-3-3), « Pour aller plus loin ». 50 clés bibliographiques citées, toutes déjà dans `references/library.bib` (`references/lib-ch33.bib` = commentaire ; `ch33-registry.csv` sans nouvelle source ; aucune consultation web nécessaire). | |
| 5 | +- `analysis/python/cases/ch33_six_logements.py` : lecture des tableaux SCHL réels (classeur `rmr-montreal-2025-fr.xlsx`, tableaux 1.2.1-1.2.3 et 1.3.1-1.3.4, bloc île de Montréal), sommaire du cas 4 par RMR (`traite.cas4.sommaire`), effet de taille (cas 3 linéaire ; cas 4 semi-log avec facteur de Duan), unités d'analyse du cas 3 (valeur finale du ch. 47 = 2 060 000 $, vérifiée contre `ch47_dossier`), évaluation sommaire de **P45** (36 logements, Gatineau, 1954, état 2) avec 8 taux candidats et décomposition multiplicative taille/RMR, sensibilité (grille RMR × état, courbe de taille, ±pb), exercices. N'appelle que `traite.cas3/cas4/finance/hedonique`, sans les modifier. | |
| 6 | +- `analysis/python/figures/ch33_figures.py` → `assets/figures/ch33/ch33-fig-{schl-typologie,rmr,taux-taille,p45-sensibilite}.pdf` (style `traite.style`, 135 mm ; nuage à 3 séries ; une figure sur données réelles SCHL avec attribution). | |
| 7 | +- `analysis/python/tests/test_ch33.py` : 8 tests (lecture SCHL vs notes-E, identités du sommaire cas 4, cohérence avec `cas4.effets_regionaux`, unités, valeur finale ch. 47, P45 et décomposition exacte, sensibilité et élasticité −1, exercices) — **vert** (`8 passed`) ; `test_cas3.py` et `test_cas2_cas4.py` toujours verts. | |
| 8 | +- `solutions/ch33.tex` : 7 solutions détaillées. | |
| 9 | +- `verification/chapters/ch33-figures.csv` (4), `ch33-calculations.csv` (24), `ch33-claims.csv` (32), `ch33-registry.csv` (aucune ligne) — à fusionner par l'orchestrateur. | |
| 10 | + | |
| 11 | +## Contrôles | |
| 12 | +- `tools/compile_chapter.sh 33` → `OK ch33 : 43 pages, 0 references/citations non definies, 0 overfull hbox` (solutions incluses). Inspection visuelle : montages des 41 pages du chapitre + pages 23, 25 (tableaux cas 4 et P45), 36-39 (solutions) à 80 dpi. | |
| 13 | +- `python3 -m pytest -q analysis/python/tests/test_ch33.py` → `8 passed`. | |
| 14 | +- `tools/check_manuscript.py --no-log` : seuls « problèmes » = les 4 figures du ch. 33 absentes de `verification/figures.csv` global (lignes fournies dans `ch33-figures.csv`, fusion non faite conformément à la consigne), comme pour les ch. 28 et 32. | |
| 15 | + | |
| 16 | +## Chiffres pivots | |
| 17 | +SCHL île de Montréal oct. 2025 : 6-19 log. inocc. 2,2 % / loyer 1 162 $ (2 ch. 1 177) ; 100+ : 5,1 % / 1 665 $ (2 ch. 1 966) ; 2015+ : 5,6 % / 1 882 $. Cas 4 : 48 immeubles, 888 log., 143 363 000 $, taux pondéré 5,19 %, 161 445 $/log. ; Montréal 4,49 % / 206 237 $ … Saguenay 6,39 % / 101 969 $. Effet de taille : cas 3 −2,27 pb/log. ; cas 4 élasticité −0,0315 (doublement −2,16 %). Cas 3 : 171 667 $/log., 2 497 $/m², 93 636 $/chambre, MRB 12,44, taux implicite 4,37 %. P45 : RNE 366 800 $ ; taux régression 5,461 % → **6 716 534 $ (186 570 $/log.)** ; taux montréalais (4,415 %) → 8 308 041 $ (+23,7 %) ; décomposition : taille −16,1 pb, RMR +89,6 pb ; ±25 pb → −4,38 % / +4,80 % ; RCD 1,15 (dette 5 416 000 $ à 5,17 %, hyp. 480 mois). | |
| 18 | + | |
| 19 | +## Points non vérifiés / à harmoniser | |
| 20 | +1. Taux de taxation montréalais propre aux « 6 logements et plus » : non vérifié (CLM-33-006), comme au ch. 47. | |
| 21 | +2. Base légale exacte des sous-catégories résidentielles de taux variés (LFM) : art. 244.29 et s. cités de façon générale (CLM-33-003). | |
| 22 | +3. Code de sécurité : obligations d'inspection mentionnées sans dépouillement du texte (CLM-33-026). | |
| 23 | +4. Médiane 1,99 M$ des 6 logements et plus au rôle 2027-2029 de Gatineau : chiffre de presse, cité avec la clé `gatineaurole2027` (page Ville) (CLM-33-007). | |
| 24 | +5. Taux des RMR hors Montréal/Québec et effets région/taille/état : propriétés du jeu synthétique (CLM-33-031) ; description des marchés privé/institutionnel = pratique courante (CLM-33-030). | |
| 25 | +6. `ch33-claims.csv` : un `source_id` « SRC-C-0xx (osfib20) » à compléter par l'orchestrateur. | |
| 26 | +7. Note pour le ch. 48 : la dette de P45 dans `cas4_portefeuille.csv` donne un RCD de 0,95 sur 25 ans et de 1,15 sur 40 ans ; le chapitre déclare l'hypothèse de 40 ans — à harmoniser avec la convention de financement retenue au ch. 48. | |
| 27 | +8. Le cas 4 ne fournit pas de détail des baux/dépenses pour P45 : l'évaluation est sommaire (capitalisation du RNE du dossier), ce que le texte dit explicitement. | |
| 28 | + | |
| 29 | +## Suggestions | |
| 30 | +- Si le ch. 48 estime la même régression (`effets_regionaux`), reprendre les coefficients cités ici (Gatineau +19,6 %, Trois-Rivières +40,2 %, ln n −0,0315) et le facteur de Duan 1,0011 pour éviter toute divergence. | |
| 31 | +- Le ch. 32 (plex) pourrait renvoyer à la définition 33.1 et au tableau 33.1 des seuils ; le ch. 27 peut réutiliser `schl_ile_montreal()` pour l'inoccupation par taille. | |
modified
verification/claims.csv
+52 −0
@@ -743,3 +743,55 @@ CLM-32-024,32,"Aucune étude arbitrée récente n'isole l'effet du régime québ | ||
| 743 | 743 | CLM-32-025,32,"Références scientifiques citées : Isakson 1986, Vandell 1991, Fisher & Martin 2007, Shilling–Sirmans–Dombrow 1991, Kestens–Thériault–Des Rosiers 2006, Smith 1988, Diamond–McQuade–Qian 2019, Kholodilin 2024, Arnott 1995, Poterba 1984, Himmelberg–Mayer–Sinai 2005, Geltner et al. 2014, Appraisal Institute 2026, éd. canadienne 2010",SRC-D-001;SRC-D-003;SRC-D-009,references/library.bib (clés existantes,lot D),2026-10-31,verifie |
| 744 | 744 | CLM-32-026,32,Le jeu synthétique du cas 2 est normalisé à la médiane APCIQ Limoilou à la date de référence du rôle (2024-07-01) puis indexé ; les prix fictifs de 2026 excèdent la médiane T3 2026 publiée,—,analysis/python/traite/synth.py (cas2_quebec : ref_mois = 2024-07-01) ; data/synthetic/README.md,2026-10-31,verifie,"Déclaré dans limites ; point à signaler à l'harmonisation (ch. 26, 27, 46)" |
| 745 | 745 | CLM-25-019,25,"Valeur de terrain du sujet du cas 1 : 277 000 $ (447 $/m²), extraite au ch. 24 sur 13 ventes récentes de Hull et confirmée par la comparaison directe (267 388 $) et l'allocation (280 412 $) ; indication par le coût du ch. 24 inchangée (580 000 $)",CALC-25-016,ch24.md ; ch25_terrain.py (synthese) ; test_ch25.py,2026-10-31,verifie,Valeur du monde synthétique ; à reprendre telle quelle par les ch. 20 et 45 |
| 746 | +CLM-28-001,28,"Barème SCHL « Frais d'exploitation — immeubles locatifs au Québec » (avril 2015) : entretien 500 $/log. ; salaires 125 $ (5-6 log.), 170 $ (7-11), 300 $ (12+) ; gestion-administration 3 % (5-6), 3-4 % (7-11), 5 % (12+) du revenu brut ; réserve 100 $/log. (cuisinière-réfrigérateur) ; taxes, assurance, énergie au coût réel ; « à titre indicatif »",SRC-E-047,sources/notes-E.md §ch. 28 ; data/synthetic/calibration.json,2026-10-31,verifie,"Document daté (2015), hébergé par un tiers (PMML) ; aucune mise à jour publique trouvée" | |
| 747 | +CLM-28-002,28,"TAL, ancienne méthode : frais de gestion forfaitaires 5 % des revenus, frais réels admis jusqu'à 10 % ; formulaire RN 2026-2027 détaille taxes, assurances, énergie, entretien, services, gestion (si > 5 %), dépenses d'immobilisation 2025",SRC-E-049;SRC-A-009;SRC-A-010,sources/notes-A.md §6.2 ; notes-E §ch. 28,2026-10-31,verifie,"Règle de fixation de loyer, pas une norme d'évaluation" | |
| 748 | +CLM-28-003,28,"Règlement sur les critères de fixation de loyer (T-15.01, r. 2) modifié par D. 1455-2025, en vigueur le 1er janvier 2026 : six critères (art. 3) ; pourcentage de base = moyenne de trois variations annuelles de l'IPC Québec (art. 3.1) ; critères 2° à 6° selon la part attribuable au logement (art. 5) ; 5 % des dépenses d'immobilisation ; transition pour les avis donnés avant le 1er janvier 2026",SRC-A-003,sources/notes-A.md §6.2 (texte des art. 3,3.1,4,5 relu dans les notes) | |
| 749 | +CLM-28-004,28,"TAL pourcentages 2026 : taux de base 3,1 % (avis dès le 1er janvier 2026) ; ancienne méthode 2025/2026 : gaz −5,8 / +13,7 ; électricité 2,9 / 2,9 ; entretien 6,9 / 5,7 ; gestion 8,2 / 7,2 ; dépenses d'immobilisation amorties au taux CPG 5 ans + 1 % (ancienne méthode)",SRC-A-005;SRC-A-010,sources/notes-A.md §6.2 ; notes-E §ch. 28,2026-10-31,verifie, | |
| 750 | +CLM-28-005,28,C.c.Q. art. 1947 (demande de fixation dans le mois du refus) et 1953 (fixation selon les normes réglementaires),SRC-A-001,sources/notes-A.md §bail (art. 1947 et 1953 résumés),2026-10-31,verifie,Texte intégral non relu par le rédacteur du ch. 28 ; résumé de notes-A | |
| 751 | +CLM-28-006,28,"Taxe scolaire : LIP art. 303-303.6, taux unique, assiette = évaluation uniformisée ajustée excédant 25 000 $ ; 0,07899 $/100 $ pour 2026-2027 (communiqué CSS) ; 0,08423 $ pour 2025-2026",SRC-B-035;SRC-B-037;SRC-E-026,notes-B.md §9.9 ; ch09 (CLM-09-013),2026-10-31,partiellement_verifie,"Avis officiel 2026-2027 ((2026) 158 G.O. 1, 520) non consulté ; mécanisme d'ajustement non modélisé" | |
| 752 | +CLM-28-007,28,"Taxe foncière générale résidentielle Montréal 2026 = 0,4631 $/100 $ (Le Devoir, 2026-01-12) ; hausse moyenne 3,8 %, Rosemont 5,3 % ; taux « 6 logements et plus » et taxes d'arrondissement non vérifiés",SRC-B-024;SRC-B-023,notes-B.md §9.9 ; notes-E §ch. 28 ; ch09 (CLM-09-016),2026-10-31,partiellement_verifie,Source secondaire ; document officiel Constellio non lisible ; déclaré dans limites ; le cas 3 n'utilise que la taxe générale | |
| 753 | +CLM-28-008,28,"Ville de Québec 2026 (R.V.Q. 3492) : 0,7464 $/100 $ (1-5 log.), 0,7697 (6 log. et plus) ; tarifs 386 $/log. aqueduc-égout + 195 $/log. matières résiduelles",SRC-B-025;SRC-E-027,page officielle (notes-B §9.9 ; ch09 CLM-09-014),2026-10-31,verifie, | |
| 754 | +CLM-28-009,28,"Gatineau 2026 (règl. 994-2025) : taux de base 5,224 $/1 000 $ ; sous-catégorie six logements ou plus 6,964 $/1 000 $",SRC-E-028;SRC-09-001,règlement lu intégralement au ch. 9 (CLM-09-015),2026-10-31,verifie,Utilisé seulement comme scénario de transposition dans la sensibilité | |
| 755 | +CLM-28-010,28,"Prime moyenne d'assurance habitation au Québec : 1 103 $ en 2024, +9 % sur un an, +63 % en dix ans (BAC via Infoassurance) ; porte sur les ménages, aucune statistique pour les immeubles locatifs",SRC-E-039,notes-E §ch. 28,2026-10-31,partiellement_verifie,Industrie ; la page attribue le même chiffre à 2023 et 2024 (incohérence signalée dans notes-E) | |
| 756 | +CLM-28-011,28,"Hydro-Québec tarif D au 2026-04-01 : 46,154 ¢/jour ; 7,065 ¢/kWh jusqu'à 40 kWh/jour ; 11,142 ¢/kWh au-delà",SRC-E-037,notes-E §ch. 28 ; document tarifaire,2026-10-31,verifie, | |
| 757 | +CLM-28-012,28,"Régie de l'énergie D-2026-033 : hausse clientèle domestique 3,0 % (2026), 3,0 % (2027), 2,6 % (2028)",SRC-E-038,notes-E §ch. 28 ; communiqué du 2026-03-16,2026-10-31,verifie, | |
| 758 | +CLM-28-013,28,"IPC Québec (18-10-0004-01, ensemble, 2002 = 100) : +3,1 % sur un an en septembre 2026 ; niveaux 124,7 (avril 2015) et 167,7 (septembre 2026), soit +34,5 %",SRC-E-015;SRC-C-049,data/raw/statcan_18100004/18100004.csv (vecteur v41691783,relu le 2026-10-31) ; notes-E,2026-10-31,verifie | |
| 759 | +CLM-28-014,28,"SCHL Rapport sur le marché locatif (données d'octobre 2025) : inoccupation RMR Québec 2,4 %",SRC-E-007,notes-E §ch. 4/46,2026-10-31,verifie, | |
| 760 | +CLM-28-015,28,Aucune statistique officielle du ratio de dépenses d'exploitation typique ni de la réserve de remplacement par logement au Québec ; fourchettes 35-50 % des blogues de courtage non retenues,SRC-E-047,notes-E §ch. 28 et « Non trouvé » (points 5-6) ; calibration.json (NON_VERIFIE),2026-10-31,verifie,Déclaré dans limites ; conventions du dossier déclarées comme telles | |
| 761 | +CLM-28-016,28,Valeur au rôle : la vente ne modifie pas en elle-même l'inscription ; taxes normalisées sur le rôle en vigueur × taux de l'exercice (renvoi ch. 9 et 29),SRC-B-001,ch29 (CLM-29-010,CLM-29-011) ; notes-B §9,2026-10-31,partiellement_verifie | |
| 762 | +CLM-28-017,28,"Appraisal Institute (2026) et Fisher & Martin (2007) : état des résultats reconstitué, classement fixes/variables/réserve, réserve de remplacement ; Brueggeman & Fisher (2022) : RNE vs flux de trésorerie ; Geltner et al. (2014) : cohérence revenu/CAPEX/taux",SRC-D-001;SRC-D-009;SRC-D-005;SRC-D-004,sources/notes-D.md §ch. 28 ; ouvrages de référence (registry-D),2026-10-31,partiellement_verifie,Attribution générale de notions standard ; pages précises non citées | |
| 763 | +CLM-28-018,28,"Bokhari & Geltner (2018, Real Estate Economics 46(4)) : ampleur des dépenses en capital récurrentes du multirésidentiel et rôle dans la dépréciation nette",lib-D:bokhariGeltner2018,DOI 10.1111/1540-6229.12156 vérifié par Crossref (notes-D) ; résumé de notes-D §ch. 28,2026-10-31,partiellement_verifie,Article non relu intégralement par le rédacteur ; aucun chiffre repris | |
| 764 | +CLM-28-019,28,"Harding, Rosenthal & Sirmans (2007, JUE 61(2)) : dépréciation du capital résidentiel par ventes répétées ; entretien de l'ordre de 1 %/an de la valeur (propriétaires-occupants américains)",lib-D:hardingRosenthalSirmans2007,DOI 10.1016/j.jue.2006.07.007 vérifié par Crossref (notes-D) ; ordre de grandeur de notes-D §ch. 28,2026-10-31,partiellement_verifie,Ordre de grandeur cité avec « de l'ordre de » ; article non relu intégralement | |
| 765 | +CLM-28-020,28,Dossier cas 3 : les locataires paient électricité et chauffage (chauffage_inclus = 0 dans les 12 baux) ; aucune tarification distincte de l'eau,données synthétiques,data/synthetic/cas3_montreal_etat_locatif.csv ; cas3_montreal_depenses.csv,2026-10-31,verifie,"Hypothèse du jeu synthétique, pas une affirmation sur Montréal" | |
| 766 | +CLM-33-001,33,APH Select / assurance SCHL immeubles collectifs : minimum 5 logements ; 50 points → RPV 85 % existant / 40 ans / RCD 1,10 ; jusqu'à 95 % et 50 ans à 100 points,SRC-C-040,page SCHL publiée 2026-09-21 (notes-C §4.4),2026-10-31,verifie | |
| 767 | +CLM-33-002,33,Formulaire DV de l'OACIQ obligatoire pour l'immeuble principalement résidentiel de moins de 5 logements,SRC-A-026,notes-A §2.4,2026-10-31,verifie, | |
| 768 | +CLM-33-003,33,LFM art. 244.29 et s. : taux variés par catégories ; art. 45.1 : vendeur réputé détenir les droits du locataire (rôle libre de baux),SRC-B-001,notes-B §9.6 et §9.2,2026-10-31,verifie,la base légale précise des sous-catégories résidentielles (6 logements et plus) n'a pas été relue : partiellement_verifie pour ce point | |
| 769 | +CLM-33-004,33,Ville de Québec 2026 : 0,7464 $/100 $ (1 à 5 logements) ; 0,7697 $ (6 logements et plus) ; 386 $/logement aqueduc-égout ; 195 $/logement matières résiduelles (R.V.Q. 3492),SRC-B-025;SRC-E-027,page Ville de Québec (notes-B §9.9 ; notes-E ch. 28),2026-10-31 | |
| 770 | +CLM-33-005,33,Rôle 2026-2028 de Montréal : 6 logements et plus +10,9 % ; 5 logements ou moins +9,6 % ; agglomération +12,2 %,SRC-E-051;SRC-E-052,communiqué Ville + presse (notes-E ch. 47) | |
| 771 | +CLM-33-006,33,Taux de taxation montréalais distinct pour les « 6 logements et plus » en 2026,—,document officiel « Taux de taxes 2026 » non lisible par script (notes-E),2026-10-31,non_verifie,déclaré comme limite dans le chapitre (comme au ch. 47) | |
| 772 | +CLM-33-007,33,Rôle 2027-2029 de Gatineau (déposé 2026-10-27) : 6 logements et plus médiane 1,99 M$ (+27,6 %) ; unifamiliale médiane +9,06 %,SRC-E-054;SRC-E-055;SRC-E-057,presse (TVA Gatineau Le Droit) + page Ville (notes-E ch. 45) | |
| 773 | +CLM-33-008,33,SCHL ELL : couverture = immeubles d'initiative privée de 3 logements et plus ; tranches 3-5 / 6-19 / 20-49 / 50-99 / 100+,SRC-E-007,classeur rmr-montreal-2025-fr.xlsx lu (tableaux 1.3.x),2026-10-31,verifie, | |
| 774 | +CLM-33-009,33,"SCHL île de Montréal oct. 2025 par taille : inocc. 2,3 / 2,2 / 3,9 / 3,8 / 5,1 % ; loyer tous 1 288 / 1 162 / 1 122 / 1 226 / 1 665 $ ; 2 ch. 1 350 / 1 177 / 1 298 / 1 443 / 1 966 $ ; rotation 6-19 8,5 ; 20-49 9,6 ; 50-99 12,4 ; 100+ 12,4 ; tous 3,1 % / 1 283 $ / 9,3 %",SRC-E-007,lecture directe du classeur (script + test),2026-10-31,verifie,données réelles ; attribution SCHL dans tableau et figure | |
| 775 | +CLM-33-010,33,"SCHL île de Montréal oct. 2025 par année de construction : loyer tous avant 1940 1 238 ; 1940-59 1 050 ; 1960-74 1 186 ; 1975-89 1 262 ; 1990-2004 1 224 ; 2005-14 1 373 ; 2015+ 1 882 $ ; inocc. 2,2 / 2,6 / 3,3 / 2,8 / n.d. / n.d. / 5,6 % ; rotation 9,3 / 7,1 / 9,9 / 8,0 / n.d. / n.d. / 13,7 %",SRC-E-007,lecture directe du classeur (tableaux 1.2.1-1.2.3),2026-10-31,verifie, | |
| 776 | +CLM-33-011,33,SCHL oct. 2025 : Gatineau 6-19 unités inocc. 3,6 % ; Sherbrooke 6-19 unités 1,8 % ; Gatineau loyer 2 ch. 1 460 $,SRC-E-007,notes-E ch. 27 + classeurs,2026-10-31 | |
| 777 | +CLM-33-012,33,"CBRE T3 2026 : Montréal HR A 4,50-4,75 ; HR B 4,25-4,75 ; LR A 4,50-4,75 ; LR B 4,25-4,75 ; neuf 4,50-4,75 ; Québec 4,25-6,00 (LR B 5,00-6,00) ; national HR A 4,60 ; LR B 4,99 ; écart 256 pb vs 10 ans ; rien pour Gatineau Sherbrooke Trois-Rivières Saguenay",SRC-E-045,rapport CBRE publié 2026-10-21 (notes-E ch. 29),2026-10-31,verifie,valeurs ponctuelles en prose ; aucun tableau reproduit | |
| 778 | +CLM-33-013,33,Altus : 2,9 G$ d'investissement multirésidentiel à Montréal au S1 2026 (+30 %),SRC-E-046,notes-E ch. 29,2026-10-31,verifie | |
| 779 | +CLM-33-014,33,APCIQ T3 2026 : plex (2-5 log.) province 699 000 $ ; RMR Montréal 860 500 $ ; JLR sept. 2026 : 2 à 5 logements 622 000 $ sur 12 mois (+9 %),SRC-E-001;SRC-E-066,communiqué APCIQ ; rapport JLR (notes-E ch. 4 ; notes-C §4.9),2026-10-31,verifie,attribution APCIQ/Centris et « Source : JLR.ca » | |
| 780 | +CLM-33-015,33,"Recensement 2021 Québec : 1 242 910 ménages en appartement < 5 étages (33,2 %) ; 225 750 ≥ 5 étages (6,0 %) ; 271 240 duplex (7,2 %)",SRC-E-022,tableaux 98-10-0041-01 / 98-10-0240-01 (notes-C §4.7),2026-10-31,verifie,notes-E donne 1 242 980 (98-10-0240-01) : écart de 70 entre tableaux | |
| 781 | +CLM-33-016,33,BdC fonds avancés août 2026 : assuré fixe ≥ 5 ans 4,12 % ; non assuré 4,58 %,SRC-E-012,Valet A4_RATES_MORTGAGES (notes-C §4.1),2026-10-31 | |
| 782 | +CLM-33-017,33,BSIF B-20 : évaluations réalistes et documentées pour les prêts hypothécaires (principe 4),SRC-C-0xx (osfib20),notes-C §4.2,2026-10-31,verifie,id registre à compléter par l'orchestrateur | |
| 783 | +CLM-33-018,33,Loi sur le TAL art. 45 : ensemble immobilier = plusieurs immeubles à proximité comprenant ensemble plus de 12 logements en administration commune,SRC-A-002,notes-A §5,2026-10-31,verifie, | |
| 784 | +CLM-33-019,33,C.c.Q. art. 1955 : exclusion de la fixation 5 ans pour l'immeuble neuf ; opposable seulement si le bail indique le loyer maximal (depuis 2024-02-21),SRC-A-001,notes-A §5,2026-10-31,verifie, | |
| 785 | +CLM-33-020,33,C.c.Q. art. 1895-1896 (formulaire obligatoire ; loyer le plus bas des 12 mois) ; 1958 (indivision : pas de reprise sauf conjoint) ; 1978.2 (refus de cession Loi 31) ; 2695 (hypothèque des loyers),SRC-A-001,notes-A §4 et §5,2026-10-31,verifie, | |
| 786 | +CLM-33-021,33,Loi 65 (2024 c. 23) art. 1 : aucune éviction (art. 1959) avant le 6 juin 2027 ; art. 1959.1 protection aînés 65 ans/10 ans/125 %,SRC-A-001;SRC-A-014,notes-A §5,2026-10-31,verifie,aucun avis de fin anticipée au 2026-10-31 | |
| 787 | +CLM-33-022,33,NPP OEAQ : règle 1.2 (étendue du travail réserves) ; 2.3 (contenu minimal ; rejet d'une méthode motivé) ; 2.4 (inspection obligatoire) ; Code de déontologie art. 41 (méthodologie et étendue des recherches),SRC-C-001;SRC-C-003,notes-C §2.1-2.2,2026-10-31,verifie, | |
| 788 | +CLM-33-023,33,CUSPAP 2026 : étendue du travail ; hypothèse extraordinaire = « could materially alter the opinions or conclusions »,SRC-C-018,notes-C §2.5,2026-10-31,verifie,paraphrasé | |
| 789 | +CLM-33-024,33,IVS 2025 : approches par le revenu (IVS 103 sect. 60) ; choix des méthodes justifié,SRC-C-014,notes-C §3.2,2026-10-31,verifie, | |
| 790 | +CLM-33-025,33,RPRT (Q-2 r. 37) art. 1 : valeurs limites annexe I (résidentiel) / annexe II (industriel commercial institutionnel) ; LQE cadre,SRC-B-043;SRC-B-042,notes-B §ch. 43,2026-10-31,verifie, | |
| 791 | +CLM-33-026,33,Loi sur le bâtiment et Code de sécurité : obligations d'entretien et d'inspection périodique de certaines composantes pour les propriétaires de certains bâtiments,SRC-B-052;SRC-B-054,titres vérifiés ; texte du Code de sécurité non dépouillé (notes-B),2026-10-31,partiellement_verifie,formulé de façon générale ; signalé dans limites | |
| 792 | +CLM-33-027,33,SCHL Frais d'exploitation Québec (avril 2015) : salaires 125 $/log. (5-6 log.) et 300 $/log. (12+),SRC-E-047,document hébergé par un tiers,2026-10-31,partiellement_verifie,barème daté | |
| 793 | +CLM-33-028,33,BAC : prime moyenne d'assurance habitation Québec 1 103 $ (2024 ; +63 % en 10 ans) ; aucune statistique pour les immeubles locatifs,SRC-E-039,Infoassurance (notes-E ch. 28),2026-10-31,partiellement_verifie,même chiffre attribué à 2023 et 2024 sur la page | |
| 794 | +CLM-33-029,33,IPCB Montréal T3 2026 : immeuble < 5 étages +9,2 % ; tour ≥ 5 étages +7,9 % (18-10-0289-01),SRC-E-017,notes-E ch. 23,2026-10-31 | |
| 795 | +CLM-33-030,33,Description qualitative des marchés privé et institutionnel (acteurs tailles liquidité) et typologie walk-up / conciergerie / tour / neuf,—,pratique courante ; aucune statistique publique de liquidité par taille,2026-10-31,non_verifie,déclaré comme pratique courante dans le texte et les limites | |
| 796 | +CLM-33-031,33,Effets de taille d'état et de région (régression cas 4) et taux des RMR hors Montréal/Québec,—,propriétés du jeu synthétique (calibration.json : cap_rate_autres_rmr NON_VERIFIE),2026-10-31,non_verifie,données synthétiques déclarées ; encadré synthetique | |
| 797 | +CLM-33-032,33,P45 : amortissement 480 mois de la dette (hypothèse de l'auteur) ; RCD 1,15,—,hypothèse déclarée,2026-10-31,non_verifie | |
modified
verification/figures.csv
+9 −0
@@ -158,3 +158,12 @@ ch32/ch32-fig-mrb-taille-quartier.pdf,32,analysis/python/figures/ch32_figures.py | ||
| 158 | 158 | ch32/ch32-fig-prix-logement-quartier.pdf,32,analysis/python/figures/ch32_figures.py,data/synthetic/cas2_quebec_ventes_plex.csv ; analysis/python/cases/ch32_plex.py (comparables retenus),synthetique,"Prix par logement par quartier (boîtes + points), cinq comparables retenus (losanges) et valeur pondérée du sujet par logement (tireté) [données synthétiques]",verifie |
| 159 | 159 | ch32/ch32-fig-taux-loyer-relatif.pdf,32,analysis/python/figures/ch32_figures.py,data/synthetic/cas2_quebec_ventes_plex.csv ; régression analysis/python/cases/ch32_plex.py::regression_taux_loyer_relatif,synthetique,"Nuage taux global extrait vs loyer relatif ρ (duplex/triplex), droite R = a + b(ρ−1), médiane des 127 ventes et taux ajusté du sujet (étoile) [données synthétiques]",verifie |
| 160 | 160 | ch32/ch32-fig-sensibilite-occupant.pdf,32,analysis/python/figures/ch32_figures.py,analysis/python/cases/ch32_plex.py (sensibilite,financement_occupant,cout_occupation ; traite.cas2 ; traite.finance),synthetique |
| 161 | +ch28/ch28-fig-cascade.pdf,28,analysis/python/figures/ch28_figures.py,data/synthetic/cas3_montreal_etat_locatif.csv;cas3_montreal_depenses.csv;cas3_montreal_hypotheses_dcf.json,synthetique,"Cascade du RBP au RNE normalisé du cas 3 (inoccupation, autres revenus, fixes, variables, gestion, réserve) [données synthétiques]",verifie | |
| 162 | +ch28/ch28-fig-structure.pdf,28,analysis/python/figures/ch28_figures.py,data/synthetic/cas3_montreal_depenses.csv;cas2_quebec_depenses.csv,synthetique,"Structure des dépenses normalisées en % du RBE par groupe de postes, cas 3 vs cas 2 (barres groupées) [données synthétiques]",verifie | |
| 163 | +ch28/ch28-fig-evolution.pdf,28,analysis/python/figures/ch28_figures.py,data/synthetic/cas3_montreal_depenses.csv,synthetique,Évolution 2023-2025 des groupes de dépenses du cas 3 (indice 2023 = 100) et montant déclaré 2025 vs normalisé [données synthétiques],verifie | |
| 164 | +ch28/ch28-fig-ratio-loyer.pdf,28,analysis/python/figures/ch28_figures.py,data/synthetic/cas3_montreal_comparables.csv;traite.cas3.rne,synthetique,"Ratio de dépenses vs loyer moyen des 40 comparables du cas 3 et courbe iso-dépenses du sujet (contractuel 46,6 %, marché 42,1 %) [données synthétiques]",verifie | |
| 165 | +ch28/ch28-fig-sensibilite.pdf,28,analysis/python/figures/ch28_figures.py,ch28_depenses.sensibilites (traite.cas3),synthetique,"RNE normalisé du cas 3 selon la réserve par logement, le taux de taxe municipale et le taux de gestion (3 panneaux) [données synthétiques]",verifie | |
| 166 | +ch33/ch33-fig-schl-typologie.pdf,33,analysis/python/figures/ch33_figures.py,data/raw/schl_rml_2025/rmr-montreal-2025-fr.xlsx (tableaux 1.2.1 1.2.2 1.3.1 1.3.2),reelle,Loyer moyen et inoccupation par taille d'immeuble et par année de construction île de Montréal oct. 2025 (SCHL),verifie | |
| 167 | +ch33/ch33-fig-rmr.pdf,33,analysis/python/figures/ch33_figures.py,data/synthetic/cas4_portefeuille.csv,synthetique,Valeur par logement et taux global par RMR du portefeuille du cas 4 [données synthétiques],verifie | |
| 168 | +ch33/ch33-fig-taux-taille.pdf,33,analysis/python/figures/ch33_figures.py,data/synthetic/cas3_montreal_comparables.csv;cas4_portefeuille.csv,synthetique,Taux global selon le nombre de logements : 40 ventes du cas 3 et 48 immeubles du cas 4 avec régressions [données synthétiques],verifie | |
| 169 | +ch33/ch33-fig-p45-sensibilite.pdf,33,analysis/python/figures/ch33_figures.py,data/synthetic/cas4_portefeuille.csv,synthetique,Grille RMR × état des taux et valeurs par logement prédits pour P45 (36 logements) [données synthétiques],verifie | |
modified
verification/review_log.md
+1 −0
@@ -7,3 +7,4 @@ | ||
| 7 | 7 | | 2026-10-31 | 3 | Prototype : ch. 16, 21, 29, 30, 47 rédigés et testés ; PDF pilote 338 p. ; modules cas1-4 | Claude + 4 agents | |
| 8 | 8 | - 2026-10-31 (ch. 3) : SRC-E-019 « RMR Montréal 2025 : 21 138 mises en chantier » ne couvre que 9 mois (34-10-0143 : juillet–septembre 2025 absents) → ne pas citer comme total annuel ; V39079 Valet commence en 2009 (SOURCES.md dit 2000). |
| 9 | 9 | - 2026-10-31 (ch. 15) : harmonisation à faire — ch. 4 « Sherbrooke 4,4 mois » vs 4,3 (ch. 3/15) ; rotation 15 % du cas 3 vs SCHL 8,5-9,4 % (déclaré). |
| 10 | +- 2026-10-31 (ch. 32) : à trancher en harmonisation — taxes du dossier cas 2 (5 900 $) vs rôle × taux 2026 (5 438 $) ; prix cas 2 indexés ≈ +15 % vs médiane T3 2026 (normalisation au 2024-07-01). | |
| 10 | 11 | |