Post-vente

Calculs et TVA

Montants en centimes, formules, les 4 régimes de TVA et le code comptable à 15 caractères.

Étape 3 — Calculs & TVA

Tous les montants du système sont stockés en centimes (nombres entiers) pour éviter les erreurs d'arrondi des nombres à virgule. 1 000 € = 100000 cents.

L'anatomie d'une ligne de facture

Chaque ligne porte tout ce qu'il faut pour recalculer et auditer :

ChampSignification
amountVatExcludedCentsMontant hors TVA (HT) de la ligne
amountVatCentsMontant de TVA = HT × taux / 100
rateVatTaux de TVA appliqué (ex. 21)
quantityQuantité
itemRateCommission / itemRateServiceTaux de commission / de service appliqués à l'item
rateFees / fixFees / feesTypeFrais proportionnels (%) / frais fixes / nature des frais (COMMISSION ou SERVICE)
accountingCodeLe code comptable de la ligne (voir plus bas)

Et au niveau de la facture, les totaux (indexedMeta.amountsCents) : subTotalVatExcluded, subTotalFeesVatExcluded, totalVatExcluded, totalVat, totalVatIncluded, plus la ventilation par taux (totalVatByRate : pour chaque taux, base HT + montant de TVA — obligation légale sur la facture), amountDue (reste à payer) et amountPaid (déjà payé).

Les formules de base

Frais acheteur HT = prix d'adjudication HT × taux frais acheteur / 100
Commission vendeur HT = prix d'adjudication HT × taux commission / 100
TVA d'une ligne = montant HT × taux TVA / 100  (arrondi au centime, Math.round)
Total TTC = somme des HT + somme des TVA (par ligne × quantité)
Reversement vendeur (FEES_DEDUCTION) = encaissement vente − commission TTC
💰 D'où viennent les taux ? Des grilles tarifaires (« pricing ») attachées au contrat, avec ~30 types codifiés (PricingTypes, blocs 001 à 030) : SELLER_COMMISSION (001), BUYER_FEES (002), SERVICE_FEES (003), frais d'application acheteur/vendeur (004/005), frais d'annulation (BUYER_CANCELLATION_FEES_NOT_PAID 006, ..._NO_PICK_UP 007, SELLER_CANCELLATION_FEES 008), transfert de véhicule (011), adhésions et abonnements (012/014)… Chaque type précise qui paie (chargeToType : SELLER, BUYER, SHOP, OTHER). Les pourcentages peuvent être à paliers selon le niveau (ITEM_BID_VALUE, SEANCE_BID_VALUE, YEAR_BID_VALUE, CONTRACT_BID_VALUE, ITEM_QUANTITY, ITEM_START_PRICE). À défaut de grille spécifique, les taux par défaut du shop s'appliquent (meta.saleInformation.rates).

La TVA : les 4 régimes

La TVA en 30 secondes. La TVA est un impôt sur la consommation que le vendeur collecte pour l'État. Taux normal en Belgique : 21 %. Mais selon qui achète et où, la facture peut être à 0 % : c'est ce que gèrent les « régimes » ci-dessous. Une facture à 0 % n'est pas un cadeau — c'est l'acheteur qui autoliquide la TVA dans son pays, ou une exonération à l'export.
RégimeCode comptaQuand ?Effet
CLASSIC1Cas général (acheteur belge, ou particulier)TVA normale (ex. 21 %)
INTRA5Acheteur entreprise dans un autre pays de l'UE, avec un numéro de TVA valideTVA à 0 % (autoliquidation par l'acheteur) ; mention spécifique sur la facture ; template invoice-intra
EXPORT9Acheteur hors UETVA à 0 % (exonération export) ; template invoice-export
FRANCHISE0Vendeur en franchise de TVA (petit assujetti)Pas de TVA facturée ; ce code n'est jamais écrasé par les recalculs

La détermination est automatique (setIntraAndExport) à partir des pays et types (société/particulier) du vendeur et de l'acheteur. Les numéros de TVA intracommunautaires sont vérifiés en ligne via VIES (VAT Information Exchange System : le service officiel européen de vérification des numéros de TVA intracommunautaires ; service dédié vies du monorepo) ; un échec de vérification est tracé sur la facture (indexedMeta.failViesCheck).

Subtilité : la TVA des frais en intra. Quand une vente est intracommunautaire, les lignes passent à 0 % de TVA… sauf si on demande de préserver la TVA des frais (preserveFeesVat) : les lignes de frais (celles qui ont un feesType) gardent alors leur taux. C'est typiquement le cas en facturation double, où les frais acheteur sont une prestation de service du shop, taxable selon ses propres règles.

Le code comptable à 15 caractères

Chaque ligne de facture porte un code qui dit tout à la comptabilité. Il est assemblé ainsi :

PositionLongueurContenuValeurs
1–44ShopAUEQ, AGEQ, AUIM, AGIM
5–73Type de clientPUB (public), PRI (société privée), FAI (faillite), PAR (particulier), CES (cessation), MAR (marchand/trader), ACH (acheteur)
81Type de contratA achat, C courtage, I immobilier, G gestion, P prestation courtage, Q prestation CP, S commissaire-priseur, V achat-revente
9–113Bloc tarifaire001030 (le pricingBlockRef du type de frais) ou 000
121Régime TVA1 classic, 5 intra, 9 export, 0 franchise
131Type de vente1 full-service, 2 self-service, 3 faillite
14–152GéographieWA Wallonie, FL Flandre, FR, NL, LU, IN international

Exemple : AGEQ PRI C 001 1 1 FR = Agorastore Équipement, client société privée, contrat de courtage, bloc « commission vendeur », TVA classique, full-service, France.

💰 Pourquoi c'est précieux. Ce code permet à la compta de ventiler automatiquement chaque ligne dans le bon journal/compte, sans relire la facture. Quand le régime TVA d'une facture change (ex. un numéro intra validé après coup), seul le 12ᵉ caractère est réécrit (updateAccountingCodeVatType) — sauf si la ligne est en franchise (0), jamais écrasée.
Copyright © 2026