-- Seleccionar base de datos
USE data_nexapps;
GO

-- Crear el esquema TJT si no existe
IF NOT EXISTS (SELECT * FROM sys.schemas WHERE name = 'TJT')
BEGIN
    EXEC('CREATE SCHEMA TJT')
END;
GO

-- Tabla TJT.tarjetas_propietarios_tipos
GO
CREATE TABLE TJT.tarjetas_propietarios_tipos (
    id_tarjeta_propietario_tipo INT IDENTITY(1,1) PRIMARY KEY,
    nombre VARCHAR(100) NULL,
    descripcion VARCHAR(255) NULL,
    estado INT NULL DEFAULT (1),
    creado_por VARCHAR(100),
    fecha_hora_creado DATETIME NULL DEFAULT (GETDATE()),
    modificado_por VARCHAR(100),
    fecha_hora_modificado AS GETDATE()
)
GO

-- Tabla TJT.tarjetas_tipos
GO
CREATE TABLE TJT.tarjetas_tipos (
    id_tarjeta_tipo INT IDENTITY(1,1) PRIMARY KEY,
    nombre VARCHAR(100) NULL,
    descripcion VARCHAR(255) NULL,
    estado INT NULL DEFAULT (1),
    creado_por VARCHAR(100),
    fecha_hora_creado DATETIME NULL DEFAULT (GETDATE()),
    modificado_por VARCHAR(100),
    fecha_hora_modificado AS GETDATE()
)
GO

-- Tabla TJT.bancos
GO
CREATE TABLE TJT.bancos (
    id_banco INT IDENTITY(1,1) PRIMARY KEY,
    nombre VARCHAR(100) NULL,
    id_region INT NULL,
    direccion VARCHAR(255) NULL,
    estado INT NULL DEFAULT (1),
    creado_por VARCHAR(100),
    fecha_hora_creado DATETIME NULL DEFAULT (GETDATE()),
    modificado_por VARCHAR(100),
    fecha_hora_modificado AS GETDATE()
)
GO

-- Tabla TJT.tarjetas
GO
CREATE TABLE TJT.tarjetas (
    id_tarjeta INT IDENTITY(1,1) PRIMARY KEY,
    id_tarjeta_propietario_id INT NULL,
    id_tarjeta_propietario_tipo INT NULL,
    id_tarjeta_tipo INT NULL,
    id_banco INT NULL,
    numero VARCHAR(MAX) NULL,
    mes_vencimiento VARCHAR(MAX) NULL,
    anio_vencimiento VARCHAR(MAX) NULL,
    cvv VARCHAR(MAX) NULL,
    titular_nombre VARCHAR(150) NULL,
    comentarios VARCHAR(500) NULL,
    estado INT NULL DEFAULT (1),
    creado_por VARCHAR(100),
    fecha_hora_creado DATETIME NULL DEFAULT (GETDATE()),
    modificado_por VARCHAR(100),
    fecha_hora_modificado AS GETDATE()
)
GO

-- Tabla TJT.empresas_empleados
GO
CREATE TABLE TJT.empresas_empleados (
    id_empresa_empleado INT IDENTITY(1,1) PRIMARY KEY,
    nombres VARCHAR(100) NULL,
    apellidos VARCHAR(100) NULL,
    identidad VARCHAR(20) NULL,
    celular VARCHAR(20) NULL,
    email VARCHAR(100) NULL,
    direccion VARCHAR(255) NULL,
    id_empresa INT NULL,
    estado INT NULL DEFAULT (1),
    creado_por VARCHAR(100),
    fecha_hora_creado DATETIME NULL DEFAULT (GETDATE()),
    modificado_por VARCHAR(100),
    fecha_hora_modificado AS GETDATE()
)
GO

