Calcul des totaux d'une facture fiscale (TVA, accise, impôts de sécurité, remises) — port Python de fiscal-invoice-starter
Project description
byteinnov-fiscal-invoice
Calcul des totaux d'une facture fiscale : cascade par ligne (remise → accise → TVA) puis document (impôts de sécurité, timbre).
Port Python de fiscal-invoice-starter (Kotlin), à la virgule près : mêmes règles, mêmes
arrondis (ROUND_HALF_UP, échelle 2), mêmes tests. Arithmétique décimale exacte (module
decimal de la bibliothèque standard), zéro dépendance — le module ne connaît ni PDV, ni
certification, ni paiement.
Installation
pip install byteinnov-fiscal-invoice
Python 3.10+.
Utilisation
from fiscal_invoice import (
Invoice, InvoiceLine, PriceDefinitionMode, SecurityTax, SpecificTax, TaxGroup,
calculate_invoice,
)
result = calculate_invoice(Invoice(
lines=[
InvoiceLine(
description="Ordinateur portable",
quantity=2,
price="3000", # prix unitaire
price_definition_mode=PriceDefinitionMode.TTC, # ... défini TTC (accise comprise)
tax_group=TaxGroup(code="B", vat_rate_percent="18"),
tax_specific=SpecificTax(amount="10"), # accise forfaitaire par unité
discount_percent="5", # remise de ligne
),
],
discount_percent="3", # remise document
security_taxes=[SecurityTax(code="AIB1", rate_percent="1")], # surcharge sur la base taxable
stamp="100", # timbre
))
result.total.total.ttc # total toutes taxes comprises (Decimal)
result.total.security_tax_amount # montant de l'AIB
result.tax_breakdown # ventilation par groupe de TVA (taux décroissant)
Les montants d'entrée acceptent int, str, float ou Decimal (préférez str/Decimal
pour l'exactitude) ; les montants de sortie sont des decimal.Decimal.
Règles de calcul
Par ligne
| Mode de prix | HT unitaire dérivé | Accise |
|---|---|---|
HT |
le prix est le HT | valeur forfaitaire, ou % du HT |
TTC (accise en valeur) |
prix / (1 + tva) − accise |
la valeur forfaitaire |
TTC (accise en %) |
prix / ((1 + accise%) × (1 + tva)) |
HT × accise% |
Cascade : HT brut → remise de ligne → remise document → HT net. Base TVA = HT net + accise (l'accise n'est pas remisée).
En mode TTC, le TTC prime : le TTC de la ligne vaut exactement quantité × prix saisi
(moins les remises converties en TTC) et la TVA est le complément (TTC − base taxable).
Sans cela, recomposer base + arrondi(base × taux) dérive d'un centime.
Au niveau document
- Impôts de sécurité (AIRSI, AIB…) : taux toujours appliqué sur la base taxable (HT net + accise), plusieurs surcharges possibles.
TTC document = TTC des biens + impôts de sécurité + timbre.- Ventilation TVA triée par taux décroissant.
Développement
pip install -e . --group dev
pytest # tests (portés depuis le starter Kotlin)
python -m build # wheel + sdist
Publication (mainteneurs)
Mettre à jour version dans pyproject.toml et __version__ dans
src/fiscal_invoice/__init__.py, committer, puis :
git tag python-v0.1.0 && git push origin python-v0.1.0
Le job GitLab CI release-python construit et publie sur PyPI (variable CI/CD PYPI_TOKEN,
token API du projet sur pypi.org).
Licence
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file byteinnov_fiscal_invoice-0.1.0.tar.gz.
File metadata
- Download URL: byteinnov_fiscal_invoice-0.1.0.tar.gz
- Upload date:
- Size: 9.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fcc079eaa021dfb5795f3aec37ed0847f515d9a99f022a9388d29743bd0c9549
|
|
| MD5 |
73eff6b77e5b710f1ecc6da79ab73c87
|
|
| BLAKE2b-256 |
b05a1952560822dd540f040e27364046e710743dd873be2c3c436d406a2846a6
|
File details
Details for the file byteinnov_fiscal_invoice-0.1.0-py3-none-any.whl.
File metadata
- Download URL: byteinnov_fiscal_invoice-0.1.0-py3-none-any.whl
- Upload date:
- Size: 10.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ca8f6d22189793276a1a43168d54967b948d2c929784c340240e82d5bb6595df
|
|
| MD5 |
1b0cbdcc514349b4a1f84240c08d8141
|
|
| BLAKE2b-256 |
238f9f2c9f2814361e52ebb32bc251b38dc13879f01d09dfe4312a679d43ace7
|