- Frontend React (SKEEN Brand) con Vite, TypeScript, Tailwind - Frontend Homenest (versión alternativa) - Módulos Odoo 17 custom (citas, pacientes, monedero, pagos, ventas, inventario, whatsapp) - WACRM fork (Next.js 16 + Supabase) - Hermes + Bridge + Skills (Qwen3.6 via Nan Builders) - Scripts de migración y operación - Documentación extensiva en docs/
13 KiB
13 KiB
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
Io 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
{
"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
{
"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
- Frontend: Build estático desplegado en nginx.
- WACRM: Build Next.js corriendo con
npm start. - Odoo: Proceso Python corriendo con
odoo-bin. - Supabase: Contenedores Docker.
- Hermes: Procesos Python (
gateway run,serve). - Bridge: Proceso Node.js.
Todos los servicios deben iniciarse automáticamente en producción usando systemd.