# Inventaire source — Lou-Ka (audit en lecture seule, 2026-10-17) Nœud : M4M64a, dossier `~/apps/lou-ka`, dépôt `gitsrv:srv/git/lou-ka.git` (HEAD 57646d3, 2026-10-15). Rien n'a été modifié. ## Stack - Python 3.14 (`.venv`), FastAPI + Uvicorn ; frontend React 18 + Vite 5 + TS, cartes `@groupe-ka/ka-maps` sur Mapbox GL (jeton `VITE_MAPBOX_TOKEN`). - Tests : `tests/` (pytest, 93 tests, 198 fixtures HTTP rejouables). - PM2 : `lou-ka-web` (`run.py serve 8095`), `lou-ka-sync` (`run.py watch 60` : tous les connecteurs toutes les 60 min puis géocodage → POI → quartier → qualité → images → dédup → immeubles → fairvalue → KA Scores). ## Données - SQLite WAL `data/louka.db` (4,2 Go). Table `listings` (uid = `:`, 220 801 lignes, 48 937 actives+publiées, 40 072 canoniques `dup_of IS NULL`), `price_log`, `listing_events`, `fairvalue` (fv, fv_low, fv_high, deviation, verdict sous/marche/sur, confidence, method, comps, model_version `fv-logement-1.0`), `kascores` (par `coord_key`), `buildings`, `geocode_cache`, `image_checks`, `users`/`favorites` (KA ID). - Photos : URL hotlinkées du site source (`images` JSON), filtrées (`images_ok`) ; miniatures WebP à la volée via `/api/img` seulement si `image_checks.status='ok'`. **Aucun droit de redistribution documenté.** - Taux de remplissage (actifs) : lat/lng 97 %, prix 100 %, chambres 98 %, sdb 75 %, superficie 64 %, images 97 %. - 424 sources distinctes (gestionnaires, portails kangalou/louer_ca/rentals_ca/zumper, petites annonces kijiji/lespac/fb_marketplace, courtiers). Chaque connecteur a une fiche `docs/connecteurs/.md` (données factuelles publiques, UA identifiable `LouKaBot/1.0`, throttling, lien vers l'original, retrait sur demande). ## Logique réutilisable - `louka/fairvalue.py` : médianes de segment (ville/quartier × chambres) → ajustements multiplicatifs → kNN géographique ; `explain(uid)`. - `louka/kascores.py` (`2026.08-v1`) : walk/transit/bike/calme/services → global, sur tuiles OSM + PMD 2021. - `louka/dedup.py` : blocage grille ~110 m / clé d'adresse normalisée, confirmation type d'unité + prix ±4 % + second signal ; canonique = source la plus autoritaire. - `louka/geocode.py` : Nominatim + Adresses Québec (MERN ArcGIS), cache. - `louka/quartier.py` + `data/quartier.db` (recensement, défavorisation, écoles, chaleur) ; couches `inondation.db`, `rdl.db`, `hydro.db`, `air.db`, `commerces.db`, `transit.db`. ## Décision Toveli - **Réutiliser en lecture seule** : instantané `sqlite3 .backup` de `data/louka.db` → extraction mince (`listings` canoniques actives + `fairvalue` + `kascores` + `price_log`) rapatriée la nuit sur le nœud Toveli (clé `ka_guardian_ed25519` de M3U96b autorisée sur M4M64a le 2026-10-17, entrée commentée `toveli-sync-depuis-M3U96b-2026-10-17`). - **Adapter** : logique de dédup (grille + adresse) réécrite en TypeScript pour le rapprochement annonce → propriété Toveli ; KA Scores et fairvalue consommés tels quels (résultats, pas recalcul). - **Exclure** : connecteurs (aucune collecte dupliquée), médias (hotlink conservé avec crédit source, pas de copie), comptes/KA ID.