Files
telegram_new_socias/db_logic.md
Marco Gallegos 9cb9513c41 docs: Actualizar y consolidar la documentación de la base de datos
Se ha actualizado el archivo  para describir con mayor precisión el proceso de registro de usuarios en dos fases, que implica la creación de un registro tanto en la base de datos  como en .

Además, se ha consolidado la documentación de la base de datos eliminando el archivo redundante  y fusionando su contenido en . Esto asegura que  sirva como la única fuente de verdad para la especificación técnica de la base de datos.
2025-12-20 09:27:53 -06:00

11 KiB

Sistema Integrado de Gestión (Vanity)

Este repositorio documenta la especificación técnica completa del ecosistema Vanity: infraestructura de datos, diccionarios de campos sin truncar, relaciones entre entidades y reglas de negocio que gobiernan los Bots, Recursos Humanos y el sistema de Asistencia.

El objetivo es servir como fuente de verdad técnica para desarrollo, mantenimiento, auditoría y escalamiento.


1. Arquitectura de Datos

El sistema se distribuye en tres bases de datos dentro del mismo servidor, permitiendo integridad referencial y consultas cruzadas controladas:

  • USERS_ALMA → Seguridad, autenticación y control de acceso.
  • vanity_hr → Gestión de personal, vacaciones, permisos y reglas laborales.
  • vanity_attendance → Control de asistencia y programación de horarios.

2. Diccionario de Datos

2.1 Base de Datos: vanity_hr

Tabla: data_empleadas (Maestra — 44 campos)

Tabla central de Recursos Humanos. Contiene información contractual, personal, de contacto y metadatos de registro.

Campo Tipo Key Descripción
numero_empleado varchar(15) PRI ID único de nómina
puesto varchar(50) Cargo / Puesto
sucursal varchar(50) Sucursal asignada
fecha_ingreso date Fecha de alta (base de antigüedad)
estatus varchar(15) Activo / Baja
nombre_completo varchar(150) Nombre completo concatenado
nombre varchar(50) Nombre(s)
nombre_preferido varchar(50) Apodo o nombre de preferencia
apellido_paterno varchar(50) Primer apellido
apellido_materno varchar(50) Segundo apellido
fecha_nacimiento date Fecha de nacimiento
lugar_nacimiento varchar(50) Ciudad / Estado
rfc varchar(13) UNI RFC
curp varchar(18) UNI CURP
email varchar(100) Correo electrónico
telefono_celular varchar(15) Teléfono móvil
domicilio_calle varchar(255) Calle
domicilio_numero_exterior varchar(10) Número exterior
domicilio_numero_interior varchar(10) Número interior
domicilio_numero_texto varchar(50) Referencias
domicilio_colonia varchar(255) Colonia
domicilio_codigo_postal varchar(10) CP
domicilio_ciudad varchar(100) Ciudad
domicilio_estado varchar(50) Estado
domicilio_completo varchar(255) Dirección formateada
emergencia_nombre varchar(100) Contacto de emergencia
emergencia_telefono varchar(15) Teléfono de emergencia
emergencia_parentesco varchar(50) Parentesco
referencia_1_nombre varchar(100) Referencia 1
referencia_1_telefono varchar(15) Teléfono ref 1
referencia_1_tipo varchar(20) Tipo ref 1
referencia_2_nombre varchar(100) Referencia 2
referencia_2_telefono varchar(15) Teléfono ref 2
referencia_2_tipo varchar(20) Tipo ref 2
referencia_3_nombre varchar(100) Referencia 3
referencia_3_telefono varchar(15) Teléfono ref 3
referencia_3_tipo varchar(20) Tipo ref 3
origen_registro varchar(50) Web / Bot
telegram_usuario varchar(50) Username Telegram
telegram_chat_id bigint ID de chat Telegram
bot_version varchar(20) Versión del bot
fecha_registro datetime Timestamp creación
tiempo_registro_minutos int Duración del registro
fecha_procesamiento datetime(3) Timestamp procesado

Tabla: vacaciones (14 campos)

