# 📜 Changelog — Sistema de Gestión Hotelera Hacienda San Angel > Formato basado en [Keep a Changelog](https://keepachangelog.com/es-ES/1.0.0/). --- ## [1.0.0] - 2026-06-09 ### Agregado - Documentación técnica completa del sistema (`DOCUMENTACION_TECNICA.md`). - README principal con guía de instalación y arquitectura. - Documentación extendida en carpeta `docs/`: - `BACKEND.md` — Guía detallada de la API Node.js/Express. - `FRONTEND.md` — Guía del SPA React + Vite. - `DATABASE.md` — Documentación de funciones SQL de PostgreSQL. - `API.md` — Referencia completa de endpoints REST. - `DEPLOYMENT.md` — Guía de despliegue en producción. - `TROUBLESHOOTING.md` — Solución de problemas comunes. - Commit de consolidación con todo el código base del proyecto. - Repositorio migrado a Gitea (`https://git.consultoria-as.com`). ### Notas Técnicas - El proyecto utiliza arquitectura "Database-First" donde la lógica de negocio reside en funciones SQL de PostgreSQL. - Backend: Node.js + Express 5 + pg (sin ORM). - Frontend: React 19 + Vite + React Router DOM 7. - Integraciones: Stripe, Banxico, API de Facturas (México), Nodemailer. --- ## [Pre-1.0] — Historial de Desarrollo ### Funcionalidades Implementadas #### Autenticación - Login con validación mediante función SQL `validarusuario()`. - Recuperación de contraseña con generación aleatoria y envío por correo. - Creación de usuarios con roles numéricos. #### Nómina (Payroll) - CRUD de empleados con RFC, NSS, CURP, contactos de emergencia. - Gestión de contratos laborales con fechas de vencimiento. - Catálogos: puestos, áreas, grados de estudio, parentescos. - Reporte de asistencia. #### Gastos (Expenses) - Creación de gastos con productos asociados (JSONB). - Flujo de aprobación: Pendiente → Aprobado → Rechazado. - Flujo de pago con estados separados de aprobación. - Gastos mensuales recurrentes. - Reportes de gastos y pagos. #### Inventario - Catálogo de productos con categorías, tipos, proveedores. - Entradas de compra (`purchaseentry`) con recepción física. - Ajustes de stock masivos via JSONB. - Consumos de inventario por empleado. - Descarte de productos con motivo. - Reporte de movimientos de inventario. #### Ingresos - Carga masiva desde Little Hotelier (CSV/XLSX). - Sincronización de facturas electrónicas via API externa. - Integración con Stripe para transfers. - Ingresos manuales (Horux) con categorías. - Reportes P&L para Hotel y Restaurante. #### Configuraciones - Gestión de habitaciones y propiedades. - Catálogos maestros: monedas, unidades, categorías de gasto, recurrencias. #### Emails Programáticos - Envío controlado de emails (1x/mes) para: - Contratos por vencer - Pagos atrasados - Gastos próximos a fecha límite - Cumpleaños de empleados - Contratos vencidos --- ## Problemas Conocidos (Deuda Técnica) ### Críticos - Sin autenticación JWT ni middleware de autorización en el backend. - Ruta malformada: `updatesupplier/:id` falta `/` inicial. - `useAuth` no exportado desde `AuthContext.jsx`. - URLs hardcodeadas a `localhost` en varios servicios del frontend. ### Medios - Sin `ProtectedRoute` activo en `App.jsx`. - Mezcla inconsistente de `fetch` y `axios`. - Código comentado masivo en varios archivos. - `multer` incluido en dependencias del frontend (es un middleware de Node.js). - Sin tests unitarios ni e2e. ### Leves - Tailwind CSS instalado pero usado esporádicamente junto con Bootstrap y CSS puro. - Sin manejo de estado de servidor (TanStack Query/SWR). - Sin TypeScript. --- > Para ver el historial completo de commits, ejecutar: `git log --oneline --all --graph` --- ## [1.0.1] - 2026-06-25 ### Corregido - **Flujo de inventario:** Eliminada la duplicación de stock al pagar un expense. Ahora `purchaseentry()` es la única función que ingresa stock físicamente, y `setpaymentstatusv2()` revierte el stock al cancelar/rechazar el pago. - **Ordenamiento del Inventory Report:** La función `report_inventoryv2()` ahora ordena por `id_product` + `id_sto_mov` secuencial, eliminando el ordenamiento intermedio por fecha. - **Historial de posición/área en contratos:** La tabla `contracts` ahora incluye las columnas `id_position` e `id_area`. Las funciones `getcontracts()`, `newcontract()`, `updatecontract()` y `reportemployeecontract()` fueron actualizadas para usar estos valores históricos en lugar de la posición/área actual del empleado. ### Scripts SQL agregados - `scripts_sql/fix_inventory_flow_complete.sql` y `rollback_inventory_flow_complete.sql` - `scripts_sql/fix_report_inventoryv2_orderby.sql` y `rollback_report_inventoryv2_orderby.sql` - `scripts_sql/fix_contracts_position_area.sql` y `rollback_contracts_position_area.sql` - `scripts_sql/emergency_rollback_inventory.sh` - `scripts_sql/README_INVENTORY_FIX.md` ### Documentación - Actualizado `docs/DATABASE.md`. - Actualizado `DOCUMENTACION_TECNICA.md`.