Subir todos los cambios recientes a la rama principal
This commit is contained in:
@@ -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)
|
||||
-- ===================================
|
||||
|
||||
Reference in New Issue
Block a user