Immo-Ka — agrégateur des propriétés à vendre au Québec (73 connecteurs, ~40 000 annonces, React+FastAPI)
Python 47.5%
HTML 27.9%
TypeScript 15.5%
CSS 7.2%
JavaScript 2%
1# Immo-Ka — Rapport final : enrichissement des connecteurs + solidité mobile2**Date : 2026-08-19 · périmètre : www.immo-ka.com (M4M64a:8096)**34## 1. Enrichissement des connecteurs (Mission 1)56### 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) |1819### 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.2324### 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.3031### 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).3536## 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).4243## 3. Suivi44- 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.46