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:
- ¿Almacenar una sola cantidad
Tax
en mi tablaInvoices
que no cambia? O ... - ¿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?
+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. –