# Estructura del Repositorio — SKEEN Derma Experts **Versión:** 2.0 **Fecha:** 16 de julio de 2026 --- ## 1. Estructura General ``` SKEEN-Proyecto/ ├── README.md # Documentación principal ├── .gitignore # Archivos excluidos de Git ├── docs/ # Documentación extensiva │ ├── arquitectura.md # Arquitectura técnica │ ├── instalacion.md # Guía de instalación │ ├── configuracion.md # Variables y credenciales │ ├── api.md # Referencia de endpoints │ ├── skills-hermes.md # Skills de IA │ ├── migracion.md # Guía de migración │ ├── seguridad.md # Políticas de seguridad │ ├── mantenimiento.md # Operación y troubleshooting │ ├── estructura.md # Este archivo │ ├── ANALISIS_SKEEN_SISTEMA.md # Análisis sistema legacy │ ├── ESTADO_PROYECTO.md # Estado detallado │ └── ROADMAP_SKEEN_MEJORA.md # Roadmap de mejoras ├── frontend/ # Frontend React (SKEEN Brand) │ ├── src/ │ │ ├── components/ # Componentes reutilizables │ │ ├── pages/ # Páginas/rutas │ │ ├── services/ # Cliente API (odoo.ts) │ │ ├── designs/ # Diseños de UI │ │ │ └── brand/ # Diseño oficial SKEEN Brand │ │ ├── hooks/ # Custom hooks │ │ ├── utils/ # Utilidades │ │ ├── App.tsx # Componente raíz │ │ └── main.tsx # Punto de entrada │ ├── public/ # Assets estáticos │ ├── index.html # HTML base │ ├── package.json # Dependencias npm │ ├── vite.config.ts # Configuración Vite │ ├── tailwind.config.js # Configuración Tailwind │ └── tsconfig.json # Configuración TypeScript ├── frontend-homenest/ # Frontend alternativo (Homenest) │ └── (misma estructura que frontend/) ├── odoo-addons/ # Módulos Odoo custom │ ├── skeen_citas/ # Citas médicas │ │ ├── models/ │ │ │ └── cita.py # Modelo skeen.cita, skeen.servicio │ │ ├── views/ │ │ ├── security/ │ │ │ └── ir.model.access.csv │ │ ├── data/ │ │ │ └── sequences.xml │ │ └── __manifest__.py │ ├── skeen_pacientes/ # Pacientes y expedientes │ │ ├── models/ │ │ │ ├── res_partner.py # Extensión res.partner │ │ │ └── hr_employee.py # Extensión hr.employee │ │ └── __manifest__.py │ ├── skeen_monedero/ # Sistema de puntos/fidelidad │ │ ├── models/ │ │ │ ├── monedero.py # Modelo skeen.monedero │ │ │ └── res_partner.py # Campos en res.partner │ │ └── __manifest__.py │ ├── skeen_pagos/ # Pagos y adeudos │ │ ├── models/ │ │ │ └── pago.py # Modelo skeen.pago │ │ └── __manifest__.py │ ├── skeen_ventas/ # Ventas y corte de caja │ │ ├── models/ │ │ │ ├── venta.py # Modelo skeen.venta │ │ │ └── tipo_cambio.py # Tipo de cambio │ │ ├── views/ │ │ └── __manifest__.py │ ├── skeen_inventario/ # Inventario │ │ ├── models/ │ │ │ └── inventario.py # Modelo skeen.inventario.item │ │ └── __manifest__.py │ └── skeen_whatsapp/ # API REST para integraciones │ ├── controllers/ │ │ ├── frontend.py # Endpoints para Frontend React │ │ ├── main.py # Endpoints para Hermes/WACRM │ │ └── wacrm_proxy.py # Proxy WACRM ↔ Odoo │ ├── models/ │ │ ├── frontend_user.py # Usuarios del frontend │ │ └── wacrm_sync.py # Modelos cache WACRM │ ├── data/ │ │ └── frontend_users.xml # Usuario seed admin │ └── __manifest__.py ├── wacrm/ # WACRM (fork) │ ├── src/ # Código fuente Next.js │ ├── public/ # Assets │ ├── docs/ # Documentación WACRM │ ├── .env.local.example # Template de variables │ └── package.json ├── hermes/ # Hermes + Bridge + Skills │ ├── hermes/ # Configuración Hermes │ │ ├── skills/ # Skills de Hermes │ │ │ ├── skeen-rag/ # Catálogo servicios │ │ │ ├── skeen-agendar/ # Agendamiento │ │ │ ├── skeen-pagos/ # Pagos │ │ │ ├── skeen-monedero/ # Monedero │ │ │ └── skeen-recordatorios/ # Recordatorios │ │ ├── workspace/ # Workspace Hermes │ │ ├── webhook-bridge.js # Bridge WACRM → Hermes │ │ └── config.yaml # Configuración │ ├── skills/ # Skills adicionales │ │ └── hermes-skeen/ │ ├── docs/ │ ├── infra/ │ └── docker-compose.dev.yml ├── migracion/ # Scripts de migración │ ├── importar_a_odoo.py # Migración principal │ ├── importar_servicios_inventario.py # Servicios + inventario │ ├── extraer_skeen.py # Extracción legacy │ ├── borrar_datos_demo.py # Limpieza demo │ ├── datos/ # CSVs de datos (no commitear) │ └── README.md # Documentación migración ├── scripts/ # Scripts de operación │ ├── skeen-start-all.sh # Iniciar todo │ ├── skeen-stop-all.sh # Detener todo │ ├── skeen-start-odoo.sh # Iniciar solo Odoo │ ├── odoo-test-data.py # Pruebas datos Odoo │ └── simular_meta_webhook.py # Simulador webhook Meta └── infra/ # Infraestructura ├── odoo.conf # Configuración Odoo └── docker-compose.dev.yml # Desarrollo local ``` --- ## 2. Archivos Clave por Componente ### 2.1 Frontend React | Archivo | Propósito | |---------|-----------| | `frontend/src/App.tsx` | Rutas principales, redirige a `/designs/brand` | | `frontend/src/designs/brand/Dashboard.tsx` | Dashboard principal | | `frontend/src/services/odoo.ts` | Cliente API para Odoo | | `frontend/src/pages/Agenda.tsx` | Calendario de citas | | `frontend/src/pages/Pacientes.tsx` | Gestión de pacientes | | `frontend/src/pages/Servicios.tsx` | Catálogo de servicios | | `frontend/src/pages/WacrmMessages.tsx` | Mensajes de WACRM | | `frontend/src/pages/WacrmLeads.tsx` | Leads/pipelines de WACRM | | `frontend/vite.config.ts` | Proxy `/api/odoo` → Odoo | ### 2.2 Odoo | Archivo | Propósito | |---------|-----------| | `odoo-addons/skeen_citas/models/cita.py` | Modelos citas y servicios | | `odoo-addons/skeen_whatsapp/controllers/frontend.py` | API Frontend React | | `odoo-addons/skeen_whatsapp/controllers/main.py` | API Hermes/WACRM | | `odoo-addons/skeen_whatsapp/controllers/wacrm_proxy.py` | Proxy WACRM ↔ Odoo | | `odoo-addons/skeen_whatsapp/models/wacrm_sync.py` | Modelos cache WACRM | | `odoo-addons/skeen_monedero/models/monedero.py` | Sistema de puntos | | `infra/odoo.conf` | Configuración Odoo | ### 2.3 WACRM | Archivo | Propósito | |---------|-----------| | `wacrm/.env.local` | Variables de entorno (no commitear) | | `wacrm/.env.local.example` | Template de variables | | `wacrm/src/app/api/` | API routes de WACRM | ### 2.4 Hermes | Archivo | Propósito | |---------|-----------| | `hermes/hermes/webhook-bridge.js` | Bridge WACRM → Hermes | | `hermes/hermes/skills/skeen-*/SKILL.md` | Definición de skills | | `/root/.hermes/skills/skeen-services.json` | Catálogo de servicios (generado) | ### 2.5 Migración | Archivo | Propósito | |---------|-----------| | `migracion/importar_a_odoo.py` | Migración principal | | `migracion/importar_servicios_inventario.py` | Servicios e inventario | | `migracion/extraer_skeen.py` | Extracción legacy | --- ## 3. Flujo de Archivos ### 3.1 Agendar Cita (Frontend → Odoo) ``` frontend/src/pages/Agenda.tsx → frontend/src/services/odoo.ts (createAppointment) → POST /skeen/frontend/v1/appointments → odoo-addons/skeen_whatsapp/controllers/frontend.py (create_appointment) → odoo-addons/skeen_citas/models/cita.py (create) → PostgreSQL skeen_odoo ``` ### 3.2 Mensaje WhatsApp (Meta → WACRM → Hermes → Odoo) ``` Meta Cloud API → POST /api/whatsapp/webhook (WACRM) → wacrm/src/app/api/whatsapp/webhook/route.ts → Supabase (guarda mensaje) → Automatización send_webhook → POST http://localhost:8090/webhook/wacrm (Bridge) → hermes/hermes/webhook-bridge.js → Nan Builders API (Qwen3.6) → Respuesta → POST /api/v1/messages (WACRM) → Meta Cloud API → Paciente ``` ### 3.3 Consulta de Servicios (Hermes → Odoo) ``` Usuario: "¿Cuánto cuesta la depilación láser?" → WACRM → Bridge → Hermes → Skill skeen-rag activado → Lee /root/.hermes/skills/skeen-services.json → Responde con precios y paquetes → Si quiere agendar → Skill skeen-agendar → POST /skeen/api/v1/available_slots (Odoo) → POST /skeen/api/v1/create_appointment (Odoo) ``` --- ## 4. Archivos No Incluidos en Git Los siguientes archivos/directorios están en `.gitignore` y no se suben al repositorio: | Archivo/Directorio | Razón | |--------------------|-------| | `.env`, `.env.local` | Secretos | | `node_modules/` | Dependencias | | `dist/`, `build/` | Builds | | `__pycache__/`, `*.pyc` | Cache Python | | `backups/` | Backups | | `datos/` | Datos sensibles de migración | | `*.key`, `*.pem` | Certificados | | `hermes-venv/`, `odoo-venv/` | Entornos virtuales | | `.next/` | Cache Next.js | | `*.log` | Logs | --- ## 5. Ramas de Git | Rama | Propósito | |------|-----------| | `main` | Producción estable | | `develop` | Desarrollo integrado | | `feature/*` | Nuevas funcionalidades | | `fix/*` | Correcciones de bugs | | `hotfix/*` | Correcciones urgentes para producción | --- ## 6. Convenciones de Código ### 6.1 Python (Odoo) - PEP 8 - Docstrings en español - Nombres de modelos: `skeen.nombre_modelo` - Nombres de campos: snake_case ### 6.2 TypeScript (Frontend) - ESLint + Prettier - Nombres de componentes: PascalCase - Nombres de archivos: kebab-case o PascalCase según tipo - Interfaces: PascalCase con prefijo `I` o sin prefijo según contexto ### 6.3 JavaScript (Bridge) - Node.js estándar - async/await - Nombres de variables: camelCase --- ## 7. Dependencias Principales ### 7.1 Frontend ```json { "react": "^18.2.0", "react-dom": "^18.2.0", "react-router-dom": "^6.20.0", "axios": "^1.6.0", "recharts": "^2.10.0", "tailwindcss": "^3.3.0", "typescript": "^5.3.0", "vite": "^5.0.0" } ``` ### 7.2 Bridge ```json { "node-fetch": "^3.3.0", "crypto": "^1.0.0" } ``` ### 7.3 Odoo ``` odoo==17.0 psycopg2-binary python-jose ``` --- ## 8. Puertos Utilizados | Puerto | Servicio | Protocolo | |--------|----------|-----------| | 22 | SSH | TCP | | 80 | HTTP (nginx) | TCP | | 443 | HTTPS (nginx) | TCP | | 3000 | WACRM | HTTP | | 3001 | Uptime Kuma | HTTP | | 5173 | Frontend dev | HTTP | | 5432 | PostgreSQL (host) | TCP | | 5433 | PostgreSQL (Supabase) | TCP | | 8000 | Supabase Kong | HTTP | | 8069 | Odoo | HTTP | | 8072 | Odoo longpolling | HTTP | | 8080 | Hermes Gateway | HTTP | | 8090 | Bridge SKEEN | HTTP | | 9119 | Hermes Serve | HTTP | --- ## 9. Volúmenes Docker | Volumen | Propósito | |---------|-----------| | `supabase-db-data` | Datos PostgreSQL Supabase | | `supabase-storage` | Archivos Supabase | | `supabase-kong` | Configuración Kong | --- ## 10. Notas de Despliegue 1. **Frontend:** Build estático desplegado en nginx. 2. **WACRM:** Build Next.js corriendo con `npm start`. 3. **Odoo:** Proceso Python corriendo con `odoo-bin`. 4. **Supabase:** Contenedores Docker. 5. **Hermes:** Procesos Python (`gateway run`, `serve`). 6. **Bridge:** Proceso Node.js. Todos los servicios deben iniciarse automáticamente en producción usando systemd.