SPB Git forge

spb/toveli

Public
14commits 1branches 0releases
1.1 MBsize
maindefault branch
2 h agolast push
TypeScript 50.6% JavaScript 46.1% SQL 2.1% Shell 0.6% CSS 0.5%
3.1 KB

# 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 = <source>:<external_id>, 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/<id>.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.