Organisation Documents
Skill central de l'assistant comptable. Réceptionne, classe et nomme automatiquement les documents comptables (factures, relevés bancaires) par client / anné... Skill: Organisation Documents Owner: trendex Summary: Skill central de l'assistant comptable. Réceptionne, classe et nomme automatiquement les documents comptables (factures, relevés bancaires) par client / anné... Tags: latest:0.2.0 Version history: v0.2.0 | 2026-05-13T12:07:50.633Z | user Migration vers pipeline déterministe script-driven : scripts/main.py + extract.py, onboarding 2-étapes pour expéditeurs ambigus,
Rank
62
Safety
84
Downloads
1.8k
Updated
Oct 10, 2026
Version
0.2.0
Source
CLAWHUB
About
What it does, and when to use it.
Capability contract not published. No trust telemetry is available yet. 1.8K downloads reported by the source. Last updated 10/10/2026.
Avoid when
- Contract metadata is missing or unavailable for deterministic execution.
Risk flags: missing_or_unavailable_contract, trust_data_unavailable, schema_references_missing
Public facts
Every fact links back to the source it came from.
- Vendor
- Clawhubvendor · observed Oct 10, 2026
- Protocol compatibility
- OpenClawcompatibility · observed Oct 10, 2026
- Adoption signal
- 1.8K downloadsadoption · observed Oct 10, 2026
- Latest release
- 0.2.0release · observed May 13, 2026
- Handshake status
- UNKNOWNsecurity
Install and run
Setup complexity: low.
clawhub skill install s171rnymrzgb46f7qxnxd5034586ma2f:organisation-documents- Setup complexity is LOW. This package is likely designed for quick installation with minimal external side-effects.
- Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data.
Contract: missing
curl -s "https://www.xpersona.co/api/v1/agents/clawhub-trendex-organisation-documents/snapshot"
Documentation
CLAWHUB
118,251 characters of source documentation, loaded on request.
Extracted files
5 files captured from the source.
SKILL.md
--- name: organisation-documents description: Skill central de l'assistant comptable. Réceptionne, classe et nomme automatiquement les documents comptables (factures, relevés bancaires) par client / année / mois / nature, et déduit clients.json depuis les relevés bancaires. À INVOQUER SYSTÉMATIQUEMENT et SANS DEMANDER L'AUTORISATION dès que (a) un e-mail arrive avec une PJ PDF/image, (b) un e-mail contient un mot-clé comptable (facture, invoice, reçu, paiement, TVA, total, acompte, avoir, relevé), (c) le comptable demande de traiter / classer / organiser un document, (d) un fichier est déposé dans l'inbox, (e) le comptable répond à une question d'identification de client. L'extraction et le classement sont faits par scripts/main.py + scripts/extract.py — aucun champ n'est jamais deviné à l'œil. license: Interne — usage privé OpenClaw --- # Skill `organisation-documents` > Moteur d'entrée du domaine comptable. Réception → identification du client → classement → indexation → rapport. > **Le travail réel est fait par `scripts/main.py`** (qui appelle `scripts/extract.py`). Ce skill = quand le lancer + comment dialoguer avec le comptable. --- ## ⚠️ Règle absolue — EXÉCUTION DU SCRIPT (non négociable) **Pour chaque invocation, la SEULE action de classement correcte est d'exécuter la commande :** ```bash python3 scripts/main.py <dossier_inbox> <racine_clients> ``` puis de lire `<racine_clients>/_report.json` et de le relayer au comptable. ### ❌ INTERDIT - **Lire les PDFs un par un et classer à la main.** L'agent extrait les champs à l'œil de façon inconsistante (cas réels déjà observés : `invoice_id` = `"N"`, `"des"`, `"um-rix"` au lieu de `F1-2026-0001` ; `total_ttc` = `0.00` au lieu du vrai montant). Ces erreurs cassent ensuite tout le rapprochement de `rapprochement-bancaire`. - **Dupliquer la logique du script en Python ad-hoc** dans une cellule / un sous-process inline. Le script EST la logique, il est déterministe, déjà testé. Le réimplémenter à chaque invocation est garanti de diverger. - **Créer ou déplacer des fichiers dans `<racine_clients>/` à la main** (move, copy, write). C'est le script qui le fait. - **Inventer un `invoice_id`** quand le PDF n'en contient pas de lisible. Si `extract.py` ne le trouve pas, le script écrit `SANS-NUM` ; n'essaie PAS de fabriquer mieux à partir du nom de l'émetteur ou de la description. ### ✅ OBLIGATOIRE 1. Exécuter la commande shell ci-dessus (et UNIQUEMENT ça pour la partie classement). 2. Lire le `_report.json` produit. 3. Relayer au comptable un résumé court + les questions d'onboarding si la section `questions` n'est pas vide. ### Si le script échoue Signale l'erreur exacte (stderr) au comptable. **NE PAS** "rattraper" en classant manuellement — c'est précisément ce qui produit les filenames cassés. Si le binaire `pdftotext` manque (`poppler-utils` non installé), demande-le et stoppe. > Pourquoi cette règle est aussi stricte : on a déjà eu plusieurs runs où l'agent a improvisé le classement
README.md
# organisation-documents
> Claude skill for **French accounting firms** (`cabinets comptables`). Receives accounting documents (invoices, bank statements), identifies the client of the firm by reading bank statements, and classifies each PDF into a per-client / year / month folder tree. Deterministic script-driven — never guesses.
## What it does
For each invocation, the skill runs **one command** :
```bash
python3 scripts/main.py <inbox_dir> <clients_root>
```
That script:
1. **Deduplicates** files by SHA-256 (already-classified docs are skipped, listed in `_index.json`).
2. **Extracts** each PDF with `scripts/extract.py` (`pdftotext -layout` + deterministic regexes — no LLM-eyeballing).
3. **Phase 1 — bank statements first.** The account holder shown on the statement header **is** the client of the firm (unambiguous). For each statement, create/complete the `clients.json` entry and file the statement into `<slug>/<AAAA>/<MM>/bank-statements/`.
4. **Phase 2 — invoices.** Compare emitter and recipient (extracted from the PDF) against `clients.json`. One side matches a known client → that's the firm's client ; emitter ≈ client → `invoices/out/`, recipient ≈ client → `invoices/in/`.
5. **Phase 3 — others** : files that are neither invoices nor bank statements → `_non-attribue/`.
6. Writes `clients/clients.json`, `clients/_index.json`, `clients/_report.json`, and prints a short summary.
The agent's job is then only to **read `_report.json` and relay it to the accountant in plain French** — including any onboarding question when the client of a new invoice is ambiguous.
## Onboarding for ambiguous senders (the "Corse Plomberie" case)
An invoice always carries two companies. When neither is yet in `clients.json` and no bank statement covers them, the script does not guess :
1. **Step 1** — the document lands in `clients/_a-identifier/` and a question is added to `_report.json → questions` :
> « Document : facture `TUYO-2024-087` (348,50 € TTC). Émetteur « TUYO SARL », destinataire « Corse Plomberie ». Lequel est votre client ? »
2. **Step 2** — when the accountant answers « it's Corse Plomberie », the agent adds the mapping to `clients.json` (`contacts[].email = <sender>`) and re-runs the script on `_a-identifier/`. The piece gets filed correctly, in the right direction (in/out). **The question is never asked again** for that sender.
## Output tree
```
clients/
├── clients.json ← clients of the firm (auto-derived from bank statements + accountant confirmations)
├── _index.json ← sha256 → classified path (dedup)
├── _report.json ← last-run report (questions, incomplete, classified, ignored)
├── _a-identifier/ ← pieces awaiting accountant disambiguation
├── _incomplet/ ← extraction-incomplete pieces (date or TTC missing)
├── _non-attribue/ ← non-accounting documents
└── <slug>/
└── <AAAA>/<MM>/
├── bank-statements/<A_meta.json
{
"ownerId": "kn7ethsmh4zep86d7ew9wsns2x86jwhr",
"slug": "organisation-documents",
"version": "0.2.0",
"publishedAt": 1778674070633
}references/contrat-io.md
# Référence — Contrat d'invocation & sources
> Référence chargée à la demande par `organisation-documents`. Schémas JSON, sources acceptées, enum d'alertes, schéma de l'index.
---
## Sources acceptées
| Source | Détection | Pré-traitement |
| ------------------ | --------------------------------------------------------- | --------------------------------------------- |
| Pièce jointe Gmail | Skill `gog` → push d'événement | Extraction de la PJ + métadonnées de l'e-mail |
| Adresse AgentMail | Skill `agentmail` → webhook | Idem |
| Lien Drive | URL `https://drive.google.com/file/d/...` dans un message | Téléchargement via `gog` |
| Dépôt FS local | Surveillance `~/.openclaw/workspace/inbox/` | Lecture directe |
| Upload manuel UI | API REST de l'agent | Idem |
### Formats de fichiers
PDF (texte ou scanné), JPG, PNG, HEIC, TIFF, e-mail `.eml` complet, Factur-X (PDF/A-3 + XML embarqué), UBL XML, CSV/OFX (relevés bancaires).
### Métadonnées de l'e-mail (si applicable)
Adresse expéditeur, sujet, date d'envoi, corps HTML. Utilisées pour deviner le client si non détectable depuis la pièce.
---
## Contrat JSON
### Input
```jsonc
{
"email": {
// optionnel : absent si dépôt FS / upload manuel
"from": "[email protected]",
"subject": "Facture F-2026-04-1287",
"date": "2026-04-15T09:12:00Z",
"body": "Bonjour, veuillez trouver ci-joint…",
"messageId": "<abc@gmail>",
},
"attachments": [
{
"filename": "facture_orange_avril.pdf",
"mimeType": "application/pdf",
"path": "/var/lib/openclaw/inbox/staging/abc.pdf",
"sizeBytes": 184320,
},
],
"source": "gmail|agentmail|drive|fs|upload",
"mode": "draft|auto", // override explicite ; sinon dérivé du calendrier post-onboarding
"clientHint": "acme-sa", // optionnel : déjà connu par l'appelant (ex : reclassement)
}
```
### Output
```jsonc
{
"status": "processed",
"documents": [
{
"filename": "facture_orange_avril.pdf",
"decision": "auto_classify|needs_review|ignore",
"reason": "client identifié + extraction 0.92 + conforme",
"client": "acme-sa",
"categorie": "achat", // enum : achat | vente | bank-statement | note-de-frais | contrat | autre
"cheminCible": "clients/acme-sa/2026/04/invoices/in/2026-04-15_OrangePro_348.50.pdf",
"metadata": {
"emetteur": "Orange Pro",
"destinataire": "ACME SA", // optionnel : peuplé pour categorie = vente
"numeroFacture": "F-2026-04-1287",
"dateEmission": "2026-04-15",
"montantTTC": 348.5,
},
"confidence": 0.92, // 0–1, agrégat OCR + matching client
"alerts": []references/reforme-facturation-2026.md
# Réforme de la Facturation Électronique 2026
## Textes de référence
- Loi n° 2022-1726 du 30 décembre 2022 (loi de finances 2023)
- Loi n° 2023-1322 du 29 décembre 2023 (report de calendrier)
- Ordonnance n° 2021-1190 du 15 septembre 2021
- Décret n° 2022-1299 du 7 octobre 2022
- Article 289 bis du Code général des impôts
## Calendrier
### Phase 1 : 1er septembre 2026
| Obligation | Qui |
|-----------|-----|
| **Réception** de factures électroniques | **Toutes** les entreprises assujetties TVA |
| **Émission** de factures électroniques | Grandes entreprises (GE) et ETI |
| **E-reporting** | GE et ETI |
### Phase 2 : 1er septembre 2027
| Obligation | Qui |
|-----------|-----|
| **Émission** de factures électroniques | PME et micro-entreprises |
| **E-reporting** | PME et micro-entreprises |
### Déterminer la taille de l'entreprise
Critères cumulatifs (2 sur 3 dépassés pendant 2 exercices consécutifs) :
| Catégorie | Effectif | CA (HT) | Total bilan |
|-----------|----------|---------|-------------|
| Micro-entreprise | < 10 | < 900 000 EUR | < 450 000 EUR |
| PME | < 250 | < 50 M EUR | < 43 M EUR |
| ETI | < 5 000 | < 1 500 M EUR | < 2 000 M EUR |
| Grande entreprise | >= 5 000 | >= 1 500 M EUR | >= 2 000 M EUR |
**En pratique** : la grande majorité des utilisateurs de Paperasse sont des TPE/PME/micro. Échéance émission = **1er septembre 2027**. Échéance réception = **1er septembre 2026**.
## Qui est concerné
**Toutes les entreprises assujetties à la TVA établies en France**, y compris :
- Les entreprises en **franchise en base de TVA** (art. 293 B du CGI) : elles sont assujetties, elles ne collectent simplement pas
- Les auto-entrepreneurs
- Les entreprises individuelles
- Les sociétés (SASU, SAS, SARL, EURL, SA, SCI, etc.)
### Opérations concernées
- Livraisons de biens entre assujettis en France
- Prestations de services entre assujettis en France
- Acomptes liés à ces opérations
### Opérations exclues
- Prestations de santé (art. 261, 4° du CGI)
- Enseignement (art. 261, 4° du CGI)
- Opérations immobilières exonérées
- Opérations bancaires et d'assurance (art. 261 C du CGI)
- Activités associatives exonérées
### Territoires concernés
| Territoire | TVA applicable | E-facturation |
|-----------|---------------|---------------|
| France métropolitaine | Oui | Oui |
| Guadeloupe, Martinique, Réunion | Oui (taux spécifiques) | Oui |
| Guyane, Mayotte | Non | Non |
| Saint-Pierre-et-Miquelon, Saint-Barthélemy, Saint-Martin | Non | Non |
| Nouvelle-Calédonie, Polynésie française | Non | Non |
## Architecture du système
### Les trois acteurs
```
Entreprise A ──→ PA émettrice ──→ PA réceptrice ──→ Entreprise B
│ │
└──────┬───────────┘
▼
PPF (annuaire +
concentrateur)
│
▼
DGFiP
```
### Portail Public de Facturation AionUi
Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!
activepieces
AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents
cherry-studio
AI productivity studio with smart chat, autonomous agents, and 300+ assistants.
CopilotKit
The Frontend for Agents & Generative UI. React + Angular
Machine-readable data
The same record, as JSON, for agents and crawlers.
{
"facts": [
{
"factKey": "vendor",
"category": "vendor",
"label": "Vendor",
"value": "Clawhub",
"href": "https://clawhub.ai/trendex/skills/organisation-documents",
"sourceUrl": "https://clawhub.ai/trendex/skills/organisation-documents",
"sourceType": "profile",
"confidence": "medium",
"observedAt": "2026-10-10T02:27:21.438Z",
"isPublic": true
},
{
"factKey": "protocols",
"category": "compatibility",
"label": "Protocol compatibility",
"value": "OpenClaw",
"href": "https://www.xpersona.co/api/v1/agents/clawhub-trendex-organisation-documents/contract",
"sourceUrl": "https://www.xpersona.co/api/v1/agents/clawhub-trendex-organisation-documents/contract",
"sourceType": "contract",
"confidence": "medium",
"observedAt": "2026-10-10T02:27:21.438Z",
"isPublic": true
},
{
"factKey": "traction",
"category": "adoption",
"label": "Adoption signal",
"value": "1.8K downloads",
"href": "https://clawhub.ai/trendex/organisation-documents",
"sourceUrl": "https://clawhub.ai/trendex/organisation-documents",
"sourceType": "profile",
"confidence": "medium",
"observedAt": "2026-10-10T02:27:21.438Z",
"isPublic": true
},
{
"factKey": "latest_release",
"category": "release",
"label": "Latest release",
"value": "0.2.0",
"href": "https://clawhub.ai/trendex/organisation-documents",
"sourceUrl": "https://clawhub.ai/trendex/organisation-documents",
"sourceType": "release",
"confidence": "medium",
"observedAt": "2026-05-13T12:07:50.633Z",
"isPublic": true
},
{
"factKey": "handshake_status",
"category": "security",
"label": "Handshake status",
"value": "UNKNOWN",
"href": "https://www.xpersona.co/api/v1/agents/clawhub-trendex-organisation-documents/trust",
"sourceUrl": "https://www.xpersona.co/api/v1/agents/clawhub-trendex-organisation-documents/trust",
"sourceType": "trust",
"confidence": "medium",
"observedAt": null,
"isPublic": true
}
],
"events": [
{
"eventType": "release",
"title": "Release 0.2.0",
"description": "Migration vers pipeline déterministe script-driven : scripts/main.py + extract.py, onboarding 2-étapes pour expéditeurs ambigus, dédup SHA-256, bootstrap clients.json depuis relevés bancaires",
"href": "https://clawhub.ai/trendex/organisation-documents",
"sourceUrl": "https://clawhub.ai/trendex/organisation-documents",
"sourceType": "release",
"confidence": "medium",
"observedAt": "2026-05-13T12:07:50.633Z",
"isPublic": true
}
]
}Record generated Oct 10, 2026.
