# utile — UTILE (logement étudiant, OBNL) - site: https://www.utile.org/en/immeubles (+ pages immeuble et pages CMS /en/inclusions/---inclusions) - méthode: html (+ micro-pages CMS d'inclusions via cache détail) - annonces: 16 → 16 - couverture après (sur 16 annonces): prix 100%, adresse 100%, dispo 100%, superficie 0%, commodités 100% - fixture: ok · test: ok ## Champs extraits - Prix « From $x/month » (price_from), typologie (Studio, n bedroom -> n+2½), adresse + secteur (hero c-location-tag). - Géolocalisation structurée : `lat`/`lng` + adresse de secours depuis le marqueur carte `.main-building-data` (attributs data-lat/data-lng/data-address). - Statut corrigé : lu dans le tag visible du hero (`.c-location-tag`) — avant, le connecteur prenait le DERNIER tag visible de la page, qui provient des cartes « autres projets » du bas de page (statut d'un autre immeuble). Saint-Patrick passait à tort de « En location » à « Complet (prochaine période) ». - Inclusions réelles par immeuble : la page immeuble utilise Webflow CMS-nest (listes globales filtrées côté client), mais la page CMS `/en/inclusions/---inclusions` expose les slugs d'équipement par groupe (inclus appartement / immeuble / en sus / non inclus). Une vraie requête par immeuble, mise en cache via self.detail() (clé = hash de la page immeuble), plafond 30. - Amenities dérivées vers details : chauffage, électricité, eau chaude, internet, cuisinière, frigo, ascenseur, buanderie (en sus), stationnement souterrain (en sus), non meublé… - « Renting from » (stats hero) ajouté en tête de description. ## Champs indisponibles à la source - Superficie (aucun pi²/m² nulle part), date de disponibilité par unité (seulement Complet / En location + « Renting from » anglais), étage, animaux, prix exacts par unité (fourchettes « From »). ## Fragilités - Classes Webflow (c-building-apartment__collection-item, c-location-tag, c-inclusions__link, main-building-data) : un redesign casserait le parsing. - Slugs d'équipement avec coquilles à la source (« ascenceurs ») : mappés explicitement ; nouveau slug inconnu -> libellé de repli sans accents. - « Stationnement à vélo » renommé « Espace vélos » pour ne pas être classé stationnement auto par la normalisation. ## Améliorations apportées - Correction du statut d'immeuble (bug : mauvais tag balayé) — 2 annonces Saint-Patrick passent de « Complet (prochaine période de location) » à « En location ». - lat/lng structurés (16/16), inclusions réelles par immeuble (remplacent 4 commodités codées en dur), « Renting from » en description, détails inclusions/ascenseur/etc. dérivés. - 2026-08-08 — Expansion provinciale (lot 0) : le filtre « adresse contient Montréal » excluait tous les immeubles hors Grand Montréal (dont Jean-XXIII à Trois-Rivières, en location). Remplacé par l'extraction de la ville en fin d'adresse + table `_CITY_CANON` (« Québec City » → « Québec »…) ; ville inconnue → immeuble ignoré (rien d'inventé). +12 annonces : Jean-XXIII (Trois-Rivières, 2 typologies), Cité-Universitaire + Saint-Sacrement (Québec, 8), Rimouski (2) ; Sherbrooke (Pacifique) encore sans cartes (en développement). 16 → 28 annonces. Fixture réenregistrée, 2 tests verts. ## Échantillon avant/après - Avant : `UTILE Parc La Fontaine — Studio | 843$ | Complet | amenities génériques codées en dur | details={fridge,stove,furnished:false} | lat/lng NULL` - Après : `UTILE Parc La Fontaine — Studio | 843$ | Complet | 23 commodités réelles | details={inclusions:{heating,electricity,hot_water,internet}, appliances:{fridge,stove}, elevator, laundry, furnished:false,…} | 45.5291,-73.5656` ## Lacunes génériques de normalisation notées - Les dates anglaises « Month Day(st|th), Year » (ex. « April 1st, 2027 ») ne sont pas parsées par parse_availability_date, et pire : le jour/année étant ignorés, « april » seul donnerait une date passée -> "now". C'est pourquoi « Renting from » est placé en description et non en availability. - Les règles parking classeraient « stationnement à vélo intérieur » comme stationnement auto intérieur.