erp-construccion-database-v2/seeds/dev/03-empresa-tenant.sql
Adrian Flores Cortes 5f009673aa [REMEDIATION] feat: Database schema updates and recreate script enhancement
Major overhaul of drop-and-recreate-database.sh, DDL schema updates,
seed data cleanup. Add utility scripts for auth table fixes.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-05 23:18:19 -06:00

163 lines
9.4 KiB
PL/PgSQL

-- ═══════════════════════════════════════════════════════════════════════════════
-- SEED 03: EMPRESA Y ESTRUCTURA ORGANIZACIONAL
-- ═══════════════════════════════════════════════════════════════════════════════
-- Proyecto: ERP Construcción
-- Autor: Claude Opus 4.5
-- Fecha: 2026-02-03
-- Descripción: Tenant demo, sucursales, configuración
-- Dependencias: 01-core-catalogs.sql, 02-users-profiles.sql
-- ═══════════════════════════════════════════════════════════════════════════════
-- UUIDs determinísticos:
-- Prefijo: 00000000-0000-0000-0003-XXXXXXXXXXXX para empresa/tenant
BEGIN;
-- ─────────────────────────────────────────────────────────────────────────────────
-- 1. TENANT EN auth.tenants (requerido para FK en otros schemas)
-- ─────────────────────────────────────────────────────────────────────────────────
INSERT INTO auth.tenants (id, code, name, is_active, created_at) VALUES
('00000000-0000-0000-0003-000000000001', 'DEMO001', 'Constructora Demo', true, NOW())
ON CONFLICT (id) DO NOTHING;
-- ─────────────────────────────────────────────────────────────────────────────────
-- 2. TENANT (EMPRESA) PRINCIPAL - Datos extendidos en tenants.tenants
-- ─────────────────────────────────────────────────────────────────────────────────
INSERT INTO tenants.tenants (
id, code, name, legal_name, rfc,
business_type, status,
address_street, address_city, address_state, address_zip, address_country,
phone, email, website,
logo_url, primary_color, secondary_color,
fiscal_regime, cfdi_certificate_number,
is_active, created_at, created_by
) VALUES (
'00000000-0000-0000-0003-000000000001',
'DEMO001',
'Constructora Demo',
'Constructora Demo S.A. de C.V.',
'CDM010101ABC',
'construccion_residencial',
'active',
'Av. Tecnológico 1500, Parque Industrial',
'Aguascalientes',
'Aguascalientes',
'20290',
'México',
'+52 449 123 4567',
'contacto@constructorademo.com',
'https://www.constructorademo.com',
'/assets/logos/demo-logo.png',
'#1E40AF', -- Azul corporativo
'#F59E0B', -- Amarillo construcción
'601', -- Régimen General de Ley PM
'CSD00001234567890',
true,
NOW(),
'00000000-0000-0000-0002-000000000101' -- admin
)
ON CONFLICT (id) DO NOTHING;
-- ─────────────────────────────────────────────────────────────────────────────────
-- 3. CONFIGURACIÓN DEL TENANT
-- ─────────────────────────────────────────────────────────────────────────────────
INSERT INTO tenants.tenant_settings (id, tenant_id, setting_key, setting_value, setting_type, created_at) VALUES
-- General (setting_value es JSONB, strings deben estar entre comillas dobles)
('00000000-0000-0000-0003-000000000101', '00000000-0000-0000-0003-000000000001',
'timezone', '"America/Mexico_City"', 'string', NOW()),
('00000000-0000-0000-0003-000000000102', '00000000-0000-0000-0003-000000000001',
'locale', '"es-MX"', 'string', NOW()),
('00000000-0000-0000-0003-000000000103', '00000000-0000-0000-0003-000000000001',
'currency', '"MXN"', 'string', NOW()),
('00000000-0000-0000-0003-000000000104', '00000000-0000-0000-0003-000000000001',
'date_format', '"DD/MM/YYYY"', 'string', NOW()),
-- Construcción
('00000000-0000-0000-0003-000000000110', '00000000-0000-0000-0003-000000000001',
'default_retention_percentage', '5', 'number', NOW()),
('00000000-0000-0000-0003-000000000111', '00000000-0000-0000-0003-000000000001',
'default_advance_percentage', '30', 'number', NOW()),
('00000000-0000-0000-0003-000000000112', '00000000-0000-0000-0003-000000000001',
'estimate_period_days', '15', 'number', NOW()),
('00000000-0000-0000-0003-000000000113', '00000000-0000-0000-0003-000000000001',
'require_photos_for_advances', 'true', 'boolean', NOW()),
-- HSE
('00000000-0000-0000-0003-000000000120', '00000000-0000-0000-0003-000000000001',
'hse_incident_auto_notify', 'true', 'boolean', NOW()),
('00000000-0000-0000-0003-000000000121', '00000000-0000-0000-0003-000000000001',
'hse_require_daily_checkin', 'true', 'boolean', NOW()),
-- Finanzas
('00000000-0000-0000-0003-000000000130', '00000000-0000-0000-0003-000000000001',
'fiscal_year_start_month', '1', 'number', NOW()),
('00000000-0000-0000-0003-000000000131', '00000000-0000-0000-0003-000000000001',
'default_payment_terms_days', '30', 'number', NOW()),
-- Notificaciones
('00000000-0000-0000-0003-000000000140', '00000000-0000-0000-0003-000000000001',
'email_notifications_enabled', 'true', 'boolean', NOW()),
('00000000-0000-0000-0003-000000000141', '00000000-0000-0000-0003-000000000001',
'sms_notifications_enabled', 'false', 'boolean', NOW())
ON CONFLICT (id) DO NOTHING;
-- ─────────────────────────────────────────────────────────────────────────────────
-- 4. SUCURSALES / BRANCHES (schema simplificado)
-- ─────────────────────────────────────────────────────────────────────────────────
INSERT INTO tenants.branches (
id, tenant_id, code, name,
address, city, state,
phone,
is_main, is_active, created_at
) VALUES
-- Matriz
('00000000-0000-0000-0003-000000000201', '00000000-0000-0000-0003-000000000001',
'MATRIZ', 'Oficinas Corporativas',
'Av. Tecnológico 1500, Parque Industrial', 'Aguascalientes', 'Aguascalientes',
'+52 449 123 4567',
true, true, NOW()),
-- Sucursal Obra Norte
('00000000-0000-0000-0003-000000000202', '00000000-0000-0000-0003-000000000001',
'OBRA-NORTE', 'Oficina de Obra - Zona Norte',
'Carr. Panamericana Km 15', 'Aguascalientes', 'Aguascalientes',
'+52 449 234 5678',
false, true, NOW())
ON CONFLICT (id) DO NOTHING;
-- ─────────────────────────────────────────────────────────────────────────────────
-- VERIFICACIÓN
-- ─────────────────────────────────────────────────────────────────────────────────
DO $$
DECLARE
v_auth_tenants INTEGER;
v_tenants INTEGER;
v_settings INTEGER;
v_branches INTEGER;
BEGIN
SELECT COUNT(*) INTO v_auth_tenants FROM auth.tenants;
SELECT COUNT(*) INTO v_tenants FROM tenants.tenants;
SELECT COUNT(*) INTO v_settings FROM tenants.tenant_settings;
SELECT COUNT(*) INTO v_branches FROM tenants.branches;
RAISE NOTICE '══════════════════════════════════════════════════════════════';
RAISE NOTICE 'SEED 03 - EMPRESA Y ESTRUCTURA - COMPLETADO';
RAISE NOTICE '══════════════════════════════════════════════════════════════';
RAISE NOTICE 'Tenants (auth): %', v_auth_tenants;
RAISE NOTICE 'Tenants (extendido): %', v_tenants;
RAISE NOTICE 'Configuraciones: %', v_settings;
RAISE NOTICE 'Sucursales: %', v_branches;
RAISE NOTICE '══════════════════════════════════════════════════════════════';
END $$;
COMMIT;
-- ═══════════════════════════════════════════════════════════════════════════════
-- FIN SEED 03
-- ═══════════════════════════════════════════════════════════════════════════════