El problema del redondeo
PrestaShop utiliza reglas de redondeo específicas al calcular totales de pedidos. Estas reglas varían según:- Configuración de la tienda (parámetros
round_modeyround_type) - Métodos de cálculo de impuestos
- Configuración de precisión de divisas
- Interacciones entre múltiples artículos
Ejemplo práctico
Un producto que cuesta €16.819 (con IVA incluido) con cantidad de 9:- Multiplicación simple: 16.819 × 9 = €151.371
- Total que PrestaShop calculó: €151.370
Cómo se calculan los importes con precisión
En lugar de recalcular los totales, utilizamos exactamente los valores que PrestaShop ya calculó y almacenó. Nuestro sistema trabaja con tres categorías de datos:Líneas de producto (order_details)
Cada producto del pedido se lee directamente de la tablaorder_details de PrestaShop:
- Leemos
total_price_tax_inclytotal_price_tax_exclde cada línea de pedido. - NUNCA recalculamos multiplicando
unit_price × quantity. - Los precios unitarios que mostramos en la factura se calculan dividiendo el total entre la cantidad, pero solo para visualización.
- Los importes de impuestos se derivan de la diferencia:
total_price_tax_incl - total_price_tax_excl.
Componentes a nivel de pedido
Estos elementos NO son líneas de producto, sino totales que se añaden como líneas separadas en la factura:- Envío: Usa
total_shipping_tax_incldel objeto order. - Descuentos/Cupones: Usa
total_discounts_tax_incldel objeto order. - Wrapping/Gift wrap: Usa
total_wrapping_tax_incldel objeto order.
Notas de crédito (order_slips)
Cuando se emite un reembolso en PrestaShop, el pedido original nunca se modifica. En su lugar:- PrestaShop crea un
order_slip(nota de crédito) como entidad separada. - Los detalles del reembolso se almacenan en
order_slip_details. - Cada entrada en
order_slip_detailsreferencia una línea específica deorder_detailsmedianteid_order_detail. - Nuestro sistema resta estos importes de reembolso de los totales originales para calcular el importe neto.
total_paid = 150€, pero el sistema agrega todos los order_slips asociados para determinar el importe neto real.
Gestión de notas de crédito (order_slips)
La arquitectura de reembolsos en PrestaShop es fundamental para entender cómo se mantiene la precisión en las facturas.Cómo funciona PrestaShop con reembolsos
Cuando se procesa un reembolso (parcial o total) en PrestaShop:- El pedido original permanece intacto: Los campos
total_paid,total_paid_tax_incl, ytotal_paid_tax_exclnunca cambian. - Se crea un order_slip independiente: Este documento representa el reembolso.
- Los detalles se vinculan: La tabla
order_slip_detailscontiene las líneas reembolsadas, cada una referenciando elid_order_detailcorrespondiente.
Múltiples reembolsos parciales
Un pedido puede tener variosorder_slips asociados. Por ejemplo:
- Agrega todos los order_slips asociados al pedido.
- Calcula el neto restando los reembolsos del total original.
- Emite factura rectificativa del importe original completo.
- Emite nueva factura por el importe neto actualizado.
Vinculación técnica
La relación entre tablas es:- Reembolsos parciales de líneas específicas.
- Múltiples reembolsos del mismo producto.
- Preservación del historial completo de transacciones.
Por qué este enfoque es robusto
Fuente única de verdad Utilizamos exactamente los valores que PrestaShop muestra a tus clientes. Las facturas siempre coinciden perfectamente con los pedidos. Respeta la configuración de tu tienda Tus parámetros específicos de redondeo (round_mode, round_type) se honran automáticamente porque PrestaShop ya los aplicó. No necesitas configurar nada en EasyVerifactu: simplemente heredamos la configuración de tu tienda.
Evita errores de punto flotante
Al no recalcular, eliminamos el riesgo de acumular errores de aritmética de punto flotante a lo largo de múltiples artículos.
Crítico para cumplimiento Verifactu
El sistema Verifactu de la Agencia Tributaria requiere precisión absoluta hasta el céntimo. Cualquier discrepancia entre:
- Los totales que PrestaShop muestra al cliente
- Los importes en la factura generada
- Los datos enviados a la Agencia Tributaria
- Descuentos por volumen
- Precios con impuestos incluidos y descuentos porcentuales
- Múltiples tipos de impuestos en un único pedido
- Conversiones de divisas
- Tienes múltiples reembolsos parciales (varios
order_slipspor pedido). - Necesitas demostrar el historial completo de transacciones.
- Tu asesor fiscal requiere conciliación entre PrestaShop y facturas emitidas.
Implementación técnica
Nuestro sistema procesa los datos de PrestaShop en tres categorías distintas:1. Líneas de producto (order_details)
Para cada línea de producto en el pedido:- Lee
total_price_tax_inclytotal_price_tax_exclde la tablaps_order_detail. - Calcula precios unitarios dividiendo el total entre la cantidad (solo para visualización en la factura).
- Obtiene importes de impuestos:
total_price_tax_incl - total_price_tax_excl. - NO recalcula usando
unit_price × quantitypara evitar discrepancias de redondeo.
2. Componentes a nivel de pedido (order)
Para elementos que afectan al total del pedido:- Lee
total_shipping_tax_inclytotal_shipping_tax_excldel objeto order para los gastos de envío. - Lee
total_discounts_tax_inclytotal_discounts_tax_exclpara descuentos y cupones. - Lee
total_wrapping_tax_inclytotal_wrapping_tax_exclpara envoltorio de regalo.
3. Ajustes de notas de crédito (order_slips)
Para reembolsos y devoluciones:- Consulta la tabla
ps_order_slippara encontrar todas las notas de crédito asociadas al pedido. - Para cada
order_slip, leeps_order_slip_detailpara obtener los importes reembolsados por línea. - Vincula cada
order_slip_detailcon suorder_detailoriginal medianteid_order_detail. - Resta los importes reembolsados de los totales originales para calcular el importe neto.
- Agrega múltiples
order_slipssi existen varios reembolsos parciales.
Flujo de cálculo completo
Con esta arquitectura, puedes confiar en que tus facturas son precisas hasta el último céntimo, independientemente de cómo PrestaShop esté configurado o cuán complejos sean tus productos y descuentos. Si tienes preguntas sobre cálculos específicos o necesitas entender cómo se aplica esto a tu configuración particular, consulta las Preguntas frecuentes sobre PrestaShop.