Piano Panier

ALGORIGRAMME v175
Vue d'ensemble des 19 flux du site — 19/03/2026
Action
Page
Décision
API / IA
Email
Succès
Railway/DB
1 Estimation IA
accueil.html
Marque, Modèle, Année, État
Cache 1h ?
Serper + Claude API
Résultat ?
OK →
Fourchette + Analyse
Historique IA
✗ →
Impossible
2 Inscription / Connexion
connexion.html
Type ?
Partic. →
Prénom, Nom, Email, MDP, Tel, Adresse
Actif
Pro →
+ SIRET, Rayon, Rôle
Validation admin
3 Dépôt d'annonce (N° AN+DDMMYY+XXXX)
deposer-annonce.html
⊕ Piano → ⊕ Photos → ⊕ Prix → ⊕ Logistique → ⊕ Récap
Annonces + Piano auto
Code
Crée un piano (source: depot_annonce). Si ?piano=ID → pré-remplit depuis Mes Pianos (sauf dernier accord/historique technique).
4 Achat par négociation
annonce.html
Proposer un prix
Réponse ?
Accept →
achat.html → Flux 6
Refus →
Contre →
5 Achat direct
annonce.html
Acheter au prix affiché
achat-direct.html
→ Flux 6
6 Post-achat (commun 4 & 5)
Formulaire livraison
Adresse + Étage* + Asc.* + Accès
Contact + Tél + Commentaire
Pack ?
Essentiel (Transport) / Confort (+Accord) / Sérénité (+Tech)
Transaction + Piano transféré
Photos + Docs + Date ajout MAJ
Enrichit profil utilisateur
étage, ascenseur, accès
createMissions → Flux 7
Étage et ascenseur obligatoires si pack choisi. Missions accord/technique enrichies : infos piano, dernier accord, historique technique, logistique. Si packOffert vendeur : transport = 0€ pour le client, packs inférieurs grisés, packs supérieurs = supplément seul. Voir Flux 20.
7 Missions & Assignation (achat ET solo)
findBestPro
GPS/base × dispo × fiab
Génère fiche PDF
Transport / Accord / Tech
proposée
Accept →
Acceptée
Conversation auto
Refus →
Réassignation
Démarrer
Terminer + CR
Validation ?
✓ →
Validée + Note
✗ →
Contestée → Flux 17
8 Espace Pro
espace-pro.html
Qui ?
Visiteur →
Page découverte + CTA
Partic. →
Page vendeuse + upgrade
Pro →
Dashboard + Missions + CR + GPS
9 Cycle de vie annonces
Statut ?
publiée →
Visible marketplace
vendue →
VENDU + noindex
bloquée →
Admin only
10 Rôles & Validation
Partic. →
rôle = particulier
Pro →
en_attente → vérif → Admin valide/refuse
11 Mes Pianos (PP000000001-999999999)
mon-compte.html #pianos
Source ?
Manuel →
?mode=piano
Piano (ajout_manuel)
Dépôt →
Flux 3
Piano (depot_annonce)
Achat →
Flux 6
Piano (achat_plateforme)
Fiche : specs, docs, historique interventions (par PP ID / Annonce ID / titre). Boutons : Vendre, Accord, Transport, Révision, Supprimer, Contact pro.
12 Missions solo (depuis Mes Pianos)
Accord / Transport / Révision
Type ?
Transport →
Départ complet
Étage* Asc.* Accès Contact
Arrivée complet
Étage* Asc.* Accès Contact
Acc/Tech →
Adresse + Commentaire
+ Dernier accord + Historique
depuis fiche piano
Géocode + Distance
Mission (Mode: solo, Piano ID)
Infos piano + logistique + CP
→ Flux 7
Pré-rempli depuis profil (logistique). * = obligatoire pour transport. Fiche PDF générée pour les 3 types.
13 Rapports d'intervention (CR)
espace-pro.html
CR structuré (Accord/Tech/Transport)
Générer HTML
Upload KV + PATCH
Infos piano + N° piano + N° annonce + Lieu d'intervention + CP. Depuis Annonces OU table Pianos (solo).
14 Fiches PDF (3 types)
assignMission()
Type ?
TRAN →
Piano + Départ (logistique+CP) + Arrivée (logistique+CP) + Expéditeur (Nom,Email,Tél) + Receveur (Nom,Email,Tél) + Distances + Commentaires
ACCO →
Piano + Dernier accord + Historique tech + Lieu (adresse+CP+logistique) + Client (Nom,Email,Tél)
TECH →
Piano + Historique tech + Dernier accord + Lieu (adresse+CP+logistique) + Client (Nom,Email,Tél)
Upload HTML → KV
Champ 'Fiche transport PDF'
Lien dans email + espace pro + back-office
Toutes les fiches : N° piano, N° annonce, N° transaction, CP partout. Générées achat ET solo.
15 Mailing (44 templates)
sendPianoEmail()
Templates custom
Worker Cloudflare
Resend API
Email
44 templates. 7 groupes : Auth(4), Annonces(2), Achat(2), Missions(8), Litiges(12), Pro(4), Messagerie(2), Pianos(4), Offres(5), Estimation(2). Rate limit : 600ms entre chaque envoi.
16 Back-office (15 sections)
admin.html
Section ?
Missions →
2 tableaux : Achat + Solo
Litiges : badges TK + catégorie + preuves
Boutons : Valider / Annuler / ⚡ Médiation
Pianos →
Stats, tableau, transfert, export CSV
Historique & Restauration
Timeline : proprio, annonce, TX, missions
Users →
Vue 360° utilisateur
Annonces + Pianos + TX + Missions + Conv
Mailing →
44 templates on/off + variables
Params →
Tarifs, rayons, algo, packs/type
Toutes les sections interconnectées. Stack : Railway / PostgreSQL / Prisma v5 / Fastify.
17 Contestation client (Litige)
mon-compte.html #achats
Mission livrée → Signaler
Overlay formulaire
Catégorie (6 choix)
non_realisé, mal_realisé,
dommage, retard, non_conforme, autre
Description + Pièces jointes
Upload photos/docs (max 5)
Mission → contestée
Ticket TK + catégorie + preuvesUrls
Conversation TICKET
typeConv: ticket
1 par mission (pas de réutilisation)
Message initial posté
via sendMessage()
Badges : LITIGE (rouge) dans la liste conversations. Bouton Contact pro rouge. Deep link email → #messages&ticket=TK...
18 Escalade & Médiation (Litige)
Cron check-litiges
Toutes les heures
Délais ?
> 72h →
> 7j →
en_médiation
En médiation
Qui ?
Client →
Bandeau orange
Pas de bouton Clore
Pro →
Bandeau orange
Conv litige accessible
Admin →
Boutons Valider / Annuler
+ ⚡ Médiation (test)
Admin peut forcer l'escalade via bouton ⚡ (JWT admin, pas de secret exposé). Conversations ticket ouvertes pendant médiation.
19 Résolution litige
Résolution ?
Client →
Clore le ticket
Bandeau doré + bouton vert
Mission → validée
Admin ✓ →
Valider (pro payé)
Prompt motif min 5 car
Mission → validée
Admin × →
Annuler (client remboursé)
Prompt motif min 5 car
Mission → annulée
Décision tracée
Message dans conv ticket
Badge → CLOS (vert)
Zone de saisie grisée
Conversation fermée
12 statuts mission au total. Soft delete conversation autorisé uniquement après résolution (validee, terminee, archivee, annulee).
20 Pack offert par le vendeur
deposer-annonce.html
Boostez votre annonce
Aucun / Transport / Confort / Sérénité
Type piano ?
Autorisé →
Options actives
Paramétré dans admin
pack_offert_*_types
Non autorisé →
Options grisées
pointer-events:none
packOffert stocké
Annonce (DB)
accueil.html
Badge vert sur carousel
MutationObserver
TRANSPORT OFFERT
PACK CONFORT OFFERT
PACK SÉRÉNITÉ OFFERT
annonce.html
Badge premium vert
Gradient + icône SVG
achat-direct / achat
Quel pack ?
Couvert →
Prix = 0 € (Offert)
Supérieur →
Supplément seul
packPrix - prixPackOffert
Inférieur →
Grisé
Inclus dans le pack offert
Transaction
packOffert + transportPrix
+ packPrix (client) + total
Versement vendeur
(Stripe Phase 2.5)
Déduction vendeur
transportPrix + prixDuPackOffert
{tp:0, confort:149, sérénité:349}
Transport = 0€ pour le client dès qu'un packOffert existe, quel que soit le pack choisi. La déduction vendeur est TOUJOURS transportPrix + prix fixe du pack offert (pas packPrix client). Admin : KPI Packs offerts + filtre + grilles paramétrables.
Piano Panier — Algorigramme v176 — 21/03/2026