# WP20 cost schedule — every parameter carries a `source` (verified public figure) or is labelled `assumption` # (author assumption with the sensitivity range used in Experiments 7–8 and the Monte Carlo of Experiment 14). # Currency: CAD. Base valuation date: 2026-Q2 (listing window 2026-08 → 2026-10). version: 1.0 valuation_quarter: "2026-04-01" # StatCan refPer label for 2026-Q2 rcn: # Two published anchors for the per-area cost of a new single-family house. Anchor B (Québec, 2026) is the headline # because it is province- and date-specific; anchor A (Altus, Montréal hard costs) is reported as a lower-bound alternative. anchor_default: B anchors: A: label: "Altus Group 2026 Canadian Cost Guide, Montréal hard construction cost (via NerdWallet Canada), $155–215/sq ft, single-family with unfinished basement" reference_storeys: "1" # band not storey-specific; treated as the one-storey reference (assumption) reference_quarter: "2026-01-01" grade_per_sqft: {basic: 155, standard: 175, upgraded: 195, luxury: 230} grade_sensitivity_per_sqft: {basic: [140, 170], standard: [160, 195], upgraded: [180, 215], luxury: [205, 280]} storey_multiplier: {"1": 1.00, "1.5": 0.97, "2": 0.93, "2.5": 0.92, "3": 0.92} # assumption B: label: "Québec industry guides 2026 (Soumission Rénovation, updated 2026-08-31, citing SHQ 2026 data: standard finish $280–325/sq ft, cottage with unfinished basement $230–285, high-end $350+; Dessins Drummond, updated 2026-09-24: $260–350/sq ft, cottage ≈ $280, bungalow ≈ $345); excludes land, servicing, soil tests, professional fees, landscaping" reference_storeys: "2" # the quoted standard band describes a two-storey 'cottage' reference_quarter: "2026-07-01" # treated as current (no BCPI beyond 2026-Q2; factor 1) grade_per_sqft: {basic: 257, standard: 302, upgraded: 340, luxury: 400} grade_sensitivity_per_sqft: {basic: [230, 285], standard: [280, 325], upgraded: [325, 375], luxury: [350, 450]} # bungalow ≈ cottage + $100/sq ft (Soumission Rénovation) and 345 vs 280 (Dessins Drummond) → one-storey ≈ 1.25× two-storey storey_multiplier: {"1": 1.25, "1.5": 1.12, "2": 1.00, "2.5": 0.97, "3": 0.97} # Legacy single-anchor fields (kept for reference; the model reads `anchors`) # Hard construction cost per square foot, single-family house with unfinished basement, excluding land, Montréal, # Altus Group 2026 Canadian Cost Guide as tabulated by NerdWallet Canada (secondary source; see docs/institutional_sources.md). base_band_per_sqft_montreal: {low: 155, high: 215} base_band_source: "Altus Group, 2026 Canadian Cost Guide, via NerdWallet Canada table (accessed 2026-10-20); secondary source" base_band_reference_quarter: "2026-01-01" # guide published 2026-04-23; costs taken as early-2026 (assumption) # Finish-grade mapping onto the band (assumption: linear placement within the published band; luxury may exceed it) grade_per_sqft: {basic: 155, standard: 175, upgraded: 195, luxury: 230} grade_sensitivity_per_sqft: {basic: [140, 170], standard: [160, 195], upgraded: [180, 215], luxury: [205, 280]} # Storey multiplier on per-area cost (assumption: foundation and roof are spread over more floor area in taller houses) storey_multiplier: {"1": 1.00, "1.5": 0.97, "2": 0.93, "2.5": 0.92, "3": 0.92} storey_multiplier_sensitivity: 0.03 # Party-wall adjustment for attached houses (assumption) attached_multiplier: {detached: 1.00, semi_detached: 0.97, row_or_townhouse: 0.94} # Add-ons (assumptions, CAD, 2026) — sensitivity ±30 % basement_finish_per_sqft: {finished: 45, partially_finished: 22, unfinished: 0} garage: {attached: 35000, detached: 45000, carport: 8000, none_visible: 0, none: 0} add_on_sensitivity: 0.30 # Indirect (soft) costs and entrepreneurial incentive on top of hard costs (assumptions; standard cost-approach components) soft_cost_share: 0.10 soft_cost_sensitivity: [0.05, 0.15] entrepreneurial_incentive: 0.08 entrepreneurial_incentive_sensitivity: [0.0, 0.15] site_improvements: baseline_share_of_rcn: 0.02 # driveway, landscaping, fences (assumption; sensitivity 0–4 %) pool: {inground: 60000, above_ground: 8000, none: 0} # assumption, text-claimed only; sensitivity ±40 % temporal_regional: # Statistics Canada table 18-10-0289-01, single-detached house, division composite, 2023 = 100 (data/raw/statcan/) statcan_vectors: {montreal: 1617911556, quebec: 1617911172, gatineau: 1617912324, composite: 1617908100} cma_to_series: {montreal: montreal, quebec: quebec, gatineau: gatineau, sherbrooke: composite, trois-rivieres: composite, saguenay: composite, other: composite} # Cross-CMA cost LEVEL is not published for Québec City; baseline assumes the Montréal level everywhere # (regional_level_factor = 1.0) and Experiment 7 varies it in [0.90, 1.10] and under the "relative growth since 2023" scenario. regional_level_factor: 1.0 regional_level_sensitivity: [0.90, 1.10] # Dessins Drummond (2026): building in Montréal or Québec City costs 10–25 % more than in other regions → scenario non_metro_discount_scenario: {metro_cmas: [montreal, quebec, gatineau], factor_other: 0.85} depreciation: method: "straight-line age–life with condition-adjusted effective age (physical); functional and external = 0 in baseline" economic_life_years: 60 economic_life_sensitivity: [50, 75] max_physical: 0.85 # effective age = chronological age × condition factor (composite 1–5 condition score; 3 = average → factor 1) condition_factor: {1: 1.40, 2: 1.20, 3: 1.00, 4: 0.75, 5: 0.55} condition_factor_strength_sensitivity: [0.5, 1.5] # scales the deviation of the factor from 1 renovation_extensive_years_removed: 10 renovation_partial_years_removed: 4 min_effective_age: 1 external_obsolescence_scenario: 0.10 land: source: "assessment roll land value (valeur_terrain) at the roll market-condition date (LFM art. 46)" index: "Vrai Prix monthly single-family price index (market_index, type unifamilial) from roll date month to 2026-07" index_share_applied: 1.0 # baseline: full indexing; sensitivity {0.0, 0.5, 1.0} (land vs house price growth differ) benchmarks: assessor_building_value_index: "StatCan BCPI single-detached, CMA series, from roll market date quarter to 2026-Q2" baselines: B0: {grade: standard, condition: 3, basement: unfinished, garage: none, pool: none, attached: from_listing_type}