mirror of
https://github.com/marcogll/hr_soul23.git
synced 2026-01-13 13:25:16 +00:00
This commit establishes the database foundation for the HR Platform. Key changes include: - Defined the complete data schema in `docs/API_CONTRACTS.md` to serve as a single source of truth. - Integrated `knex.js` with `sqlite3` to manage the database connection and schema. - Implemented a version-controlled migration system and created initial migrations for all required tables. - Created seed files to populate the database with sample data for development. - Addressed security feedback by using `bcrypt` to hash user passwords in the seed data and adding the SQLite database file to `.gitignore`.
123 lines
4.3 KiB
Markdown
123 lines
4.3 KiB
Markdown
# API & Data Contracts
|
|
|
|
Este documento es la **única fuente de verdad** para los modelos de datos y las APIs del sistema. Todos los agentes (backend, frontend, testing) deben adherirse a estos contratos.
|
|
|
|
---
|
|
|
|
## Modelos de Datos (Tablas)
|
|
|
|
### `socias`
|
|
|
|
Almacena la información de las empleadas.
|
|
|
|
| Columna | Tipo | Descripción |
|
|
|---|---|---|
|
|
| `id` | `INTEGER` | PK, Auto-increment |
|
|
| `nombre` | `VARCHAR(255)` | Nombre de la socia |
|
|
| `apellido` | `VARCHAR(255)` | Apellido de la socia |
|
|
| `fecha_ingreso`| `DATE` | Fecha de ingreso a la empresa |
|
|
| `id_sucursal` | `INTEGER` | FK a `sucursales.id` |
|
|
| `activo` | `BOOLEAN` | `true` si está activa, `false` si no |
|
|
| `created_at` | `TIMESTAMP` | Fecha de creación del registro |
|
|
| `updated_at` | `TIMESTAMP` | Fecha de última modificación |
|
|
|
|
### `sucursales`
|
|
|
|
Almacena las diferentes sucursales o centros de trabajo.
|
|
|
|
| Columna | Tipo | Descripción |
|
|
|---|---|---|
|
|
| `id` | `INTEGER` | PK, Auto-increment |
|
|
| `nombre` | `VARCHAR(255)` | Nombre de la sucursal |
|
|
| `direccion` | `TEXT` | Dirección física de la sucursal |
|
|
| `created_at` | `TIMESTAMP` | Fecha de creación del registro |
|
|
| `updated_at` | `TIMESTAMP` | Fecha de última modificación |
|
|
|
|
### `vacaciones`
|
|
|
|
Registra las solicitudes y periodos de vacaciones.
|
|
|
|
| Columna | Tipo | Descripción |
|
|
|---|---|---|
|
|
| `id` | `INTEGER` | PK, Auto-increment |
|
|
| `id_socia` | `INTEGER` | FK a `socias.id` |
|
|
| `fecha_inicio` | `DATE` | Inicio del periodo vacacional |
|
|
| `fecha_fin` | `DATE` | Fin del periodo vacacional |
|
|
| `dias_tomados` | `INTEGER` | Cantidad de días hábiles |
|
|
| `estado` | `VARCHAR(50)` | `solicitada`, `aprobada`, `rechazada` |
|
|
| `ciclo_anual` | `VARCHAR(10)`| Ciclo al que corresponden, ej: "2023-2024" |
|
|
| `created_at` | `TIMESTAMP` | Fecha de creación del registro |
|
|
| `updated_at` | `TIMESTAMP` | Fecha de última modificación |
|
|
|
|
### `permisos`
|
|
|
|
Registra ausencias justificadas que no son vacaciones.
|
|
|
|
| Columna | Tipo | Descripción |
|
|
|---|---|---|
|
|
| `id` | `INTEGER` | PK, Auto-increment |
|
|
| `id_socia` | `INTEGER` | FK a `socias.id` |
|
|
| `fecha` | `DATE` | Fecha del permiso |
|
|
| `horas` | `INTEGER` | `NULL` si es por día completo |
|
|
| `dias` | `INTEGER` | `NULL` si es por horas |
|
|
| `motivo` | `TEXT` | Razón del permiso |
|
|
| `estado` | `VARCHAR(50)` | `solicitado`, `aprobado`, `rechazado` |
|
|
| `created_at` | `TIMESTAMP` | Fecha de creación del registro |
|
|
| `updated_at` | `TIMESTAMP` | Fecha de última modificación |
|
|
|
|
### `eventos`
|
|
|
|
Log de eventos para webhooks.
|
|
|
|
| Columna | Tipo | Descripción |
|
|
|---|---|---|
|
|
| `id` | `INTEGER` | PK, Auto-increment |
|
|
| `tipo_evento` | `VARCHAR(100)`| Ej: `vacaciones.solicitada` |
|
|
| `payload` | `JSON` | Datos del evento |
|
|
| `endpoint_url` | `VARCHAR(255)`| URL a la que se envió el webhook |
|
|
| `estado_entrega`| `VARCHAR(50)` | `pendiente`, `enviado`, `fallido` |
|
|
| `created_at` | `TIMESTAMP` | Fecha de creación del registro |
|
|
|
|
### `configuraciones`
|
|
|
|
Almacena configuraciones clave-valor para el sistema.
|
|
|
|
| Columna | Tipo | Descripción |
|
|
|---|---|---|
|
|
| `id` | `INTEGER` | PK, Auto-increment |
|
|
| `clave` | `VARCHAR(100)`| Clave única de configuración |
|
|
| `valor` | `TEXT` | Valor de la configuración |
|
|
| `descripcion` | `TEXT` | Para qué sirve la configuración |
|
|
| `created_at` | `TIMESTAMP` | Fecha de creación del registro |
|
|
| `updated_at` | `TIMESTAMP` | Fecha de última modificación |
|
|
|
|
### `usuarios`
|
|
|
|
Usuarios que pueden acceder al sistema.
|
|
|
|
| Columna | Tipo | Descripción |
|
|
|---|---|---|
|
|
| `id` | `INTEGER` | PK, Auto-increment |
|
|
| `nombre` | `VARCHAR(255)` | Nombre del usuario |
|
|
| `email` | `VARCHAR(255)`| Email único para login |
|
|
| `password_hash`| `VARCHAR(255)`| Hash de la contraseña |
|
|
| `rol` | `VARCHAR(50)` | `root`, `admin`, `user` |
|
|
| `created_at` | `TIMESTAMP` | Fecha de creación del registro |
|
|
| `updated_at` | `TIMESTAMP` | Fecha de última modificación |
|
|
|
|
### `permisos_granulares`
|
|
|
|
Define permisos específicos por usuario y recurso.
|
|
|
|
| Columna | Tipo | Descripción |
|
|
|---|---|---|
|
|
| `id` | `INTEGER` | PK, Auto-increment |
|
|
| `id_usuario` | `INTEGER` | FK a `usuarios.id` |
|
|
| `recurso` | `VARCHAR(100)`| Ej: `socias`, `vacaciones` |
|
|
| `accion` | `VARCHAR(50)` | `crear`, `leer`, `actualizar`, `eliminar` |
|
|
| `permitido` | `BOOLEAN` | `true` si tiene el permiso |
|
|
| `created_at` | `TIMESTAMP` | Fecha de creación del registro |
|
|
| `updated_at` | `TIMESTAMP` | Fecha de última modificación |
|
|
|
|
---
|