Vérification de l'accès…

Aide — Workflow commercial

🏠 Tableau de bord (page d'accueil)

À la connexion, un overlay plein-écran s'ouvre automatiquement pour les rôles administratifs (admin, DT, responsable). Bouton 🏠 Accueil dans le header pour le rouvrir à tout moment.

Sections du tableau de bord

  • 📊 Indicateurs du pipeline — le pipeline actif et son montant, les acceptés et les refusés du mois avec le montant perdu, et le taux de réussite calculé sur les seuls dossiers tranchés. ⚠ Les dossiers abandonnés en sont exclus : un no-go interne ou une consultation sans suite n'est pas une perte face à un concurrent, et les compter tirerait le taux vers le bas sans raison.
  • 🚀 Créer — entrées vers les modules. Aujourd'hui : Chiffrage ISO actif. Évolutions futures grisées (formation, évaluation).
  • ⚡ À traiter maintenant — alertes prioritaires : offres acceptées non encore transférées, actions CRM en retard, dossiers inactifs depuis ≥ 21 jours. Cliquer sur une alerte ouvre directement la fiche pipeline correspondante.
  • 📊 Pipeline résumé — chips par statut avec compteurs + montants cumulés (actifs vs gagnés du mois).
  • 👥 Base client — KPIs (nb organismes, prospects, clients actifs) + recherche rapide + top tags.
  • 📅 Prochaines actions — relances et actions dues sur les 7 prochains jours.
  • 🕐 Activité récente — dernières actions CRM (dossiers ouverts, envois, transferts).

Raccourcis du header de la home

En haut à droite : 📊 Ouvrir la pipeline, 📁 Dossiers (liste plate de tous les dossiers), 👥 Base clients, ? Aide.

🔑 Connexion (email ou Microsoft)

Deux méthodes de connexion sur /login.html :

Email + mot de passe

Méthode classique pour les comptes provisionnés avec un mot de passe Supabase. Champ « Mot de passe oublié » disponible (lien magique envoyé par Resend).

Connexion Microsoft (OAuth)

Bouton Connexion Microsoft : ouvre le consentement Azure AD du tenant M365 AES Certification. Si le compte est déjà provisionné dans la base AES (via Admin > Utilisateurs), la session démarre directement. Sinon, message clair « Compte non provisionné — contactez un administrateur » + bouton de déconnexion.

Auto-link OAuth : si un utilisateur a été provisionné avec un email AES et se connecte pour la première fois via Microsoft, le lien supabase_auth_id ↔ email AES est créé automatiquement. Aucune action admin requise après le premier login OAuth réussi.

Accès selon le rôle

  • admin / super_admin / dt / responsable : accès complet (chiffrage + pipeline + clients + administration)
  • ra / auditeur : lecture seule sur les dossiers et clients (pas de modification, pas de pipeline)
  • Sans compte provisionné : pas d'accès. Un prospect utilise /nouveau (token public, pas de login).

🤖 Assistant IA — pré-remplissage du formulaire

L'assistant Claude lit les documents fournis (PDF, Word, Excel, ODT, images, RC, CCTP, CCAP, AE…) puis pose les questions complémentaires nécessaires en langage naturel pour pré-remplir l'identification, la configuration multisite, les sites et les processus (steps 1 à 4).

Activation et formats

Au step 1, un bandeau 🤖 Assistant IA propose de déposer les documents. Glisser-déposer ou cliquer sur Importer mes documents. Limite d'environ 3,3 Mo par envoi. Formats supportés : PDF, DOCX, ODT, XLSX/XLS/XLSM/XLSB, CSV/TSV, ODS, TXT, images PNG/JPG/JPEG/GIF/WEBP.

Multi-upload et ajout en cours de chat

Plusieurs fichiers déposables en une fois. Pour ajouter des documents en cours de conversation, utiliser le bouton 📎 dans la barre du chat — l'IA intègre les nouveaux documents à son analyse.

Streaming et thinking

Les réponses s'affichent en temps réel pendant la génération (streaming SSE). Le moteur utilise Claude Opus 4.7 avec adaptive thinking pour mieux raisonner sur les documents ambigus.

Validation avant intégration au formulaire

L'IA demande une confirmation explicite avant de pousser les données. Bouton Confirmer et importer pour valider le pré-remplissage des steps 1-4.

Garde-fou : si des sites manuels existent déjà au step 4, une confirmation supplémentaire est demandée pour éviter d'écraser le travail en cours.

Persistance de la conversation

Le transcript du chat (texte uniquement, sans les binaires trop lourds) est sauvegardé dans la proposition. À la réouverture du dossier, les bulles d'échange réapparaissent. Pour relancer l'analyse documentaire, re-uploader les originaux via 📎.

Mode prospect vs mode CA

L'assistant adapte son langage selon l'utilisateur :

  • Mode CA (commercial connecté) : jargon métier visible (NRE, MD5, échantillonnage, complexity high/med/low), recommandations CA et explication des choix.
  • Mode prospect (formulaire public) : aucun jargon. Questions uniquement sur la réalité de l'organisation (sites, effectifs, services). La complexité et le mode d'échantillonnage sont calculés en interne mais invisibles au prospect — seul le CA les voit à la réouverture.
La limite de taille n'est pas la nôtre : c'est la plateforme d'hébergement qui plafonne le corps d'une requête à 4,5 Mo, et le fichier voyage encodé — ce qui coûte 33 % de plus. Un PDF de 3,3 Mo atteint donc déjà le plafond. Au-delà, l'envoi échoue avant d'arriver à l'application, sans message utile : réexporter le PDF en qualité réduite, ou l'envoyer en deux fois avec le bouton 📎.

La recherche en ligne — surtout pour les codes NAF

L'assistant dispose des outils web natifs (recherche et consultation de pages), avec citations automatiques dans le chat. Son usage principal : trouver les codes NAF, que les documents clients ne portent presque jamais — et jamais pour les établissements secondaires.

  • avec le SIREN, il lit le code exact sur les données publiques INSEE ;
  • la fiche de l'entreprise liste tous les établissements avec leur commune et leur code : il les rapproche des sites du dossier par la commune ;
  • à défaut : le site web du client, les documents relus pour ça, puis une déduction depuis l'activité décrite — annoncée comme telle.
Le code de l'INSEE est déclaratif. Il dit ce que l'entreprise a déclaré à sa création, pas toujours ce qu'elle fait aujourd'hui. Or il commande le niveau de complexité, donc les jours. Chaque code arrive avec sa provenance — document, annuaire, ou déduction — et un code trouvé en ligne est à confirmer avec le client.

Les facteurs d'ajustement, et ce qu'il ne fait plus

Depuis septembre 2026, l'assistant propose les facteurs de réduction et d'augmentation de l'étape 5, chacun avec sa preuve citée — un manuel qualité qui dit « certifié ISO 9001 depuis 2014 », « la conception est assurée par la maison mère », « la maintenance est externalisée ». Ils figurent dans sa synthèse avant l'injection : ils changent le prix, ils ne doivent pas passer sans avoir été lus. Vous cochez ou décochez ensuite à l'étape 5.

En revanche il ne cote plus la complexité : le client déclare des faits, l'outil cote. Il fournit le code NAF et les particularités du site — régime ICPE, zone protégée, accidentologie — que le tableau ne peut pas connaître. Et il ne pré-coche aucune déclaration du client : la question d'intégration et sa grille restent à remplir par celui qui les déclare.

Ce qu'il n'a pas trouvé est dit. Sa synthèse comporte une section obligatoire « ce que les documents n'ont pas donné », et l'écran des sites affiche le même relevé après l'import : quel champ manque, et sur quels sites. Vous savez donc avant de valider ce qu'il restera à saisir, au lieu de le découvrir au blocage de la proposition.

Le détail métier de ce que l'assistant remplit — champ par champ, étape par étape — vit dans l'aide du chiffrage, section « L'assistant IA ».

Le system prompt utilise du prompt caching côté Anthropic pour réduire le coût des tours suivants.

Flux complet d'une opportunité

De la création d'un prospect à la création du contrat dans la plateforme audit, voici le cheminement standard :

  1. Création — prospect via formulaire public /nouveau OU CA via bouton + Nouvelle opportunité dans le header de la pipeline.
  2. Chiffrage — le CA complète les steps 1 à 10, le moteur IAF calcule les durées. À la génération, un Word, un PDF commercial et un PDF de rapport sont déposés dans SharePoint (cf. SharePoint et téléchargements).
  3. Envoi de l'offre — le CA clique 📤 Envoyer l'offre au client. L'email contient le PDF en pièce jointe et un bouton ✅ Accepter l'offre en ligne.
  4. Acceptation — soit le CA glisse la carte sur Accepté (validation manuelle), soit le client clique le bouton d'acceptation en ligne.
  5. Transfert — le CA clique 🚀 Transférer vers audit, choisit le workflow cible et la date de signature, et la direction audit valide côté audit-platform.
Chaque génération de proposition crée une nouvelle ligne numérotée (propal-001, propal-002, …) dans l'onglet Propositions. Les events envoyée, acceptée, refusée sont rattachés à la proposition concernée sous forme de badges — cf. Propositions numérotées.

Statuts d'opportunité

La pipeline CRM affiche les opportunités en colonnes selon leur statut :

StatutQuand ?Badge
Nouveau (brouillon)Dossier créé mais vide ou à peine entamé.brouillon
Formulaire reçu (formulaire_recu)Le prospect a soumis son formulaire via /nouveau.formulaire_recu
Chiffrage en cours (en_cours)Le CA est en train de compléter le chiffrage.en_cours
Proposition envoyée (envoye)L'offre Word a été envoyée au client.envoye
En négociation (en_negociation)Échanges en cours pour ajustements.en_negociation
Accepté (accepte)Offre validée (par le CA ou par le client en ligne).accepte
Transféré (transfere)Contrat créé dans audit-platform.transfere
Refusé (refuse)Perdu — motif obligatoire au drop.refuse
Abandonné (abandonne)Décision interne de ne pas poursuivre : no-go sur un marché public, prospect qui se désiste avant toute offre. Motif optionnel.abandonne

Les cartes se déplacent par drag & drop. Le passage sur Accepté ouvre automatiquement le modal de validation, celui sur Refusé demande un motif.

Refusé, abandonné, expiré — trois choses différentes. Refusé : le client a dit non, et le motif de perte est obligatoire — c'est lui qui alimente l'analyse commerciale. Abandonné : AES décide de ne pas poursuivre — no-go sur un marché public, prospect qui se désiste. Ce n'est pas une perte face à un concurrent, et la compter comme telle fausserait le taux de réussite. Expiré : trente jours sans activité, posé automatiquement. Un dossier abandonné devient inactif et archivé, mais reste restaurable.

Prospect self-service

Un prospect arrive sur /nouveau (ou reçoit un lien d'un CA). La page présente d'abord la démarche et un bouton « Renseigner la demande de devis » : le dossier n'est créé qu'au clic. Il peut ensuite compléter les steps 1 à 4. À la soumission :

Pourquoi un bouton, et pourquoi c'est important pour vous. Jusqu'au 17 septembre 2026, le dossier était créé au chargement de la page. Ouvrir le lien pour vérifier qu'il fonctionne suffisait donc à créer un dossier vide dans la pipeline — et un simple F5 en créait un second.
Le plus gênant n'était pas là : les scanners de liens (Outlook, Defender, un antivirus, l'aperçu d'un lien dans Teams) ouvrent les URL contenues dans un e-mail, côté serveur, pour vérifier qu'elles sont sûres. Ils créaient donc des dossiers sans qu'aucun humain n'ait rien fait — cinq dans la même minute le 16 septembre, soit exactement le plafond de l'anti-abus. Trente dossiers vides ont dû être triés à la main.
Un scanner ne clique pas. Vous pouvez donc désormais coller ce lien dans un e-mail sans crainte, et l'ouvrir vous-même pour vérifier qu'il fonctionne.
  • Un dossier est créé automatiquement avec un numéro unique (format AES-2026-0042)
  • Un token signé permet au prospect de reprendre sa saisie via email (/reprendre)
  • Les commerciaux sont notifiés par email (contact@aes-certification.fr)
  • La carte apparaît dans la colonne Formulaire reçu

Limites anti-spam : 5 créations par IP/heure, 2 par email/24h.

✍️ Quand le client commence sa saisie et ne la termine pas

C'est le cas le plus fréquent, et il était jusqu'ici invisible. Tant que le prospect n'a pas cliqué sur « Soumettre », son dossier reste en brouillon, dans la colonne Nouveau — au milieu des brouillons ouverts par les chargés d'affaires, et impossible à distinguer d'eux.

Le cas qui a déclenché le correctif. Le 17 septembre 2026, AES-2026-0198 : quarante-cinq minutes de saisie, 77 champs renseignés, un nom, un téléphone direct, deux sites déclarés dont un seul rempli. Personne chez AES ne l'a su. Le dossier a été trouvé par une requête en base, à la main.

Trois choses se déclenchent désormais toutes seules :

  • Une étiquette — « Saisie par le prospect/client en cours — non finalisé » — sur la carte du pipeline et dans la liste des dossiers.
  • Un bloc sur le tableau de bord, avec le nom, l'adresse e-mail, et depuis combien de temps la saisie est à l'arrêt. Rouge au-delà de deux semaines.
  • Un e-mail à AES (contact@aes-certification.fr) le lendemain, avec le contact, le téléphone et l'avancement de chaque dossier concerné.

Le prospect, lui, reçoit une relance avec un lien qui rouvre son dossier là où il l'a laissé.

Elle ne part qu'une seule fois. Passé cette relance, plus rien n'est envoyé automatiquement : le dossier reste en brouillon jusqu'à l'expiration du lien, 30 jours après sa création, où il bascule en Expiré. C'est donc à vous de reprendre la main — et avec un numéro de téléphone dans le dossier, un appel vaut mieux qu'un e-mail.

Si vous ouvrez un de ces dossiers

Un avertissement s'affiche avant l'ouverture du formulaire. Il ne dit pas que le dossier change de nature — il ne change pas : le statut reste le même et le client garde son lien. Il vous prévient de la seule chose qui compte vraiment : rien n'empêche deux personnes d'écrire en même temps. Votre formulaire s'enregistre tout seul après chaque changement d'étape, le sien toutes les trente secondes — le dernier enregistrement l'emporte, sans message.

Le risque est réel le lendemain d'une relance, puisqu'on vient justement d'inviter le client à revenir.

Pour seulement regarder, n'ouvrez pas le formulaire. Cliquez sur la carte dans le pipeline : la fiche affiche l'identité, les référentiels, l'historique et les pièces, et elle n'écrit jamais rien. Seul le bouton « 📂 Ouvrir » charge le formulaire et arme l'enregistrement automatique.
Un lien ouvert mais jamais rempli n'est pas signalé. C'est délibéré : sur quinze dossiers de ce type recensés en septembre, treize étaient des liens jamais utilisés. Les signaler tous aurait noyé les vrais. L'étiquette n'apparaît que si quelque chose a réellement été saisi.

Création manuelle par le CA

Depuis le header de la pipeline, bouton + Nouvelle opportunité. Modal à 2 onglets :

👥 Client existant

  • Recherche par raison sociale ou SIRET (min. 2 caractères)
  • Sélection d'un organisme déjà en base → la nouvelle opportunité est rattachée automatiquement
  • Évite les doublons côté base client

✨ Nouveau prospect

  • Raison sociale (obligatoire), SIRET, contact (nom + email)
  • Dédup automatique par SIRET : si un organisme existe déjà avec ce SIRET, une alerte propose de basculer sur Client existant
  • Colonne de départ configurable : Nouveau, Chiffrage en cours (défaut) ou En négociation
À la création, le dossier est automatiquement assigné au CA connecté. Le lien de reprise prospect est disponible dans la fiche (bouton 📧 Lien prospect) si besoin de faire compléter le prospect.
Le bouton 📁 Nouveau dossier du header (et du tableau de bord) crée également un dossier sans passer par le modal — utile pour démarrer un chiffrage rapidement. Aucun dossier n'est enregistré en base tant que la raison sociale n'est pas saisie (≥ 3 caractères) — fini les dossiers "Nouveau" parasites dans la pipeline. Dès que la raison sociale est posée, l'organisme est automatiquement créé dans la base Clients (plus besoin de passer par le modal pour qu'il apparaisse dans la page 👥 Clients).

Rattacher à un client existant (nouveau dossier depuis la fiche client)

Depuis la page 👥 Clients, ouvrir la fiche d'un organisme et cliquer sur Nouveau dossier. Les informations d'identification (raison sociale, SIRET, NAF, adresse), les sites et le contact principal sont pré-remplis à partir de la fiche.

⏰ Échéance de remise

La date — et l'heure — à laquelle l'offre doit être remise. Indispensable sur un marché public, où une minute de retard rend l'offre irrecevable, mais utile sur n'importe quel dossier pressé.

Où ça se saisit

  • Étape 1 du chiffrage — un champ date + heure, visible du chargé d'affaires uniquement : le prospect ne le voit pas.
  • Fiche de l'opportunité — modifiable à tout moment ; les deux restent synchronisés.
  • L'assistant IA la remplit quand il détecte une consultation publique : il lit la date limite dans le règlement et la pose sans qu'on la ressaisisse.

Un champ « Demandes particulières » l'accompagne — celui-là est visible du prospect, qui peut y décrire une contrainte de calendrier ou une attente spécifique.

Où ça se voit

Quoi
Carte de la pipelineUn badge ⏰ quand l'échéance approche, 💀 quand elle est dépassée
Tableau de bordUn bloc 📅 Échéances de remise, trié par urgence et coloré en conséquence
L'échéance disparaît une fois l'offre envoyée. Elle ne concerne que les dossiers qui n'ont pas encore été remis : la garder affichée après coup encombrerait la pipeline d'alertes sans objet.

📑 Propositions numérotées (refonte 2026-05-06)

Un dossier de chiffrage peut donner lieu à plusieurs propositions successives (négociations, ajustements). La fiche pipeline les liste sous l'onglet Propositions avec une seule ligne par proposition, numérotée propal-001, propal-002, … — alignée avec le naming SharePoint.

Génération d'une proposition

Chaque clic sur Générer la proposition (modal de génération au step 10) :

  • Incrémente le compteur propal_num du dossier (001 → 002 → 003…)
  • Crée un snapshot figé (immuable) des données de chiffrage à ce moment précis
  • Génère le Word et le PDF correspondants, déposés dans SharePoint avec le nom {dossier_number}-{propal_num}.docx/pdf
  • Dépose également un PDF du rapport de chiffrage avec le suffixe -rapport.pdf dans le même dossier SharePoint
  • Ajoute une nouvelle ligne dans l'onglet Propositions de la fiche pipeline

Un bandeau bleu dans le modal de génération annonce le numéro de propal qui va être créé (ex. « Cette génération produira propal-002 »).

Events métier rattachés à la proposition

Les events envoi au client, acceptation et refus sont rattachés à la ligne de la proposition concernée (UPDATE de la ligne generation) — pas de doublon de ligne. Chaque ligne porte les badges des events qui se sont produits :

BadgeEventMétadonnées capturées
🟢 EnvoyéeEmail send-offer envoyé au clientsent_at, email destinataire
🟣 AcceptéeAcceptation manuelle CA ou en ligne par le clientaccepted_at, signatory_name, qualité, canal
🔴 RefuséeDrop sur colonne Refusé (motif obligatoire)refused_at, refused_reason
Avant la refonte, chaque event créait une nouvelle ligne version figée. Désormais, les 3 events sont des UPDATE de la ligne generation de la proposition active — l'historique reste lisible (1 ligne = 1 proposition + ses badges).

Repartir d'une proposition antérieure

Bouton Repartir de cette version sur chaque ligne de l'historique. Au clic, un modal de confirmation rouge affiche l'avertissement « Les saisies actuelles seront remplacées par celles de la version ». Utile pour revenir en arrière après une négociation infructueuse.

L'action remplace les inputs actuels du formulaire par le snapshot. Le snapshot historique reste figé (non modifié). Pas de bouton « Figer une version » manuel : chaque génération crée déjà sa propre ligne.

Bandeau dépliant si historique long

Si plus de 3 propositions ont été générées, la fiche n'affiche que les 3 plus récentes par défaut. Bouton « Afficher les N précédentes » pour déplier l'historique complet.

📂 SharePoint et téléchargements (Phase 2)

Depuis la Phase 2 (mai 2026), les Word et PDF de chaque proposition sont déposés nativement dans SharePoint AES (tenant M365), plus seulement dans Supabase Storage.

Structure des dossiers SharePoint

Chaque proposition générée crée trois fichiers dans le dossier SharePoint du dossier :

FichierContenuAudience
{dossier_number}-{propal_num}.docxProposition commerciale WordInterne CA (édition)
{dossier_number}-{propal_num}.pdfProposition commerciale PDF (conversion MS Graph)Envoyée au client
{dossier_number}-{propal_num}-rapport.pdfRapport de chiffrage détaillé (PDF généré côté navigateur)Interne CA (audit interne, négociation)

Boutons de téléchargement dans la fiche pipeline

Sur chaque ligne de l'onglet Propositions :

  • Word (bouton bleu) — téléchargement du .docx directement depuis SharePoint via lien signé
  • PDF (bouton bleu) — téléchargement du .pdf commercial (conversion MS Graph)
  • 🔵 Rapport (bouton vert) — téléchargement du PDF du rapport de chiffrage interne
La conversion Word → PDF est faite par Microsoft Graph nativement (plus de dépendance ConvertAPI). Imperfection acceptée : la page sommaire du PDF est blanche (le TOC Word n'est rafraîchi qu'à l'ouverture/impression). Workaround : ouvrir le Word, F9 pour mettre à jour les champs, ré-exporter manuellement.

📤 Envoi de l'offre au client

Quand une proposition a été générée (step 10), un bouton 📤 Envoyer l'offre au client apparaît dans la fiche. Il ouvre un modal :

  • Email destinataire (obligatoire) + nom
  • Message libre ajouté au corps du mail
  • À l'envoi : email envoyé via Resend avec le PDF de la proposition en pièce jointe. Le Word reste interne au CA — pas de lien anonyme transitant en clair (choix Option 2, mai 2026).
  • Un bouton ✅ Accepter l'offre en ligne est automatiquement ajouté à l'email
  • Le CA reçoit une copie de l'email
  • L'event envoyée est rattaché à la ligne de la proposition active dans l'onglet Propositions (badge 🟢 Envoyée ajouté à la ligne — voir Propositions numérotées)
  • Le statut bascule en Proposition envoyée si on partait de brouillon/en_cours

Validation manuelle par le CA

Deux entrées possibles :

  • Drop sur la colonne Accepté depuis Chiffrage en cours, Proposition envoyée ou En négociation
  • Bouton ✅ Valider l'acceptation dans la fiche pipeline

Le modal demande :

  • Canal d'acceptation (manuelle CA ou confirmation email client)
  • Date d'acceptation (défaut : aujourd'hui)
  • Nom du signataire et sa qualité
  • Workflow audit-platform cible (chargé depuis workflow_schemas partagé avec audit-platform)
  • Note (contexte, conditions particulières…)

À la validation :

  • Statut bascule en Accepté, les colonnes accepted_at, accepted_by, acceptance_channel, etc. sont remplies
  • L'event acceptée est rattaché à la ligne de la proposition active dans l'onglet Propositions (badge 🟣 Acceptée ajouté — voir Propositions numérotées)
  • Une action CRM est ajoutée à la timeline de l'opportunité
  • Un bloc vert ✅ Offre acceptée le … s'affiche dans la fiche
Si l'offre a déjà été acceptée et que tu veux corriger les infos (ex. changer le workflow cible), le bouton passe à ✏️ Modifier l'acceptation. Le modal est pré-rempli avec les valeurs actuelles.

Acceptation en ligne par le client

Depuis l'email de proposition commerciale (qui contient le PDF en pièce jointe), le client peut cliquer ✅ Accepter l'offre en ligne. Il arrive sur la page publique /accepter-offre?token=… :

  • Récapitulatif de la proposition (raison sociale, référentiels, cycle prévu, montant)
  • Formulaire : nom et prénom du signataire, qualité, commentaire
  • Case à cocher d'acceptation explicite au nom de l'organisme
  • Bouton Valider l'acceptation

À la validation :

  • Statut bascule en Accepté avec canal client_web
  • L'event acceptée est rattaché à la ligne de la proposition active (badge 🟣 Acceptée, avec nom du signataire et qualité)
  • Email automatique au CA assigné + contact@aes-certification.fr
  • Si le client revient sur le lien : page Offre déjà acceptée le … (idempotence)
Le lien est lié au token de la proposition. Si la proposition est expirée (30+ jours par défaut), le client voit Lien invalide ou expiré — il faudra valider manuellement côté CA.

Transfert vers audit-platform

Quand l'opportunité est en statut Accepté, le bouton 🚀 Transférer vers audit apparaît dans la fiche. Il ouvre le modal Créer le contrat dans audit-platform :

ChampSource / défaut
Workflow cible (obligatoire)Pré-rempli depuis le workflow choisi à la validation. Liste depuis workflow_schemas.
Date de signature (obligatoire)Pré-rempli depuis accepted_at.
Contact facturation (nom + email)Pré-rempli depuis le contact principal de l'organisme.

À la soumission :

  • Création d'une ligne contrats côté chiffrage (si pas déjà faite)
  • Insertion dans la table partagée contrats_recus avec tous les détails (items chiffrage, sites, auditeurs, complexités, accréditation, workflow cible, contact facturation, traçabilité acceptation)
  • Webhook JWT vers audit-platform → email + notification in-app à la direction
  • Statut bascule en Transféré
  • Idempotence : si déjà transféré, bouton bloqué et erreur explicite

Côté audit-platform, la direction ouvre la liste des contrats reçus, valide ou rejette. La validation crée le client (ou rattache à un existant via SIRET), crée le contrat audit_contrats, le cycle d'audit et les missions selon les phases du workflow cible.

⚖️ La décision de l'acheteur — gagnée comme perdue

Quand l'acheteur rend sa décision, déposez son courrier dans le chat de l'assistant, comme n'importe quelle pièce. Il connaît déjà le dossier de consultation — acheteur, objet, critères et pondérations — et remplit le bloc « Décision » de la fiche : attributaire, montant retenu et sa nature, notre montant, classement, tableau des notes, motifs, et une analyse.

Tout est modifiable, et tout est saisissable à la main. Le bouton « Saisir » ouvre le même formulaire sans passer par l'IA — un courrier papier, un refus annoncé au téléphone, une correction après coup. Les critères du tableau y sont pré-construits depuis le règlement de consultation : il ne reste qu'à placer les notes.

Le statut suit tout seul

IssueCe qui arrive au dossier
Non retenupasse en Refusé, avec le motif construit depuis la décision
Sans suitepasse en Abandonné — l'acheteur annule sa consultation, personne ne gagne : ce n'est pas une perte face à un concurrent, et ça ne doit pas fausser le taux de réussite
Retenurien d'automatique. Passer en « Accepté » ouvre un flux contractuel — canal, signataire, workflow cible — que vous seul pouvez renseigner. L'outil le propose, il ne le fait pas à votre place
Si le pipeline ne reflète pas la décision — dossier traité avant septembre 2026, ou carte déplacée à la main — la fiche le signale et propose un bouton pour rattraper.

Pourquoi saisir aussi les marchés GAGNÉS

Une lettre d'attribution apprend autant qu'une lettre de rejet, et sur ce qu'on connaît le plus mal : à quel prix on gagne. Une base qui ne contient que des pertes ne dit pas où est la limite, seulement qu'on l'a dépassée.

L'information est plus maigre quand on gagne, et ce n'est pas un hasard : l'acheteur doit motiver auprès des évincés. Les notes des autres se demandent — c'est un droit, et personne n'y pense. Tous les champs concernant le concurrent sont donc facultatifs.

L'analyse, et à quoi elle sert

Elle ne résume pas le courrier — vous l'avez sous les yeux. Elle dit si l'écart était rattrapable : ce qui a bien marché, toutes les causes de perte, et le prix qu'il aurait fallu proposer quand la notation est proportionnelle.

Elle apparaît sur l'accueil tant que vous ne l'avez pas lue, avec un bouton « J'ai pris connaissance ». Par personne : qu'un collègue l'ait lue ne vous en dispense pas. Ce qu'on a perdu, et pourquoi, ne sert qu'à celui qui chiffrera le prochain marché du même type.

⚠ Le processus métier de cette diffusion n'est pas encore arrêté (qui doit lire, ce que devient un accusé quand l'analyse est modifiée) — point A-3, en attente d'arbitrage.

