64 lines
2.9 KiB
Plaintext
64 lines
2.9 KiB
Plaintext
-- 1. Tabla de Agencias Aduanales
|
|
CREATE TABLE [dbo].[agencias_aduanales](
|
|
[id_agencia] [int] IDENTITY(1,1) NOT NULL,
|
|
[nombre_agencia] [nvarchar](255) NOT NULL,
|
|
[rfc_agencia] [nvarchar](13) NOT NULL,
|
|
[direccion] [nvarchar](500) NULL,
|
|
[telefono] [nvarchar](20) NULL,
|
|
[email] [nvarchar](255) NULL,
|
|
[activo] [bit] NOT NULL DEFAULT 1,
|
|
[creado_en] [datetime] NOT NULL DEFAULT GETDATE(),
|
|
[actualizado_en] [datetime] NULL,
|
|
CONSTRAINT [PK_agencias_aduanales] PRIMARY KEY CLUSTERED ([id_agencia] ASC)
|
|
);
|
|
|
|
-- 2. Modificar tabla usuarios_sistema para agregar referencia a agencia (solo para agentes)
|
|
ALTER TABLE [dbo].[usuarios_sistema]
|
|
ADD [id_agencia] [int] NULL;
|
|
|
|
-- Agregar foreign key constraint
|
|
ALTER TABLE [dbo].[usuarios_sistema]
|
|
ADD CONSTRAINT [FK_usuarios_agencia]
|
|
FOREIGN KEY ([id_agencia]) REFERENCES [dbo].[agencias_aduanales]([id_agencia]);
|
|
|
|
-- 3. Tabla de relación importador-agencia (many-to-many)
|
|
CREATE TABLE [dbo].[importador_agencia](
|
|
[id_relacion] [int] IDENTITY(1,1) NOT NULL,
|
|
[id_importador] [int] NOT NULL,
|
|
[id_agencia] [int] NOT NULL,
|
|
[activo] [bit] NOT NULL DEFAULT 1,
|
|
[fecha_vinculacion] [datetime] NOT NULL DEFAULT GETDATE(),
|
|
[fecha_desvinculacion] [datetime] NULL,
|
|
[creado_por] [int] NULL, -- ID del usuario que creó la relación
|
|
CONSTRAINT [PK_importador_agencia] PRIMARY KEY CLUSTERED ([id_relacion] ASC),
|
|
CONSTRAINT [FK_importador_agencia_usuario]
|
|
FOREIGN KEY ([id_importador]) REFERENCES [dbo].[usuarios_sistema]([id_usuario]),
|
|
CONSTRAINT [FK_importador_agencia_agencia]
|
|
FOREIGN KEY ([id_agencia]) REFERENCES [dbo].[agencias_aduanales]([id_agencia]),
|
|
CONSTRAINT [FK_importador_agencia_creador]
|
|
FOREIGN KEY ([creado_por]) REFERENCES [dbo].[usuarios_sistema]([id_usuario])
|
|
);
|
|
|
|
-- Índice único para evitar duplicados activos
|
|
CREATE UNIQUE INDEX [IX_importador_agencia_unique]
|
|
ON [dbo].[importador_agencia] ([id_importador], [id_agencia])
|
|
WHERE [activo] = 1;
|
|
|
|
-- 4. Tabla para auditoría de cambios de agencia
|
|
CREATE TABLE [dbo].[historial_agencia_cambios](
|
|
[id_historial] [int] IDENTITY(1,1) NOT NULL,
|
|
[id_importador] [int] NOT NULL,
|
|
[id_agencia_anterior] [int] NULL,
|
|
[id_agencia_nueva] [int] NULL,
|
|
[accion] [varchar](50) NOT NULL, -- 'VINCULACION', 'DESVINCULACION', 'CAMBIO'
|
|
[motivo] [nvarchar](500) NULL,
|
|
[realizado_por] [int] NOT NULL,
|
|
[fecha_cambio] [datetime] NOT NULL DEFAULT GETDATE(),
|
|
CONSTRAINT [PK_historial_agencia_cambios] PRIMARY KEY CLUSTERED ([id_historial] ASC)
|
|
);
|
|
|
|
-- Índices adicionales para mejorar rendimiento
|
|
CREATE INDEX [IX_usuarios_tipo_agencia] ON [dbo].[usuarios_sistema] ([tipo_usuario], [id_agencia]);
|
|
CREATE INDEX [IX_importador_agencia_importador] ON [dbo].[importador_agencia] ([id_importador]);
|
|
CREATE INDEX [IX_importador_agencia_agencia] ON [dbo].[importador_agencia] ([id_agencia]);
|
|
CREATE INDEX [IX_agencias_activo] ON [dbo].[agencias_aduanales] ([activo]); |