5.8 KiB
Runbook — enregistrer une charge sociale ou fiscale (URSSAF, CFE, TVA…)
Public : un agent, quel que soit son modèle, ou l'opérateur. Écrit pour être suivi sans redécouvrir le terrain — cette routine a coûté une heure la première fois, elle doit en coûter deux minutes ensuite.
Pourquoi ce n'est pas une facture fournisseur
L'URSSAF n'est pas un fournisseur. L'inscrire en facture fournisseur pollue le grand livre auxiliaire, les balances âgées et les états de dettes fournisseurs : elle se saisit comme charge sociale.
Le compte : 641, et non 646
Important
Ce runbook a d'abord dit 646. C'était faux, et
adc-009l'a tranché. Si tu lis une version qui dit 646, elle est périmée.
| Compte | Pour qui | Arcodange |
|---|---|---|
| 645x | cotisations patronales sur salaires — suppose des salariés | non : aucun salarié, l'opérateur n'est pas employeur |
| 646 | cotisations de l'exploitant individuel, sociétés à l'IR | non : Arcodange est une SARL à l'IS |
| 641, sous-compte dédié | la société prend en charge les cotisations personnelles de son gérant majoritaire — c'est un complément de rémunération | oui |
Le raisonnement tient en une phrase : dans une société à l'IS, ce que la société
verse à l'URSSAF pour son gérant majoritaire n'est pas un prélèvement de
l'exploitant, c'est une charge de personnel. D'où 641. Voir adc-009 pour la
démonstration complète, y compris la déductibilité intégrale de la CSG/CRDS pour
la société — à ne pas confondre avec le sort de la CSG à l'impôt sur le revenu
personnel du gérant (art. 62 CGI), qui est une autre question.
Warning
Le type de charge ne pilote PAS le compte sur ce déploiement. Les lignes du dictionnaire
Configuration → Dictionnaires → Types de charges socialessont sans code comptable — vérifié. Choisir « Securite sociale des indépendants (URSSAF) » ne suffit donc pas à envoyer l'écriture en 641 : l'affectation se fait au moment du transfert en comptabilité, ou par le sous-compte porté sur l'écriture. Ne pas croire qu'un bon type suffit.
Le type retenu reste Securite sociale des indépendants (URSSAF) : le gérant
associé unique d'une SARLU est TNS, affilié à la Sécurité sociale des
indépendants, et non assimilé salarié. C'est exact sur le fond même si ça
n'emporte aucune conséquence comptable automatique ici.
La commande
cd test
DOLIBARR_ADDRESS=https://erp-sandbox.arcodange.lab \
deno run -A recordSocialCharge.ts \
--label "URSSAF 2026 — 2e échéance" \
--due 2026-08-05 --amount 1215.00 --period 2026-08-05
Production — double opt-in explicite, comme toute écriture de production :
DOLIBARR_ADDRESS=https://erp.arcodange.lab \
ARCO_ALLOW_PRODUCTION=erp.arcodange.lab \
ARCO_PROD_CONFIRM=I-UNDERSTAND-THIS-WRITES-PROD \
deno run -A recordSocialCharge.ts --label "…" --due … --amount … --period …
--dry-run affiche ce qui serait soumis sans rien écrire.
--type "CFE" (ou tout autre motif) pour une charge qui n'est pas URSSAF ; le
script liste les types disponibles s'il ne trouve pas de correspondance.
La charge est créée impayée. Le règlement s'enregistre séparément, quand il a réellement eu lieu — jamais par anticipation.
Ce que le script garantit
- Idempotent : il cherche d'abord la charge dans la liste (libellé + montant) et ne fait rien si elle existe. Un rejeu ne crée pas de doublon.
- Vérifié par lecture : après soumission il relit la liste, pas l'URL.
- Garde d'hôte :
guard.tsrefuse toute cible qui n'est pas la sandbox, sauf double opt-in production.
Les quatre pièges, tous rencontrés
- La date est un piège à double fond. Le champ visible
echest décoratif : le backend ne lit que les champs cachésechday/echmonth/echyear, alimentés par le datepicker jQuery. Remplir le champ texte soumet une date vide — et Dolibarr crée quand même l'enregistrement, avec une période aberrante (20/06/2000observé). Même chose pourperiod. - Le bouton n'a pas de
name. Le cibler parvalue="Ajouter". - L'URL après soumission ne porte pas d'
id. Vérifier par l'URL fait conclure à un échec sur une création réussie — c'est ainsi que quatre doublons sont apparus en sandbox pendant que le script affichait « non créée ». Toujours vérifier par la liste. - Les milliers s'affichent avec une espace insécable : 1215.00 devient « 1 215,00 ». Une comparaison littérale échoue au-delà de 999 €, et l'idempotence saute silencieusement. Comparer sans les espaces.
Pourquoi pas le pipeline de promotion
Dolibarr n'expose aucune API REST pour les charges sociales : /taxes,
/socialcontributions et /chargesociales répondent tous « API not found ». Le
module est actif (le droit 91 existe), seule l'API manque. Le pipeline
fleet/harness/promote/ parle REST : il ne peut pas porter cette opération.
Ce script en conserve la discipline — répétition sandbox, relecture du résultat, opt-in production explicite — mais pas le juge indépendant ni l'artefact de gate. Acceptable pour une opération à trois champs ; à ne pas généraliser.
Après l'enregistrement
- Rapprocher le prélèvement bancaire quand il apparaît (Qonto pour Arcodange).
- Le calendrier
fleet/profile/calendar.yamlporte les échéances URSSAF 2026 : 493,00 (22/05) + 1 215,00 (05/08) + 1 333,00 (05/11) = 3 041,00 €. - L'échéancier officiel n'est disponible que dans l'espace urssaf.fr : les notifications par mail ne contiennent aucun montant, et le transfert Gmail → Zoho remplace même leur contenu par un texte générique. Récupérer le PDF à la main reste nécessaire.