Subir todos los cambios recientes a la rama principal

This commit is contained in:
arielit3
2026-01-16 13:39:55 -07:00
parent de5b6feef4
commit 99427cd48c
38 changed files with 15383 additions and 66 deletions

View File

@@ -38,6 +38,74 @@ CREATE INDEX idx_tenants_slug ON tenants(slug);
CREATE INDEX idx_tenants_status ON tenants(status);
CREATE INDEX idx_tenants_domain ON tenants(domain);
-- ===================================
-- DOMINIO: CLIENTS (Cartera de Clientes)
-- ===================================
-- Enum para los radio buttons de estatus
CREATE TYPE client_status_enum AS ENUM (
'prospect',
'active',
'suspended',
'cancelled'
);
CREATE TABLE clients (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
tenant_id UUID NOT NULL REFERENCES tenants(id) ON DELETE CASCADE,
-- Identificación (Sección General)
code VARCHAR(50), -- Clave del cliente
name VARCHAR(200) NOT NULL, -- Nombre / Razón Social
tax_id VARCHAR(20), -- RFC
client_type VARCHAR(50), -- Tipo de Cliente
account_manager VARCHAR(100), -- Encargado Cliente (Texto simple por ahora)
-- Dirección (Desglosada)
address_street TEXT, -- Dirección / Calle
address_ext_num VARCHAR(20), -- Núm. Ext
neighborhood VARCHAR(100), -- Colonia
zip_code VARCHAR(10), -- CP
city VARCHAR(100), -- Ciudad
state VARCHAR(100), -- Estado
country VARCHAR(100) DEFAULT 'Mexico',
-- Contacto
phone_primary VARCHAR(20), -- Teléfono 1
phone_secondary VARCHAR(20),-- Teléfono 2
fax VARCHAR(20),
email VARCHAR(320), -- Correo
website VARCHAR(255), -- Página Web
-- Configuración y Flexibilidad
status client_status_enum DEFAULT 'prospect',
logo_url VARCHAR(500), -- Ruta al archivo PDF/Imagen del logo
-- Campo JSONB para lo que sobre (Horario, Nacionalidad, Medio Publicidad, Lada, etc.)
properties JSONB DEFAULT '{}'::jsonb,
-- Auditoría estándar
is_active BOOLEAN DEFAULT TRUE,
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
-- Restricciones: No repetir RFC ni Clave dentro del mismo Tenant
UNIQUE(tenant_id, code),
UNIQUE(tenant_id, tax_id)
);
-- Índices para búsqueda rápida
CREATE INDEX idx_clients_tenant_id ON clients(tenant_id);
CREATE INDEX idx_clients_tax_id ON clients(tax_id);
CREATE INDEX idx_clients_name ON clients(name);
CREATE INDEX idx_clients_properties ON clients USING gin (properties);
-- Trigger para mantener actualizado el campo updated_at
-- (Usa la función que ya definiste al final de tu script)
CREATE TRIGGER update_clients_updated_at BEFORE UPDATE ON clients
FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
-- ===================================
-- DOMINIO: AUTH (Autenticación)
-- ===================================