#!/usr/bin/env python3 """Génère la section §6 (statistiques finales) de research_report.md.""" import json import sqlite3 import os from collections import Counter ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) reg = json.load(open(os.path.join(ROOT, "data", "stores.json")))["stores"] con = sqlite3.connect(os.path.join(ROOT, "data", "fabrika.db")) lines = [] n = len(reg) ecom = sum(1 for s in reg if s["ecommerce"]) connectable = sum(1 for s in reg if s["catalog_endpoint"]) by_class = Counter(s["origin_class"] for s in reg) by_status = Counter(s["status"] for s in reg) by_region = Counter(s["region"] or "(inconnue)" for s in reg) by_platform = Counter(s["platform"] or "custom/inconnu" for s in reg if s["ecommerce"]) multi_src = sum(1 for s in reg if len(s.get("discovery_sources", [])) >= 2) nprod = con.execute("SELECT COUNT(*) FROM products WHERE active=1").fetchone()[0] nstores_live = con.execute("SELECT COUNT(DISTINCT store_id) FROM products WHERE active=1").fetchone()[0] # candidats bruts cand = sum(1 for _ in open(os.path.join(ROOT, "data", "enriched", "candidates.jsonl"))) lines.append(f"""### Totaux | Mesure | Valeur | |---|---| | Domaines candidats découverts (bruts, dédupliqués) | {cand} | | Boutiques québécoises actives vérifiées (dataset final) | **{n}** | | — avec fonctionnalité ecommerce détectée | {ecom} | | — avec catalogue public connectable (Shopify/Woo/Squarespace) | {connectable} | | — corroborées par ≥ 2 sources indépendantes | {multi_src} | | Produits agrégés dans Fabri-Ka (catalogues complets) | **{nprod}** | | Boutiques avec produits en ligne dans Fabri-Ka | {nstores_live} | ### Classification d'origine | Classe | Définition | Boutiques | |---|---|---|""") defs = {"A": "Fabriqué/cultivé/transformé au Québec", "B": "Conçu au Québec", "C": "Détaillant québécois", "D": "Mixte", "E": "Incertain"} for c in "ABCDE": lines.append(f"| {c} | {defs[c]} | {by_class.get(c, 0)} |") lines.append(f""" Statuts : {dict(by_status)} ### Par région administrative | Région | Boutiques | |---|---|""") for r, v in by_region.most_common(): lines.append(f"| {r} | {v} |") lines.append(""" ### Plateformes ecommerce (boutiques avec ecommerce) | Plateforme | Boutiques | |---|---|""") for p, v in by_platform.most_common(): lines.append(f"| {p} | {v} |") out = "\n".join(lines) + "\n" rp = os.path.join(ROOT, "deliverables", "research_report.md") txt = open(rp).read() marker = "*(section générée automatiquement — voir ci-dessous)*" txt = txt.split(marker)[0] + marker + "\n\n" + out open(rp, "w").write(txt) print(out[:800])