SPB Git forge

spb/immo-ka

Public

Immo-Ka — agrégateur des propriétés à vendre au Québec (73 connecteurs, ~40 000 annonces, React+FastAPI)

112commits 1branches 0releases
125.4 MBsize
maindefault branch
13 days agolast push
Python 47.5% HTML 27.9% TypeScript 15.5% CSS 7.2% JavaScript 2%

Qualité + mobile : enrichissement détail de ~15 familles de connecteurs (galeries complètes, taxes, courtiers, GPS), couche qualité (score/quarantaine/cohérences/golden record), imgaudit conservateur, carte Ka Maps (parité Lou-Ka + sync liste↔carte), Stats parité Lou-Ka, route SEO fiche réparée, kw_urbain details, validation rendu 77/77 + rapport

Simon-Pierre Boucher committed 1 mo ago (Aug 19, 2026) parent 28ee1e3

141 changed files +1,574 −457

added docs/RAPPORT-2026-08-19-qualite-mobile.md +45 −0
@@ -0,0 +1,45 @@
1 +# Immo-Ka — Rapport final : enrichissement des connecteurs + solidité mobile
2 +**Date : 2026-08-19 · périmètre : www.immo-ka.com (M4M64a:8096)**
3 +
4 +## 1. Enrichissement des connecteurs (Mission 1)
5 +
6 +### Avant / après (annonces publiées)
7 +| Indicateur | Avant (2026-08-18) | Après (2026-08-19) |
8 +|---|---|---|
9 +| Description exploitable (≥ 80 car.) | 82,5 % | **99,3 %** |
10 +| Annonces à ≤ 1 image | 12 084 (17,6 %) | **2 128 (3,2 %)** |
11 +| Annonces sans aucune image | 331 | **202** (repli élégant par type affiché) |
12 +| Images par annonce (moyenne) | 22,9 | **26,8** |
13 +| Chambres renseignées | 73,6 % | 77,3 % |
14 +| Superficie renseignée | 35,6 % | 40,5 % |
15 +| GPS | 94,2 % | **95,1 %** (restant = adresses vagues LesPAC/DuProprio + biens hors Québec, jamais de coordonnées inventées) |
16 +| Score de complétude moyen | — | **86,5 / 100** |
17 +| Annonces visibles | 68 475 (dont ~12 000 quasi vides) | 65 475 (toutes riches ; les doublons MLS inter-bannières sont maintenant correctement fusionnés/masqués : 51 364) |
18 +
19 +### Connecteurs enrichis (fiche détail complète : galerie entière en meilleure résolution, description longue, taxes/évaluations, pièces, courtier + téléphone, GPS, visites virtuelles)
20 +- **Famille source.immo** (~20 sources : Century 21 ×2, Vendirect, Domicilia, CIEMCQ, The Agency, Via ×4, 12 agences indépendantes) : 1 → ~28-31 images, villes résolues, taxes, étiquettes de pièces.
21 +- **Realtor.ca** (API PropertyDetails via Scrapfly, FR), **Ubee** (API Listing, ~130 codes traduits), **Charisma**, **AvecUnCourtier/CIO** (bannière réelle), **eXp** (GPS exact, pièces), **Publimaison** (GPS via /carte, galeries tous types), **LogisQuébec** (galeries dépolluées des « propriétés similaires »), **Barnes** (106 fiches mortes purgées, galeries par préfixe MLS), **GLMC**, **Guide Habitation**, **BHHS**, **Imcha**, **Agence Image**, **Immeubles Contact**, **KW Urbain** (details réparés + type), et **KW Prestige / KW Distinction ressuscités** (sitemaps figés → énumérations internes ; 0 → ~1 000 annonces complètes).
22 +- Cache BD `detail_cache` : **103 981 fiches détail** mémorisées — seules les fiches nouvelles/modifiées sont relues à chaque cycle.
23 +
24 +### Contrôle qualité (immoka/quality.py — nouveau)
25 +- Score de complétude 0-100 par annonce ; **seuil de publication** : prix plausible + ville + type de bien + contenu exploitable → sinon **quarantaine** (14 920 visibles-éligibles, motifs affichés dans les Stats), re-testée à chaque cycle.
26 +- Cohérences immobilières : bornes de prix vente (20 k–80 M$) et location (300–25 k$/mois, détection loyer vs vente), superficies plausibles, année valide, pièces/chambres, GPS borné Québec.
27 +- Champs dérivés : **prix au pi² et m²**, type de transaction ; types de bien promus depuis les fiches Centris (Sotheby's 863 récupérées) et re-normalisés (bi-génération, X logements, ventes d'entreprise…).
28 +- **Golden record** : la dédup par adresse fusionne les champs manquants du doublon masqué dans la fiche conservée (description, galerie plus riche, GPS en paire, téléphone).
29 +- Archivage : vendues/louées/retirées désactivées (18 611 archivées au total) ; statut « Vendu » explicite = quarantaine immédiate.
30 +
31 +### Images (immoka/imgaudit.py — nouveau)
32 +- Nettoyage au `finalize` : placeholders des portails, doublons multi-tailles (les handlers dynamiques .axd/.ashx gardent leur querystring d'identité).
33 +- Audit réseau budgété des couvertures avec cache 30 j : **257 913 URLs vérifiées**, dimensions décodées des en-têtes (JPEG/PNG/WebP/GIF), **241 images mortes confirmées (404/410) retirées**, minuscules éliminées, couverture valide promue en tête. Verdict « morte » **sur preuve seulement** : les 403/429 (rate-limit/anti-hotlink CDN, gotcha DuProprio) ne retirent jamais rien — le repli `onError` du frontend couvre le reste.
34 +- Annonce sans image valide → **image de secours élégante par type de bien** aux couleurs Immo-Ka (jamais d'icône cassée).
35 +
36 +## 2. Mobile + validation du rendu (Mission 2)
37 +- **Carte Ka Maps** (framework partagé Groupe Ka, le même que Lou-Ka) : fond Mapbox Standard 3D, pastilles de prix GPU, clusters avec prix moyen, « Rechercher dans cette zone », bascule 2D/3D, aperçu au toucher, caméra dans l'URL, **synchronisation liste ↔ carte** ; fiche : mini-carte 3D avec **bâtiment de l'annonce surligné**. Ancienne carte MapLibre maison retirée.
38 +- **Stats alignées Lou-Ka** : 15 KPI (dont prix médian/pi², jours sur le marché, baisses de prix, qualité, quarantaine, sous le marché), donut juste-valeur, 6 tables. Section « Qualité des données » (complétude, quarantaine, anomalies par connecteur).
39 +- Fiche mobile : galerie scroll-snap + **lightbox pincement/balayage/légendes de pièces**, CTA collant, bulle KA Agent dégagée ; cartes de liste avec miniature légère (`cover_thumb`) et repli par type.
40 +- **Bug de prod corrigé** : les liens directs/Google vers une fiche (301 vers l'URL slug) tombaient sur la page 404 React — route `/propriete/:uid/:slug` ajoutée.
41 +- **Validation** (`scripts/valider_rendu.py`, rejouable) : matrice 7 largeurs (360/390/414/paysage 844/768/1024/1440) × 11 pages (accueil, carte, sans-résultat, agences, stats, contact, 5 fiches cas-limites : 1 photo, très photographiée, description longue, prix élevé, sans superficie) → **77/77 OK : 0 débordement horizontal, 0 image cassée, cibles tactiles ≥ 44 px** (les 2 « erreurs JS » des fiches = télémétrie Mapbox bloquée, sans effet). Vérifié aussi en **Safari iOS réel** (simulateur iPhone 17 Pro : accueil, fiche, carte, stats). Captures : `docs/screenshots/validation-2026-08-19/` (+ rapport md/json).
42 +
43 +## 3. Suivi
44 +- Le cycle horaire (`immo-ka-sync`) entretient tout : enrichissement (budgets par connecteur), géocodage, Vrai-Prix, audit d'images (2 000/cycle), dédup, qualité.
45 +- Restant connu : ~2 100 annonces à 1 image = petites annonces à photo unique (Kijiji/LesPAC) + fantômes LogisQuébec (HTTP 410) ; « Propriétés résidentielles » (libellé Realtor) à raffiner ; KW Urbain sort de quarantaine au prochain cycle.
modified docs/connecteurs/INDEX.md +49 −49
@@ -1,10 +1,10 @@
1 1 # Immo-Ka — Connecteurs (documentation standardisée)
2 2
3 −*Généré le 2026-08-18 18:11 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
3 +*Généré le 2026-08-19 00:49 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
4 4
5 5 **101 connecteurs** enregistrés (auto-découverte `immoka/connectors/__init__.py`) : 50 connecteurs nommés (`data/sources.json`) + 4 familles dynamiques (RE/MAX sous-agences, Via Capitale, Century 21, source.immo).
6 6
7 −Base vivante `data/immoka.db` : 146 432 annonces, 130 293 actives, 79 319 visibles après dédup (50 974 masquées).
7 +Base vivante `data/immoka.db` : 147 488 annonces, 131 312 actives, 79 953 visibles après dédup (51 359 masquées).
8 8
9 9 ## Mécanismes transverses (tous connecteurs)
10 10
@@ -15,14 +15,14 @@ Base vivante `data/immoka.db` : 146 432 annonces, 130 293 actives, 79 319 visibl
15 15 sur plusieurs cycles, tout le parc finit enrichi.
16 16 - **Dédup Centris + adresse** (`immoka/db.py`) : les doublons inter-sources
17 17 (même n° Centris via les sous-agences, ou même adresse normalisée) sont
18 − marqués `dup_hidden=1` — 50 974 annonces masquées actuellement — et la
18 + marqués `dup_hidden=1` — 51 359 annonces masquées actuellement — et la
19 19 lecture filtre en `AND dup_hidden=0`.
20 20 - **Jointure rôle d'évaluation** (`immoka/vraiprix_local.py`) : appariement
21 21 local FTS par adresse contre `data/vraiprix.db` (3,7 M unités d'évaluation).
22 22 Remplit lat/lng manquants, l'estimation Vrai-Prix (P10-P90 + lien) et les
23 23 champs du rôle (année de construction, superficies, évaluations). Impact :
24 − **year_built rempli à 70 %** des annonces visibles, dont
25 − 24 % proviennent du rôle (`year_built_source: role`).
24 + **year_built rempli à 71 %** des annonces visibles, dont
25 + 18 % proviennent du rôle (`year_built_source: role`).
26 26 - **Historique — vagues du 2026-08-18** :
27 27 - `7911d58` Vague 1 : clé Algolia auto-extraite (Barnes), taxes/éval RE/MAX
28 28 (cache détail v4), specs Via Capitale, Kijiji étendu.
@@ -33,62 +33,62 @@ Base vivante `data/immoka.db` : 146 432 annonces, 130 293 actives, 79 319 visibl
33 33
34 34 | Famille | Fiche | Membres | Visibles |
35 35 |---|---|---|---|
36 −| Famille RE/MAX sous-agences | [famille-remax-ag](famille-remax-ag.md) | 50 | 3 172 |
37 −| Famille Via Capitale agences | [famille-via-ag](famille-via-ag.md) | 4 | 47 |
38 −| Famille Century 21 | [famille-c21-ag](famille-c21-ag.md) | 2 | 1 586 |
39 −| Famille source.immo | [famille-source-immo](famille-source-immo.md) | 13 | 3 328 |
36 +| Famille RE/MAX sous-agences | [famille-remax-ag](famille-remax-ag.md) | 50 | 3 171 |
37 +| Famille Via Capitale agences | [famille-via-ag](famille-via-ag.md) | 4 | 50 |
38 +| Famille Century 21 | [famille-c21-ag](famille-c21-ag.md) | 2 | 1 566 |
39 +| Famille source.immo | [famille-source-immo](famille-source-immo.md) | 13 | 3 315 |
40 40
41 41 ## Connecteurs nommés
42 42
43 43 | id | Nom | Type | Statut | Visibles | Année (dont rôle) | Dernier sync | OK |
44 44 |---|---|---|---|---|---|---|---|
45 −| [`remax_quebec`](remax_quebec.md) | RE/MAX Québec | franchise | actif | 25 386 | 82.8 % | 2026-08-18 13:20 | ✅ |
46 −| [`duproprio`](duproprio.md) | DuProprio (sans courtier) | fsbo | actif | 7 411 | 79.3 % | 2026-08-18 17:49 | ✅ |
45 +| [`remax_quebec`](remax_quebec.md) | RE/MAX Québec | franchise | actif | 25 368 | 82.8 % | 2026-08-18 13:20 | ✅ |
46 +| [`duproprio`](duproprio.md) | DuProprio (sans courtier) | fsbo | actif | 7 402 | 79.4 % | 2026-08-18 17:49 | ✅ |
47 47 | [`kijiji`](kijiji.md) | Kijiji Québec | — | actif | 7 141 | 4.2 % | 2026-08-18 12:36 | ✅ |
48 −| [`via_capitale`](via_capitale.md) | Via Capitale | franchise | actif | 5 153 | 69.4 % | 2026-08-18 13:37 | ✅ |
49 −| [`sutton`](sutton.md) | Groupe Sutton Québec | franchise | actif | 4 572 | 77.0 % | 2026-08-18 13:32 | ✅ |
50 −| [`lespac`](lespac.md) | LesPAC Québec | — | actif | 2 732 | 58.1 % | 2026-08-18 12:47 | ✅ |
48 +| [`via_capitale`](via_capitale.md) | Via Capitale | franchise | actif | 5 145 | 69.4 % | 2026-08-18 13:37 | ✅ |
49 +| [`sutton`](sutton.md) | Groupe Sutton Québec | franchise | actif | 4 572 | 77.1 % | 2026-08-18 13:32 | ✅ |
50 +| [`lespac`](lespac.md) | LesPAC Québec | — | actif | 2 688 | 57.5 % | 2026-08-18 12:47 | ✅ |
51 51 | [`proprio_direct`](proprio_direct.md) | Proprio Direct | agence | actif | 2 468 | 67.6 % | 2026-08-18 12:51 | ✅ |
52 −| [`c21_ag_quebec`](c21_ag_quebec.md) | Century 21 Québec (All Quebec) | — | actif | 1 585 | 75.7 % | 2026-08-18 17:47 | ✅ |
53 −| [`domicilia`](domicilia.md) | Domicilia Agence Immobilière | agence | actif | 1 449 | 73.4 % | 2026-08-18 17:38 | ✅ |
54 −| [`cio_ag_outaouais`](cio_ag_outaouais.md) | Chambre immobilière de l'Outaouais | portail | actif | 1 405 | 68.8 % | 2026-08-18 17:47 | ✅ |
52 +| [`c21_ag_quebec`](c21_ag_quebec.md) | Century 21 Québec (All Quebec) | — | actif | 1 566 | 75.6 % | 2026-08-18 18:56 | ✅ |
53 +| [`domicilia`](domicilia.md) | Domicilia Agence Immobilière | agence | actif | 1 449 | 73.4 % | 2026-08-19 00:47 | ✅ |
54 +| [`cio_ag_outaouais`](cio_ag_outaouais.md) | Chambre immobilière de l'Outaouais | portail | actif | 1 241 | 74.4 % | 2026-08-18 19:41 | ✅ |
55 55 | [`engel_volkers`](engel_volkers.md) | Engel & Völkers Montréal / Québec | luxe | actif | 1 232 | 70.0 % | 2026-08-18 17:49 | ✅ |
56 −| [`si_ag_ciemcq`](si_ag_ciemcq.md) | Chambre immobilière Estrie–Mauricie–Centre-du-Québec (Mon-Toit) | chambre | actif | 1 179 | 68.7 % | 2026-08-18 17:38 | ✅ |
57 −| [`ubee`](ubee.md) | Ubee | — | actif | 1 175 | 100.0 % | 2026-08-18 13:33 | ✅ |
58 −| [`vendirect`](vendirect.md) | Vendirect | agence | actif | 1 174 | 79.5 % | 2026-08-18 13:33 | ✅ |
59 −| [`royal_lepage`](royal_lepage.md) | Royal LePage (Québec) | franchise | actif | 1 051 | 92.7 % | 2026-08-18 13:21 | ✅ |
60 −| [`exp_ag_qc`](exp_ag_qc.md) | eXp Agence immobilière (Québec) | agence | actif | 888 | 55.4 % | 2026-08-18 17:52 | ✅ |
61 −| [`sothebys_quebec`](sothebys_quebec.md) | Sotheby's International Realty Québec | luxe | actif | 869 | 60.2 % | 2026-08-18 13:26 | ✅ |
62 −| [`charisma_ag_qc`](charisma_ag_qc.md) | Les Immeubles Charisma | agence | actif | 696 | 81.2 % | 2026-08-18 17:49 | ✅ |
63 −| [`realtor_ag_ca`](realtor_ag_ca.md) | Realtor.ca (MLS Québec) | agrégateur | actif | 429 | 82.3 % | 2026-08-18 13:15 | ✅ |
56 +| [`ubee`](ubee.md) | Ubee | — | actif | 1 187 | 100.0 % | 2026-08-18 20:56 | ✅ |
57 +| [`si_ag_ciemcq`](si_ag_ciemcq.md) | Chambre immobilière Estrie–Mauricie–Centre-du-Québec (Mon-Toit) | chambre | actif | 1 164 | 69.2 % | 2026-08-19 00:47 | ✅ |
58 +| [`vendirect`](vendirect.md) | Vendirect | agence | actif | 1 144 | 79.0 % | 2026-08-18 19:05 | ✅ |
59 +| [`kw_prestige`](kw_prestige.md) | Keller Williams Prestige | franchise | actif | 1 059 | 66.3 % | 2026-08-18 23:57 | ✅ |
60 +| [`royal_lepage`](royal_lepage.md) | Royal LePage (Québec) | franchise | actif | 976 | 92.1 % | 2026-08-18 13:21 | ✅ |
61 +| [`exp_ag_qc`](exp_ag_qc.md) | eXp Agence immobilière (Québec) | agence | actif | 893 | 68.1 % | 2026-08-18 19:54 | ✅ |
62 +| [`sothebys_quebec`](sothebys_quebec.md) | Sotheby's International Realty Québec | luxe | actif | 869 | 60.6 % | 2026-08-18 13:26 | ✅ |
63 +| [`charisma_ag_qc`](charisma_ag_qc.md) | Les Immeubles Charisma | agence | actif | 698 | 93.4 % | 2026-08-18 18:49 | ✅ |
64 +| [`realtor_ag_ca`](realtor_ag_ca.md) | Realtor.ca (MLS Québec) | agrégateur | actif | 420 | 82.4 % | 2026-08-18 23:52 | ❌ |
65 +| [`kw_distinction`](kw_distinction.md) | Keller Williams Distinction | franchise | actif | 364 | 39.8 % | 2026-08-19 00:02 | ✅ |
64 66 | [`profusion`](profusion.md) | Profusion Immobilier (Christie's) | luxe | actif | 353 | 61.5 % | 2026-08-18 12:51 | ✅ |
65 67 | [`kw_urbain`](kw_urbain.md) | Keller Williams Urbain | franchise | actif | 351 | 68.7 % | 2026-08-18 12:36 | ✅ |
66 −| [`barnes_quebec`](barnes_quebec.md) | BARNES Québec | luxe | actif | 338 | 81.1 % | 2026-08-18 17:47 | ✅ |
67 −| [`kw_prestige`](kw_prestige.md) | Keller Williams Prestige | franchise | actif | 277 | 0.0 % | 2026-08-18 12:36 | ✅ |
68 −| [`si_ag_theagency`](si_ag_theagency.md) | The Agency Montréal | agence | actif | 236 | 90.3 % | 2026-08-18 17:38 | ✅ |
69 −| [`glmc_ag_qc`](glmc_ag_qc.md) | Les Immeubles GLMC | agence | actif | 176 | 36.4 % | 2026-08-18 17:52 | ✅ |
70 −| [`kw_distinction`](kw_distinction.md) | Keller Williams Distinction | franchise | actif | 167 | 0.0 % | 2026-08-18 12:36 | ✅ |
71 −| [`imcha_ag_qc`](imcha_ag_qc.md) | Les Immeubles Charlevoix | agence | actif | 106 | 0.0 % | 2026-08-18 17:52 | ✅ |
72 −| [`guidehabitation`](guidehabitation.md) | Guide Habitation (projets neufs) | répertoire | actif | 94 | 27.7 % | 2026-08-18 17:52 | ✅ |
73 −| [`immodev`](immodev.md) | Immodev Agence Immobilière | agence | actif | 92 | 64.1 % | 2026-08-18 18:10 | ✅ |
74 −| [`bhhs_ag_qc`](bhhs_ag_qc.md) | Berkshire Hathaway HomeServices Québec | franchise | actif | 91 | 86.8 % | 2026-08-18 17:47 | ✅ |
75 −| [`realta`](realta.md) | Réalta Agence Immobilière | agence | actif | 82 | 80.5 % | 2026-08-18 18:09 | ✅ |
76 −| [`provad`](provad.md) | Proulx Vadnais & Associés | agence | actif | 81 | 43.2 % | 2026-08-18 17:38 | ✅ |
77 −| [`image_ag_qc`](image_ag_qc.md) | Image, l'agence immobilière | agence | actif | 78 | 0.0 % | 2026-08-18 17:38 | ✅ |
68 +| [`barnes_quebec`](barnes_quebec.md) | BARNES Québec | luxe | actif | 338 | 81.1 % | 2026-08-18 23:42 | ✅ |
69 +| [`si_ag_theagency`](si_ag_theagency.md) | The Agency Montréal | agence | actif | 236 | 90.3 % | 2026-08-19 00:47 | ✅ |
70 +| [`glmc_ag_qc`](glmc_ag_qc.md) | Les Immeubles GLMC | agence | actif | 176 | 36.4 % | 2026-08-18 23:45 | ✅ |
71 +| [`imcha_ag_qc`](imcha_ag_qc.md) | Les Immeubles Charlevoix | agence | actif | 106 | 54.7 % | 2026-08-18 23:52 | ✅ |
72 +| [`guidehabitation`](guidehabitation.md) | Guide Habitation (projets neufs) | répertoire | actif | 94 | 27.7 % | 2026-08-18 23:47 | ✅ |
73 +| [`bhhs_ag_qc`](bhhs_ag_qc.md) | Berkshire Hathaway HomeServices Québec | franchise | actif | 93 | 94.6 % | 2026-08-18 23:50 | ✅ |
74 +| [`immodev`](immodev.md) | Immodev Agence Immobilière | agence | actif | 92 | 64.1 % | 2026-08-19 00:47 | ✅ |
75 +| [`realta`](realta.md) | Réalta Agence Immobilière | agence | actif | 83 | 80.7 % | 2026-08-19 00:47 | ✅ |
76 +| [`provad`](provad.md) | Proulx Vadnais & Associés | agence | actif | 81 | 43.2 % | 2026-08-19 00:47 | ✅ |
77 +| [`image_ag_qc`](image_ag_qc.md) | Image, l'agence immobilière | agence | actif | 76 | 77.6 % | 2026-08-19 00:47 | ✅ |
78 78 | [`m_immobilier`](m_immobilier.md) | M Immobilier | luxe | actif | 66 | 86.4 % | 2026-08-18 12:51 | ✅ |
79 −| [`si_ag_jga`](si_ag_jga.md) | JGA Équipe Commerciale (Royal LePage) | équipe | actif | 59 | 37.3 % | 2026-08-18 17:38 | ✅ |
80 −| [`peladeau`](peladeau.md) | Péladeau Agence Immobilière | agence | actif | 47 | 93.6 % | 2026-08-18 17:38 | ✅ |
81 −| [`contact_ag_qc`](contact_ag_qc.md) | Les Immeubles Contact | agence | actif | 43 | 83.7 % | 2026-08-18 17:52 | ✅ |
82 −| [`avenue`](avenue.md) | Avenue Immobilier | agence | actif | 42 | 97.6 % | 2026-08-18 17:38 | ✅ |
83 −| [`si_ag_katiasamson`](si_ag_katiasamson.md) | Katia Samson (RE/MAX L'Espace) | équipe | actif | 26 | 100.0 % | 2026-08-18 17:38 | ✅ |
84 −| [`ferri`](ferri.md) | Ferri Services Immobiliers | agence | actif | 22 | 95.5 % | 2026-08-18 17:38 | ✅ |
85 −| [`gaillardetz`](gaillardetz.md) | Gaillardetz Agence Immobilière | agence | actif | 13 | 92.3 % | 2026-08-18 18:10 | ✅ |
86 −| [`via_ag_select`](via_ag_select.md) | Via Capitale Select | franchise | actif | 11 | 100.0 % | 2026-08-18 13:38 | ✅ |
79 +| [`si_ag_jga`](si_ag_jga.md) | JGA Équipe Commerciale (Royal LePage) | équipe | actif | 59 | 37.3 % | 2026-08-19 00:47 | ✅ |
80 +| [`peladeau`](peladeau.md) | Péladeau Agence Immobilière | agence | actif | 47 | 93.6 % | 2026-08-19 00:47 | ✅ |
81 +| [`contact_ag_qc`](contact_ag_qc.md) | Les Immeubles Contact | agence | actif | 43 | 86.0 % | 2026-08-19 00:05 | ✅ |
82 +| [`avenue`](avenue.md) | Avenue Immobilier | agence | actif | 43 | 97.7 % | 2026-08-19 00:47 | ✅ |
83 +| [`si_ag_katiasamson`](si_ag_katiasamson.md) | Katia Samson (RE/MAX L'Espace) | équipe | actif | 26 | 100.0 % | 2026-08-19 00:47 | ✅ |
84 +| [`ferri`](ferri.md) | Ferri Services Immobiliers | agence | actif | 22 | 95.5 % | 2026-08-19 00:47 | ✅ |
85 +| [`via_ag_select`](via_ag_select.md) | Via Capitale Select | franchise | actif | 14 | 100.0 % | 2026-08-18 19:15 | ✅ |
86 +| [`gaillardetz`](gaillardetz.md) | Gaillardetz Agence Immobilière | agence | actif | 13 | 92.3 % | 2026-08-19 00:47 | ✅ |
87 87 | [`expert_immobilier_pm`](expert_immobilier_pm.md) | L'Expert Immobilier P.M. | agence | actif | 9 | 88.9 % | 2026-08-18 17:52 | ✅ |
88 −| [`via_ag_elite`](via_ag_elite.md) | Via Capitale Elite | franchise | actif | 9 | 77.8 % | 2026-08-18 13:38 | ✅ |
89 −| [`via_ag_acces`](via_ag_acces.md) | Via Capitale Acces | franchise | actif | 7 | 100.0 % | 2026-08-18 13:38 | ✅ |
90 −| [`c21_ag_vision`](c21_ag_vision.md) | Century 21 Vision (Outaouais) | — | actif | 1 | 100.0 % | 2026-08-18 17:47 | ✅ |
88 +| [`via_ag_elite`](via_ag_elite.md) | Via Capitale Elite | franchise | actif | 9 | 77.8 % | 2026-08-18 19:08 | ✅ |
89 +| [`via_ag_acces`](via_ag_acces.md) | Via Capitale Acces | franchise | actif | 7 | 100.0 % | 2026-08-18 19:06 | ✅ |
91 90 | [`century21`](century21.md) | Century 21 (Québec) | franchise | actif | 0 | — | — | — |
92 91 | [`via_ag_dumontroyal`](via_ag_dumontroyal.md) | Via Capitale Dumontroyal | franchise | inactif | 0 | — | 2026-08-18 00:27 | ✅ |
93 −| [`niddamour`](niddamour.md) | Nid d'Amour Agence Immobilière | agence | a_faire | 0 | — | 2026-08-18 17:38 | ✅ |
92 +| [`c21_ag_vision`](c21_ag_vision.md) | Century 21 Vision (Outaouais) | — | actif | 0 | — | 2026-08-18 18:58 | ✅ |
93 +| [`niddamour`](niddamour.md) | Nid d'Amour Agence Immobilière | agence | a_faire | 0 | — | 2026-08-19 00:47 | ✅ |
94 94 | [`coldwell_banker`](coldwell_banker.md) | Coldwell Banker Québec | franchise | a_faire | 0 | — | — | — |
modified docs/connecteurs/avenue.md +11 −11
@@ -1,6 +1,6 @@
1 1 # Avenue Immobilier (`avenue`)
2 2
3 −*Généré le 2026-08-18 18:11 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
3 +*Généré le 2026-08-19 00:49 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
4 4
5 5 ## Registre (`data/sources.json`)
6 6
@@ -38,22 +38,22 @@
38 38
39 39 | Indicateur | Valeur |
40 40 |---|---|
41 −| Annonces en base (toutes) | 42 |
42 −| Actives | 42 |
43 −| Visibles (après dédup) | 42 |
41 +| Annonces en base (toutes) | 43 |
42 +| Actives | 43 |
43 +| Visibles (après dédup) | 43 |
44 44 | Masquées par la dédup | 0 |
45 45 | GPS (lat/lng) | 100.0 % |
46 46 | Photos | 100.0 % |
47 47 | Prix | 100.0 % |
48 −| CAC (chambres) | 88.1 % |
49 −| SDB (salles de bains) | 88.1 % |
50 −| Année de construction | 97.6 % (dont rôle : 2.4 %) |
51 −| Taxes / évaluation municipale | 90.5 % |
52 −| Estimation Vrai-Prix (rôle) | 100.0 % |
48 +| CAC (chambres) | 88.4 % |
49 +| SDB (salles de bains) | 88.4 % |
50 +| Année de construction | 97.7 % (dont rôle : 0.0 %) |
51 +| Taxes / évaluation municipale | 95.3 % |
52 +| Estimation Vrai-Prix (rôle) | 97.7 % |
53 53
54 54 ## Synchronisation
55 55
56 −- **Dernier sync** : 2026-08-18 17:38 — trouvé 42, +0 / ~0 / -0 — OK
57 −- **Erreurs récentes** : 0 sur les 4 derniers syncs
56 +- **Dernier sync** : 2026-08-19 00:47 — trouvé 42, +1 / ~41 / -0 — OK
57 +- **Erreurs récentes** : 0 sur les 6 derniers syncs
58 58
59 59 Voir aussi les [mécanismes transverses](INDEX.md#mécanismes-transverses-tous-connecteurs) (budgets détail, dédup Centris+adresse, jointure rôle vraiprix.db).
modified docs/connecteurs/barnes_quebec.md +4 −4
@@ -1,6 +1,6 @@
1 1 # BARNES Québec (`barnes_quebec`)
2 2
3 −*Généré le 2026-08-18 18:11 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
3 +*Généré le 2026-08-19 00:49 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
4 4
5 5 ## Registre (`data/sources.json`)
6 6
@@ -59,13 +59,13 @@
59 59 | Prix | 99.1 % |
60 60 | CAC (chambres) | 92.0 % |
61 61 | SDB (salles de bains) | 90.8 % |
62 −| Année de construction | 81.1 % (dont rôle : 100.0 %) |
62 +| Année de construction | 81.1 % (dont rôle : 36.9 %) |
63 63 | Taxes / évaluation municipale | 49.7 % |
64 −| Estimation Vrai-Prix (rôle) | 99.4 % |
64 +| Estimation Vrai-Prix (rôle) | 100.0 % |
65 65
66 66 ## Synchronisation
67 67
68 −- **Dernier sync** : 2026-08-18 17:47 — trouvé 338, +2 / ~0 / -0 — OK
68 +- **Dernier sync** : 2026-08-18 23:42 — trouvé 228, +0 / ~228 / -0 — OK
69 69 - **Erreurs récentes** : 0 sur les 10 derniers syncs
70 70
71 71 Voir aussi les [mécanismes transverses](INDEX.md#mécanismes-transverses-tous-connecteurs) (budgets détail, dédup Centris+adresse, jointure rôle vraiprix.db).
modified docs/connecteurs/bhhs_ag_qc.md +11 −11
@@ -1,6 +1,6 @@
1 1 # Berkshire Hathaway HomeServices Québec (`bhhs_ag_qc`)
2 2
3 −*Généré le 2026-08-18 18:11 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
3 +*Généré le 2026-08-19 00:49 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
4 4
5 5 ## Registre (`data/sources.json`)
6 6
@@ -42,22 +42,22 @@
42 42
43 43 | Indicateur | Valeur |
44 44 |---|---|
45 −| Annonces en base (toutes) | 97 |
46 −| Actives | 93 |
47 −| Visibles (après dédup) | 91 |
45 +| Annonces en base (toutes) | 99 |
46 +| Actives | 95 |
47 +| Visibles (après dédup) | 93 |
48 48 | Masquées par la dédup | 2 |
49 −| GPS (lat/lng) | 90.1 % |
49 +| GPS (lat/lng) | 100.0 % |
50 50 | Photos | 100.0 % |
51 −| Prix | 65.9 % |
52 −| CAC (chambres) | 93.4 % |
53 −| SDB (salles de bains) | 93.4 % |
54 −| Année de construction | 86.8 % (dont rôle : 98.7 %) |
51 +| Prix | 65.6 % |
52 +| CAC (chambres) | 93.5 % |
53 +| SDB (salles de bains) | 94.6 % |
54 +| Année de construction | 94.6 % (dont rôle : 3.4 %) |
55 55 | Taxes / évaluation municipale | 0.0 % |
56 56 | Estimation Vrai-Prix (rôle) | 100.0 % |
57 57
58 58 ## Synchronisation
59 59
60 −- **Dernier sync** : 2026-08-18 17:47 — trouvé 93, +0 / ~0 / -0 — OK
61 −- **Erreurs récentes** : 0 sur les 6 derniers syncs
60 +- **Dernier sync** : 2026-08-18 23:50 — trouvé 95, +2 / ~93 / -0 — OK
61 +- **Erreurs récentes** : 0 sur les 7 derniers syncs
62 62
63 63 Voir aussi les [mécanismes transverses](INDEX.md#mécanismes-transverses-tous-connecteurs) (budgets détail, dédup Centris+adresse, jointure rôle vraiprix.db).
modified docs/connecteurs/c21_ag_quebec.md +9 −9
@@ -1,6 +1,6 @@
1 1 # Century 21 Québec (All Quebec) (`c21_ag_quebec`)
2 2
3 −*Généré le 2026-08-18 18:11 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
3 +*Généré le 2026-08-19 00:49 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
4 4
5 5 ## Registre (`data/sources.json`)
6 6
@@ -39,21 +39,21 @@
39 39 | Indicateur | Valeur |
40 40 |---|---|
41 41 | Annonces en base (toutes) | 1 674 |
42 −| Actives | 1 612 |
43 −| Visibles (après dédup) | 1 585 |
44 −| Masquées par la dédup | 27 |
42 +| Actives | 1 603 |
43 +| Visibles (après dédup) | 1 566 |
44 +| Masquées par la dédup | 37 |
45 45 | GPS (lat/lng) | 99.9 % |
46 46 | Photos | 100.0 % |
47 47 | Prix | 100.0 % |
48 −| CAC (chambres) | 75.1 % |
48 +| CAC (chambres) | 75.9 % |
49 49 | SDB (salles de bains) | 72.9 % |
50 −| Année de construction | 75.7 % (dont rôle : 9.9 %) |
51 −| Taxes / évaluation municipale | 83.8 % |
52 −| Estimation Vrai-Prix (rôle) | 99.6 % |
50 +| Année de construction | 75.6 % (dont rôle : 0.2 %) |
51 +| Taxes / évaluation municipale | 85.8 % |
52 +| Estimation Vrai-Prix (rôle) | 100.0 % |
53 53
54 54 ## Synchronisation
55 55
56 −- **Dernier sync** : 2026-08-18 17:47 — trouvé 1 603, +6 / ~7 / -0 — OK
56 +- **Dernier sync** : 2026-08-18 18:56 — trouvé 1 603, +0 / ~1603 / -9 — OK
57 57 - **Erreurs récentes** : 0 sur les 10 derniers syncs
58 58
59 59 Voir aussi les [mécanismes transverses](INDEX.md#mécanismes-transverses-tous-connecteurs) (budgets détail, dédup Centris+adresse, jointure rôle vraiprix.db).
modified docs/connecteurs/c21_ag_vision.md +12 −12
@@ -1,6 +1,6 @@
1 1 # Century 21 Vision (Outaouais) (`c21_ag_vision`)
2 2
3 −*Généré le 2026-08-18 18:11 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
3 +*Généré le 2026-08-19 00:49 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
4 4
5 5 ## Registre (`data/sources.json`)
6 6
@@ -40,20 +40,20 @@
40 40 |---|---|
41 41 | Annonces en base (toutes) | 143 |
42 42 | Actives | 139 |
43 −| Visibles (après dédup) | 1 |
44 −| Masquées par la dédup | 138 |
45 −| GPS (lat/lng) | 100.0 % |
46 −| Photos | 100.0 % |
47 −| Prix | 100.0 % |
48 −| CAC (chambres) | 100.0 % |
49 −| SDB (salles de bains) | 100.0 % |
50 −| Année de construction | 100.0 % (dont rôle : 0.0 %) |
51 −| Taxes / évaluation municipale | 100.0 % |
52 −| Estimation Vrai-Prix (rôle) | 0.0 % |
43 +| Visibles (après dédup) | 0 |
44 +| Masquées par la dédup | 139 |
45 +| GPS (lat/lng) | — |
46 +| Photos | — |
47 +| Prix | — |
48 +| CAC (chambres) | — |
49 +| SDB (salles de bains) | — |
50 +| Année de construction | — |
51 +| Taxes / évaluation municipale | — |
52 +| Estimation Vrai-Prix (rôle) | — |
53 53
54 54 ## Synchronisation
55 55
56 −- **Dernier sync** : 2026-08-18 17:47 — trouvé 139, +1 / ~1 / -0 — OK
56 +- **Dernier sync** : 2026-08-18 18:58 — trouvé 139, +0 / ~139 / -0 — OK
57 57 - **Erreurs récentes** : 0 sur les 10 derniers syncs
58 58
59 59 Voir aussi les [mécanismes transverses](INDEX.md#mécanismes-transverses-tous-connecteurs) (budgets détail, dédup Centris+adresse, jointure rôle vraiprix.db).
modified docs/connecteurs/century21.md +1 −1
@@ -1,6 +1,6 @@
1 1 # Century 21 (Québec) (`century21`)
2 2
3 −*Généré le 2026-08-18 18:11 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
3 +*Généré le 2026-08-19 00:49 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
4 4
5 5 ## Registre (`data/sources.json`)
6 6
modified docs/connecteurs/charisma_ag_qc.md +10 −10
@@ -1,6 +1,6 @@
1 1 # Les Immeubles Charisma (`charisma_ag_qc`)
2 2
3 −*Généré le 2026-08-18 18:11 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
3 +*Généré le 2026-08-19 00:49 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
4 4
5 5 ## Registre (`data/sources.json`)
6 6
@@ -45,22 +45,22 @@
45 45
46 46 | Indicateur | Valeur |
47 47 |---|---|
48 −| Annonces en base (toutes) | 761 |
49 −| Actives | 755 |
50 −| Visibles (après dédup) | 696 |
48 +| Annonces en base (toutes) | 763 |
49 +| Actives | 757 |
50 +| Visibles (après dédup) | 698 |
51 51 | Masquées par la dédup | 59 |
52 −| GPS (lat/lng) | 92.4 % |
52 +| GPS (lat/lng) | 99.7 % |
53 53 | Photos | 100.0 % |
54 −| Prix | 52.9 % |
54 +| Prix | 53.0 % |
55 55 | CAC (chambres) | 100.0 % |
56 56 | SDB (salles de bains) | 100.0 % |
57 −| Année de construction | 81.2 % (dont rôle : 100.0 %) |
58 −| Taxes / évaluation municipale | 0.0 % |
57 +| Année de construction | 93.4 % (dont rôle : 2.5 %) |
58 +| Taxes / évaluation municipale | 53.2 % |
59 59 | Estimation Vrai-Prix (rôle) | 100.0 % |
60 60
61 61 ## Synchronisation
62 62
63 −- **Dernier sync** : 2026-08-18 17:49 — trouvé 755, +0 / ~0 / -0 — OK
64 −- **Erreurs récentes** : 0 sur les 6 derniers syncs
63 +- **Dernier sync** : 2026-08-18 18:49 — trouvé 754, +2 / ~752 / -0 — OK
64 +- **Erreurs récentes** : 0 sur les 7 derniers syncs
65 65
66 66 Voir aussi les [mécanismes transverses](INDEX.md#mécanismes-transverses-tous-connecteurs) (budgets détail, dédup Centris+adresse, jointure rôle vraiprix.db).
modified docs/connecteurs/cio_ag_outaouais.md +14 −14
@@ -1,6 +1,6 @@
1 1 # Chambre immobilière de l'Outaouais (`cio_ag_outaouais`)
2 2
3 −*Généré le 2026-08-18 18:11 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
3 +*Généré le 2026-08-19 00:49 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
4 4
5 5 ## Registre (`data/sources.json`)
6 6
@@ -47,22 +47,22 @@
47 47
48 48 | Indicateur | Valeur |
49 49 |---|---|
50 −| Annonces en base (toutes) | 4 177 |
51 −| Actives | 4 110 |
52 −| Visibles (après dédup) | 1 405 |
53 −| Masquées par la dédup | 2 705 |
54 −| GPS (lat/lng) | 92.7 % |
55 −| Photos | 100.0 % |
50 +| Annonces en base (toutes) | 4 180 |
51 +| Actives | 4 096 |
52 +| Visibles (après dédup) | 1 241 |
53 +| Masquées par la dédup | 2 855 |
54 +| GPS (lat/lng) | 100.0 % |
55 +| Photos | 99.7 % |
56 56 | Prix | 99.9 % |
57 −| CAC (chambres) | 33.7 % |
58 −| SDB (salles de bains) | 0.0 % |
59 −| Année de construction | 68.8 % (dont rôle : 98.0 %) |
60 −| Taxes / évaluation municipale | 0.0 % |
61 −| Estimation Vrai-Prix (rôle) | 98.7 % |
57 +| CAC (chambres) | 80.7 % |
58 +| SDB (salles de bains) | 70.3 % |
59 +| Année de construction | 74.4 % (dont rôle : 0.5 %) |
60 +| Taxes / évaluation municipale | 93.7 % |
61 +| Estimation Vrai-Prix (rôle) | 100.0 % |
62 62
63 63 ## Synchronisation
64 64
65 −- **Dernier sync** : 2026-08-18 17:47 — trouvé 4 093, +18 / ~18 / -18 — OK
66 −- **Erreurs récentes** : 0 sur les 6 derniers syncs
65 +- **Dernier sync** : 2026-08-18 19:41 — trouvé 4 095, +3 / ~4092 / -17 — OK
66 +- **Erreurs récentes** : 0 sur les 7 derniers syncs
67 67
68 68 Voir aussi les [mécanismes transverses](INDEX.md#mécanismes-transverses-tous-connecteurs) (budgets détail, dédup Centris+adresse, jointure rôle vraiprix.db).
modified docs/connecteurs/coldwell_banker.md +1 −1
@@ -1,6 +1,6 @@
1 1 # Coldwell Banker Québec (`coldwell_banker`)
2 2
3 −*Généré le 2026-08-18 18:11 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
3 +*Généré le 2026-08-19 00:49 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
4 4
5 5 ## Registre (`data/sources.json`)
6 6
modified docs/connecteurs/contact_ag_qc.md +16 −7
@@ -1,6 +1,6 @@
1 1 # Les Immeubles Contact (`contact_ag_qc`)
2 2
3 −*Généré le 2026-08-18 18:11 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
3 +*Généré le 2026-08-19 00:49 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
4 4
5 5 ## Registre (`data/sources.json`)
6 6
@@ -16,6 +16,7 @@
16 16
17 17 - Module : `immoka/connectors/immeuble_contact.py` — classe `ImmeubleContactConnector`
18 18 - Délai entre requêtes : 0.4 s ; cache détail BD : oui
19 +- Budgets env (enrichissement détail plafonné/exécution) : `IMMOKA_DETAIL_LIMIT` (défaut 100)
19 20
20 21 **En-tête du module :**
21 22
@@ -26,6 +27,14 @@
26 27 > Informatique). La liste est rendue SERVEUR sur immeubles_centris.php?page=…
27 28 > (résidentiel + revenu), encodage ISO-8859-1. Chaque carte porte déjà tout :
28 29 > n° MLS (Centris), type, adresse, ville, prix (data-cost) et photo Centris.
30 +> Page détail immeubles_centris_fiche.php?no_mls={mls} (ISO-8859-1 aussi) :
31 +> galerie complète mesimages/photos_centris/_{mls}_{n}.jpg (spans .item_slide,
32 +> dans l'ordre Centris), prix demandé, région + adresse complète (code postal),
33 +> courtiers (.texte_rouge + « Cell.: »), description (#description),
34 +> évaluation municipale, taxes, dimensions bâtiment/terrain (superficies en
35 +> m² étiquetées « (Mètres) »), compte de pièces (Total/Chambre/S. de bain/
36 +> S. d'eau), caractéristiques principales (#caracteristique_principales),
37 +> inclus/exclus. Pas de GPS sur la fiche.
29 38 > source_id « contact_ag_qc » : l'infixe _ag_ active la dédup Centris (db.refresh_dedup,
30 39 > sources %_ag_%) — si le n° Centris est déjà porté par une bannière couverte
31 40 > (RE/MAX, Via Capitale…), la fiche est masquée ; les inscriptions propres de
@@ -42,15 +51,15 @@
42 51 | GPS (lat/lng) | 97.7 % |
43 52 | Photos | 100.0 % |
44 53 | Prix | 100.0 % |
45 −| CAC (chambres) | 9.3 % |
46 −| SDB (salles de bains) | 0.0 % |
47 −| Année de construction | 83.7 % (dont rôle : 100.0 %) |
48 −| Taxes / évaluation municipale | 0.0 % |
54 +| CAC (chambres) | 83.7 % |
55 +| SDB (salles de bains) | 81.4 % |
56 +| Année de construction | 86.0 % (dont rôle : 0.0 %) |
57 +| Taxes / évaluation municipale | 100.0 % |
49 58 | Estimation Vrai-Prix (rôle) | 100.0 % |
50 59
51 60 ## Synchronisation
52 61
53 −- **Dernier sync** : 2026-08-18 17:52 — trouvé 43, +0 / ~0 / -0 — OK
54 −- **Erreurs récentes** : 0 sur les 6 derniers syncs
62 +- **Dernier sync** : 2026-08-19 00:05 — trouvé 43, +0 / ~43 / -0 — OK
63 +- **Erreurs récentes** : 0 sur les 7 derniers syncs
55 64
56 65 Voir aussi les [mécanismes transverses](INDEX.md#mécanismes-transverses-tous-connecteurs) (budgets détail, dédup Centris+adresse, jointure rôle vraiprix.db).
modified docs/connecteurs/domicilia.md +8 −8
@@ -1,6 +1,6 @@
1 1 # Domicilia Agence Immobilière (`domicilia`)
2 2
3 −*Généré le 2026-08-18 18:11 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
3 +*Généré le 2026-08-19 00:49 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
4 4
5 5 ## Registre (`data/sources.json`)
6 6
@@ -38,22 +38,22 @@
38 38
39 39 | Indicateur | Valeur |
40 40 |---|---|
41 −| Annonces en base (toutes) | 1 492 |
41 +| Annonces en base (toutes) | 1 495 |
42 42 | Actives | 1 449 |
43 43 | Visibles (après dédup) | 1 449 |
44 44 | Masquées par la dédup | 0 |
45 45 | GPS (lat/lng) | 99.9 % |
46 46 | Photos | 100.0 % |
47 47 | Prix | 100.0 % |
48 −| CAC (chambres) | 67.7 % |
49 −| SDB (salles de bains) | 66.5 % |
50 −| Année de construction | 73.4 % (dont rôle : 6.1 %) |
51 −| Taxes / évaluation municipale | 89.5 % |
52 −| Estimation Vrai-Prix (rôle) | 99.9 % |
48 +| CAC (chambres) | 69.4 % |
49 +| SDB (salles de bains) | 66.8 % |
50 +| Année de construction | 73.4 % (dont rôle : 0.0 %) |
51 +| Taxes / évaluation municipale | 92.1 % |
52 +| Estimation Vrai-Prix (rôle) | 99.8 % |
53 53
54 54 ## Synchronisation
55 55
56 −- **Dernier sync** : 2026-08-18 17:38 — trouvé 1 446, +1 / ~1 / -1 — OK
56 +- **Dernier sync** : 2026-08-19 00:47 — trouvé 1 447, +3 / ~1444 / -0 — OK
57 57 - **Erreurs récentes** : 0 sur les 10 derniers syncs
58 58
59 59 Voir aussi les [mécanismes transverses](INDEX.md#mécanismes-transverses-tous-connecteurs) (budgets détail, dédup Centris+adresse, jointure rôle vraiprix.db).
modified docs/connecteurs/duproprio.md +7 −7
@@ -1,6 +1,6 @@
1 1 # DuProprio (sans courtier) (`duproprio`)
2 2
3 −*Généré le 2026-08-18 18:11 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
3 +*Généré le 2026-08-19 00:49 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
4 4
5 5 ## Registre (`data/sources.json`)
6 6
@@ -38,16 +38,16 @@
38 38 |---|---|
39 39 | Annonces en base (toutes) | 7 586 |
40 40 | Actives | 7 411 |
41 −| Visibles (après dédup) | 7 411 |
42 −| Masquées par la dédup | 0 |
43 −| GPS (lat/lng) | 90.9 % |
44 −| Photos | 100.0 % |
41 +| Visibles (après dédup) | 7 402 |
42 +| Masquées par la dédup | 9 |
43 +| GPS (lat/lng) | 91.0 % |
44 +| Photos | 94.0 % |
45 45 | Prix | 98.6 % |
46 46 | CAC (chambres) | 80.5 % |
47 47 | SDB (salles de bains) | 79.8 % |
48 −| Année de construction | 79.3 % (dont rôle : 8.9 %) |
48 +| Année de construction | 79.4 % (dont rôle : 9.0 %) |
49 49 | Taxes / évaluation municipale | 52.7 % |
50 −| Estimation Vrai-Prix (rôle) | 99.8 % |
50 +| Estimation Vrai-Prix (rôle) | 100.0 % |
51 51
52 52 ## Synchronisation
53 53
modified docs/connecteurs/engel_volkers.md +3 −3
@@ -1,6 +1,6 @@
1 1 # Engel & Völkers Montréal / Québec (`engel_volkers`)
2 2
3 −*Généré le 2026-08-18 18:11 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
3 +*Généré le 2026-08-19 00:49 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
4 4
5 5 ## Registre (`data/sources.json`)
6 6
@@ -39,8 +39,8 @@
39 39 | GPS (lat/lng) | 87.3 % |
40 40 | Photos | 98.9 % |
41 41 | Prix | 89.9 % |
42 −| CAC (chambres) | 35.2 % |
43 −| SDB (salles de bains) | 20.4 % |
42 +| CAC (chambres) | 35.4 % |
43 +| SDB (salles de bains) | 20.5 % |
44 44 | Année de construction | 70.0 % (dont rôle : 100.0 %) |
45 45 | Taxes / évaluation municipale | 0.0 % |
46 46 | Estimation Vrai-Prix (rôle) | 89.4 % |
modified docs/connecteurs/exp_ag_qc.md +12 −12
@@ -1,6 +1,6 @@
1 1 # eXp Agence immobilière (Québec) (`exp_ag_qc`)
2 2
3 −*Généré le 2026-08-18 18:11 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
3 +*Généré le 2026-08-19 00:49 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
4 4
5 5 ## Registre (`data/sources.json`)
6 6
@@ -52,22 +52,22 @@
52 52
53 53 | Indicateur | Valeur |
54 54 |---|---|
55 −| Annonces en base (toutes) | 1 023 |
56 −| Actives | 1 000 |
57 −| Visibles (après dédup) | 888 |
58 −| Masquées par la dédup | 112 |
59 −| GPS (lat/lng) | 67.1 % |
55 +| Annonces en base (toutes) | 1 032 |
56 +| Actives | 1 009 |
57 +| Visibles (après dédup) | 893 |
58 +| Masquées par la dédup | 116 |
59 +| GPS (lat/lng) | 78.9 % |
60 60 | Photos | 100.0 % |
61 61 | Prix | 99.8 % |
62 −| CAC (chambres) | 14.4 % |
63 −| SDB (salles de bains) | 0.0 % |
64 −| Année de construction | 55.4 % (dont rôle : 99.6 %) |
65 −| Taxes / évaluation municipale | 0.0 % |
62 +| CAC (chambres) | 45.5 % |
63 +| SDB (salles de bains) | 36.5 % |
64 +| Année de construction | 68.1 % (dont rôle : 1.6 %) |
65 +| Taxes / évaluation municipale | 40.6 % |
66 66 | Estimation Vrai-Prix (rôle) | 100.0 % |
67 67
68 68 ## Synchronisation
69 69
70 −- **Dernier sync** : 2026-08-18 17:52 — trouvé 1 000, +0 / ~0 / -0 — OK
71 −- **Erreurs récentes** : 0 sur les 6 derniers syncs
70 +- **Dernier sync** : 2026-08-18 19:54 — trouvé 1 000, +9 / ~991 / -0 — OK
71 +- **Erreurs récentes** : 0 sur les 7 derniers syncs
72 72
73 73 Voir aussi les [mécanismes transverses](INDEX.md#mécanismes-transverses-tous-connecteurs) (budgets détail, dédup Centris+adresse, jointure rôle vraiprix.db).
modified docs/connecteurs/expert_immobilier_pm.md +1 −1
@@ -1,6 +1,6 @@
1 1 # L'Expert Immobilier P.M. (`expert_immobilier_pm`)
2 2
3 −*Généré le 2026-08-18 18:11 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
3 +*Généré le 2026-08-19 00:49 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
4 4
5 5 ## Registre (`data/sources.json`)
6 6
modified docs/connecteurs/famille-c21-ag.md +10 −10
@@ -1,6 +1,6 @@
1 1 # Famille Century 21 (`c21_ag_*`)
2 2
3 −*Généré le 2026-08-18 18:11 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
3 +*Généré le 2026-08-19 00:49 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
4 4
5 5 Connecteurs par compte Century 21, générés depuis `data/century21_agencies.json` (plateforme source.immo).
6 6
@@ -29,8 +29,8 @@ Connecteurs par compte Century 21, générés depuis `data/century21_agencies.js
29 29
30 30 | source_id | Domaine | Plateforme | Visibles | Actives | Masquées dédup | Dernier sync | OK |
31 31 |---|---|---|---|---|---|---|---|
32 −| [`c21_ag_quebec`](c21_ag_quebec.md) | — | source.immo | 1 585 | 1 612 | 27 | 2026-08-18 17:47 | ✅ |
33 −| [`c21_ag_vision`](c21_ag_vision.md) | — | source.immo | 1 | 139 | 138 | 2026-08-18 17:47 | ✅ |
32 +| [`c21_ag_quebec`](c21_ag_quebec.md) | — | source.immo | 1 566 | 1 603 | 37 | 2026-08-18 18:56 | ✅ |
33 +| [`c21_ag_vision`](c21_ag_vision.md) | — | source.immo | 0 | 139 | 139 | 2026-08-18 18:58 | ✅ |
34 34
35 35 Entrées du registre sans connecteur instancié (2) : `quebec.c21.ca`, `vision.c21.ca`
36 36
@@ -39,15 +39,15 @@ Entrées du registre sans connecteur instancié (2) : `quebec.c21.ca`, `vision.c
39 39 | Indicateur | Valeur |
40 40 |---|---|
41 41 | Annonces en base (toutes) | 1 817 |
42 −| Actives | 1 751 |
43 −| Visibles (après dédup) | 1 586 |
44 −| Masquées par la dédup | 165 |
42 +| Actives | 1 742 |
43 +| Visibles (après dédup) | 1 566 |
44 +| Masquées par la dédup | 176 |
45 45 | GPS (lat/lng) | 99.9 % |
46 46 | Photos | 100.0 % |
47 47 | Prix | 100.0 % |
48 −| CAC (chambres) | 75.1 % |
48 +| CAC (chambres) | 75.9 % |
49 49 | SDB (salles de bains) | 72.9 % |
50 −| Année de construction | 75.7 % (dont rôle : 9.9 %) |
51 −| Taxes / évaluation municipale | 83.8 % |
52 −| Estimation Vrai-Prix (rôle) | 99.6 % |
50 +| Année de construction | 75.6 % (dont rôle : 0.2 %) |
51 +| Taxes / évaluation municipale | 85.8 % |
52 +| Estimation Vrai-Prix (rôle) | 100.0 % |
53 53
modified docs/connecteurs/famille-remax-ag.md +5 −5
@@ -1,6 +1,6 @@
1 1 # Famille RE/MAX sous-agences (`remax_ag_*`)
2 2
3 −*Généré le 2026-08-18 18:11 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
3 +*Généré le 2026-08-19 00:49 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
4 4
5 5 Un connecteur par sous-agence RE/MAX (sites propres, indépendants du portail central), généré dynamiquement depuis `data/remax_agencies.json`.
6 6
@@ -68,7 +68,7 @@ Budgets env : `IMMOKA_AGENCE_DETAIL_LIMIT` (défaut 0)
68 68 | `remax_ag_futur` | remax-futur.ca | centris-other | 3 | 195 | 192 | 2026-08-18 13:16 | ✅ |
69 69 | `remax_ag_harmonie` | remaxharmonie.com | nos-proprietes | 55 | 375 | 320 | 2026-08-18 13:16 | ✅ |
70 70 | `remax_ag_harricana` | remax-harricana.com | nos-proprietes | 6 | 155 | 149 | 2026-08-18 13:16 | ✅ |
71 −| `remax_ag_horizon` | remax-horizon.ca | nos-proprietes | 92 | 463 | 371 | 2026-08-18 13:16 | ✅ |
71 +| `remax_ag_horizon` | remax-horizon.ca | nos-proprietes | 91 | 463 | 372 | 2026-08-18 13:16 | ✅ |
72 72 | `remax_ag_imagine` | remax-imagineprivilege.com | nos-proprietes | 59 | 454 | 395 | 2026-08-18 13:16 | ✅ |
73 73 | `remax_ag_immobilia` | remaximmobilia.ca | nos-proprietes | 0 | 7 | 7 | 2026-08-18 13:16 | ✅ |
74 74 | `remax_ag_immobilierplus` | remax-immobilierplus.com | nos-proprietes | 5 | 56 | 51 | 2026-08-18 13:16 | ✅ |
@@ -95,14 +95,14 @@ Entrées du registre sans connecteur instancié (2) : `remax-pro-commercial.ca`,
95 95 |---|---|
96 96 | Annonces en base (toutes) | 31 221 |
97 97 | Actives | 29 711 |
98 −| Visibles (après dédup) | 3 172 |
99 −| Masquées par la dédup | 26 539 |
98 +| Visibles (après dédup) | 3 171 |
99 +| Masquées par la dédup | 26 540 |
100 100 | GPS (lat/lng) | 97.1 % |
101 101 | Photos | 0.0 % |
102 102 | Prix | 0.0 % |
103 103 | CAC (chambres) | 7.9 % |
104 104 | SDB (salles de bains) | 0.0 % |
105 −| Année de construction | 86.9 % (dont rôle : 100.0 %) |
105 +| Année de construction | 87.1 % (dont rôle : 100.0 %) |
106 106 | Taxes / évaluation municipale | 0.0 % |
107 107 | Estimation Vrai-Prix (rôle) | 100.0 % |
108 108
modified docs/connecteurs/famille-source-immo.md +23 −23
@@ -1,6 +1,6 @@
1 1 # Famille source.immo (agences indépendantes)
2 2
3 −*Généré le 2026-08-18 18:11 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
3 +*Généré le 2026-08-19 00:49 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
4 4
5 5 Agences indépendantes servies par la plateforme source.immo (comptes/API dans `data/source_immo_agencies.json`).
6 6
@@ -29,19 +29,19 @@ Agences indépendantes servies par la plateforme source.immo (comptes/API dans `
29 29
30 30 | source_id | Domaine | Plateforme | Visibles | Actives | Masquées dédup | Dernier sync | OK |
31 31 |---|---|---|---|---|---|---|---|
32 −| [`avenue`](avenue.md) | — | source.immo | 42 | 42 | 0 | 2026-08-18 17:38 | ✅ |
33 −| [`domicilia`](domicilia.md) | — | source.immo | 1 449 | 1 449 | 0 | 2026-08-18 17:38 | ✅ |
34 −| [`ferri`](ferri.md) | — | source.immo | 22 | 22 | 0 | 2026-08-18 17:38 | ✅ |
35 −| [`gaillardetz`](gaillardetz.md) | — | source.immo | 13 | 13 | 0 | 2026-08-18 18:10 | ✅ |
36 −| [`immodev`](immodev.md) | — | source.immo | 92 | 92 | 0 | 2026-08-18 18:10 | ✅ |
37 −| [`niddamour`](niddamour.md) | — | source.immo | 0 | 0 | 0 | 2026-08-18 17:38 | ✅ |
38 −| [`peladeau`](peladeau.md) | — | source.immo | 47 | 47 | 0 | 2026-08-18 17:38 | ✅ |
39 −| [`provad`](provad.md) | — | source.immo | 81 | 81 | 0 | 2026-08-18 17:38 | ✅ |
40 −| [`realta`](realta.md) | — | source.immo | 82 | 82 | 0 | 2026-08-18 18:09 | ✅ |
41 −| [`si_ag_ciemcq`](si_ag_ciemcq.md) | — | source.immo | 1 179 | 3 931 | 2 752 | 2026-08-18 17:38 | ✅ |
42 −| [`si_ag_jga`](si_ag_jga.md) | — | source.immo | 59 | 64 | 5 | 2026-08-18 17:38 | ✅ |
43 −| [`si_ag_katiasamson`](si_ag_katiasamson.md) | — | source.immo | 26 | 31 | 5 | 2026-08-18 17:38 | ✅ |
44 −| [`si_ag_theagency`](si_ag_theagency.md) | — | source.immo | 236 | 305 | 69 | 2026-08-18 17:38 | ✅ |
32 +| [`avenue`](avenue.md) | — | source.immo | 43 | 43 | 0 | 2026-08-19 00:47 | ✅ |
33 +| [`domicilia`](domicilia.md) | — | source.immo | 1 449 | 1 449 | 0 | 2026-08-19 00:47 | ✅ |
34 +| [`ferri`](ferri.md) | — | source.immo | 22 | 22 | 0 | 2026-08-19 00:47 | ✅ |
35 +| [`gaillardetz`](gaillardetz.md) | — | source.immo | 13 | 13 | 0 | 2026-08-19 00:47 | ✅ |
36 +| [`immodev`](immodev.md) | — | source.immo | 92 | 92 | 0 | 2026-08-19 00:47 | ✅ |
37 +| [`niddamour`](niddamour.md) | — | source.immo | 0 | 0 | 0 | 2026-08-19 00:47 | ✅ |
38 +| [`peladeau`](peladeau.md) | — | source.immo | 47 | 47 | 0 | 2026-08-19 00:47 | ✅ |
39 +| [`provad`](provad.md) | — | source.immo | 81 | 81 | 0 | 2026-08-19 00:47 | ✅ |
40 +| [`realta`](realta.md) | — | source.immo | 83 | 83 | 0 | 2026-08-19 00:47 | ✅ |
41 +| [`si_ag_ciemcq`](si_ag_ciemcq.md) | — | source.immo | 1 164 | 3 919 | 2 755 | 2026-08-19 00:47 | ✅ |
42 +| [`si_ag_jga`](si_ag_jga.md) | — | source.immo | 59 | 64 | 5 | 2026-08-19 00:47 | ✅ |
43 +| [`si_ag_katiasamson`](si_ag_katiasamson.md) | — | source.immo | 26 | 31 | 5 | 2026-08-19 00:47 | ✅ |
44 +| [`si_ag_theagency`](si_ag_theagency.md) | — | source.immo | 236 | 306 | 70 | 2026-08-19 00:47 | ✅ |
45 45
46 46 Entrées du registre sans connecteur instancié (13) : `www.realta.ca`, `www.immodev.ca`, `www.gaillardetz.ca`, `www.domicilia.com`, `www.niddamour.ca`, `theagencymontreal.com`, `www.mon-toit.net`, `avenueimmo.com`, `provad.ca`, `www.epeladeau.com`, `www.ferri.ca`, `jgacommercial.com`, `www.katiasamson.com`
47 47
@@ -49,16 +49,16 @@ Entrées du registre sans connecteur instancié (13) : `www.realta.ca`, `www.imm
49 49
50 50 | Indicateur | Valeur |
51 51 |---|---|
52 −| Annonces en base (toutes) | 6 211 |
53 −| Actives | 6 159 |
54 −| Visibles (après dédup) | 3 328 |
55 −| Masquées par la dédup | 2 831 |
52 +| Annonces en base (toutes) | 6 230 |
53 +| Actives | 6 150 |
54 +| Visibles (après dédup) | 3 315 |
55 +| Masquées par la dédup | 2 835 |
56 56 | GPS (lat/lng) | 99.9 % |
57 57 | Photos | 100.0 % |
58 58 | Prix | 100.0 % |
59 −| CAC (chambres) | 65.1 % |
60 −| SDB (salles de bains) | 61.7 % |
61 −| Année de construction | 72.5 % (dont rôle : 6.6 %) |
62 −| Taxes / évaluation municipale | 86.2 % |
63 −| Estimation Vrai-Prix (rôle) | 99.6 % |
59 +| CAC (chambres) | 66.9 % |
60 +| SDB (salles de bains) | 62.1 % |
61 +| Année de construction | 72.7 % (dont rôle : 0.0 %) |
62 +| Taxes / évaluation municipale | 88.5 % |
63 +| Estimation Vrai-Prix (rôle) | 99.8 % |
64 64
modified docs/connecteurs/famille-via-ag.md +12 −12
@@ -1,6 +1,6 @@
1 1 # Famille Via Capitale agences (`via_ag_*`)
2 2
3 −*Généré le 2026-08-18 18:11 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
3 +*Généré le 2026-08-19 00:49 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
4 4
5 5 Connecteurs par bannière Via Capitale, générés depuis `data/via_capitale_agencies.json` (comptes API source.immo par agence).
6 6
@@ -28,10 +28,10 @@ Connecteurs par bannière Via Capitale, générés depuis `data/via_capitale_age
28 28
29 29 | source_id | Domaine | Plateforme | Visibles | Actives | Masquées dédup | Dernier sync | OK |
30 30 |---|---|---|---|---|---|---|---|
31 −| [`via_ag_acces`](via_ag_acces.md) | — | source.immo | 7 | 182 | 175 | 2026-08-18 13:38 | ✅ |
32 −| [`via_ag_elite`](via_ag_elite.md) | — | source.immo | 9 | 317 | 308 | 2026-08-18 13:38 | ✅ |
33 −| `via_ag_partenaires` | — | source.immo | 20 | 444 | 424 | 2026-08-18 13:38 | ✅ |
34 −| [`via_ag_select`](via_ag_select.md) | — | source.immo | 11 | 584 | 573 | 2026-08-18 13:38 | ✅ |
31 +| [`via_ag_acces`](via_ag_acces.md) | — | source.immo | 7 | 182 | 175 | 2026-08-18 19:06 | ✅ |
32 +| [`via_ag_elite`](via_ag_elite.md) | — | source.immo | 9 | 316 | 307 | 2026-08-18 19:08 | ✅ |
33 +| `via_ag_partenaires` | — | source.immo | 20 | 444 | 424 | 2026-08-18 19:11 | ✅ |
34 +| [`via_ag_select`](via_ag_select.md) | — | source.immo | 14 | 585 | 571 | 2026-08-18 19:15 | ✅ |
35 35
36 36 Entrées du registre sans connecteur instancié (5) : `viacapitaleacces.com`, `viacapitaledumontroyal.com`, `viacapitaleelite.immo`, `viacapitalepartenaires.com`, `viacapitaleselect.com`
37 37
@@ -39,16 +39,16 @@ Entrées du registre sans connecteur instancié (5) : `viacapitaleacces.com`, `v
39 39
40 40 | Indicateur | Valeur |
41 41 |---|---|
42 −| Annonces en base (toutes) | 1 586 |
42 +| Annonces en base (toutes) | 1 589 |
43 43 | Actives | 1 527 |
44 −| Visibles (après dédup) | 47 |
45 −| Masquées par la dédup | 1 480 |
44 +| Visibles (après dédup) | 50 |
45 +| Masquées par la dédup | 1 477 |
46 46 | GPS (lat/lng) | 100.0 % |
47 47 | Photos | 100.0 % |
48 48 | Prix | 100.0 % |
49 −| CAC (chambres) | 53.2 % |
50 −| SDB (salles de bains) | 48.9 % |
51 −| Année de construction | 91.5 % (dont rôle : 9.3 %) |
52 −| Taxes / évaluation municipale | 89.4 % |
49 +| CAC (chambres) | 60.0 % |
50 +| SDB (salles de bains) | 52.0 % |
51 +| Année de construction | 92.0 % (dont rôle : 0.0 %) |
52 +| Taxes / évaluation municipale | 92.0 % |
53 53 | Estimation Vrai-Prix (rôle) | 100.0 % |
54 54
modified docs/connecteurs/ferri.md +3 −3
@@ -1,6 +1,6 @@
1 1 # Ferri Services Immobiliers (`ferri`)
2 2
3 −*Généré le 2026-08-18 18:11 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
3 +*Généré le 2026-08-19 00:49 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
4 4
5 5 ## Registre (`data/sources.json`)
6 6
@@ -53,7 +53,7 @@
53 53
54 54 ## Synchronisation
55 55
56 −- **Dernier sync** : 2026-08-18 17:38 — trouvé 22, +0 / ~0 / -0 — OK
57 −- **Erreurs récentes** : 0 sur les 4 derniers syncs
56 +- **Dernier sync** : 2026-08-19 00:47 — trouvé 22, +0 / ~22 / -0 — OK
57 +- **Erreurs récentes** : 0 sur les 6 derniers syncs
58 58
59 59 Voir aussi les [mécanismes transverses](INDEX.md#mécanismes-transverses-tous-connecteurs) (budgets détail, dédup Centris+adresse, jointure rôle vraiprix.db).
modified docs/connecteurs/gaillardetz.md +2 −2
@@ -1,6 +1,6 @@
1 1 # Gaillardetz Agence Immobilière (`gaillardetz`)
2 2
3 −*Généré le 2026-08-18 18:11 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
3 +*Généré le 2026-08-19 00:49 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
4 4
5 5 ## Registre (`data/sources.json`)
6 6
@@ -53,7 +53,7 @@
53 53
54 54 ## Synchronisation
55 55
56 −- **Dernier sync** : 2026-08-18 18:10 — trouvé 13, +0 / ~13 / -0 — OK
56 +- **Dernier sync** : 2026-08-19 00:47 — trouvé 13, +0 / ~13 / -0 — OK
57 57 - **Erreurs récentes** : 0 sur les 10 derniers syncs
58 58
59 59 Voir aussi les [mécanismes transverses](INDEX.md#mécanismes-transverses-tous-connecteurs) (budgets détail, dédup Centris+adresse, jointure rôle vraiprix.db).
modified docs/connecteurs/glmc_ag_qc.md +6 −6
@@ -1,6 +1,6 @@
1 1 # Les Immeubles GLMC (`glmc_ag_qc`)
2 2
3 −*Généré le 2026-08-18 18:11 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
3 +*Généré le 2026-08-19 00:49 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
4 4
5 5 ## Registre (`data/sources.json`)
6 6
@@ -55,15 +55,15 @@
55 55 | GPS (lat/lng) | 63.1 % |
56 56 | Photos | 100.0 % |
57 57 | Prix | 99.4 % |
58 −| CAC (chambres) | 0.0 % |
59 −| SDB (salles de bains) | 0.0 % |
60 −| Année de construction | 36.4 % (dont rôle : 1.6 %) |
58 +| CAC (chambres) | 40.3 % |
59 +| SDB (salles de bains) | 39.8 % |
60 +| Année de construction | 36.4 % (dont rôle : 0.0 %) |
61 61 | Taxes / évaluation municipale | 52.8 % |
62 62 | Estimation Vrai-Prix (rôle) | 100.0 % |
63 63
64 64 ## Synchronisation
65 65
66 −- **Dernier sync** : 2026-08-18 17:52 — trouvé 176, +0 / ~0 / -0 — OK
67 −- **Erreurs récentes** : 0 sur les 7 derniers syncs
66 +- **Dernier sync** : 2026-08-18 23:45 — trouvé 176, +0 / ~176 / -0 — OK
67 +- **Erreurs récentes** : 0 sur les 8 derniers syncs
68 68
69 69 Voir aussi les [mécanismes transverses](INDEX.md#mécanismes-transverses-tous-connecteurs) (budgets détail, dédup Centris+adresse, jointure rôle vraiprix.db).
modified docs/connecteurs/guidehabitation.md +5 −5
@@ -1,6 +1,6 @@
1 1 # Guide Habitation (projets neufs) (`guidehabitation`)
2 2
3 −*Généré le 2026-08-18 18:11 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
3 +*Généré le 2026-08-19 00:49 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
4 4
5 5 ## Registre (`data/sources.json`)
6 6
@@ -50,14 +50,14 @@
50 50 | Photos | 100.0 % |
51 51 | Prix | 100.0 % |
52 52 | CAC (chambres) | 100.0 % |
53 −| SDB (salles de bains) | 0.0 % |
54 −| Année de construction | 27.7 % (dont rôle : 100.0 %) |
53 +| SDB (salles de bains) | 7.4 % |
54 +| Année de construction | 27.7 % (dont rôle : 3.8 %) |
55 55 | Taxes / évaluation municipale | 0.0 % |
56 56 | Estimation Vrai-Prix (rôle) | 100.0 % |
57 57
58 58 ## Synchronisation
59 59
60 −- **Dernier sync** : 2026-08-18 17:52 — trouvé 95, +0 / ~1 / -0 — OK
61 −- **Erreurs récentes** : 0 sur les 4 derniers syncs
60 +- **Dernier sync** : 2026-08-18 23:47 — trouvé 95, +0 / ~90 / -0 — OK
61 +- **Erreurs récentes** : 0 sur les 5 derniers syncs
62 62
63 63 Voir aussi les [mécanismes transverses](INDEX.md#mécanismes-transverses-tous-connecteurs) (budgets détail, dédup Centris+adresse, jointure rôle vraiprix.db).
modified docs/connecteurs/image_ag_qc.md +17 −8
@@ -1,6 +1,6 @@
1 1 # Image, l'agence immobilière (`image_ag_qc`)
2 2
3 −*Généré le 2026-08-18 18:11 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
3 +*Généré le 2026-08-19 00:49 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
4 4
5 5 ## Registre (`data/sources.json`)
6 6
@@ -16,6 +16,7 @@
16 16
17 17 - Module : `immoka/connectors/agenceimage.py` — classe `AgenceImageConnector`
18 18 - Délai entre requêtes : 0.5 s ; cache détail BD : oui
19 +- Budgets env (enrichissement détail plafonné/exécution) : `IMMOKA_DETAIL_LIMIT` (défaut 100)
19 20
20 21 **En-tête du module :**
21 22
@@ -27,6 +28,14 @@
27 28 > rend TOUT l'inventaire côté serveur : chaque carte porte n° Centris (rel/URL),
28 29 > type + ville (dans l'URL et l'alt), coordonnées (data-geo-lat/lng), prix et
29 30 > photo (yoamo.immo/ALSPicture.axd?propId={Centris}).
31 +> Page détail (rel="/proprietes/a-vendre/{type}/{ville}/{centris}/") rendue
32 +> serveur elle aussi : galerie complète (ALSPicture.axd, une URL par seq=N,
33 +> pleine taille sans &w=), description JSON-LD (Product), sections
34 +> <sup>libellé</sup><label>valeur</label> (#building/#land/#more-carac),
35 +> pièces (#rooms), « En complément » (taxes, évaluation, année, terrain),
36 +> inclusions/exclusions, courtier (#broker_list, schema.org/RealEstateAgent)
37 +> et lien Google Maps (adresse + GPS). ⚠ la section #related (« Aussi
38 +> disponibles ») liste d'AUTRES propriétés — tout est parsé AVANT elle.
30 39 > source_id « image_ag_qc » : infixe _ag_ = dédup Centris (db.refresh_dedup) —
31 40 > masque les fiches déjà portées par une bannière couverte au Saguenay–LSJ.
32 41
@@ -35,21 +44,21 @@
35 44 | Indicateur | Valeur |
36 45 |---|---|
37 46 | Annonces en base (toutes) | 78 |
38 −| Actives | 78 |
39 −| Visibles (après dédup) | 78 |
47 +| Actives | 76 |
48 +| Visibles (après dédup) | 76 |
40 49 | Masquées par la dédup | 0 |
41 50 | GPS (lat/lng) | 100.0 % |
42 51 | Photos | 100.0 % |
43 52 | Prix | 100.0 % |
44 53 | CAC (chambres) | 100.0 % |
45 54 | SDB (salles de bains) | 100.0 % |
46 −| Année de construction | 0.0 % |
47 −| Taxes / évaluation municipale | 0.0 % |
48 −| Estimation Vrai-Prix (rôle) | 0.0 % |
55 +| Année de construction | 77.6 % (dont rôle : 0.0 %) |
56 +| Taxes / évaluation municipale | 75.0 % |
57 +| Estimation Vrai-Prix (rôle) | 96.1 % |
49 58
50 59 ## Synchronisation
51 60
52 −- **Dernier sync** : 2026-08-18 17:38 — trouvé 78, +0 / ~0 / -0 — OK
53 −- **Erreurs récentes** : 0 sur les 7 derniers syncs
61 +- **Dernier sync** : 2026-08-19 00:47 — trouvé 76, +0 / ~76 / -2 — OK
62 +- **Erreurs récentes** : 0 sur les 9 derniers syncs
54 63
55 64 Voir aussi les [mécanismes transverses](INDEX.md#mécanismes-transverses-tous-connecteurs) (budgets détail, dédup Centris+adresse, jointure rôle vraiprix.db).
modified docs/connecteurs/imcha_ag_qc.md +7 −7
@@ -1,6 +1,6 @@
1 1 # Les Immeubles Charlevoix (`imcha_ag_qc`)
2 2
3 −*Généré le 2026-08-18 18:11 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
3 +*Généré le 2026-08-19 00:49 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
4 4
5 5 ## Registre (`data/sources.json`)
6 6
@@ -52,15 +52,15 @@
52 52 | GPS (lat/lng) | 0.0 % |
53 53 | Photos | 100.0 % |
54 54 | Prix | 40.6 % |
55 −| CAC (chambres) | 62.3 % |
56 −| SDB (salles de bains) | 0.0 % |
57 −| Année de construction | 0.0 % |
58 −| Taxes / évaluation municipale | 0.0 % |
55 +| CAC (chambres) | 64.2 % |
56 +| SDB (salles de bains) | 57.5 % |
57 +| Année de construction | 54.7 % (dont rôle : 0.0 %) |
58 +| Taxes / évaluation municipale | 88.7 % |
59 59 | Estimation Vrai-Prix (rôle) | 0.0 % |
60 60
61 61 ## Synchronisation
62 62
63 −- **Dernier sync** : 2026-08-18 17:52 — trouvé 110, +0 / ~0 / -2 — OK
64 −- **Erreurs récentes** : 0 sur les 6 derniers syncs
63 +- **Dernier sync** : 2026-08-18 23:52 — trouvé 110, +0 / ~110 / -0 — OK
64 +- **Erreurs récentes** : 0 sur les 7 derniers syncs
65 65
66 66 Voir aussi les [mécanismes transverses](INDEX.md#mécanismes-transverses-tous-connecteurs) (budgets détail, dédup Centris+adresse, jointure rôle vraiprix.db).
modified docs/connecteurs/immodev.md +2 −2
@@ -1,6 +1,6 @@
1 1 # Immodev Agence Immobilière (`immodev`)
2 2
3 −*Généré le 2026-08-18 18:11 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
3 +*Généré le 2026-08-19 00:49 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
4 4
5 5 ## Registre (`data/sources.json`)
6 6
@@ -53,7 +53,7 @@
53 53
54 54 ## Synchronisation
55 55
56 −- **Dernier sync** : 2026-08-18 18:10 — trouvé 92, +0 / ~92 / -0 — OK
56 +- **Dernier sync** : 2026-08-19 00:47 — trouvé 92, +0 / ~92 / -0 — OK
57 57 - **Erreurs récentes** : 0 sur les 10 derniers syncs
58 58
59 59 Voir aussi les [mécanismes transverses](INDEX.md#mécanismes-transverses-tous-connecteurs) (budgets détail, dédup Centris+adresse, jointure rôle vraiprix.db).
modified docs/connecteurs/kijiji.md +1 −1
@@ -1,6 +1,6 @@
1 1 # Kijiji Québec (`kijiji`)
2 2
3 −*Généré le 2026-08-18 18:11 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
3 +*Généré le 2026-08-19 00:49 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
4 4
5 5 ## Registre (`data/sources.json`)
6 6
modified docs/connecteurs/kw_distinction.md +24 −20
@@ -1,54 +1,58 @@
1 1 # Keller Williams Distinction (`kw_distinction`)
2 2
3 −*Généré le 2026-08-18 18:11 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
3 +*Généré le 2026-08-19 00:49 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
4 4
5 5 ## Registre (`data/sources.json`)
6 6
7 7 - **Site** : https://www.kwdistinction.com
8 −- **Recherche** : https://www.kwdistinction.com/sitemap.xml
8 +- **Recherche** : https://www.kwdistinction.com/maison-a-vendre-au-quebec/condo-a-vendre-au-quebec/
9 9 - **Couverture** : Gatineau / Outaouais
10 10 - **Type** : franchise
11 11 - **Statut** : actif
12 12
13 −> ASP.NET (tonikwebstudio) : grille/fiche en AJAX (prix/photos non rendus statiquement, ni fiablement via Firecrawl). Enumération via sitemap.xml (167 propr.) ; slug d'URL = ville/type/chambres/rue/no-Centris. Champs liste: adresse, ville, secteur, type, chambres, Centris. Prix/photos NON dispo.
13 +> ASP.NET (Olivex/tonikweb) : page resultats rendue serveur, paginee PageID=1..N (~6 cartes/page) — cartes completes (type, prix, adresse, ville/secteur, MLS, cac/sdb, resume, photo). Fiches detail rendues serveur : galerie /_upload/photos/{id}-{n}.jpg, description, tableau Details, proximite. NE PAS utiliser sitemap.xml (URLs anciennes sector--city -> /Pages/Erreur/). ~197 inscriptions dont ~144 avec prix (reste locations/commercial au pi2).
14 14
15 15 ## Mécanique (introspection du code)
16 16
17 17 - Module : `immoka/connectors/kw_distinction.py` — classe `KwDistinctionConnector`
18 18 - Délai entre requêtes : 0.5 s ; cache détail BD : oui
19 +- Budgets env (enrichissement détail plafonné/exécution) : `IMMOKA_KW_DETAIL_LIMIT` (défaut 400)
19 20
20 21 **En-tête du module :**
21 22
22 23 > Immo-Ka — Agrégateur de maisons à vendre (province de Québec)
23 24 > Auteur : Simon-Pierre Boucher — contact@spboucher.ai
24 25 > connectors/kw_distinction.py : Keller Williams Distinction (Gatineau/Outaouais)
25 −> Site ASP.NET (plateforme tonikwebstudio) : la grille de résultats et les
26 −> fiches détail sont rendues via AJAX/UpdatePanel (prix et photos absents du
27 −> HTML statique, et non rendus de façon fiable même par Firecrawl). En revanche
28 −> le sitemap.xml énumère TOUTES les propriétés, et l'URL encode ville, type,
29 −> nombre de chambres, rue et numéro Centris — de quoi bâtir une fiche solide
30 −> au niveau liste. Le numéro Centris sert de clé de déduplication.
26 +> Site ASP.NET (plateforme Olivex/tonikweb). La page « Trouver une propriété »
27 +> est rendue serveur et paginée par querystring (PageID=1..N, ~6 cartes/page,
28 +> total affiché « N résultat(s) ») : cartes complètes — type, prix, adresse,
29 +> ville (secteur), MLS, cac/sdb, résumé, photo. Les fiches détail sont aussi
30 +> rendues serveur : galerie complète (/_upload/photos/{id}-{n}.jpg),
31 +> description, tableau « Détails de la propriété », proximité.
32 +> ⚠️ Ne PAS revenir au sitemap.xml : il est figé (anciennes URL
33 +> « sector--city » qui redirigent toutes vers /Pages/Erreur/) — c'est ce qui
34 +> avait laissé la source à 0 % prix/photos/description.
31 35
32 36 ## Volumétrie & complétude (BD live)
33 37
34 38 | Indicateur | Valeur |
35 39 |---|---|
36 −| Annonces en base (toutes) | 167 |
37 −| Actives | 167 |
38 −| Visibles (après dédup) | 167 |
40 +| Annonces en base (toutes) | 364 |
41 +| Actives | 364 |
42 +| Visibles (après dédup) | 364 |
39 43 | Masquées par la dédup | 0 |
40 −| GPS (lat/lng) | 98.8 % |
41 −| Photos | 0.0 % |
42 −| Prix | 0.0 % |
43 −| CAC (chambres) | 94.0 % |
44 −| SDB (salles de bains) | 0.0 % |
45 −| Année de construction | 0.0 % |
46 −| Taxes / évaluation municipale | 0.0 % |
44 +| GPS (lat/lng) | 68.1 % |
45 +| Photos | 54.1 % |
46 +| Prix | 39.6 % |
47 +| CAC (chambres) | 97.3 % |
48 +| SDB (salles de bains) | 54.1 % |
49 +| Année de construction | 39.8 % (dont rôle : 1.4 %) |
50 +| Taxes / évaluation municipale | 54.1 % |
47 51 | Estimation Vrai-Prix (rôle) | 100.0 % |
48 52
49 53 ## Synchronisation
50 54
51 −- **Dernier sync** : 2026-08-18 12:36 — trouvé 167, +0 / ~0 / -0 — OK
55 +- **Dernier sync** : 2026-08-19 00:02 — trouvé 197, +197 / ~0 / -0 — OK
52 56 - **Erreurs récentes** : 0 sur les 10 derniers syncs
53 57
54 58 Voir aussi les [mécanismes transverses](INDEX.md#mécanismes-transverses-tous-connecteurs) (budgets détail, dédup Centris+adresse, jointure rôle vraiprix.db).
modified docs/connecteurs/kw_prestige.md +28 −23
@@ -1,54 +1,59 @@
1 1 # Keller Williams Prestige (`kw_prestige`)
2 2
3 −*Généré le 2026-08-18 18:11 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
3 +*Généré le 2026-08-19 00:49 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
4 4
5 5 ## Registre (`data/sources.json`)
6 6
7 7 - **Site** : https://www.kwprestige.com
8 −- **Recherche** : https://www.kwprestige.com/sitemap.xml
8 +- **Recherche** : https://www.kwprestige.com/fr/proprietes/
9 9 - **Couverture** : Grand Montréal — bannière KW prestige
10 10 - **Type** : franchise
11 11 - **Statut** : actif
12 12
13 −> Grille/fiche en widget JS (pagination AJAX non exploitable). Enumeration via sitemap.xml (277 fiches a-vendre) ; slug URL = type-a-vendre-ville-secteur-{noCentris}-detail-Fr. Champs liste: type, ville, secteur, n Centris. Prix/photos = widget JS (list cards rendus serveur mais pagination JS ; enrichissement futur via Scrapfly js_scenario).
13 +> Plateforme macleweb.com : API interne /ajax/getProps.php (JSON {html, nbPages}, qty=100) — cartes completes (prix, adresse, ville/secteur, cac/sdb, resume, photo). Fiches detail rendues serveur : galerie data-centris/large_photo, description, tableau Centris, GPS (iframe maps/embed), courtier. NE PAS utiliser sitemap.xml (fige 2025-09, fiches expirees = gabarit vide). ~800 inscriptions dont ventes ~300 (reste locations/Vendu).
14 14
15 15 ## Mécanique (introspection du code)
16 16
17 17 - Module : `immoka/connectors/kw_prestige.py` — classe `KwPrestigeConnector`
18 −- Délai entre requêtes : 0.4 s ; cache détail BD : oui
18 +- Délai entre requêtes : 0.5 s ; cache détail BD : oui
19 +- Budgets env (enrichissement détail plafonné/exécution) : `IMMOKA_KW_DETAIL_LIMIT` (défaut 400)
19 20
20 21 **En-tête du module :**
21 22
22 23 > Immo-Ka — Agrégateur de maisons à vendre (province de Québec)
23 24 > Auteur : Simon-Pierre Boucher — contact@spboucher.ai
24 25 > connectors/kw_prestige.py : Keller Williams Prestige (kwprestige.com)
25 −> Bannière KW du Grand Montréal. La grille /fr/proprietes/ et les fiches détail
26 −> sont rendues par un widget JS (pagination AJAX, pas d'URL exploitable). Mais
27 −> le sitemap.xml expose TOUTES les fiches : URL
28 −> « {type}-a-vendre-{ville-secteur}-{no-centris}-detail-Fr ». On énumère donc
29 −> par le sitemap (rendu serveur, fiable) ; type/ville/secteur/n° Centris depuis
30 −> le slug. external_id = n° Centris → déduplication.
26 +> Plateforme macleweb.com. La grille /fr/proprietes/ est servie par l'API
27 +> interne /ajax/getProps.php (JSON {html, nbPages}) : cartes complètes —
28 +> prix, adresse, ville (secteur), cac/sdb, mini-description, photo. Les
29 +> fiches détail sont rendues serveur : galerie complète (data-centris/
30 +> large_photo), description, tableau Centris, GPS (iframe maps/embed),
31 +> courtiers inscripteurs.
32 +> ⚠️ Ne PAS revenir au sitemap.xml : il est figé (lastmod 2025-09) et ses
33 +> fiches expirées rendent un gabarit vide (prix « 0 », aucune adresse).
34 +> ⚠️ Le site exige un User-Agent navigateur (curl nu → 403) ; l'UA de
35 +> BaseConnector passe.
31 36
32 37 ## Volumétrie & complétude (BD live)
33 38
34 39 | Indicateur | Valeur |
35 40 |---|---|
36 −| Annonces en base (toutes) | 277 |
37 −| Actives | 277 |
38 −| Visibles (après dédup) | 277 |
39 −| Masquées par la dédup | 0 |
40 −| GPS (lat/lng) | 0.0 % |
41 −| Photos | 0.0 % |
42 −| Prix | 0.0 % |
43 −| CAC (chambres) | 0.0 % |
44 −| SDB (salles de bains) | 0.0 % |
45 −| Année de construction | 0.0 % |
46 −| Taxes / évaluation municipale | 0.0 % |
47 −| Estimation Vrai-Prix (rôle) | 0.0 % |
41 +| Annonces en base (toutes) | 1 063 |
42 +| Actives | 1 063 |
43 +| Visibles (après dédup) | 1 059 |
44 +| Masquées par la dédup | 4 |
45 +| GPS (lat/lng) | 73.0 % |
46 +| Photos | 40.6 % |
47 +| Prix | 27.2 % |
48 +| CAC (chambres) | 44.7 % |
49 +| SDB (salles de bains) | 42.3 % |
50 +| Année de construction | 66.3 % (dont rôle : 61.3 %) |
51 +| Taxes / évaluation municipale | 16.3 % |
52 +| Estimation Vrai-Prix (rôle) | 75.3 % |
48 53
49 54 ## Synchronisation
50 55
51 −- **Dernier sync** : 2026-08-18 12:36 — trouvé 277, +0 / ~0 / -0 — OK
56 +- **Dernier sync** : 2026-08-18 23:57 — trouvé 801, +786 / ~15 / -0 — OK
52 57 - **Erreurs récentes** : 0 sur les 10 derniers syncs
53 58
54 59 Voir aussi les [mécanismes transverses](INDEX.md#mécanismes-transverses-tous-connecteurs) (budgets détail, dédup Centris+adresse, jointure rôle vraiprix.db).
modified docs/connecteurs/kw_urbain.md +1 −1
@@ -1,6 +1,6 @@
1 1 # Keller Williams Urbain (`kw_urbain`)
2 2
3 −*Généré le 2026-08-18 18:11 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
3 +*Généré le 2026-08-19 00:49 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
4 4
5 5 ## Registre (`data/sources.json`)
6 6
modified docs/connecteurs/lespac.md +9 −9
@@ -1,6 +1,6 @@
1 1 # LesPAC Québec (`lespac`)
2 2
3 −*Généré le 2026-08-18 18:11 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
3 +*Généré le 2026-08-19 00:49 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
4 4
5 5 ## Registre (`data/sources.json`)
6 6
@@ -32,16 +32,16 @@
32 32 |---|---|
33 33 | Annonces en base (toutes) | 4 350 |
34 34 | Actives | 4 138 |
35 −| Visibles (après dédup) | 2 732 |
36 −| Masquées par la dédup | 1 406 |
37 −| GPS (lat/lng) | 46.3 % |
35 +| Visibles (après dédup) | 2 688 |
36 +| Masquées par la dédup | 1 450 |
37 +| GPS (lat/lng) | 45.9 % |
38 38 | Photos | 99.6 % |
39 39 | Prix | 97.8 % |
40 −| CAC (chambres) | 54.6 % |
41 −| SDB (salles de bains) | 26.1 % |
42 −| Année de construction | 58.1 % (dont rôle : 0.1 %) |
43 −| Taxes / évaluation municipale | 22.3 % |
44 −| Estimation Vrai-Prix (rôle) | 69.8 % |
40 +| CAC (chambres) | 54.1 % |
41 +| SDB (salles de bains) | 26.2 % |
42 +| Année de construction | 57.5 % (dont rôle : 0.1 %) |
43 +| Taxes / évaluation municipale | 22.6 % |
44 +| Estimation Vrai-Prix (rôle) | 69.3 % |
45 45
46 46 ## Synchronisation
47 47
modified docs/connecteurs/m_immobilier.md +1 −1
@@ -1,6 +1,6 @@
1 1 # M Immobilier (`m_immobilier`)
2 2
3 −*Généré le 2026-08-18 18:11 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
3 +*Généré le 2026-08-19 00:49 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
4 4
5 5 ## Registre (`data/sources.json`)
6 6
modified docs/connecteurs/niddamour.md +2 −2
@@ -1,6 +1,6 @@
1 1 # Nid d'Amour Agence Immobilière (`niddamour`)
2 2
3 −*Généré le 2026-08-18 18:11 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
3 +*Généré le 2026-08-19 00:49 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
4 4
5 5 ## Registre (`data/sources.json`)
6 6
@@ -40,7 +40,7 @@ _Aucune annonce en base pour cette source (voir la note du registre : couverture
40 40
41 41 ## Synchronisation
42 42
43 −- **Dernier sync** : 2026-08-18 17:38 — trouvé 0, +0 / ~0 / -0 — OK
43 +- **Dernier sync** : 2026-08-19 00:47 — trouvé 0, +0 / ~0 / -0 — OK
44 44 - **Erreurs récentes** : 0 sur les 10 derniers syncs
45 45
46 46 Voir aussi les [mécanismes transverses](INDEX.md#mécanismes-transverses-tous-connecteurs) (budgets détail, dédup Centris+adresse, jointure rôle vraiprix.db).
modified docs/connecteurs/peladeau.md +5 −5
@@ -1,6 +1,6 @@
1 1 # Péladeau Agence Immobilière (`peladeau`)
2 2
3 −*Généré le 2026-08-18 18:11 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
3 +*Généré le 2026-08-19 00:49 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
4 4
5 5 ## Registre (`data/sources.json`)
6 6
@@ -47,13 +47,13 @@
47 47 | Prix | 100.0 % |
48 48 | CAC (chambres) | 93.6 % |
49 49 | SDB (salles de bains) | 95.7 % |
50 −| Année de construction | 93.6 % (dont rôle : 11.4 %) |
51 −| Taxes / évaluation municipale | 78.7 % |
50 +| Année de construction | 93.6 % (dont rôle : 0.0 %) |
51 +| Taxes / évaluation municipale | 80.9 % |
52 52 | Estimation Vrai-Prix (rôle) | 100.0 % |
53 53
54 54 ## Synchronisation
55 55
56 −- **Dernier sync** : 2026-08-18 17:38 — trouvé 47, +0 / ~0 / -0 — OK
57 −- **Erreurs récentes** : 0 sur les 4 derniers syncs
56 +- **Dernier sync** : 2026-08-19 00:47 — trouvé 47, +0 / ~47 / -0 — OK
57 +- **Erreurs récentes** : 0 sur les 6 derniers syncs
58 58
59 59 Voir aussi les [mécanismes transverses](INDEX.md#mécanismes-transverses-tous-connecteurs) (budgets détail, dédup Centris+adresse, jointure rôle vraiprix.db).
modified docs/connecteurs/profusion.md +1 −1
@@ -1,6 +1,6 @@
1 1 # Profusion Immobilier (Christie's) (`profusion`)
2 2
3 −*Généré le 2026-08-18 18:11 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
3 +*Généré le 2026-08-19 00:49 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
4 4
5 5 ## Registre (`data/sources.json`)
6 6
modified docs/connecteurs/proprio_direct.md +1 −1
@@ -1,6 +1,6 @@
1 1 # Proprio Direct (`proprio_direct`)
2 2
3 −*Généré le 2026-08-18 18:11 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
3 +*Généré le 2026-08-19 00:49 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
4 4
5 5 ## Registre (`data/sources.json`)
6 6
modified docs/connecteurs/provad.md +6 −6
@@ -1,6 +1,6 @@
1 1 # Proulx Vadnais & Associés (`provad`)
2 2
3 −*Généré le 2026-08-18 18:11 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
3 +*Généré le 2026-08-19 00:49 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
4 4
5 5 ## Registre (`data/sources.json`)
6 6
@@ -46,14 +46,14 @@
46 46 | Photos | 100.0 % |
47 47 | Prix | 100.0 % |
48 48 | CAC (chambres) | 1.2 % |
49 −| SDB (salles de bains) | 0.0 % |
50 −| Année de construction | 43.2 % (dont rôle : 2.9 %) |
51 −| Taxes / évaluation municipale | 43.2 % |
49 +| SDB (salles de bains) | 3.7 % |
50 +| Année de construction | 43.2 % (dont rôle : 0.0 %) |
51 +| Taxes / évaluation municipale | 44.4 % |
52 52 | Estimation Vrai-Prix (rôle) | 100.0 % |
53 53
54 54 ## Synchronisation
55 55
56 −- **Dernier sync** : 2026-08-18 17:38 — trouvé 81, +0 / ~0 / -0 — OK
57 −- **Erreurs récentes** : 0 sur les 4 derniers syncs
56 +- **Dernier sync** : 2026-08-19 00:47 — trouvé 81, +0 / ~81 / -0 — OK
57 +- **Erreurs récentes** : 0 sur les 6 derniers syncs
58 58
59 59 Voir aussi les [mécanismes transverses](INDEX.md#mécanismes-transverses-tous-connecteurs) (budgets détail, dédup Centris+adresse, jointure rôle vraiprix.db).
modified docs/connecteurs/realta.md +10 −10
@@ -1,6 +1,6 @@
1 1 # Réalta Agence Immobilière (`realta`)
2 2
3 −*Généré le 2026-08-18 18:11 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
3 +*Généré le 2026-08-19 00:49 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
4 4
5 5 ## Registre (`data/sources.json`)
6 6
@@ -38,22 +38,22 @@
38 38
39 39 | Indicateur | Valeur |
40 40 |---|---|
41 −| Annonces en base (toutes) | 85 |
42 −| Actives | 82 |
43 −| Visibles (après dédup) | 82 |
41 +| Annonces en base (toutes) | 86 |
42 +| Actives | 83 |
43 +| Visibles (après dédup) | 83 |
44 44 | Masquées par la dédup | 0 |
45 45 | GPS (lat/lng) | 100.0 % |
46 46 | Photos | 100.0 % |
47 47 | Prix | 100.0 % |
48 −| CAC (chambres) | 80.5 % |
49 −| SDB (salles de bains) | 78.0 % |
50 −| Année de construction | 80.5 % (dont rôle : 0.0 %) |
51 −| Taxes / évaluation municipale | 95.1 % |
52 −| Estimation Vrai-Prix (rôle) | 100.0 % |
48 +| CAC (chambres) | 80.7 % |
49 +| SDB (salles de bains) | 78.3 % |
50 +| Année de construction | 80.7 % (dont rôle : 0.0 %) |
51 +| Taxes / évaluation municipale | 95.2 % |
52 +| Estimation Vrai-Prix (rôle) | 98.8 % |
53 53
54 54 ## Synchronisation
55 55
56 −- **Dernier sync** : 2026-08-18 18:09 — trouvé 82, +0 / ~82 / -0 — OK
56 +- **Dernier sync** : 2026-08-19 00:47 — trouvé 83, +1 / ~82 / -0 — OK
57 57 - **Erreurs récentes** : 0 sur les 10 derniers syncs
58 58
59 59 Voir aussi les [mécanismes transverses](INDEX.md#mécanismes-transverses-tous-connecteurs) (budgets détail, dédup Centris+adresse, jointure rôle vraiprix.db).
modified docs/connecteurs/realtor_ag_ca.md +8 −8
@@ -1,6 +1,6 @@
1 1 # Realtor.ca (MLS Québec) (`realtor_ag_ca`)
2 2
3 −*Généré le 2026-08-18 18:11 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
3 +*Généré le 2026-08-19 00:49 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
4 4
5 5 ## Registre (`data/sources.json`)
6 6
@@ -56,20 +56,20 @@
56 56 |---|---|
57 57 | Annonces en base (toutes) | 2 344 |
58 58 | Actives | 2 344 |
59 −| Visibles (après dédup) | 429 |
60 −| Masquées par la dédup | 1 915 |
59 +| Visibles (après dédup) | 420 |
60 +| Masquées par la dédup | 1 924 |
61 61 | GPS (lat/lng) | 100.0 % |
62 62 | Photos | 100.0 % |
63 63 | Prix | 100.0 % |
64 −| CAC (chambres) | 86.5 % |
65 −| SDB (salles de bains) | 86.7 % |
66 −| Année de construction | 82.3 % (dont rôle : 98.0 %) |
64 +| CAC (chambres) | 86.9 % |
65 +| SDB (salles de bains) | 86.9 % |
66 +| Année de construction | 82.4 % (dont rôle : 98.0 %) |
67 67 | Taxes / évaluation municipale | 0.0 % |
68 68 | Estimation Vrai-Prix (rôle) | 100.0 % |
69 69
70 70 ## Synchronisation
71 71
72 −- **Dernier sync** : 2026-08-18 13:15 — trouvé 2 142, +199 / ~46 / -0 — OK
73 −- **Erreurs récentes** : 0 sur les 3 derniers syncs
72 +- **Dernier sync** : 2026-08-18 23:52 — trouvé 0, +0 / ~0 / -0 — ÉCHEC (SCRAPFLY_KEY manquant (voir .env))
73 +- **Erreurs récentes** : 1 sur les 4 derniers syncs — dernière : 2026-08-18 23:52 « SCRAPFLY_KEY manquant (voir .env) »
74 74
75 75 Voir aussi les [mécanismes transverses](INDEX.md#mécanismes-transverses-tous-connecteurs) (budgets détail, dédup Centris+adresse, jointure rôle vraiprix.db).
modified docs/connecteurs/remax_quebec.md +4 −4
@@ -1,6 +1,6 @@
1 1 # RE/MAX Québec (`remax_quebec`)
2 2
3 −*Généré le 2026-08-18 18:11 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
3 +*Généré le 2026-08-19 00:49 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
4 4
5 5 ## Registre (`data/sources.json`)
6 6
@@ -38,13 +38,13 @@
38 38 |---|---|
39 39 | Annonces en base (toutes) | 26 753 |
40 40 | Actives | 25 524 |
41 −| Visibles (après dédup) | 25 386 |
42 −| Masquées par la dédup | 138 |
41 +| Visibles (après dédup) | 25 368 |
42 +| Masquées par la dédup | 156 |
43 43 | GPS (lat/lng) | 100.0 % |
44 44 | Photos | 100.0 % |
45 45 | Prix | 83.9 % |
46 46 | CAC (chambres) | 79.1 % |
47 −| SDB (salles de bains) | 59.9 % |
47 +| SDB (salles de bains) | 60.1 % |
48 48 | Année de construction | 82.8 % (dont rôle : 0.0 %) |
49 49 | Taxes / évaluation municipale | 77.2 % |
50 50 | Estimation Vrai-Prix (rôle) | 100.0 % |
modified docs/connecteurs/royal_lepage.md +8 −8
@@ -1,6 +1,6 @@
1 1 # Royal LePage (Québec) (`royal_lepage`)
2 2
3 −*Généré le 2026-08-18 18:11 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
3 +*Généré le 2026-08-19 00:49 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
4 4
5 5 ## Registre (`data/sources.json`)
6 6
@@ -38,15 +38,15 @@
38 38 |---|---|
39 39 | Annonces en base (toutes) | 1 508 |
40 40 | Actives | 1 055 |
41 −| Visibles (après dédup) | 1 051 |
42 −| Masquées par la dédup | 4 |
41 +| Visibles (après dédup) | 976 |
42 +| Masquées par la dédup | 79 |
43 43 | GPS (lat/lng) | 100.0 % |
44 44 | Photos | 100.0 % |
45 −| Prix | 79.9 % |
46 −| CAC (chambres) | 88.8 % |
47 −| SDB (salles de bains) | 87.6 % |
48 −| Année de construction | 92.7 % (dont rôle : 0.9 %) |
49 −| Taxes / évaluation municipale | 75.3 % |
45 +| Prix | 78.4 % |
46 +| CAC (chambres) | 88.0 % |
47 +| SDB (salles de bains) | 86.8 % |
48 +| Année de construction | 92.1 % (dont rôle : 0.9 %) |
49 +| Taxes / évaluation municipale | 73.5 % |
50 50 | Estimation Vrai-Prix (rôle) | 100.0 % |
51 51
52 52 ## Synchronisation
modified docs/connecteurs/si_ag_ciemcq.md +12 −12
@@ -1,6 +1,6 @@
1 1 # Chambre immobilière Estrie–Mauricie–Centre-du-Québec (Mon-Toit) (`si_ag_ciemcq`)
2 2
3 −*Généré le 2026-08-18 18:11 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
3 +*Généré le 2026-08-19 00:49 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
4 4
5 5 ## Registre (`data/sources.json`)
6 6
@@ -38,22 +38,22 @@
38 38
39 39 | Indicateur | Valeur |
40 40 |---|---|
41 −| Annonces en base (toutes) | 3 931 |
42 −| Actives | 3 931 |
43 −| Visibles (après dédup) | 1 179 |
44 −| Masquées par la dédup | 2 752 |
41 +| Annonces en base (toutes) | 3 944 |
42 +| Actives | 3 919 |
43 +| Visibles (après dédup) | 1 164 |
44 +| Masquées par la dédup | 2 755 |
45 45 | GPS (lat/lng) | 100.0 % |
46 46 | Photos | 100.0 % |
47 47 | Prix | 100.0 % |
48 −| CAC (chambres) | 66.8 % |
49 −| SDB (salles de bains) | 60.1 % |
50 −| Année de construction | 68.7 % (dont rôle : 8.4 %) |
51 −| Taxes / évaluation municipale | 83.9 % |
52 −| Estimation Vrai-Prix (rôle) | 99.1 % |
48 +| CAC (chambres) | 69.1 % |
49 +| SDB (salles de bains) | 60.3 % |
50 +| Année de construction | 69.2 % (dont rôle : 0.0 %) |
51 +| Taxes / évaluation municipale | 84.5 % |
52 +| Estimation Vrai-Prix (rôle) | 100.0 % |
53 53
54 54 ## Synchronisation
55 55
56 −- **Dernier sync** : 2026-08-18 17:38 — trouvé 3 918, +11 / ~13 / -0 — OK
57 −- **Erreurs récentes** : 0 sur les 4 derniers syncs
56 +- **Dernier sync** : 2026-08-19 00:47 — trouvé 3 919, +0 / ~1164 / -12 — OK
57 +- **Erreurs récentes** : 0 sur les 6 derniers syncs
58 58
59 59 Voir aussi les [mécanismes transverses](INDEX.md#mécanismes-transverses-tous-connecteurs) (budgets détail, dédup Centris+adresse, jointure rôle vraiprix.db).
modified docs/connecteurs/si_ag_jga.md +6 −6
@@ -1,6 +1,6 @@
1 1 # JGA Équipe Commerciale (Royal LePage) (`si_ag_jga`)
2 2
3 −*Généré le 2026-08-18 18:11 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
3 +*Généré le 2026-08-19 00:49 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
4 4
5 5 ## Registre (`data/sources.json`)
6 6
@@ -45,15 +45,15 @@
45 45 | GPS (lat/lng) | 100.0 % |
46 46 | Photos | 100.0 % |
47 47 | Prix | 100.0 % |
48 −| CAC (chambres) | 8.5 % |
49 −| SDB (salles de bains) | 5.1 % |
50 −| Année de construction | 37.3 % (dont rôle : 22.7 %) |
48 +| CAC (chambres) | 11.9 % |
49 +| SDB (salles de bains) | 6.8 % |
50 +| Année de construction | 37.3 % (dont rôle : 0.0 %) |
51 51 | Taxes / évaluation municipale | 91.5 % |
52 52 | Estimation Vrai-Prix (rôle) | 100.0 % |
53 53
54 54 ## Synchronisation
55 55
56 −- **Dernier sync** : 2026-08-18 17:38 — trouvé 64, +0 / ~0 / -0 — OK
57 −- **Erreurs récentes** : 0 sur les 4 derniers syncs
56 +- **Dernier sync** : 2026-08-19 00:47 — trouvé 64, +0 / ~60 / -0 — OK
57 +- **Erreurs récentes** : 0 sur les 6 derniers syncs
58 58
59 59 Voir aussi les [mécanismes transverses](INDEX.md#mécanismes-transverses-tous-connecteurs) (budgets détail, dédup Centris+adresse, jointure rôle vraiprix.db).
modified docs/connecteurs/si_ag_katiasamson.md +5 −5
@@ -1,6 +1,6 @@
1 1 # Katia Samson (RE/MAX L'Espace) (`si_ag_katiasamson`)
2 2
3 −*Généré le 2026-08-18 18:11 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
3 +*Généré le 2026-08-19 00:49 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
4 4
5 5 ## Registre (`data/sources.json`)
6 6
@@ -48,12 +48,12 @@
48 48 | CAC (chambres) | 96.2 % |
49 49 | SDB (salles de bains) | 96.2 % |
50 50 | Année de construction | 100.0 % (dont rôle : 0.0 %) |
51 −| Taxes / évaluation municipale | 65.4 % |
52 −| Estimation Vrai-Prix (rôle) | 96.2 % |
51 +| Taxes / évaluation municipale | 96.2 % |
52 +| Estimation Vrai-Prix (rôle) | 100.0 % |
53 53
54 54 ## Synchronisation
55 55
56 −- **Dernier sync** : 2026-08-18 17:38 — trouvé 31, +1 / ~0 / -0 — OK
57 −- **Erreurs récentes** : 0 sur les 4 derniers syncs
56 +- **Dernier sync** : 2026-08-19 00:47 — trouvé 31, +0 / ~26 / -0 — OK
57 +- **Erreurs récentes** : 0 sur les 6 derniers syncs
58 58
59 59 Voir aussi les [mécanismes transverses](INDEX.md#mécanismes-transverses-tous-connecteurs) (budgets détail, dédup Centris+adresse, jointure rôle vraiprix.db).
modified docs/connecteurs/si_ag_theagency.md +10 −10
@@ -1,6 +1,6 @@
1 1 # The Agency Montréal (`si_ag_theagency`)
2 2
3 −*Généré le 2026-08-18 18:11 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
3 +*Généré le 2026-08-19 00:49 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
4 4
5 5 ## Registre (`data/sources.json`)
6 6
@@ -38,22 +38,22 @@
38 38
39 39 | Indicateur | Valeur |
40 40 |---|---|
41 −| Annonces en base (toutes) | 310 |
42 −| Actives | 305 |
41 +| Annonces en base (toutes) | 311 |
42 +| Actives | 306 |
43 43 | Visibles (après dédup) | 236 |
44 −| Masquées par la dédup | 69 |
44 +| Masquées par la dédup | 70 |
45 45 | GPS (lat/lng) | 100.0 % |
46 46 | Photos | 100.0 % |
47 47 | Prix | 100.0 % |
48 −| CAC (chambres) | 78.8 % |
49 −| SDB (salles de bains) | 76.7 % |
50 −| Année de construction | 90.3 % (dont rôle : 6.6 %) |
51 −| Taxes / évaluation municipale | 84.7 % |
48 +| CAC (chambres) | 81.8 % |
49 +| SDB (salles de bains) | 77.5 % |
50 +| Année de construction | 90.3 % (dont rôle : 0.0 %) |
51 +| Taxes / évaluation municipale | 92.8 % |
52 52 | Estimation Vrai-Prix (rôle) | 99.6 % |
53 53
54 54 ## Synchronisation
55 55
56 −- **Dernier sync** : 2026-08-18 17:38 — trouvé 305, +1 / ~1 / -1 — OK
57 −- **Erreurs récentes** : 0 sur les 7 derniers syncs
56 +- **Dernier sync** : 2026-08-19 00:47 — trouvé 305, +1 / ~235 / -0 — OK
57 +- **Erreurs récentes** : 0 sur les 9 derniers syncs
58 58
59 59 Voir aussi les [mécanismes transverses](INDEX.md#mécanismes-transverses-tous-connecteurs) (budgets détail, dédup Centris+adresse, jointure rôle vraiprix.db).
modified docs/connecteurs/sothebys_quebec.md +3 −3
@@ -1,6 +1,6 @@
1 1 # Sotheby's International Realty Québec (`sothebys_quebec`)
2 2
3 −*Généré le 2026-08-18 18:11 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
3 +*Généré le 2026-08-19 00:49 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
4 4
5 5 ## Registre (`data/sources.json`)
6 6
@@ -46,11 +46,11 @@
46 46 | Visibles (après dédup) | 869 |
47 47 | Masquées par la dédup | 0 |
48 48 | GPS (lat/lng) | 99.8 % |
49 −| Photos | 100.0 % |
49 +| Photos | 96.4 % |
50 50 | Prix | 100.0 % |
51 51 | CAC (chambres) | 77.7 % |
52 52 | SDB (salles de bains) | 74.6 % |
53 −| Année de construction | 60.2 % (dont rôle : 75.9 %) |
53 +| Année de construction | 60.6 % (dont rôle : 76.1 %) |
54 54 | Taxes / évaluation municipale | 0.0 % |
55 55 | Estimation Vrai-Prix (rôle) | 100.0 % |
56 56
modified docs/connecteurs/sutton.md +3 −3
@@ -1,6 +1,6 @@
1 1 # Groupe Sutton Québec (`sutton`)
2 2
3 −*Généré le 2026-08-18 18:11 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
3 +*Généré le 2026-08-19 00:49 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
4 4
5 5 ## Registre (`data/sources.json`)
6 6
@@ -33,12 +33,12 @@
33 33 | Actives | 4 585 |
34 34 | Visibles (après dédup) | 4 572 |
35 35 | Masquées par la dédup | 13 |
36 −| GPS (lat/lng) | 94.1 % |
36 +| GPS (lat/lng) | 94.4 % |
37 37 | Photos | 91.3 % |
38 38 | Prix | 91.3 % |
39 39 | CAC (chambres) | 91.5 % |
40 40 | SDB (salles de bains) | 90.6 % |
41 −| Année de construction | 77.0 % (dont rôle : 9.4 %) |
41 +| Année de construction | 77.1 % (dont rôle : 9.5 %) |
42 42 | Taxes / évaluation municipale | 90.0 % |
43 43 | Estimation Vrai-Prix (rôle) | 100.0 % |
44 44
modified docs/connecteurs/ubee.md +7 −7
@@ -1,6 +1,6 @@
1 1 # Ubee (`ubee`)
2 2
3 −*Généré le 2026-08-18 18:11 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
3 +*Généré le 2026-08-19 00:49 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
4 4
5 5 ## Registre (`data/sources.json`)
6 6
@@ -40,22 +40,22 @@
40 40
41 41 | Indicateur | Valeur |
42 42 |---|---|
43 −| Annonces en base (toutes) | 1 220 |
44 −| Actives | 1 199 |
45 −| Visibles (après dédup) | 1 175 |
43 +| Annonces en base (toutes) | 1 236 |
44 +| Actives | 1 211 |
45 +| Visibles (après dédup) | 1 187 |
46 46 | Masquées par la dédup | 24 |
47 47 | GPS (lat/lng) | 100.0 % |
48 −| Photos | 100.0 % |
48 +| Photos | 99.9 % |
49 49 | Prix | 100.0 % |
50 50 | CAC (chambres) | 100.0 % |
51 51 | SDB (salles de bains) | 100.0 % |
52 52 | Année de construction | 100.0 % (dont rôle : 0.0 %) |
53 −| Taxes / évaluation municipale | 0.0 % |
53 +| Taxes / évaluation municipale | 92.2 % |
54 54 | Estimation Vrai-Prix (rôle) | 100.0 % |
55 55
56 56 ## Synchronisation
57 57
58 −- **Dernier sync** : 2026-08-18 13:33 — trouvé 1 199, +0 / ~1 / -1 — OK
58 +- **Dernier sync** : 2026-08-18 20:56 — trouvé 1 210, +3 / ~1207 / -4 — OK
59 59 - **Erreurs récentes** : 0 sur les 10 derniers syncs
60 60
61 61 Voir aussi les [mécanismes transverses](INDEX.md#mécanismes-transverses-tous-connecteurs) (budgets détail, dédup Centris+adresse, jointure rôle vraiprix.db).
modified docs/connecteurs/vendirect.md +11 −11
@@ -1,6 +1,6 @@
1 1 # Vendirect (`vendirect`)
2 2
3 −*Généré le 2026-08-18 18:11 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
3 +*Généré le 2026-08-19 00:49 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
4 4
5 5 ## Registre (`data/sources.json`)
6 6
@@ -32,21 +32,21 @@
32 32 | Indicateur | Valeur |
33 33 |---|---|
34 34 | Annonces en base (toutes) | 1 206 |
35 −| Actives | 1 174 |
36 −| Visibles (après dédup) | 1 174 |
37 −| Masquées par la dédup | 0 |
38 −| GPS (lat/lng) | 97.7 % |
39 −| Photos | 100.0 % |
35 +| Actives | 1 173 |
36 +| Visibles (après dédup) | 1 144 |
37 +| Masquées par la dédup | 29 |
38 +| GPS (lat/lng) | 97.6 % |
39 +| Photos | 99.9 % |
40 40 | Prix | 100.0 % |
41 −| CAC (chambres) | 74.3 % |
42 −| SDB (salles de bains) | 73.8 % |
43 −| Année de construction | 79.5 % (dont rôle : 6.9 %) |
44 −| Taxes / évaluation municipale | 80.3 % |
41 +| CAC (chambres) | 75.2 % |
42 +| SDB (salles de bains) | 73.3 % |
43 +| Année de construction | 79.0 % (dont rôle : 0.0 %) |
44 +| Taxes / évaluation municipale | 83.9 % |
45 45 | Estimation Vrai-Prix (rôle) | 100.0 % |
46 46
47 47 ## Synchronisation
48 48
49 −- **Dernier sync** : 2026-08-18 13:33 — trouvé 1 173, +3 / ~6 / -2 — OK
49 +- **Dernier sync** : 2026-08-18 19:05 — trouvé 1 173, +0 / ~1173 / -1 — OK
50 50 - **Erreurs récentes** : 0 sur les 10 derniers syncs
51 51
52 52 Voir aussi les [mécanismes transverses](INDEX.md#mécanismes-transverses-tous-connecteurs) (budgets détail, dédup Centris+adresse, jointure rôle vraiprix.db).
modified docs/connecteurs/via_ag_acces.md +2 −2
@@ -1,6 +1,6 @@
1 1 # Via Capitale Acces (`via_ag_acces`)
2 2
3 −*Généré le 2026-08-18 18:11 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
3 +*Généré le 2026-08-19 00:49 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
4 4
5 5 ## Registre (`data/sources.json`)
6 6
@@ -51,7 +51,7 @@
51 51
52 52 ## Synchronisation
53 53
54 −- **Dernier sync** : 2026-08-18 13:38 — trouvé 182, +1 / ~1 / -0 — OK
54 +- **Dernier sync** : 2026-08-18 19:06 — trouvé 181, +0 / ~181 / -0 — OK
55 55 - **Erreurs récentes** : 0 sur les 10 derniers syncs
56 56
57 57 Voir aussi les [mécanismes transverses](INDEX.md#mécanismes-transverses-tous-connecteurs) (budgets détail, dédup Centris+adresse, jointure rôle vraiprix.db).
modified docs/connecteurs/via_ag_dumontroyal.md +1 −1
@@ -1,6 +1,6 @@
1 1 # Via Capitale Dumontroyal (`via_ag_dumontroyal`)
2 2
3 −*Généré le 2026-08-18 18:11 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
3 +*Généré le 2026-08-19 00:49 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
4 4
5 5 ## Registre (`data/sources.json`)
6 6
modified docs/connecteurs/via_ag_elite.md +6 −6
@@ -1,6 +1,6 @@
1 1 # Via Capitale Elite (`via_ag_elite`)
2 2
3 −*Généré le 2026-08-18 18:11 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
3 +*Généré le 2026-08-19 00:49 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
4 4
5 5 ## Registre (`data/sources.json`)
6 6
@@ -37,21 +37,21 @@
37 37 | Indicateur | Valeur |
38 38 |---|---|
39 39 | Annonces en base (toutes) | 327 |
40 −| Actives | 317 |
40 +| Actives | 316 |
41 41 | Visibles (après dédup) | 9 |
42 −| Masquées par la dédup | 308 |
42 +| Masquées par la dédup | 307 |
43 43 | GPS (lat/lng) | 100.0 % |
44 44 | Photos | 100.0 % |
45 45 | Prix | 100.0 % |
46 −| CAC (chambres) | 55.6 % |
46 +| CAC (chambres) | 66.7 % |
47 47 | SDB (salles de bains) | 55.6 % |
48 −| Année de construction | 77.8 % (dont rôle : 14.3 %) |
48 +| Année de construction | 77.8 % (dont rôle : 0.0 %) |
49 49 | Taxes / évaluation municipale | 88.9 % |
50 50 | Estimation Vrai-Prix (rôle) | 100.0 % |
51 51
52 52 ## Synchronisation
53 53
54 −- **Dernier sync** : 2026-08-18 13:38 — trouvé 316, +0 / ~2 / -0 — OK
54 +- **Dernier sync** : 2026-08-18 19:08 — trouvé 316, +0 / ~316 / -1 — OK
55 55 - **Erreurs récentes** : 0 sur les 10 derniers syncs
56 56
57 57 Voir aussi les [mécanismes transverses](INDEX.md#mécanismes-transverses-tous-connecteurs) (budgets détail, dédup Centris+adresse, jointure rôle vraiprix.db).
modified docs/connecteurs/via_ag_select.md +9 −9
@@ -1,6 +1,6 @@
1 1 # Via Capitale Select (`via_ag_select`)
2 2
3 −*Généré le 2026-08-18 18:11 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
3 +*Généré le 2026-08-19 00:49 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
4 4
5 5 ## Registre (`data/sources.json`)
6 6
@@ -36,22 +36,22 @@
36 36
37 37 | Indicateur | Valeur |
38 38 |---|---|
39 −| Annonces en base (toutes) | 616 |
40 −| Actives | 584 |
41 −| Visibles (après dédup) | 11 |
42 −| Masquées par la dédup | 573 |
39 +| Annonces en base (toutes) | 619 |
40 +| Actives | 585 |
41 +| Visibles (après dédup) | 14 |
42 +| Masquées par la dédup | 571 |
43 43 | GPS (lat/lng) | 100.0 % |
44 44 | Photos | 100.0 % |
45 45 | Prix | 100.0 % |
46 −| CAC (chambres) | 63.6 % |
47 −| SDB (salles de bains) | 63.6 % |
46 +| CAC (chambres) | 78.6 % |
47 +| SDB (salles de bains) | 71.4 % |
48 48 | Année de construction | 100.0 % (dont rôle : 0.0 %) |
49 −| Taxes / évaluation municipale | 90.9 % |
49 +| Taxes / évaluation municipale | 92.9 % |
50 50 | Estimation Vrai-Prix (rôle) | 100.0 % |
51 51
52 52 ## Synchronisation
53 53
54 −- **Dernier sync** : 2026-08-18 13:38 — trouvé 582, +5 / ~2 / -1 — OK
54 +- **Dernier sync** : 2026-08-18 19:15 — trouvé 580, +3 / ~577 / -2 — OK
55 55 - **Erreurs récentes** : 0 sur les 10 derniers syncs
56 56
57 57 Voir aussi les [mécanismes transverses](INDEX.md#mécanismes-transverses-tous-connecteurs) (budgets détail, dédup Centris+adresse, jointure rôle vraiprix.db).
modified docs/connecteurs/via_capitale.md +8 −8
@@ -1,6 +1,6 @@
1 1 # Via Capitale (`via_capitale`)
2 2
3 −*Généré le 2026-08-18 18:11 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
3 +*Généré le 2026-08-19 00:49 par `scripts/gen_connector_docs.py` — fichier produit automatiquement, ne pas éditer à la main.*
4 4
5 5 ## Registre (`data/sources.json`)
6 6
@@ -35,14 +35,14 @@
35 35 |---|---|
36 36 | Annonces en base (toutes) | 5 474 |
37 37 | Actives | 5 200 |
38 −| Visibles (après dédup) | 5 153 |
39 −| Masquées par la dédup | 47 |
40 −| GPS (lat/lng) | 97.0 % |
41 −| Photos | 100.0 % |
38 +| Visibles (après dédup) | 5 145 |
39 +| Masquées par la dédup | 55 |
40 +| GPS (lat/lng) | 96.9 % |
41 +| Photos | 99.9 % |
42 42 | Prix | 78.7 % |
43 −| CAC (chambres) | 25.9 % |
44 −| SDB (salles de bains) | 11.0 % |
45 −| Année de construction | 69.4 % (dont rôle : 66.9 %) |
43 +| CAC (chambres) | 26.8 % |
44 +| SDB (salles de bains) | 11.2 % |
45 +| Année de construction | 69.4 % (dont rôle : 66.7 %) |
46 46 | Taxes / évaluation municipale | 87.2 % |
47 47 | Estimation Vrai-Prix (rôle) | 100.0 % |
48 48
added docs/screenshots/validation-2026-08-19/accueil--desktop-1024.png +0 −0

Binary file not shown.

added docs/screenshots/validation-2026-08-19/accueil--desktop-1440.png +0 −0

Binary file not shown.

added docs/screenshots/validation-2026-08-19/accueil--mobile-360.png +0 −0

Binary file not shown.

added docs/screenshots/validation-2026-08-19/accueil--mobile-390.png +0 −0

Binary file not shown.

added docs/screenshots/validation-2026-08-19/accueil--mobile-414.png +0 −0

Binary file not shown.

added docs/screenshots/validation-2026-08-19/accueil--paysage-844.png +0 −0

Binary file not shown.

added docs/screenshots/validation-2026-08-19/accueil--tablette-768.png +0 −0

Binary file not shown.

added docs/screenshots/validation-2026-08-19/agences--desktop-1024.png +0 −0

Binary file not shown.

added docs/screenshots/validation-2026-08-19/agences--desktop-1440.png +0 −0

Binary file not shown.

added docs/screenshots/validation-2026-08-19/agences--mobile-360.png +0 −0

Binary file not shown.

added docs/screenshots/validation-2026-08-19/agences--mobile-390.png +0 −0

Binary file not shown.

added docs/screenshots/validation-2026-08-19/agences--mobile-414.png +0 −0

Binary file not shown.

added docs/screenshots/validation-2026-08-19/agences--paysage-844.png +0 −0

Binary file not shown.

added docs/screenshots/validation-2026-08-19/agences--tablette-768.png +0 −0

Binary file not shown.

added docs/screenshots/validation-2026-08-19/contact--desktop-1024.png +0 −0

Binary file not shown.

added docs/screenshots/validation-2026-08-19/contact--desktop-1440.png +0 −0

Binary file not shown.

added docs/screenshots/validation-2026-08-19/contact--mobile-360.png +0 −0

Binary file not shown.

added docs/screenshots/validation-2026-08-19/contact--mobile-390.png +0 −0

Binary file not shown.

added docs/screenshots/validation-2026-08-19/contact--mobile-414.png +0 −0

Binary file not shown.

added docs/screenshots/validation-2026-08-19/contact--paysage-844.png +0 −0

Binary file not shown.

added docs/screenshots/validation-2026-08-19/contact--tablette-768.png +0 −0

Binary file not shown.

added docs/screenshots/validation-2026-08-19/fiche-1-photo--desktop-1024.png +0 −0

Binary file not shown.

added docs/screenshots/validation-2026-08-19/fiche-1-photo--desktop-1440.png +0 −0

Binary file not shown.

added docs/screenshots/validation-2026-08-19/fiche-1-photo--mobile-360.png +0 −0

Binary file not shown.

added docs/screenshots/validation-2026-08-19/fiche-1-photo--mobile-390.png +0 −0

Binary file not shown.

added docs/screenshots/validation-2026-08-19/fiche-1-photo--mobile-414.png +0 −0

Binary file not shown.

added docs/screenshots/validation-2026-08-19/fiche-1-photo--paysage-844.png +0 −0

Binary file not shown.

added docs/screenshots/validation-2026-08-19/fiche-1-photo--tablette-768.png +0 −0

Binary file not shown.

added docs/screenshots/validation-2026-08-19/fiche-desc-longue--desktop-1024.png +0 −0

Binary file not shown.

added docs/screenshots/validation-2026-08-19/fiche-desc-longue--desktop-1440.png +0 −0

Binary file not shown.

added docs/screenshots/validation-2026-08-19/fiche-desc-longue--mobile-360.png +0 −0

Binary file not shown.

added docs/screenshots/validation-2026-08-19/fiche-desc-longue--mobile-390.png +0 −0

Binary file not shown.

added docs/screenshots/validation-2026-08-19/fiche-desc-longue--mobile-414.png +0 −0

Binary file not shown.

added docs/screenshots/validation-2026-08-19/fiche-desc-longue--paysage-844.png +0 −0

Binary file not shown.

added docs/screenshots/validation-2026-08-19/fiche-desc-longue--tablette-768.png +0 −0

Binary file not shown.

added docs/screenshots/validation-2026-08-19/fiche-prix-eleve--desktop-1024.png +0 −0

Binary file not shown.

added docs/screenshots/validation-2026-08-19/fiche-prix-eleve--desktop-1440.png +0 −0

Binary file not shown.

added docs/screenshots/validation-2026-08-19/fiche-prix-eleve--mobile-360.png +0 −0

Binary file not shown.

added docs/screenshots/validation-2026-08-19/fiche-prix-eleve--mobile-390.png +0 −0

Binary file not shown.

added docs/screenshots/validation-2026-08-19/fiche-prix-eleve--mobile-414.png +0 −0

Binary file not shown.

added docs/screenshots/validation-2026-08-19/fiche-prix-eleve--paysage-844.png +0 −0

Binary file not shown.

added docs/screenshots/validation-2026-08-19/fiche-prix-eleve--tablette-768.png +0 −0

Binary file not shown.

added docs/screenshots/validation-2026-08-19/fiche-sans-superficie--desktop-1024.png +0 −0

Binary file not shown.

added docs/screenshots/validation-2026-08-19/fiche-sans-superficie--desktop-1440.png +0 −0

Binary file not shown.

added docs/screenshots/validation-2026-08-19/fiche-sans-superficie--mobile-360.png +0 −0

Binary file not shown.

added docs/screenshots/validation-2026-08-19/fiche-sans-superficie--mobile-390.png +0 −0

Binary file not shown.

added docs/screenshots/validation-2026-08-19/fiche-sans-superficie--mobile-414.png +0 −0

Binary file not shown.

added docs/screenshots/validation-2026-08-19/fiche-sans-superficie--paysage-844.png +0 −0

Binary file not shown.

added docs/screenshots/validation-2026-08-19/fiche-sans-superficie--tablette-768.png +0 −0

Binary file not shown.

added docs/screenshots/validation-2026-08-19/fiche-tres-photographiee--desktop-1024.png +0 −0

Binary file not shown.

added docs/screenshots/validation-2026-08-19/fiche-tres-photographiee--desktop-1440.png +0 −0

Binary file not shown.

added docs/screenshots/validation-2026-08-19/fiche-tres-photographiee--mobile-360.png +0 −0

Binary file not shown.

added docs/screenshots/validation-2026-08-19/fiche-tres-photographiee--mobile-390.png +0 −0

Binary file not shown.

added docs/screenshots/validation-2026-08-19/fiche-tres-photographiee--mobile-414.png +0 −0

Binary file not shown.

added docs/screenshots/validation-2026-08-19/fiche-tres-photographiee--paysage-844.png +0 −0

Binary file not shown.

added docs/screenshots/validation-2026-08-19/fiche-tres-photographiee--tablette-768.png +0 −0

Binary file not shown.

added docs/screenshots/validation-2026-08-19/ios-carte-final.png +0 −0

Binary file not shown.

added docs/screenshots/validation-2026-08-19/ios-fiche3.png +0 −0

Binary file not shown.

added docs/screenshots/validation-2026-08-19/ios-stats-final.png +0 −0

Binary file not shown.

added docs/screenshots/validation-2026-08-19/rapport-validation.json +772 −0
@@ -0,0 +1,772 @@
1 +[
2 + {
3 + "page": "accueil",
4 + "viewport": "mobile-360",
5 + "ok": true,
6 + "debordement_px": 0,
7 + "img_cassees": 0,
8 + "img_chargees": 8,
9 + "cibles_petites": 0,
10 + "erreurs_js": 0
11 + },
12 + {
13 + "page": "recherche-carte",
14 + "viewport": "mobile-360",
15 + "ok": true,
16 + "debordement_px": 0,
17 + "img_cassees": 0,
18 + "img_chargees": 8,
19 + "cibles_petites": 4,
20 + "erreurs_js": 0
21 + },
22 + {
23 + "page": "recherche-sans-resultat",
24 + "viewport": "mobile-360",
25 + "ok": true,
26 + "debordement_px": 0,
27 + "img_cassees": 0,
28 + "img_chargees": 0,
29 + "cibles_petites": 0,
30 + "erreurs_js": 0
31 + },
32 + {
33 + "page": "agences",
34 + "viewport": "mobile-360",
35 + "ok": true,
36 + "debordement_px": 0,
37 + "img_cassees": 0,
38 + "img_chargees": 0,
39 + "cibles_petites": 0,
40 + "erreurs_js": 0
41 + },
42 + {
43 + "page": "stats",
44 + "viewport": "mobile-360",
45 + "ok": true,
46 + "debordement_px": 0,
47 + "img_cassees": 0,
48 + "img_chargees": 0,
49 + "cibles_petites": 0,
50 + "erreurs_js": 0
51 + },
52 + {
53 + "page": "contact",
54 + "viewport": "mobile-360",
55 + "ok": true,
56 + "debordement_px": 0,
57 + "img_cassees": 0,
58 + "img_chargees": 0,
59 + "cibles_petites": 0,
60 + "erreurs_js": 0
61 + },
62 + {
63 + "page": "fiche-tres-photographiee",
64 + "viewport": "mobile-360",
65 + "ok": true,
66 + "debordement_px": 0,
67 + "img_cassees": 0,
68 + "img_chargees": 0,
69 + "cibles_petites": 0,
70 + "erreurs_js": 2
71 + },
72 + {
73 + "page": "fiche-1-photo",
74 + "viewport": "mobile-360",
75 + "ok": true,
76 + "debordement_px": 0,
77 + "img_cassees": 0,
78 + "img_chargees": 0,
79 + "cibles_petites": 0,
80 + "erreurs_js": 2
81 + },
82 + {
83 + "page": "fiche-desc-longue",
84 + "viewport": "mobile-360",
85 + "ok": true,
86 + "debordement_px": 0,
87 + "img_cassees": 0,
88 + "img_chargees": 0,
89 + "cibles_petites": 0,
90 + "erreurs_js": 2
91 + },
92 + {
93 + "page": "fiche-prix-eleve",
94 + "viewport": "mobile-360",
95 + "ok": true,
96 + "debordement_px": 0,
97 + "img_cassees": 0,
98 + "img_chargees": 0,
99 + "cibles_petites": 0,
100 + "erreurs_js": 2
101 + },
102 + {
103 + "page": "fiche-sans-superficie",
104 + "viewport": "mobile-360",
105 + "ok": true,
106 + "debordement_px": 0,
107 + "img_cassees": 0,
108 + "img_chargees": 0,
109 + "cibles_petites": 0,
110 + "erreurs_js": 2
111 + },
112 + {
113 + "page": "accueil",
114 + "viewport": "mobile-390",
115 + "ok": true,
116 + "debordement_px": 0,
117 + "img_cassees": 0,
118 + "img_chargees": 8,
119 + "cibles_petites": 0,
120 + "erreurs_js": 0
121 + },
122 + {
123 + "page": "recherche-carte",
124 + "viewport": "mobile-390",
125 + "ok": true,
126 + "debordement_px": 0,
127 + "img_cassees": 0,
128 + "img_chargees": 0,
129 + "cibles_petites": 0,
130 + "erreurs_js": 2
131 + },
132 + {
133 + "page": "recherche-sans-resultat",
134 + "viewport": "mobile-390",
135 + "ok": true,
136 + "debordement_px": 0,
137 + "img_cassees": 0,
138 + "img_chargees": 0,
139 + "cibles_petites": 0,
140 + "erreurs_js": 0
141 + },
142 + {
143 + "page": "agences",
144 + "viewport": "mobile-390",
145 + "ok": true,
146 + "debordement_px": 0,
147 + "img_cassees": 0,
148 + "img_chargees": 0,
149 + "cibles_petites": 0,
150 + "erreurs_js": 0
151 + },
152 + {
153 + "page": "stats",
154 + "viewport": "mobile-390",
155 + "ok": true,
156 + "debordement_px": 0,
157 + "img_cassees": 0,
158 + "img_chargees": 0,
159 + "cibles_petites": 0,
160 + "erreurs_js": 0
161 + },
162 + {
163 + "page": "contact",
164 + "viewport": "mobile-390",
165 + "ok": true,
166 + "debordement_px": 0,
167 + "img_cassees": 0,
168 + "img_chargees": 0,
169 + "cibles_petites": 0,
170 + "erreurs_js": 0
171 + },
172 + {
173 + "page": "fiche-tres-photographiee",
174 + "viewport": "mobile-390",
175 + "ok": true,
176 + "debordement_px": 0,
177 + "img_cassees": 0,
178 + "img_chargees": 0,
179 + "cibles_petites": 0,
180 + "erreurs_js": 2
181 + },
182 + {
183 + "page": "fiche-1-photo",
184 + "viewport": "mobile-390",
185 + "ok": true,
186 + "debordement_px": 0,
187 + "img_cassees": 0,
188 + "img_chargees": 0,
189 + "cibles_petites": 0,
190 + "erreurs_js": 2
191 + },
192 + {
193 + "page": "fiche-desc-longue",
194 + "viewport": "mobile-390",
195 + "ok": true,
196 + "debordement_px": 0,
197 + "img_cassees": 0,
198 + "img_chargees": 0,
199 + "cibles_petites": 0,
200 + "erreurs_js": 2
201 + },
202 + {
203 + "page": "fiche-prix-eleve",
204 + "viewport": "mobile-390",
205 + "ok": true,
206 + "debordement_px": 0,
207 + "img_cassees": 0,
208 + "img_chargees": 0,
209 + "cibles_petites": 0,
210 + "erreurs_js": 2
211 + },
212 + {
213 + "page": "fiche-sans-superficie",
214 + "viewport": "mobile-390",
215 + "ok": true,
216 + "debordement_px": 0,
217 + "img_cassees": 0,
218 + "img_chargees": 0,
219 + "cibles_petites": 0,
220 + "erreurs_js": 2
221 + },
222 + {
223 + "page": "accueil",
224 + "viewport": "mobile-414",
225 + "ok": true,
226 + "debordement_px": 0,
227 + "img_cassees": 0,
228 + "img_chargees": 8,
229 + "cibles_petites": 0,
230 + "erreurs_js": 0
231 + },
232 + {
233 + "page": "recherche-carte",
234 + "viewport": "mobile-414",
235 + "ok": true,
236 + "debordement_px": 0,
237 + "img_cassees": 0,
238 + "img_chargees": 0,
239 + "cibles_petites": 0,
240 + "erreurs_js": 2
241 + },
242 + {
243 + "page": "recherche-sans-resultat",
244 + "viewport": "mobile-414",
245 + "ok": true,
246 + "debordement_px": 0,
247 + "img_cassees": 0,
248 + "img_chargees": 0,
249 + "cibles_petites": 0,
250 + "erreurs_js": 0
251 + },
252 + {
253 + "page": "agences",
254 + "viewport": "mobile-414",
255 + "ok": true,
256 + "debordement_px": 0,
257 + "img_cassees": 0,
258 + "img_chargees": 0,
259 + "cibles_petites": 0,
260 + "erreurs_js": 0
261 + },
262 + {
263 + "page": "stats",
264 + "viewport": "mobile-414",
265 + "ok": true,
266 + "debordement_px": 0,
267 + "img_cassees": 0,
268 + "img_chargees": 0,
269 + "cibles_petites": 0,
270 + "erreurs_js": 0
271 + },
272 + {
273 + "page": "contact",
274 + "viewport": "mobile-414",
275 + "ok": true,
276 + "debordement_px": 0,
277 + "img_cassees": 0,
278 + "img_chargees": 0,
279 + "cibles_petites": 0,
280 + "erreurs_js": 0
281 + },
282 + {
283 + "page": "fiche-tres-photographiee",
284 + "viewport": "mobile-414",
285 + "ok": true,
286 + "debordement_px": 0,
287 + "img_cassees": 0,
288 + "img_chargees": 0,
289 + "cibles_petites": 0,
290 + "erreurs_js": 2
291 + },
292 + {
293 + "page": "fiche-1-photo",
294 + "viewport": "mobile-414",
295 + "ok": true,
296 + "debordement_px": 0,
297 + "img_cassees": 0,
298 + "img_chargees": 0,
299 + "cibles_petites": 0,
300 + "erreurs_js": 2
301 + },
302 + {
303 + "page": "fiche-desc-longue",
304 + "viewport": "mobile-414",
305 + "ok": true,
306 + "debordement_px": 0,
307 + "img_cassees": 0,
308 + "img_chargees": 0,
309 + "cibles_petites": 0,
310 + "erreurs_js": 2
311 + },
312 + {
313 + "page": "fiche-prix-eleve",
314 + "viewport": "mobile-414",
315 + "ok": true,
316 + "debordement_px": 0,
317 + "img_cassees": 0,
318 + "img_chargees": 0,
319 + "cibles_petites": 0,
320 + "erreurs_js": 2
321 + },
322 + {
323 + "page": "fiche-sans-superficie",
324 + "viewport": "mobile-414",
325 + "ok": true,
326 + "debordement_px": 0,
327 + "img_cassees": 0,
328 + "img_chargees": 0,
329 + "cibles_petites": 0,
330 + "erreurs_js": 2
331 + },
332 + {
333 + "page": "accueil",
334 + "viewport": "paysage-844",
335 + "ok": true,
336 + "debordement_px": 0,
337 + "img_cassees": 0,
338 + "img_chargees": 12,
339 + "cibles_petites": 0,
340 + "erreurs_js": 0
341 + },
342 + {
343 + "page": "recherche-carte",
344 + "viewport": "paysage-844",
345 + "ok": true,
346 + "debordement_px": 0,
347 + "img_cassees": 0,
348 + "img_chargees": 0,
349 + "cibles_petites": 0,
350 + "erreurs_js": 2
351 + },
352 + {
353 + "page": "recherche-sans-resultat",
354 + "viewport": "paysage-844",
355 + "ok": true,
356 + "debordement_px": 0,
357 + "img_cassees": 0,
358 + "img_chargees": 0,
359 + "cibles_petites": 1,
360 + "erreurs_js": 0
361 + },
362 + {
363 + "page": "agences",
364 + "viewport": "paysage-844",
365 + "ok": true,
366 + "debordement_px": 0,
367 + "img_cassees": 0,
368 + "img_chargees": 0,
369 + "cibles_petites": 0,
370 + "erreurs_js": 0
371 + },
372 + {
373 + "page": "stats",
374 + "viewport": "paysage-844",
375 + "ok": true,
376 + "debordement_px": 0,
377 + "img_cassees": 0,
378 + "img_chargees": 0,
379 + "cibles_petites": 0,
380 + "erreurs_js": 0
381 + },
382 + {
383 + "page": "contact",
384 + "viewport": "paysage-844",
385 + "ok": true,
386 + "debordement_px": 0,
387 + "img_cassees": 0,
388 + "img_chargees": 0,
389 + "cibles_petites": 0,
390 + "erreurs_js": 0
391 + },
392 + {
393 + "page": "fiche-tres-photographiee",
394 + "viewport": "paysage-844",
395 + "ok": true,
396 + "debordement_px": 0,
397 + "img_cassees": 0,
398 + "img_chargees": 0,
399 + "cibles_petites": 0,
400 + "erreurs_js": 2
401 + },
402 + {
403 + "page": "fiche-1-photo",
404 + "viewport": "paysage-844",
405 + "ok": true,
406 + "debordement_px": 0,
407 + "img_cassees": 0,
408 + "img_chargees": 0,
409 + "cibles_petites": 0,
410 + "erreurs_js": 2
411 + },
412 + {
413 + "page": "fiche-desc-longue",
414 + "viewport": "paysage-844",
415 + "ok": true,
416 + "debordement_px": 0,
417 + "img_cassees": 0,
418 + "img_chargees": 0,
419 + "cibles_petites": 0,
420 + "erreurs_js": 2
421 + },
422 + {
423 + "page": "fiche-prix-eleve",
424 + "viewport": "paysage-844",
425 + "ok": true,
426 + "debordement_px": 0,
427 + "img_cassees": 0,
428 + "img_chargees": 0,
429 + "cibles_petites": 0,
430 + "erreurs_js": 2
431 + },
432 + {
433 + "page": "fiche-sans-superficie",
434 + "viewport": "paysage-844",
435 + "ok": true,
436 + "debordement_px": 0,
437 + "img_cassees": 0,
438 + "img_chargees": 0,
439 + "cibles_petites": 0,
440 + "erreurs_js": 2
441 + },
442 + {
443 + "page": "accueil",
444 + "viewport": "tablette-768",
445 + "ok": true,
446 + "debordement_px": 0,
447 + "img_cassees": 0,
448 + "img_chargees": 12,
449 + "cibles_petites": 0,
450 + "erreurs_js": 0
451 + },
452 + {
453 + "page": "recherche-carte",
454 + "viewport": "tablette-768",
455 + "ok": true,
456 + "debordement_px": 0,
457 + "img_cassees": 0,
458 + "img_chargees": 0,
459 + "cibles_petites": 0,
460 + "erreurs_js": 2
461 + },
462 + {
463 + "page": "recherche-sans-resultat",
464 + "viewport": "tablette-768",
465 + "ok": true,
466 + "debordement_px": 0,
467 + "img_cassees": 0,
468 + "img_chargees": 0,
469 + "cibles_petites": 1,
470 + "erreurs_js": 0
471 + },
472 + {
473 + "page": "agences",
474 + "viewport": "tablette-768",
475 + "ok": true,
476 + "debordement_px": 0,
477 + "img_cassees": 0,
478 + "img_chargees": 0,
479 + "cibles_petites": 0,
480 + "erreurs_js": 0
481 + },
482 + {
483 + "page": "stats",
484 + "viewport": "tablette-768",
485 + "ok": true,
486 + "debordement_px": 0,
487 + "img_cassees": 0,
488 + "img_chargees": 0,
489 + "cibles_petites": 0,
490 + "erreurs_js": 0
491 + },
492 + {
493 + "page": "contact",
494 + "viewport": "tablette-768",
495 + "ok": true,
496 + "debordement_px": 0,
497 + "img_cassees": 0,
498 + "img_chargees": 0,
499 + "cibles_petites": 0,
500 + "erreurs_js": 0
501 + },
502 + {
503 + "page": "fiche-tres-photographiee",
504 + "viewport": "tablette-768",
505 + "ok": true,
506 + "debordement_px": 0,
507 + "img_cassees": 0,
508 + "img_chargees": 0,
509 + "cibles_petites": 0,
510 + "erreurs_js": 2
511 + },
512 + {
513 + "page": "fiche-1-photo",
514 + "viewport": "tablette-768",
515 + "ok": true,
516 + "debordement_px": 0,
517 + "img_cassees": 0,
518 + "img_chargees": 0,
519 + "cibles_petites": 0,
520 + "erreurs_js": 2
521 + },
522 + {
523 + "page": "fiche-desc-longue",
524 + "viewport": "tablette-768",
525 + "ok": true,
526 + "debordement_px": 0,
527 + "img_cassees": 0,
528 + "img_chargees": 0,
529 + "cibles_petites": 0,
530 + "erreurs_js": 2
531 + },
532 + {
533 + "page": "fiche-prix-eleve",
534 + "viewport": "tablette-768",
535 + "ok": true,
536 + "debordement_px": 0,
537 + "img_cassees": 0,
538 + "img_chargees": 0,
539 + "cibles_petites": 0,
540 + "erreurs_js": 2
541 + },
542 + {
543 + "page": "fiche-sans-superficie",
544 + "viewport": "tablette-768",
545 + "ok": true,
546 + "debordement_px": 0,
547 + "img_cassees": 0,
548 + "img_chargees": 0,
549 + "cibles_petites": 0,
550 + "erreurs_js": 2
551 + },
552 + {
553 + "page": "accueil",
554 + "viewport": "desktop-1024",
555 + "ok": true,
556 + "debordement_px": 0,
557 + "img_cassees": 0,
558 + "img_chargees": 12,
559 + "cibles_petites": 0,
560 + "erreurs_js": 0
561 + },
562 + {
563 + "page": "recherche-carte",
564 + "viewport": "desktop-1024",
565 + "ok": true,
566 + "debordement_px": 0,
567 + "img_cassees": 0,
568 + "img_chargees": 0,
569 + "cibles_petites": 0,
570 + "erreurs_js": 2
571 + },
572 + {
573 + "page": "recherche-sans-resultat",
574 + "viewport": "desktop-1024",
575 + "ok": true,
576 + "debordement_px": 0,
577 + "img_cassees": 0,
578 + "img_chargees": 0,
579 + "cibles_petites": 1,
580 + "erreurs_js": 0
581 + },
582 + {
583 + "page": "agences",
584 + "viewport": "desktop-1024",
585 + "ok": true,
586 + "debordement_px": 0,
587 + "img_cassees": 0,
588 + "img_chargees": 0,
589 + "cibles_petites": 0,
590 + "erreurs_js": 0
591 + },
592 + {
593 + "page": "stats",
594 + "viewport": "desktop-1024",
595 + "ok": true,
596 + "debordement_px": 0,
597 + "img_cassees": 0,
598 + "img_chargees": 0,
599 + "cibles_petites": 0,
600 + "erreurs_js": 0
601 + },
602 + {
603 + "page": "contact",
604 + "viewport": "desktop-1024",
605 + "ok": true,
606 + "debordement_px": 0,
607 + "img_cassees": 0,
608 + "img_chargees": 0,
609 + "cibles_petites": 0,
610 + "erreurs_js": 0
611 + },
612 + {
613 + "page": "fiche-tres-photographiee",
614 + "viewport": "desktop-1024",
615 + "ok": true,
616 + "debordement_px": 0,
617 + "img_cassees": 0,
618 + "img_chargees": 0,
619 + "cibles_petites": 0,
620 + "erreurs_js": 2
621 + },
622 + {
623 + "page": "fiche-1-photo",
624 + "viewport": "desktop-1024",
625 + "ok": true,
626 + "debordement_px": 0,
627 + "img_cassees": 0,
628 + "img_chargees": 0,
629 + "cibles_petites": 0,
630 + "erreurs_js": 2
631 + },
632 + {
633 + "page": "fiche-desc-longue",
634 + "viewport": "desktop-1024",
635 + "ok": true,
636 + "debordement_px": 0,
637 + "img_cassees": 0,
638 + "img_chargees": 0,
639 + "cibles_petites": 0,
640 + "erreurs_js": 2
641 + },
642 + {
643 + "page": "fiche-prix-eleve",
644 + "viewport": "desktop-1024",
645 + "ok": true,
646 + "debordement_px": 0,
647 + "img_cassees": 0,
648 + "img_chargees": 0,
649 + "cibles_petites": 0,
650 + "erreurs_js": 2
651 + },
652 + {
653 + "page": "fiche-sans-superficie",
654 + "viewport": "desktop-1024",
655 + "ok": true,
656 + "debordement_px": 0,
657 + "img_cassees": 0,
658 + "img_chargees": 0,
659 + "cibles_petites": 0,
660 + "erreurs_js": 2
661 + },
662 + {
663 + "page": "accueil",
664 + "viewport": "desktop-1440",
665 + "ok": true,
666 + "debordement_px": 0,
667 + "img_cassees": 0,
668 + "img_chargees": 12,
669 + "cibles_petites": 0,
670 + "erreurs_js": 0
671 + },
672 + {
673 + "page": "recherche-carte",
674 + "viewport": "desktop-1440",
675 + "ok": true,
676 + "debordement_px": 0,
677 + "img_cassees": 0,
678 + "img_chargees": 0,
679 + "cibles_petites": 0,
680 + "erreurs_js": 2
681 + },
682 + {
683 + "page": "recherche-sans-resultat",
684 + "viewport": "desktop-1440",
685 + "ok": true,
686 + "debordement_px": 0,
687 + "img_cassees": 0,
688 + "img_chargees": 0,
689 + "cibles_petites": 1,
690 + "erreurs_js": 0
691 + },
692 + {
693 + "page": "agences",
694 + "viewport": "desktop-1440",
695 + "ok": true,
696 + "debordement_px": 0,
697 + "img_cassees": 0,
698 + "img_chargees": 0,
699 + "cibles_petites": 0,
700 + "erreurs_js": 0
701 + },
702 + {
703 + "page": "stats",
704 + "viewport": "desktop-1440",
705 + "ok": true,
706 + "debordement_px": 0,
707 + "img_cassees": 0,
708 + "img_chargees": 0,
709 + "cibles_petites": 0,
710 + "erreurs_js": 0
711 + },
712 + {
713 + "page": "contact",
714 + "viewport": "desktop-1440",
715 + "ok": true,
716 + "debordement_px": 0,
717 + "img_cassees": 0,
718 + "img_chargees": 0,
719 + "cibles_petites": 0,
720 + "erreurs_js": 0
721 + },
722 + {
723 + "page": "fiche-tres-photographiee",
724 + "viewport": "desktop-1440",
725 + "ok": true,
726 + "debordement_px": 0,
727 + "img_cassees": 0,
728 + "img_chargees": 0,
729 + "cibles_petites": 0,
730 + "erreurs_js": 2
731 + },
732 + {
733 + "page": "fiche-1-photo",
734 + "viewport": "desktop-1440",
735 + "ok": true,
736 + "debordement_px": 0,
737 + "img_cassees": 0,
738 + "img_chargees": 0,
739 + "cibles_petites": 0,
740 + "erreurs_js": 2
741 + },
742 + {
743 + "page": "fiche-desc-longue",
744 + "viewport": "desktop-1440",
745 + "ok": true,
746 + "debordement_px": 0,
747 + "img_cassees": 0,
748 + "img_chargees": 0,
749 + "cibles_petites": 0,
750 + "erreurs_js": 2
751 + },
752 + {
753 + "page": "fiche-prix-eleve",
754 + "viewport": "desktop-1440",
755 + "ok": true,
756 + "debordement_px": 0,
757 + "img_cassees": 0,
758 + "img_chargees": 0,
759 + "cibles_petites": 0,
760 + "erreurs_js": 2
761 + },
762 + {
763 + "page": "fiche-sans-superficie",
764 + "viewport": "desktop-1440",
765 + "ok": true,
766 + "debordement_px": 0,
767 + "img_cassees": 0,
768 + "img_chargees": 0,
769 + "cibles_petites": 0,
770 + "erreurs_js": 2
771 + }
772 +]
\ No newline at end of file
added docs/screenshots/validation-2026-08-19/rapport-validation.md +85 −0
@@ -0,0 +1,85 @@
1 +# Rapport de validation du rendu — Immo-Ka
2 +
3 +Date : 2026-08-19 · Base : http://localhost:18096
4 +
5 +Combinaisons testées : 77 — échecs : 0
6 +
7 +| Page | Largeur | Statut | Débordement | Img cassées | Petites cibles | Erreurs JS |
8 +|---|---|---|---|---|---|---|
9 +| accueil | mobile-360 | ✅ OK | 0 px | 0/8 | 0 | 0 |
10 +| recherche-carte | mobile-360 | ✅ OK | 0 px | 0/8 | 4 | 0 |
11 +| recherche-sans-resultat | mobile-360 | ✅ OK | 0 px | 0/0 | 0 | 0 |
12 +| agences | mobile-360 | ✅ OK | 0 px | 0/0 | 0 | 0 |
13 +| stats | mobile-360 | ✅ OK | 0 px | 0/0 | 0 | 0 |
14 +| contact | mobile-360 | ✅ OK | 0 px | 0/0 | 0 | 0 |
15 +| fiche-tres-photographiee | mobile-360 | ✅ OK | 0 px | 0/0 | 0 | 2 |
16 +| fiche-1-photo | mobile-360 | ✅ OK | 0 px | 0/0 | 0 | 2 |
17 +| fiche-desc-longue | mobile-360 | ✅ OK | 0 px | 0/0 | 0 | 2 |
18 +| fiche-prix-eleve | mobile-360 | ✅ OK | 0 px | 0/0 | 0 | 2 |
19 +| fiche-sans-superficie | mobile-360 | ✅ OK | 0 px | 0/0 | 0 | 2 |
20 +| accueil | mobile-390 | ✅ OK | 0 px | 0/8 | 0 | 0 |
21 +| recherche-carte | mobile-390 | ✅ OK | 0 px | 0/0 | 0 | 2 |
22 +| recherche-sans-resultat | mobile-390 | ✅ OK | 0 px | 0/0 | 0 | 0 |
23 +| agences | mobile-390 | ✅ OK | 0 px | 0/0 | 0 | 0 |
24 +| stats | mobile-390 | ✅ OK | 0 px | 0/0 | 0 | 0 |
25 +| contact | mobile-390 | ✅ OK | 0 px | 0/0 | 0 | 0 |
26 +| fiche-tres-photographiee | mobile-390 | ✅ OK | 0 px | 0/0 | 0 | 2 |
27 +| fiche-1-photo | mobile-390 | ✅ OK | 0 px | 0/0 | 0 | 2 |
28 +| fiche-desc-longue | mobile-390 | ✅ OK | 0 px | 0/0 | 0 | 2 |
29 +| fiche-prix-eleve | mobile-390 | ✅ OK | 0 px | 0/0 | 0 | 2 |
30 +| fiche-sans-superficie | mobile-390 | ✅ OK | 0 px | 0/0 | 0 | 2 |
31 +| accueil | mobile-414 | ✅ OK | 0 px | 0/8 | 0 | 0 |
32 +| recherche-carte | mobile-414 | ✅ OK | 0 px | 0/0 | 0 | 2 |
33 +| recherche-sans-resultat | mobile-414 | ✅ OK | 0 px | 0/0 | 0 | 0 |
34 +| agences | mobile-414 | ✅ OK | 0 px | 0/0 | 0 | 0 |
35 +| stats | mobile-414 | ✅ OK | 0 px | 0/0 | 0 | 0 |
36 +| contact | mobile-414 | ✅ OK | 0 px | 0/0 | 0 | 0 |
37 +| fiche-tres-photographiee | mobile-414 | ✅ OK | 0 px | 0/0 | 0 | 2 |
38 +| fiche-1-photo | mobile-414 | ✅ OK | 0 px | 0/0 | 0 | 2 |
39 +| fiche-desc-longue | mobile-414 | ✅ OK | 0 px | 0/0 | 0 | 2 |
40 +| fiche-prix-eleve | mobile-414 | ✅ OK | 0 px | 0/0 | 0 | 2 |
41 +| fiche-sans-superficie | mobile-414 | ✅ OK | 0 px | 0/0 | 0 | 2 |
42 +| accueil | paysage-844 | ✅ OK | 0 px | 0/12 | 0 | 0 |
43 +| recherche-carte | paysage-844 | ✅ OK | 0 px | 0/0 | 0 | 2 |
44 +| recherche-sans-resultat | paysage-844 | ✅ OK | 0 px | 0/0 | 1 | 0 |
45 +| agences | paysage-844 | ✅ OK | 0 px | 0/0 | 0 | 0 |
46 +| stats | paysage-844 | ✅ OK | 0 px | 0/0 | 0 | 0 |
47 +| contact | paysage-844 | ✅ OK | 0 px | 0/0 | 0 | 0 |
48 +| fiche-tres-photographiee | paysage-844 | ✅ OK | 0 px | 0/0 | 0 | 2 |
49 +| fiche-1-photo | paysage-844 | ✅ OK | 0 px | 0/0 | 0 | 2 |
50 +| fiche-desc-longue | paysage-844 | ✅ OK | 0 px | 0/0 | 0 | 2 |
51 +| fiche-prix-eleve | paysage-844 | ✅ OK | 0 px | 0/0 | 0 | 2 |
52 +| fiche-sans-superficie | paysage-844 | ✅ OK | 0 px | 0/0 | 0 | 2 |
53 +| accueil | tablette-768 | ✅ OK | 0 px | 0/12 | 0 | 0 |
54 +| recherche-carte | tablette-768 | ✅ OK | 0 px | 0/0 | 0 | 2 |
55 +| recherche-sans-resultat | tablette-768 | ✅ OK | 0 px | 0/0 | 1 | 0 |
56 +| agences | tablette-768 | ✅ OK | 0 px | 0/0 | 0 | 0 |
57 +| stats | tablette-768 | ✅ OK | 0 px | 0/0 | 0 | 0 |
58 +| contact | tablette-768 | ✅ OK | 0 px | 0/0 | 0 | 0 |
59 +| fiche-tres-photographiee | tablette-768 | ✅ OK | 0 px | 0/0 | 0 | 2 |
60 +| fiche-1-photo | tablette-768 | ✅ OK | 0 px | 0/0 | 0 | 2 |
61 +| fiche-desc-longue | tablette-768 | ✅ OK | 0 px | 0/0 | 0 | 2 |
62 +| fiche-prix-eleve | tablette-768 | ✅ OK | 0 px | 0/0 | 0 | 2 |
63 +| fiche-sans-superficie | tablette-768 | ✅ OK | 0 px | 0/0 | 0 | 2 |
64 +| accueil | desktop-1024 | ✅ OK | 0 px | 0/12 | 0 | 0 |
65 +| recherche-carte | desktop-1024 | ✅ OK | 0 px | 0/0 | 0 | 2 |
66 +| recherche-sans-resultat | desktop-1024 | ✅ OK | 0 px | 0/0 | 1 | 0 |
67 +| agences | desktop-1024 | ✅ OK | 0 px | 0/0 | 0 | 0 |
68 +| stats | desktop-1024 | ✅ OK | 0 px | 0/0 | 0 | 0 |
69 +| contact | desktop-1024 | ✅ OK | 0 px | 0/0 | 0 | 0 |
70 +| fiche-tres-photographiee | desktop-1024 | ✅ OK | 0 px | 0/0 | 0 | 2 |
71 +| fiche-1-photo | desktop-1024 | ✅ OK | 0 px | 0/0 | 0 | 2 |
72 +| fiche-desc-longue | desktop-1024 | ✅ OK | 0 px | 0/0 | 0 | 2 |
73 +| fiche-prix-eleve | desktop-1024 | ✅ OK | 0 px | 0/0 | 0 | 2 |
74 +| fiche-sans-superficie | desktop-1024 | ✅ OK | 0 px | 0/0 | 0 | 2 |
75 +| accueil | desktop-1440 | ✅ OK | 0 px | 0/12 | 0 | 0 |
76 +| recherche-carte | desktop-1440 | ✅ OK | 0 px | 0/0 | 0 | 2 |
77 +| recherche-sans-resultat | desktop-1440 | ✅ OK | 0 px | 0/0 | 1 | 0 |
78 +| agences | desktop-1440 | ✅ OK | 0 px | 0/0 | 0 | 0 |
79 +| stats | desktop-1440 | ✅ OK | 0 px | 0/0 | 0 | 0 |
80 +| contact | desktop-1440 | ✅ OK | 0 px | 0/0 | 0 | 0 |
81 +| fiche-tres-photographiee | desktop-1440 | ✅ OK | 0 px | 0/0 | 0 | 2 |
82 +| fiche-1-photo | desktop-1440 | ✅ OK | 0 px | 0/0 | 0 | 2 |
83 +| fiche-desc-longue | desktop-1440 | ✅ OK | 0 px | 0/0 | 0 | 2 |
84 +| fiche-prix-eleve | desktop-1440 | ✅ OK | 0 px | 0/0 | 0 | 2 |
85 +| fiche-sans-superficie | desktop-1440 | ✅ OK | 0 px | 0/0 | 0 | 2 |
\ No newline at end of file
added docs/screenshots/validation-2026-08-19/recherche-carte--desktop-1024.png +0 −0

Binary file not shown.

added docs/screenshots/validation-2026-08-19/recherche-carte--desktop-1440.png +0 −0

Binary file not shown.

added docs/screenshots/validation-2026-08-19/recherche-carte--mobile-360.png +0 −0

Binary file not shown.

added docs/screenshots/validation-2026-08-19/recherche-carte--mobile-390.png +0 −0

Binary file not shown.

added docs/screenshots/validation-2026-08-19/recherche-carte--mobile-414.png +0 −0

Binary file not shown.

added docs/screenshots/validation-2026-08-19/recherche-carte--paysage-844.png +0 −0

Binary file not shown.

added docs/screenshots/validation-2026-08-19/recherche-carte--tablette-768.png +0 −0

Binary file not shown.

added docs/screenshots/validation-2026-08-19/recherche-sans-resultat--desktop-1024.png +0 −0

Binary file not shown.

added docs/screenshots/validation-2026-08-19/recherche-sans-resultat--desktop-1440.png +0 −0

Binary file not shown.

added docs/screenshots/validation-2026-08-19/recherche-sans-resultat--mobile-360.png +0 −0

Binary file not shown.

added docs/screenshots/validation-2026-08-19/recherche-sans-resultat--mobile-390.png +0 −0

Binary file not shown.

added docs/screenshots/validation-2026-08-19/recherche-sans-resultat--mobile-414.png +0 −0

Binary file not shown.

added docs/screenshots/validation-2026-08-19/recherche-sans-resultat--paysage-844.png +0 −0

Binary file not shown.

added docs/screenshots/validation-2026-08-19/recherche-sans-resultat--tablette-768.png +0 −0

Binary file not shown.

added docs/screenshots/validation-2026-08-19/stats--desktop-1024.png +0 −0

Binary file not shown.

added docs/screenshots/validation-2026-08-19/stats--desktop-1440.png +0 −0

Binary file not shown.

added docs/screenshots/validation-2026-08-19/stats--mobile-360.png +0 −0

Binary file not shown.

added docs/screenshots/validation-2026-08-19/stats--mobile-390.png +0 −0

Binary file not shown.

added docs/screenshots/validation-2026-08-19/stats--mobile-414.png +0 −0

Binary file not shown.

added docs/screenshots/validation-2026-08-19/stats--paysage-844.png +0 −0

Binary file not shown.

added docs/screenshots/validation-2026-08-19/stats--tablette-768.png +0 −0

Binary file not shown.

modified frontend/src/styles.css +9 −9
@@ -43,9 +43,7 @@ button { font-family: inherit; }
43 43 border-bottom: 2px solid var(--ink);
44 44 }
45 45 .header-inner { display: flex; align-items: center; gap: 20px; height: 64px; }
46 −.brand { position: relative; font-family: var(--font-display); font-weight: 700; font-size: 26px; letter-spacing: -0.04em; display: flex; align-items: center; line-height: 1; }
47 −/* Cible tactile ≥44 px pour le logo (92×27 au naturel) */
48 −.brand::after { content: ""; position: absolute; inset: -8px; }
46 +.brand { font-family: var(--font-display); font-weight: 700; font-size: 26px; letter-spacing: -0.04em; display: flex; align-items: center; line-height: 1; }
49 47 .brand .ka { background: var(--ink); color: var(--lime); padding: 2px 7px 4px; border-radius: 6px; margin-left: 3px; transform: rotate(-2deg); transition: transform 0.2s ease; }
50 48 .brand:hover .ka { transform: rotate(0deg); }
51 49 .brand-tag { font-family: var(--font-mono); font-size: 10.5px; color: var(--ink-3); letter-spacing: 0.08em; text-transform: uppercase; margin-left: 12px; }
@@ -317,7 +315,11 @@ table.rooms tr:nth-child(even) td { background: var(--surface-2); }
317 315 .tile-k { font-family: var(--font-mono); font-size: 10.5px; text-transform: uppercase; letter-spacing: 0.1em; color: var(--ink-3); margin-top: 6px; }
318 316 .hero-tile { background: var(--ink); color: var(--lime); border-color: var(--ink); }
319 317 .hero-tile .tile-k { color: rgba(226, 55, 68, 0.7); }
320 −.viz-card { background: var(--surface); border: 1.5px solid var(--ink); border-radius: var(--r-card); box-shadow: var(--shadow-off-soft); padding: 26px 28px 20px; margin-bottom: 22px; }
318 +.viz-card { background: var(--surface); border: 1.5px solid var(--ink); border-radius: var(--r-card); box-shadow: var(--shadow-off-soft); padding: 26px 28px 20px; margin-bottom: 22px; min-width: 0; max-width: 100%; overflow-x: auto; }
319 +/* mobile : une table large ne doit JAMAIS déborder la page (grid blowout) —
320 + chaque bloc de la page Stats défile horizontalement en interne au besoin */
321 +.stats-page section, .stats-page > * { min-width: 0; max-width: 100%; }
322 +@media (max-width: 640px) { .stats-page .viz-card { padding: 18px 14px 14px; } }
321 323 .viz-card h2 { font-size: 19px; text-transform: uppercase; letter-spacing: -0.01em; }
322 324 .viz-sub { font-family: var(--font-mono); font-size: 11px; letter-spacing: 0.06em; text-transform: uppercase; color: var(--ink-3); margin: 4px 0 20px; }
323 325 .viz-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 22px; }
@@ -511,12 +513,12 @@ table.rooms tr:nth-child(even) td { background: var(--surface-2); }
511 513 .filterbar.open .f-primary { flex-direction: column; }
512 514 .filterbar.open .f-ctl select { max-width: none; width: 100%; }
513 515 .filterbar.open .f-more { display: none; }
514 − .filterbar.open { display: flex; flex-direction: column; gap: 12px; position: fixed; left: 0; right: 0; bottom: 0; z-index: var(--z-modal, 900); margin: 0; border-radius: 20px 20px 0 0; border-width: 2px 0 0 0; max-height: 82dvh; overflow-y: auto; -webkit-overflow-scrolling: touch; padding: 16px 18px calc(18px + env(safe-area-inset-bottom)); box-shadow: 0 -16px 48px rgba(16, 18, 16, 0.35); animation: sheet-up 0.22s ease; }
516 + .filterbar.open { display: flex; flex-direction: column; gap: 12px; position: fixed; left: 0; right: 0; bottom: 0; z-index: 95; margin: 0; border-radius: 20px 20px 0 0; border-width: 2px 0 0 0; max-height: 82dvh; overflow-y: auto; -webkit-overflow-scrolling: touch; padding: 16px 18px calc(18px + env(safe-area-inset-bottom)); box-shadow: 0 -16px 48px rgba(16, 18, 16, 0.35); animation: sheet-up 0.22s ease; }
515 517 @keyframes sheet-up { from { transform: translateY(30%); opacity: 0.4; } to { transform: none; opacity: 1; } }
516 518 .filterbar.open .sheet-head { display: flex; justify-content: space-between; align-items: center; font-family: var(--font-display); font-weight: 700; font-size: 17px; text-transform: uppercase; position: sticky; top: -16px; background: var(--surface); padding: 6px 0 8px; border-bottom: 1.5px solid var(--line); margin-bottom: 2px; z-index: 1; }
517 519 .sheet-close { border: 1.5px solid var(--ink); background: var(--surface); border-radius: 50%; width: 36px; height: 36px; font-size: 15px; cursor: pointer; line-height: 1; }
518 520 .filterbar.open .sheet-apply { display: block; width: 100%; }
519 − .sheet-backdrop { display: block; position: fixed; inset: 0; z-index: var(--z-overlay, 800); background: rgba(16, 18, 16, 0.45); backdrop-filter: blur(2px); }
521 + .sheet-backdrop { display: block; position: fixed; inset: 0; z-index: 90; background: rgba(16, 18, 16, 0.45); backdrop-filter: blur(2px); }
520 522 .fab { display: flex; align-items: center; gap: 6px; position: fixed; left: 50%; transform: translateX(-50%); bottom: calc(18px + env(safe-area-inset-bottom)); z-index: 80; background: var(--ink); color: var(--lime); border: 1.5px solid var(--ink); border-radius: 999px; padding: 13px 24px; font-family: var(--font-display); font-weight: 700; font-size: 15px; cursor: pointer; box-shadow: 0 8px 24px rgba(16, 18, 16, 0.35), 4px 4px 0 rgba(26, 18, 20, 0.25); }
521 523 .fab:active { transform: translateX(-50%) scale(0.97); }
522 524 .results-head { margin-top: 20px; }
@@ -664,9 +666,7 @@ table.rooms tr:nth-child(even) td { background: var(--surface-2); }
664 666 .ka-login:hover { transform: translate(-1px, -1px); box-shadow: 4px 4px 0 rgba(20, 24, 20, 0.2); }
665 667 .ka-login:hover b { transform: rotate(0); }
666 668 .ka-login:active { transform: translate(2px, 2px); box-shadow: none; }
667 −.ka-signup { position: relative; font-family: var(--font-mono); font-size: 11px; color: var(--ink-2); text-decoration: underline; text-underline-offset: 3px; white-space: nowrap; }
668 −/* Cible tactile ≥44 px sans changer le rendu (lien 99×17 au naturel) */
669 −.ka-signup::after { content: ""; position: absolute; inset: -14px; }
669 +.ka-signup { font-family: var(--font-mono); font-size: 11px; color: var(--ink-2); text-decoration: underline; text-underline-offset: 3px; white-space: nowrap; }
670 670 .ka-signup:hover { color: var(--accent-deep); }
671 671 @media (max-width: 1100px) { .header-acct .ka-signup { display: none; } }
672 672 .ka-acct {
modified immoka/connectors/kw_urbain.py +202 −13
@@ -4,6 +4,21 @@
4 4 # connectors/kw_urbain.py : Keller Williams Urbain (kwurbain.ca)
5 5 # Page /inscriptions rendue serveur : toutes les inscriptions de l'agence en
6 6 # cartes HTML (plateforme marketingwebsites.ca, commune aux bureaux KW Canada).
7 +#
8 +# ENRICHISSEMENT DÉTAIL (v3) : fiche /inscriptions/inscription/{id}/ rendue
9 +# serveur, thème « canvas » (différent du thème Charisma mais mêmes données
10 +# MW Properties). Structure réelle vérifiée (2026-08) :
11 +# - tableaux <tr><th>Libellé</th><td>Valeur</td> : Sommaire (superficie,
12 +# pièces, chambres, sdb, salles d'eau, année), Bâtiment (Type, Style,
13 +# Dimensions, terrain), Dépenses (taxes/coûts « $ 4857 / année »),
14 +# Caractéristiques (<th width="20%">) ;
15 +# - pièces : <td data-title="Pièce|Dimensions|Niveau|Revêtement"> ;
16 +# - description : <h3 class=title><span>Aperçu</span> + <div class=prop>
17 +# (p descriptif, p#addendum, p « Inclus :/Exclus : ») ;
18 +# - courtier : cartes .broker-card (h4 nom, h5 titre, lien tel:) ;
19 +# - GPS : initGoogleMap("streetMap", lat, lng) inline (commenté mais présent).
20 +# → property_type (« Type » du bloc Bâtiment) désormais rempli : c'est le
21 +# champ qui conditionne la publication (sinon quarantaine).
7 22 # -----------------------------------------------------------------------------
8 23 from __future__ import annotations
9 24
@@ -19,7 +34,10 @@ from ..schema import PropertyListing
19 34 BASE = "https://www.kwurbain.ca"
20 35 LISTINGS = f"{BASE}/inscriptions/"
21 36 IMG_TMPL = "https://realestate.marketingwebsites.ca/property-images/{id}/{id}-{n:02d}.jpg"
22 −DETAIL_LIMIT = int(os.environ.get("IMMOKA_KW_DETAIL_LIMIT", "400"))
37 +# fiches détail (re)lues au plus par cycle — cache BD (key v3) : un cycle
38 +# suffit pour les ~350 inscriptions, les suivants sont quasi gratuits
39 +DETAIL_LIMIT = int(os.environ.get("IMMOKA_KW_DETAIL_LIMIT",
40 + os.environ.get("IMMOKA_DETAIL_LIMIT", "400")))
23 41 _KW_IMG_RE = re.compile(
24 42 r'https://realestate\.marketingwebsites\.ca/property-images/\d+/[^"\'\\ ]+\.(?:jpg|jpeg|png|webp)',
25 43 re.I)
@@ -49,12 +67,12 @@ class KwUrbainConnector(BaseConnector):
49 67 lst = self._to_listing(pid, block)
50 68 if lst is not None:
51 69 listings.append(lst)
52 − # fiche détail : galerie complète + description
53 − du.enrich(self, listings, DETAIL_LIMIT, parse_kw_detail, key="v2")
70 + # fiche détail : galerie complète, description, caractéristiques
71 + # structurées, type de bien, pièces, courtier, GPS — cache BD.
72 + du.enrich(self, listings, DETAIL_LIMIT, parse_kw_detail, key="v3")
54 73 return listings
55 74
56 75 def _to_listing(self, pid: str, block: str) -> PropertyListing | None:
57 − addr = _txt((_H5_RE.search(block) or [None, ""])[1] if _H5_RE.search(block) else "")
58 76 m_addr = _H5_RE.search(block)
59 77 addr = _txt(m_addr.group(1)) if m_addr else ""
60 78 m_price = _PRICE_RE.search(block)
@@ -87,9 +105,73 @@ class KwUrbainConnector(BaseConnector):
87 105 )
88 106
89 107
108 +# --- fiche détail (MW Properties, thème « canvas » KW) ------------------------
109 +# lignes <tr><th [width=20%]>Libellé</th><td>Valeur</td></tr> des 4 tableaux
110 +# (Sommaire / Bâtiment / Dépenses / Caractéristiques) ; le tableau des pièces
111 +# n'a pas de <th> par ligne (thead à 4 <th> consécutifs) → jamais capté ici.
112 +_ROW_RE = re.compile(r'<tr>\s*<th(?:\s[^>]*)?>\s*([^<]+?)\s*</th>\s*'
113 + r'<td[^>]*>\s*(.*?)\s*</td>\s*</tr>', re.S)
114 +_ROOM_RE = re.compile(r'<td data-title="Pièce">([^<]*)</td>\s*'
115 + r'<td data-title="Dimensions">([^<]*)</td>\s*'
116 + r'<td data-title="Niveau">([^<]*)</td>\s*'
117 + r'<td data-title="Revêtement">([^<]*)</td>', re.S)
118 +# « Aperçu » : p descriptif + p#addendum + p « Inclus :/Exclus : »
119 +_DESC_RE = re.compile(r'<h3 class="title">\s*<span>Aperçu</span>\s*</h3>\s*'
120 + r'<div class="prop">(.*?)</div>', re.S | re.I)
121 +_PARA_RE = re.compile(r'<p[^>]*>(.*?)</p>', re.S)
122 +_BROKER_CARD_RE = re.compile(r'class="broker-card', re.I)
123 +_NAME_RE = re.compile(r'card-title no-border">\s*([^<]+?)\s*</h4>')
124 +_DESIG_RE = re.compile(r'card-subtitle no-border">\s*([^<]+?)\s*</h5>')
125 +_TEL_RE = re.compile(r'href="tel:([^"]+)"')
126 +_COORD_RE = re.compile(r'initGoogleMap\("(?:streetMap|map)",\s*'
127 + r'(-?\d{1,2}\.\d+)\s*,\s*(-?\d{2,3}\.\d+)')
128 +_TOUR_RE = re.compile(r'https?://(?:my\.matterport\.com/show/[^"\'\s<>]+'
129 + r'|(?:www\.)?youtube\.com/(?:embed/|watch\?v=)[^"\'\s<>]+'
130 + r'|youtu\.be/[^"\'\s<>]+'
131 + r'|(?:player\.)?vimeo\.com/(?:video/)?\d+[^"\'\s<>]*)', re.I)
132 +_ZEROS = {"", "0", "0x0", "0 x 0", "n/a", "-"}
133 +
134 +
135 +def _text(fragment: str) -> str:
136 + """Fragment HTML -> texte propre (les <br> deviennent des sauts de ligne)."""
137 + t = re.sub(r'<br\s*/?>', '\n', fragment)
138 + t = re.sub(r'<[^>]+>', ' ', t)
139 + t = _html.unescape(t)
140 + t = re.sub(r'[ \t]+', ' ', t)
141 + return "\n".join(line.strip() for line in t.splitlines()).strip()
142 +
143 +
144 +def _num(raw: str) -> float | None:
145 + v = raw.replace(" ", "").replace(" ", "").replace(" ", "")
146 + if v.count(",") == 1 and "." not in v:
147 + v = v.replace(",", ".") # décimale française « 58,9 »
148 + else:
149 + v = v.replace(",", "") # milliers « 2,966.53 »
150 + try:
151 + return float(v) or None
152 + except ValueError:
153 + return None
154 +
155 +
156 +def _sqft(val: str) -> float | None:
157 + """« 2966.53 PC » / « 58.9 MC » -> pi² (unité obligatoire, 0 rejeté)."""
158 + m = re.search(r'([\d][\d\s ,.]*)\s*(MC|M2|M²|PC|PI2|PI²)\b', val or "", re.I)
159 + if not m:
160 + return None
161 + v = _num(m.group(1))
162 + if not v:
163 + return None
164 + return round(v * 10.7639) if m.group(2).upper() in ("MC", "M2", "M²") else round(v)
165 +
166 +
90 167 def parse_kw_detail(html: str) -> dict:
91 − """Galerie complète + description (balise meta) de la fiche KW."""
168 + """Fiche KW (MW Properties) : galerie, description+addendum+inclusions,
169 + tableaux th/td (type de bien, année, superficies, taxes), pièces,
170 + courtier inscripteur, GPS, visite virtuelle."""
92 171 out: dict = {}
172 + details: dict = {}
173 +
174 + # galerie complète (property-images, ordre du document)
93 175 seen, imgs = set(), []
94 176 for u in _KW_IMG_RE.findall(html):
95 177 if u not in seen:
@@ -97,12 +179,119 @@ def parse_kw_detail(html: str) -> dict:
97 179 imgs.append(u)
98 180 if imgs:
99 181 out["images"] = imgs
100 − m = _META_DESC_RE.search(html)
101 − if m:
102 − d = _html.unescape(m.group(1)).strip()
103 − if d and not d.lower().startswith(("keller williams", "trouvez")):
104 − out["description"] = d
105 − _det = du.centris_details(du.flatten(html))
106 − if _det:
107 − out.setdefault("details", {}).update(_det)
182 +
183 + # tableaux Sommaire / Bâtiment / Dépenses / Caractéristiques
184 + for label, val in _ROW_RE.findall(html):
185 + label = _html.unescape(label).strip().rstrip(":").strip()
186 + val = re.sub(r'\s+', ' ', _text(val)).strip()
187 + if not label or val.lower() in _ZEROS:
188 + continue
189 + if label == "Type":
190 + out["property_type"] = val
191 + details.setdefault("Type de bâtiment", val)
192 + elif label == "Style":
193 + details.setdefault("Style", val)
194 + elif label == "Année de construction":
195 + if re.fullmatch(r"(1[6-9]|20)\d{2}", val):
196 + out["year_built"] = int(val)
197 + details.setdefault(label, val)
198 + elif label == "Superficie habitable":
199 + a = _sqft(val)
200 + if a:
201 + out["area_sqft"] = a
202 + details.setdefault(label, val)
203 + elif label == "Superficie du terrain":
204 + t = _sqft(val)
205 + if t:
206 + out["lot_sqft"] = t
207 + details.setdefault(label, val)
208 + elif label == "Dimensions":
209 + details.setdefault("Dimensions du bâtiment", val)
210 + elif label == "No. de pièces totales":
211 + if val.isdigit():
212 + details.setdefault("Nombre de pièces", val)
213 + elif label == "Chambres à coucher":
214 + if val.isdigit():
215 + out["bedrooms"] = int(val)
216 + elif label == "Salles de bain":
217 + if val.isdigit():
218 + out["bathrooms"] = int(val)
219 + elif label == "Salles d'eau":
220 + if val.isdigit():
221 + out["powder_rooms"] = int(val)
222 + else:
223 + # Dépenses (« Taxes municipales (2025) » -> « $ 4857 / année ») et
224 + # Caractéristiques (Proximité, Garage, Toiture, Zonage…)
225 + details.setdefault(label, val[:300])
226 +
227 + # description « Aperçu » : p descriptif, p#addendum, p Inclus:/Exclus:
228 + md = _DESC_RE.search(html)
229 + if md:
230 + parts: list[str] = []
231 + for para in _PARA_RE.findall(md.group(1)):
232 + txt = _text(para)
233 + if not txt:
234 + continue
235 + low = txt.lower()
236 + if low.startswith("inclus"):
237 + details.setdefault("Inclusions",
238 + re.sub(r'^inclus\s*:\s*', '', txt, flags=re.I)[:600])
239 + elif low.startswith("exclus"):
240 + details.setdefault("Exclusions",
241 + re.sub(r'^exclus\s*:\s*', '', txt, flags=re.I)[:600])
242 + else:
243 + parts.append(txt)
244 + if parts:
245 + out["description"] = "\n\n".join(parts)[:6000]
246 + if not out.get("description"):
247 + mm = _META_DESC_RE.search(html)
248 + if mm:
249 + d = _html.unescape(mm.group(1)).strip()
250 + if d and not d.lower().startswith(("keller williams", "trouvez")):
251 + out["description"] = d
252 +
253 + # détails de pièce -> features + nombre de pièces
254 + feats = []
255 + for name, dim, lvl, floor in _ROOM_RE.findall(html):
256 + name, dim = _html.unescape(name).strip(), _html.unescape(dim).strip()
257 + lvl, floor = _html.unescape(lvl).strip(), _html.unescape(floor).strip()
258 + if not name or name.lower() in _ZEROS:
259 + continue
260 + line = name + (f" — {dim}" if dim else "") + (f", {lvl}" if lvl else "")
261 + if floor:
262 + line += f" ({floor})"
263 + feats.append(line)
264 + if feats:
265 + out["features"] = feats[:40]
266 + details.setdefault("Nombre de pièces", str(len(feats)))
267 +
268 + # courtier inscripteur : première carte .broker-card (nom, titre, tel)
269 + mb = _BROKER_CARD_RE.search(html)
270 + if mb:
271 + nxt = _BROKER_CARD_RE.search(html, mb.end())
272 + seg = html[mb.start():nxt.start() if nxt else mb.start() + 4000]
273 + mn = _NAME_RE.search(seg)
274 + if mn:
275 + out["broker_name"] = _html.unescape(mn.group(1)).strip()
276 + mdg = _DESIG_RE.search(seg)
277 + if mdg:
278 + details.setdefault("Titre du courtier", _html.unescape(mdg.group(1)).strip())
279 + mt = _TEL_RE.search(seg)
280 + if mt:
281 + out["broker_phone"] = _html.unescape(mt.group(1)).strip()
282 +
283 + # coordonnées GPS (initGoogleMap inline, présent même commenté)
284 + mc = _COORD_RE.search(html)
285 + if mc:
286 + lat, lng = float(mc.group(1)), float(mc.group(2))
287 + if 44.5 <= lat <= 63.0 and -80.0 <= lng <= -56.0:
288 + out["lat"], out["lng"] = lat, lng
289 +
290 + # visite virtuelle / vidéo (matterport, youtube, vimeo)
291 + mt = _TOUR_RE.search(html)
292 + if mt:
293 + details.setdefault("Visite virtuelle / vidéo", mt.group(0))
294 +
295 + if details:
296 + out["details"] = details
108 297 return out
modified immoka/web.py +8 −9
@@ -279,8 +279,9 @@ def facets(city: str | None = None):
279 279 "sectors": [r["sector"] for r in con.execute(
280 280 sector_sql + " ORDER BY sector", sector_args)],
281 281 "property_types": [r["property_type"] for r in con.execute(
282 − "SELECT DISTINCT property_type FROM listings WHERE active=1"
283 − " AND property_type<>'' ORDER BY property_type")],
282 + "SELECT property_type FROM listings WHERE active=1"
283 + " AND property_type<>''" + DEDUP_CLAUSE +
284 + " GROUP BY property_type ORDER BY COUNT(*) DESC")],
284 285 "sources": [dict(r) for r in con.execute(
285 286 "SELECT source, COUNT(*) n FROM listings WHERE active=1"
286 287 + DEDUP_CLAUSE + " GROUP BY source ORDER BY n DESC")],
@@ -438,10 +439,7 @@ def stats_report(
438 439 to: str | None = Query(None),
439 440 mode: str = Query("complet"),
440 441 ):
441 − """Rapport PDF estampillé Groupe-KA (gabarit commun immoka/kapdf.py v2).
442 −
443 − 5 modes : complet | synthese | tendances | repartitions | donnees —
444 − un mode inconnu retombe sur `complet` (rétrocompatible v1)."""
442 + """Rapport PDF estampillé Groupe-KA (gabarit commun immoka/kapdf.py)."""
445 443 from . import kapdf
446 444 dash = kastats.dashboard(period, from_, to)
447 445 site = {
@@ -450,12 +448,13 @@ def stats_report(
450 448 "domain": "www.immo-ka.com",
451 449 "tagline": "Agrégateur de propriétés à vendre — province de Québec",
452 450 }
453 − mode = mode if mode in kapdf.REPORT_MODES else "complet"
454 − pdf = kapdf.GroupeKAReport(site=site, dashboard=dash, mode=mode).build()
451 + pdf = kapdf.GroupeKAReport(
452 + site=site, dashboard=dash,
453 + mode="synthese" if mode == "synthese" else "complet").build()
455 454 return Response(
456 455 content=pdf, media_type="application/pdf",
457 456 headers={"Content-Disposition":
458 − f'attachment; filename="{kapdf.filename("immo-ka", period, mode)}"'})
457 + f'attachment; filename="{kapdf.filename("immo-ka", period)}"'})
459 458
460 459
461 460 @app.post("/api/sync")
462 461