Cabecera unificada de ventas: vw_sale_document

vw_sale_document unifica facturas (SALE_BILL) y notas de crédito (SALE_CREDIT_NOTE) en un esquema común para reporting y exportación. Incluye:

Factura: sign = 1

Nota de crédito: sign = -1

Todos los totales permiten sumarizar sin CASE.

Importante:

Casos de uso y queries

1) Libro de IVA ventas (por fecha contable)

SELECT
  account_date,
  legal_number,
  client_tax_id,
  client_name,
  total_net_taxable,
  total_vat,
  total_amount
FROM public.vw_sale_document
WHERE real_date BETWEEN '2025-01-01' AND '2025-01-31'
ORDER BY account_date, legal_number;

2) Ventas netas del período (facturas - NC)

SELECT
  SUM(total_amount) AS sales_net_total
FROM public.vw_sale_document
WHERE real_date BETWEEN '2025-01-01' AND '2025-01-31'
  AND is_cancelled IS NOT TRUE;

3) Totales por cliente

SELECT
  client_party_id,
  client_name,
  SUM(total_amount) AS total
FROM public.vw_sale_document
WHERE real_date >= '2025-01-01'
  AND is_cancelled IS NOT TRUE
GROUP BY client_party_id, client_name
ORDER BY total DESC;

4) Totales por vendedor

SELECT
  salesman_party_id,
  salesman_name,
  SUM(total_amount) AS total
FROM public.vw_sale_document
WHERE real_date >= '2025-01-01'
  AND is_cancelled IS NOT TRUE
GROUP BY salesman_party_id, salesman_name
ORDER BY total DESC;

5) Auditoría operativa (últimos 100 comprobantes)

SELECT
  real_date,
  legal_number,
  document_type_name,
  sucursal_name,
  operator_name,
  total_amount
FROM public.vw_sale_document
ORDER BY real_date DESC
LIMIT 100;

6) Conversión a moneda base (control)

SELECT
  legal_number,
  currency_symbol,
  exchange_rate,
  total_amount,
  total_amount_base
FROM public.vw_sale_document
WHERE real_date >= NOW() - INTERVAL '7 days'
ORDER BY real_date DESC;

7) Control de Anulaciones por Sucursal

Para auditar qué sucursales tienen más errores o cancelaciones.

SELECT 
    sucursal_name,
    COUNT(*) FILTER (WHERE is_cancelled = true) AS cantidad_anuladas,
    COUNT(*) FILTER (WHERE is_cancelled = false) AS cantidad_validas,
    ROUND((COUNT(*) FILTER (WHERE is_cancelled = true) * 100.0 / COUNT(*)), 2) AS pct_error
FROM public.vw_sale_document
GROUP BY sucursal_name;

8) Ventas por país (join a vw_client)

sql SELECT c.country, SUM(d.total_amount_base) AS total_sales_base FROM public.vw_sale_document d JOIN public.vw_client c ON d.client_party_id = c.party_id WHERE d.real_date BETWEEN DATE '2026-01-01' AND DATE '2026-01-31' AND d.is_cancelled IS NOT TRUE GROUP BY c.country ORDER BY total_sales_base DESC;sql