# summum — Gestion immobilière Summum - site: https://location.summumpm.com (portail hébergé Building Stack) - méthode: json-api — `var units = [...]` de /Listing/Listings + pages immeuble /b/ (patron identique au volet BuildingStack d'edifia.py) - annonces: 93 (39 immeubles) - couverture (sur 93 annonces): prix 100%, adresse 100%, GPS 100%, dispo 100%, ville 100%, type 100%, images 100%, contact 100% — superficie 13% et commodités 13% (rarement saisies à la source) - fixture: ok (40 requêtes) · test: ok (2 verts) - villes : Montréal (77, dont Lachine), Saint-Jérôme (4), Blainville (3), Granby (3), Longueuil (3), Laval, Saint-Calixte — la cible Laurentides (Saint-Jérôme) + tout le reste du portail ## Champs extraits - /Listing/Listings : JSON complet par unité (aucun scraping de mise en page) : - ApartmentId → external_id (identifiant Building Stack, STABLE) ; - prix exact (Price + PriceFormatted → price_label) ; - adresse complète structurée (Address.Full avec code postal) + LAT/LNG ; - chambres/salles de bain (details.bedrooms/bathrooms) → typologie dérivée (0 chambre = Studio, n chambres = (n+2)½ — même convention qu'edifia.py) ; - superficie (Area pi², seulement quand > 0 à la source : 12/93) ; - contact de location (nom, téléphone formaté, courriel → details.contact) ; - photo de l'unité (PreviewUrl wfiles.buildingstack.com) ; - URL fiche : /b//. - Page immeuble /b/ (1 requête par immeuble via self.detail — clé de cache = hash des unités/prix de l'immeuble, plafond 45/sync) : - date de disponibilité PAR UNITÉ (« Disponible dès maintenant! » / « déc. 01, 2026 » → « Libre déc. 01, 2026 », normalisée en ISO par finalize()) ; - commodités de l'immeuble (.facilities : buanderie, métro à proximité…) ; - photos additionnelles de l'immeuble. - ville : Address.City du JSON ; canonicalisation factuelle « Montreal » → « Montréal » (les deux graphies coexistent à la source) ; « Lachine » conservé tel quel (champ ville de la source). ## Champs indisponibles à la source - Superficie : Area = 0 pour 81/93 unités (non saisie par le gestionnaire). - Commodités : la section facilities n'est remplie que pour ~1/3 des immeubles (12 annonces en héritent). - Animaux, meublé, étage : non exposés par le portail. ## Fragilités - Chevauchement Grand Montréal assumé (77 annonces à Montréal) : le périmètre de la mission visait Saint-Jérôme, mais le portail est global — chaque annonce porte sa vraie ville, aucun doublon avec un connecteur existant (source distincte). - La typologie (n+2)½ est une DÉRIVATION du nombre de chambres (le portail n'a pas de champ typologie) : un vrai 2½ d'une chambre serait affiché 3½ ; convention identique à edifia.py pour rester cohérent dans la base. - Si Building Stack renomme PublicListBuildingName, les pages immeuble seront re-visitées (cache invalidé) — sans casser les annonces. ## Échantillon - 287081 : 2560 Rachel — Unité 2, Studio, 970 $, 200 pi², Montréal, GPS 45.5376/-73.5627, dispo maintenant, contact Zachary Pilon. - 410484 : 1150 Bélanger - Tour Andrea — Unité 402, 4½, 1575 $, libre août 16 2026. - Types : Studio ×34 (725–2295 $), 3½ ×28 (790–1450 $), 4½ ×27, 5½ ×4.