Campo Tipo Key Descripción
vacaciones_id varchar(50) PRI ID de solicitud
numero_empleado varchar(15) MUL Relación con empleada
tipo_solicitud varchar(20) VACACIONES
estatus enum pendiente / aprobado / rechazado / cancelado
fecha_inicio date Inicio
fecha_fin date Fin
dias_solicitados int Total días
dias_habiles int Días descontados
motivo text Observaciones
con_goce_sueldo tinyint(1) 1 = Sí
fecha_solicitud datetime Creación
fecha_procesamiento datetime(3) Cambio de estatus
origen varchar(20) telegram_bot / web
afecta_nomina tinyint(1) Impacto en pago

Tabla: permisos (9 campos)

Campo Tipo Key Descripción
permiso_id varchar(50) PRI ID de permiso
numero_empleado varchar(15) MUL Relación RH
categoria enum PERSONAL / MEDICO / OFICIAL / OTRO
estatus enum pendiente / aprobado / rechazado / cancelado
fecha_inicio date Fecha
horario_especifico varchar(50) Rango horario
motivo text Razón
con_goce_sueldo tinyint(1) 0 / 1
afecta_nomina tinyint(1) Impacto

2.2 Base de Datos: vanity_attendance

Tabla: asistencia_registros (9 campos)

Campo Tipo Key Descripción
id_asistencia int PRI Auto-increment
numero_empleado varchar(15) MUL Relación RH
fecha date Día
hora_entrada_real time Entrada
hora_salida_real time Salida
minutos_retraso int Calculado
minutos_extra int Excedente
sucursal_registro varchar(50) Sucursal
telegram_id_usado bigint ID Telegram

Tabla: horario_empleadas (Diccionario de turnos)

Campo Tipo Key Descripción
id_horario int PRI ID
numero_empleado varchar(15) MUL Relación RH
telegram_id bigint Llave webhook
dia_semana varchar(20) monday, tuesday…
hora_entrada_teorica time Entrada
hora_salida_teorica time Salida

2.3 Base de Datos: USERS_ALMA

Tabla: users (10 campos)

Campo Tipo Key Descripción
id int PRI ID interno
username varchar(50) UNI Usuario
role enum admin / manager / user
first_name varchar(100) Nombre
last_name varchar(100) Apellidos
email varchar(100) UNI Correo
cell_phone varchar(20) Teléfono
telegram_id varchar(50) UNI Auth bot
created_at timestamp Creación
updated_at timestamp Actualización

3. Reglas de Negocio

3.1 Vacaciones

  • Antigüedad: FLOOR(DATEDIFF(fecha_inicio, fecha_ingreso) / 365.25)
  • Ventana: mínimo 12 días, máximo 45 días de anticipación
  • Validación: no se permite solicitar periodos no cumplidos

3.2 Asistencia

  • Identificación por telegram_id
  • Cruce con horario_empleadas según día
  • Cálculo de retraso contra horario teórico

4. Integración Webhook (Horarios)

  • Identificación: body.telegram.user_id
  • Operación: Upsert por día
  • Formato: conversión de 10:00 AM10:00:00

5. Consultas Operativas

-- Saldo actual de vacaciones
SELECT * FROM vanity_hr.vista_saldos_vacaciones
WHERE numero_empleado = ?;

-- Última solicitud
SELECT * FROM vanity_hr.vacaciones
WHERE numero_empleado = ?
ORDER BY fecha_solicitud DESC
LIMIT 1;

-- Horario del día
SELECT hora_entrada_teorica
FROM vanity_attendance.horario_empleadas
WHERE telegram_id = ? AND dia_semana = 'monday';

Este documento define el contrato técnico del sistema Vanity. Cualquier cambio estructural debe reflejarse aquí antes de pasar a producción.


DB Implementation Tasks

  1. Create initialization script: Write a SQL script to create the databases and tables.
  2. Modify docker-compose.yml: Mount the initialization script.
  3. Update .env.example: Add new environment variables.
  4. Implement SQLAlchemy models: Create Python classes for each table.
  5. Refactor database logic: Use the new models in the application.