Open
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.


Corrección Errores CFDI40215 y CFDI40221 - Resumen Técnico
Fecha: 5 de noviembre de 2025
Addon: cdfi_invoice
Archivo modificado:
models/account_invoice.pyProblemas Identificados
Error CFDI40215
"El campo Importe correspondiente a Traslado no es igual al redondeo de la suma de los importes de las bases trasladados registrados en los conceptos"
Ejemplo:
Error CFDI40221
"El campo Importe correspondiente a Traslado no es igual al redondeo de la suma de los importes de los impuestos trasladados registrados en los conceptos"
Ejemplo:
Causa Raíz
Problema 1: CFDI40215 (Nivel Línea)
El PAC valida que cada concepto (línea de factura) cumpla:
El código original:
Base: Valor sin redondear (solo formateado)Importe: Monto calculado por Odoo desde base sin redondearConsecuencia: Diferencias acumuladas en facturas con múltiples líneas.
Problema 2: CFDI40221 (Resumen vs Líneas)
El PAC valida que el total en resumen sea exactamente la suma de importes en conceptos.
El código original:
base_línea × tasabase_agrupada × tasaConsecuencia: Inconsistencia entre totales de conceptos vs resumen (diferencias de 0.01).
Solución Implementada
1. Impuestos Trasladados a Nivel Línea (líneas 387-422)
Antes:
Después:
2. Impuestos Retenidos a Nivel Línea (líneas 424-442)
Mismo patrón aplicado para retenciones.
3. Totales Resumen (líneas 586-603)
Antes (causaba CFDI40221):
Después:
Clave: El importe se calcula una sola vez a nivel línea, el resumen lo reutiliza (no lo recalcula).
4. Retenciones Resumen (líneas 609-622)
Cambio clave:
5. Impuestos Locales Traslados (líneas 447-452)
Antes:
Después:
6. Impuestos Locales Retenciones (líneas 454-459)
Mismo patrón aplicado para retenciones locales.
Cambios por Tipo de Factor
importe = ROUND(ROUND(base, 2) × tasa, 2)importe = ROUND(amount, 2)(monto fijo por unidad)Archivos Modificados
Líneas modificadas:
Total de líneas cambiadas: ~60 líneas
Compatibilidad
roundTraditional()existente