Ici, en Afrique du Sud, nous avons la taxe sur la valeur ajoutée (TVA) qui est sensiblement identique à la taxe de vente et est actuellement fixée à 14%, mais peut changer à tout moment.Mise en œuvre d'une stratégie de taxe de vente pour les factures
Je dois inclure la TVA sur les factures (qui sont immuables) consistant en plusieurs lignes de facturation . Chaque ligne référence un Product
avec une propriété booléenne, IsTaxable
, et presque tous les produits sont taxables. Je ne veux pas stocker les prix hors taxes dans la base de données, car cela rend difficile la lecture du prix réel que le client va payer et, partout où j'affiche ces prix, je dois me souvenir de ajouter une taxe. Et lorsque le taux de TVA change, pour cette entreprise particulière, il n'est pas souhaitable que tous les prix changent automatiquement. Donc, je pense qu'un calcul de la taxe sur l'impôt est la voie à suivre et probablement pas rare. Le total de la facture correspond à la somme de tous les totaux des lignes de facture, qui inclut les remises de ligne et doit être compris dans les taxes. Par conséquent, la facture totale elle-même est TTC:
TaxTotal = InvoiceTotal/(1 + TaxRate),
où InvoiceTotal
est TTC et TaxRate == 0.14
Puisque les factures ne peuvent pas être modifiés une fois émis (ils sont immuables), dois-je:
- Stockez un seul montant
Tax
dans mon tableauInvoices
qui ne change pas? Ou ... - Enregistrer un montant de taxe pour chaque ligne de facture et calculer le total de la taxe de facturation chaque fois que j'affiche la facture?
Option 2 semble plus sûr d'un point de vue DBA depuis si une facture est toujours modifié manuellement, la taxe sera calculée correctement, mais si la facture a déjà été émis, cela présente toujours un problème d'incohérence. Si je m'en tiens à l'option 1, je ne peux pas afficher de taxe pour un seul élément de ligne, mais cela facilite la gestion du total des taxes et facilite les calculs agrégés, mais présente également des incohérences si jamais elles sont modifiées.
Je ne peux pas faire les deux puisque cela serait la duplication des données.
- Quel est le bon chemin à parcourir? Ou est-ce qu'un calcul d'impôt inverse est une très mauvaise idée?
+1. En Europe, pour certaines entreprises, il peut y avoir des taux différents pour différentes familles de produits, donc je stocke FamilyId dans la table Products, et le TaxCode dans la table Families. Le taux est stocké dans la table TVA. J'ajoute également une catégorie Vat aux clients, car certains clients peuvent payer 0% dans certains cas. De plus, certaines factures peuvent contenir des taux de TVA différents sur différentes lignes. –