erp-core-database/ddl/50-financial-schema.sql
rckrdmrd 4b6240311d [TASK-2026-01-20-003] feat: Add financial DDL and matching tables
Financial Schema (50-57):
- 50-financial-schema.sql: Schema + 10 ENUMs
- 51-financial-accounts.sql: account_types, accounts, account_mappings
- 52-financial-journals.sql: fiscal_years, fiscal_periods, journals
- 53-financial-entries.sql: journal_entries, journal_entry_lines
- 54-financial-invoices.sql: invoices, invoice_lines
- 55-financial-payments.sql: payments, payment_invoice_allocations
- 56-financial-taxes.sql: taxes, tax_groups
- 57-financial-bank-reconciliation.sql: bank_statements, bank_statement_lines, rules

Purchases Matching (46):
- 46-purchases-matching.sql: purchase_order_matching, purchase_matching_lines, matching_exceptions

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 03:47:04 -06:00

155 lines
4.8 KiB
SQL

-- =============================================================
-- ARCHIVO: 50-financial-schema.sql
-- DESCRIPCION: Schema de contabilidad financiera y tipos enumerados
-- VERSION: 1.0.0
-- PROYECTO: ERP-Core V2
-- FECHA: 2026-01-20
-- DEPENDE DE: Ninguno (define el schema base)
-- =============================================================
-- =====================
-- SCHEMA: financial
-- Schema para modulo de contabilidad general
-- =====================
CREATE SCHEMA IF NOT EXISTS financial;
-- =====================
-- EXTENSIONES REQUERIDAS
-- =====================
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
-- =====================
-- TIPOS ENUMERADOS
-- =====================
-- Tipo de cuenta contable (activo, pasivo, capital, ingreso, gasto)
DO $$ BEGIN
CREATE TYPE financial.account_type_enum AS ENUM (
'asset', -- Activo
'liability', -- Pasivo
'equity', -- Capital/Patrimonio
'income', -- Ingreso
'expense' -- Gasto
);
EXCEPTION
WHEN duplicate_object THEN null;
END $$;
-- Tipo de diario contable
DO $$ BEGIN
CREATE TYPE financial.journal_type_enum AS ENUM (
'sale', -- Ventas
'purchase', -- Compras
'cash', -- Caja
'bank', -- Banco
'general' -- General
);
EXCEPTION
WHEN duplicate_object THEN null;
END $$;
-- Estado de asiento contable
DO $$ BEGIN
CREATE TYPE financial.entry_status_enum AS ENUM (
'draft', -- Borrador
'posted', -- Publicado/Contabilizado
'cancelled' -- Cancelado
);
EXCEPTION
WHEN duplicate_object THEN null;
END $$;
-- Estado de periodo fiscal
DO $$ BEGIN
CREATE TYPE financial.period_status_enum AS ENUM (
'open', -- Abierto
'closed' -- Cerrado
);
EXCEPTION
WHEN duplicate_object THEN null;
END $$;
-- Tipo de factura
DO $$ BEGIN
CREATE TYPE financial.invoice_type_enum AS ENUM (
'customer', -- Factura de cliente (venta)
'supplier' -- Factura de proveedor (compra)
);
EXCEPTION
WHEN duplicate_object THEN null;
END $$;
-- Estado de factura
DO $$ BEGIN
CREATE TYPE financial.invoice_status_enum AS ENUM (
'draft', -- Borrador
'open', -- Abierta/Validada
'paid', -- Pagada
'cancelled' -- Cancelada
);
EXCEPTION
WHEN duplicate_object THEN null;
END $$;
-- Tipo de pago
DO $$ BEGIN
CREATE TYPE financial.payment_type_enum AS ENUM (
'inbound', -- Entrada (cobro)
'outbound' -- Salida (pago)
);
EXCEPTION
WHEN duplicate_object THEN null;
END $$;
-- Metodo de pago
DO $$ BEGIN
CREATE TYPE financial.payment_method_enum AS ENUM (
'cash', -- Efectivo
'bank_transfer', -- Transferencia bancaria
'check', -- Cheque
'card', -- Tarjeta
'other' -- Otro
);
EXCEPTION
WHEN duplicate_object THEN null;
END $$;
-- Estado de pago
DO $$ BEGIN
CREATE TYPE financial.payment_status_enum AS ENUM (
'draft', -- Borrador
'posted', -- Contabilizado
'reconciled', -- Conciliado
'cancelled' -- Cancelado
);
EXCEPTION
WHEN duplicate_object THEN null;
END $$;
-- Tipo de impuesto
DO $$ BEGIN
CREATE TYPE financial.tax_type_enum AS ENUM (
'sales', -- Solo ventas
'purchase', -- Solo compras
'all' -- Ambos (ventas y compras)
);
EXCEPTION
WHEN duplicate_object THEN null;
END $$;
-- =====================
-- COMENTARIOS DEL SCHEMA
-- =====================
COMMENT ON SCHEMA financial IS 'Schema para el modulo de contabilidad general: plan de cuentas, diarios, asientos, facturas financieras y pagos';
COMMENT ON TYPE financial.account_type_enum IS 'Clasificacion de cuentas contables: activo, pasivo, capital, ingreso, gasto';
COMMENT ON TYPE financial.journal_type_enum IS 'Tipo de diario contable: ventas, compras, caja, banco, general';
COMMENT ON TYPE financial.entry_status_enum IS 'Estado del asiento contable: borrador, publicado, cancelado';
COMMENT ON TYPE financial.period_status_enum IS 'Estado del periodo fiscal: abierto, cerrado';
COMMENT ON TYPE financial.invoice_type_enum IS 'Tipo de factura financiera: cliente (venta), proveedor (compra)';
COMMENT ON TYPE financial.invoice_status_enum IS 'Estado de factura: borrador, abierta, pagada, cancelada';
COMMENT ON TYPE financial.payment_type_enum IS 'Direccion del pago: inbound (cobro), outbound (pago)';
COMMENT ON TYPE financial.payment_method_enum IS 'Metodo de pago: efectivo, transferencia, cheque, tarjeta, otro';
COMMENT ON TYPE financial.payment_status_enum IS 'Estado del pago: borrador, contabilizado, conciliado, cancelado';
COMMENT ON TYPE financial.tax_type_enum IS 'Aplicacion del impuesto: ventas, compras, ambos';