Quand la prochaine consultation sortira

Le bloc « Calendrier du marché » porte cinq dates — début de prestation, durée ferme, reconductions, cycle de certification, fin du certificat en cours. Elles arment l'alerte « marchés à revenir » de l'accueil : 9 mois avant l'échéance (ressortir le dossier), 6 mois avant (l'avis peut paraître, vérifier les pièces officielles), et 3 mois avant chaque reconduction — une reconduction non exercée fait sortir une consultation par anticipation.

Laissez vide ce que vous ne savez pas. Une alerte qui se déclenche au mauvais moment se désactive, et ne revient jamais. Le champ le plus fiable est la fin du certificat en cours : le client doit recertifier avant.

🏛️ Répondre à une consultation publique

Quand un dossier vient d'un acheteur public, l'opportunité ne se limite plus à un chiffrage : il faut produire un dossier de réponse complet, dans les formes et dans les délais.

La détection

L'assistant IA reconnaît une consultation publique aux pièces qu'on lui donne — règlement de consultation, CCTP, CCAP, DCE, BPU, DPGF, avis d'appel public, DC1 à DC4, acte d'engagement, mémoire technique — ou au vocabulaire employé (pouvoir adjudicateur, MAPA, code de la commande publique).

Mode chargé d'affaires uniquement. Un prospect ne fait jamais chiffrer son propre marché public : en parcours public, l'assistant n'en dit pas un mot, même s'il le détecte.

