mirror of
https://github.com/marcogll/telegram_new_socias.git
synced 2026-01-13 13:15:16 +00:00
feat: Update database schema documentation
Updates the `db_tasks.md` file to reflect the new database schema and role-based permission system. This change introduces: - A new `vacations` table to track vacation requests. - A new `permission_requests` table for hourly leave requests. - A redesigned `users` table with more detailed employee information and a `role` column. - A renamed and expanded `onboarding_data` table. - An updated database interaction section explaining the `user`, `manager`, and `admin` roles.
This commit is contained in:
144
db_tasks.md
144
db_tasks.md
@@ -1,72 +1,110 @@
|
||||
# Definición de Tablas y Campos para la Base de Datos
|
||||
|
||||
Este documento describe la estructura de la base de datos necesaria para el bot Vanessa, incluyendo tablas para usuarios, permisos y el flujo de bienvenida.
|
||||
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.
|
||||
|
||||
## 1. Tabla de Usuarios (`users`)
|
||||
## 1. Tabla de Usuarias (`users`)
|
||||
|
||||
Esta tabla almacena la información básica de cada usuario que interactúa con el bot.
|
||||
Almacena la información central y el estado de cada empleada.
|
||||
|
||||
| Campo | Tipo | Descripción |
|
||||
|--------------|---------------|--------------------------------------------------|
|
||||
| `id` | `INT` (PK) | Identificador único del usuario. |
|
||||
| `telegram_id`| `BIGINT` | ID de Telegram del usuario. |
|
||||
| `username` | `VARCHAR(255)`| Nombre de usuario de Telegram. |
|
||||
| `first_name` | `VARCHAR(255)`| Nombre del usuario. |
|
||||
| `last_name` | `VARCHAR(255)`| Apellido del usuario. |
|
||||
| `is_active` | `BOOLEAN` | Indica si el usuario está activo (default `true`).|
|
||||
| `created_at` | `DATETIME` | Fecha y hora de creación del registro. |
|
||||
| `updated_at` | `DATETIME` | Fecha y hora de la última actualización. |
|
||||
| Campo | Tipo | Descripción |
|
||||
|-------------------|-------------------------------|--------------------------------------------------------------------|
|
||||
| `id` | `INT` (PK) | Identificador único de la usuaria. |
|
||||
| `employee_number` | `VARCHAR(50)` (Unique) | Número de empleada único (e.g., "GAMM20260201"). |
|
||||
| `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 con el que prefiere que la llamen. |
|
||||
| `email` | `VARCHAR(255)` (Unique) | Correo electrónico. |
|
||||
| `phone_number` | `VARCHAR(20)` | Teléfono celular. |
|
||||
| `position` | `VARCHAR(100)` | Puesto que desempeña (e.g., "manager"). |
|
||||
| `branch` | `VARCHAR(100)` | Sucursal a la que pertenece (e.g., "plaza_cima"). |
|
||||
| `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'). |
|
||||
| `created_at` | `DATETIME` | Fecha de creación del registro. |
|
||||
| `updated_at` | `DATETIME` | Fecha de última actualización. |
|
||||
|
||||
## 2. Tabla de Permisos (`permissions`)
|
||||
## 2. Tabla de Datos de Onboarding (`onboarding_data`)
|
||||
|
||||
Esta tabla gestiona los permisos de los usuarios para realizar acciones específicas.
|
||||
Almacena la información detallada recopilada durante el flujo `/welcome`. Se vincula 1-a-1 con la tabla `users`.
|
||||
|
||||
| Campo | Tipo | Descripción |
|
||||
|-----------------------|------------|--------------------------------------------------------------------------|
|
||||
| `id` | `INT` (PK) | Identificador único del permiso. |
|
||||
| `user_id` | `INT` (FK) | Referencia al `id` del usuario en la tabla `users`. |
|
||||
| `can_update_records` | `BOOLEAN` | Permite al usuario actualizar registros (default `false`). |
|
||||
| `can_access_reports` | `BOOLEAN` | Permite al usuario acceder a reportes (default `false`). |
|
||||
| `created_at` | `DATETIME` | Fecha y hora de creación del registro. |
|
||||
| `updated_at` | `DATETIME` | Fecha y hora de la última actualización. |
|
||||
| Campo | Tipo | Descripción |
|
||||
|-------------------------------|----------------|--------------------------------------------------------------------------|
|
||||
| `id` | `INT` (PK) | Identificador único. |
|
||||
| `user_id` | `INT` (FK) | Referencia a `users.id`. |
|
||||
| `date_of_birth` | `DATE` | Fecha de nacimiento. |
|
||||
| `place_of_birth` | `VARCHAR(255)` | Lugar de nacimiento. |
|
||||
| `rfc` | `VARCHAR(13)` | RFC. |
|
||||
| `curp` | `VARCHAR(18)` | CURP. |
|
||||
| `nss` | `VARCHAR(11)` | Número de Seguridad Social. |
|
||||
| `address_street` | `VARCHAR(255)` | Calle del domicilio. |
|
||||
| `address_ext_number` | `VARCHAR(20)` | Número exterior. |
|
||||
| `address_int_number` | `VARCHAR(20)` | Número interior (si aplica). |
|
||||
| `address_neighborhood` | `VARCHAR(255)` | Colonia. |
|
||||
| `address_zip_code` | `VARCHAR(10)` | Código Postal. |
|
||||
| `address_city` | `VARCHAR(255)` | Ciudad. |
|
||||
| `address_state` | `VARCHAR(255)` | Estado. |
|
||||
| `emergency_contact_name` | `VARCHAR(255)` | Nombre del contacto de emergencia. |
|
||||
| `emergency_contact_phone` | `VARCHAR(20)` | Teléfono del contacto de emergencia. |
|
||||
| `emergency_contact_relationship` | `VARCHAR(50)`| Parentesco del contacto de emergencia. |
|
||||
| `registration_source` | `VARCHAR(50)` | Origen del registro (e.g., "telegram_bot"). |
|
||||
| `bot_version` | `VARCHAR(50)` | Versión del bot que procesó el alta. |
|
||||
| `registration_time_minutes` | `INT` | Tiempo que tardó el registro en minutos. |
|
||||
| `bot_interactions` | `INT` | Número de interacciones con el bot durante el alta. |
|
||||
| `created_at` | `DATETIME` | Fecha de creación. |
|
||||
|
||||
## 3. Tabla de Datos del Flujo de Bienvenida (`welcome_flow_data`)
|
||||
## 3. Tabla de Vacaciones (`vacations`)
|
||||
|
||||
Esta tabla almacena los datos recopilados durante el flujo de `/welcome`.
|
||||
Mantiene un registro de las solicitudes de vacaciones de las empleadas.
|
||||
|
||||
| Campo | Tipo | Descripción |
|
||||
|-----------------|---------------|---------------------------------------------------------|
|
||||
| `id` | `INT` (PK) | Identificador único del registro. |
|
||||
| `user_id` | `INT` (FK) | Referencia al `id` del usuario en la tabla `users`. |
|
||||
| `full_name` | `VARCHAR(255)`| Nombre completo del usuario. |
|
||||
| `curp` | `VARCHAR(18)` | CURP del usuario. |
|
||||
| `rfc` | `VARCHAR(13)` | RFC del usuario. |
|
||||
| `nss` | `VARCHAR(11)` | Número de Seguridad Social (NSS) del usuario. |
|
||||
| `address` | `TEXT` | Dirección del usuario. |
|
||||
| `bank_account` | `VARCHAR(20)` | Número de cuenta bancaria del usuario. |
|
||||
| `phone_number` | `VARCHAR(15)` | Número de teléfono del usuario. |
|
||||
| `status` | `VARCHAR(50)` | Estado del flujo (e.g., 'in_progress', 'completed'). |
|
||||
| `created_at` | `DATETIME` | Fecha y hora de creación del registro. |
|
||||
| `updated_at` | `DATETIME` | Fecha y hora de la última actualización. |
|
||||
| Campo | Tipo | Descripción |
|
||||
|---------------|-------------------------------------|--------------------------------------------------------------------|
|
||||
| `id` | `INT` (PK) | Identificador único de la solicitud. |
|
||||
| `user_id` | `INT` (FK) | Empleada que solicita (`users.id`). |
|
||||
| `start_date` | `DATE` | Fecha de inicio de las vacaciones. |
|
||||
| `end_date` | `DATE` | Fecha de fin de las vacaciones. |
|
||||
| `status` | `ENUM('pending', 'approved', 'rejected')` | Estado de la solicitud. |
|
||||
| `approver_id` | `INT` (FK, nullable) | Manager o admin que aprobó/rechazó la solicitud (`users.id`). |
|
||||
| `comments` | `TEXT` | Comentarios del solicitante o del aprobador. |
|
||||
| `created_at` | `DATETIME` | Fecha de creación de la solicitud. |
|
||||
| `updated_at` | `DATETIME` | Fecha de última actualización (aprobación/rechazo). |
|
||||
|
||||
## 4. Interacción con la Base de Datos
|
||||
## 4. Tabla de Permisos por Horas (`permission_requests`)
|
||||
|
||||
A continuación, se describe cómo el bot interactúa con estas tablas.
|
||||
Registro de solicitudes de permisos por horas (llegar tarde, salir temprano, etc.).
|
||||
|
||||
### a. Gestión de Usuarios
|
||||
| Campo | Tipo | Descripción |
|
||||
|---------------|-------------------------------------|--------------------------------------------------------------------|
|
||||
| `id` | `INT` (PK) | Identificador único del permiso. |
|
||||
| `user_id` | `INT` (FK) | Empleada que solicita (`users.id`). |
|
||||
| `request_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 de la solicitud. |
|
||||
| `status` | `ENUM('pending', 'approved', 'rejected')` | Estado del permiso. |
|
||||
| `approver_id` | `INT` (FK, nullable) | Manager o admin que gestionó el permiso (`users.id`). |
|
||||
| `created_at` | `DATETIME` | Fecha de creación de la solicitud. |
|
||||
| `updated_at` | `DATETIME` | Fecha de la gestión. |
|
||||
|
||||
- **Creación de Usuario**: Cuando un nuevo usuario interactúa con el bot por primera vez (e.g., al usar `/start`), se crea un nuevo registro en la tabla `users` con su `telegram_id`, `username`, `first_name` y `last_name`.
|
||||
- **Actualización de Usuario**: La información del usuario se puede actualizar si cambia su nombre de usuario, nombre o apellido en Telegram.
|
||||
- **Estado del Usuario**: El campo `is_active` se utiliza para desactivar a un usuario si deja la empresa, sin eliminar sus registros.
|
||||
## 5. Interacción con la Base de Datos y Sistema de Roles
|
||||
|
||||
### b. Flujo de `/welcome`
|
||||
El bot utiliza un sistema de roles para gestionar el acceso a los datos y funcionalidades.
|
||||
|
||||
- **Inicio del Flujo**: Cuando un usuario inicia el flujo de `/welcome`, se crea un registro en la tabla `welcome_flow_data` con el `user_id` correspondiente y un estado de `in_progress`.
|
||||
- **Recopilación de Datos**: A medida que el usuario proporciona su información (nombre, CURP, RFC, etc.), los campos correspondientes en la tabla `welcome_flow_data` se actualizan.
|
||||
- **Finalización del Flujo**: Una vez que el usuario ha proporcionado toda la información, el estado en `welcome_flow_data` se actualiza a `completed`.
|
||||
### a. Roles de Usuario
|
||||
|
||||
### c. Gestión de Permisos
|
||||
- **`user`**: Es el rol por defecto. Puede registrarse (`/welcome`), solicitar vacaciones (`/vacaciones`), pedir permisos (`/permiso`) y recibir notificaciones sobre el estado de sus solicitudes.
|
||||
- **`manager`**: Tiene los mismos permisos que un `user`, pero además puede consultar la información de otras usuarias a través del flujo `/data_socias`. También puede aprobar o rechazar solicitudes de vacaciones y permisos de las usuarias a su cargo.
|
||||
- **`admin`**: Tiene acceso completo a toda la información y funcionalidades. Puede gestionar usuarios, aprobar cualquier solicitud y acceder a todos los datos.
|
||||
|
||||
- **Asignación de Permisos**: Los permisos se asignan a los usuarios a través de la tabla `permissions`. Por defecto, los usuarios no tienen permisos para actualizar registros o acceder a reportes.
|
||||
- **Verificación de Permisos**: Antes de ejecutar comandos que requieran permisos especiales (e.g., un comando para actualizar la información de otro usuario), el bot consulta la tabla `permissions` para verificar si el usuario tiene los permisos necesarios.
|
||||
- **Actualización de Registros**: Si un usuario tiene el permiso `can_update_records` establecido en `true`, podrá modificar la información en la tabla `welcome_flow_data` de otros usuarios.
|
||||
### b. Flujo de Solicitudes (Vacaciones y Permisos)
|
||||
|
||||
1. **Creación**: Una usuaria (`user`) inicia el flujo (`/vacaciones` o `/permiso`). El bot crea un nuevo registro en la tabla correspondiente (`vacations` o `permission_requests`) con el estado `'pending'`.
|
||||
2. **Notificación**: Se notifica a los `managers` y `admins` sobre la nueva solicitud.
|
||||
3. **Gestión**: Un `manager` o `admin` revisa la solicitud.
|
||||
4. **Actualización**: El `manager`/`admin` aprueba o rechaza la solicitud. El bot actualiza el registro correspondiente, cambiando el `status` a `'approved'` o `'rejected'`, y guardando el `approver_id`.
|
||||
5. **Notificación Final**: Se notifica a la usuaria solicitante sobre la resolución de su petición.
|
||||
|
||||
### c. Acceso a Datos (`/data_socias`)
|
||||
|
||||
- Cuando un `manager` o `admin` utiliza el comando `/data_socias`, el bot consulta la tabla `users` y `onboarding_data` para devolver la información de las empleadas.
|
||||
- Un `manager` solo podrá ver la información de las usuarias que reportan a él/ella (lógica de negocio a implementar), mientras que un `admin` podrá ver la de todas.
|
||||
|
||||
Reference in New Issue
Block a user