-- Tabla TJT.empresas_departamentos
GO
CREATE TABLE TJT.empresas_departamentos (
    id_empresa_departamento INT IDENTITY(1,1) PRIMARY KEY,
    nombre VARCHAR(100) NULL,
    descripcion VARCHAR(255) NULL,
    id_empresa INT NULL,
    estado INT NULL DEFAULT (1),
    creado_por VARCHAR(100),
    fecha_hora_creado DATETIME NULL DEFAULT (GETDATE()),
    modificado_por VARCHAR(100),
    fecha_hora_modificado AS GETDATE()
)
GO

-- Tabla TJT.tarjetas_beneficios
GO
CREATE TABLE TJT.tarjetas_beneficios (
    id_tarjeta_beneficio INT IDENTITY(1,1) PRIMARY KEY,
    id_tarjeta INT NULL,
    nombre VARCHAR(100) NULL,
    descripcion VARCHAR(255) NULL,
    monto DECIMAL(18,2) NULL,
    tasa DECIMAL(5,2) NULL,
    suma_o_resta INT NULL,
    estado INT NULL DEFAULT (1),
    creado_por VARCHAR(100),
    fecha_hora_creado DATETIME NULL DEFAULT (GETDATE()),
    modificado_por VARCHAR(100),
    fecha_hora_modificado AS GETDATE()
)
GO

-- Tabla TJT.tarjetas_intereses
GO
CREATE TABLE TJT.tarjetas_intereses (
    id_tarjeta_interes INT IDENTITY(1,1) PRIMARY KEY,
    id_tarjeta INT NULL,
    nombre VARCHAR(100) NULL,
    descripcion VARCHAR(255) NULL,
    monto DECIMAL(18,2) NULL,
    tasa DECIMAL(5,2) NULL,
    suma_o_resta INT NULL,
    estado INT NULL DEFAULT (1),
    creado_por VARCHAR(100),
    fecha_hora_creado DATETIME NULL DEFAULT (GETDATE()),
    modificado_por VARCHAR(100),
    fecha_hora_modificado AS GETDATE()
)
GO

-- Tabla TJT.cuentas
GO
CREATE TABLE TJT.cuentas (
    id_cuenta INT IDENTITY(1,1) PRIMARY KEY,
    codigo_contable VARCHAR(50) NULL,
    nombre VARCHAR(100) NULL,
    descripcion VARCHAR(255) NULL,
    estado INT NULL DEFAULT (1),
    creado_por VARCHAR(100),
    fecha_hora_creado DATETIME NULL DEFAULT (GETDATE()),
    modificado_por VARCHAR(100),
    fecha_hora_modificado AS GETDATE()
)
GO

-- Tabla TJT.tarjetas_gastos_categorias
GO
CREATE TABLE TJT.tarjetas_gastos_categorias (
    id_tarjeta_gasto_categoria INT IDENTITY(1,1) PRIMARY KEY,
    nombre VARCHAR(100) NULL,
    descripcion VARCHAR(255) NULL,
    estado INT NULL DEFAULT (1),
    creado_por VARCHAR(100),
    fecha_hora_creado DATETIME NULL DEFAULT (GETDATE()),
    modificado_por VARCHAR(100),
    fecha_hora_modificado AS GETDATE()
)
GO

-- Tabla TJT.tarjetas_gastos
GO
CREATE TABLE TJT.tarjetas_gastos (
    id_tarjeta_gasto INT IDENTITY(1,1) PRIMARY KEY,
    id_tarjeta INT NULL,
    id_tarjeta_gasto_categoria INT NULL,
    descripcion VARCHAR(255) NULL,
    url_foto VARCHAR(255) NULL,
    monto DECIMAL(18,2) NULL,
    estado INT NULL DEFAULT (1),
    creado_por VARCHAR(100),
    fecha_hora_creado DATETIME NULL DEFAULT (GETDATE()),
    modificado_por VARCHAR(100),
    fecha_hora_modificado AS GETDATE()
)
GO

-- Tabla TJT.cuentas_gastos_asignaciones
GO
CREATE TABLE TJT.cuentas_gastos_asignaciones (
    id_cuenta_gasto_asignacion INT IDENTITY(1,1) PRIMARY KEY,
    id_cuenta INT NULL,
    id_tarjeta_gasto INT NULL,
    estado INT NULL DEFAULT (1),
    creado_por VARCHAR(100),
    fecha_hora_creado DATETIME NULL DEFAULT (GETDATE()),
    modificado_por VARCHAR(100),
    fecha_hora_modificado AS GETDATE()
)
GO

