diff --git a/db_tasks.md b/db_tasks.md new file mode 100644 index 0000000..6b2c6b6 --- /dev/null +++ b/db_tasks.md @@ -0,0 +1,72 @@ +# 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. + +## 1. Tabla de Usuarios (`users`) + +Esta tabla almacena la información básica de cada usuario que interactúa con el bot. + +| 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. | + +## 2. Tabla de Permisos (`permissions`) + +Esta tabla gestiona los permisos de los usuarios para realizar acciones específicas. + +| 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. | + +## 3. Tabla de Datos del Flujo de Bienvenida (`welcome_flow_data`) + +Esta tabla almacena los datos recopilados durante el flujo de `/welcome`. + +| 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. | + +## 4. Interacción con la Base de Datos + +A continuación, se describe cómo el bot interactúa con estas tablas. + +### a. Gestión de Usuarios + +- **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. + +### b. Flujo de `/welcome` + +- **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`. + +### c. Gestión de Permisos + +- **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.