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
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 | |