# elements — Quartier les Éléments - site: https://www.quartierleselements.com/appartements-condos-locatifs-levis (phases -> étages -> fiches d'unités) - méthode: html - annonces: 3 → 3 - couverture après (sur 3 annonces): prix 100%, adresse 100%, dispo 100%, superficie 100%, commodités 100% - fixture: ok · test: ok ## Champs extraits - Fiche d'unité : grandeur (« 3 1/2 » -> 3½), prix (« 1216$ en cession pour octobre 2026 »), disponibilité (mois/année extraits de la ligne de prix), superficie brute/terrasse/totale (description), « Avec boudoir / Avec bureau » (commodité). - NOUVEAU — `area_sqft` explicite depuis « Superficie brute » (structurée à la source). Avant, la normalisation générique prenait le min de toutes les superficies de la description et retournait la TERRASSE (126 pi² au lieu de 890 pi²). - NOUVEAU — `details.floor` depuis le segment `/etage-N/` de l'URL de la fiche (structuré). - NOUVEAU — `details.contact` (téléphone + courriel du bureau de location affichés sur chaque fiche). - NOUVEAU — commodité « Terrasse » quand la fiche affiche une superficie de terrasse. - Adresse du complexe (1432, rue de Jupiter, Lévis), secteur Saint-Romuald, images (plans + galerie uploads). ## Champs indisponibles à la source - Inclusions (chauffage, électricité…), électroménagers, animaux, meublé, stationnement : les fiches d'unités n'affichent rien de tel. - Adresse civique par phase/immeuble (seule l'adresse du bureau de location est publiée). - Coordonnées GPS. ## Fragilités - Parsing par regex sur le texte de la page (« Grandeur : », « Prix : », « Superficie … : ») : sensible aux reformulations. - La découverte passe par les `` des plans d'étages interactifs : un changement de plugin de plan casserait la découverte. - Le libellé de prix « en cession pour » sert aussi de disponibilité ; si le site change ce format, la date disparaît (repli : « Disponible »). ## Améliorations apportées - Correction majeure de la superficie : 126 pi² (terrasse, via min() générique) -> 890/953/952 pi² (superficie brute explicite). - Étage structuré dans `details.floor`. - Contact du bureau de location dans `details.contact`. - Commodité « Terrasse » ajoutée quand présente. ## Échantillon avant/après - AVANT : `Phase 2, unité 105 (3½) | 1216 | 3½ | Disponible (octobre 2026) | 2026-10-01 | 126 pi² | {"balcony": true}` - APRÈS : `Phase 2, unité 105 (3½) | 1216 | 3½ | Disponible (octobre 2026) | 2026-10-01 | 890 pi² | {"balcony": true, "contact": {"phone": "581-922-3334", "email": "info@quartierleselements.com"}, "floor": 1}` ## Lacune générique notée - `parse_area_sqft` retourne `min()` de toutes les superficies trouvées : quand une description contient « Superficie terrasse : 126 pi² » et « Superficie brute : 890 pi² », le générique choisit la terrasse. Contournée ici par un `area_sqft` explicite ; à corriger dans normalize.py (ex. ignorer les superficies précédées de « terrasse/balcon », ou préférer « brute/habitable »).