2010-12-07 10 views
5

Aquí en Sudáfrica tenemos el impuesto al valor agregado (IVA) que es prácticamente idéntico al impuesto a las ventas y actualmente está fijado al 14%, pero podría cambiar en cualquier momento.Implementación de una estrategia de impuesto a las ventas para Facturas

Necesito incluir el IVA en las facturas (que son inmutables) que consisten en varias líneas de factura . Cada línea hace referencia a Product con una propiedad booleana, IsTaxable, y casi todos los productos están sujetos a impuestos.

No quiero almacenar precios antes de impuestos en la base de datos, porque eso hace que sea difícil leer el precio real que el cliente va a pagar y en todos los lugares en que muestre esos precios, entonces tengo que recordar agregar impuestos Y cuando la tasa de IVA cambia, para este negocio en particular, no es deseable que todos los precios cambien automágicamente.

Así que creo que un cálculo de impuestos inversos es el camino a seguir y probablemente no sea poco común. El total de la factura es la suma de todos los totales de la línea de factura, que incluye los descuentos de línea y debe incluir los impuestos. Por tanto, el total de la factura en sí es con impuestos incluidos:

TaxTotal = InvoiceTotal/(1 + TaxRate), 

donde InvoiceTotal incluye los impuestos y TaxRate == 0.14

Dado que las facturas no se pueden cambiar una vez emitidos (que son inmutables), deben I:

  1. ¿Almacenar una sola cantidad Tax en mi tabla Invoices que no cambia? O ...
  2. ¿Almacena un importe de impuestos para cada línea de factura y calcula el total del impuesto a la factura cada vez que muestre la factura?

Opción 2 parece más a salvo de un DBA punto de vista ya que si una factura es cada vez cambiado manualmente, entonces impuesto se calcula correctamente, pero si la factura ya se ha emitido, esto todavía presenta un problema de inconsistencia Si sigo con la opción 1, no puedo mostrar el impuesto para una sola línea de pedido, pero hace que sea más fácil administrar el impuesto total y hacer cálculos agregados, aunque también presenta incoherencias si alguna vez cambia.

No puedo hacer ambas cosas, ya que eso sería duplicar datos.

  • ¿Cuál es el camino correcto a seguir? ¿O es un cálculo de impuestos inversos una mala idea?

Respuesta

4

Almacene el valor antes de impuestos en la base de datos, también puede almacenar el valor con impuestos y usarlo para la mayoría de los casos de uso.

Th gran problema que preveo son las reglas de redondeo para el IVA en las facturas. Estas (al menos en el Reino Unido) son muy estrictas y no hay forma de que su cálculo inverso lo haga bien.

También necesita almacenar el artículo de impuesto por artículo ya que los dragones de IVA esperarán que reembolse exactamente el impuesto pagado si se devuelve un artículo. Realmente necesita conocer las reglas del impuesto a las ventas locales antes de comenzar.

Mi experiencia es que puede ser arrastrado sobre las brasas si sus cálculos se agotan por tan solo un centavo, y, si es auditado, debe ser capaz de mostrar cómo llegó a la cifra del IVA para no almacenar cualquier cosa utilizada en tus cálculos te atrapará.

+2

+1. En Europa, para ciertos negocios, puede haber diferentes tarifas para diferentes familias de productos, así que almaceno el FamilyId en la tabla Products, y el TaxCode en la tabla Families. La tasa se almacena en la tabla de IVA. También agregué una categoría de VatCategory a los clientes, porque algunos clientes pueden pagar 0% en algunos casos. Además, algunas facturas pueden contener diferentes tasas de IVA en diferentes líneas. –

1

Estoy totalmente de acuerdo con James Anderson! En Alemania, las reglas según los cálculos del IVA son tan estrictas como en el Reino Unido.

Tenemos que acumular el valor neto por porcentaje de IVA (tenemos tres tipos: 0, 7 y 19 por ciento) redondeado por dos dígitos. En este valor redondeado tenemos que calcular el IVA. El IVA debe redondearse en dos dígitos y debe mostrarse en la factura.

Pero no obstante, puede almacenar precios con impuestos incluidos. Depende de si los precios netos o los precios finales se mantienen sin cambios cuando aumentan los impuestos. En Alemania, por lo general, los precios netos B2B no cambian, pero los precios finales B2C se mantienen sin cambios, depende.

se puede calcular de esta manera:

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 guarda esto como una vista que debe ser capaz de volver a imprimir un valor calculado dinámicamente IVA exactamente. Cuando hay un sistema de contabilidad, puede (y debe) exportar exactamente los mismos datos que imprimió. Normalmente debería guardar valores como estos como valores de campo dentro de la base de datos, pero entiendo si desea tener un enfoque más dinámico ...

0

Las otras respuestas son buenas, pero como menciona idevlop, es casi una certeza de que en algún momento en el futuro, comenzará a tener diferentes tasas para diferentes categorías de productos. Agregar esa capacidad por adelantado le ahorrará un montón de dolores de cabeza más adelante. Estado allí, hecho eso.

Cuestiones relacionadas