Uecko_ERP/docs/customer-invoices/sql/validate-split-proformas-issued-invoices.sql
david 78bb02f9b0 feat: Implement Sequelize mappers and repository for Proforma V2
- Added SequelizeProformaV2RecipientDomainMapper for mapping recipient data to domain model.
- Introduced SequelizeProformaV2TaxesDomainMapper for handling tax data mapping.
- Created SequelizeProformaV2RecipientSummaryMapper for summarizing recipient information.
- Developed SequelizeProformaV2SummaryMapper for mapping Proforma summary data.
- Implemented SequelizeProformaRepositoryV2 for managing Proforma data persistence.
- Added SequelizeProformaV2NumberGenerator for generating Proforma numbers.
2026-07-10 13:59:44 +02:00

174 lines
5.4 KiB
SQL

-- Fase 1D
-- Validaciones SQL tras create/backfill de Proformas / Issued Invoices V2.
-- ---------------------------------------------------------------------------
-- Conteos cabeceras
-- ---------------------------------------------------------------------------
SELECT COUNT(*) AS legacy_proformas
FROM customer_invoices
WHERE is_proforma = 1
AND deleted_at IS NULL;
SELECT COUNT(*) AS new_proformas
FROM proformas
WHERE deleted_at IS NULL;
SELECT COUNT(*) AS legacy_issued_invoices
FROM customer_invoices
WHERE is_proforma = 0
AND deleted_at IS NULL;
SELECT COUNT(*) AS new_issued_invoices
FROM issued_invoices
WHERE deleted_at IS NULL;
-- ---------------------------------------------------------------------------
-- Conteos items
-- ---------------------------------------------------------------------------
SELECT COUNT(*) AS legacy_proforma_items
FROM customer_invoice_items i
JOIN customer_invoices ci ON ci.id = i.invoice_id
WHERE ci.is_proforma = 1
AND ci.deleted_at IS NULL;
SELECT COUNT(*) AS new_proforma_items
FROM proforma_items;
SELECT COUNT(*) AS legacy_issued_invoice_items
FROM customer_invoice_items i
JOIN customer_invoices ci ON ci.id = i.invoice_id
WHERE ci.is_proforma = 0
AND ci.deleted_at IS NULL;
SELECT COUNT(*) AS new_issued_invoice_items
FROM issued_invoice_items;
-- ---------------------------------------------------------------------------
-- Conteos taxes
-- ---------------------------------------------------------------------------
SELECT COUNT(*) AS legacy_proforma_taxes
FROM customer_invoice_taxes t
JOIN customer_invoices ci ON ci.id = t.invoice_id
WHERE ci.is_proforma = 1
AND ci.deleted_at IS NULL;
SELECT COUNT(*) AS new_proforma_taxes
FROM proforma_taxes;
SELECT COUNT(*) AS legacy_issued_invoice_taxes
FROM customer_invoice_taxes t
JOIN customer_invoices ci ON ci.id = t.invoice_id
WHERE ci.is_proforma = 0
AND ci.deleted_at IS NULL;
SELECT COUNT(*) AS new_issued_invoice_taxes
FROM issued_invoice_taxes;
-- ---------------------------------------------------------------------------
-- Duplicados fiscales
-- ---------------------------------------------------------------------------
SELECT company_id, invoice_series_code, invoice_number, COUNT(*) AS total
FROM issued_invoices
GROUP BY company_id, invoice_series_code, invoice_number
HAVING COUNT(*) > 1;
-- ---------------------------------------------------------------------------
-- Huérfanos
-- ---------------------------------------------------------------------------
SELECT COUNT(*) AS issued_without_source
FROM issued_invoices ii
LEFT JOIN proformas p ON p.id = ii.source_proforma_id
WHERE ii.source_proforma_id IS NOT NULL
AND p.id IS NULL;
SELECT COUNT(*) AS proforma_items_without_header
FROM proforma_items pi
LEFT JOIN proformas p ON p.id = pi.proforma_id
WHERE p.id IS NULL;
SELECT COUNT(*) AS issued_items_without_header
FROM issued_invoice_items iii
LEFT JOIN issued_invoices ii ON ii.id = iii.issued_invoice_id
WHERE ii.id IS NULL;
SELECT COUNT(*) AS proforma_taxes_without_header
FROM proforma_taxes pt
LEFT JOIN proformas p ON p.id = pt.proforma_id
WHERE p.id IS NULL;
SELECT COUNT(*) AS issued_taxes_without_header
FROM issued_invoice_taxes iit
LEFT JOIN issued_invoices ii ON ii.id = iit.issued_invoice_id
WHERE ii.id IS NULL;
-- ---------------------------------------------------------------------------
-- Verifactu
-- ---------------------------------------------------------------------------
SELECT COUNT(*) AS orphan_verifactu_records
FROM verifactu_records vr
LEFT JOIN issued_invoices ii ON ii.id = vr.issued_invoice_id
WHERE vr.issued_invoice_id IS NOT NULL
AND ii.id IS NULL;
SELECT COUNT(*) AS legacy_invoice_links_pending
FROM verifactu_records vr
JOIN customer_invoices ci ON ci.id = vr.invoice_id
WHERE ci.is_proforma = 0
AND vr.invoice_id IS NOT NULL
AND vr.issued_invoice_id IS NULL;
-- ---------------------------------------------------------------------------
-- Totales monetarios
-- ---------------------------------------------------------------------------
SELECT
SUM(ci.total_amount_value) AS legacy_proformas_total_amount_value,
SUM(p.total_amount_value) AS new_proformas_total_amount_value
FROM customer_invoices ci
LEFT JOIN proformas p ON p.id = ci.id
WHERE ci.is_proforma = 1
AND ci.deleted_at IS NULL;
SELECT
SUM(ci.total_amount_value) AS legacy_issued_total_amount_value,
SUM(ii.total_amount_value) AS new_issued_total_amount_value
FROM customer_invoices ci
LEFT JOIN issued_invoices ii ON ii.id = ci.id
WHERE ci.is_proforma = 0
AND ci.deleted_at IS NULL;
SELECT
SUM(ci.taxable_amount_value) AS legacy_proformas_taxable_amount_value,
SUM(p.taxable_amount_value) AS new_proformas_taxable_amount_value
FROM customer_invoices ci
LEFT JOIN proformas p ON p.id = ci.id
WHERE ci.is_proforma = 1
AND ci.deleted_at IS NULL;
SELECT
SUM(ci.taxable_amount_value) AS legacy_issued_taxable_amount_value,
SUM(ii.taxable_amount_value) AS new_issued_taxable_amount_value
FROM customer_invoices ci
LEFT JOIN issued_invoices ii ON ii.id = ci.id
WHERE ci.is_proforma = 0
AND ci.deleted_at IS NULL;
-- ---------------------------------------------------------------------------
-- Enlaces clave de negocio
-- ---------------------------------------------------------------------------
SELECT
ii.id,
ii.source_proforma_id,
p.id AS matched_proforma_id
FROM issued_invoices ii
LEFT JOIN proformas p ON p.id = ii.source_proforma_id
WHERE ii.source_proforma_id IS NOT NULL
AND p.id IS NULL;