# NOTES DE SUIVI — WELCOM Gestion

> **À quoi sert ce fichier ?** Claude (Claude Code) ne garde **aucune mémoire**
> d'une session à l'autre : chaque session démarre dans un conteneur vierge, puis
> effacé. La **seule** mémoire persistante est ce qui est **commité dans le dépôt**.
> Ce fichier est donc le « support » de continuité : on y consigne les décisions,
> l'état d'avancement et les points en attente. **À lire en début de session.**

---

## État de la carte e-commerce (`public/carte/`)

- Source des données : `public/api/map.php` lit la table `organisations`
  (type `E-commerce`, `visible_carte = 1`, latitude/longitude non nuls).
- Les fiches arrivent en prod via les fichiers `data/seed_*.json` (versionnés)
  + auto-import `seed_autosync()` au chargement de la carte / au login.
- **Logos** : par défaut auto via **logo.dev** (par domaine). Un `logo_url`
  explicite (renseigné dans `seed_prospects.json` champ `logo`, ou dans la fiche)
  le remplace. Sentinelle `-` / `none` / `x` = masquer le logo (pastille emoji seule).
- **Tuile CA** : affiche le **CA médian estimé par entreprise** (pas le cumul).
- **Filtre B2B** : libellé « E-Commerce B2B ».

## Prospects e-commerce Loire/HL (« dossier JB »)

- 14 retenus → `data/seed_prospects.json` (champ `carte: true`, géocodés via BAN).
- Import : `seed_prospects_import()` dans `src/seed.php`. Verrou de version basé
  sur le md5 du fichier + suffixe code (`:g2`) → un changement du fichier OU du
  suffixe force un re-run sur prod.
- **Logos officiels posés (8/14)** : Jeans Industry, ACM France, Maison Koré,
  Mällou, Pihana, Quo Vaille, Comics Cards, Les Rêves de Louise.
- **Sans logo propre (6/14)** : Naisia Jewels, Les Délices d'Alice, Saumon Fumé
  Artisanal, Écrin Divin, Patrick Font, Les Minis Nous → gardent logo.dev.

## Web App Apps Script (IMPORTANT — déjà existant)

- JB a **déjà** un web app Apps Script déployé (container-bound à un Google Sheet)
  qui sert le **formulaire « Soumettre mon entreprise »** de la carte. NE PAS casser.
- Code source de référence (versionné) : `tools/appscript/Code.gs` — fichier UNIQUE,
  propre, qui regroupe : routeur `doGet`, formulaire carte (reCAPTCHA + email),
  actions Sheet, Agenda, Drive (docs + fichiers/photos), LinkedIn (publication auto).
- Token (constante `TOKEN`) : `xK9p2mQ7vL4nR8tH`. reCAPTCHA secret + FORM_ID dedans.
- Protocole : `GET .../exec?token=TOKEN&payload=<JSON>` ; réponses `{ok:..., ...}`.
- Actions Drive ajoutées pour l'outil : `drive_list_tree` (récursif, images +
  nom du sous-dossier), `drive_get_file` (base64), `drive_rename`, `drive_move`.
- ⚠️ Après toute modif du .gs : **Déployer → Gérer les déploiements → ✎ → Nouvelle
  version**, sinon l'URL /exec sert l'ancien code.

## Photos des RDV (Google Drive « Photo rdv ») — FAIT (36 photos)

- Le dossier Drive contient 141 photos À PLAT (pas de sous-dossiers). 133 en HEIC
  (iPhone), non affichables par les navigateurs. Seules ~36 sont nommées par
  entreprise (« SAM Outillage 01 - … »), les ~105 autres sont des `IMG_xxxx`
  sans nom → non rattachables.
- **Solution retenue (autonome, sans action serveur de JB)** : Claude a récupéré
  les 36 photos nommées via le web app, **converties HEIC→JPEG côté Claude**
  (pillow-heif), redimensionnées (max 1280px), et **embarquées dans le dépôt**
  sous `data/seed_photos/<slug>/*.jpg` + `manifest.json` (companies + légendes).
  C'est le même principe que `data/seed_documents/`.
- Import : `seed_photos_import()` (src/seed.php), branché dans `seed_autosync()`
  avec verrou `seedphotos:<md5 manifest>`. Crée la fiche a minima si absente
  (7 entreprises : SAM Outillage, Maison Bonnefoy, Heode, Secodir Deco,
  JSD Création, brin de cuivre, Shopix). Idempotent (dédoublonnage org+légende).
  → s'importe tout seul en prod au prochain chargement carte/login.
- **Voie alternative live** (si besoin futur) : `public/sync_photos.php` +
  bloc `drive` dans config.php (non posé en prod). Pas nécessaire ici.
- ⏳ Reste les ~105 `IMG_xxxx` sans nom : non importées (aucun moyen de savoir
  l'entreprise). À renommer côté Drive si JB veut les récupérer.

## Articles (posts LinkedIn par entreprise)

- Stockés dans la table `org_articles` (titre, url, corps), onglet **Articles**.
- **Bonne nouvelle** : les posts sont dans le Google Sheet, onglet
  **« Planning LinkedIn »** (colonnes : Date, Entreprise, Statut, Texte du post,
  Photos IDs Drive, Tags, URL). Lisibles via le web app (action `read`,
  `sheet:'Planning LinkedIn'`). → un `sync_articles.php` pourra les importer.
- ⏳ **À FAIRE** : une fois l'URL /exec connue, écrire l'import articles depuis
  cet onglet (rattachement par colonne « Entreprise »).

---

## Journal (le plus récent en haut)

### 2026-06-23 (suite)
- 14 prospects enrichis (plus de champs carte vides) : **taille** estimée via le
  GMV en ligne (XS<0,5M / S<2M / M≤10M / L≤50M / XL>50M), **univers_metier** mappé
  depuis le secteur, **activité** courte, descriptions déjà présentes. SIREN +
  effectif : remplis via `enrich_company()` (API recherche-entreprises) au run prod
  (API bloquée depuis le bac à sable Claude). Verrou prospects bumpé `:g4`.
  CA médian carte inchangé (5 M€) mais sans les 14 zéros artificiels.
- Photos RDV : 36 photos converties HEIC→JPEG et importées (7 fiches créées).


### 2026-06-23
- Tuile CA carte → médiane ; filtre « E-Commerce B2B ».
- **Fix** : les 14 prospects étaient invisibles (géocodage non déclenché quand
  `seed_autosync` partait du back-office, `geocode()` non chargé). `seed.php`
  charge désormais `enrichment.php` ; verrou `:g2` force le re-géocodage.
- Logos officiels posés pour 8 des 14 prospects.
- Création de ce fichier de suivi.
- Mise en place de l'ossature import Drive photos (Apps Script + `sync_photos.php`).
