Aller au contenu

Facturation

À quoi ça sert

L'écran Facturation (/dashboard/accounting/invoices) permet de créer des factures clients, de les envoyer, d'enregistrer les règlements reçus et de suivre leur statut jusqu'au paiement complet. Le backend gère également les avoirs et l'annulation, la génération du PDF et un système de relances (dunning) automatiques sur les factures en retard.

Prérequis

Prérequis

  • Modules sous licence : ACCOUNTING
  • Permissions : accounting.read, accounting.write, accounting.invoicing.read
  • Rôles : ACCOUNTANT, CFO, ORG_ADMIN

Comment ça marche

Créer et envoyer une facture

  1. Depuis Comptabilité → Facturation, cliquez sur Nouvelle facture.
  2. Renseignez le formulaire : nom du client, description, montant HT, taux de TVA (18 % par défaut) et date d'échéance.
  3. Cliquez sur Enregistrer — la facture est créée avec le statut Brouillon et un numéro de pièce généré automatiquement (préfixe FAC, compteur annuel par tenant).
  4. Tant qu'une facture est en Brouillon, elle reste modifiable. Dès qu'elle est envoyée, elle devient figée.
  5. Dans la liste des factures, cliquez sur Envoyer (icône enveloppe) sur une ligne en statut Brouillon.
  6. À l'envoi, le système génère et stocke automatiquement le PDF de la facture et publie l'événement comptable qui crédite le compte de vente correspondant (classe 7) et débite le compte clients (classe 4).

Encaisser un paiement

  1. Sur une facture au statut Envoyée, cliquez sur Enregistrer le paiement.
  2. Saisissez le montant réglé et la date de paiement.
  3. Le montant payé ne peut jamais dépasser le montant dû restant — le système refuse tout surpaiement.
  4. Si le règlement couvre exactement le solde, la facture passe au statut Payée ; sinon elle passe en Partiellement payée et reste disponible pour un règlement complémentaire.

Suivi du statut

Le statut d'une facture suit le cycle : Brouillon → Envoyée → (Partiellement payée) → Payée, avec une sortie possible vers Annulée.

Statut Signification
DRAFT (Brouillon) Facture créée, modifiable, non comptabilisée
SENT (Envoyée) Facture émise, écriture comptable de vente passée, PDF généré
PARTIALLY_PAID (Partiellement payée) Un règlement partiel a été enregistré
PAID (Payée) Le montant dû est nul
CANCELLED (Annulée) Facture annulée — génère une contrepassation comptable

Avoirs et annulation (fonctions serveur — non encore exposées dans l'écran de liste)

Le service de facturation gère deux opérations qui ne sont, à ce jour, disponibles que via l'API et pas encore via un bouton dans l'écran /dashboard/accounting/invoices :

  • Avoir (credit note) : émis contre une facture Envoyée, Partiellement payée ou Payée, pour tout ou partie du montant. Il génère un nouveau document de type CREDIT_NOTE (préfixe AVOIR), reprend les lignes de la facture d'origine au prorata et négative, et réduit le montant dû de la facture d'origine. Impossible d'annuler une facture qui a déjà un avoir associé.
  • Annulation : possible sur une facture Envoyée ou Partiellement payée (pas sur une facture Brouillon, déjà Payée ou déjà Annulée), et impossible si un avoir existe déjà dessus. Elle génère une écriture de contrepassation datée du jour de l'annulation (pas de la date d'émission d'origine, pour ne pas tomber sur une période déjà clôturée).

Qui peut faire quoi

Permission requise Rôles concernés
accounting.read ACCOUNTANT, CFO, ORG_ADMIN
accounting.write ACCOUNTANT, CFO, ORG_ADMIN
accounting.invoicing.read ACCOUNTANT, CFO, ORG_ADMIN
Action Permission requise
Consulter la liste et le détail des factures accounting.read
Créer, modifier, envoyer, encaisser, annuler, créer un avoir accounting.write
Télécharger le PDF d'une facture (endpoint dédié) accounting.invoicing.read

D'après la matrice V185 : ACCOUNTANT a accounting.invoicing.read (lecture facturation) mais pas accounting.write — en pratique, sur le tenant de démo, seul ADMIN dispose de accounting.write pour créer/modifier/envoyer des factures. CFO a uniquement accounting.invoicing.read (consultation).

Détails techniques

Détails techniques
  • Entité CustomerInvoice (app.jigi.accounting.invoicing.domain), table accounting.customer_invoices, lignes dans accounting.customer_invoice_lines (CustomerInvoiceLine).
  • Règlements : entité InvoicePayment, table accounting.invoice_payments — un paiement partiel ou total par ligne insérée.
  • Endpoints (CustomerInvoiceController, base /accounting/invoices) :
    • GET /accounting/invoices (liste, pagination, filtre status)
    • GET /accounting/invoices/{id}
    • POST /accounting/invoices / PUT /accounting/invoices/{id} (modification réservée aux factures DRAFT)
    • POST /accounting/invoices/{id}/send
    • POST /accounting/invoices/{id}/record-payment
    • POST /accounting/invoices/{id}/cancel
    • POST /accounting/invoices/credit-note
    • GET /accounting/invoices/{id}/pdf
  • Numérotation : ChartOfAccountService.nextPieceNumber(tenantId, "FAC" | "AVOIR"), compteur par tenant/année dans PieceNumberCounter.
  • Relances : DunningConfig / DunningReminder (table accounting.dunning_config, accounting.dunning_reminders), configurables via GET/PUT /accounting/dunning/config (accounting.read / accounting.manage) ; le déclenchement des rappels est planifié côté serveur (scheduler invoicing/scheduler).
  • Service : CustomerInvoiceService (app.jigi.accounting.invoicing.service) — publie des événements (CustomerInvoiceIssuedEvent, CustomerInvoicePaidEvent, CustomerInvoiceCreditedEvent, CustomerInvoiceCancelledEvent) consommés par le module Journal pour générer automatiquement les écritures comptables.

Cas d'erreur et FAQ

Puis-je modifier une facture déjà envoyée ? Non. Seules les factures au statut Brouillon sont modifiables. Pour corriger une facture envoyée, utilisez un avoir (via l'API pour l'instant) ou annulez-la si aucun paiement n'a encore été enregistré.

J'ai enregistré un paiement supérieur au montant dû, pourquoi est-il refusé ? Le système interdit tout surpaiement : le montant saisi ne peut pas dépasser le solde dû restant de la facture.

Comment récupérer le PDF d'une facture ? Le PDF est généré automatiquement à l'envoi et stocké côté serveur (GET /accounting/invoices/{id}/pdf). Le téléchargement n'est pas encore relié à un bouton dans l'écran Facturation — contactez le support si vous avez besoin du fichier en attendant.

Une facture Payée peut-elle être annulée ? Non, l'annulation n'est possible que sur une facture Envoyée ou Partiellement payée. Pour une facture déjà Payée, émettez un avoir.

Qui peut créer une facture ? Seuls les utilisateurs disposant de accounting.write (rôle ADMIN sur la matrice standard) peuvent créer, envoyer ou encaisser une facture. ACCOUNTANT et CFO peuvent uniquement la consulter.

Voir aussi