Ce qu'il en extrait alimente la fiche de consultation de l'opportunité : acheteur, objet, référence, type de procédure, date limite de remise (qui devient l'échéance), durée du marché et reconductions, critères de jugement et leur pondération, exigences sur les auditeurs, références demandées, délais et pénalités.

Deux listes qu'il faut lire. Les questions à poser à l'acheteur — ce que le règlement ne dit pas et qu'il faut demander avant de chiffrer : effectifs détaillés, périmètre exact, sites temporaires, langues d'audit. Et les points de vigilance — clauses inhabituelles, sous-traitance encadrée, obligations de présence, confidentialité renforcée : ce qui mérite une relecture avant de s'engager.

Les pièces de l'acheteur

Les documents reçus se déposent sur le dossier (par le chat de l'assistant ou depuis la fiche) et sont rangés dans SharePoint, dossier Consultation/. Ils restent consultables pendant toute la vie de l'opportunité.

📋 Candidature et 💼 Offre — les pièces à produire

La fiche de l'opportunité sépare le dossier de réponse en deux blocs, parce que l'acheteur les juge séparément.

BlocCe qu'il prouveExemples
📋 CandidatureLe droit et la capacité à répondreDC1, DC2, attestation sur l'honneur, K-bis, attestation d'accréditation COFRAC, attestations fiscale et URSSAF, assurance RC, références
💼 OffreLa proposition elle-même Acte d'engagement, BPU / DPGF, mémoire technique, CV des auditeurs, planning

Trois façons d'obtenir une pièce

TypeComment
À générerAES la produit depuis un gabarit, avec les données de l'acheteur injectées : DC1, DC2, attestation sur l'honneur. Un clic, et le Word et le PDF arrivent dans Réponse/
À pré-remplirLe cadre est imposé par l'acheteur — acte d'engagement, bordereau de prix — et se complète avec les données du dossier
À fournirUne pièce officielle d'AES, jointe telle quelle : K-bis, accréditation COFRAC, attestations, assurance, RIB. Elle vient de la bibliothèque (voir l'administration)
Le rattachement est automatique. Quand l'assistant liste une pièce à fournir, l'outil cherche la pièce officielle correspondante dans la bibliothèque et la relie, avec un voyant sur sa validité. Le bouton Tout générer produit les générables et attache les officielles en une fois.
Une pièce périmée est une candidature rejetée. Les attestations fiscale et URSSAF ont une durée de validité courte. Les voyants de la bibliothèque — 🟢 valide, 🟠 bientôt périmée, 🔴 périmée — sont à regarder avant de remettre, pas après.

📄 Mémoire technique

Le document qui explique comment AES réalisera la prestation — et qui pèse souvent le plus lourd dans la note technique. Il se génère depuis le calculateur, à côté du bouton de la proposition, et n'apparaît que si une consultation publique a été détectée.

Ce qu'il contient

  • Qui sommes-nous — une présentation choisie selon le domaine métier de l'organisme (voir l'administration). Si l'organisme en couvre plusieurs, l'IA fusionne les variantes validées en un chapitre cohérent, sans rien inventer.
  • Compréhension du besoin — rédigée par l'IA à partir des pièces de l'acheteur.
  • Nos valeurs, notre méthode, la prestation, les temps d'audit — repris de la proposition commerciale.
  • Références — la table des références clients, filtrée sur les domaines de l'organisme.
  • Adéquation — en quoi l'offre répond aux critères annoncés.
