# shdm — Société d'habitation et de développement de Montréal - site: https://www.shdm.org/fr/logements-disponibles - méthode: json-api (payload __NUXT_DATA__ « devalue » du front Nuxt 3 / WordPress GraphQL) - annonces: 2 → 2 - couverture après (sur 2 annonces): prix 100%, adresse 100%, dispo 100%, superficie 0%, commodités 100% - fixture: ok · test: ok ## Champs extraits - CPT « logement » : prix, numéro d'app., typologie (« 4 1/2 »), date de disponibilité ISO, booléens de commodités (balcon, porte-patio, plancher bois, deux étages, adapté, accessible), **étage structuré** → `details.floor`, **nombre de chambres** (« 2 chambres »), **orientation des fenêtres** (positionFenetreEst/Nord/Ouest/Sud → commodités), **clientèle cible** (taxonomie autonomie : « Clientèle : Pour tous »). - Immeuble lié : adresse, quartier (secteur), description riche (contenu WP), médias (photos logement + immeuble). - Inclusions (chauffage/électricité/eau chaude) dérivées par finalize() depuis la description de l'immeuble. ## Champs indisponibles à la source - Superficie (pi²) : absente du payload. - lat/lng : le payload ne contient que des polygones GeoJSON de quartiers, pas de coordonnées d'immeuble. - Animaux, meublé, stationnement : non exposés. - Salles de bain : non exposées. ## Fragilités - Format « devalue » de Nuxt 3 (tableau plat d'index) : un changement de version Nuxt/structure GraphQL casserait le parsing — le résolveur _Devalue est générique mais la détection des nœuds (« logementFields » + « uri ») est heuristique. - **Booléens d'inclusion du CPT non fiables à false** : pour le 3280 Pépinière, chauffage/electricite/eauChaude sont à false dans le payload alors que la description de l'immeuble dit explicitement « Chauffage, électricité et eau chaude sont inclus dans le loyer » (cases non cochées par les éditeurs). Ils ne sont donc publiés qu'à true (via commodités) ; les false sont ignorés, la description fait foi. - Les fiches s'ouvrent en modale (les URI /fr/logement/ répondent 404) : l'URL pointe vers la liste avec le slug en ancre. ## Améliorations apportées - `details.floor` depuis le champ structuré `etage` (>0 ; 0 = RDC non exposé, sémantique ambiguë). - Commodités enrichies : nombre de chambres, orientation des fenêtres, clientèle cible (autonomie). - Investigation des booléens d'inclusion : conservés en positif seulement (voir Fragilités) — évite d'écraser les inclusions vraies dérivées de la description par des false erronés. - Recherche de superficie/lat-lng dans tout le payload : confirmé absents. ## Échantillon avant/après - 2245-2249 De Champlain app. 2249 (4½, 1595 $, dispo 2026-09-01) — avant : details `{ac, balcony}` ; après : + `floor: 1`, commodités + « 2 chambres », « Clientèle : Pour tous ». - 3280 Pépinière app. 0212 (4½, 1486 $) — avant : inclusions true (description) ; après : inclusions true conservées + `floor: 2`, « 2 chambres », « Clientèle : Pour tous ».