Comptabilité analytique
Comptabilité analytique
Périmètre : plan comptable / natures de prestation, ventilation analytique des charges fournisseur (par exercice, trimestre, contrat, affaire, site, client), immobilisations, clôture annuelle (FNP / CCA / CAP / AAR / provisions) et pivots de contrôle. Ce domaine couvre la couche analytique qui se superpose à la comptabilité opérationnelle (journaux, TVA, exports légaux FEC) décrite dans docs/10-domain-sales-billing.md §3.15.
/workspace/accounting/*. Côté API, le domaine est éclaté en plusieurs racines : /api/workspace/accounting/* (clôture, exports, provisions, amortissement mensuel), /api/workspace/accounting-codes/* (plan comptable), /api/workspace/fixed-assets/* (immobilisations) et /api/workspace/supplier-invoices/[id]/allocations (affectation analytique des charges). Source de cette page : docs/23-domain-accounting.md.Vocabulaire & entités
| Terme | Entité | Définition |
|---|---|---|
| Compte / Nature de prestation | AccountingCode | Poste analytique d'une charge (ex. 607010001 - CLLD Achats de marchandises). |
| Catégorie de compte | AccountingCodeCategory | IMMOBILISATION, PURCHASE, SERVICE, COMMISSION, INSURANCE, MAINTENANCE, FINANCIAL, BUYBACK, OTHER. |
| Affectation | SupplierInvoiceAllocation | Rattachement d'une charge à un exercice, un trimestre, un contrat/affaire/client/site. |
| Enveloppe de financement | — | Ensemble des factures fournisseur composant le capital financé d'un contrat de location. |
| Charge réseau | — | Charge couvrant plusieurs contrats/sites, ventilée en plusieurs SupplierInvoiceAllocation dont la somme égale le total HT. |
| Immobilisation | FixedAsset | Bien inscrit à l'actif (comptes 215*), amorti sur une durée ; événements tracés dans FixedAssetEvent. |
| Événement d'immobilisation | FixedAssetEvent | AMORTIZATION, REVALUATION, DISPOSAL, TRANSFER. |
| Clôture | FiscalYearClosing | Processus de fin d'exercice ; états : OPEN → IN_PROGRESS → REVIEW → CLOSED. |
| Provision | AccountingProvision | Écriture de régularisation : FNP (facture non parvenue), CCA (charge constatée d'avance), CAP (charge à payer), AAR (avoir à recevoir), risques, stock. |
| Exercice de rattachement | — | Exercice comptable d'imputation (peut différer de l'exercice de comptabilisation). |
Le modèle complet est dans
docs/04-data-model.md§16. La facture fournisseur enrichie est décrite en §8 (SupplierInvoice).
Écrans
| Écran | Route | Contenu |
|---|---|---|
| Plan comptable | /workspace/accounting-codes | CRUD des AccountingCode (code, libellé, catégorie, flag immobilisation, actif/inactif, hiérarchie). |
| Affectation des charges | /workspace/supplier-invoices/[id] (onglet allocation) | Affectation analytique d'une facture (nature, affaires/hors affaires, exercice, trimestre, contrat/affaire/client/site) + ventilation charge réseau ligne à ligne. |
| Immobilisations | /workspace/fixed-assets | DataTable (code, valeur brute, amortissement cumulé, VNC, statut) + fiche plan d'amortissement + événements. |
| Clôture annuelle | /workspace/accounting/closings/dashboard + /workspace/accounting/cutoff/[fiscalYearClosingId] | Tableau de bord de complétude par exercice/entité ; proposition de cut-off (provisions FNP/CCA/CAP/AAR), apurement, verrouillage. |
| Exports & états | /workspace/accounting/exports | Export FEC et pivot Proginov, vérifications. |
Modèle de données (points clés)
- Le plan comptable est paramétrable par organisation : codes activables/désactivables, ajout de comptes custom. Un seed initial couvre 23 codes issus de l'existant (de
215410000à622100001). - Les comptes
215*(immobilisations) ne peuvent pas être affectés en charge directe : toute facture sur ce compte alimente obligatoirement unFixedAsset. - La somme des
SupplierInvoiceAllocationd'une facture ventilée doit égaler sontotalHt(contrôlé côté service). - Un exercice
CLOSEDest immuable : aucune affectation ni provision ne peut être modifiée ; les corrections passent par l'exercice ouvert suivant. - Une
AccountingProvisionréférence sonreversedInYear(exercice d'apurement) ; l'apurement est tracé et déclenché automatiquement à l'ouverture de l'exercice suivant. - L'exercice de rattachement peut différer de l'exercice de comptabilisation (charges sur exercice antérieur).
API
Les routes exigent une permission accounting.* (plan comptable, immobilisations, clôture / exports), purchasing.* (affectation analytique des charges, portée par le domaine facture fournisseur) ou finance.* (provisions). Permission vérifiée côté API et UI.
Plan comptable (/api/workspace/accounting-codes) :
| Méthode | Route | Permission |
|---|---|---|
GET | /api/workspace/accounting-codes | accounting.code:read |
GET | /api/workspace/accounting-codes/[id] | accounting.code:read |
POST | /api/workspace/accounting-codes | accounting.code:manage |
PATCH | /api/workspace/accounting-codes/[id] | accounting.code:manage |
Affectation analytique des charges (portée par la facture fournisseur — une affectation = une ligne SupplierInvoiceAllocation) :
| Méthode | Route | Permission |
|---|---|---|
GET | /api/workspace/supplier-invoices/[id]/allocations | purchasing.invoice:read |
POST | /api/workspace/supplier-invoices/[id]/allocations | purchasing.invoice:create |
DELETE | /api/workspace/supplier-invoice-allocations/[id] | purchasing.invoice:create |
Immobilisations (/api/workspace/fixed-assets) :
| Méthode | Route | Permission |
|---|---|---|
GET | /api/workspace/fixed-assets | accounting.asset:read |
GET | /api/workspace/fixed-assets/[id] | accounting.asset:read |
POST | /api/workspace/fixed-assets | accounting.asset:manage |
PATCH | /api/workspace/fixed-assets/[id] | accounting.asset:manage |
POST | /api/workspace/fixed-assets/[id]/commission | accounting.asset:manage |
POST | /api/workspace/fixed-assets/[id]/amortization | accounting.asset:manage |
Clôture, amortissement mensuel, provisions & exports :
| Méthode | Route | Permission |
|---|---|---|
POST | /api/workspace/accounting/fiscal-year-closings/[id]/propose-cutoff | accounting.closing:manage |
POST | /api/workspace/accounting/run-monthly-depreciation | accounting.closing:manage |
GET | /api/workspace/accounting/provisions/pending-apurement | finance.invoice:read |
POST | /api/workspace/accounting/provisions/[id]/consume | finance.invoice:manage |
POST | /api/workspace/accounting/export-fec | accounting.closing:manage |
POST | /api/workspace/accounting/export-pivot-proginov | accounting.closing:manage |
Le domaine couvre aussi le rapprochement bancaire (
bank-accounts,bank-operations,bank-sync), la TVA EDI (vat-returns,edi-submissions), la paie (payroll-imports,payroll-mappings), les loyers (rent-reconciliations) et les rapprochements intragroupe (intragroup-reconciliations) sous/api/workspace/accounting/*— hors périmètre de cette page analytique.
Exemple de référence d'endpoint :
/api/workspace/supplier-invoices/[id]/allocationsAuth Ajoute une ligne d'affectation analytique à une facture fournisseur. Chaque appel crée une ligne SupplierInvoiceAllocation ; la ventilation d'une charge réseau se fait par appels successifs. Le service refuse toute affectation qui ferait dépasser le totalHt de la facture (garde-fou de somme) et renvoie le récapitulatif (lignes + reste à affecter). Le GET même chemin liste les affectations existantes avec ce récapitulatif ; la suppression d'une ligne passe par DELETE /api/workspace/supplier-invoice-allocations/[id].
Corps (JSON)
AccountingCode).2025). Peut différer de l'exercice de comptabilisation.Q1 / Q2 / Q3 / Q4).Requête
curl -s -X POST "$API/api/workspace/supplier-invoices/$INVOICE_ID/allocations" \
-H "Content-Type: application/json" -H "Cookie: $SESSION" \
-d '{"amountHt":1200,"accountingCodeId":"code_xxx","fiscalYear":2025,"leaseContractId":"lease_xxx"}'
Réponse
{
"items": [
{ "id": "alloc_…", "supplierInvoiceId": "inv_…", "amountHt": 1200, "accountingCodeId": "code_xxx", "fiscalYear": 2025, "leaseContractId": "lease_xxx" }
],
"invoiceTotalHt": 1200,
"allocatedHt": 1200,
"remainingHt": 0,
"fullyAllocated": true
}
Workflows
Affectation d'une facture fournisseur
À la validation comptable d'une SupplierInvoice :
- Saisie de la nature de prestation (
accountingCodeId) — obligatoire. - Indicateur Affaires / Hors affaires.
- Exercice d'affectation (
fiscalYear) — obligatoire. - Trimestre (
quarterTag) pour l'analytique trimestriel. - Rattachement à un contrat ou une affaire, un client, un site.
- Indicateur d'inclusion dans l'enveloppe de financement.
- Si charge réseau : ventilation en plusieurs
SupplierInvoiceAllocation(une ligne parPOST .../allocations, somme contrôlée ≤ total HT).
Une facture non affectée bloque la clôture de son exercice.
Gestion des immobilisations
- Facture sur compte
215*→ génère ou alimente unFixedAsset. - Mise en service d'un bien
IN_PROGRESS→POST /fixed-assets/[id]/commission(transition versACTIVE, démarre l'amortissement). - Dotation aux amortissements pour un exercice →
POST /fixed-assets/[id]/amortization→FixedAssetEventde typeAMORTIZATION(méthode linéaire par défaut). L'amortissement mensuel global du parc se déclenche viaPOST /accounting/run-monthly-depreciation. - Cession / mise au rebut →
FixedAssetEventde typeDISPOSAL, sortie de l'actif.
Clôture annuelle
OPEN
│ (lancement de la clôture)
▼
IN_PROGRESS
│ (contrôles : factures affectées, écarts résolus)
│ (saisie/génération provisions : FNP / CCA / CAP / AAR / risques / stock)
▼
REVIEW
│ (validation direction financière)
▼
CLOSED (exercice verrouillé — provisions immuables)
À l'ouverture de l'exercice suivant : apurement automatique des provisions (reprise). Les écritures de régularisation alimentent l'export comptable vers l'outil externe (FEC / Sage / Cegid / Pennylane).
Contrôle inter-exercices
À chaque clôture : comparaison des montants par compte avec le fichier de clôture N-1. Les écarts sont listés avec une zone d'analyse à renseigner (reclassements, corrections).
Règles métier
- Une
SupplierInvoicevalidée doit porter une nature de prestation et un exercice d'affectation. - La somme des
SupplierInvoiceAllocationd'une facture ventilée doit égaler sontotalHt. - Exercice
CLOSED→ aucune modification possible (affectation ni provision) ; les corrections passent par l'exercice suivant. - Comptes
215*→ alimentent uniquement unFixedAsset, jamais une charge directe. - Toute affectation et toute écriture de clôture → audit log systématique.
- Apurement de provision → tracé via
reversedInYear.
Notifications
| Événement | Canal | Destinataire |
|---|---|---|
| Facture à affecter | In-app | Comptable |
| Clôture lancée | In-app | Direction financière |
| Factures non affectées bloquant la clôture | In-app + email | Comptable |
| Exercice clôturé | In-app + email | Direction financière |
| Apurement de provisions disponible | In-app | Comptable |
KPIs
Taux de factures affectées · charges par compte/exercice/contrat · montant des provisions par type (FNP / CCA / CAP / AAR) · valeur nette comptable du parc d'immobilisations · écarts inter-exercices non résolus · marge consolidée par contrat réseau.