# 🏨 Hacienda San Angel — Sistema de Gestión Hotelera > **Versión:** 1.0.0 > **Entorno:** Node.js + PostgreSQL + React 19 > **Repositorio:** `https://git.consultoria-as.com/consultoria-as/hotel-hacienda` --- ## 📋 Índice 1. [Descripción del Proyecto](#descripción-del-proyecto) 2. [Arquitectura General](#arquitectura-general) 3. [Estructura del Repositorio](#estructura-del-repositorio) 4. [Tecnologías](#tecnologías) 5. [Instalación y Configuración](#instalación-y-configuración) 6. [Scripts Disponibles](#scripts-disponibles) 7. [Documentación Adicional](#documentación-adicional) 8. [Integraciones Externas](#integraciones-externas) 9. [Seguridad y Autenticación](#seguridad-y-autenticación) 10. [Créditos](#créditos) --- ## Descripción del Proyecto Sistema administrativo integral para la gestión financiera, operativa y de recursos humanos del hotel **Hacienda San Angel**. El sistema gestiona: - **Ingresos:** Little Hotelier, Stripe, Facturas electrónicas (Horux), análisis P&L - **Gastos:** Aprobaciones, pagos, reportes, pagos mensuales recurrentes - **Nómina:** Empleados, contratos, asistencia, puestos, áreas - **Inventario:** Productos, proveedores, ajustes de stock, consumos, descartes - **Configuraciones:** Habitaciones, propiedades, catálogos maestros - **Reportes:** Dashboards, análisis de habitaciones, análisis de restaurante --- ## Arquitectura General ``` ┌─────────────────────────────────────────────────────────────┐ │ CLIENTE (Browser) │ │ React 19 + Vite + React Router │ │ Puerto: 5172 (dev) │ └──────────────────────┬──────────────────────────────────────┘ │ HTTP / JSON ▼ ┌─────────────────────────────────────────────────────────────┐ │ SERVIDOR API (Node.js) │ │ Express 5 + CORS + Nodemailer │ │ Puerto: 3000-4000 │ │ │ │ Endpoints: /api/auth, /api/employees, /api/expenses, │ │ /api/products, /api/incomes, /api/incomeshrx, etc. │ └──────────────────────┬──────────────────────────────────────┘ │ SQL (funciones PostgreSQL) ▼ ┌─────────────────────────────────────────────────────────────┐ │ BASE DE DATOS (PostgreSQL) │ │ │ │ Lógica de negocio implementada en funciones SQL: │ │ newexpensev2(), purchaseentry(), setpaymentstatusv2(), │ │ getincomehorux(), addstripedatav2(), etc. │ └─────────────────────────────────────────────────────────────┘ ``` **Patrón arquitectónico:** MVC simplificado donde los **Controllers** solo orquestan llamadas a funciones PostgreSQL. La lógica de negocio reside principalmente en la base de datos. --- ## Estructura del Repositorio ``` hotel-hacienda/ ├── backend/ │ └── hotel_hacienda/ # API REST Node.js │ ├── src/ │ │ ├── server.js # Entry point │ │ ├── app.js # Config Express + rutas │ │ ├── db/connection.js # Pool PostgreSQL │ │ ├── controllers/ # 18 controllers │ │ ├── routes/ # 16 archivos de rutas │ │ ├── middlewares/ # Validaciones │ │ └── services/ # Nodemailer │ ├── .env # Variables de entorno (NO subir) │ └── package.json │ ├── frontend/ │ └── Frontend-Hotel/ # SPA React │ ├── src/ │ │ ├── main.jsx # Entry point React │ │ ├── App.jsx # Enrutamiento │ │ ├── components/ # Layout, Tablas, Modales, etc. │ │ ├── pages/ # ~50+ páginas por dominio │ │ ├── context/ # AuthContext, LangContext │ │ ├── services/ # API clients │ │ ├── constants/ # Configuración de menú │ │ └── styles/ # CSS por componente │ ├── public/ # Assets estáticos │ ├── .env # VITE_API_BASE_URL │ └── package.json │ ├── backupcondatos22122025.sql # Backup de base de datos ├── DOCUMENTACION_TECNICA.md # Documentación técnica completa ├── README.md # Este archivo └── docs/ # Documentación extendida ├── BACKEND.md ├── FRONTEND.md ├── DATABASE.md ├── API.md ├── DEPLOYMENT.md └── TROUBLESHOOTING.md ``` --- ## Tecnologías ### Backend | Tecnología | Versión | Propósito | |-----------|---------|-----------| | Node.js | — | Runtime | | Express | ^5.1.0 | Framework web | | PostgreSQL | — | Base de datos | | pg (node-postgres) | ^8.16.3 | Driver PostgreSQL | | Axios | ^1.13.2 | HTTP client para APIs externas | | Nodemailer | ^7.0.12 | Envío de correos | | Stripe | ^20.1.0 | Integración de pagos | | xlsx / csv-parser | ^0.18.5 / ^3.2.0 | Procesamiento de archivos | | express-validator | ^7.2.1 | Validación de inputs | | dotenv | ^17.2.2 | Variables de entorno | ### Frontend | Tecnología | Versión | Propósito | |-----------|---------|-----------| | React | ^19.1.1 | UI Library | | React DOM | ^19.1.1 | Renderizado | | React Router DOM | ^7.8.2 | Enrutamiento SPA | | Vite | ^7.1.2 | Build tool y dev server | | Axios | ^1.11.0 | HTTP client | | Tailwind CSS | ^4.1.13 | Framework CSS (uso parcial) | | Bootstrap | ^5.3.8 | Framework CSS (uso parcial) | | react-hook-form | ^7.66.1 | Manejo de formularios | | Yup | ^1.7.1 | Validación de esquemas | | xlsx | ^0.18.5 | Exportación a Excel | | react-icons | ^5.5.0 | Iconografía | --- ## Instalación y Configuración ### Requisitos Previos - Node.js 18+ - PostgreSQL 13+ - npm o pnpm ### 1. Clonar el Repositorio ```bash git clone https://git.consultoria-as.com/consultoria-as/hotel-hacienda.git cd hotel-hacienda ``` ### 2. Configurar Base de Datos Restaurar el backup de PostgreSQL: ```bash psql -U postgres -c "CREATE DATABASE hotel_hacienda;" psql -U postgres -d hotel_hacienda -f backupcondatos22122025.sql ``` > **Nota:** El backup contiene las funciones SQL, tablas, catálogos y datos maestros del sistema. ### 3. Configurar Backend ```bash cd backend/hotel_hacienda cp .env.example .env # Si no existe, crear manualmente npm install ``` Archivo `.env` del backend: ```env PORT=3000 URL_CORS=https://hotel.consultoria-as.com # PostgreSQL DB_HOST=localhost DB_PORT=5432 DB_USER=postgres DB_PASSWORD=TU_PASSWORD DB_NAME=hotel_hacienda # Email EMAIL_HOST=smtp.tudominio.com EMAIL_PORT=587 EMAIL_USER=soporte@horuxfin.com EMAIL_PASS=TU_PASSWORD # Stripe STRIPE_SECRET_KEY=sk_test_... # API Facturas (México) FACTURAS_API_URL=https://api.facturas.com/... FACTURAS_ISSUER_RFC=RFC_EMISOR FACTURAS_TYPE=I FACTURAS_API_TOKEN=token_aqui # Banxico BANXICO_TOKEN=token_banxico ``` ### 4. Iniciar Backend ```bash npm run dev # Desarrollo con nodemon # o npm start # Producción ``` ### 5. Configurar Frontend ```bash cd frontend/Frontend-Hotel cp .env.example .env npm install ``` Archivo `.env` del frontend: ```env VITE_API_BASE_URL=http://localhost:3000/api ``` ### 6. Iniciar Frontend ```bash npm run dev # Puerto 5172 ``` --- ## Scripts Disponibles ### Backend (`backend/hotel_hacienda/`) | Script | Comando | Descripción | |--------|---------|-------------| | `start` | `node src/server.js` | Producción | | `dev` | `nodemon src/server.js` | Desarrollo con hot reload | ### Frontend (`frontend/Frontend-Hotel/`) | Script | Comando | Descripción | |--------|---------|-------------| | `dev` | `vite` | Servidor de desarrollo | | `build` | `vite build` | Build de producción | | `preview` | `vite preview` | Previsualizar build | | `lint` | `eslint .` | Linting del código | --- ## Documentación Adicional - [`DOCUMENTACION_TECNICA.md`](./DOCUMENTACION_TECNICA.md) — Análisis técnico completo, endpoints, roles, integraciones y reglas de oro para no romper integridad. - [`docs/BACKEND.md`](./docs/BACKEND.md) — Guía detallada del backend: estructura de carpetas, controllers, servicios y configuración. - [`docs/FRONTEND.md`](./docs/FRONTEND.md) — Guía del frontend: componentes, rutas, manejo de estado, permisos y estilos. - [`docs/DATABASE.md`](./docs/DATABASE.md) — Documentación de la base de datos: funciones SQL conocidas, tablas principales y relaciones. - [`docs/API.md`](./docs/API.md) — Referencia completa de todos los endpoints REST. - [`docs/DEPLOYMENT.md`](./docs/DEPLOYMENT.md) — Guía de despliegue en producción. - [`docs/TROUBLESHOOTING.md`](./docs/TROUBLESHOOTING.md) — Problemas comunes y soluciones. --- ## Integraciones Externas | Servicio | Uso | Archivo Relacionado | |----------|-----|---------------------| | **Banxico API** | Tipo de cambio USD/MXN | `exchange.controller.js` | | **Stripe API** | Transfers y balance transactions | `incomehrx.controller.js` | | **API Facturas** | Descarga de facturas electrónicas (México) | `incomehrx.controller.js` | | **Nodemailer/SMTP** | Correos transaccionales | `mail.controller.js`, `auth.controller.js` | --- ## Seguridad y Autenticación > ⚠️ **Advertencia de seguridad:** Este sistema utiliza autenticación básica basada en función SQL (`validarusuario`) sin JWT ni middleware de autorización en los endpoints del backend. El control de acceso se realiza principalmente en el frontend mediante un número de rol guardado en `localStorage`. > > **Recomendación:** Para producción, considerar implementar: > - JWT o API Keys en el backend > - Middleware de autorización por rol > - HTTPS obligatorio > - Sanitización adicional de inputs --- ## Créditos Desarrollado para **Consultoría AS** — Hacienda San Angel. --- > **Mantenimiento:** Si realizas cambios significativos, actualiza tanto el código como la documentación correspondiente para mantener la integridad del sistema.