Le volet financier et les conditions d'engagement en sont retirés : le prix se remet dans l'acte d'engagement et le bordereau, pas dans le mémoire. Le document part dans Réponse/, en Word et en PDF.
L'IA rédige, elle n'invente pas. Elle ne produit que le narratif, à partir de faits qu'on lui fournit — aucun chiffre, aucune référence, aucune compétence qui ne soit déjà dans le dossier ou dans les contenus validés en administration.

Fiches Prospects & Clients

Accessible via le bouton 👥 Clients dans le header. La page liste les organismes avec des KPIs :

  • Nombre de dossiers total / gagnés / perdus / actifs
  • Date de dernière activité
  • Tags et notes

La fiche d'un organisme est à onglets :

OngletContenu
Vue d'ensembleKPIs principaux, résumé
PropositionsTous les dossiers chiffrage liés, avec statuts et montants
TimelineHistorique consolidé (actions CRM + propositions)
ContactsInterlocuteurs (CRUD, contact principal)
SitesSites permanents (adresse, NRE, type)
NotesBloc libre au niveau organisme
Suppression d'un organisme (admin uniquement) : bouton 🗑️ Supprimer dans la fiche. Bloque si l'organisme a au moins un dossier non-brouillon (intégrité référentielle). Pour supprimer un organisme actif, supprimer d'abord ses dossiers (eux-mêmes restreints aux brouillons — cf. Suppression et corbeille).

