Skip to content

feat: emitir notas de crédito y débito electrónicas - #1

Merged
seb5433 merged 1 commit into
mainfrom
feat/nota-credito-debito
Jul 27, 2026
Merged

feat: emitir notas de crédito y débito electrónicas#1
seb5433 merged 1 commit into
mainfrom
feat/nota-credito-debito

Conversation

@seb5433

@seb5433 seb5433 commented Jul 27, 2026

Copy link
Copy Markdown
Contributor

Qué

Agrega soporte para emitir notas de crédito (NOTA_DE_CREDITO_ELECTRONICA) y notas de débito (NOTA_DE_DEBITO_ELECTRONICA) desde el CLI, vía el mismo comando emitir (por archivo y en modo interactivo).

Por qué

El CLI ya listaba NC/ND en el menú interactivo y el endpoint polimórfico las soporta, pero el wizard siempre construía un payload con forma de factura y el validador exigía condicionOperacion, así que las NC/ND nunca se podían emitir. El backend requiere, para NC/ND, dos campos que la factura no lleva —motivoEmision y documentoAsociado— y que no se envíe condicionOperacion/condicionPago.

Cambios

Comportamiento

  • utils/validation.py: validación local según tipoDocumento.
    • Factura → sigue requiriendo condicionOperacion.
    • NC/ND → requieren motivoEmision (valor válido del enum SIFEN TiMotEmi) y un documentoAsociado ELECTRONICO con CDC de 44 dígitos. Nuevo helper validate_documento_asociado, espejo del DocumentoAsociadoValidator del backend.
  • interactive.py: al elegir NC (2) o ND (3), el wizard pide el motivo y el CDC de la factura asociada, y omite los campos exclusivos de factura.
  • commands/emitir.py: usa los nuevos nombres.
  • Se mantienen validate_factura_payload y build_factura_interactive como alias de validate_documento_payload / build_documento_interactive.

DX / assets

  • Samples sample_nota_credito.json y sample_nota_debito.json.
  • Targets make nota-credito / make nota-debito (vars FILE_NC / FILE_ND).
  • README y CHANGELOG actualizados.

Tests

  • tests/test_nota_validation.py (10 casos) y tests/test_interactive.py (flujos scripteados de NC/ND/factura + alias). Suite completa: 38 passed.

Nota para el revisor

Los samples usan un CDC placeholder en documentoAsociado.cdc. Para emitir contra SIFEN hay que reemplazarlo por el CDC de una factura real ya aprobada — la validación local sólo verifica que sean 44 dígitos.

El comando `emitir` ahora soporta NOTA_DE_CREDITO_ELECTRONICA y
NOTA_DE_DEBITO_ELECTRONICA, tanto por archivo como en modo interactivo.

- Validación local dependiente de tipoDocumento: la factura sigue
  requiriendo condicionOperacion; las NC/ND requieren motivoEmision
  (enum SIFEN TiMotEmi) y un documentoAsociado ELECTRONICO con CDC de
  44 dígitos (espejo del DocumentoAsociadoValidator del backend).
- El wizard interactivo pide motivo y CDC del documento asociado al
  elegir NC (2) o ND (3), y omite los campos exclusivos de factura.
- Nuevos samples sample_nota_credito.json y sample_nota_debito.json.
- Targets make nota-credito / nota-debito (vars FILE_NC / FILE_ND).
- validate_factura_payload / build_factura_interactive quedan como
  alias de las nuevas validate_documento_payload /
  build_documento_interactive.
- Tests de validación e interactivo para NC/ND.
@seb5433
seb5433 merged commit c5e7d20 into main Jul 27, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant