# Author: Simon-Pierre Boucher # Contact: contact@spboucher.ai # Project: Toit-Ka # ----------------------------------------------------------------------------- # typologie.py : vocabulaire unifié des types de biens. # LOUER : unités locatives Lou-Ka (1½ … 6½+, Studio, Loft, Chambre, Condo, # Maison, Appartement) — déjà propres à ~99 %, on replie les résidus # (« Apartment », « MDV », « 6½ », valeurs parasites « 1 », « P »). # ACHETER: types Immo-Ka (Maison, Condo, Terrain, Duplex…) — on décode les # entités HTML cassées (« Vente d'entreprise ») et on regroupe # les variantes rares. # ----------------------------------------------------------------------------- from __future__ import annotations import html # --- location (Lou-Ka.unit_type) ---------------------------------------------- _LOUER_MAP = { "1½": "1½", "2½": "2½", "3½": "3½", "4½": "4½", "5½": "5½", "6½": "6½+", "6½+": "6½+", "studio": "Studio", "studios / lofts / chambres": "Studio", "loft": "Loft", "chambre": "Chambre", "condo": "Condo", "maison": "Maison", "mdv": "Maison", "bungalow": "Maison", "triplex": "Maison", "penthouse": "Penthouse", "appartement": "Appartement", "apartment": "Appartement", "5 1/5": "4½", } LOUER_TYPES_ORDONNES = ["1½", "2½", "3½", "4½", "5½", "6½+", "Studio", "Loft", "Chambre", "Condo", "Appartement", "Maison", "Penthouse"] def type_louer(unit_type: str | None) -> str: s = html.unescape(html.unescape((unit_type or "").strip())) if not s or s in {"1", "P", "p"}: return "" return _LOUER_MAP.get(s, _LOUER_MAP.get(s.lower(), s)) # --- vente (Immo-Ka.property_type) -------------------------------------------- _ACHETER_MAP = { "vente d'entreprise": "Commercial", "bâtisse et vente d'entreprise": "Commercial", "batisse et vente d'entreprise": "Commercial", "propriété à revenu": "Multiplex", "propriete a revenu": "Multiplex", "6 logements/unités et +": "Multiplex", "6 logements/unites et +": "Multiplex", "quadruplex": "Multiplex", "fermette/agricole": "Fermette/Agricole", "jumelé": "Maison", "jumele": "Maison", "maison de ville": "Maison", "bi-génération": "Maison", "bi-generation": "Maison", "domaine et villa": "Maison", "loft": "Condo", } ACHETER_TYPES_ORDONNES = ["Maison", "Condo", "Duplex", "Triplex", "Multiplex", "Terrain", "Chalet", "Maison mobile", "Fermette/Agricole", "Commercial", "Autre"] def type_acheter(property_type: str | None) -> str: s = html.unescape(html.unescape((property_type or "").strip())) if not s: return "" return _ACHETER_MAP.get(s.lower(), s)