Tags, notes et segmentation

Les tags sont libres (ex. prospect, client-actif, grand-compte, food-industry) et modifiables depuis la fiche client. Ils aident à :

  • Segmenter la base
  • Filtrer les organismes (évolution prévue)
  • Identifier les cibles pour relances commerciales

Les notes sont un bloc libre au niveau organisme (pas au niveau proposition), pour garder en contexte les infos stables : historique de la relation, contacts clés, particularités du client.

👥 Gestion des utilisateurs (admin)

Accessible via Admin > Utilisateurs. Réservé aux rôles admin et super_admin. Permet de provisionner les comptes AES (CA, DT, RA, auditeurs) avant qu'ils ne se connectent.

Rôles disponibles

RôleAccèsParticularités
adminChiffrage complet + administration (utilisateurs, tables IAF, tarifs, organismes, corbeille)Peut modifier tous les comptes sauf super_admin
super_adminIdem adminProtégé : ne peut pas être modifié ni supprimé depuis l'UI (protections SQL CANNOT_MODIFY_SUPERADMIN / CANNOT_DELETE_SUPERADMIN)
dtIdem admin (Directeur Technique)
responsableChiffrage + pipeline (sans admin)Voit ses dossiers + ceux non assignés (filtrage par assigned_to à venir)
ra / auditeurLecture seule sur les dossiers et clientsPas de pipeline, pas de modifications

