2010-12-07 2 views
5

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), 

InvoiceTotal est TTC et TaxRate == 0.14

Puisque les factures ne peuvent pas être modifiés une fois émis (ils sont immuables), dois-je:

  1. Stockez un seul montant Tax dans mon tableau Invoices qui ne change pas? Ou ...
  2. 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?

Répondre

4

Stockez la valeur pré-taxe dans la base de données, vous pouvez également stocker la valeur avec taxe et l'utiliser pour la plupart des cas d'utilisation.

Le gros problème Je prévois des règles d'arrondis pour la TVA sur les factures. Celles-ci (au moins au Royaume-Uni) sont vraiment strictes et il n'y a aucun moyen pour que votre calcul inverse fonctionne correctement.

Vous devez également stocker la taxe article par article car les dragons de TVA s'attendent à ce que vous remboursiez exactement la taxe payée si un article est retourné. Vous devez vraiment vous procurer les règles de la taxe de vente locale avant de commencer. D'après mon expérience, vous pouvez vous faire traîner par-dessus les charbons si vos calculs ne dépassent pas un centime, et si vous êtes audités, vous devez être en mesure de montrer comment vous êtes arrivé à la TVA et de ne pas les stocker. tout ce qui est utilisé dans vos calculs vous attrapera.

+2

+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. –

1

Je suis totalement d'accord avec James Anderson! En Allemagne, les règles en matière de calcul de la TVA sont aussi strictes qu'au Royaume-Uni.

Nous devons accumuler la valeur nette par pourcentage de TVA (nous avons trois types: 0, 7 et 19 pour cent) arrondie à deux chiffres. Sur cette valeur arrondie, nous devons calculer la TVA. La TVA doit être arrondie à deux chiffres et doit figurer sur la facture.

Mais vous pouvez néanmoins stocker les prix, y compris les taxes. Cela dépend si les prix nets ou les prix finaux restent inchangés lorsque la taxe augmente. En Allemagne, les prix nets B2B restent généralement inchangés, mais les prix finaux B2C restent inchangés - cela dépend.

Vous pouvez calculer cette façon:

with cPriceIncludingVAT as (
    select InvoiceNo, VATPercentage, 
      PriceIncludingVAT = cast(sum(amount * price) as decimal(12,2)) 
    from InvoiceLines inner join VAT on VAT.VATID=InvoiceLines.VATID 
    group by InvoiceNo, VATPercentage 
), 
cVATcalculated as (
    select InvoiceNo, VATPercentage, PriceIncludingVAT, 
      VAT = cast(PriceIncludingVAT * VATPercentage/
         (1+VATPercentage) as decimal(12,2)) 
    from cVATcalculated 
) 
select InvoiceNo, VATPercentage, PriceIncludingVAT, VAT, 
      NetPrice = PriceIncludingVAT - VAT 
from  cVATcalculated; 

Si vous enregistrez cela comme une vue, vous devriez être en mesure de reproduire une valeur de TVA calculée dynamiquement exactement. Quand il y a un système de comptabilité, vous pouvez (et devriez) exporter exactement les mêmes données que vous avez imprimées. Habituellement, vous devriez enregistrer des valeurs comme celles-ci comme valeurs de champs dans la base de données - mais je comprends si vous souhaitez avoir une approche plus dynamique ...

0

Les autres réponses sont bonnes, mais comme le mentionne idevlop, c'est presque un certitude qu'à un moment donné dans le futur, vous commencerez à avoir des taux différents pour différentes catégories de produits. L'ajout de cette capacité à l'avance vous épargnera une tonne de chagrin plus tard. Été là, fait cela.