L'opérateur tient ses documents hors ERP, dans ~/Work/Arcodange/1_DOCUMENTS, versionné en git. Ce dépôt reste l'exemplaire de référence ; la GED en reçoit le sous-ensemble dont un lecteur des comptes a besoin — ce qui justifie une charge, ce qui prouve que la société existe, ce qui fixe les termes entre la société et son gérant.
Appliqué en production : 5 répertoires, 10 pièces, chacune relue par son nom dans la GED.
Le manifeste, et ce qu'il exclut
test/gedManifest.ts est déclaratif : ajouter un document, c'est ajouter une ligne. Les exclusions sont délibérées et commentées dans le fichier :
pièces d'identité (CNI, justificatif de domicile) — données personnelles, aucun lecteur comptable n'en a besoin, et l'ERP est exposé sur le réseau ;
correspondance administrative — pas la preuve d'un fait comptabilisé ;
le bail sous-jacent — 8,6 Mo contre un plafond de 2 Mo. Le recompresser reviendrait à altérer le rendu d'une pièce juridique avec un outil dont personne n'a vérifié la sortie. Il reste dans 1_DOCUMENTS. Ce n'est pas la pièce opérante : la convention d'indemnité et l'autorisation du propriétaire le sont, et toutes deux sont versées.
Les factures de logement (électricité, fibre, assurance habitation) sont versées comme justificatifs du forfait de 220 €, jamais comme charges : la convention d'occupation les inclut forfaitairement et exclut toute régularisation annuelle. Les enregistrer séparément serait un double emploi. La description du répertoire le dit, pour que personne ne s'y trompe plus tard.
Deux GED, et l'une ment
Dolibarr expose deux arbres sans rien de commun. /ecm/index_auto.php porte les pièces rattachées à un objet (facture, tiers, charge) — c'est là que doit aller tout justificatif d'un fait comptable. /ecm/index.php porte les répertoires manuels, pour ce qui ne se rattache à rien : statuts, KBIS, registre des décisions.
POST /documents/upload avec modulepart=ecm répond le nom du fichier — donc succès — et ne dépose rien que la GED sache retrouver. L'arbre affiche « Pas de documents téléversés » et /documents/download répond 404 sur le chemin qu'on vient d'écrire. L'API accepte de surcroît n'importe quel subdir sans broncher. La GED manuelle ne s'alimente que par l'UI, qui écrit au bon endroit et inscrit la pièce à l'index — c'est l'index qui alimente compteurs et recherche. Une pièce non indexée est une pièce perdue.
Les cinq pièges
Tous rencontrés, tous consignés dans RUNBOOK_ged.md :
l'API ment sur modulepart=ecm (ci-dessus) ;
un répertoire ne se crée que par l'UI ; « existe déjà » vaut succès pour un script idempotent ;
l'arbre est replié et monté en JS : innerText renvoie vide alors qu'il est peuplé, les ancres portent href="#" (le chemin vit dans rel, l'id dans le onclick), et les sous-répertoires n'entrent en DOM qu'au dépliage ;
au-delà de 2 Mo, le formulaire accepte, n'écrit rien et n'affiche aucune erreur — le fichier disparaît en silence. C'est ainsi qu'un bail de 8,6 Mo a été porté « versé » alors qu'il ne l'était pas. Le script contrôle désormais la taille avant d'envoyer ;
la case « écraser » ne s'applique pas de façon fiable : chaque passe ajoutait un doublon.
Le principe de vérification
Par les noms, jamais par un compteur. Un compteur juste peut recouvrir deux exemplaires d'une pièce et l'absence d'une autre. C'est ce contrôle qui a révélé l'échec silencieux de l'API — le compteur disait 0 quand l'API disait succès.
Vérifications
deno check test/provisionGed.ts → OK
--dry-run → 10 pièces, toutes présentes sur le disque
répétition sandbox, dont une seconde passe : toutes les pièces « déjà présent », aucun doublon créé
production : 5 répertoires créés, 10 pièces versées, chacune relue par son nom
L'opérateur tient ses documents hors ERP, dans `~/Work/Arcodange/1_DOCUMENTS`, versionné en git. Ce dépôt reste l'**exemplaire de référence** ; la GED en reçoit le sous-ensemble dont un lecteur des comptes a besoin — ce qui justifie une charge, ce qui prouve que la société existe, ce qui fixe les termes entre la société et son gérant.
**Appliqué en production** : 5 répertoires, 10 pièces, chacune relue par son nom dans la GED.
## Le manifeste, et ce qu'il exclut
`test/gedManifest.ts` est déclaratif : ajouter un document, c'est ajouter une ligne. Les exclusions sont délibérées et commentées dans le fichier :
- **pièces d'identité** (CNI, justificatif de domicile) — données personnelles, aucun lecteur comptable n'en a besoin, et l'ERP est exposé sur le réseau ;
- **correspondance administrative** — pas la preuve d'un fait comptabilisé ;
- **le bail sous-jacent** — 8,6 Mo contre un plafond de 2 Mo. Le recompresser reviendrait à altérer le rendu d'une pièce juridique avec un outil dont personne n'a vérifié la sortie. Il reste dans 1_DOCUMENTS. Ce n'est pas la pièce opérante : la convention d'indemnité et l'autorisation du propriétaire le sont, et toutes deux sont versées.
Les **factures de logement** (électricité, fibre, assurance habitation) sont versées comme **justificatifs du forfait de 220 €**, jamais comme charges : la convention d'occupation les inclut forfaitairement et exclut toute régularisation annuelle. Les enregistrer séparément serait un double emploi. La description du répertoire le dit, pour que personne ne s'y trompe plus tard.
## Deux GED, et l'une ment
Dolibarr expose deux arbres sans rien de commun. `/ecm/index_auto.php` porte les pièces **rattachées à un objet** (facture, tiers, charge) — c'est là que doit aller tout justificatif d'un fait comptable. `/ecm/index.php` porte les **répertoires manuels**, pour ce qui ne se rattache à rien : statuts, KBIS, registre des décisions.
**`POST /documents/upload` avec `modulepart=ecm` répond le nom du fichier — donc succès — et ne dépose rien que la GED sache retrouver.** L'arbre affiche « Pas de documents téléversés » et `/documents/download` répond **404** sur le chemin qu'on vient d'écrire. L'API accepte de surcroît n'importe quel `subdir` sans broncher. La GED manuelle ne s'alimente que par l'UI, qui écrit au bon endroit **et** inscrit la pièce à l'index — c'est l'index qui alimente compteurs et recherche. Une pièce non indexée est une pièce perdue.
## Les cinq pièges
Tous rencontrés, tous consignés dans `RUNBOOK_ged.md` :
1. l'API ment sur `modulepart=ecm` (ci-dessus) ;
2. un répertoire ne se crée que par l'UI ; « existe déjà » vaut succès pour un script idempotent ;
3. l'arbre est **replié et monté en JS** : `innerText` renvoie vide alors qu'il est peuplé, les ancres portent `href="#"` (le chemin vit dans `rel`, l'id dans le `onclick`), et les sous-répertoires n'entrent en DOM qu'au **dépliage** ;
4. **au-delà de 2 Mo, le formulaire accepte, n'écrit rien et n'affiche aucune erreur** — le fichier disparaît en silence. C'est ainsi qu'un bail de 8,6 Mo a été porté « versé » alors qu'il ne l'était pas. Le script contrôle désormais la taille avant d'envoyer ;
5. la case « écraser » ne s'applique pas de façon fiable : chaque passe ajoutait un doublon.
## Le principe de vérification
**Par les noms, jamais par un compteur.** Un compteur juste peut recouvrir deux exemplaires d'une pièce et l'absence d'une autre. C'est ce contrôle qui a révélé l'échec silencieux de l'API — le compteur disait 0 quand l'API disait succès.
## Vérifications
- `deno check test/provisionGed.ts` → OK
- `--dry-run` → 10 pièces, toutes présentes sur le disque
- répétition sandbox, dont une **seconde passe** : toutes les pièces « déjà présent », aucun doublon créé
- production : 5 répertoires créés, 10 pièces versées, **chacune relue par son nom**
🤖 Generated with [Claude Code](https://claude.com/claude-code)
L'opérateur tient ses documents hors ERP, dans 1_DOCUMENTS versionné en git.
Ce dépôt reste l'exemplaire de référence ; la GED en reçoit le sous-ensemble
dont un lecteur des comptes a besoin — ce qui justifie une charge, ce qui prouve
que la société existe, ce qui fixe les termes entre la société et son gérant.
Le manifeste est déclaratif (gedManifest.ts) : ajouter un document, c'est
ajouter une ligne. Les exclusions sont délibérées et commentées — pièces
d'identité (données personnelles, aucun lecteur comptable n'en a besoin,
l'ERP est exposé), correspondance administrative, et le bail sous-jacent
(8,6 Mo contre un plafond de 2 Mo ; le recompresser altérerait le rendu d'une
pièce juridique avec un outil non vérifié).
Les factures de logement sont versées comme JUSTIFICATIFS du forfait de 220 EUR
de la convention d'occupation, jamais comme charges : la convention les inclut
forfaitairement et exclut toute régularisation. Les enregistrer séparément
serait un double emploi. Le répertoire le dit dans sa description.
Cinq pièges ont coûté cher et sont consignés dans RUNBOOK_ged.md :
- l'API REST MENT sur modulepart=ecm. Elle répond le nom du fichier — donc
succès — sans rien déposer que la GED sache retrouver : arbre vide et 404 sur
le chemin qu'on vient d'écrire. Elle accepte de surcroît n'importe quel subdir.
La GED manuelle ne s'alimente que par l'UI, qui écrit ET indexe ;
- un répertoire ne se crée que par l'UI ; « existe déjà » vaut succès ;
- l'arbre est replié et monté en JS, ses ancres portent href="#", le chemin vit
dans rel et l'id dans le onclick, et les enfants n'arrivent qu'au dépliage ;
- au-delà de 2 Mo le formulaire accepte, n'écrit rien et n'affiche aucune erreur ;
- la case « écraser » ne s'applique pas : chaque passe dupliquait.
D'où le principe de vérification : par les NOMS, jamais par un compteur — un
compteur juste peut recouvrir deux exemplaires d'une pièce et l'absence d'une
autre. C'est ce contrôle qui a révélé l'échec silencieux de l'API.
Répété en sandbox, puis appliqué en production : 5 répertoires, 10 pièces,
chacune relue par son nom dans la GED.
Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
L'opérateur tient ses documents hors ERP, dans
~/Work/Arcodange/1_DOCUMENTS, versionné en git. Ce dépôt reste l'exemplaire de référence ; la GED en reçoit le sous-ensemble dont un lecteur des comptes a besoin — ce qui justifie une charge, ce qui prouve que la société existe, ce qui fixe les termes entre la société et son gérant.Appliqué en production : 5 répertoires, 10 pièces, chacune relue par son nom dans la GED.
Le manifeste, et ce qu'il exclut
test/gedManifest.tsest déclaratif : ajouter un document, c'est ajouter une ligne. Les exclusions sont délibérées et commentées dans le fichier :Les factures de logement (électricité, fibre, assurance habitation) sont versées comme justificatifs du forfait de 220 €, jamais comme charges : la convention d'occupation les inclut forfaitairement et exclut toute régularisation annuelle. Les enregistrer séparément serait un double emploi. La description du répertoire le dit, pour que personne ne s'y trompe plus tard.
Deux GED, et l'une ment
Dolibarr expose deux arbres sans rien de commun.
/ecm/index_auto.phpporte les pièces rattachées à un objet (facture, tiers, charge) — c'est là que doit aller tout justificatif d'un fait comptable./ecm/index.phpporte les répertoires manuels, pour ce qui ne se rattache à rien : statuts, KBIS, registre des décisions.POST /documents/uploadavecmodulepart=ecmrépond le nom du fichier — donc succès — et ne dépose rien que la GED sache retrouver. L'arbre affiche « Pas de documents téléversés » et/documents/downloadrépond 404 sur le chemin qu'on vient d'écrire. L'API accepte de surcroît n'importe quelsubdirsans broncher. La GED manuelle ne s'alimente que par l'UI, qui écrit au bon endroit et inscrit la pièce à l'index — c'est l'index qui alimente compteurs et recherche. Une pièce non indexée est une pièce perdue.Les cinq pièges
Tous rencontrés, tous consignés dans
RUNBOOK_ged.md:modulepart=ecm(ci-dessus) ;innerTextrenvoie vide alors qu'il est peuplé, les ancres portenthref="#"(le chemin vit dansrel, l'id dans leonclick), et les sous-répertoires n'entrent en DOM qu'au dépliage ;Le principe de vérification
Par les noms, jamais par un compteur. Un compteur juste peut recouvrir deux exemplaires d'une pièce et l'absence d'une autre. C'est ce contrôle qui a révélé l'échec silencieux de l'API — le compteur disait 0 quand l'API disait succès.
Vérifications
deno check test/provisionGed.ts→ OK--dry-run→ 10 pièces, toutes présentes sur le disque🤖 Generated with Claude Code