SPB Git

Ch. 18 livré et validé (compilation isolée, tests, fusion des registres)

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Simon-Pierre Boucher committed (Oct 31, 2026) parent 8e522ed Browse files

17 changed files +755 −18

modified analysis/python/cases/ch14_nettoyage.py +19 −2
@@ -448,15 +448,32 @@ def illustration_masquage(b: pd.DataFrame, seuil: float = SEUIL_MAD) -> dict:
448 448
449 449 # ----------------------------------------------------------------------------- 6. imputation comparée et sensibilité
450 450
451 +def _modele_indicateurs(df: pd.DataFrame) -> dict:
452 + """Modèle de référence augmenté des indicatrices de valeur manquante (méthode de l'indicateur) ; prédiction du sujet avec indicatrices nulles."""
453 + X = cas1.matrice(df); extra = [c for c in df.columns if c.startswith("manq_")]
454 + for c in extra: X[c] = df[c].values
455 + y = np.log(df["prix_vente"].astype(float)); r = h.mco(X.values, y.values)
456 + coef = pd.DataFrame({"coef": r["beta"], "se_hc1": r["se_hc1"]}, index=X.columns)
457 + s = cas1.charger()["sujet"]; Xs = cas1.matrice(cas1.sujet_df(s));
458 + for c in extra: Xs[c] = 0.0
459 + pred = float(np.exp(Xs[X.columns].values @ r["beta"])[0] * np.mean(np.exp(r["residus"])))
460 + return {"coef": coef, "sigma": float(np.sqrt(r["sigma2"])), "n": r["n"], "r2": r["r2"], "prediction": pred}
461 +
451 462 def comparer_imputations(P: dict) -> pd.DataFrame:
463 + """Quatre traitements des 45 valeurs manquantes, à pipeline égal par ailleurs (S1 puis E1) : suppression par liste, médiane conditionnelle
464 + (secteur × type), régression auxiliaire, médiane + indicatrices de manquant dans le modèle."""
452 465 base = geocodage_repli(P["regles"]["df"], [])
453 466 rows = []
454 467 for meth in ["suppression", "mediane", "regression", "indicateur"]:
455 468 d = imputer(base, None, meth)
456 469 S = scores_robustes(d, None); E = exclusions_regression(S["garde"], None)
457 − m = _modele(E["df"]); c = m["coef"]
470 + if meth == "indicateur":
471 + m = _modele_indicateurs(E["df"]); c = m["coef"]; pred = m["prediction"]
472 + ind = {k: c.loc[k, "coef"] for k in c.index if k.startswith("manq_")}
473 + else:
474 + m = _modele(E["df"]); c = m["coef"]; pred = float(cas1.predire(m, cas1.sujet_df(cas1.charger()["sujet"]))[0]); ind = {}
458 475 rows.append({"methode": meth, "n": m["n"], "sigma": m["sigma"], "ln_T": c.loc["ln_T", "coef"], "se_ln_T": c.loc["ln_T", "se_hc1"], "qualite": c.loc["qualite", "coef"],
459 − "age": c.loc["age", "coef"], "prediction_sujet": float(cas1.predire(m, cas1.sujet_df(cas1.charger()["sujet"]))[0])})
476 + "age": c.loc["age", "coef"], "prediction_sujet": pred, **{f"coef_{k}": v for k, v in ind.items()}})
460 477 return pd.DataFrame(rows).set_index("methode")
461 478
462 479 def sensibilite_seuils(b: pd.DataFrame, verite: pd.DataFrame) -> pd.DataFrame:
modified analysis/python/cases/ch15_segmentation.py +15 −8
@@ -91,7 +91,11 @@ def chow(v: pd.DataFrame, groupes: pd.Series, nom: str = "groupe") -> dict:
91 91 Version « classique » : modèle contraint entièrement commun (constante incluse), q = (G − 1) k0.
92 92 Version robuste : Wald HC1 sur les interactions (régresseurs × indicatrices) du modèle empilé (χ² à q degrés de liberté)."""
93 93 Xb = matrice_base(v); y = np.log(v["prix_vente"].astype(float)).values
94 − g = pd.Series(groupes, index=v.index).astype(str); niveaux = sorted(g.unique()); G = len(niveaux); n, k0 = Xb.shape
94 + g = pd.Series(groupes, index=v.index).astype(str); niveaux = sorted(g.unique()); G = len(niveaux)
95 + # un régresseur constant à l'intérieur d'un segment (ex. « à étages » quand on segmente par type) n'est pas identifiable
96 + # dans l'équation de ce segment : il est retiré du jeu de pentes testées (sa contribution passe dans la constante du segment)
97 + constants = [c for c in Xb.columns if c != "const" and any(Xb.loc[(g == l).values, c].std(ddof=0) < 1e-12 for l in niveaux)]
98 + Xb = Xb.drop(columns=constants); n, k0 = Xb.shape
95 99 ref = niveaux[0]
96 100 D = pd.get_dummies(g, prefix="g").astype(float); D = D[[f"g_{l}" for l in niveaux[1:]]]
97 101 # contraint (constantes par segment) et classique (tout commun)
@@ -120,7 +124,7 @@ def chow(v: pd.DataFrame, groupes: pd.Series, nom: str = "groupe") -> dict:
120 124 return {"nom": nom, "niveaux": niveaux, "G": G, "n": n, "k0": k0, "ssr_contraint": ssr_c, "ssr_classique": ssr_classique, "ssr_libre": ssr_l,
121 125 "q": q, "df2": df2, "F": float(F), "p": p, "F_classique": float(F0), "q_classique": q0, "p_classique": p0,
122 126 "wald_hc1": W, "p_wald": pW, "q_wald": len(idx), "par_segment": par_segment,
123 − "sigma_contraint": math.sqrt(ssr_c / (n - k0 - G + 1)), "sigma_libre": math.sqrt(ssr_l / df2)}
127 + "sigma_contraint": math.sqrt(ssr_c / (n - k0 - G + 1)), "sigma_libre": math.sqrt(ssr_l / df2), "regresseurs_retires": constants}
124 128
125 129 def tableau_coefficients(ch: dict, variables=("ln_S", "ln_T", "age", "qualite", "garage", "mois")) -> pd.DataFrame:
126 130 rows = []
@@ -186,7 +190,7 @@ def validation_croisee(v: pd.DataFrame, segments: dict, n_plis: int = 10) -> pd.
186 190 def ajuster_predire(Xtr, ytr, Xte):
187 191 b = h.mco(Xtr, ytr)["beta"]; return Xte @ b
188 192 resultats = []
189 − specs = {"Référence : pentes communes + indicatrices de secteur": ("dummies", v["secteur"].astype(str))}
193 + specs = {"Équation unique sans segment": ("aucun", v["secteur"].astype(str))}
190 194 for nom, lab in segments.items():
191 195 specs[f"Pentes communes + indicatrices ({nom})"] = ("dummies", pd.Series(lab, index=v.index).astype(str))
192 196 specs[f"Une équation par segment ({nom})"] = ("separe", pd.Series(lab, index=v.index).astype(str))
@@ -194,7 +198,9 @@ def validation_croisee(v: pd.DataFrame, segments: dict, n_plis: int = 10) -> pd.
194 198 err = np.zeros(len(y))
195 199 D = pd.get_dummies(lab).astype(float).values
196 200 for tr, te in kf.split(Xb):
197 − if mode == "dummies":
201 + if mode == "aucun":
202 + err[te] = y[te] - ajuster_predire(Xb.values[tr], y[tr], Xb.values[te])
203 + elif mode == "dummies":
198 204 Xd = np.column_stack([Xb.values, D[:, 1:]])
199 205 err[te] = y[te] - ajuster_predire(Xd[tr], y[tr], Xd[te])
200 206 else:
@@ -239,7 +245,7 @@ def etude_locative_cas3() -> dict:
239 245 g["type_schl"] = [corr[p] for p in g.index]
240 246 g["loyer_schl_zone9_2025"] = [SCHL_ZONE9["loyer_2025"][t] for t in g["type_schl"]]
241 247 g["ratio_marche_schl"] = g["marche"] / g["loyer_schl_zone9_2025"]
242 − g["ecart_contrat_marche_pct"] = 100 * (g["marche"] / g["contrat"] - 1)
248 + g["ecart_contrat_marche_pct"] = 100 * (1 - g["contrat"] / g["marche"]) # écart en % du loyer de marché (convention du ch. 47)
243 249 u = SCHL_ZONE9["univers_2025"]
244 250 parts = {k: u[k] / u["tous"] for k in ["studio", "1 ch.", "2 ch.", "3 ch. +"]}
245 251 ecart_1ch = SCHL_ZONE9["loyer_inoccupe_vs_occupe_2025"]["1 ch."]
@@ -247,7 +253,7 @@ def etude_locative_cas3() -> dict:
247 253 rot = {"hypothese_cas3": hyp["rotation_annuelle"], "schl_rmr_2025": SCHL_RMR["rotation_2025"] / 100, "schl_ile_6_19_2025": SCHL_ILE_6_19["rotation_2025"] / 100}
248 254 rattrapage = {k: r * rev["ecart_marche"] for k, r in rot.items()} # part de l'écart récupérable la première année
249 255 horizon = {k: 1.0 / r for k, r in rot.items()} # années pour renouveler tous les baux au rythme r
250 − return {"par_type": g, "revenus": rev, "ecart_global_pct": 100 * (rev["rbp_marche"] / rev["rbp_contrat"] - 1), "parts_univers": parts,
256 + return {"par_type": g, "revenus": rev, "ecart_global_pct": 100 * (1 - rev["rbp_contrat"] / rev["rbp_marche"]), "parts_univers": parts,
251 257 "ecart_inoccupe_occupe_1ch_zone9_pct": 100 * (ecart_1ch[0] / ecart_1ch[1] - 1), "ecart_inoccupe_occupe_rmr_pct": 100 * ecart_rmr,
252 258 "rotation": rot, "rattrapage_an1": rattrapage, "horizon_renouvellement": horizon,
253 259 "neuf_prime_pct": 100 * (SCHL_ZONE9["neuf_2022_2025"]["loyer_tous"] / SCHL_ZONE9["loyer_2025"]["tous"] - 1),
@@ -282,7 +288,8 @@ def tout() -> dict:
282 288 "ari_secteur_k5": float(adjusted_rand_score(v["secteur"], cj["labels_kmeans"][5]))}
283 289 ch_kmeans = chow(v, pd.Series(lab_km + 1, index=v.index), f"k-moyennes (k = {k})")
284 290 ch_ward = chow(v, pd.Series(lab_w, index=v.index), f"Ward (k = {k})")
285 − cv = validation_croisee(v, {"k-moyennes": lab_km + 1, "Ward": lab_w})
291 + lab_km5 = cl["labels_kmeans"][5]
292 + cv = validation_croisee(v, {"secteur": v["secteur"].values, f"k-moyennes, k = {k}": lab_km + 1, "k-moyennes, k = 5": lab_km5 + 1})
286 293 loc = etude_locative_cas3()
287 294 return {"ventes": v, "sujet": d["sujet"], "indicateurs": ind, "parts_gatineau": parts, "reference": ref,
288 295 "chow": {"secteur": ch_secteur, "secteur4": ch_secteur4, "type": ch_type, "periode": ch_periode, "kmeans": ch_kmeans, "ward": ch_ward},
@@ -300,7 +307,7 @@ def main():
300 307 print(f"\n--- Chow [{ch['nom']}] : G = {ch['G']}, k0 = {ch['k0']}, n = {ch['n']}")
301 308 print(f" SSR contraint (constantes par segment) = {ch['ssr_contraint']:.4f} ; SSR classique = {ch['ssr_classique']:.4f} ; SSR libre = {ch['ssr_libre']:.4f}")
302 309 print(f" F pentes = {ch['F']:.3f} (q = {ch['q']}, df2 = {ch['df2']}), p = {ch['p']:.4f} ; F classique = {ch['F_classique']:.3f} (q = {ch['q_classique']}), p = {ch['p_classique']:.4g}")
303 − print(f" Wald HC1 = {ch['wald_hc1']:.2f} (q = {ch['q_wald']}), p = {ch['p_wald']:.4f} ; σ contraint {ch['sigma_contraint']:.4f} vs libre {ch['sigma_libre']:.4f}")
310 + print(f" Wald HC1 = {ch['wald_hc1']:.2f} (q = {ch['q_wald']}), p = {ch['p_wald']:.4f} ; σ contraint {ch['sigma_contraint']:.4f} vs libre {ch['sigma_libre']:.4f} ; retirés : {ch['regresseurs_retires']}")
304 311 if key in ("secteur", "kmeans"):
305 312 print(tableau_coefficients(ch).round(4).to_string(index=False))
306 313 print("\n--- Classification (attributs + coordonnées) :\n", r["classification"]["tableau"].round(3).to_string(index=False))
modified analysis/python/figures/ch17_figures.py +4 −3
@@ -69,12 +69,13 @@ def fig_bruts_ajustes(r):
69 69 ax.scatter(a["prix_ajuste"], y, s=42, color=palette.cat[0], zorder=4, label="prix ajusté (grille hédonique)")
70 70 w = rec["poids_inverse_brut"]
71 71 for yi, (_, row), wi in zip(y, a.iterrows(), w):
72 − ax.text(max(row["prix_vente"], row["prix_ajuste"]) + 4000, yi, f"brut {row['ajust_brut_pct']*100:.0f} % · poids {wi:.2f}".replace(".", ","), va="center", fontsize=7.2, color=palette.ink2)
72 + ax.text(max(row["prix_vente"], row["prix_ajuste"]) + 4000, yi, f"brut {row['ajust_brut_pct']*100:.0f} % · poids {wi:.2f}".replace(".", ","), va="center", fontsize=7.2, color=palette.ink2, bbox=dict(boxstyle="round,pad=0.1", facecolor=palette.surface, edgecolor="none"), zorder=6)
73 73 vp = rec["inverse_brut"]["valeur_ponderee"]; pred = b["prediction_hedonique"]
74 74 ax.axvline(vp, color=palette.brand, lw=1.3, ls="-")
75 − ax.text(vp, len(a) - 0.45, "valeur pondérée\n" + fmt_dollars(vp), ha="center", va="bottom", fontsize=7.3, color=palette.brand)
75 + bb = dict(boxstyle="round,pad=0.15", facecolor=palette.surface, edgecolor="none")
76 + ax.text(vp, len(a) - 0.45, "valeur pondérée\n" + fmt_dollars(vp), ha="center", va="bottom", fontsize=7.3, color=palette.brand, bbox=bb, zorder=6)
76 77 ax.axvline(pred, color=palette.cat[1], lw=1.3, ls="--")
77 − ax.text(pred, len(a) - 0.45, "prédiction hédonique\n" + fmt_dollars(pred), ha="center", va="bottom", fontsize=7.3, color=palette.cat[1])
78 + ax.text(pred, len(a) - 0.45, "prédiction hédonique\n" + fmt_dollars(pred), ha="center", va="bottom", fontsize=7.3, color=palette.cat[1], bbox=bb, zorder=6)
78 79 ax.set_yticks(y); ax.set_yticklabels(a["id_vente"]); ax.set_ylim(-0.7, len(a) + 0.6)
79 80 ax.set_xlim(490000, 720000); ax.xaxis.set_major_formatter(FuncFormatter(fmt_dollars))
80 81 ax.legend(loc="upper center", bbox_to_anchor=(0.5, -0.14), ncol=2, fontsize=7.3)
added analysis/python/tests/test_ch22.py +261 −0
@@ -0,0 +1,261 @@
1 +"""Tests du chapitre 22 — métré et quantités du sujet du cas 1.
2 +Tolérances : 0,01 $ sur les montants recalculés depuis le devis ; 0,05 m² / m³ / m sur les quantités géométriques citées
3 +(arrondies à deux décimales dans le texte) ; 5e-4 sur les proportions ; identités à 1e-9.
4 +Les montants du chapitre 21 (D, I, C_N) doivent être strictement inchangés."""
5 +import sys, pathlib, math
6 +import numpy as np, pytest
7 +sys.path.insert(0, str(pathlib.Path(__file__).resolve().parents[1] / "cases"))
8 +import ch21_cout_neuf as c21
9 +import ch22_metre as cas
10 +from traite import cout as ct
11 +
12 +Q = 0.05
13 +
14 +
15 +@pytest.fixture(scope="module")
16 +def data():
17 + devis, sujet = c21.charger()
18 + return {"devis": devis, "sujet": sujet, "e": cas.empreinte(), "S": cas.superficies(), "q": cas.quantites_geometriques(),
19 + "V": cas.verification(devis), "eff": None, "cn": c21.cout_neuf_sujet(devis)}
20 +
21 +
22 +class TestCoherenceCh21:
23 + def test_montants_inchanges(self, data):
24 + cn = data["cn"]
25 + assert cn["direct"] == pytest.approx(298826.17, abs=0.01)
26 + assert cn["indirects"] == pytest.approx(62598.68, abs=0.01)
27 + assert cn["total"] == pytest.approx(397567.33, abs=0.01)
28 + assert len(data["devis"]) == 38
29 +
30 + def test_corps_identiques(self, data):
31 + g = c21.regrouper(data["devis"])
32 + assert list(g.index) == c21.ORDRE_CORPS and int(g["postes"].sum()) == 38
33 +
34 + def test_bordereau_quantites_fois_prix(self, data):
35 + d = data["devis"]
36 + assert np.allclose(d["quantite"] * d["prix_unitaire"], d["montant"], atol=0.011)
37 + detail = ct.cout_par_composantes(dict(zip(d["poste"], d["quantite"])), dict(zip(d["poste"], d["prix_unitaire"])))
38 + assert detail["total"] == pytest.approx(361424.85, abs=0.2)
39 +
40 +
41 +class TestGeometrie:
42 + def test_empreinte_et_perimetre(self, data):
43 + e = data["e"]
44 + assert e["aire_au_sol"] == pytest.approx(95.04, abs=1e-9)
45 + assert e["perimetre"] == pytest.approx(39.84, abs=1e-9)
46 + assert e["garage"] == pytest.approx(24.55, abs=0.005) and e["aire_sous_sol"] == pytest.approx(70.49, abs=0.005)
47 + # invariance du périmètre d'une forme en L découpée dans un rectangle
48 + L, W, gx, gy = cas.PLAN["L"], cas.PLAN["W"], cas.PLAN["gx"], cas.PLAN["gy"]
49 + perim_L = (L - gx) + gy + gx + (W - gy) + L + W # parcours de la forme en L
50 + assert perim_L == pytest.approx(2 * (L + W), abs=1e-9)
51 +
52 + def test_superficies_conventions(self, data):
53 + S = data["S"]
54 + assert S["aire_etages_mefq"] == pytest.approx(190.08, abs=1e-9)
55 + assert S["perimetre_etages_mefq"] == pytest.approx(79.68, abs=1e-9)
56 + assert S["habitable"] == pytest.approx(165.53, abs=0.005)
57 + assert round(S["habitable"]) == data["sujet"]["superficie_habitable_m2"]
58 + assert S["nette_hors_sol"] == pytest.approx(135.73, abs=Q)
59 + assert S["nette_rez"] == pytest.approx(58.93, abs=Q) and S["nette_etage"] == pytest.approx(76.81, abs=Q)
60 + assert S["sous_sol_net"] == pytest.approx(62.96, abs=Q) and S["sous_sol_fini_net"] == pytest.approx(53.83, abs=Q)
61 + assert S["aire_etages_mefq"] * c21.PI2_PAR_M2 == pytest.approx(2046, abs=0.6)
62 + assert S["habitable"] * c21.PI2_PAR_M2 == pytest.approx(1782, abs=0.6)
63 +
64 + def test_pieces_couvrent_les_niveaux(self, data):
65 + pcs = data["S"]["pieces"]
66 + assert pcs.loc[pcs["niveau"] == "rez", "brute"].sum() == pytest.approx(95.04, abs=1e-6)
67 + assert pcs.loc[pcs["niveau"] == "etage", "brute"].sum() == pytest.approx(95.04, abs=1e-6)
68 + assert pcs.loc[pcs["niveau"] == "soussol", "brute"].sum() == pytest.approx(70.49, abs=0.01)
69 + assert (pcs["nette"] > 0).all()
70 +
71 + def test_cloisons(self):
72 + assert cas.cloisons("rez") == pytest.approx(21.62, abs=Q)
73 + assert cas.cloisons("etage") == pytest.approx(47.94, abs=Q)
74 + assert cas.cloisons("soussol") == pytest.approx(17.12, abs=Q)
75 + assert cas.separation_garage() == pytest.approx(10.16, abs=1e-9)
76 +
77 + def test_formules_elementaires(self):
78 + # aire décalée d'un rectangle = formule exacte
79 + assert cas.aire_decalee(12 * 7.92, 2 * (12 + 7.92), 0.9) == pytest.approx((12 + 1.8) * (7.92 + 1.8), abs=1e-9)
80 + # prismoïde d'un parallélépipède = A·h ; d'une pyramide tronquée : cohérent avec la formule exacte
81 + assert cas.volume_prismoidal(10, 10, 10, 3) == pytest.approx(30)
82 + a, b, h = 4.0, 6.0, 3.0 # tronc de pyramide à bases carrées
83 + exact = h / 3 * (a * a + b * b + a * b)
84 + assert cas.volume_prismoidal(a * a, ((a + b) / 2) ** 2, b * b, h) == pytest.approx(exact, rel=1e-12)
85 + assert math.sqrt(1 + 0.5 ** 2) == pytest.approx(1.1180, abs=5e-5)
86 +
87 +
88 +class TestQuantites:
89 + def test_mesures_citees(self, data):
90 + q = data["q"]
91 + attendu = {"Excavation et remblai": 409.81, "Fondations béton (semelles, murs)": 36.74, "Dalle de sous-sol": 95.04,
92 + "Drain français et imperméabilisation": 42.24, "Charpente murs et planchers": 325.05, "Fermes de toit": 111.62,
93 + "Couverture bardeaux d'asphalte": 124.79, "Revêtement extérieur (brique 40 % / fibrociment 60 %)": 238.79,
94 + "Isolation et pare-vapeur": 419.18, "Gypse et tirage de joints": 740.32, "Peinture intérieure": 740.32,
95 + "Planchers bois franc": 103.56, "Planchers céramique": 32.17, "Planchers flottants (sous-sol)": 70.49,
96 + "Gouttières et solins": 48.80, "Balcon et perron": 14.10, "Entrée asphaltée": 55.00}
97 + for k, v in attendu.items():
98 + assert q[k]["q"] == pytest.approx(v, abs=Q), k
99 +
100 + def test_details_cites(self, data):
101 + q = data["q"]
102 + d = q["Charpente murs et planchers"]["detail"]
103 + assert d["planchers"] == pytest.approx(165.53, abs=Q) and d["murs_brut"] == pytest.approx(194.42, abs=Q)
104 + assert d["ouvertures"] == pytest.approx(34.90, abs=Q) and d["murs_net"] == pytest.approx(159.52, abs=Q)
105 + f = q["Fondations béton (semelles, murs)"]["detail"]
106 + assert f["L_axe"] == pytest.approx(38.84, abs=1e-9) and f["V_murs"] == pytest.approx(23.69, abs=Q) and f["V_semelles"] == pytest.approx(6.99, abs=Q)
107 + x = q["Excavation et remblai"]["detail"]
108 + assert x["A_bas"] == pytest.approx(109.58, abs=Q) and x["A_mi"] == pytest.approx(141.85, abs=Q) and x["A_haut"] == pytest.approx(177.50, abs=Q)
109 + assert x["V_sous_sol"] == pytest.approx(370.27, abs=Q) and x["V_garage"] == pytest.approx(15.24, abs=Q) and x["V_racc"] == pytest.approx(24.30, abs=Q)
110 + g = q["Gypse et tirage de joints"]["detail"]
111 + assert g["plafonds"] == pytest.approx(214.11, abs=Q) and g["murs"] == pytest.approx(585.60, abs=Q)
112 + assert g["sep_garage"] == pytest.approx(24.79, abs=Q) and g["ouvertures"] == pytest.approx(84.19, abs=Q)
113 + r = q["Revêtement extérieur (brique 40 % / fibrociment 60 %)"]["detail"]
114 + assert r["murs"] == pytest.approx(223.10, abs=Q) and r["pignons"] == pytest.approx(15.68, abs=Q)
115 + i = q["Isolation et pare-vapeur"]["detail"]
116 + assert i["fondation"] == pytest.approx(91.37, abs=Q) and i["rive"] == pytest.approx(23.90, abs=Q) and i["sep_murs"] == pytest.approx(24.79, abs=Q)
117 +
118 + def test_denombrements(self, data):
119 + q = data["q"]
120 + assert q["Fenêtres (PVC double vitrage)"]["q"] == 16 and q["Fenêtres (PVC double vitrage)"]["detail"] == {"rez": 6, "etage": 8, "soussol": 2}
121 + assert q["Portes intérieures et moulures"]["q"] == 14 and q["Plomberie brute et finition"]["q"] == 14 == len(cas.APPAREILS)
122 + assert q["Portes extérieures"]["q"] == 3 and q["Porte de garage"]["q"] == 1 and q["Escaliers"]["q"] == 2
123 + assert q["Supervision de chantier (salaires)"]["q"] == 26
124 +
125 +
126 +class TestVerification:
127 + def test_verdicts(self, data):
128 + V = data["V"]
129 + nb = V["verdict"].value_counts().to_dict()
130 + assert nb == {"conforme": 20, "ratio": 14, "à justifier": 2, "à préciser": 2}
131 + assert set(V.loc[V["verdict"] == "à justifier", "poste"]) == {"Gypse et tirage de joints", "Peinture intérieure"}
132 + assert set(V.loc[V["verdict"] == "à préciser", "poste"]) == {"Planchers bois franc", "Planchers céramique"}
133 + assert len(V) == 38 and int((V["classe"] == "mesuré").sum()) == 17 and int((V["classe"] == "dénombré").sum()) == 7
134 +
135 + def test_ecarts_cites(self, data):
136 + V = data["V"].set_index("poste")
137 + assert V.loc["Gypse et tirage de joints", "ecart"] == pytest.approx(0.194, abs=5e-4)
138 + assert V.loc["Planchers bois franc", "ecart"] == pytest.approx(0.090, abs=5e-4)
139 + assert V.loc["Planchers céramique", "ecart"] == pytest.approx(-0.081, abs=5e-4)
140 + assert V.loc["Excavation et remblai", "ecart"] == pytest.approx(-0.024, abs=5e-4)
141 + assert V.loc["Fondations béton (semelles, murs)", "ecart"] == pytest.approx(-0.033, abs=5e-4)
142 + assert V.loc["Charpente murs et planchers", "ecart"] == pytest.approx(-0.015, abs=5e-4)
143 + assert V.loc["Gypse et tirage de joints", "delta_montant"] == pytest.approx(3305.12, abs=0.01)
144 + assert V.loc["Peinture intérieure", "delta_montant"] == pytest.approx(1217.61, abs=0.01)
145 + # planchers finis hors sol : total conforme même si la répartition diffère
146 + tot_calc = V.loc["Planchers bois franc", "q_calc"] + V.loc["Planchers céramique", "q_calc"]
147 + tot_devis = V.loc["Planchers bois franc", "q_devis"] + V.loc["Planchers céramique", "q_devis"]
148 + assert tot_calc == pytest.approx(135.73, abs=Q) and tot_devis == 130 and abs(tot_calc / tot_devis - 1) < 0.05
149 +
150 + def test_effet_metre_controle(self, data):
151 + eff = cas.effet_metre_controle(data["devis"], data["V"])
152 + assert eff["delta_D"] == pytest.approx(3767.56, abs=0.01)
153 + assert eff["D2"] == pytest.approx(302593.73, abs=0.01)
154 + assert eff["CN2"] == pytest.approx(401711.66, abs=0.01)
155 + assert eff["delta_CN"] == pytest.approx(4144.32, abs=0.01)
156 + assert eff["part_D"] == pytest.approx(0.0126, abs=5e-5) and eff["part_CN"] == pytest.approx(0.0104, abs=5e-5)
157 + assert eff["mult"] == pytest.approx(1.3304, abs=5e-5)
158 + # identité : ΔC_N = ΔD × (1 + τE) lorsque les indirects sont fixés en dollars
159 + assert eff["delta_CN"] == pytest.approx(eff["delta_D"] * 1.10, rel=1e-9)
160 +
161 +
162 +class TestSensibilitePropagation:
163 + def test_sensibilite(self, data):
164 + s = cas.sensibilite_quantites(data["devis"]).set_index("corps")
165 + assert s.loc["Enveloppe", "dCN_+0.10"] == pytest.approx(7739, abs=1) and s.loc["Enveloppe", "pct_+0.10"] == pytest.approx(0.0195, abs=5e-5)
166 + assert s.loc["Tous les postes directs", "dCN_+0.10"] == pytest.approx(32871, abs=1) and s.loc["Tous les postes directs", "pct_+0.10"] == pytest.approx(0.0827, abs=5e-5)
167 + assert s.loc["Aménagements extérieurs", "dCN_-0.10"] == pytest.approx(-1827, abs=1)
168 + # linéarité : ΔC_N = e × montant × (1 + τE)
169 + assert s.loc["Enveloppe", "dCN_+0.10"] == pytest.approx(0.10 * s.loc["Enveloppe", "montant"] * 1.10, rel=1e-9)
170 + assert s["part_D"].iloc[:-1].sum() == pytest.approx(1.0, abs=1e-9)
171 +
172 + def test_propagation(self, data):
173 + p = cas.propagation(data["devis"])
174 + assert p["herfindahl"] == pytest.approx(0.0539, abs=5e-5) and p["equiv_uniforme"] == pytest.approx(18.6, abs=0.05)
175 + assert p["sigma_D_rel"] == pytest.approx(0.0116, abs=5e-5) and p["sigma_D"] == pytest.approx(3467.78, abs=0.01)
176 + assert p["poste_max"] == "Charpente murs et planchers" and p["max_part"] == pytest.approx(0.132, abs=5e-4)
177 + # bornes : 1/n ≤ H ≤ 1 et σ indépendants ≤ σ corrélés
178 + assert 1 / p["n"] <= p["herfindahl"] <= 1 and p["sigma_D_rel"] <= p["sigma_si_parfaitement_correle"]
179 +
180 + def test_pertes(self, data):
181 + per = cas.pertes(data["devis"]).set_index("poste")
182 + assert per.loc["Gypse et tirage de joints", "q_commander"] == pytest.approx(694.4, abs=Q)
183 + assert per.loc["Couverture bardeaux d'asphalte", "q_commander"] == pytest.approx(137.5, abs=Q)
184 + assert per["cout_pertes_si_prix_pose"].sum() == pytest.approx(11283.78, abs=0.01)
185 +
186 + def test_repartition_types(self, data):
187 + rep = cas.repartition_par_type(data["devis"])
188 + tot = rep.sum()
189 + assert tot["mesuré"] == pytest.approx(174351.56, abs=0.01) and tot["dénombré"] == pytest.approx(89850.00, abs=0.01) and tot["forfait"] == pytest.approx(97223.29, abs=0.01)
190 + assert tot.sum() == pytest.approx(361424.85, abs=0.01)
191 + assert rep.loc["Enveloppe", "mesuré"] == pytest.approx(47580.84, abs=0.01) and rep.loc["Coûts indirects", "dénombré"] == pytest.approx(35708.66, abs=0.01)
192 +
193 +
194 +class TestExercices:
195 + """Chiffres des solutions (solutions/ch22.tex)."""
196 +
197 + def test_ex1_conventions(self):
198 + L, W, gx, gy = 10.40, 9.15, 3.66, 6.10
199 + aire_sol = L * W; etages = 2 * aire_sol; hab = etages - gx * gy
200 + assert aire_sol == pytest.approx(95.16, abs=0.005) and etages == pytest.approx(190.32, abs=0.005)
201 + assert gx * gy == pytest.approx(22.33, abs=0.005) and hab == pytest.approx(167.99, abs=0.005)
202 + assert 2 * (L + W) == pytest.approx(39.10, abs=1e-9)
203 + net = 2 * (L - 0.6) * (W - 0.6) - (gx - 0.3 - 0.075) * (gy - 0.3 - 0.075)
204 + assert net == pytest.approx(144.81, abs=0.01)
205 + assert etages * 10.7639 == pytest.approx(2048.6, abs=0.1) and hab * 10.7639 == pytest.approx(1808.2, abs=0.1)
206 +
207 + def test_ex2_murs_nets(self):
208 + P = 2 * (10.40 + 9.15); brut = P * 2.44 * 2
209 + ouv = 12 * 1.68 + 2 * 1.85 + 2.74 * 2.13
210 + assert brut == pytest.approx(190.81, abs=0.01) and ouv == pytest.approx(29.70, abs=0.01)
211 + assert brut - ouv == pytest.approx(161.11, abs=0.01) and ouv / brut == pytest.approx(0.156, abs=5e-4)
212 +
213 + def test_ex3_toiture(self):
214 + A = (10.40 + 0.8) * (9.15 + 0.8); f = math.sqrt(1 + (8 / 12) ** 2)
215 + assert A == pytest.approx(111.44, abs=0.01) and f == pytest.approx(1.2019, abs=5e-5)
216 + assert A * f == pytest.approx(133.94, abs=0.01) and A * f * 1.10 == pytest.approx(147.33, abs=0.01)
217 + f6 = math.sqrt(1.25)
218 + assert A * f / (A * f6) - 1 == pytest.approx(0.0750, abs=5e-5)
219 +
220 + def test_ex4_excavation(self):
221 + A, P, h, d = 95.16, 39.10, 2.50, 0.90
222 + rect = cas.aire_decalee(A, P, d) * h
223 + Ab = cas.aire_decalee(A, P, d); Am = cas.aire_decalee(A, P, d + 0.5 * h / 2); At = cas.aire_decalee(A, P, d + 0.5 * h)
224 + V = cas.volume_prismoidal(Ab, Am, At, h)
225 + Am1 = cas.aire_decalee(A, P, d + 1.0 * h / 2); At1 = cas.aire_decalee(A, P, d + 1.0 * h)
226 + V1 = cas.volume_prismoidal(Ab, Am1, At1, h)
227 + assert Ab == pytest.approx(133.59, abs=0.01) and rect == pytest.approx(333.98, abs=0.01)
228 + assert V == pytest.approx(400.88, abs=0.01) and V1 == pytest.approx(474.12, abs=0.01)
229 + assert V / rect - 1 == pytest.approx(0.200, abs=5e-4) and V1 / rect - 1 == pytest.approx(0.420, abs=5e-4)
230 +
231 + def test_ex5_prix_unitaire(self):
232 + m, w, hpu, s, e = 11.50, 0.12, 0.35, 62.0, 0.80
233 + p = m * (1 + w) + hpu * s + e
234 + assert m * (1 + w) == pytest.approx(12.88, abs=0.005) and hpu * s == pytest.approx(21.70, abs=0.005) and p == pytest.approx(35.38, abs=0.005)
235 + assert hpu * s / p == pytest.approx(0.613, abs=5e-4)
236 + assert p * 1.15 == pytest.approx(40.69, abs=0.005)
237 + assert (m * (1 + w) + hpu * s * 1.05 + e) / p - 1 == pytest.approx(0.0307, abs=5e-5)
238 + assert (m * (1 + w) + hpu * 0.9 * s + e) / p - 1 == pytest.approx(-0.0613, abs=5e-5)
239 +
240 + def test_ex6_propagation(self, data):
241 + p = cas.propagation(data["devis"], 0.05); p10 = cas.propagation(data["devis"], 0.10)
242 + assert p10["sigma_D_rel"] == pytest.approx(2 * p["sigma_D_rel"], rel=1e-12)
243 + # 33 postes de parts égales
244 + assert 0.05 * math.sqrt(1 / 33) == pytest.approx(0.0087, abs=5e-5)
245 + # 2 postes concentrés : parts 0,5 / 0,5 → H = 0,5
246 + assert 0.05 * math.sqrt(0.5) == pytest.approx(0.0354, abs=5e-5)
247 + assert p["sigma_D"] * 1.3304 == pytest.approx(4613, abs=2)
248 +
249 + def test_ex7_plain_pied(self):
250 + L, W = 14.00, 9.00; P = 2 * (L + W); A = L * W
251 + assert A == 126 and P == 46
252 + murs = P * 2.44 - (11 * 1.68 + 2 * 1.85); assert murs == pytest.approx(90.06, abs=0.01)
253 + plafond = (L - 0.6) * (W - 0.6); assert plafond == pytest.approx(112.56, abs=0.01)
254 + cloisons = 38.0 * 2.44 * 2; assert cloisons == pytest.approx(185.44, abs=0.01)
255 + gypse = plafond + murs + cloisons - 2 * 9 * 1.85
256 + assert gypse == pytest.approx(354.76, abs=0.01)
257 + ecart = gypse / 300 - 1; assert ecart == pytest.approx(0.1825, abs=5e-4)
258 + delta = (gypse - 300) * 27.47 + (gypse - 300) * 10.12
259 + assert delta == pytest.approx(2058.3, abs=0.5)
260 + toit = (L + 0.8) * (W + 0.8) * math.sqrt(1.25); assert toit == pytest.approx(162.19, abs=0.01)
261 + assert toit / 150 - 1 == pytest.approx(0.0813, abs=5e-4)
modified assets/figures/ch17/ch17-fig-bruts-ajustes.pdf +0 −0

Binary file not shown.

modified assets/figures/ch17/ch17-fig-cascade-g0404.pdf +0 −0

Binary file not shown.

modified assets/figures/ch17/ch17-fig-paires.pdf +0 −0

Binary file not shown.

modified assets/figures/ch17/ch17-fig-sensibilite.pdf +0 −0

Binary file not shown.

added assets/figures/ch22/ch22-fig-ecarts-metre.pdf +0 −0

Binary file not shown.

added assets/figures/ch22/ch22-fig-repartition-corps.pdf +0 −0

Binary file not shown.

modified manuscript/chapters/ch11.tex +399 −0
@@ -156,3 +156,402 @@ L'année de construction est le premier filtre de l'inspection : elle dit quels
156 156 \caption{Frise indicative des matériaux et pratiques à risque selon la période de mise en place dans le parc résidentiel québécois. Les bornes sont des repères de connaissances générales du métier, arrondis à la décennie ; seules les dates marquées (v) ont été vérifiées sur une source publique. La frise sert de liste de vérification indexée sur l'âge, non de mesure de prévalence.}\label{fig:11:frise}
157 157 \figsource{analysis/python/figures/ch11\_frise\_pathologies.py ; repères indicatifs de l'auteur ; dates vérifiées : RNCan (MIUF, vermiculite), Canada.ca (amiante), Québec.ca (pyrrhotite), RBQ (Code de construction), consultées le 31 octobre 2026.}
158 158 \end{figure}
159 +
160 +\section{Les systèmes : électricité, plomberie, chauffage et ventilation}\label{sec:11:systemes}
161 +
162 +\subsection{Électricité}
163 +
164 +L'inspection de l'installation électrique commence au panneau : type de protection (fusibles ou disjoncteurs), intensité de l'entrée, présence de circuits ajoutés sans protection adéquate, traces de surchauffe, double raccordement d'un même disjoncteur. L'évaluateur ne touche pas aux conducteurs sous tension et ne retire pas le couvercle du panneau ; il observe, photographie et note. Trois situations, associées à des périodes de construction précises, retiennent l'attention parce qu'elles influent directement sur l'assurabilité et sur la négociation du prix : le filage à boutons et tubes des maisons les plus anciennes, le filage de cuivre à deux fils sans mise à la terre des années d'après-guerre, et le filage d'aluminium des circuits de dérivation installé pendant une courte période au tournant des années 1970, dont les connexions avec des dispositifs non prévus à cet effet sont une source documentée d'échauffement. Lorsque l'un de ces systèmes est présent, les assureurs exigent souvent une mise aux normes ou une attestation de maître électricien, et le marché l'anticipe ; l'évaluateur relève le fait et renvoie à un électricien pour le chiffrage, au besoin sous forme d'hypothèse extraordinaire. Le reste de l'inspection électrique porte sur ce qu'un occupant voit : prises et interrupteurs, présence de prises à disjoncteur différentiel près des points d'eau, éclairage, détecteurs de fumée et de monoxyde de carbone.
165 +
166 +\subsection{Plomberie}
167 +
168 +Le réseau d'alimentation s'identifie par ses matériaux : l'acier galvanisé des maisons anciennes, qui se corrode de l'intérieur, réduit la pression et finit par fuir ; le cuivre, durable mais sujet aux fuites aux joints ; le polyéthylène réticulé (PEX) des constructions et rénovations récentes ; et la tuyauterie de polybutylène, grise, installée pendant une période limitée des années 1980 et 1990 et retirée du marché après des défaillances répétées, que plusieurs assureurs traitent avec réserve. L'entrée d'eau en plomb des petites maisons les plus anciennes est un cas particulier : elle relève de la santé publique et les municipalités mènent des programmes de remplacement. L'évaluateur note le matériau de l'entrée d'eau et des conduites visibles, la pression à un robinet, l'état des raccords, les traces de fuite sous les éviers et autour des appareils. Le réseau d'évacuation se lit à ses matériaux (fonte, ABS, PVC) et à ses pentes ; un clapet antiretour au branchement d'égout est, dans les secteurs exposés aux refoulements, une donnée que l'évaluateur relève parce que les assureurs la demandent et parce que les programmes d'adaptation la subventionnent (\cref{ch:43}). Le chauffe-eau porte une plaque signalétique qui donne sa date de fabrication, et son âge est l'une des rares données d'inspection qui ne se discute pas.
169 +
170 +\subsection{Chauffage, mazout et ventilation}
171 +
172 +Le système de chauffage se décrit par son énergie, son générateur et sa distribution : plinthes électriques, fournaise à air pulsé, chaudière à eau chaude, thermopompe centrale ou murale, appareil à combustible solide. Les appareils ont un âge, lisible sur la plaque, et un état d'entretien, visible au filtre, au brûleur, à la propreté des conduits. Le chauffage au mazout appelle une attention particulière à cause du réservoir. Un réservoir intérieur se vérifie à la rouille, aux suintements au fond et aux raccords, à sa date de fabrication ; un réservoir extérieur, à son support et à sa protection ; un réservoir souterrain, dont l'existence passée ou présente se devine aux conduits de remplissage et d'évent qui sortent du sol ou du mur, est un risque de contamination du sol que l'évaluateur signale et renvoie à une expertise environnementale (\cref{ch:43}). La réglementation de la Régie du bâtiment sur les équipements pétroliers vise d'abord les installations à risque élevé ; les équipements de moins de \qty{10000}{\litre} d'une maison unifamiliale n'y sont pas considérés comme tels, et les appareils de chauffage au mazout relèvent de la norme d'installation adoptée par renvoi\footnote{Régie du bâtiment du Québec, « Équipements pétroliers visés » et « Lois et règlements » (chapitre VIII, Installation d'équipements pétroliers, du Code de construction), \url{https://www.rbq.gouv.qc.ca/domaines-dintervention/equipements-petroliers/}, consultées le 31 octobre 2026 (SRC-11-014).}. Le contexte économique compte autant que la réglementation : l'aide québécoise à la conversion des équipements au mazout a pris fin le 31 mars 2026 et le programme fédéral de conversion abordable du mazout à la thermopompe avait une date limite de dépôt au 31 juillet 2026 pour le Québec, de sorte qu'une maison encore chauffée au mazout en 2026 porte un coût de conversion que l'acheteur assume désormais seul (\cref{ch:44}). La ventilation, enfin, est examinée pour sa présence et son état : ventilateur récupérateur de chaleur, ventilateurs de salles de bain et de cuisine évacuant à l'extérieur, et non dans le comble, échangeur d'air dont le noyau et les filtres sont propres. Une maison récente et étanche sans ventilation mécanique fonctionnelle est une maison où l'humidité s'accumule, et les signes en sont visibles aux fenêtres et dans le comble.
173 +
174 +\section{Humidité, air intérieur et contaminants}\label{sec:11:pathologies}
175 +
176 +\subsection{Humidité et moisissures}
177 +
178 +L'humidité est le dénominateur commun de la plupart des pathologies, et la moisissure en est le signe le plus visible. Santé Canada recommande de maintenir le taux d'humidité relative entre 30~\% et 50~\% et considère qu'aucune quantité de moisissure n'est dépourvue de risques ; l'organisme classe les surfaces contaminées en trois catégories, petite lorsqu'il n'y a pas plus de trois plaques couvrant chacune moins d'un mètre carré, moyenne au-delà et jusqu'à trois mètres carrés, grande au-delà, et il recommande de faire appel à un professionnel lorsque la zone touchée est importante ou lorsque les moisissures réapparaissent après des nettoyages répétés\footnote{Santé Canada, « Moisissure », page datée du 13 février 2023, \url{https://www.canada.ca/fr/sante-canada/services/qualite-air/contaminants-air-interieur/reduisez-humidite-et-moisissures.html}, consultée le 31 octobre 2026 (SRC-11-004).}. Pour l'évaluateur, la question n'est pas celle de l'espèce, que Santé Canada juge généralement inutile d'identifier, mais celle de la cause et de l'étendue : une tache au plafond d'une salle de bain sans ventilation est un problème d'usage, curable ; une moisissure généralisée au bas des murs du sous-sol traduit une infiltration ou une remontée d'humidité par la dalle, et elle appelle l'ouverture des finitions. L'hygromètre et l'humidimètre à pointes sont les deux instruments que l'évaluateur peut raisonnablement porter dans sa mallette ; au-delà, la recherche de moisissures cachées relève du spécialiste, et la norme de l'AIBQ elle-même exclut du mandat de l'inspecteur l'opinion sur la présence de substances dangereuses (art.~11.4).
179 +
180 +\subsection{Amiante, vermiculite et mousse isolante d'urée-formaldéhyde}
181 +
182 +Avant 1990, l'amiante était surtout utilisé pour isoler les bâtiments et les habitations contre le froid et le bruit ; sa fabrication, son importation, sa vente et son utilisation sont aujourd'hui interdites au Canada par un règlement de 2018, mais des matériaux de construction plus anciens peuvent en contenir : bardage, ciment et plâtre, carreaux de plancher et de plafond, papier goudronné, bardeaux et feutre de toiture, mastics, scellants et composés à joints, isolation des canalisations d'eau chaude et des chauffe-eau\footnote{Santé Canada, « L'amiante et votre santé », page datée du 10 février 2023, \url{https://www.canada.ca/fr/sante-canada/services/qualite-air/contaminants-air-interieur/risques-pour-sante-associes-amiante.html}, consultée le 31 octobre 2026 (SRC-11-006).}. Santé Canada indique que les matériaux laissés intacts, isolés dans un comble ou scellés derrière les murs et les planchers ne présentent pas de risque important, qu'il faut éviter de les déranger et faire dépister l'amiante par un professionnel avant des travaux. La conséquence pour l'évaluation est précise : la présence probable d'amiante dans une maison ancienne n'est pas en soi une dépréciation, tant que les matériaux sont en bon état et qu'aucun projet de rénovation n'est en cause ; elle le devient lorsque l'acheteur type prévoit des travaux, parce que le désamiantage s'ajoute alors au coût des travaux, ou lorsque le matériau est friable et dégradé.
183 +
184 +L'\motcle{isolant de vermiculite} est le cas le plus fréquent dans le parc résidentiel. Selon Ressources naturelles Canada, un minerai de vermiculite produit par la mine de Libby, au Montana, entre les années 1920 et 1990 a pu contenir de l'amiante amphibolique et a été vendu au Canada sous la marque Zonolite, possiblement sous d'autres ; la vermiculite produite avant 1990 ne contient pas forcément de l'amiante, mais il est raisonnable, en l'absence de preuve du contraire, de supposer qu'un vieux produit de vermiculite pourrait en contenir\footnote{Ressources naturelles Canada, \emph{Emprisonnons la chaleur}, section 1.4, et « Rénovations écoénergétiques », page modifiée le 16 janvier 2025, \url{https://ressources-naturelles.canada.ca/efficacite-energetique/efficacite-energetique-maison/renovations-ecoenergetiques}, consultées le 31 octobre 2026 (SRC-11-005).}. L'évaluateur qui ouvre la trappe du comble et voit des granules brillantes, grises ou brunes, le note, ne les dérange pas et formule la réserve appropriée ; une analyse en laboratoire tranche. La \motcle{mousse isolante d'urée-formaldéhyde} (MIUF), injectée dans les murs de nombreuses maisons dans les années 1970, est interdite au Canada depuis décembre 1980 en vertu de la Loi sur les produits dangereux parce qu'elle peut libérer du formaldéhyde dans l'air intérieur\footnotemark[\value{footnote}] ; elle se reconnaît aux trous de remplissage bouchés dans les murs extérieurs ou les cavités, et à sa texture friable, et les formulaires de déclaration du vendeur demandent expressément si le vendeur en connaît la présence. Sa présence a longtemps été pénalisée par les prêteurs et le marché ; aujourd'hui, le marché réagit surtout à son retrait éventuel lors de rénovations.
185 +
186 +\subsection{Radon}
187 +
188 +Le radon est un gaz radioactif d'origine naturelle qui s'infiltre dans les bâtiments par les fondations et peut s'y accumuler ; il est la deuxième cause de cancer du poumon après le tabagisme\footnote{Gouvernement du Québec, « Radon domiciliaire », dernière mise à jour le 20 août 2026, \url{https://www.quebec.ca/habitation-territoire/milieu-de-vie-sain/radon-domiciliaire}, consultée le 31 octobre 2026 (SRC-11-003).}. La ligne directrice canadienne est de \qty{200}{\becquerel\per\metre\cubed} en moyenne annuelle dans les aires normalement occupées ; au-delà, Santé Canada recommande de prendre des mesures correctives d'ici un an et d'agir plus rapidement si la concentration est plus élevée\footnote{Santé Canada, « Lignes directrices sur le radon », page datée du 15 octobre 2025, \url{https://www.canada.ca/fr/sante-canada/services/securite-et-risque-pour-sante/radiation/radon/lignes-directrices-gouvernement-canada.html}, et « Guide pour la mesure du radon dans les maisons », page datée du 22 mai 2026, \url{https://www.canada.ca/fr/sante-canada/services/publications/securite-et-risque-pour-sante/guide-mesures-radon-maisons.html}, consultées le 31 octobre 2026 (SRC-11-001 et SRC-11-002).}. La mesure fiable est une mesure à long terme, d'au moins 91 jours, dont au moins 91 jours en saison de chauffage, effectuée dans une aire normalement occupée du niveau le plus bas de la maison ; les mesures de courte durée ne permettent pas de conclure. Le gouvernement du Québec indique que la concentration moyenne dans les sous-sols québécois est d'environ \qty{37}{\becquerel\per\metre\cubed}, que les concentrations peuvent néanmoins dépasser \qty{1000}{\becquerel\per\metre\cubed} dans certains cas, et qu'un dosimètre passif à exposer au moins trois mois, de préférence d'octobre à avril, coûte environ \dollars{50}, analyse comprise\footnotemark[\value{footnote}]. Les mesures correctives vont du colmatage des fissures et du scellement des ouvertures en contact avec le sol jusqu'à un système qui évacue le radon présent sous les fondations.
189 +
190 +Pour l'évaluateur, le radon est l'archétype de la caractéristique invisible : aucune inspection visuelle ne le détecte, sa mesure exige trois mois, et son incidence sur la valeur dépend d'un seuil réglementaire plutôt que d'une dégradation. La déclaration du vendeur indique si un test a été fait et son résultat ; en l'absence de test, l'évaluateur n'a d'autre choix que l'hypothèse extraordinaire selon laquelle la concentration respecte la ligne directrice, assortie de la recommandation de mesurer. La \cref{sec:11:information} montre que cette recommandation, à cinquante dollars, est presque toujours justifiée.
191 +
192 +\subsection{Quand recommander un test : la valeur de l'information}\label{sec:11:information}
193 +
194 +Radon, pyrite, amiante, ocre, réservoir souterrain : dans tous ces cas, l'inspection visuelle s'arrête à un indice et un test spécialisé, coûteux ou long, permettrait de trancher. L'évaluateur doit décider s'il recommande le test, et il peut le faire par un raisonnement simple de valeur de l'information. Soit $p$ la probabilité, au vu des indices, que le défaut soit présent, $C$ le coût de sa correction s'il l'est, et $t$ le coût du test, supposé ici parfaitement informatif. Sans test, l'acheteur rationnel qui connaît $p$ et $C$ escompte une perte espérée $pC$ ; avec test, il paie $t$ et ne paie $C$ que si le défaut est confirmé, de sorte que son décaissement espéré est $t + pC$. La différence ne porte donc pas sur l'espérance des coûts de correction, mais sur ce que le test permet d'éviter : acheter au prix d'une maison saine une maison qui ne l'est pas, ou renoncer à une maison saine par crainte d'un défaut absent. Sous l'hypothèse usuelle de la théorie de la décision, selon laquelle l'acheteur choisit avant le test entre acheter au prix d'une maison saine et exiger une décote égale au coût complet de la correction, la valeur espérée de l'information parfaite est
195 +\begin{equation}\label{eq:11:vei}
196 +\mathit{VEI} = \min\{pC,\ (1-p)\,C\} \quad\text{et le test est justifié si}\quad t < \mathit{VEI}.
197 +\end{equation}
198 +Dans la situation la plus courante, où le défaut est improbable ($p < 1/2$), l'\cref{eq:11:vei} se réduit à la règle que le chapitre retient :
199 +\begin{equation}\label{eq:11:test}
200 +\text{recommander le test si}\quad t < pC \quad\Longleftrightarrow\quad p > p^{*} = \frac{t}{C}.
201 +\end{equation}
202 +Le seuil de probabilité $p^{*}$ au-delà duquel le test vaut son coût est le rapport du coût du test au coût de la correction. Pour le radon, avec un dosimètre d'environ \dollars{50} et un coût de correction de l'ordre de quelques milliers de dollars, $p^{*}$ est de l'ordre de un ou deux pour cent, bien inférieur à la part des maisons qui dépassent la ligne directrice dans la plupart des régions : le test est presque toujours justifié, et la recommandation est quasi systématique. Pour un test de pyrite de l'ordre de \dollars{1200}, en présence d'une excavation qui coûterait \dollars{25000}, $p^{*} = 0{,}048$ : le test n'est recommandé que si les indices, la période de construction et le secteur portent la probabilité au-dessus de cinq pour cent, ce qui est le cas d'une maison des années 1980 d'un secteur touché sans certificat de remblai, et non celui d'une maison de 2015 avec certificat. Les chiffres de ce paragraphe sont des paramètres d'illustration, non des coûts de marché ; le raisonnement, lui, est général, et il fournit à l'évaluateur une façon de justifier au rapport pourquoi il recommande un test et pas un autre. Le script \texttt{analysis/python/cases/ch11\_inspection.py} imprime les valeurs de l'\cref{eq:11:test} pour les paramètres cités.
203 +
204 +\begin{pratique}[Formuler l'hypothèse extraordinaire]
205 +Lorsqu'un test est recommandé mais n'a pas été fait à la date d'évaluation, la conclusion de valeur repose sur une hypothèse extraordinaire que la règle 2.1~c) des NPP oblige à divulguer avec son incidence sur la valeur, et que la règle 2.3 oblige à rappeler chaque fois que la conclusion est indiquée \parencite{oeaqNormes}. Une formulation défendable comporte quatre éléments : l'indice observé (« remblai non certifié, construction de 1984, secteur où la pyrite est documentée »), l'hypothèse retenue (« le remblai n'a pas de potentiel de gonflement significatif »), la recommandation (« analyse du remblai par un laboratoire selon un protocole reconnu ») et l'incidence (« si l'hypothèse se révélait fausse, la valeur conclue devrait être réduite du coût de correction, net de la plus-value éventuelle, et le rapport devrait être révisé »). L'évaluateur ne chiffre le coût de correction que s'il dispose d'une soumission ou d'une source fiable ; sinon, il le décrit comme substantiel et renvoie au spécialiste.
206 +\end{pratique}
207 +
208 +\subsection{Synthèse des pathologies québécoises}
209 +
210 +Le \cref{tab:11:pathologies} récapitule les pathologies examinées dans ce chapitre, les signes qui les trahissent à l'inspection, leurs conséquences pour le bâtiment et la façon dont elles entrent dans l'évaluation. La dernière colonne renvoie au traitement du \cref{ch:24} : une pathologie curable à un coût inférieur à la valeur qu'elle restitue est une dépréciation physique curable, mesurée par son coût de correction ; une pathologie qui raccourcit la vie d'une composante relève de la dépréciation de courte durée, par un âge effectif accru ; une pathologie qui affecte la structure ou le sol relève de la longue durée, ou d'une désuétude externe lorsque c'est le site qui est en cause. Le tableau ne donne aucun coût : les coûts de correction dépendent du bâtiment, du marché local et de l'année, et aucune source publique vérifiée ne permet de les tabuler ; l'évaluateur les obtient par soumission ou par les guides de coûts sous licence du \cref{ch:21}.
211 +
212 +\begin{table}[htbp]
213 +\caption{Pathologies fréquentes du parc résidentiel québécois : signes, conséquences et traitement dans l'évaluation}\label{tab:11:pathologies}
214 +\centering
215 +\scriptsize\setlength{\tabcolsep}{3pt}
216 +\begin{tabularx}{\textwidth}{>{\raggedright\arraybackslash}p{23mm}YY>{\raggedright\arraybackslash}p{27mm}}
217 +\toprule
218 +Pathologie & Signes à l'inspection & Conséquences & Traitement (\cref{ch:24}) \\
219 +\midrule
220 +Pyrite (remblai sous dalle) & Dalle bombée, fissures en étoile, surtout au garage ; poussée sur les murs du garage ; poussière blanchâtre ; construction des années 1970-1990, région de Montréal & Fissuration progressive ; excavation et remplacement du remblai et de la dalle & Curable si excavation justifiée ; sinon hypothèse extraordinaire + test (IPPG) \\
221 +Pyrrhotite (granulat du béton) & Fissuration des murs de fondation, écaillage ; Mauricie et Centre-du-Québec, constructions 1996-2008 ; rapport d'expertise, taux de pyrrhotite & Remplacement des fondations & Longue durée (structure) ; coût de correction si expertise ; programme SHQ clos le 30 sept. 2026 \\
222 +Ocre ferreuse (drain français) & Dépôts rougeâtres sur la dalle et au bassin, odeur de soufre, sous-sol humide ; sols sablonneux et silteux & Colmatage du drain, infiltrations récurrentes & Curable (nettoyage, cheminées) ou longue durée si drain à refaire \\
223 +Sols argileux & Fissures d'un côté, affaissement, arbres à proximité ; vallées du Saint-Laurent et de l'Outaouais, Saguenay & Tassement différentiel des fondations & Longue durée ; expertise géotechnique \\
224 +Fissures de fondation & Verticales fines (retrait) vs horizontales ou en escalier (mouvement) ; efflorescence & Infiltration ; perte de capacité si structurales & Curable (injection) ou longue durée \\
225 +Infiltrations et humidité & Taches, gondolement, moisissures, humidimètre, pente négative, descentes au pied du mur & Dégradation des finitions, moisissures & Curable (drainage, pente, gouttières) \\
226 +Moisissures & Plaques visibles ; classement petite / moyenne / grande (Santé Canada) & Santé des occupants ; ouverture des finitions si étendues & Curable si cause corrigée ; spécialiste si grande zone \\
227 +Amiante (matériaux anciens) & Isolant de tuyaux, carreaux, plâtre, bardeaux ; avant 1990 & Désamiantage lors de travaux ; aucun risque important si intact & Désuétude conditionnelle aux travaux projetés \\
228 +Vermiculite (comble, murs) & Granules grises ou brunes dans le comble ; 1920-1990 & Analyse ; retrait par un professionnel si dérangée & Hypothèse extraordinaire + analyse \\
229 +MIUF (murs) & Trous de remplissage bouchés, mousse friable ; années 1970, interdite déc. 1980 & Formaldéhyde (émissions décroissantes) ; retrait coûteux lors de travaux & Désuétude conditionnelle ; déclaration du vendeur \\
230 +Radon & Invisible ; test de 91 jours en saison de chauffage ; ligne directrice 200 Bq/m³ & Santé ; atténuation (scellement, évacuation sous dalle) & Hypothèse extraordinaire + test (quasi systématique) \\
231 +Filage d'aluminium, boutons et tubes, deux fils & Panneau, prises, conducteurs visibles ; périodes 1900-1950 et 1965-1976 & Assurabilité, mise aux normes & Curable (électricien) \\
232 +Galvanisé, plomb, polybutylène & Matériau des conduites visibles ; pression faible ; 1900-1960 et 1978-1995 & Fuites, assurabilité, santé (plomb) & Curable (remplacement) \\
233 +Mazout : réservoirs & Réservoir intérieur rouillé ; conduits d'un réservoir souterrain & Déversement, contamination du sol & Curable (retrait) ou désuétude externe (sol) ; expertise \\
234 +Toiture et comble & Granules, solins, givre, isolant insuffisant, ventilation & Infiltrations, condensation & Courte durée (âge effectif) ; curable (ventilation) \\
235 +\bottomrule
236 +\end{tabularx}
237 +\tabsource{synthèse de l'auteur ; signes et mécanismes d'après la RBQ (pyrite, pyrrhotite, ocre, sols argileux), Santé Canada (moisissures, amiante, radon), RNCan (vermiculite, MIUF) et Québec.ca (radon, pyrrhotite), pages consultées le 31 octobre 2026 ; périodes indicatives (\cref{fig:11:frise}). Aucun coût n'est tabulé.}
238 +\end{table}
239 +
240 +\section{Du constat au chiffre : classement d'état et âge effectif}\label{sec:11:etat}
241 +
242 +\subsection{Une échelle d'état ordinale et déclarée}
243 +
244 +L'inspection produit des observations qualitatives ; l'évaluation a besoin de nombres. Le passage de l'une à l'autre se fait en deux temps : un classement de l'état de chaque composante sur une échelle ordinale, puis une conversion de ce classement en âge effectif, qui est la variable d'entrée des formules de dépréciation. Le \cref{tab:11:echelle} définit l'échelle à cinq niveaux retenue dans l'ouvrage. Elle est ordinale : la différence entre les niveaux 2 et 3 n'est pas égale à celle entre les niveaux 4 et 5, et aucune moyenne arithmétique de notes n'a de sens en soi ; c'est la conversion de la \cref{sec:11:convention} qui lui donne une signification métrique, et cette conversion est une convention qu'il faut déclarer. Le choix de cinq niveaux plutôt que trois ou dix répond à un arbitrage entre la finesse et la fidélité : deux inspecteurs s'accordent raisonnablement sur cinq niveaux ancrés par des descriptions, beaucoup moins sur dix.
245 +
246 +\begin{table}[htbp]
247 +\caption{Échelle d'état des composantes retenue dans l'ouvrage et fraction de vie utile consommée associée}\label{tab:11:echelle}
248 +\centering
249 +\small
250 +\begin{tabularx}{\textwidth}{cYc}
251 +\toprule
252 +Note $c$ & Définition & $\varphi(c)$ \\
253 +\midrule
254 +1 & Excellent : neuf ou remis à neuf, aucune usure visible, aucun entretien différé & 0,05 \\
255 +2 & Bon : usure légère, entretien à jour, aucune réparation requise & 0,25 \\
256 +3 & Moyen : usure normale pour l'âge, entretien différé mineur, réparations à prévoir à moyen terme & 0,50 \\
257 +4 & Passable : usure avancée, réparations requises à court terme, fonctionnement encore assuré & 0,75 \\
258 +5 & Mauvais : fin de vie, défaillance ou remplacement nécessaire & 1,00 \\
259 +\bottomrule
260 +\end{tabularx}
261 +\tabsource{convention de l'auteur (\texttt{ETATS} et \texttt{PHI} dans \texttt{analysis/python/cases/ch11\_inspection.py}) ; les fractions $\varphi(c)$ sont des hypothèses pédagogiques déclarées, non des valeurs estimées.}
262 +\end{table}
263 +
264 +\begin{definition}{Âge chronologique, âge effectif, vie utile et vie économique}{ages}
265 +L'\motcle{âge chronologique} $a$ d'une composante est le temps écoulé depuis son installation ou son dernier remplacement. Sa \motcle{vie utile} $L$ est la durée pendant laquelle elle remplit sa fonction dans des conditions normales d'entretien. Son \motcle{âge effectif} $a_{\mathrm{eff}}$ est l'âge d'une composante typique qui serait dans le même état : il est inférieur à l'âge chronologique si la composante a été mieux entretenue ou partiellement remise à neuf, supérieur si elle a été négligée ou soumise à des conditions sévères. Pour le bâtiment pris dans son ensemble, la \motcle{vie économique} $L_B$ est la durée pendant laquelle les améliorations contribuent à la valeur de la propriété, et la \motcle{vie économique restante} est $L_B - a_{\mathrm{eff}}$.
266 +\end{definition}
267 +
268 +\subsection{La convention de conversion}\label{sec:11:convention}
269 +
270 +La pratique professionnelle estime l'âge effectif par jugement, en comparant l'état constaté à celui qu'aurait une composante typique du même âge. Cette estimation est légitime, mais elle n'est ni reproductible ni documentable si la règle qui la gouverne reste implicite. L'ouvrage adopte donc une convention explicite, qui combine l'information de l'âge chronologique et celle de la note d'état. À chaque note $c$ est associée une fraction de vie utile consommée $\varphi(c)$ (\cref{tab:11:echelle}), de sorte que $\varphi(c)\,L$ est l'âge effectif qu'indiquerait la note seule. L'âge effectif retenu est une moyenne pondérée de cet âge indiqué par l'état et de l'âge chronologique :
271 +\begin{equation}\label{eq:11:aeff}
272 +a_{\mathrm{eff}} = \min\Big\{\max\big\{(1-\lambda)\,a + \lambda\,\varphi(c)\,L,\ 0\big\},\ L\Big\}, \qquad 0 \le \lambda \le 1,
273 +\end{equation}
274 +où $\lambda$ est le poids accordé à l'observation. La convention de l'ouvrage retient $\lambda = 0{,}5$ : l'âge chronologique, qui est un fait, et la note d'état, qui est un jugement, pèsent également. Deux cas limites éclairent la formule. Avec $\lambda = 0$, l'âge effectif est l'âge chronologique et l'inspection ne sert à rien ; avec $\lambda = 1$, l'âge chronologique est ignoré et l'âge effectif est entièrement déterminé par la note, ce qui expose le résultat à toute la subjectivité du classement. La valeur intermédiaire réduit l'un et l'autre défaut, et la \cref{sec:11:sensibilite} mesure ce que l'on perd en la modifiant.
275 +
276 +\begin{proposition}{Propriétés de la convention d'âge effectif}{aeff}
277 +Pour $\lambda \in [0,1]$ et $\varphi$ croissante en $c$, l'âge effectif de l'\cref{eq:11:aeff} est (i) compris entre 0 et $L$ ; (ii) croissant au sens large en $a$ et en $c$ ; (iii) égal à $a$ lorsque la note d'état correspond exactement à l'âge, c'est-à-dire lorsque $\varphi(c)\,L = a$, quel que soit $\lambda$ ; (iv) tel que l'écart $a_{\mathrm{eff}} - a$ vaut $\lambda\,(\varphi(c)\,L - a)$ avant bornage : l'inspection ne déplace l'âge que dans la mesure où l'état constaté diffère de l'état attendu, et d'une fraction $\lambda$ de cet écart.
278 +\end{proposition}
279 +\begin{proof}
280 +(i) résulte du bornage. (ii) : avant bornage, la dérivée partielle en $a$ vaut $1-\lambda \ge 0$ et la différence entre deux notes consécutives vaut $\lambda\,[\varphi(c+1)-\varphi(c)]\,L \ge 0$ ; le bornage par $\min$ et $\max$ préserve la croissance au sens large. (iii) : si $\varphi(c)\,L = a$, l'expression devient $(1-\lambda)\,a + \lambda\,a = a$, compris dans $[0, L]$ puisque $a = \varphi(c)\,L \le L$. (iv) : $(1-\lambda)\,a + \lambda\,\varphi(c)\,L - a = \lambda\,(\varphi(c)\,L - a)$.
281 +\end{proof}
282 +
283 +La propriété (iii) est celle qui justifie la convention : une composante dont l'état est exactement celui que l'on attend à son âge garde son âge chronologique, et c'est seulement l'écart entre l'attendu et le constaté que l'inspection corrige. La propriété (iv) donne à $\lambda$ une interprétation simple : c'est la part de l'écart constaté que l'évaluateur accepte de traduire en âge. La \cref{fig:11:matrice} représente la convention sous deux formes, la matrice des âges effectifs selon la note et l'âge chronologique, et les profils d'âge effectif pour chaque note. Pour une structure de vie économique de 60 ans, une note de 3 à 28 ans donne 29 ans, presque l'âge chronologique ; une note de 2 donnerait 21,5 ans et une note de 4, 36,5 ans.
284 +
285 +\begin{figure}[htbp]
286 +\centering
287 +\includegraphics[width=\textwidth]{ch11/ch11-fig-matrice-age-effectif.pdf}
288 +\caption{La convention d'âge effectif de l'ouvrage pour une vie de 60 ans et $\lambda = 0{,}5$. À gauche, la matrice note d'état × âge chronologique → âge effectif ; à droite, les profils par note et la diagonale $a_{\mathrm{eff}} = a$, que chaque profil croise à l'âge où la note correspond à l'état attendu. Le sujet du cas 1 (28 ans, note 3) se situe presque sur la diagonale.}\label{fig:11:matrice}
289 +\figsource{analysis/python/figures/ch11\_matrice\_age\_effectif.py ; convention déclarée (\cref{eq:11:aeff}), aucune donnée empirique.}
290 +\end{figure}
291 +
292 +\subsection{Agréger les composantes}
293 +
294 +Une maison compte des dizaines de composantes et l'évaluation a besoin de quelques résumés. Le premier est l'\motcle{indice d'état pondéré}, moyenne des notes pondérée par le coût neuf $C_i$ de chaque composante,
295 +\begin{equation}\label{eq:11:indice}
296 +I_E = \sum_{i} w_i\, c_i, \qquad w_i = \frac{C_i}{\sum_j C_j},
297 +\end{equation}
298 +qui sert de variable d'état dans une grille de comparaison ou un modèle hédonique (\cref{ch:17,ch:18}) ; la pondération par le coût évite qu'une poignée de porte compte autant qu'une toiture. Le second est la fraction moyenne de vie consommée, $\sum_i w_i\, a_{\mathrm{eff},i}/L_i$, qui résume l'usure du bâtiment en une proportion. Le troisième, et le plus important pour la méthode du coût, est l'\motcle{âge effectif de la structure}, obtenu en appliquant l'\cref{eq:11:aeff} au bloc des ouvrages de longue durée (fondations, charpente, isolation, cloisons) avec la vie économique $L_B$ ; c'est lui qui entre dans la dépréciation de longue durée, tandis que les composantes de courte durée sont dépréciées une à une.
299 +
300 +\subsection{Le lien avec la dépréciation physique}\label{sec:11:lien-depreciation}
301 +
302 +La fiche d'état alimente directement la méthode ventilée de la dépréciation physique, dont le \cref{ch:24} donne la théorie complète et que l'ouvrage implante dans \texttt{traite.cout.depreciation\_ventilee}. Les travaux immédiatement nécessaires et économiquement justifiés, c'est-à-dire ceux dont le coût est inférieur à la valeur qu'ils restituent, forment la \motcle{dépréciation physique curable}, mesurée par leur coût de correction $D_{\mathrm{cur}}$. Les composantes de courte durée, qui seront remplacées avant la fin de la vie du bâtiment, sont dépréciées chacune au prorata de leur âge effectif :
303 +\begin{equation}\label{eq:11:courte}
304 +D_{\mathrm{court}} = \sum_{i \in \mathcal{S}} C_i \min\!\left\{\frac{a_{\mathrm{eff},i}}{L_i},\ 1\right\},
305 +\end{equation}
306 +et les ouvrages de longue durée le sont sur la base restante, par la méthode âge-vie :
307 +\begin{equation}\label{eq:11:longue}
308 +D_{\mathrm{long}} = \Big(C_N - D_{\mathrm{cur}} - \sum_{i \in \mathcal{S}} C_i\Big)\, \frac{a_{\mathrm{eff},B}}{L_B}, \qquad D_{\mathrm{phys}} = D_{\mathrm{cur}} + D_{\mathrm{court}} + D_{\mathrm{long}}.
309 +\end{equation}
310 +L'ordre des déductions évite le double comptage : une composante remplacée au titre des travaux curables ne figure pas parmi les composantes de courte durée, et le coût des composantes de courte durée est retiré de la base avant d'appliquer le ratio de la structure. Les coûts neufs $C_i$ des composantes doivent être exprimés sur la même base que $C_N$ ; lorsque le devis donne des coûts directs, comme celui du cas 1, chaque poste est majoré du même facteur que le coût neuf,
311 +\begin{equation}\label{eq:11:majoration}
312 +C_i = C_i^{\mathrm{direct}}\,(1+\tau_I)(1+\tau_E) = C_i^{\mathrm{direct}}\,\frac{C_N}{D},
313 +\end{equation}
314 +avec les notations du \cref{ch:21}. L'alternative à la méthode ventilée est la méthode âge-vie simple, $D_{\mathrm{phys}} = C_N\, a_{\mathrm{eff},B}/L_B$, qui applique un seul ratio à tout le coût neuf ; elle ignore que les composantes de courte durée s'usent plus vite que la structure et sous-estime la dépréciation d'un bâtiment dont les finitions et les équipements sont d'origine. L'exemple intégral quantifie l'écart.
315 +
316 +\section{Exemple intégral : inspection du sujet du cas 1}\label{sec:11:exemple}
317 +
318 +\begin{synthetique}
319 +Le sujet du cas 1 est la maison fictive décrite dans \texttt{data/synthetic/cas1\_gatineau\_sujet.json} : cottage à étages construit en 1998 dans le secteur de Hull, \msq{165} habitables, terrain de \msq{620}, qualité moyenne, garage simple, sous-sol fini, évalué au 1\textsuperscript{er} septembre 2026. Les constats d'inspection de cette section sont inventés pour les besoins de l'exposé et cohérents avec le profil du sujet ; les coûts neufs des composantes proviennent du devis synthétique \texttt{cas1\_gatineau\_couts.csv} (38 postes) et du coût neuf de \dollars{397567.33} établi au \cref{ch:21} ; les vies utiles sont des hypothèses pédagogiques déclarées dans le script. Tous les chiffres sont reproduits par \texttt{analysis/python/cases/ch11\_inspection.py} et vérifiés par \texttt{analysis/python/tests/test\_ch11.py}.
320 +\end{synthetique}
321 +
322 +\begin{exemple}{Fiche d'état, âge effectif et dépréciation physique d'un cottage de 1998 à Hull}{inspection11}
323 +L'inspection a lieu le 1\textsuperscript{er} septembre 2026, par temps sec, en présence du propriétaire, qui remet la déclaration du vendeur, les factures de la toiture (2012), de la thermopompe (2016) et du chauffe-eau (2019), et une attestation de rénovation des salles de bain (2015). Le rôle d'évaluation, le certificat de localisation et la fiche de courtage ont été lus avant la visite. La frise de la \cref{fig:11:frise} oriente l'attention vers le remblai sous la dalle, le pare-vapeur et la ventilation du comble.
324 +
325 +\emph{Étape 1 : le tour extérieur.} La toiture de bardeaux d'asphalte refaite en 2012 présente une perte de granules localisée sur le versant sud, sans relèvement ; le solin de la cheminée est oxydé et la gouttière arrière s'est désolidarisée de la bordure. La brique est saine et ses joints intacts ; le fibrociment, repeint en 2018, ne montre aucune fissure. Les seize fenêtres de PVC sont d'origine ; deux thermos sont embués et le calfeutrage est sec. Le balcon de bois traité d'origine a un garde-corps lâche et trois planches pourries. L'entrée asphaltée est fissurée sur toute sa surface et affaissée. Le terrain présente une pente négative du côté nord-est, vers la fondation.
326 +
327 +\emph{Étape 2 : le sous-sol et les systèmes.} Le mur de fondation nord-est, là où la pente est négative, porte une fissure de retrait verticale de 0,5 millimètre avec efflorescence ; le plancher flottant posé en 2009 gondole à son pied. Le drain français d'origine n'a pas été vérifié par caméra. Le panneau électrique de 200 ampères est à disjoncteurs, le filage est de cuivre ; la plomberie est de cuivre avec des modifications en PEX ; le chauffe-eau de 2019 est en bon état ; le ventilateur récupérateur de chaleur d'origine fonctionne mais il est bruyant et son noyau est encrassé ; la thermopompe de 2016 est entretenue. Dans le comble, l'isolant est continu, le pare-vapeur est visible et aucune trace de givre ou de moisissure n'apparaît ; il n'y a pas de vermiculite. Aucun test de radon n'a été fait.
328 +
329 +\emph{Étape 3 : la fiche d'état.} Le \cref{tab:11:fiche} classe les dix-neuf composantes de courte et moyenne durée et le bloc de longue durée (fondations, dalle, drain, charpente, fermes, escaliers, isolation, gypse, portes intérieures, raccordements et nettoyage du chantier), avec leur année d'installation, leur âge chronologique, leur vie utile, leur note et leur âge effectif selon l'\cref{eq:11:aeff}. Le coût neuf de chaque composante est le coût direct du devis majoré du facteur $C_N/D = \num{1.33043}$ de l'\cref{eq:11:majoration}, de sorte que les coûts neufs somment exactement à \dollars{397567.33}. Les composantes de courte et moyenne durée représentent \dollars{224956.09}, soit 56,6~\% du coût neuf, et le bloc de longue durée \dollars{172611.24}, soit 43,4~\%. Sept composantes sont notées 2, huit sont notées 3, quatre sont notées 4 et une, l'entrée asphaltée, est notée 5 ; l'indice d'état pondéré de l'\cref{eq:11:indice} vaut $I_E = 2{,}81$ et la fraction moyenne de vie consommée 0,547, soit l'équivalent de 32,8 ans sur une vie de 60 ans. La \cref{fig:11:fiche} représente la fiche : pour la plupart des composantes d'origine, l'âge effectif est inférieur à l'âge chronologique, parce que l'état constaté est meilleur que celui qu'indiquerait leur âge seul ; pour le VRC et l'entrée, il atteint la vie utile.
330 +
331 +\emph{Étape 4 : l'âge effectif de la structure.} Le bloc de longue durée est noté 3 : la fissure de retrait est fine et typique, la charpente est droite, l'isolation est conforme. Avec $a = 28$, $L_B = 60$ et $\lambda = 0{,}5$, l'\cref{eq:11:aeff} donne $a_{\mathrm{eff},B} = 0{,}5 \times 28 + 0{,}5 \times 0{,}5 \times 60 = 29$ ans et une vie économique restante de 31 ans. L'inspection confirme ici l'âge chronologique à un an près, ce qui est le résultat attendu d'un bâtiment dont l'état correspond à son âge (\cref{prop:aeff}, propriété~iii).
332 +
333 +\emph{Étape 5 : les travaux immédiats.} Cinq interventions sont requises à court terme et leur coût est inférieur à la valeur qu'elles restituent ; elles forment la dépréciation physique curable du \cref{tab:11:travaux}. Leur coût est exprimé, par convention de l'exemple, comme une fraction déclarée du poste de devis correspondant, majorée du facteur $C_N/D$ : la réfection complète de l'entrée (\dollars{3438.43}), le colmatage de la fissure et la correction de la pente (\dollars{1211.72}), le remplacement de deux thermos sur seize et le calfeutrage (\dollars{2788.93}), la réparation du balcon (\dollars{2625.43}) et la réfection du solin avec refixation de la gouttière (\dollars{415.48}), pour un total de $D_{\mathrm{cur}} = \dollars{10479.98}$, soit 2,64~\% du coût neuf. L'entrée, remplacée intégralement, est retirée des composantes de courte durée pour ne pas être comptée deux fois.
334 +
335 +\emph{Étape 6 : la dépréciation physique ventilée.} Les dix-huit composantes de courte durée restantes sont dépréciées selon l'\cref{eq:11:courte} ; les plus lourdes sont le revêtement extérieur (\dollars{18089.57}), les armoires et comptoirs (\dollars{16541.25}) et les fenêtres (\dollars{15989.85}), et la somme vaut $D_{\mathrm{court}} = \dollars{130584.55}$. La base de longue durée est $C_N - D_{\mathrm{cur}} - \sum_{\mathcal{S}} C_i = \dollars{165569.69}$ et, multipliée par $29/60$, elle donne $D_{\mathrm{long}} = \dollars{80025.35}$. La dépréciation physique totale est
336 +\begin{equation}\label{eq:11:dphys-cas1}
337 +D_{\mathrm{phys}} = \dollars{10479.98} + \dollars{130584.55} + \dollars{80025.35} = \dollars{221089.88},
338 +\end{equation}
339 +soit 55,61~\% du coût neuf, et la contribution du bâtiment déprécié avant désuétudes est de $\dollars{397567.33} - \dollars{221089.88} = \dollars{176477.45}$. La méthode âge-vie simple, avec le même âge effectif de 29 ans, aurait donné $\dollars{397567.33} \times 29/60 = \dollars{192157.55}$ (48,33~\%), soit \dollars{28932.34} de moins ; avec l'âge chronologique de 28 ans, \dollars{185531.42} (46,67~\%). L'écart mesure ce que l'inspection apporte : les finitions et les équipements d'origine, qui représentent plus de la moitié du coût neuf, sont plus usés que la structure, et seule la méthode ventilée en rend compte. Le \cref{tab:11:depreciation} résume le calcul ; le \cref{ch:24} y ajoutera les désuétudes fonctionnelle et externe, et le \cref{ch:45} rapprochera l'indication par le coût de celles de la comparaison et du modèle hédonique.
340 +
341 +\emph{Étape 7 : les hypothèses extraordinaires.} Deux éléments n'ont pu être vérifiés : l'état du drain français, que seule une inspection par caméra établirait, et la concentration de radon. Le rapport retient l'hypothèse que le drain est fonctionnel et que la concentration de radon respecte la ligne directrice, recommande les deux vérifications, en indique l'incidence et rappelle ces hypothèses à chaque énoncé de la conclusion. Avec un dosimètre d'environ \dollars{50}, la recommandation du test de radon est justifiée dès que la probabilité de dépassement excède $p^{*} = 50/3000 \approx 1{,}7$~\% pour une correction hypothétique de \dollars{3000} (\cref{eq:11:test}). Le remblai sous la dalle, pour une construction de 1998, n'appelle pas de test en l'absence de tout signe ; le rapport le mentionne.
342 +\end{exemple}
343 +
344 +\begin{table}[htbp]
345 +\caption{Fiche d'état du sujet du cas 1 au 1\textsuperscript{er} septembre 2026 (données synthétiques, constats fictifs)}\label{tab:11:fiche}
346 +\centering
347 +\scriptsize\setlength{\tabcolsep}{3pt}
348 +\begin{tabular}{lS[table-format=4.0]S[table-format=2.0]S[table-format=2.0]cS[table-format=2.2]S[table-format=1.3]S[table-format=6.0]}
349 +\toprule
350 +Composante & {Année} & {Âge $a$} & {$L$} & $c$ & {$a_{\mathrm{eff}}$} & {$a_{\mathrm{eff}}/L$} & {Coût neuf (\$)} \\
351 +\midrule
352 +Couverture (bardeaux d'asphalte) & 2012 & 14 & 20 & 3 & 12.00 & 0.600 & 10218 \\
353 +Gouttières et solins & 1998 & 28 & 25 & 4 & 23.38 & 0.935 & 2077 \\
354 +Fenêtres (PVC, double vitrage) & 1998 & 28 & 30 & 3 & 21.50 & 0.717 & 22311 \\
355 +Portes extérieures et porte de garage & 1998 & 28 & 30 & 3 & 21.50 & 0.717 & 7982 \\
356 +Revêtement extérieur (brique et fibrociment) & 1998 & 28 & 40 & 2 & 19.00 & 0.475 & 38083 \\
357 +Peinture intérieure & 2021 & 5 & 10 & 2 & 3.75 & 0.375 & 8348 \\
358 +Planchers de bois franc & 1998 & 28 & 40 & 3 & 24.00 & 0.600 & 10963 \\
359 +Planchers de céramique & 1998 & 28 & 35 & 2 & 18.38 & 0.525 & 4544 \\
360 +Planchers flottants (sous-sol) & 2009 & 17 & 20 & 4 & 16.00 & 0.800 & 3703 \\
361 +Armoires de cuisine et comptoirs & 1998 & 28 & 30 & 3 & 21.50 & 0.717 & 23081 \\
362 +Vanités et accessoires (2 salles de bain) & 2015 & 11 & 25 & 2 & 8.62 & 0.345 & 7213 \\
363 +Plomberie (cuivre et PEX) & 1998 & 28 & 50 & 2 & 20.25 & 0.405 & 22215 \\
364 +Chauffe-eau électrique & 2019 & 7 & 12 & 2 & 5.00 & 0.417 & 1539 \\
365 +Électricité (entrée 200 A, filage de cuivre, éclairage) & 1998 & 28 & 50 & 2 & 20.25 & 0.405 & 22792 \\
366 +Ventilateur récupérateur de chaleur (VRC) & 1998 & 28 & 20 & 4 & 20.00 & 1.000 & 7501 \\
367 +Thermopompe centrale et plinthes & 2016 & 10 & 15 & 3 & 8.75 & 0.583 & 13945 \\
368 +Balcon et perron & 1998 & 28 & 25 & 4 & 23.38 & 0.935 & 8751 \\
369 +Entrée asphaltée & 1998 & 28 & 20 & 5 & 20.00 & 1.000 & 3438 \\
370 +Aménagement paysager & 1998 & 28 & 20 & 3 & 19.00 & 0.950 & 6251 \\
371 +\midrule
372 +Structure, fondations, dalle, drain, isolation, cloisons & 1998 & 28 & 60 & 3 & 29.00 & 0.483 & 172611 \\
373 +\midrule
374 +Total (indice d'état pondéré $I_E = 2{,}81$) & & & & & & & 397567 \\
375 +\bottomrule
376 +\end{tabular}
377 +\tabsource{\synth{analysis/python/cases/ch11\_inspection.py ; vies utiles $L$ = hypothèses pédagogiques ; coûts neufs = postes de cas1\_gatineau\_couts.csv × 1,33043 ; $\lambda = 0{,}5$}}
378 +\end{table}
379 +
380 +\begin{figure}[htbp]
381 +\centering
382 +\includegraphics[width=\textwidth]{ch11/ch11-fig-fiche-etat.pdf}
383 +\caption{Fiche d'état du sujet du cas 1 : fraction de la vie utile consommée par composante selon l'âge chronologique (trait) et selon l'âge effectif de l'\cref{eq:11:aeff} (disque, coloré par la note d'état et dimensionné selon le coût neuf). Les composantes d'origine en bon état voient leur âge effectif ramené sous l'âge chronologique ; le VRC et l'entrée asphaltée atteignent la borne de leur vie utile.}\label{fig:11:fiche}
384 +\figsource{\synth{analysis/python/figures/ch11\_fiche\_etat.py, graine 20261031}}
385 +\end{figure}
386 +
387 +\begin{table}[htbp]
388 +\caption{Travaux immédiats du sujet du cas 1 : dépréciation physique curable (données synthétiques)}\label{tab:11:travaux}
389 +\centering
390 +\small
391 +\begin{tabularx}{\textwidth}{YlS[table-format=3.1]S[table-format=5.2]}
392 +\toprule
393 +Intervention & Poste de référence & {Fraction (\%)} & {Coût majoré (\$)} \\
394 +\midrule
395 +Réfection de l'entrée asphaltée (fin de vie) & Entrée asphaltée & 100.0 & 3438.43 \\
396 +Colmatage de la fissure de fondation et correction de la pente & Drain français et imperméabilisation & 25.0 & 1211.72 \\
397 +Remplacement de deux thermos embués et calfeutrage & Fenêtres (PVC double vitrage) & 12.5 & 2788.93 \\
398 +Réparation du balcon (garde-corps, planches) & Balcon et perron & 30.0 & 2625.43 \\
399 +Réfection du solin de cheminée et refixation de la gouttière & Gouttières et solins & 20.0 & 415.48 \\
400 +\midrule
401 +Total $D_{\mathrm{cur}}$ (2,64 \% du coût neuf) & & & 10479.98 \\
402 +\bottomrule
403 +\end{tabular}
404 +\tabsource{\synth{analysis/python/cases/ch11\_inspection.py ; fractions déclarées (\texttt{TRAVAUX}), coût = fraction × poste direct × 1,33043}}
405 +\end{table}
406 +
407 +\begin{table}[htbp]
408 +\caption{Dépréciation physique ventilée du sujet du cas 1 et comparaison avec l'âge-vie simple (données synthétiques)}\label{tab:11:depreciation}
409 +\centering
410 +\small
411 +\begin{tabular}{lS[table-format=6.2]S[table-format=2.2]}
412 +\toprule
413 +Élément & {Montant (\$)} & {\% de $C_N$} \\
414 +\midrule
415 +Coût neuf $C_N$ (\cref{ch:21}) & 397567.33 & 100.00 \\
416 +Curable $D_{\mathrm{cur}}$ (5 interventions) & 10479.98 & 2.64 \\
417 +Courte durée $D_{\mathrm{court}}$ (18 composantes) & 130584.55 & 32.85 \\
418 +Base de longue durée $C_N - D_{\mathrm{cur}} - \sum_{\mathcal S} C_i$ & 165569.69 & 41.65 \\
419 +Longue durée $D_{\mathrm{long}}$ = base × 29/60 & 80025.35 & 20.13 \\
420 +\midrule
421 +Dépréciation physique totale (ventilée) & 221089.88 & 55.61 \\
422 +Contribution du bâtiment avant désuétudes & 176477.45 & 44.39 \\
423 +\midrule
424 +Âge-vie simple, $a_{\mathrm{eff}} = 29$ ans & 192157.55 & 48.33 \\
425 +Âge-vie simple, $a = 28$ ans (sans inspection) & 185531.42 & 46.67 \\
426 +Écart ventilée − âge-vie (29 ans) & 28932.34 & 7.28 \\
427 +\bottomrule
428 +\end{tabular}
429 +\tabsource{\synth{analysis/python/cases/ch11\_inspection.py ; traite.cout.depreciation\_ventilee et depreciation\_age\_vie}}
430 +\end{table}
431 +
432 +\section{Analyse de sensibilité : le poids de l'observation}\label{sec:11:sensibilite}
433 +
434 +La convention de l'\cref{eq:11:aeff} comporte deux choix dont l'exemple dépend : le poids $\lambda$ accordé à la note d'état, et la note elle-même, qui pour la structure résulte d'un jugement sur une fissure et une charpente. Le \cref{tab:11:sensibilite} et la \cref{fig:11:sensibilite} font varier l'un et l'autre, en appliquant la même valeur de $\lambda$ à toutes les composantes et en faisant varier la seule note de la structure de 1 à 5, et ils rapportent la dépréciation physique totale en pourcentage du coût neuf.
435 +
436 +\begin{table}[htbp]
437 +\caption{Sensibilité de la dépréciation physique totale (\% du coût neuf) au poids $\lambda$ et à la note d'état de la structure, cas 1}\label{tab:11:sensibilite}
438 +\centering
439 +\begin{tabular}{S[table-format=1.2]S[table-format=2.2]S[table-format=2.2]S[table-format=2.2]S[table-format=2.2]S[table-format=2.2]}
440 +\toprule
441 +{$\lambda$} & {Structure 1} & {Structure 2} & {Structure 3} & {Structure 4} & {Structure 5} \\
442 +\midrule
443 +0.00 & 63.68 & 63.68 & 63.68 & 63.68 & 63.68 \\
444 +0.25 & 55.09 & 57.17 & 59.77 & 62.37 & 64.98 \\
445 +0.50 & 46.24 & 50.40 & 55.61 & 60.82 & 66.02 \\
446 +0.75 & 36.88 & 43.13 & 50.93 & 58.74 & 66.55 \\
447 +1.00 & 27.38 & 35.71 & 46.12 & 56.53 & 66.94 \\
448 +\bottomrule
449 +\end{tabular}
450 +\tabsource{\synth{analysis/python/cases/ch11\_inspection.py, fonction \texttt{sensibilite}} ; la convention retenue est $\lambda = 0{,}5$, structure notée 3 (55,61 \%).}
451 +\end{table}
452 +
453 +\begin{figure}[htbp]
454 +\centering
455 +\includegraphics[width=\textwidth]{ch11/ch11-fig-sensibilite-age-effectif.pdf}
456 +\caption{Dépréciation physique totale du sujet du cas 1 selon le poids $\lambda$ de la note d'état dans l'âge effectif, pour cinq notes de la structure. À $\lambda = 0$, l'inspection ne compte pas et toutes les courbes se rejoignent ; plus $\lambda$ augmente, plus la note de la structure devient déterminante. L'étoile marque la convention retenue.}\label{fig:11:sensibilite}
457 +\figsource{\synth{analysis/python/figures/ch11\_fiche\_etat.py}}
458 +\end{figure}
459 +
460 +Trois enseignements se dégagent. Le premier est qu'ignorer l'inspection ($\lambda = 0$) ne conduit pas ici à une dépréciation plus faible mais plus forte, 63,68~\% contre 55,61~\% : l'âge chronologique seul déclare en fin de vie des composantes d'origine qui fonctionnent encore (gouttières, VRC, balcon, aménagement paysager, armoires) et ramène sous leur vie utile des composantes bien entretenues ; la note d'état corrige dans les deux sens, et l'effet net dépend du bâtiment. Le deuxième est que la note de la structure est le jugement le plus lourd de conséquences : à $\lambda = 0{,}5$, passer de 2 à 4 fait varier la dépréciation de 50,40 à 60,82~\% du coût neuf, soit plus de dix points, parce que le bloc de longue durée représente 43~\% du coût neuf et que sa fraction de vie consommée passe de 0,36 à 0,61. Le troisième est que l'incertitude sur $\lambda$ et celle sur la note se cumulent aux extrêmes : avec $\lambda = 1$ et une structure notée 1, la dépréciation tombe à 27,38~\% ; avec $\lambda = 1$ et une structure notée 5, elle monte à 66,94~\%. Ces écarts sont la raison pour laquelle la convention doit être déclarée, la note de la structure justifiée par des constats précis et, lorsque la fissure ou le mouvement constaté laisse un doute, une expertise recommandée plutôt qu'une note tranchée. Le \cref{ch:20} intégrera cette source d'incertitude à la fourchette de valeur, et le \cref{ch:24} comparera la dépréciation ainsi obtenue à celle que révèle le marché.
461 +
462 +\section{Le formulaire d'inspection et le dossier}\label{sec:11:formulaire}
463 +
464 +L'annexe~\ref{app:formulaires-inspection} fournit les formulaires d'inspection de l'ouvrage ; le présent chapitre en décrit la structure et l'usage sans les reproduire. Le formulaire de la maison unifamiliale et des petits plex est organisé en neuf sections, qui suivent l'ordre de la visite plutôt que celui des méthodes : identification et conditions de l'inspection ; documents consultés et déclarations du vendeur ; site et terrain ; enveloppe extérieure ; structure et fondations ; systèmes ; intérieur par niveau ; contaminants, tests et hypothèses extraordinaires ; synthèse chiffrée. Chaque ligne de composante comporte le matériau, l'année d'installation et sa source, la note d'état de l'\cref{tab:11:echelle}, un constat en quelques mots, un renvoi photographique et une case « à vérifier » qui alimente la liste des hypothèses extraordinaires. La synthèse chiffrée reprend la fiche d'état sous la forme du \cref{tab:11:fiche} et la liste des travaux sous celle du \cref{tab:11:travaux} ; elle est conçue pour être saisie directement dans le script du chapitre, de sorte que l'âge effectif et la dépréciation en découlent sans ressaisie. Le \cref{tab:11:formulaire} en donne le plan.
465 +
466 +\begin{table}[htbp]
467 +\caption{Structure du formulaire d'inspection de l'ouvrage (annexe~\ref{app:formulaires-inspection})}\label{tab:11:formulaire}
468 +\centering
469 +\small
470 +\begin{tabularx}{\textwidth}{clY}
471 +\toprule
472 +Section & Objet & Contenu principal \\
473 +\midrule
474 +1 & Identification et conditions & Adresse, date, heure, météo, personnes présentes, durée, accès refusés ou impossibles \\
475 +2 & Documents et déclarations & Rôle, certificat de localisation, DV/DVD, permis, factures, rapports antérieurs (inspection, tests), garanties GCR \\
476 +3 & Site et terrain & Pente, drainage, arbres, stationnement, dépendances, servitudes apparentes, zone à risque \\
477 +4 & Enveloppe & Toiture et solins, comble (isolant, pare-vapeur, ventilation), murs et revêtement, fenêtres et portes, balcons \\
478 +5 & Structure et fondations & Fondations (fissures, efflorescence), dalle, drain et cheminées, charpente, planchers, signes de mouvement \\
479 +6 & Systèmes & Électricité (panneau, filage), plomberie (matériaux, chauffe-eau, clapet), chauffage (énergie, appareils, réservoir), ventilation \\
480 +7 & Intérieur par niveau & Finitions, cuisine, salles de bain, sous-sol, humidité (hygromètre, humidimètre), odeurs \\
481 +8 & Contaminants, tests et hypothèses & Amiante, vermiculite, MIUF, radon, pyrite, mazout : indices, tests existants, recommandations, hypothèses extraordinaires \\
482 +9 & Synthèse chiffrée & Fiche d'état (note, année, vie utile, coût neuf), travaux immédiats, âge effectif de la structure, indice d'état \\
483 +\bottomrule
484 +\end{tabularx}
485 +\tabsource{plan de l'auteur ; formulaires complets à l'annexe~\ref{app:formulaires-inspection}.}
486 +\end{table}
487 +
488 +Le dossier d'inspection est la preuve de l'étendue du travail. Il contient les photographies numérotées et renvoyées depuis le formulaire, les mesures (\cref{ch:12}), les documents lus et la liste de ce qui n'a pas pu être vu, avec la raison. Cette dernière liste n'est pas un aveu de faiblesse mais une exigence de la norme : la règle 2.3 des NPP veut que l'étendue du travail soit décrite et que les réserves et hypothèses soient énoncées, et la norme de l'AIBQ impose à l'inspecteur de mentionner les systèmes qui n'ont pas été inspectés et d'en donner les raisons \parencite[règle 2.3]{oeaqNormes}. La photographie est le meilleur allié de l'évaluateur en cas de litige ; elle date l'état, fixe l'étendue d'un défaut et permet à un réviseur de contrôler la note attribuée. Enfin, le formulaire d'un immeuble de revenu ajoute à ces sections un relevé par logement, parce que l'état des logements commande le loyer et les réserves (\cref{ch:28,ch:33}), et un relevé des parties communes et des équipements collectifs dont le remplacement pèse sur les flux (\cref{ch:30}).
489 +
490 +\begin{quebec}[Normes, codes et aides : repères québécois pour l'inspection]
491 +Le chapitre I du Code de construction du Québec est fondé, depuis le 17 avril 2025, sur le Code national du bâtiment 2020 modifié pour le Québec ; la Régie du bâtiment a prolongé la période transitoire de sorte que les dispositions antérieures peuvent être appliquées aux travaux commencés avant le 17 octobre 2027 \parencite{codeConstruction,rbqtransition2026}. Pour l'évaluateur, le Code n'est pas un référentiel d'inspection : la norme de l'AIBQ exclut expressément du mandat de l'inspecteur la vérification de la conformité aux codes (art.~12.10), et une maison construite selon le code de son époque n'est pas déficiente parce que le code a changé ; elle peut en revanche être fonctionnellement désuète (\cref{ch:24}). Le chapitre « Bâtiment » de la Loi sur le bâtiment, qui fonde l'inspection par la Régie, exclut la maison unifamiliale et le bâtiment totalement résidentiel de moins de trois étages ou de moins de neuf logements \parencite[art.~29]{loibatiment} : l'inspection des petits bâtiments résidentiels existants relève donc des municipalités, des assureurs et des parties, non d'un contrôle public. Les programmes d'aide influent sur la valeur des corrections : Rénoclimat, refondu le 1\textsuperscript{er} octobre 2026, finance l'isolation du toit, des murs et des fondations ainsi que les fenêtres selon des plafonds publiés, et son volet d'adaptation finance des mesures de protection contre les inondations \parencite{renoclimat,renoclimatnouveautes} ; le \cref{ch:44} en traite. Aucune statistique publique de prévalence des pathologies décrites dans ce chapitre n'a été vérifiée à la date de rédaction : le lecteur ne trouvera donc ici ni pourcentage de maisons touchées par la pyrite, ni proportion de drains colmatés par l'ocre, et il se méfiera des chiffres de cette nature qui circulent sans source.
492 +\end{quebec}
493 +
494 +\begin{erreurs}
495 +\begin{itemize}
496 +\item Présenter l'inspection d'évaluation comme une inspection préachat, ou l'inverse : les mandats, les normes et les responsabilités diffèrent, et un rapport d'évaluation ne certifie pas l'absence de vices.
497 +\item Noter l'état d'après la fiche de courtage ou le rôle sans visiter, puis déprécier par l'âge chronologique : la \cref{sec:11:sensibilite} montre que l'âge seul peut surestimer autant que sous-estimer la dépréciation.
498 +\item Utiliser une note d'état sans déclarer la convention qui la convertit en âge effectif ; deux évaluateurs peuvent obtenir des dépréciations éloignées de dix points avec les mêmes constats.
499 +\item Compter deux fois : déduire le coût de remplacement d'une composante au titre des travaux curables et la déprécier encore comme composante de courte durée, ou appliquer le ratio de la structure à un coût neuf qui contient déjà les composantes dépréciées séparément.
500 +\item Chiffrer soi-même l'excavation d'un remblai, le désamiantage ou le remplacement de fondations sans soumission ni source : la bonne pratique est l'hypothèse extraordinaire, la recommandation et le renvoi au spécialiste.
501 +\item Citer des prévalences de pathologies « bien connues » (pyrite, radon, ocre) sans source publique vérifiée, ou des durées de vie de composantes comme des faits alors qu'elles sont des hypothèses.
502 +\item Négliger les documents : la déclaration du vendeur, les factures, les rapports d'inspection antérieurs et les permis datent les composantes mieux que l'œil et révèlent les sinistres.
503 +\item Oublier de rappeler l'hypothèse extraordinaire à chaque énoncé de la conclusion de valeur, comme l'exige la règle 2.3 des NPP.
504 +\end{itemize}
505 +\end{erreurs}
506 +
507 +\begin{limites}
508 +L'inspection d'évaluation est visuelle, non destructive et limitée aux parties accessibles ; elle ne détecte ni le radon, ni la pyrite, ni l'amiante, ni l'état d'un drain, et le présent chapitre ne prétend pas le contraire. L'échelle d'état à cinq niveaux et la convention d'âge effectif de l'\cref{eq:11:aeff}, avec ses fractions $\varphi(c)$ et son poids $\lambda = 0{,}5$, sont des conventions de l'ouvrage, choisies pour leur transparence et leurs propriétés (\cref{prop:aeff}), non des paramètres estimés sur des données ; d'autres conventions sont défendables et la \cref{sec:11:sensibilite} montre l'ampleur de ce qui en dépend. Les vies utiles des composantes de l'exemple sont des hypothèses pédagogiques et aucune source publique ne les étaye ; dans un mandat réel, l'évaluateur les tire des guides de coûts sous licence ou de l'expérience documentée du marché local. Les constats de l'exemple intégral sont fictifs et les coûts des travaux sont des fractions déclarées de postes d'un devis synthétique ; ils illustrent la mécanique, non des coûts de marché. La frise des pathologies par période est indicative et ne repose sur aucune mesure de prévalence ; seules les dates marquées (v) ont été vérifiées. Les mécanismes des pathologies sont décrits d'après des pages publiques de la Régie du bâtiment, de Santé Canada, de Ressources naturelles Canada et du gouvernement du Québec consultées le 31 octobre 2026, dont le contenu peut changer ; le protocole d'échantillonnage de la pyrite et l'indice IPPG sont des pratiques du marché mentionnées sans source gouvernementale. Enfin, l'état d'avancement de l'encadrement réglementaire des inspecteurs en bâtiment annoncé par la Loi~16 de 2019 n'a pas été vérifié et devra l'être avant publication.
509 +\end{limites}
510 +
511 +\begin{synthese}
512 +\begin{itemize}
513 +\item L'inspection est obligatoire en évaluation (NPP, règle 2.4) et vise à établir l'état du bien pour en déduire la valeur ; l'inspection préachat, régie par la norme de l'AIBQ ou une norme équivalente, informe l'acheteur et exclut expressément la valeur marchande. Les deux ne se substituent pas.
514 +\item Le test de l'acheteur prudent et diligent (art.~1726 C.c.Q., \emph{Marcoux c. Picard}) fixe la frontière entre le vice apparent, qui se négocie dans le prix, et le vice caché, qui relève de la garantie ; la déclaration du vendeur (OACIQ) et le plan de garantie des bâtiments neufs (1, 3 et 5 ans) complètent le cadre.
515 +\item L'enveloppe se lit comme un système de contrôle de l'eau, de l'air, de la vapeur et de la chaleur ; les pathologies québécoises des fondations et des sols (pyrite, pyrrhotite, ocre ferreuse, argile) et les contaminants (amiante, vermiculite, MIUF, radon, moisissures) se reconnaissent à des signes précis et à la période de construction, sans qu'aucune prévalence chiffrée puisse être citée.
516 +\item Un test spécialisé est recommandé lorsque son coût est inférieur à la perte espérée qu'il permet d'éviter, $t < pC$ ; à défaut de test, l'évaluateur formule une hypothèse extraordinaire, en indique l'incidence et la rappelle avec la conclusion.
517 +\item La note d'état (1 à 5) se convertit en âge effectif par la convention $a_{\mathrm{eff}} = (1-\lambda)\,a + \lambda\,\varphi(c)\,L$, bornée à $[0, L]$, qui laisse l'âge chronologique intact lorsque l'état constaté correspond à l'âge attendu et ne déplace l'âge que d'une fraction $\lambda$ de l'écart.
518 +\item La fiche d'état alimente la dépréciation physique ventilée : curable au coût des travaux, courte durée au prorata de l'âge effectif, longue durée par âge-vie sur la base restante. Pour le sujet du cas 1, elle donne 55,61 \% du coût neuf, contre 48,33 \% par âge-vie simple.
519 +\item La note de la structure et le poids $\lambda$ sont les deux jugements les plus lourds de conséquences ; ils se déclarent, se justifient par des constats et des photographies, et s'intègrent à la fourchette d'incertitude de la valeur.
520 +\end{itemize}
521 +\end{synthese}
522 +
523 +\section*{Exercices}
524 +\addcontentsline{toc}{section}{Exercices}
525 +
526 +\begin{exercice}[1]{Deux inspections, deux mandats}{ex:11:1}
527 +Pour chacun des énoncés suivants, dites s'il relève de l'inspection d'évaluation, de l'inspection préachat selon la norme de l'AIBQ, des deux ou d'aucune, et justifiez en une phrase : (a) déterminer la valeur marchande de la propriété ; (b) sonder une solive qui semble détériorée ; (c) estimer la durée de vie résiduelle de la toiture ; (d) prendre connaissance des déclarations du vendeur ; (e) vérifier la conformité de l'installation électrique au Code de construction ; (f) recommander un test de radon ; (g) mentionner au rapport les systèmes qui n'ont pas pu être inspectés et pourquoi.
528 +\end{exercice}
529 +
530 +\begin{exercice}[1]{Lire les signes}{ex:11:2}
531 +Associez chaque constat à la pathologie la plus probable du \cref{tab:11:pathologies} et indiquez la vérification à recommander : (a) dalle de garage bombée, fissures en étoile, maison de 1986 sur la Rive-Sud de Montréal, aucun certificat de remblai ; (b) dépôts rougeâtres gélatineux dans le bassin de captation et odeur de soufre, sol sablonneux ; (c) granules grises et brillantes dans le comble d'une maison de 1965 ; (d) fissure horizontale sur toute la longueur d'un mur de fondation en blocs, avec déversement ; (e) trous de remplissage bouchés dans le haut des murs extérieurs d'une maison de 1976 ; (f) conduits de remplissage et d'évent sortant du sol près du mur, aucun réservoir visible.
532 +\end{exercice}
533 +
534 +\begin{exercice}[2]{Âges effectifs}{ex:11:3}
535 +Appliquez la convention de l'\cref{eq:11:aeff} avec $\lambda = 0{,}5$ et les fractions du \cref{tab:11:echelle} aux composantes suivantes : toiture de 12 ans, vie utile 20 ans, note 4 ; chauffe-eau de 9 ans, vie utile 12 ans, note 2 ; fenêtres de 35 ans, vie utile 30 ans, note 2 ; structure de 45 ans, vie économique 60 ans, note 2. Donnez pour chacune l'âge effectif, la fraction de vie consommée et la vie restante, et commentez le cas des fenêtres.
536 +\end{exercice}
537 +
538 +\begin{exercice}[2]{Dépréciation ventilée}{ex:11:4}
539 +Une maison a un coût neuf de \dollars{300000}. Les travaux immédiats s'élèvent à \dollars{4500}. Les composantes de courte durée sont la toiture (coût neuf \dollars{12000}), le chauffe-eau (\dollars{1500}) et les fenêtres (\dollars{24000}), avec les âges effectifs de l'\cref{ex:11:3} ; la structure a un âge effectif de 30 ans pour une vie économique de 60 ans. Calculez la dépréciation physique par la méthode ventilée (\cref{eq:11:courte,eq:11:longue}) et par la méthode âge-vie simple, puis expliquez l'écart.
540 +\end{exercice}
541 +
542 +\begin{exercice}[2]{Recommander ou non un test}{ex:11:5}
543 +Un test de pyrite coûte \dollars{900} et l'excavation éventuelle \dollars{20000} ; au vu de la période de construction et du secteur, l'évaluateur estime à 8~\% la probabilité d'un remblai gonflant. (a) Calculez la perte espérée sans test, la valeur de l'information et le seuil $p^{*}$ de l'\cref{eq:11:test} ; le test est-il recommandé ? (b) Reprenez le calcul pour un dosimètre de radon à \dollars{50} et une correction de \dollars{2500} : quel est $p^{*}$, et que concluez-vous sur la recommandation du test de radon en général ? (c) En quoi l'hypothèse d'un test parfaitement informatif est-elle plus discutable pour la pyrite que pour le radon ?
544 +\end{exercice}
545 +
546 +\begin{exercice}[3]{Le poids de l'observation}{ex:11:6}
547 +À l'aide de \texttt{analysis/python/cases/ch11\_inspection.py}, recalculez la dépréciation physique du sujet du cas 1 avec $\lambda = 0{,}25$ puis $\lambda = 0{,}75$, la structure restant notée 3. Donnez l'âge effectif de la structure et la dépréciation totale dans chaque cas, puis identifiez les trois composantes dont la dépréciation varie le plus en dollars entre les deux valeurs de $\lambda$. Rédigez ensuite un paragraphe de rapport (150 mots) qui déclare la convention retenue et justifie le choix de $\lambda$ auprès d'un réviseur.
548 +\end{exercice}
549 +
550 +\begin{exercice}[3]{Déclarations du vendeur et hypothèses extraordinaires}{ex:11:7}
551 +Une déclaration du vendeur fictive indique : toiture refaite en 2019 (facture), infiltration d'eau au sous-sol en 2021 « réglée par correction de la pente », aucune connaissance de pyrite, MIUF ou amiante, test de radon « fait il y a longtemps, résultat correct », chauffage au mazout avec réservoir intérieur de 2008, vente « sans garantie légale, aux risques et périls de l'acheteur ». La maison date de 1979 et se trouve dans un secteur où la pyrite est documentée. (a) Dressez la liste des vérifications que l'évaluateur fera pendant la visite et des documents qu'il demandera. (b) Identifiez les éléments qui appellent une hypothèse extraordinaire et rédigez, pour deux d'entre eux, la formulation complète (indice, hypothèse, recommandation, incidence) conforme aux règles 2.1~c) et 2.3 des NPP. (c) Expliquez l'effet de la clause d'exclusion de garantie sur l'utilisation de cette vente comme comparable.
552 +\end{exercice}
553 +
554 +\section*{Pour aller plus loin}
555 +\addcontentsline{toc}{section}{Pour aller plus loin}
556 +
557 +Le traitement de l'inspection et de la description du bâtiment dans la pratique nord-américaine demeure celui de l'Appraisal Institute \parencite{appraisal2026}, dont l'édition canadienne \parencite{appraisalCdn} adapte la terminologie. Le lien entre l'état constaté, l'entretien et la dépréciation est documenté empiriquement par \textcite{knightSirmans1996}, qui montrent l'effet des variables d'état sur les prix, par \textcite{hardingRosenthalSirmans2007}, qui estiment par ventes répétées la dépréciation nette d'entretien et la part que l'entretien compense, et par \textcite{wilhelmsson2008}, qui relie le taux de dépréciation au niveau d'entretien ; \textcite{shillingSirmansDombrow1991} observent une dépréciation plus rapide des maisons locatives que des maisons occupées par leur propriétaire, ce qui éclaire l'inspection des petits immeubles de revenu. Les estimations micro-économiques de \textcite{malpezziOzanneThibodeau1987} fournissent les ordres de grandeur de la dépréciation brute d'entretien que le \cref{ch:24} confronte à l'âge-vie. La typologie des désuétudes de \textcite{baum1991}, issue d'un suivi d'immeubles, et le plaidoyer de \textcite{bowes2011} pour une méthode du coût fondée sur une dépréciation observée complètent le cadre conceptuel. Les textes de référence québécois sont les Normes de pratique professionnelle de l'OEAQ \parencite{oeaqNormes}, le Code civil pour la garantie de qualité \parencite[art.~1726--1733]{ccq}, l'arrêt \emph{Marcoux c. Picard} \parencite{marcouxPicard2008}, les formulaires obligatoires de l'OACIQ \parencite{oaciqFormulaireDV,oaciqFormulairePA} et le Règlement sur le plan de garantie des bâtiments résidentiels neufs \parencite{reglgarantie} ; la norme de pratique de l'AIBQ, les pages de la Régie du bâtiment sur la pyrite, la pyrrhotite, l'ocre et les sols argileux, et celles de Santé Canada sur le radon, les moisissures et l'amiante, citées en note dans ce chapitre, sont les sources publiques à consulter et à dater avant tout rapport.
modified manuscript/chapters/ch17.tex +1 −1
@@ -429,7 +429,7 @@ Prix de vente (\$) & 598 000 & 506 500 & 624 500 & 538 000 & 513 500 \\
429 429 \tabsource{\synth{analysis/python/cases/ch17\_ajustements.py, fonctions \texttt{analyse\_qualitative} et \texttt{encadrement}} ; « inf. » : le comparable est inférieur au sujet (ajustement positif). Encadrement : de \dollars{598000} (plus cher des inférieurs) à \dollars{624500} (seul supérieur).}
430 430 \end{table}
431 431
432 −\section{Pourquoi la grille et le modèle ne concluent pas au même montant}\label{sec:17:residus}
432 +\section{Pourquoi la grille et le modèle divergent}\label{sec:17:residus}
433 433
434 434 L'exemple laisse un écart de près de dix pour cent entre la moyenne des prix ajustés (\dollars{581595}) et la prédiction du modèle hédonique pour le sujet (\dollars{637953}), alors que la grille est dérivée de ce même modèle. L'écart n'est ni une erreur ni un paradoxe ; il résulte d'une identité qu'il vaut la peine d'établir, parce qu'elle éclaire ce que la méthode de comparaison mesure réellement.
435 435
modified manuscript/chapters/ch18.tex +4 −4
@@ -1,6 +1,6 @@
1 1 \chapter{Modèles hédoniques}\label{ch:18}
2 2
3 −Les deux chapitres précédents ont posé la méthode de comparaison comme l'estimation d'une espérance conditionnelle à partir de quelques ventes voisines du sujet, corrigées de leurs différences par des ajustements. Chaque ajustement suppose connu le \emph{prix implicite} d'une caractéristique, c'est-à-dire ce que le marché paie, toutes choses égales par ailleurs, pour un mètre carré de plus, une place de garage ou un secteur mieux coté. Le modèle hédonique est l'outil qui estime ces prix implicites de façon simultanée, sur des centaines ou des milliers de ventes, en décomposant le prix d'un immeuble en la somme des contributions de ses attributs. Le présent chapitre en expose le fondement économique, dû à Lancaster et à Rosen, sa spécification, son estimation par les moindres carrés, ses diagnostics et son emploi en évaluation : prix implicites pour alimenter la grille du \cref{ch:17}, prédiction directe de la valeur d'un sujet avec son intervalle, et modèles d'évaluation de masse pour le rôle foncier du \cref{ch:9}. L'exemple intégral estime le modèle de référence de l'ouvrage sur les 600 ventes synthétiques du cas 1 ; comme les lois qui ont engendré ces ventes sont connues, le lecteur peut vérifier que le modèle retrouve bien ce qu'il est censé mesurer, ce qu'aucune donnée réelle ne permet jamais. Les extensions spatiales et temporelles sont réservées au \cref{ch:19}, les indices au \cref{ch:35}, l'apprentissage automatique au \cref{ch:37} et les intervalles bayésiens au \cref{ch:39}.
3 +Les deux chapitres précédents ont posé la méthode de comparaison comme l'estimation d'une espérance conditionnelle à partir de quelques ventes voisines du sujet, corrigées de leurs différences par des ajustements. Chaque ajustement suppose connu le \emph{prix implicite} d'une caractéristique, c'est-à-dire ce que le marché paie, toutes choses égales par ailleurs, pour un mètre carré de plus, une place de garage ou un secteur mieux coté. Le modèle hédonique est l'outil qui estime ces prix implicites de façon simultanée, sur des centaines ou des milliers de ventes, en décomposant le prix d'un immeuble en la somme des contributions de ses attributs. Le présent chapitre en expose le fondement économique, dû à Lancaster et à Rosen, sa spécification, son estimation par les moindres carrés, ses diagnostics et son emploi en évaluation : prix implicites pour alimenter la grille du \cref{ch:17}, prédiction directe de la valeur d'un sujet avec son intervalle, et modèles d'évaluation de masse pour le rôle foncier du \cref{ch:09}. L'exemple intégral estime le modèle de référence de l'ouvrage sur les 600 ventes synthétiques du cas 1 ; comme les lois qui ont engendré ces ventes sont connues, le lecteur peut vérifier que le modèle retrouve bien ce qu'il est censé mesurer, ce qu'aucune donnée réelle ne permet jamais. Les extensions spatiales et temporelles sont réservées au \cref{ch:19}, les indices au \cref{ch:35}, l'apprentissage automatique au \cref{ch:37} et les intervalles bayésiens au \cref{ch:39}.
4 4
5 5 \begin{objectifs}
6 6 À la fin de ce chapitre, le lecteur sait :
@@ -118,7 +118,7 @@ Qualité (1 à 5) & écart à 3 & échelle ordinale traitée comme un écart à
118 118 Garage (places), sous-sol fini, piscine & comptage ou indicatrice 0/1 & effets proportionnels par équipement \\
119 119 Type de bâtiment & indicatrice « à étages » (plain-pied en référence) & \\
120 120 Secteur & quatre indicatrices (Hull en référence) & sous-marchés de Gatineau \\
121 −Distance au centre (km) & $\max(d - 3, 0)$ & plateau de 3 km autour du centre, puis gradient (\cref{ch:5}) \\
121 +Distance au centre (km) & $\max(d - 3, 0)$ & plateau de 3 km autour du centre, puis gradient (\cref{ch:05}) \\
122 122 Date de vente & mois écoulés depuis le 1\ier{} juillet 2024 & tendance linéaire du marché ; indicatrices trimestrielles en variante \\
123 123 \bottomrule
124 124 \end{tabularx}
@@ -352,7 +352,7 @@ un intervalle asymétrique en dollars, plus long vers le haut. C'est ce que calc
352 352
353 353 \subsection{Du modèle à l'évaluation de masse}
354 354
355 −Lorsque le même modèle sert à estimer des milliers de valeurs à une date de référence commune, on parle d'\motcle{évaluation de masse} (en anglais \emph{mass appraisal}) et, lorsque le processus est automatisé de bout en bout, de modèle d'évaluation automatisé (\emph{automated valuation model}, AVM). Le modèle hédonique en est l'outil central depuis les travaux de \textcite{gloudemans1999} et le manuel de \textcite{gloudemansAlmy2011}, et l'IAAO lui consacre deux normes, le \emph{Standard on Mass Appraisal of Real Property} \parencite{iaaomass2025} et le \emph{Standard on Automated Valuation Models} \parencite{iaaoavm2018}, qui renvoient toutes deux au \emph{Standard on Ratio Studies} \parencite{iaaoratio2013} pour la mesure de la qualité. La différence avec l'évaluation individuelle n'est pas dans l'équation mais dans l'objectif : le modèle de masse doit être juste \emph{en moyenne} et \emph{uniformément} sur l'ensemble du parc, non précis pour un sujet donné, et il doit l'être à une date de référence passée plutôt qu'à la date du rapport. Le \cref{ch:9} expose le cadre québécois du rôle d'évaluation foncière ; cette section en présente les instruments de mesure et les applique au modèle de l'exemple.
355 +Lorsque le même modèle sert à estimer des milliers de valeurs à une date de référence commune, on parle d'\motcle{évaluation de masse} (en anglais \emph{mass appraisal}) et, lorsque le processus est automatisé de bout en bout, de modèle d'évaluation automatisé (\emph{automated valuation model}, AVM). Le modèle hédonique en est l'outil central depuis les travaux de \textcite{gloudemans1999} et le manuel de \textcite{gloudemansAlmy2011}, et l'IAAO lui consacre deux normes, le \emph{Standard on Mass Appraisal of Real Property} \parencite{iaaomass2025} et le \emph{Standard on Automated Valuation Models} \parencite{iaaoavm2018}, qui renvoient toutes deux au \emph{Standard on Ratio Studies} \parencite{iaaoratio2013} pour la mesure de la qualité. La différence avec l'évaluation individuelle n'est pas dans l'équation mais dans l'objectif : le modèle de masse doit être juste \emph{en moyenne} et \emph{uniformément} sur l'ensemble du parc, non précis pour un sujet donné, et il doit l'être à une date de référence passée plutôt qu'à la date du rapport. Le \cref{ch:09} expose le cadre québécois du rôle d'évaluation foncière ; cette section en présente les instruments de mesure et les applique au modèle de l'exemple.
356 356
357 357 \subsection{COD, PRD et PRB}
358 358
@@ -391,7 +391,7 @@ Plage IAAO, unifamilial, secteurs anciens ou hétérogènes & {0,90--1,10} & {5,
391 391
392 392 Appliquées au modèle de référence, ces statistiques donnent un COD de 6,68 sur l'échantillon d'estimation et de 6,83 en validation croisée à dix plis, c'est-à-dire lorsque chaque vente est prédite par un modèle estimé sans elle : le modèle est à peine moins bon hors échantillon qu'en échantillon, ce qui est le signe d'une spécification parcimonieuse, et il se situe dans la plage la plus exigeante de l'IAAO. Le PRD de 1,007 est dans la plage. Le PRB de $-0{,}058$ (erreur-type 0,011) est, lui, légèrement en deçà de $-0{,}05$, et le lecteur doit comprendre pourquoi avant d'y voir un défaut : la variable de référence de l'\cref{eq:18:prb} contient le prix de vente, qui contient le bruit de transaction $\varepsilon_i$ ; une vente conclue au-dessus de ce que ses caractéristiques justifient a un prix élevé \emph{et} un ratio faible, ce qui crée une corrélation négative mécanique entre le ratio et la valeur de référence même pour un modèle parfaitement spécifié. Sur des données synthétiques où le modèle est connu pour être sans biais, ce PRB négatif mesure cet artefact, dont l'ampleur croît avec $\sigma$ ; sur des données réelles, l'analyste doit le garder à l'esprit avant de conclure à une régressivité, et la norme elle-même invite à interpréter le PRB avec son intervalle de confiance.
393 393
394 −La troisième ligne du tableau applique les mêmes statistiques à la valeur au rôle fictive du jeu (\texttt{valeur\_role\_2025}), qui a été engendrée comme 93 \% de la valeur à la date de référence du 1\ier{} juillet 2024 avec un bruit d'écart-type 0,07, en ramenant d'abord chaque prix de vente à cette date par la tendance du modèle ($P_i \exp(-\hat\beta_{\text{mois}}\,\text{mois}_i)$), comme le prescrit le Règlement sur la proportion médiane pour les ventes qui ne sont pas contemporaines de la date de référence \parencite[art.~11--12]{reglpropmed}. La médiane des ratios est de 0,925, le COD de 6,12, le PRD de 0,999 et le PRB de $+0{,}064$ : un rôle uniforme mais sous-évalué de 7,5 \%, ce qui est précisément ce que la loi de génération a construit. Sans rajustement temporel (quatrième ligne), le COD monte à 6,90 parce que la dérive des prix sur trois ans et demi s'ajoute à la dispersion des ratios : c'est l'illustration de la raison pour laquelle les études de ratios ramènent les prix à la date de référence avant toute comparaison. Pour le sujet lui-même, dont la valeur au rôle fictive est de \dollars{468000}, le modèle prédit \dollars{580375} au 1\ier{} juillet 2024, soit un ratio de 0,81, bien en deçà de la médiane de 0,925 du rôle fictif : le dossier de contestation du \cref{ch:9} part de ce constat.
394 +La troisième ligne du tableau applique les mêmes statistiques à la valeur au rôle fictive du jeu (\texttt{valeur\_role\_2025}), qui a été engendrée comme 93 \% de la valeur à la date de référence du 1\ier{} juillet 2024 avec un bruit d'écart-type 0,07, en ramenant d'abord chaque prix de vente à cette date par la tendance du modèle ($P_i \exp(-\hat\beta_{\text{mois}}\,\text{mois}_i)$), comme le prescrit le Règlement sur la proportion médiane pour les ventes qui ne sont pas contemporaines de la date de référence \parencite[art.~11--12]{reglpropmed}. La médiane des ratios est de 0,925, le COD de 6,12, le PRD de 0,999 et le PRB de $+0{,}064$ : un rôle uniforme mais sous-évalué de 7,5 \%, ce qui est précisément ce que la loi de génération a construit. Sans rajustement temporel (quatrième ligne), le COD monte à 6,90 parce que la dérive des prix sur trois ans et demi s'ajoute à la dispersion des ratios : c'est l'illustration de la raison pour laquelle les études de ratios ramènent les prix à la date de référence avant toute comparaison. Pour le sujet lui-même, dont la valeur au rôle fictive est de \dollars{468000}, le modèle prédit \dollars{580375} au 1\ier{} juillet 2024, soit un ratio de 0,81, bien en deçà de la médiane de 0,925 du rôle fictif : le dossier de contestation du \cref{ch:09} part de ce constat.
395 395
396 396 \begin{quebec}[La proportion médiane et l'uniformité du rôle]
397 397 Le cadre québécois formalise, pour le rôle d'évaluation foncière, des mesures voisines de celles de l'IAAO. L'article 264 de la Loi sur la fiscalité municipale prévoit que l'évaluateur établit « à quelle proportion médiane de la valeur foncière réelle des unités d'évaluation correspondent les valeurs inscrites au rôle », ainsi que le facteur comparatif, inverse de cette proportion \parencite[art.~264]{lfm}. Le Règlement sur la proportion médiane du rôle d'évaluation foncière fixe la méthode de l'étude de ratios : ventes d'au moins \dollars{5000} (art.~2), liste de base d'au moins trente ventes (art.~5), ventes du deuxième exercice précédent (art.~6), rajustement des prix aux conditions du marché au 1\ier{} juillet de cet exercice (art.~11-12), épuration des ratios situés à plus de deux écarts-types de la médiane (art.~15-16), puis médiane des ratios restants (art.~18-19) \parencite{reglpropmed}. Le Règlement sur le rôle d'évaluation foncière exige qu'après équilibration la proportion médiane soit « d'au moins 95 \% et d'au plus 105 \% » (art.~13 al.~2) et plafonne l'écart-type relatif à la médiane des ratios, de 14 \% à 36 \% selon l'indice de concentration résidentielle unifamiliale de la municipalité (art.~14 et annexe III) \parencite{reglrole}. Cet écart-type relatif joue le rôle du COD, avec un seuil beaucoup moins exigeant que les plages de l'IAAO, et la proportion médiane celui du niveau d'évaluation, avec une plage de $\pm 5$ \% au lieu de $\pm 10$ \%. Le Manuel d'évaluation foncière du Québec, édition 2026, consacre sa partie 3 au processus d'évaluation, dont la mesure des taux de variation du marché (3A), l'équilibration (3B) et la comparaison (3C), qui mettent en œuvre des modèles de la famille présentée ici \parencite{mefqpartie3} ; son contenu est protégé par le droit d'auteur du gouvernement du Québec et n'est pas reproduit. À titre d'ordre de grandeur, la Ville de Gatineau publie des facteurs comparatifs de 1,00 pour 2024, 0,98 pour 2025 et 1,02 pour 2026 \parencite{gatmutations}, soit des proportions médianes de 100 \%, d'environ 102 \% et d'environ 98 \% : le rôle fictif du cas 1, à 92,5 \%, ne satisferait pas l'exigence de l'article 13 du règlement, et c'est volontaire. Textes consultés sur LégisQuébec et Québec.ca le 31 octobre 2026.
modified verification/chapters/ch17-claims.csv +1 −0
@@ -12,3 +12,4 @@ CLM-17-10,17,"Rôle 2027-2029 de Gatineau : médiane unifamiliale +9,06 % (454 6
12 12 CLM-17-11,17,"Duan (1983) : correction de retransformation (smearing) utilisée par traite.cas1.predire",lib-ch17:duan1983,"JASA 78(383) 605-610, DOI 10.1080/01621459.1983.10478017 vérifié Crossref 2026-10-31 ; non cité (clé absente de library.bib), mentionné en toutes lettres",2026-10-31,verifie,
13 13 CLM-17-12,17,"Northcraft & Neale (1987), Diaz (1997) : ancrage des évaluateurs sur un prix demandé / sur l'opinion préalable",lib:northcraftNeale1987,"notes-D §ch. 16-17 ; déjà cités au ch. 16",2026-10-31,verifie,
14 14 CLM-17-13,17,"Pace (1998) GAM pour ajustements non linéaires ; Pace (1998) total grid estimation ; Cropper, Deck & McConnell (1988) robustesse des formes simples aux variables omises ; Malpezzi (2003) biais d'omission",lib:pace1998grid,"notes-D §ch. 17-18 ; clés présentes dans library.bib",2026-10-31,verifie,"résumés de portée générale, pas de chiffre repris"
15 +CLM-17-14,17,"Taux hypothécaires canadiens à taux fixe : taux nominaux composés semestriellement (Loi sur l'intérêt, L.R.C. 1985, c. I-15, art. 6) ; taux mensuel équivalent (1+i/2)^(1/6) − 1 utilisé dans l'exemple de financement",app:conventions-calcul,"manuscript/appendices/conventions-calcul.tex §Taux d'intérêt ; fonction traite.finance.taux_mensuel_canadien",2026-10-31,verifie,"exemple de financement pédagogique (montants fictifs)"
added verification/chapters/ch17.md +9 −0
@@ -0,0 +1,9 @@
1 +# Chapitre 17 — Ajustements qualitatifs et quantitatifs (bilan, 2026-10-31)
2 +
3 +- `tools/compile_chapter.sh 17` : **OK ch17 : 37 pages (chapitre 29 p. + solutions + bibliographie), 0 référence/citation non définie, 0 overfull hbox**. `python3 -m pytest -q analysis/python/tests/test_ch17.py` : **14 tests verts** (identités, chiffres du texte, solutions des 7 exercices). `python3 tools/check_manuscript.py --no-log` : aucun problème signalé pour ch17 (le seul problème listé concerne ch11). Inspection visuelle du PDF faite (37 pages).
4 +- Compteurs : 12 851 mots (`wc -w` sur ch17.tex ; ≈ 9 000 mots de prose hors tableaux/équations/TikZ) ; 18 équations numérotées ; 9 tableaux ; 5 figures (4 PDF Matplotlib + 1 schéma TikZ) ; 1 définition ; 2 propositions démontrées (commutativité de la cascade ; prix ajusté = prédiction × facteur résiduel) ; 1 exemple intégral en 7 étapes ; 7 exercices (2 × niveau 1, 3 × niveau 2, 2 × niveau 3) avec solutions ; encadrés quebec × 1, pratique, erreurs, limites, synthese, synthetique.
5 +- Données : cas 1 (synthétique, graine 20261031) ; **mêmes cinq comparables que le ch. 16** (G0574, G0404, G0468, G0477, G0575) via `traite.cas1.selection()` ; grille = `traite.cas1.ajustements_hedoniques` utilisée telle quelle ; paires construites dans les 600 ventes par `analysis/python/cases/ch17_ajustements.py` (critères déclarés : même secteur/type/qualité/piscine, autre binaire identique, superficie ±5 %, âge ±5 ans, dates ≤ 12 mois, alignement temporel par le taux mensuel du modèle).
6 +- Résultats à reprendre au **ch. 20** : prix ajustés 640 247 / 541 222 / 572 793 / 568 853 / 584 862 $ ; moyenne 581 595 $ ; médiane 572 793 $ ; poids inverse du brut 0,179 / 0,327 / 0,202 / 0,159 / 0,133 ; **valeur pondérée 575 565 $** (arrondie 575 000 $) ; étendue 541 222–640 247 $ (17,2 %) ; écart-type pondéré 33 997 $ ; prédiction hédonique 637 953 $ (point 635 821 $, Duan 1,0034, IC 95 % 539 682–749 087 $) ; résidus log des comparables +0,007 / −0,161 / −0,104 / −0,111 / −0,084, moyenne exp(e)−1 = −8,53 % ; identité P_aj_j = exp(x_s'β)·exp(e_j) vérifiée au dollar près. Ajustement de temps : 0,364 %/mois = 4,46 %/an (génération 4,43 %). Paires : garage n = 15, 7 991 ± 16 594 $ (hédonique 17 155 $) ; sous-sol n = 14, 23 623 ± 6 255 $ (hédonique 10 394 $). Sensibilité : omission du temps −30 357 $, omission de la qualité +21 687 $, taux 3–6 % → 16 734 $ d'étendue.
7 +- Registres : `verification/chapters/ch17-{figures,calculations,claims,registry}.csv` (5 figures, 13 calculs, 14 affirmations, 3 sources nouvelles) ; `references/lib-ch17.bib` : duan1983, giles1982, vanGarderenShah2002 (vérifiées Crossref 2026-10-31, **non citées par clé** — mentionnées en toutes lettres dans le texte, à fusionner dans library.bib puis à convertir en \textcite à l'harmonisation).
8 +- Points non vérifiés / à signaler : ordre conventionnel des ajustements et seuils 25 %/15 % = pratique courante (appraisal2026 non ouvert à la page, statut partiellement_verifie) ; contenu détaillé des parties 3A/3C du MEFQ non dépouillé (seul le titre de la partie 3 est attesté) ; exemple de financement (balance de prix de vente) entièrement pédagogique ; les références croisées fines vers le ch. 16 (eq:16:*, prop:indication, tab:16:comparables) ont été remplacées par des renvois textuels parce que `make_labels.py` ne résout que `ch:NN` et `app:*` en compilation isolée — à reconvertir en `\cref` lors de la compilation du livre complet si souhaité.
9 +- Suggestions pour l'harmonisation : le ch. 20 doit discuter l'écart −8,5 % (bruit de cinq transactions sélectionnées par attributs vs information locale) et noter que l'indication par comparaison et la prédiction hédonique partagent le même modèle (non indépendantes) ; le ch. 18 peut renvoyer à la prop. 17.2 et au tab. 17.7 (HP/Kennedy) ; le ch. 19 peut reprendre la limite « ajustement de localisation nul à l'intérieur d'un secteur ».
added verification/chapters/ch18.md +41 −0
@@ -0,0 +1,41 @@
1 +# Chapitre 18 — Modèles hédoniques : bilan de rédaction (2026-10-31)
2 +
3 +## Compteurs
4 +- Prose : ≈ 12 950 mots (regex de `tools/check_manuscript.py` sur `manuscript/chapters/ch18.tex`, tableaux compris) ; 39 pages compilées (chapitre + solutions + bibliographie du chapitre).
5 +- Figures : 6 PDF Matplotlib (`ch18-fig-formes`, `-diagnostics`, `-predit-observe`, `-surface`, `-prix-implicites`, `-indice`), toutes synthétiques (cas 1, graine 20261031), produites par `analysis/python/figures/ch18_figures.py`.
6 +- Tableaux : 8 (formes fonctionnelles, variables du modèle, résultats de régression avec HC1 et paramètres vrais, diagnostics, six variantes, prix implicites au sujet, statistiques de ratio vs plages IAAO, sensibilité à l'échantillon).
7 +- Équations numérotées : 19 (Rosen, linéaire, semi-log, Box–Cox et sa log-vraisemblance, Halvorsen–Palmquist, Kennedy, biais d'omission, MCO, HC1, Breusch–Pagan, VIF, Cook, retransformation, Duan, intervalle de prédiction, COD, PRD, PRB) ; 1 définition (prix implicite) ; 1 exemple intégral en cinq étapes.
8 +- Exercices : 8 (niveaux 1, 1, 2, 2, 2, 3, 3, 3) ; solutions détaillées dans `solutions/ch18.tex`, chiffres testés (`test_solutions_exercices`).
9 +- Encadrés : objectifs, synthetique, exemple, quebec (proportion médiane et uniformité du rôle), pratique, erreurs (9), limites (6), synthese (7).
10 +- Citations : 38 clés, toutes présentes dans `references/library.bib` (vérifié par grep) ; aucune nouvelle clé citée.
11 +
12 +## Contrôles
13 +- `tools/compile_chapter.sh 18` → `OK ch18 : 39 pages, 0 references/citations non definies, 0 overfull hbox`.
14 +- `python3 -m pytest -q analysis/python/tests/test_ch18.py` → 9 passed.
15 +- `python3 tools/check_manuscript.py --no-log` : aucun problème imputable au ch. 18 (le seul signalé concerne ch11).
16 +- PDF inspecté page par page (planches 40 dpi + figures à 80 dpi) : aucun débordement ; les six figures sont lisibles ; les étiquettes des comparables sur la figure prédit/observé ont été décalées pour éviter les chevauchements.
17 +- Convention `\cref` sans article : articles et prépositions écrits à la main partout.
18 +
19 +## Modèle de référence et cohérence inter-chapitres
20 +- `traite.cas1.hedonique` n'a pas été modifié ni redéfini ; la bibliothèque `traite/` est inchangée. Toutes les variantes, diagnostics et statistiques sont des fonctions de `analysis/python/cases/ch18_hedonique.py`.
21 +- Chiffres partagés : R² = 0,853, σ = 0,083, prédiction 637 953 $ (Duan 1,00335), IC 95 % [539 682 ; 749 087] (ch. 17, 20, 39, 45) ; croissance 0,364 %/mois ≈ 4,46 %/an (ch. 17, 35) ; COD du modèle 6,68 in-sample / 6,83 en validation croisée (ch. 9, 37) ; résidus des cinq comparables du ch. 16 : moyenne −8,7 % (le brief ch. 17/20 dit « ≈ −8,5 % » ; la valeur exacte est −8,67 %, à harmoniser) ; I de Moran des résidus −0,013 (z −0,59) : rien à trouver spatialement sur ce jeu, à signaler au rédacteur du ch. 19.
22 +- Pour le ch. 9 : ratio rôle fictif/prédiction au 2024-07-01 du sujet = 468 000 / 580 375 = 0,81 ; étude de ratios du rôle fictif (600 ventes, prix ramenés à la date de référence) : médiane 0,925, COD 6,12, PRD 0,999, PRB 0,064.
23 +
24 +## Points non vérifiés ou partiellement vérifiés (voir ch18-claims.csv)
25 +1. Plages IAAO (COD, PRD, PRB) : édition 2013 du Standard on Ratio Studies consultée sur une copie tierce ; révision annoncée sur la page IAAO (CLM-18-01).
26 +2. Belsley, Kuh & Welsch (1980) : notice Wiley/DOI non ouverte à la page ; seuil VIF > 10 présenté comme convention (CLM-18-11, partiellement_verifie).
27 +3. Version « Koenker » du test de Breusch–Pagan : nommée, non référencée (Koenker 1981 non vérifié, non ajouté) (CLM-18-15, non_verifie).
28 +4. Seuil 4/n de Cook : convention d'usage, déclarée comme telle (CLM-18-16).
29 +5. Court (1939) : pagination issue de la littérature secondaire (statut inchangé, notes-D).
30 +6. Facteurs comparatifs de Gatineau lus sur la page municipale des droits de mutation, non sur la lettre d'approbation du MAMH (CLM-18-07).
31 +
32 +## Nouvelles références (non citées, `references/lib-ch18.bib`)
33 +`duan1983`, `white1980`, `breuschPagan1979`, `cook1977` vérifiées par Crossref (DOI) ; `belsleyKuhWelsch1980` partiellement vérifiée. Dans le chapitre, elles sont données en toutes lettres avec leur DOI en notes de bas de page ; après fusion dans `library.bib`, remplacer ces notes par `\parencite{}` (cinq occurrences, repérables par « vérifié ; \texttt{lib-ch18.bib} »).
34 +
35 +## Suggestions pour l'harmonisation
36 +- Ch. 17/20 : remplacer « ≈ −8,5 % » par « −8,7 % » (moyenne des résidus logarithmiques des cinq comparables, −0,0907) ou citer les deux ; la moyenne des prix ajustés du ch. 17 (≈ 582 k$) et la prédiction 637 953 $ sont cohérentes avec ce chiffre.
37 +- Ch. 19 : réutiliser `ch18_hedonique.moran_residus` et le résultat I = −0,013 comme point de départ (« test négatif sur données sans structure spatiale ») avant d'ajouter une structure simulée.
38 +- Ch. 35 : l'indice trimestriel par indicatrices (`indice_trimestriel`) et sa comparaison à la tendance (écart absolu moyen 2,57 %, dernier trimestre +5 % sur 22 ventes) peuvent être repris tels quels.
39 +- Ch. 37 : la validation croisée à 10 plis (graine 20261031, COD 6,83, RMSE 40 888 $) est la référence à battre par les modèles d'apprentissage ; réutiliser `validation_croisee` pour des plis identiques.
40 +- Ch. 9 : statistiques du rôle fictif ci-dessus ; la médiane de 0,925 est hors de la plage 95-105 % du règlement F-2.1 r. 13 (volontaire dans la génération).
41 +- Glossaire : `\motcle` posés pour fonction de prix hédonique, fonction d'enchère, prix implicite, linéaire, semi-logarithmique, log-log, évaluation de masse, étude de ratios, coefficient de dispersion, différentiel relatif aux prix, biais relatif aux prix.
modified verification/claims.csv +1 −0
@@ -447,3 +447,4 @@ CLM-APPC-12,appC,Règle 2.3 élément 7 : réserves et hypothèses de base ; ann
447 447 CLM-APPC-13,appC,Règle 2.3 élément 10 : justifier le rejet d'une méthode traditionnelle ; élément 11 : conformité à la substance et écarts aux directives,SRC-C-001,NPP (notes-C §3.1),2026-10-31,verifie,
448 448 CLM-APPC-14,appC,Convention de l'ouvrage : réserve incluse dans le RNE de la capitalisation directe ; CAPEX explicites dans le DCF ; composition semestrielle des hypothèques,CONV,manuscript/appendices/conventions-calcul.tex,2026-10-31,verifie,cohérence interne de l'ouvrage (pas une source externe)
449 449 CLM-APPC-15,appC,Identités (C.1)-(C.4) : RBE = RBP(1−v)+autres ; RNE = RBE−DE−RR ; V = RNE/R ; RCD = RNE/SD ; RPV = M0/V,CONV,CONVENTIONS.md §4 et traite/finance,2026-10-31,verifie,notation de l'ouvrage
450 +CLM-17-14,17,"Taux hypothécaires canadiens à taux fixe : taux nominaux composés semestriellement (Loi sur l'intérêt, L.R.C. 1985, c. I-15, art. 6) ; taux mensuel équivalent (1+i/2)^(1/6) − 1 utilisé dans l'exemple de financement",app:conventions-calcul,manuscript/appendices/conventions-calcul.tex §Taux d'intérêt ; fonction traite.finance.taux_mensuel_canadien,2026-10-31,verifie,exemple de financement pédagogique (montants fictifs)
450 451
Menu

Theme