Saltar al contenido principal
EasyVerifactu garantiza que los importes que aparecen en tus facturas coincidan exactamente con lo que PrestaShop registró y mostró a tus clientes. Esta página explica cómo gestionamos los redondeos de PrestaShop para asegurar precisión total.

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_mode y round_type)
  • Métodos de cálculo de impuestos
  • Configuración de precisión de divisas
  • Interacciones entre múltiples artículos
Debido a esto, recalcular totales a partir de precios unitarios y cantidades puede producir discrepancias de redondeo que no coinciden con los valores que PrestaShop almacenó y mostró a tus clientes.

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
La diferencia de €0.001 parece pequeña, pero estos pequeños errores se acumulan a lo largo de múltiples artículos y pueden causar fallos en la validación de facturas. Esto es especialmente crítico con requisitos estrictos como el sistema Verifactu de España.

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 tabla order_details de PrestaShop:
  • Leemos total_price_tax_incl y total_price_tax_excl de 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.
Esto respeta exactamente cómo PrestaShop aplicó sus reglas de redondeo a cada línea de producto.

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_incl del objeto order.
  • Descuentos/Cupones: Usa total_discounts_tax_incl del objeto order.
  • Wrapping/Gift wrap: Usa total_wrapping_tax_incl del objeto order.
Estos valores ya incorporan los redondeos y reglas de impuestos configuradas en PrestaShop.

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_details referencia una línea específica de order_details mediante id_order_detail.
  • Nuestro sistema resta estos importes de reembolso de los totales originales para calcular el importe neto.
Ejemplo:
Pedido original: 150€ (permanece sin cambios en la base de datos)
→ order_slip creado: -50€
→ Sistema calcula neto: 150€ - 50€ = 100€
El pedido siempre muestra 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:
  1. El pedido original permanece intacto: Los campos total_paid, total_paid_tax_incl, y total_paid_tax_excl nunca cambian.
  2. Se crea un order_slip independiente: Este documento representa el reembolso.
  3. Los detalles se vinculan: La tabla order_slip_details contiene las líneas reembolsadas, cada una referenciando el id_order_detail correspondiente.
Esta arquitectura garantiza trazabilidad completa y auditoría precisa.

Múltiples reembolsos parciales

Un pedido puede tener varios order_slips asociados. Por ejemplo:
Pedido original: 200€
→ Cliente devuelve producto A: order_slip #1 por -50€
→ Cliente devuelve producto B: order_slip #2 por -30€
→ Importe neto final: 200€ - 50€ - 30€ = 120€
Nuestro sistema:
  • 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:
ps_orders (pedido original)

ps_order_detail (líneas de producto originales)
    ↓ (referenciado por id_order_detail)
ps_order_slip_detail (líneas reembolsadas)

ps_order_slip (nota de crédito)
Esta estructura permite:
  • 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
…puede resultar en rechazos y problemas de cumplimiento normativo. Usar los totales precalculados de PrestaShop garantiza esta precisión obligatoria. Gestiona casos especiales PrestaShop a veces aplica redondeos especiales en escenarios como:
  • Descuentos por volumen
  • Precios con impuestos incluidos y descuentos porcentuales
  • Múltiples tipos de impuestos en un único pedido
  • Conversiones de divisas
Usando sus totales precalculados, estos casos se manejan correctamente sin necesidad de lógica especial. Consistencia en auditorías Los importes en las facturas generadas coinciden exactamente con lo que se almacena en tu base de datos de PrestaShop, lo que facilita auditorías financieras y reconciliación. Esta trazabilidad perfecta es especialmente importante cuando:
  • Tienes múltiples reembolsos parciales (varios order_slips por 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_incl y total_price_tax_excl de la tabla ps_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 × quantity para evitar discrepancias de redondeo.

2. Componentes a nivel de pedido (order)

Para elementos que afectan al total del pedido:
  • Lee total_shipping_tax_incl y total_shipping_tax_excl del objeto order para los gastos de envío.
  • Lee total_discounts_tax_incl y total_discounts_tax_excl para descuentos y cupones.
  • Lee total_wrapping_tax_incl y total_wrapping_tax_excl para envoltorio de regalo.
Estos se añaden como líneas separadas en la factura, no como ajustes a líneas de producto.

3. Ajustes de notas de crédito (order_slips)

Para reembolsos y devoluciones:
  • Consulta la tabla ps_order_slip para encontrar todas las notas de crédito asociadas al pedido.
  • Para cada order_slip, lee ps_order_slip_detail para obtener los importes reembolsados por línea.
  • Vincula cada order_slip_detail con su order_detail original mediante id_order_detail.
  • Resta los importes reembolsados de los totales originales para calcular el importe neto.
  • Agrega múltiples order_slips si existen varios reembolsos parciales.

Flujo de cálculo completo

1. Suma líneas de producto (de order_details)
2. Añade componentes de pedido (shipping, discounts, wrapping)
3. Resta reembolsos agregados (de order_slips)
4. Resultado = Importe neto facturado
Esto garantiza que cada céntimo coincida entre tu tienda de PrestaShop y tus facturas generadas, proporcionando precisión completa para cumplimiento fiscal y reportes financieros.
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.