Devis / Facturation
Composez vos devis ligne par ligne (quantités, prix, remises), suivez les totaux HT / TVA / TTC en direct et déroulez le cycle brouillon → envoyé → payé, avec aperçu imprimable. Tout est manipulable dans le Simulateur.
À propos
Le module Devis / Facturation couvre le quotidien d'une petite structure de services : créer un devis pour un client, le composer ligne par ligne (désignation, quantité, prix unitaire, remise optionnelle), suivre les totaux HT / TVA 20 % / TTC recalculés en direct, puis dérouler le cycle de vie — brouillon, envoyé au client, payé. Un devis payé est verrouillé ; l'aperçu imprimable produit un document propre via l'impression du navigateur.
Composants utilisés
bpm.metricRow, bpm.table (liste des devis avec onRowClick, lignes du devis, aperçu), bpm.badge (statuts), bpm.input / bpm.numberInput (formulaire de ligne), bpm.modal (aperçu imprimable, nouveau devis), bpm.confirmModal (suppression de ligne) et bpm.toast.
import bpm
bpm.metricRow([
bpm.metric("Devis en cours", 2),
bpm.metric("Montant TTC en attente", "5 944,80 €"),
bpm.metric("Encaissé", "5 520,00 €"),
])
bpm.table(
columns=[("numero", "Numéro"), ("client", "Client"), ("ttc", "Total TTC"), ("statut", "Statut")],
data=devis,
on_row_click=ouvrir_editeur,
)
bpm.button("Envoyer au client", on_click=envoyer) # brouillon -> envoyé
bpm.button("Marquer payé", on_click=encaisser) # envoyé -> payé (lecture seule)Calculs
Chaque ligne vaut quantité × P.U. × (1 − remise/100) ; le total HT est la somme des lignes, la TVA est appliquée à 20 % et le TTC en découle. Tout est recalculé à chaque ajout, modification ou suppression de ligne — aucun montant n'est stocké en double.
Paramétrage
Le simulateur fonctionne entièrement en local (trois devis seedés, aucune API requise). En production, brancher la persistance sur votre base, l'envoi sur votre service e-mail et la génération PDF sur l'impression navigateur ou un moteur dédié. Voir la documentation pour le modèle de données, la numérotation et le cycle de statuts.