43 lines
1.8 KiB
Markdown
43 lines
1.8 KiB
Markdown
|
|
# Issued Invoice Series Contract
|
||
|
|
|
||
|
|
## Objetivo
|
||
|
|
|
||
|
|
Definir el contrato backend para la numeracion documental de `issued_invoices`.
|
||
|
|
|
||
|
|
## Snapshot persistido
|
||
|
|
|
||
|
|
Una factura emitida debe persistir estos cuatro datos de numeracion:
|
||
|
|
|
||
|
|
- `document_series_id`
|
||
|
|
- `invoice_series_code`
|
||
|
|
- `invoice_number`
|
||
|
|
- `invoice_reference`
|
||
|
|
|
||
|
|
## Regla operativa
|
||
|
|
|
||
|
|
- `document-series` es la unica fuente de verdad para asignar numeracion de `document_type = issued_invoice`.
|
||
|
|
- `customer-invoices` no recompone manualmente la referencia final si `document-series` ya la devuelve.
|
||
|
|
- `invoice_reference` se calcula en el momento de emision.
|
||
|
|
- `invoice_reference` se persiste como snapshot documental inmutable.
|
||
|
|
- `invoice_reference` no se recalcula despues aunque cambie la configuracion de `document_series`.
|
||
|
|
|
||
|
|
## Emision desde proforma
|
||
|
|
|
||
|
|
- si `target_invoice_series_code` tiene valor, se usa como `seriesCode` de `issued_invoice`
|
||
|
|
- si `target_invoice_series_code` es `NULL`, `document-series` resuelve la serie default activa
|
||
|
|
- la respuesta de `assignNextNumber(...)` debe aportar `series_id`, `series_code`, `number` y `reference`
|
||
|
|
- `issued_invoices` debe persistir `document_series_id`, `invoice_series_code`, `invoice_number` e `invoice_reference`
|
||
|
|
|
||
|
|
## Semantica de campos
|
||
|
|
|
||
|
|
- `document_series_id`: id tecnico de la serie exacta usada al emitir para trazabilidad y backoffice
|
||
|
|
- `invoice_number`: numero secuencial dentro de la serie
|
||
|
|
- `invoice_reference`: referencia final visible/legal compuesta por la serie documental
|
||
|
|
- `reference`: referencia comercial libre del documento, si aplica; no sustituye a `invoice_reference`
|
||
|
|
|
||
|
|
## Regla de no contaminacion
|
||
|
|
|
||
|
|
- `proforma_reference` nunca se reutiliza como `invoice_reference`
|
||
|
|
- `target_invoice_series_code` solo selecciona la serie futura y no es en si mismo la referencia final
|
||
|
|
- no se usa `MAX(invoice_number)` para recomponer numeracion
|