Documentos: vw_document

vw_document es la vista base para consulta, auditoría y reporting de documentos del sistema. Abstrae la tabla public.document y enriquece cada registro con:

El mapeo de tipos y grupos se realiza mediante un CTE embebido (doc_types), que refleja directamente los enums utilizados en el código de la aplicación.

Importante: para los reportes lo más probable es que no se use esta vista, sino las vistas particulares de cada módulo. Esta vista se utiliza para simplificar la construcción de documentos en otras vistas.

Conceptos clave

Representado por document_type_id (valor numérico).

Traducido a document_type_name (ej: SALE_BILL, BUY_ORDER).

Agrupa documentos por función de negocio, facilitando filtros y reportes masivos.

Ejemplos de grupos:

BUY_ORDER

BUY_BILL

SALE_BILL

SALE_ORDER

SALE_PAYMENT

STOCK

BOOKKEEPING

RRMM_LIQUIDATION

PERSONAL

PERSONAL_PAYMENT

Casos de uso típicos

1) Listar documentos por grupo (ej: Stock)

SELECT
  document_id,
  real_date,
  document_type_name,
  sucursal_name
FROM public.vw_document
WHERE document_group = 'STOCK'
ORDER BY real_date DESC;

2) Documentos de venta (facturas y notas) en un período

SELECT
  document_id,
  document_type_name,
  real_date,
  account_date,
  sucursal_name
FROM public.vw_document
WHERE document_group IN ('SALE_BILL', 'SALE_CREDIT_NOTE')
  AND real_date BETWEEN '2025-01-01' AND '2025-01-31'
ORDER BY account_date;

3) Auditoría: documentos generados por un usuario

SELECT
  document_id,
  document_type_name,
  document_group,
  transaction_date
FROM public.vw_document
WHERE user_id = 42
ORDER BY transaction_date DESC;

4) Control operativo por sucursal

SELECT
  sucursal_name,
  document_group,
  COUNT(*) AS qty
FROM public.vw_document
WHERE real_date >= NOW() - INTERVAL '7 days'
GROUP BY sucursal_name, document_group
ORDER BY sucursal_name, qty DESC;

5) Diferencia entre fecha real y fecha contable

Útil para control contable/impositivo.

SELECT
  document_id,
  document_type_name,
  real_date,
  account_date
FROM public.vw_document
WHERE real_date <> account_date
ORDER BY real_date DESC;

6) Actividad reciente del sistema (quién hizo qué)

SELECT
  transaction_date,
  operator_name,
  document_type_name,
  sucursal_name
FROM public.vw_document
ORDER BY transaction_date DESC
LIMIT 100;

Consideraciones de diseño

vw_document no reemplaza a public.document: la enriquece para lectura.

El mapeo de tipos está hardcodeado en la vista y debe mantenerse sincronizado con el enum del código.

Si un document_type_id no está contemplado en el mapeo:

document_type_name y document_group pueden quedar NULL

esto sirve como señal de desalineación entre base y aplicación.

Relación con otras vistas

vw_transaction: aporta auditoría (usuario y fecha).

vw_book_audit: utiliza real_date y transaction_date para calcular cambios globales.

vw_book: depende indirectamente de documentos para stock y precios.