Provisionnement d'un nouveau compte

  1. Admin > Utilisateurs > + Inviter un utilisateur
  2. Saisir l'email (idéalement l'email AES M365 pour bénéficier de l'OAuth Microsoft) + nom + rôle
  3. L'utilisateur est créé en DB. Au premier login Microsoft, le lien OAuth se fait automatiquement (auto-link).
  4. Pour un compte email/password : envoyer manuellement le mot de passe via canal sécurisé ou utiliser le flux Supabase « invitation ».

Modifications et suppression

  • Changer un rôle : sélecteur dans la ligne. Effet immédiat à la prochaine session de l'utilisateur.
  • Supprimer un compte : bouton 🗑️. Bloque si le compte cible est super_admin.
  • Désactiver temporairement : retirer le rôle (passer en auditeur par exemple) plutôt que supprimer, pour conserver l'historique assigned_to sur les dossiers.
Les protections super_admin sont implémentées côté SQL (RPC update_user_role + delete_user). Tester en ré-exécutant les migrations sql/013 et sql/014 dans leur version 78bed93 si vous constatez qu'un admin peut encore modifier un super_admin.

📁 Références clients et domaines métier

Références clients

La liste des audits réalisés, qui alimente le chapitre « Références » du mémoire technique. Deux sources :

  • Automatique — chaque dossier gagné y entre avec son client, ses référentiels, son secteur, ses jours, son montant et son contact principal ;
  • Manuelle — pour l'historique antérieur à l'outil, qui remonte à plus de dix ans et ne doit pas être perdu.

