mirror of
https://github.com/marcogll/telegram_new_socias.git
synced 2026-01-13 13:15:16 +00:00
This commit significantly enhances the database schema defined in `db_tasks.md` to create a robust system for tracking employee vacations and permission requests. Key changes include: - **`users` table:** Added `vacation_days_assigned` and `vacation_days_taken` fields to maintain a running balance of employee vacation days. - **`vacations` table:** Overhauled the table with detailed fields such as `business_days`, `with_pay`, `approver_comments`, `approval_date`, and `affects_payroll` to create a comprehensive vacation tracking system. - **`permission_requests` table:** Similarly enhanced with fields like `category`, `with_pay`, and `affects_payroll` for detailed tracking of hourly leaves. - **Interaction Logic:** Updated the documentation to explain how vacation balances are automatically calculated and updated upon the approval of a request.
10 KiB
10 KiB
Definición de Tablas y Campos para la Base de Datos
Este documento describe la estructura de la base de datos para el bot Vanessa, diseñada para gestionar la información de empleadas, solicitudes y permisos de forma detallada.
1. Tabla de Usuarias (users)
Almacena la información central, el estado y el balance de vacaciones de cada empleada.
| Campo | Tipo | Descripción |
|---|---|---|
id |
INT (PK) |
Identificador único de la usuaria. |
employee_number |
VARCHAR(50) (Unique) |
Número de empleada único. |
telegram_id |
BIGINT (Unique) |
ID de Telegram de la usuaria. |
telegram_username |
VARCHAR(255) |
Nombre de usuario de Telegram. |
full_name |
VARCHAR(255) |
Nombre completo. |
preferred_name |
VARCHAR(100) |
Nombre preferido de la empleada. |
email |
VARCHAR(255) (Unique) |
Correo electrónico. |
phone_number |
VARCHAR(20) |
Teléfono celular. |
position |
VARCHAR(100) |
Puesto que desempeña. |
branch |
VARCHAR(100) |
Sucursal a la que pertenece. |
hire_date |
DATE |
Fecha de ingreso a la empresa. |
status |
ENUM('activo', 'inactivo') |
Estatus actual de la empleada. |
role |
ENUM('user', 'manager', 'admin') |
Nivel de permisos en el sistema (por defecto: 'user'). |
vacation_days_assigned |
INT |
Días de vacaciones asignados para el periodo actual. |
vacation_days_taken |
INT (Default: 0) |
Suma de días de vacaciones aprobados y tomados. |
created_at |
DATETIME |
Fecha de creación del registro. |
updated_at |
DATETIME |
Fecha de última actualización. |
2. Tabla de Solicitudes de Vacaciones (vacations)
Registro detallado de las solicitudes de vacaciones.
| Campo | Tipo | Descripción |
|---|---|---|
id |
INT (PK) |
Identificador numérico de la solicitud. |
request_id |
VARCHAR(50) (Unique) |
Identificador alfanumérico único de la solicitud (e.g., "7c32a085..."). |
user_id |
INT (FK) |
Empleada que solicita (users.id). |
status |
ENUM('pendiente', 'aprobado', 'rechazado') |
Estado actual de la solicitud. |
start_date |
DATE |
Fecha de inicio de las vacaciones. |
end_date |
DATE |
Fecha de fin de las vacaciones. |
requested_days |
INT |
Número de días naturales solicitados. |
business_days |
INT |
Número de días hábiles que abarca la solicitud. |
reason |
TEXT |
Motivo de la solicitud. |
with_pay |
BOOLEAN |
TRUE si es con goce de sueldo. |
leave_type |
ENUM('con_goce', 'sin_goce') |
Clasificación del tipo de permiso. |
request_date |
DATETIME |
Fecha y hora en que se creó la solicitud. |
processed_date |
DATETIME |
Fecha y hora en que se procesó en el sistema (e.g., envío a webhook). |
source |
VARCHAR(50) |
Origen de la solicitud (e.g., "telegram_bot"). |
approver_id |
INT (FK, nullable) |
Usuario (users.id) que aprobó o rechazó. |
approval_date |
DATETIME (nullable) |
Fecha y hora de la aprobación o rechazo. |
approver_comments |
TEXT (nullable) |
Comentarios del aprobador. |
affects_payroll |
BOOLEAN |
TRUE si la solicitud tiene implicaciones en la nómina. |
3. Tabla de Solicitudes de Permisos por Horas (permission_requests)
Registro detallado de permisos especiales por horas.
| Campo | Tipo | Descripción |
|---|---|---|
id |
INT (PK) |
Identificador numérico del permiso. |
request_id |
VARCHAR(50) (Unique) |
Identificador alfanumérico único (e.g., "1LSRADeDNfY"). |
user_id |
INT (FK) |
Empleada que solicita (users.id). |
category |
VARCHAR(100) |
Categoría del permiso (e.g., "PERSONAL", "MÉDICO"). |
status |
ENUM('pendiente', 'aprobado', 'rechazado') |
Estado actual del permiso. |
permission_date |
DATE |
Fecha para la cual se solicita el permiso. |
start_time |
TIME |
Hora de inicio del permiso. |
end_time |
TIME |
Hora de fin del permiso. |
reason |
TEXT |
Motivo detallado del permiso. |
with_pay |
BOOLEAN |
TRUE si es con goce de sueldo. |
leave_type |
ENUM('con_goce', 'sin_goce') |
Clasificación del tipo de permiso. |
request_date |
DATETIME |
Fecha y hora en que se creó la solicitud. |
processed_date |
DATETIME |
Fecha y hora en que se procesó. |
source |
VARCHAR(50) |
Origen de la solicitud. |
approver_id |
INT (FK, nullable) |
Usuario (users.id) que gestionó el permiso. |
approval_date |
DATETIME (nullable) |
Fecha y hora de la gestión. |
approver_comments |
TEXT (nullable) |
Comentarios del aprobador. |
affects_payroll |
BOOLEAN |
TRUE si el permiso tiene implicaciones en la nómina. |
4. Interacción con la Base de Datos y Lógica de Negocio
a. Sistema de Roles
user: Rol estándar para todas las empleadas. Pueden solicitar vacaciones y permisos, y consultar su propio estado.manager: Puede realizar las mismas acciones que unuser, y adicionalmente, aprobar/rechazar solicitudes y consultar datos de las usuarias a su cargo.admin: Acceso total. Puede gestionar todos los datos de todas las usuarias y solicitudes.
b. Flujo de Solicitudes (Vacaciones y Permisos)
- Creación: Una usuaria crea una solicitud. El sistema la inserta en la tabla
vacationsopermission_requestscon estado'pendiente'. - Aprobación: Un
manageroadminrevisa la solicitud. Al aprobarla:- El
statusde la solicitud cambia a'aprobado'. - Se registran el
approver_id,approval_dateyapprover_comments.
- El
- Actualización de Balance de Vacaciones:
- Si la solicitud es de vacaciones y fue aprobada: El sistema debe sumar los
business_daysde la solicitud al campovacation_days_takende la usuaria en la tablausers. - Esta lógica asegura que el balance de días tomados siempre esté sincronizado con los registros aprobados.
- Si la solicitud es de vacaciones y fue aprobada: El sistema debe sumar los
c. Lógica de Negocio Clave
- Balance de Vacaciones: El balance de días disponibles de una empleada se calcula en tiempo real como
vacation_days_assigned-vacation_days_taken. - Nómina: El campo
affects_payrollsirve como una bandera para que los sistemas externos de RRHH sepan que una solicitud específica (e.g., un permiso sin goce de sueldo) requiere un ajuste en la nómina. - Auditoría: Todas las fechas (
request_date,approval_date) y IDs (user_id,approver_id) permiten una auditoría completa de cada solicitud.