# Author: Simon-Pierre Boucher — simon-pierre.boucher@uqo.ca """Paths and conventions. WP22 artefacts are read-only inputs.""" from __future__ import annotations from pathlib import Path ROOT = Path(__file__).resolve().parents[2] WP22 = ROOT.parent / "sharp-hpi-quebec" WP22_SRC = WP22 / "src" WP22_ANALYTIC = WP22 / "data" / "processed" / "analytic_transactions.parquet" WP22_PANEL = WP22 / "data" / "processed" / "index_panel.parquet" WP22_VINTAGES = WP22 / "data" / "processed" / "index_vintages.parquet" WP22_GEO = WP22 / "data" / "interim" / "geo_transactions.parquet" WP22_STOCK = WP22 / "data" / "interim" / "raw_units_stock.parquet" WP22_SDA = WP22 / "data" / "external" / "SDA.gpkg" WP22_EXTERNAL = WP22 / "data" / "external" / "external_indices" DATA = ROOT / "data"; PROCESSED = DATA / "processed"; RESULTS = ROOT / "results"; FIGURES = ROOT / "figures"; DOCS = ROOT / "docs"; LOGS = ROOT / "logs" SEED = 20261022 HORIZONS = (1, 3, 6, 12) FIRST_ORIGIN = "2022-12" # 24 months of history before the first forecast origin LAST_MONTH = "2026-09" # last complete month (October 2026 is partial in WP22) PROPERTY_TYPES = ("house", "condo", "plex") MIN_CELL_SALES = 1500 # municipalities with real-time vintages in WP22 def ensure_dirs() -> None: for d in (PROCESSED, RESULTS, FIGURES, DOCS, LOGS): d.mkdir(parents=True, exist_ok=True)