You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Epic : #5 Admin-Web › A-10 · business model du 2026-09-30
Décision : D-085 (cadrage du 2026-10-09)
Comportement attendu
UI : liste et fiche des partenaires (contact, statut, prix HT, parcours choisis dans l'ordre, source b2b-<slug>, lien de la page partenaire et QR codes, clics et installations depuis PostHog).
API : GET/POST/PATCH /admin/b2b-clients, PUT /admin/b2b-clients/:id/routes (3 à 10 parcours) ; tables b2b_clients, b2b_client_routes ; GET /public/partners/:slug pour le site.
Facturation hors admin au lancement.
Critères d'acceptation
Un partenaire actif avec 5 parcours a sa page sur le site et ses QR codes à sa source
🔨 Démarrage (CODE, 2026-10-20) — branche issue/346-b2b-partners, empilée sur #550 (elle-même sur la pile admin), niveau 2 annoncé (migration additive, nouveaux endpoints authentifiés qui écrivent, un endpoint public en lecture).
Plan, en commits autonomes :
shared : types et schémas des partenaires (statuts, types, champs, sélection de parcours, page publique).
api : tables b2b_clients et b2b_client_routes, migration additive.
api : GET/POST/PATCH /admin/b2b-clients (liste, fiche, création, modification, journal) ; PUT /admin/b2b-clients/:id/routes (3 à 10 parcours dans l'ordre).
api : GET /public/partners/:slug pour la page du site (Site web : page d'un partenaire B2B (/p/:slug) et ses QR codes #347) : nom, partenaire actif ou non, parcours publiés dans l'ordre ; jamais le contact, le prix ni les notes ; 404 pour un partenaire suspendu, résilié ou inconnu.
api-client puis admin : liste, fiche, formulaire, choix des parcours dans l'ordre, lien de la page (/p/<slug>) et QR codes (page, et /app?src=b2b-<slug>).
Ce que cette PR ne tient pas (décision de l'opérateur) : les clics et installations « depuis PostHog » de la fiche. Aucun événement avec la source b2b-<slug> n'est envoyé aujourd'hui (ni l'app ni le site), le wiki ne dit pas quels événements comptent comme un clic ou une installation, et la lecture demande une clé PostHog de lecture à poser côté API. La fiche affichera « pas encore branché ». La page publique du site elle-même est le ticket #347 : le critère « un partenaire actif avec 5 parcours a sa page sur le site » ne sera tenu que côté API et QR codes.
Précisions retenues (à corriger si elles ne vont pas) : la colonne « ville » de la liste n'a pas de champ dans le modèle de données ; elle montre la ou les villes des parcours choisis. L'adresse du site pour le lien et les QR codes vient d'une variable NEXT_PUBLIC_SITE_URL de l'admin.
PR ouverte : #551 (CODE, 2026-10-20), empilée sur #550, niveau 2 (label level:2).
Tables b2b_clients et b2b_client_routes, API admin (liste, fiche, création, modification, choix de 3 à 10 parcours publiés dans l'ordre), GET /v1/public/partners/:slug pour le site, écran A-10 avec formulaire, choix des parcours, lien de la page et QR codes. Les clics et installations PostHog ne sont pas tenus (aucun événement ne porte la source, définition à donner, clé de lecture à créer : Inbox du 2026-10-20), ni la page publique du site (#347).
Vérification humaine, consignée par l'agent : Marco a testé en local le 2026-10-20 (commit 74cd0e3, base locale, Firebase de staging) : la liste et la fiche ; l'ajout et les refus ; le choix des 3 parcours dans l'ordre ; les statuts prospect, actif et suspendu ; l'API publique (un partenaire actif donne son nom, isActive: true et 3 parcours ; un suspendu répond « introuvable »). Rien n'a été testé sur un environnement déployé, ni avec un compte éditeur.
📋 MANAGER, 2026-10-20 : les « clics et installations venus de cette source (PostHog) » de la fiche A-10, laissés de côté par #551 sur décision de l'opérateur (Inbox), sont suivis par #576 (needs-design : événements, émetteur, clé de lecture et projet PostHog à définir). Le critère de ce ticket ne les cite pas et reste inchangé.
Vérifié en local par Paul le 2026-10-22 (#621, compte rendu), sur main à 7efd9150, émulateur Firebase Auth demo-widoo, base locale seedée, compte fictif admin : A-10 (partenaire créé, fiche conforme ; lien et QR non vus faute de NEXT_PUBLIC_SITE_URL en local ; défaut de la fenêtre : #634). Parcours nominaux conformes ; Status passé à Terminés par MANAGER (l'admin n'est pas encore déployé en staging, #619).
Activity
Nascimento95 commentedon Oct 20, 2026
🔨 Démarrage (CODE, 2026-10-20) — branche
issue/346-b2b-partners, empilée sur #550 (elle-même sur la pile admin), niveau 2 annoncé (migration additive, nouveaux endpoints authentifiés qui écrivent, un endpoint public en lecture).Plan, en commits autonomes :
shared: types et schémas des partenaires (statuts, types, champs, sélection de parcours, page publique).api: tablesb2b_clientsetb2b_client_routes, migration additive.api:GET/POST/PATCH /admin/b2b-clients(liste, fiche, création, modification, journal) ;PUT /admin/b2b-clients/:id/routes(3 à 10 parcours dans l'ordre).api:GET /public/partners/:slugpour la page du site (Site web : page d'un partenaire B2B (/p/:slug) et ses QR codes #347) : nom, partenaire actif ou non, parcours publiés dans l'ordre ; jamais le contact, le prix ni les notes ; 404 pour un partenaire suspendu, résilié ou inconnu.api-clientpuisadmin: liste, fiche, formulaire, choix des parcours dans l'ordre, lien de la page (/p/<slug>) et QR codes (page, et/app?src=b2b-<slug>).Ce que cette PR ne tient pas (décision de l'opérateur) : les clics et installations « depuis PostHog » de la fiche. Aucun événement avec la source
b2b-<slug>n'est envoyé aujourd'hui (ni l'app ni le site), le wiki ne dit pas quels événements comptent comme un clic ou une installation, et la lecture demande une clé PostHog de lecture à poser côté API. La fiche affichera « pas encore branché ». La page publique du site elle-même est le ticket #347 : le critère « un partenaire actif avec 5 parcours a sa page sur le site » ne sera tenu que côté API et QR codes.Précisions retenues (à corriger si elles ne vont pas) : la colonne « ville » de la liste n'a pas de champ dans le modèle de données ; elle montre la ou les villes des parcours choisis. L'adresse du site pour le lien et les QR codes vient d'une variable
NEXT_PUBLIC_SITE_URLde l'admin.Nascimento95 commentedon Oct 20, 2026
PR ouverte : #551 (CODE, 2026-10-20), empilée sur #550, niveau 2 (label
level:2).Tables
b2b_clientsetb2b_client_routes, API admin (liste, fiche, création, modification, choix de 3 à 10 parcours publiés dans l'ordre),GET /v1/public/partners/:slugpour le site, écran A-10 avec formulaire, choix des parcours, lien de la page et QR codes. Les clics et installations PostHog ne sont pas tenus (aucun événement ne porte la source, définition à donner, clé de lecture à créer : Inbox du 2026-10-20), ni la page publique du site (#347).Vérification humaine, consignée par l'agent : Marco a testé en local le 2026-10-20 (commit
74cd0e3, base locale, Firebase de staging) : la liste et la fiche ; l'ajout et les refus ; le choix des 3 parcours dans l'ordre ; les statuts prospect, actif et suspendu ; l'API publique (un partenaire actif donne son nom,isActive: trueet 3 parcours ; un suspendu répond « introuvable »). Rien n'a été testé sur un environnement déployé, ni avec un compte éditeur.PaulThiberville commentedon Oct 20, 2026
📋 MANAGER, 2026-10-20 : les « clics et installations venus de cette source (PostHog) » de la fiche A-10, laissés de côté par #551 sur décision de l'opérateur (Inbox), sont suivis par #576 (
needs-design: événements, émetteur, clé de lecture et projet PostHog à définir). Le critère de ce ticket ne les cite pas et reste inchangé.PaulThiberville commentedon Oct 22, 2026
Vérifié en local par Paul le 2026-10-22 (#621, compte rendu), sur
mainà7efd9150, émulateur Firebase Authdemo-widoo, base locale seedée, compte fictif admin : A-10 (partenaire créé, fiche conforme ; lien et QR non vus faute de NEXT_PUBLIC_SITE_URL en local ; défaut de la fenêtre : #634). Parcours nominaux conformes ; Status passé à Terminés par MANAGER (l'admin n'est pas encore déployé en staging, #619).