-- Estado: vigente / manual. -- Objetivo: -- 1. Anadir `issued_invoices.invoice_reference` si no existe. -- 2. Backfill conservador para facturas emitidas existentes. -- 3. Validar que no quedan filas sin snapshot documental. -- 4. Endurecer a NOT NULL cuando la validacion sea correcta. -- -- No ejecutar automaticamente desde backend. -- Revisar antes el nombre real de la tabla `document_series` y sus columnas -- `prefix`, `padding`, `suffix` en el entorno objetivo. START TRANSACTION; ALTER TABLE issued_invoices ADD COLUMN IF NOT EXISTS invoice_reference VARCHAR(64) NULL AFTER invoice_number; UPDATE issued_invoices ii JOIN document_series ds ON ds.company_id = ii.company_id AND ds.code = ii.invoice_series_code AND ds.document_type = 'issued_invoice' SET ii.invoice_reference = CONCAT( COALESCE(ds.prefix, ''), LPAD(CAST(ii.invoice_number AS CHAR), ds.padding, '0'), COALESCE(ds.suffix, '') ) WHERE ii.invoice_reference IS NULL; SELECT id, source_proforma_id, invoice_series_code, invoice_number, invoice_reference FROM issued_invoices WHERE invoice_reference IS NULL; SELECT ii.id, ii.invoice_series_code, ii.invoice_number, ii.invoice_reference, ds.prefix, ds.padding, ds.suffix FROM issued_invoices ii JOIN document_series ds ON ds.company_id = ii.company_id AND ds.code = ii.invoice_series_code AND ds.document_type = 'issued_invoice' ORDER BY ii.created_at DESC LIMIT 20; -- Ejecutar solo cuando la consulta anterior no devuelva filas. ALTER TABLE issued_invoices MODIFY COLUMN invoice_reference VARCHAR(64) NOT NULL; COMMIT;