# 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 »).