fix: render impuesto exento rows in invoice PDF template#67
Merged
satcfdi merged 6 commits intoMay 15, 2026
Conversation
Fix: evitar uso recursivo de cursores en SQLite usando cursores locales
When TipoFactor is 'Exento', the SAT spec does not include TasaOCuota or Importe attributes. The template was silently skipping these rows because the Importe cell rendered as empty/undefined. This fix adds a conditional check for TipoFactor == 'Exento' in both the per-concept tax breakdown and the totals section, displaying 'Exento' label instead of empty tasa/importe cells.
…nflict) Accept upstream changes: use try/finally for cursor cleanup and pickle protocol=4 in select(). No logic changes from our fix branch.
When TipoFactor is 'Exento', the SAT spec does not include TasaOCuota or Importe attributes. The template was silently skipping these rows because the Importe cell rendered as empty/undefined. This fix adds a conditional check for TipoFactor == 'Exento' in both the per-concept tax breakdown and the totals section, displaying 'Exento' label instead of empty tasa/importe cells.
…nflict) Accept upstream changes: use try/finally for cursor cleanup and pickle protocol=4 in select(). No logic changes from our fix branch.
…/alexmbar/python-satcfdi into fix/exento-impuesto-pdf-template
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.
Problema
La plantilla
Conceptos.htmlno renderizaba correctamente las filas de impuestos cuandoTipoFactores'Exento'.Según la especificación del SAT para CFDI 4.0, cuando un traslado tiene
TipoFactor="Exento", los atributosTasaOCuotaeImporteno están presentes en el XML. Esto provocaba que:Undefined→ ).Solución
Se agrega una condición
{% if v.TipoFactor == 'Exento' %}en dos lugares del template:Cuando
TipoFactor == 'Exento', se muestra el textoExentoen la columna de Tasa o Cuota y la celda de Importe queda vacía (comportamiento correcto, sinTasaOCuotaniImporte).Cambios
satcfdi/render/templates/Conceptos.html: manejo deTipoFactor == 'Exento'en traslados.Referencia SAT
Especificación CFDI 4.0 — Nodo
Traslado: