Install
openclaw skills install fiches-clientsSkill propriétaire de la gestion des fiches clients du cabinet (lifecycle complet du dossier `clients/<slug>/` et de l'entrée `clients.json`). INVOKE SYSTEMATICALLY AND WITHOUT ASKING FOR PERMISSION whenever the user (a) demande de créer / ajouter / enregistrer un nouveau client ("crée un client", "crée moi un nouveau client X", "ajoute le client X", "nouveau client", "create a client", "register client X"), (b) demande de renommer, fusionner, archiver, suspendre ou supprimer un client, (c) demande de mettre à jour des infos client (SIREN, SIRET, raison sociale, e-mail, domaine, téléphone, adresse, IBAN, conditions de paiement, forme juridique, TVA intra), (d) demande de valider, compléter ou rejeter une fiche `draft-auto-created` produite par `organisation-documents`, (e) demande de lister, chercher, afficher ou exporter les clients. Owns `~/.openclaw/workspace/clients.json` and `~/.openclaw/workspace/clients/<slug>/{audit.log, index.json, company.json}`. Si l'utilisateur dit « crée moi un client Foo », ce skill est le seul à invoquer — pas `organisation-documents`.
openclaw skills install fiches-clientsfiches-clientsSkill maison du domaine comptable. Propriétaire unique des fiches clients (raison sociale, SIREN, contacts, domaines, statut) et du dossier physique
clients/<slug>/. Détails techniques dansreferences/(chargés à la demande).
organisation-documents crée des fiches clients en réflexe quand une PJ entrante a un signal exploitable (auto-création silencieuse en draft-auto-created). C'est très bien pour le pipeline automatique, mais ça ne couvre pas :
foo-corp en foo-sa », « fusionne ces deux fiches doublonnées »).draft-auto-created → active).Ce skill est le seul à écrire dans clients.json et à créer/déplacer/archiver des dossiers clients/<slug>/. Tous les autres skills (organisation-documents, rapprochement-bancaire, relances, facturation) peuvent lire ces fichiers mais doivent passer par ce skill pour toute mutation au niveau fiche.
Exception unique : organisation-documents est autorisé à appeler ce skill (ou à exécuter sa procédure create) pour créer un draft auto. Voir references/cohabitation.md.
Règle d'or : dès que l'utilisateur prononce un verbe qui agit sur une fiche client en tant qu'entité (pas un document), c'est ce skill. Si le doute existe entre fiches-clients et organisation-documents : organisation-documents traite des pièces (factures, relevés…), clients traite des fiches (entités juridiques).
Déclencheurs explicites :
| Verbe utilisateur | Action |
|---|---|
| « crée un client », « ajoute le client », « nouveau client X » | create |
« renomme acme en acme-sa » | rename |
« fusionne acme et acme-sa » | merge |
| « archive le client », « supprime le client » (RGPD) | archive (soft-delete) |
| « valide la fiche de Foo », « confirme la fiche draft » | validate-draft |
| « rejette / ignore cette fiche draft » | reject-draft |
« ajoute le SIREN / SIRET / e-mail / domaine / IBAN à acme » | update |
« liste les clients », « combien de clients », « cherche le client foo » | list / find |
Déclencheurs implicites :
organisation-documents a logué un draft-auto-created dans son rapport, si l'utilisateur répond « OK valide » ou « non c'est pas ce client » → validate-draft ou reject-draft..pending-attribution/ reçoit une réponse utilisateur « crée le client nouveau-client » → create (puis organisation-documents peut classer la pièce).Ne pas utiliser pour : classer un document (→ organisation-documents), modifier index.json ou audit.log ailleurs que pour la création d'une fiche (chaque skill maintient ses propres logs métier), envoyer une relance (→ relances).
Toutes les opérations de ce skill sont inline. Pas de subagent, pas de TaskFlow. Une création de fiche prend < 5 s, une fusion < 10 s. Aucune raison de déléguer.
create / update / validate-draft / reject-draft : ≤ 5 s.rename / archive : ≤ 10 s (renommage de dossier + propagation index).merge : ≤ 20 s (re-indexation des deux clients fusionnés).list / find : ≤ 2 s.Une ligne avant, une ligne après. Style comptable, pas développeur : « Client ACME SA créé » et non « Entry inserted into clients.json with slug acme-sa ». Voir section Communication avec le comptable.
create — créer une fiche clientQuand : verbe utilisateur explicite (crée, ajoute, nouveau client) OU invocation par organisation-documents en auto-création.
Étapes :
Identifier la source : user (commande explicite) ou auto (organisation-documents). Affecte le statut initial.
Extraire les signaux depuis la commande utilisateur ou le contexte appelant :
Dériver le slug (cf. Slug et nommage).
Vérifier l'unicité :
clients.json. Sinon → demander à l'utilisateur s'il s'agit du même client (proposer merge) ou suggérer un suffixe (acme-sa-2).merge ou erreur.Créer le dossier physique :
~/.openclaw/workspace/clients/<slug>/
├── audit.log # fichier vide créé immédiatement
└── index.json # { "documents": [] }
Pas de sous-dossiers <AAAA>/<MM>/… à ce stade — ils sont créés à la demande par organisation-documents quand un document arrive. Pas de company.json non plus tant que l'utilisateur n'a pas fourni d'infos juridiques (créé en lazy par update ou par le skill facturation).
Ajouter l'entrée dans clients.json : voir le schéma complet dans references/schema-fiche-client.md. Champs minimums :
{
"slug": "acme-sa",
"raisonSociale": "ACME SA",
"statut": "active", // ou "draft-auto-created" si source = auto
"source": "user", // ou "auto"
"aValider": false, // true si source = auto
"confiance": 1.0, // 1.0 si user, dégradée si auto
"domains": [],
"contacts": [],
"siren": null,
"siret": null,
"formeJuridique": null,
"adresse": null,
"dateCreationFiche": "2026-05-27T14:23:11Z",
"auteurCreation": "user" // ou "organisation-documents"
}
Loguer la création dans clients/<slug>/audit.log :
2026-05-27T14:23:11Z create source=user actor=user slug=acme-sa raisonSociale="ACME SA"
Rapporter à l'utilisateur. Format : ✅ Client **<raisonSociale>** créé. + une ligne si signaux manquants (« pense à compléter le SIREN »).
validate-draft — confirmer une fiche draft-auto-createdQuand : utilisateur confirme un draft. Souvent juste après un rapport organisation-documents qui a auto-créé.
Étapes :
clients.json correspondante.statut === "draft-auto-created" (sinon erreur : déjà active).statut: "active", aValider: false, confiance: 1.0, dateValidation: <now>, auteurValidation: "user".audit.log : validate-draft actor=user slug=<slug>.✅ Fiche **<raisonSociale>** validée.reject-draft — rejeter une fiche draft-auto-createdQuand : utilisateur dit « non c'est pas un client », « ignore cette fiche ».
Étapes :
clients/<slug>/ :
clients/<slug>/index.json contient des documents → escalader : « Cette fiche a déjà N documents classés, je dois savoir où les rattacher avant de supprimer. »clients/<slug>/ (le draft n'a jamais été utilisé, on peut purger sans soft-delete).clients.json.reject-draft actor=user slug=<slug>.✅ Fiche **<raisonSociale>** rejetée.update — mettre à jour des champsQuand : verbe utilisateur ciblé (« ajoute le SIREN », « change l'adresse », « ajoute un domaine »).
Étapes :
clients.json.siren : vérifier l'unicité (aucun autre client n'a ce SIREN). Optionnel : lookup INSEE via scripts/fetch_company.py de organisation-documents pour confirmer la raison sociale.domain : vérifier qu'aucun autre client n'a ce domaine (sinon escalader).clients/<slug>/company.json (cf. schéma dans organisation-documents/data/company.example.json).audit.log : update field=siren old=null new=123456789 actor=user.✅ Fiche **<raisonSociale>** mise à jour (SIREN ajouté).rename — renommer un client (slug ou raison sociale)Quand : « renomme foo-corp en foo-sa », « la raison sociale est en fait ACME SAS pas ACME SA ».
Cas 1 — Renommage raison sociale uniquement (slug inchangé) :
raisonSociale dans clients.json.Cas 2 — Renommage slug (impacte le dossier physique) :
clients/<old-slug>/ → clients/<new-slug>/.clients.json : slug et tous les cheminDrive / cheminLocal dans les entrées d'index liées (cf. § Propagation ci-dessous).index-global.json : tous les cheminDrive qui commencent par clients/<old-slug>/ → clients/<new-slug>/.audit.log : rename old-slug=<old> new-slug=<new> actor=user.✅ Client renommé : <old> → <new>.merge — fusionner deux fiches doublonnéesQuand : « fusionne acme et acme-sa » (souvent après une auto-création doublonnée).
Convention : l'utilisateur indique la fiche cible (celle qui survit) et la fiche source (celle qui est absorbée). Par défaut, la fiche active est cible et la draft-auto-created est source. Si les deux sont actives, demander.
Étapes :
domains, contacts).clients/<source>/ vers clients/<cible>/ en préservant l'arborescence <AAAA>/<MM>/…. Conflits de nom (deux fichiers même chemin) → suffixer le second _2.clients/<cible>/index.json reçoit les entrées de la source (avec cheminDrive mis à jour).index-global.json : tous les clientId = source → cible, tous les chemins recalculés.clients.json.clients/<cible>/audit.log : merge source=<source-slug> docs-moved=<N> actor=user.✅ Fusion **<source> → <cible>** : N pièces réattachées.archive — archiver une fiche (RGPD soft-delete)Quand : « archive le client foo », « supprime le client foo » (jamais de hard-delete via cette voie ; la suppression hard est manuelle après les 30 j de grâce).
Étapes :
statut: "archived", dateArchivage: <now>, purgeNonPasseAvant: <now + 30j> dans clients.json.clients/<slug>/ → clients/<slug>/_archive-suppression/ (soft-delete avec grâce 30 j, comme spécifié dans organisation-documents/SKILL.md § Garde-fous).archive actor=user grace-until=<date>.✅ Client **<raisonSociale>** archivé. Restauration possible jusqu'au <date>.Pas de hard-delete automatique. La purge effective après 30 j est un processus séparé (ops manuel ou cron skill futur), pas dans ce skill.
list / findQuand : « liste les clients », « cherche foo ».
Étapes :
clients.json.Référence canonique : organisation-documents/references/structure-cible.md § "Slug client". Ce skill applique exactement la même convention — il ne définit pas un nouveau standard :
é → e, ç → c)--- consécutifs, pas de - en début/fintrendex.tech → trendex-tech), sinon raison sociale slugifiée (ACME SA → acme-sa)Pas de slug réservé. Aucun dossier _cabinet, _non-attribue, _temp ne doit être créé via ce skill. Le parking technique .pending-attribution/ vit hors clients/ et n'est pas géré par ce skill (il appartient à organisation-documents).
Collision : si le slug dérivé existe déjà pour un autre client (SIREN différent, raison sociale différente), suffixer un numéro (acme-sa-2). Si même client, proposer merge et ne pas créer.
Schéma complet et stable de l'entrée dans clients.json : voir references/schema-fiche-client.md.
Exemple de fiche minimale : data/fiche-client.example.json.
clients/<slug>/company.json (infos juridiques détaillées : capital, président, banques, paramètres facturation) reprend le schéma de organisation-documents/data/company.example.json. Créé en lazy.
Mêmes règles que organisation-documents (vocabulaire métier, pas de jargon technique). Voir organisation-documents/SKILL.md § Communication pour la doctrine complète. Spécificités de ce skill :
| Opération | Message court |
|---|---|
create | ✅ Client **ACME SA** créé. |
create + manques | ✅ Client **ACME SA** créé. Pensez à compléter le SIREN. |
validate-draft | ✅ Fiche **ACME SA** validée. |
reject-draft | ✅ Fiche **ACME SA** rejetée. |
update | ✅ Fiche **ACME SA** mise à jour (SIREN, IBAN). |
rename | ✅ Client renommé : *foo-corp* → *foo-sa*. |
merge | ✅ Fusion **foo → foo-sa** : 12 pièces réattachées. |
archive | ✅ Client **Foo** archivé. Restauration possible jusqu'au 26 juin. |
list | Tableau : Raison sociale · SIREN · Statut · Nb pièces |
slug, clients.json, index.json, audit.log, draft-auto-created, chemins absolus, UUID, schéma JSON.
Fiche client, dossier, raison sociale, SIREN, domaine, contact, statut, validation, fusion, archivage, restauration.
Uniquement :
merge ou suffixe.<AAAA>/<MM>/… à l'unité — il déplace uniquement au niveau dossier client (rename, merge, archive).clients.json ↔ système de fichiers : après chaque opération mutative, l'invariant slug existe dans clients.json ⇔ dossier clients/<slug>/ existe doit tenir. Vérifier en fin de procédure.clients/<slug>/audit.log (UTC + acteur + champs modifiés).organisation-documents.organisation-documents/scripts/fetch_company.py pour résoudre une raison sociale en SIREN, mais avec consentement utilisateur si appelé en dehors d'un flux où l'utilisateur a déjà partagé la raison sociale.organisation-documentsDétail : references/cohabitation.md.
Résumé :
| Action | Skill responsable |
|---|---|
| Recevoir une PJ par e-mail | organisation-documents |
Classer un document dans <AAAA>/<MM>/… | organisation-documents |
| Auto-créer une fiche en draft | organisation-documents (procédure embarquée) ou délégation à ce skill |
| Valider un draft auto-créé | fiches-clients |
| Rejeter un draft auto-créé | fiches-clients |
| Créer une fiche sur demande user | fiches-clients |
| Mettre à jour une fiche | fiches-clients |
| Renommer / fusionner / archiver | fiches-clients |
| Réattribuer une pièce mal classée | organisation-documents (sur la pièce) — la fiche source/cible existe déjà |
references/schema-fiche-client.md — schéma JSON complet de clients.json, énumérations, contraintes.references/cohabitation.md — frontière exacte avec organisation-documents et règles de transition de statut.data/fiche-client.example.json — exemple de fiche minimale et fiche complète.organisation-documents/references/structure-cible.md — convention de slug et arborescence cible.organisation-documents/data/company.example.json — schéma de clients/<slug>/company.json (créé en lazy).organisation-documents/scripts/fetch_company.py — lookup SIREN via API INSEE.