Export CSV disponible depuis l'onglet.

Domaines métier

Un vocabulaire contrôlé mais extensible — « eau et assainissement », « collectivités », « agroalimentaire »… — qu'on gère ici et qu'on attribue à l'organisme, dans sa fiche, par un éditeur d'étiquettes. Un organisme peut en porter plusieurs ; ses dossiers en héritent.

À quoi ça sert vraiment. C'est ce qui permet au mémoire technique de choisir la bonne présentation d'AES et de filtrer les références sur des audits comparables. Un acheteur du secteur de l'eau veut lire des références dans l'eau.

Ce n'est volontairement pas déduit du code NAF ni du code EA : le découpage commercial ne suit pas le découpage statistique. Le tableau de bord signale les organismes sans domaine — un clic mène à la fiche.

⚖️ Marchés publics — ce qui se pilote en administration

Trois choses que les documents de candidature vont chercher ici.

Chiffre d'affaires annuel

Les trois derniers exercices, par entité. Le DC2 les réclame systématiquement (cadre F1) : les saisir une fois évite de les rechercher à chaque consultation.

Gabarits de documents

Les modèles DC1, DC2 et attestation sur l'honneur, stockés tels quels. La génération y remplace les balises par les données de l'acheteur et du dossier.

Word éclate parfois une balise en plusieurs morceaux dans son format interne — une correction de faute d'orthographe suffit. La génération les recoud avant de remplacer : une balise qui « ne marche pas » vient presque toujours de là, et se répare en la retapant entièrement dans le gabarit.