-- Tabla TJT.tarjetas_pagos
GO
CREATE TABLE TJT.tarjetas_pagos (
    id_tarjeta_pago INT IDENTITY(1,1) PRIMARY KEY,
    id_tarjeta INT NULL,
    id_tarjeta_gasto INT NULL,
    monto_pagado DECIMAL(18,2) NULL,
    fecha_hora_pago DATETIME NULL,
    url_foto VARCHAR(255) NULL,
    descripcion VARCHAR(255) NULL,
    estado INT NULL DEFAULT (1),
    creado_por VARCHAR(100),
    fecha_hora_creado DATETIME NULL DEFAULT (GETDATE()),
    modificado_por VARCHAR(100),
    fecha_hora_modificado AS GETDATE()
)
GO

-- Tabla TJT.presupuestos_recipientes_tipos
GO
CREATE TABLE TJT.presupuestos_recipientes_tipos (
    id_presupuesto_recipiente_tipo INT IDENTITY(1,1) PRIMARY KEY,
    nombre VARCHAR(100) NULL,
    descripcion VARCHAR(255) NULL,
    estado INT NULL DEFAULT (1),
    creado_por VARCHAR(100),
    fecha_hora_creado DATETIME NULL DEFAULT (GETDATE()),
    modificado_por VARCHAR(100),
    fecha_hora_modificado AS GETDATE()
)
GO

-- Tabla TJT.presupuestos
GO
CREATE TABLE TJT.presupuestos (
    id_presupuesto INT IDENTITY(1,1) PRIMARY KEY,
    id_presupuesto_recipiente_id INT NULL,
    id_presupuesto_recipiente_tipo INT NULL,
    monto DECIMAL(18,2) NULL,
    estado INT NULL DEFAULT (1),
    creado_por VARCHAR(100),
    fecha_hora_creado DATETIME NULL DEFAULT (GETDATE()),
    modificado_por VARCHAR(100),
    fecha_hora_modificado AS GETDATE()
)
GO

-- Tabla TJT.backups
GO
CREATE TABLE TJT.backups (
    id_backup INT IDENTITY(1,1) PRIMARY KEY,
    backup_tipo VARCHAR(20) NULL,
    estatus VARCHAR(20) NULL,
    estatus_comentario TEXT NULL,
    tamano_mb DECIMAL(10,2) NULL,
    hash_verificacion TEXT NULL,
    estado INT NULL DEFAULT (1),
    creado_por VARCHAR(100),
    fecha_hora_creado DATETIME NULL DEFAULT (GETDATE()),
    modificado_por VARCHAR(100),
    fecha_hora_modificado AS GETDATE()
)
GO

-- Tabla TJT.audit_log
GO
CREATE TABLE TJT.audit_log (
    id_audit_log INT IDENTITY(1,1) PRIMARY KEY,
    usuario VARCHAR(100),
    entidad_afectada VARCHAR(100) NULL,
    id_entidad INT NULL,
    accion VARCHAR(20) NULL,
    ip_origen VARCHAR(50) NULL,
    dispositivo VARCHAR(255) NULL,
    fecha_hora_evento DATETIME NULL DEFAULT (GETDATE())
)
GO

-- Tabla aichat_mensajes
GO
CREATE TABLE TJT.aichat_mensajes (
    id_mensaje INT IDENTITY(1,1) PRIMARY KEY,
    mensaje VARCHAR(MAX) NULL,
    sesion INT NULL,
    id_usuario INT NULL,
    estado INT NULL DEFAULT (1),
    creado_por VARCHAR(100),
    fecha_hora_creado DATETIME NULL DEFAULT (GETDATE()),
    modificado_por VARCHAR(100),
    fecha_hora_modificado AS GETDATE()
);
GO
