Skip to main content

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

Apache-2.0

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

byteinnov_fiscal_invoice-0.1.0.tar.gz (9.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

byteinnov_fiscal_invoice-0.1.0-py3-none-any.whl (10.2 kB view details)

Uploaded Python 3

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

Hashes for byteinnov_fiscal_invoice-0.1.0.tar.gz
Algorithm Hash digest
SHA256 fcc079eaa021dfb5795f3aec37ed0847f515d9a99f022a9388d29743bd0c9549
MD5 73eff6b77e5b710f1ecc6da79ab73c87
BLAKE2b-256 b05a1952560822dd540f040e27364046e710743dd873be2c3c436d406a2846a6

See more details on using hashes here.

File details

Details for the file byteinnov_fiscal_invoice-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for byteinnov_fiscal_invoice-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 ca8f6d22189793276a1a43168d54967b948d2c929784c340240e82d5bb6595df
MD5 1b0cbdcc514349b4a1f84240c08d8141
BLAKE2b-256 238f9f2c9f2814361e52ebb32bc251b38dc13879f01d09dfe4312a679d43ace7

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page