Files
telegram_new_socias/db/init/init.sql
Marco Gallegos 72204d54cf feat: Implementar registro de usuarios en base de datos dual
Este commit introduce las siguientes mejoras en el proceso de onboarding:

1.  **Registro en Dos Fases**: El flujo de onboarding ahora registra a las nuevas usuarias en dos bases de datos distintas para mejorar la seguridad y la integridad de los datos:
    *   ****: Se crea un registro básico para la autenticación y el control de acceso del bot.
    *   ****: Se guarda un perfil completo y detallado de la empleada en la tabla .

2.  **Modelos SQLAlchemy**: Se han actualizado los modelos de SQLAlchemy ( y ) para reflejar la estructura de las tablas de la base de datos.

3.  **Lógica de Base de Datos Centralizada**: El módulo  ahora contiene la lógica para gestionar el registro dual, asegurando que ambas operaciones se realicen de forma atómica.

4.  **Flujo de Onboarding Actualizado**: El script de  ha sido modificado para recopilar la información necesaria y pasarla al nuevo sistema de registro.

5.  **Configuración de Docker**: Se ha ajustado el  y los scripts de inicialización de la base de datos ( y ) para soportar el nuevo esquema de base de datos dual.

Estos cambios aseguran un proceso de registro más robusto, seguro y escalable, sentando las bases para futuras funcionalidades de RRHH.
2025-12-20 09:28:13 -06:00

133 lines
4.1 KiB
SQL

CREATE DATABASE IF NOT EXISTS USERS_ALMA;
CREATE DATABASE IF NOT EXISTS vanity_hr;
CREATE DATABASE IF NOT EXISTS vanity_attendance;
USE USERS_ALMA;
CREATE TABLE IF NOT EXISTS users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) UNIQUE,
role ENUM('admin', 'manager', 'user'),
first_name VARCHAR(100),
last_name VARCHAR(100),
email VARCHAR(100) UNIQUE,
cell_phone VARCHAR(20),
telegram_id VARCHAR(50) UNIQUE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
CREATE TABLE IF NOT EXISTS request_logs (
id INT AUTO_INCREMENT PRIMARY KEY,
telegram_id VARCHAR(50),
username VARCHAR(100),
command VARCHAR(100),
message VARCHAR(500),
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
USE vanity_hr;
CREATE TABLE IF NOT EXISTS data_empleadas (
numero_empleado VARCHAR(15) PRIMARY KEY,
puesto VARCHAR(50),
sucursal VARCHAR(50),
fecha_ingreso DATE,
estatus VARCHAR(15),
nombre_completo VARCHAR(150),
nombre VARCHAR(50),
nombre_preferido VARCHAR(50),
apellido_paterno VARCHAR(50),
apellido_materno VARCHAR(50),
fecha_nacimiento DATE,
lugar_nacimiento VARCHAR(50),
rfc VARCHAR(13) UNIQUE,
curp VARCHAR(18) UNIQUE,
email VARCHAR(100),
telefono_celular VARCHAR(15),
domicilio_calle VARCHAR(255),
domicilio_numero_exterior VARCHAR(10),
domicilio_numero_interior VARCHAR(10),
domicilio_numero_texto VARCHAR(50),
domicilio_colonia VARCHAR(255),
domicilio_codigo_postal VARCHAR(10),
domicilio_ciudad VARCHAR(100),
domicilio_estado VARCHAR(50),
domicilio_completo VARCHAR(255),
emergencia_nombre VARCHAR(100),
emergencia_telefono VARCHAR(15),
emergencia_parentesco VARCHAR(50),
referencia_1_nombre VARCHAR(100),
referencia_1_telefono VARCHAR(15),
referencia_1_tipo VARCHAR(20),
referencia_2_nombre VARCHAR(100),
referencia_2_telefono VARCHAR(15),
referencia_2_tipo VARCHAR(20),
referencia_3_nombre VARCHAR(100),
referencia_3_telefono VARCHAR(15),
referencia_3_tipo VARCHAR(20),
origen_registro VARCHAR(50),
telegram_usuario VARCHAR(50),
telegram_chat_id BIGINT,
bot_version VARCHAR(20),
fecha_registro DATETIME,
tiempo_registro_minutos INT,
fecha_procesamiento DATETIME(3)
);
CREATE TABLE IF NOT EXISTS vacaciones (
vacaciones_id VARCHAR(50) PRIMARY KEY,
numero_empleado VARCHAR(15),
tipo_solicitud VARCHAR(20),
estatus ENUM('pendiente', 'aprobado', 'rechazado', 'cancelado'),
fecha_inicio DATE,
fecha_fin DATE,
dias_solicitados INT,
dias_habiles INT,
motivo TEXT,
con_goce_sueldo TINYINT(1),
fecha_solicitud DATETIME,
fecha_procesamiento DATETIME(3),
origen VARCHAR(20),
afecta_nomina TINYINT(1),
FOREIGN KEY (numero_empleado) REFERENCES data_empleadas(numero_empleado)
);
CREATE TABLE IF NOT EXISTS permisos (
permiso_id VARCHAR(50) PRIMARY KEY,
numero_empleado VARCHAR(15),
categoria ENUM('PERSONAL', 'MEDICO', 'OFICIAL', 'OTRO'),
estatus ENUM('pendiente', 'aprobado', 'rechazado', 'cancelado'),
fecha_inicio DATE,
horario_especifico VARCHAR(50),
motivo TEXT,
con_goce_sueldo TINYINT(1),
afecta_nomina TINYINT(1),
FOREIGN KEY (numero_empleado) REFERENCES data_empleadas(numero_empleado)
);
USE vanity_attendance;
CREATE TABLE IF NOT EXISTS asistencia_registros (
id_asistencia INT AUTO_INCREMENT PRIMARY KEY,
numero_empleado VARCHAR(15),
fecha DATE,
hora_entrada_real TIME,
hora_salida_real TIME,
minutos_retraso INT,
minutos_extra INT,
sucursal_registro VARCHAR(50),
telegram_id_usado BIGINT,
FOREIGN KEY (numero_empleado) REFERENCES vanity_hr.data_empleadas(numero_empleado)
);
CREATE TABLE IF NOT EXISTS horario_empleadas (
id_horario INT AUTO_INCREMENT PRIMARY KEY,
numero_empleado VARCHAR(15),
telegram_id BIGINT,
dia_semana VARCHAR(20),
hora_entrada_teorica TIME,
hora_salida_teorica TIME,
FOREIGN KEY (numero_empleado) REFERENCES vanity_hr.data_empleadas(numero_empleado)
);