Bibliothèque des pièces officielles

K-bis, attestation d'accréditation COFRAC, attestations fiscale et URSSAF, assurance RC, RIB. Chaque pièce porte sa date de validité et un voyant : 🟢 valide, 🟠 bientôt périmée, 🔴 périmée.

  • Dépôt, remplacement et suppression depuis l'onglet ;
  • stockage privé — aucun lien public, chaque accès passe par le serveur ;
  • rattachement automatique aux pièces demandées par une consultation.
C'est le point unique de ces documents. Une pièce remplacée ici l'est pour toutes les consultations à venir — et, à l'inverse, une pièce périmée qu'on oublie de remplacer part dans toutes les candidatures.

🗑️ Suppression et corbeille (Sprint 3 — mai 2026)

La suppression d'une proposition n'est plus une opération destructive immédiate. Le mécanisme est un soft-delete avec corbeille admin.

Suppression d'un dossier (CA)

  • Bouton 🗑️ Supprimer le dossier dans la fiche pipeline
  • Restreint au statut brouillon uniquement. Un dossier envoye, en_negociation, accepte, refuse ou transfere ne peut pas être supprimé — l'historique commercial doit être préservé.
  • La suppression marque la ligne deleted_at = NOW(). Le dossier disparaît de la pipeline, de la home, des fiches clients et de la liste des dossiers.

Corbeille admin

Accessible via Admin > Corbeille. Réservé aux rôles admin / super_admin.

  • Liste de tous les dossiers deleted_at IS NOT NULL
  • Bouton ♻️ Restaurer : remet deleted_at = NULL, le dossier réapparaît dans la pipeline avec son statut d'origine
  • Bouton 🗑️ Purger définitivement : double confirmation (incluant la saisie du dossier_number) avant DELETE dur en base. À utiliser avec parcimonie.
Aucune purge automatique pour le moment — la corbeille s'accumule. Une purge auto à 90 jours est envisagée mais reportée tant que le volume reste raisonnable.