feat(sql): agregar script para completar nombres de snapshots fiscales en proforma_items
This commit is contained in:
parent
d57b71c200
commit
42b197c16d
127
docs/customer-invoices/sql/backfill-proforma-item-tax-names.sql
Normal file
127
docs/customer-invoices/sql/backfill-proforma-item-tax-names.sql
Normal file
@ -0,0 +1,127 @@
|
||||
-- Completa los nombres de los snapshots fiscales de proforma_items.
|
||||
--
|
||||
-- Fuente: tax_definitions vigente (misma company_id y code).
|
||||
-- Seguridad:
|
||||
-- * Solo completa iva_name, rec_name y retention_name vacíos o NULL.
|
||||
-- * No modifica códigos, porcentajes, escalas ni importes.
|
||||
-- * No inventa nombres: los códigos sin TaxDefinition no se actualizan.
|
||||
--
|
||||
-- Ejecutar primero los SELECT de diagnóstico. Ejecutar el UPDATE dentro de una
|
||||
-- transacción únicamente después de revisar los resultados.
|
||||
|
||||
-- Diagnóstico: filas que el backfill completará.
|
||||
SELECT
|
||||
pi.item_id,
|
||||
pi.proforma_id,
|
||||
p.company_id,
|
||||
pi.iva_code,
|
||||
iva.name AS iva_name_source,
|
||||
pi.rec_code,
|
||||
rec.name AS rec_name_source,
|
||||
pi.retention_code,
|
||||
retention.name AS retention_name_source
|
||||
FROM proforma_items pi
|
||||
INNER JOIN proformas p ON p.id = pi.proforma_id
|
||||
LEFT JOIN tax_definitions iva
|
||||
ON iva.company_id = p.company_id
|
||||
AND iva.code = pi.iva_code
|
||||
AND iva.deleted_at IS NULL
|
||||
LEFT JOIN tax_definitions rec
|
||||
ON rec.company_id = p.company_id
|
||||
AND rec.code = pi.rec_code
|
||||
AND rec.deleted_at IS NULL
|
||||
LEFT JOIN tax_definitions retention
|
||||
ON retention.company_id = p.company_id
|
||||
AND retention.code = pi.retention_code
|
||||
AND retention.deleted_at IS NULL
|
||||
WHERE (NULLIF(TRIM(pi.iva_name), '') IS NULL AND NULLIF(TRIM(pi.iva_code), '') IS NOT NULL AND iva.id IS NOT NULL)
|
||||
OR (NULLIF(TRIM(pi.rec_name), '') IS NULL AND NULLIF(TRIM(pi.rec_code), '') IS NOT NULL AND rec.id IS NOT NULL)
|
||||
OR (
|
||||
NULLIF(TRIM(pi.retention_name), '') IS NULL
|
||||
AND NULLIF(TRIM(pi.retention_code), '') IS NOT NULL
|
||||
AND retention.id IS NOT NULL
|
||||
);
|
||||
|
||||
-- Diagnóstico: códigos con nombre vacío que no tienen una TaxDefinition disponible.
|
||||
-- Estas filas se preservan sin cambios y requieren una decisión de recuperación manual.
|
||||
SELECT
|
||||
pi.item_id,
|
||||
pi.proforma_id,
|
||||
p.company_id,
|
||||
CASE
|
||||
WHEN NULLIF(TRIM(pi.iva_name), '') IS NULL AND NULLIF(TRIM(pi.iva_code), '') IS NOT NULL AND iva.id IS NULL
|
||||
THEN pi.iva_code
|
||||
END AS missing_iva_definition_code,
|
||||
CASE
|
||||
WHEN NULLIF(TRIM(pi.rec_name), '') IS NULL AND NULLIF(TRIM(pi.rec_code), '') IS NOT NULL AND rec.id IS NULL
|
||||
THEN pi.rec_code
|
||||
END AS missing_rec_definition_code,
|
||||
CASE
|
||||
WHEN NULLIF(TRIM(pi.retention_name), '') IS NULL AND NULLIF(TRIM(pi.retention_code), '') IS NOT NULL AND retention.id IS NULL
|
||||
THEN pi.retention_code
|
||||
END AS missing_retention_definition_code
|
||||
FROM proforma_items pi
|
||||
INNER JOIN proformas p ON p.id = pi.proforma_id
|
||||
LEFT JOIN tax_definitions iva
|
||||
ON iva.company_id = p.company_id
|
||||
AND iva.code = pi.iva_code
|
||||
AND iva.deleted_at IS NULL
|
||||
LEFT JOIN tax_definitions rec
|
||||
ON rec.company_id = p.company_id
|
||||
AND rec.code = pi.rec_code
|
||||
AND rec.deleted_at IS NULL
|
||||
LEFT JOIN tax_definitions retention
|
||||
ON retention.company_id = p.company_id
|
||||
AND retention.code = pi.retention_code
|
||||
AND retention.deleted_at IS NULL
|
||||
WHERE (NULLIF(TRIM(pi.iva_name), '') IS NULL AND NULLIF(TRIM(pi.iva_code), '') IS NOT NULL AND iva.id IS NULL)
|
||||
OR (NULLIF(TRIM(pi.rec_name), '') IS NULL AND NULLIF(TRIM(pi.rec_code), '') IS NOT NULL AND rec.id IS NULL)
|
||||
OR (
|
||||
NULLIF(TRIM(pi.retention_name), '') IS NULL
|
||||
AND NULLIF(TRIM(pi.retention_code), '') IS NOT NULL
|
||||
AND retention.id IS NULL
|
||||
);
|
||||
|
||||
START TRANSACTION;
|
||||
|
||||
UPDATE proforma_items pi
|
||||
INNER JOIN proformas p ON p.id = pi.proforma_id
|
||||
LEFT JOIN tax_definitions iva
|
||||
ON iva.company_id = p.company_id
|
||||
AND iva.code = pi.iva_code
|
||||
AND iva.deleted_at IS NULL
|
||||
LEFT JOIN tax_definitions rec
|
||||
ON rec.company_id = p.company_id
|
||||
AND rec.code = pi.rec_code
|
||||
AND rec.deleted_at IS NULL
|
||||
LEFT JOIN tax_definitions retention
|
||||
ON retention.company_id = p.company_id
|
||||
AND retention.code = pi.retention_code
|
||||
AND retention.deleted_at IS NULL
|
||||
SET
|
||||
pi.iva_name = CASE
|
||||
WHEN NULLIF(TRIM(pi.iva_name), '') IS NULL AND NULLIF(TRIM(pi.iva_code), '') IS NOT NULL AND iva.id IS NOT NULL
|
||||
THEN iva.name
|
||||
ELSE pi.iva_name
|
||||
END,
|
||||
pi.rec_name = CASE
|
||||
WHEN NULLIF(TRIM(pi.rec_name), '') IS NULL AND NULLIF(TRIM(pi.rec_code), '') IS NOT NULL AND rec.id IS NOT NULL
|
||||
THEN rec.name
|
||||
ELSE pi.rec_name
|
||||
END,
|
||||
pi.retention_name = CASE
|
||||
WHEN NULLIF(TRIM(pi.retention_name), '') IS NULL AND NULLIF(TRIM(pi.retention_code), '') IS NOT NULL AND retention.id IS NOT NULL
|
||||
THEN retention.name
|
||||
ELSE pi.retention_name
|
||||
END
|
||||
WHERE (NULLIF(TRIM(pi.iva_name), '') IS NULL AND NULLIF(TRIM(pi.iva_code), '') IS NOT NULL AND iva.id IS NOT NULL)
|
||||
OR (NULLIF(TRIM(pi.rec_name), '') IS NULL AND NULLIF(TRIM(pi.rec_code), '') IS NOT NULL AND rec.id IS NOT NULL)
|
||||
OR (
|
||||
NULLIF(TRIM(pi.retention_name), '') IS NULL
|
||||
AND NULLIF(TRIM(pi.retention_code), '') IS NOT NULL
|
||||
AND retention.id IS NOT NULL
|
||||
);
|
||||
|
||||
-- Revisar ROW_COUNT() y los dos diagnósticos anteriores antes de confirmar.
|
||||
-- COMMIT;
|
||||
-- ROLLBACK;
|
||||
Loading…
Reference in New Issue
Block a user