FactuGES_ERP/docs/customer-invoices/sql/README.md
david e0ba5ef229 feat: add proforma duplicator service and related tests
- Implemented ProformaDuplicator service for duplicating proforma documents.
- Added tests for duplicating proformas, including scenarios for successful duplication, audit failure propagation, and payment term adaptations.
- Created ProformaStatusChanger service to handle status changes of proformas with corresponding tests.
- Developed ProformaArchiver service for unarchiving proformas and added tests to verify functionality.
- Introduced a test fixture for creating proforma instances for testing purposes.
2026-08-26 13:03:39 +02:00

3.3 KiB

SQL Customer Invoices

Estado

Este directorio mezcla SQL vigentes de soporte con SQL historicos/transicionales.

Las tablas legacy customer_invoices, customer_invoice_items y customer_invoice_taxes no forman parte del runtime actual. Solo pueden aparecer en SQL historico de migracion o validacion.

Regla SSOT relevante para VeriFactu:

  • issued_invoices no debe reintroducir verifactu_profile_status, uses_verifactu ni verifactu_effective_at como columnas vigentes;
  • la cardinalidad implementada sigue siendo IssuedInvoice 1 -> 0..1 VerifactuRecord;
  • 0..N es objetivo futuro, no estado operativo actual.

SQL vigentes

  • add-company-verifactu-profiles.sql
  • add-proforma-document-series-columns.sql
  • add-proforma-tax-config-columns.sql
  • add-issued-invoice-reference.sql
  • normalize-document-series-snapshots.sql
  • fix-proforma-series-semantics.sql
  • validate-proforma-tax-config.sql
  • validate-proforma-soft-delete.sql

SQL históricos / transicionales

  • add-issued-invoice-verifactu-snapshots.sql
  • drop-issued-invoice-verifactu-snapshot-columns.sql
  • dev-split-proformas-issued-invoices.sql
  • validate-split-proformas-issued-invoices.sql

Estos archivos no deben tratarse como el camino normal de entornos nuevos salvo que exista un escenario legacy concreto que los requiera.

Orden recomendado en desarrollo para el estado vigente

  1. Verificar que la BD objetivo es inequívocamente de desarrollo.
  2. Hacer backup o confirmar que los datos son descartables.
  3. Ejecutar add-company-verifactu-profiles.sql si el entorno aún no tiene el perfil VeriFactu empresarial.
  4. Ejecutar el DDL vigente que falte para proformas.
  5. Ejecutar normalize-document-series-snapshots.sql para completar snapshots y validaciones de seriado.
  6. Ejecutar las validaciones SQL vigentes.
  7. Levantar backend V2 y validar flujos funcionales.

SQL expresamente superados para VeriFactu en issued_invoices

  • add-issued-invoice-verifactu-snapshots.sql responde a una propuesta anterior que mezclaba snapshots fiscales con un verifactuPolicy hoy descartado.
  • drop-issued-invoice-verifactu-snapshot-columns.sql se conserva como runbook correctivo para entornos legacy donde esas columnas todavía existan.

Propiedades de los scripts históricos de split

  • Crea tablas con CREATE TABLE IF NOT EXISTS.
  • Añade verifactu_records.issued_invoice_id con ALTER TABLE ... ADD COLUMN IF NOT EXISTS.
  • Conserva UUIDs legacy.
  • No borra ni modifica datos legacy.
  • Usa NOT EXISTS para evitar duplicados en reejecuciones.
  • No usa INSERT IGNORE.

Cuándo no ejecutar

No ejecutar si:

  • no existe una configuración de desarrollo clara
  • hay duda sobre si la BD es producción
  • no existe backup verificable
  • el entorno no tiene aún las credenciales/localización confirmadas

Procedimiento preliminar de producción

No ejecutar todavía. Referencia operativa:

  1. Backup verificado.
  2. Ventana de mantenimiento.
  3. Bloquear escrituras del backend.
  4. Ejecutar create tables / columnas transicionales.
  5. Ejecutar backfill idempotente y conservador.
  6. Ejecutar validaciones SQL.
  7. Desplegar backend con wiring V2.
  8. Monitorizar errores y métricas.
  9. Mantener legacy congelado para rollback y auditoría.
  10. Ejecutar rollback según punto de corte si alguna validación falla.