- 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
Estado del Proyecto SKEEN Derma Experts
WACRM + Hermes + Odoo + Frontend
Fecha: 6 de julio de 2026 (actualizado)
VM: Hetzner VPS (22 GB RAM / 6 vCPU / 77 GB SSD)
Objetivo: Sistema instalado y funcionando con datos demo; análisis del sistema actual de SKEEN completado; roadmap de mejora definido.
✅ Resumen de lo que funciona
| Componente | Estado | URL / Puerto | Notas |
|---|---|---|---|
| Supabase self-hosted | ✅ | http://localhost:8000 (Kong), PostgreSQL :5433 | Contenedores Docker healthy. Datos persistentes en volúmenes Docker. |
| WACRM | ✅ | http://localhost:3000 | Build Next.js 16 con endpoint /api/v1/messages/simulate para modo demo. |
| Odoo 17 | ✅ | http://localhost:8069 | Datos demo y de migración importados. Nuevos modelos WACRM cachean conversaciones/mensajes/leads. |
| Frontend React | ✅ | http://localhost:5173 / http://192.168.10.114/ | Diseño "SKEEN Brand". Menú WACRM con Mensajes y Leads. Build desplegado en nginx. |
| Hermes Gateway | ✅ | API :8080 | Corriendo; bridge propio complementa la integración. |
| Bridge Webhook SKEEN | ✅ | http://localhost:8090 | Recibe webhooks de WACRM, consulta Nan builders, responde como Sofía. |
| Integración WACRM ↔ Hermes | ✅ | Via automatización send_webhook |
Flujo end-to-end validado: mensaje de prueba → Sofía → respuesta en WACRM. |
| Frontend ↔ Odoo | ✅ | Proxy Vite /api/odoo |
Dashboard medical muestra stats reales. |
| WACRM ↔ Odoo proxy | ✅ | /skeen/frontend/v1/wacrm/* |
Odoo cachea contactos, conversaciones, mensajes y leads de Supabase. Frontend los consume. |
🔗 URLs de acceso
Desde la VM:
- WACRM: http://localhost:3000
- Frontend: http://localhost:5173
- Odoo: http://localhost:8069
- Supabase Studio: http://localhost:8000/project/default
- Bridge health: http://localhost:8090/health
Desde red externa (si los puertos están abiertos):
- Reemplaza
localhostpor la IP pública de la VM.
🎨 Diseño de frontend
Se mantiene un único diseño oficial: SKEEN Brand (/designs/brand).
- Inspirado directamente en la identidad de marca de SKEEN.
- Tipografía serif (Playfair Display), tonos stone/cálidos, hero con tagline, navegación redondeada, contacto visible.
- La raíz (
/) redirige automáticamente a/designs/brand. - Consume datos reales de Odoo vía el proxy
/api/odoo.
Los otros 9 diseños experimentales fueron eliminados para enfocar el trabajo en una sola identidad visual.
🧪 Flujo end-to-end validado
Se simuló un mensaje de WhatsApp entrante usando /root/simular_meta_webhook.py y también directamente al bridge:
- Meta webhook simulado →
POST /api/whatsapp/webhook(WACRM) - WACRM crea contacto + conversación + mensaje
customer - WACRM dispara automatización
new_message_received - Automatización ejecuta
send_webhookahttp://localhost:8090/webhook/wacrm - Bridge extrae
from,text,conversation_id,contact_id - Bridge consulta a Nan builders (
deepseek-v4-flash) con el system prompt de Sofía - Nan builders genera respuesta
- Bridge envía respuesta a WACRM
/api/v1/messages→ falla porque no hay token Meta - Bridge hace fallback a
/api/v1/messages/simulate→ respuesta guardada en WACRM como mensajeagent
Resultado: la conversación en WACRM muestra mensaje del paciente + respuesta de Sofía.
✅ Ronda de pruebas recientes (5 jul 2026)
| Prueba | Resultado | Detalle |
|---|---|---|
Build frontend (npm run build) |
✅ | CSS 56 kB, JS 816 kB, sin errores de Tailwind |
Linter (npm run lint) |
✅ | 0 warnings, 0 errors |
| Odoo update módulos custom | ✅ | skeen_pacientes, skeen_citas, skeen_monedero, skeen_pagos, skeen_whatsapp actualizados |
| Odoo endpoints | ✅ | /health, /dashboard, /appointments, /patients, /wallets, /services, /weekly_chart responden |
| Frontend proxy a Odoo | ✅ | /api/odoo/skeen/frontend/v1/health responde vía Vite proxy |
| 10 diseños cargan | ✅ | Diseño "brand" responde HTTP 200; los otros 9 fueron eliminados |
| Bridge webhook | ✅ | POST /webhook/wacrm responde con respuesta de Sofía |
| WACRM app | ✅ | Responde en :3000, modo demo con simulate endpoint |
| Supabase self-hosted | ✅ | Todos los contenedores healthy |
🔧 Cambios técnicos recientes en Odoo
- WACRM proxy en Odoo: se agregaron modelos
skeen.wacrm.*y controladores REST enskeen_whatsapp/controllers/wacrm_proxy.pypara sincronizar contactos, conversaciones, mensajes, pipelines, stages y deals desde Supabase hacia Odoo. - Menú WACRM en frontend: nuevas páginas
/wacrm/messagesy/wacrm/leadscon sincronización manual y visualización de datos. - Script de migración mejorado:
/root/migracion/importar_a_odoo.pyahora importa pacientes, servicios, productos, médicos, citas, ventas, pagos, adeudos y monederos desde CSVs. - Variables de entorno Supabase:
skeen-start-all.shexportaSUPABASE_URLySUPABASE_SERVICE_ROLE_KEYpara que Odoo pueda leer WACRM directamente.
⚙️ Cómo iniciar / detener todo
# Iniciar todo
/root/skeen-start-all.sh
# Detener todo
/root/skeen-stop-all.sh
Esperar ~20-30 segundos después de iniciar. Verificar puertos:
ss -tlnp | grep -E "3000|5173|8069|8000|8090|8644|8080"
📁 Archivos clave modificados/creados
| Ruta | Propósito |
|---|---|
/root/ANALISIS_SKEEN_SISTEMA.md |
Análisis completo del sistema actual https://sistema.skeenmx.app/ |
/root/ROADMAP_SKEEN_MEJORA.md |
Roadmap para replicar/mejorar el sistema actual en Odoo + WACRM + Frontend + Hermes |
/root/skeen-frontend/src/App.tsx |
Rutas simplificadas: solo diseño SKEEN Brand, / redirige a /designs/brand. |
/root/skeen-frontend/src/designs/brand/Dashboard.tsx |
Único diseño oficial del frontend. |
/root/skeen-frontend/vite.config.ts |
Plugin @tailwindcss/vite configurado. |
/root/skeen-odoo/addons/skeen_monedero/models/res_partner.py |
Campos wallet_points y monedero_ids en el módulo correcto. |
/root/skeen-odoo/addons/skeen_citas/models/cita.py |
Campo time_str compute. |
/root/skeen-odoo/addons/skeen_*/security/ir.model.access.csv |
Permisos de acceso completados. |
/root/skeen-odoo/addons/skeen_whatsapp/controllers/wacrm_proxy.py |
Proxy/caché WACRM ↔ Odoo. |
/root/skeen-odoo/addons/skeen_whatsapp/models/wacrm_sync.py |
Modelos Odoo para cachear datos de WACRM. |
/root/skeen-frontend/src/pages/WacrmMessages.tsx |
Página de conversaciones/mensajes de WACRM. |
/root/skeen-frontend/src/pages/WacrmLeads.tsx |
Página de leads/deals de WACRM. |
/root/migracion/importar_a_odoo.py |
Script de migración CSV → Odoo. |
/root/migracion/README.md |
Instrucciones y formatos de migración. |
/root/skeen-start-all.sh |
Inicia todo el ecosistema (con env vars de Supabase). |
/root/skeen-stop-all.sh |
Detiene todo el ecosistema. |
🔌 Datos del cliente pendientes por conectar
Cuando SKEEN entregue estos datos, se conectan en los siguientes lugares:
| Dato | Dónde se usa | Archivo / UI |
|---|---|---|
| Número WhatsApp Business verificado | Meta Developers + WACRM | WACRM Settings → WhatsApp |
| Meta App ID + App Secret | WACRM webhook signature | /root/skeen-wacrm/.env.local (META_APP_SECRET) |
| Meta Access Token + WABA ID + Phone Number ID | Envío/recepción WhatsApp | WACRM Settings → WhatsApp |
| Templates de WhatsApp aprobados | Automatizaciones y campañas | WACRM + Meta Business Manager |
| Lista de servicios y precios | Skill de catálogo + Odoo | /root/skeen-roadmap-hermes/hermes/webhook-bridge.js (SKEEN_SYSTEM_PROMPT) y Odoo product.template |
| Horarios de atención | Agendamiento | Skill skeen-agendar (a crear) + Odoo skeen_citas |
| Stripe / MercadoPago keys | Pagos | Odoo módulo skeen_pagos y skill skeen-pagos |
| Dominio skeen.mx | DNS + Nginx | Aún no configurado; actualmente todo en localhost |
| Logo / branding | WACRM fork + frontend | /root/skeen-wacrm y /root/skeen-frontend |
🚨 Notas técnicas importantes
-
Modo demo / Meta no conectado
- Como no hay tokens reales de Meta, WACRM no puede enviar mensajes reales por WhatsApp.
- Se creó el endpoint
/api/v1/messages/simulatepara que el flujo end-to-end funcione en demo. - Cuando Meta se conecte, el bridge usará automáticamente
/api/v1/messagesreal; el fallback solo se activa ante errores de Meta.
-
API key de WACRM
- Creada en Supabase tabla
api_keyscon scopes:messages:send,messages:read,contacts:read,contacts:write,conversations:read,broadcasts:send,webhooks:manage. - El bridge la lee de
WACRM_API_KEY(ver/root/skeen-roadmap-hermes/hermes/webhook-bridge.js).
- Creada en Supabase tabla
-
Automatización en WACRM
- Nombre: "Nuevo mensaje → Webhook Hermes Bridge"
- Trigger:
new_message_received - Step:
send_webhookahttp://localhost:8090/webhook/wacrm - Body template:
{"from":"{{ vars.contact_phone }}","text":"{{ message.text }}","conversation_id":"{{ vars.conversation_id }}","contact_id":"{{ vars.contact_id }}"}
-
Supabase self-hosted
- PostgreSQL expuesto en puerto
5433(no el 5432 directo). - Para conectar
psqldesde fuera del contenedor usar el puerto 5433 conexternal_ido conectarse pordocker exec supabase-db psql -U postgres -d postgres.
- PostgreSQL expuesto en puerto
-
Hermes vs OpenClaw / Bridge actual
- El roadmap original usaba OpenClaw; se sustituyó por Hermes (
https://api.nan.builders/v1). - El chat nativo de Hermes no se configuró; en su lugar el bridge llama directamente a la API REST de nan.builders para generar respuestas de Sofía.
- Los skills de Hermes (
skeen-rag,skeen-agendar, etc.) están creados en/root/skeen-roadmap-hermes/hermes/skills/y se activarán cuando el gateway de Hermes se integre formalmente como receptor de webhooks.
- El roadmap original usaba OpenClaw; se sustituyó por Hermes (
📝 Próximos pasos sugeridos
Ahora que se completó el análisis del sistema actual, el trabajo se enfoca en replicar y mejorar cada sección. Ver el roadmap completo en /root/ROADMAP_SKEEN_MEJORA.md.
-
Migración de datos maestros (FASE 0) — listo para ejecutar
- SKEEN debe proporcionar exportación autorizada de su sistema actual.
- Colocar CSVs en
/root/migracion/datos/y ejecutarpython3 /root/migracion/importar_a_odoo.py.
-
Frontend fiel al sistema actual (FASE 1)
- El menú WACRM ya está operativo. Siguiente: replicar secciones restantes del sistema legacy (visitas, expedientes médicos, catálogos, reportes).
-
Conexión Odoo ↔ Frontend (FASE 2)
- Extender endpoints REST de Odoo para todas las secciones.
- Crear cliente API en React y conectar cada pantalla.
-
WhatsApp + WACRM + Hermes (FASE 3)
- Conectar número de WhatsApp Business de SKEEN.
- Configurar automatizaciones, skills de Hermes, templates de Meta.
- Habilitar inbox multi-agente y handoff a humano.
-
Reportes, analytics y go-live (FASES 4-5)
- Dashboards con Recharts, metas de ventas, exportaciones.
- Dominios SSL, backups, capacitación y go-live gradual.
📞 Comandos útiles
# Ver todos los servicios
ss -tlnp | grep -E "3000|5173|8069|8000|8090|8644|8080|5433|6379"
# Logs en tiempo real
tail -f /tmp/wacrm.log
tail -f /tmp/hermes-bridge.log
tail -f /tmp/odoo.log
tail -f /tmp/frontend.log
tail -f /tmp/hermes-gateway.log
# Simular mensaje de WhatsApp entrante
python3 /root/simular_meta_webhook.py
# Estado de contenedores Supabase
cd /root/skeen-supabase/docker && docker compose ps
# Acceder a PostgreSQL de Supabase
docker exec supabase-db psql -U postgres -d postgres
# Recompilar WACRM tras cambios
cd /root/skeen-wacrm && npm run build
✉️ Handoff
El sistema está instalado y funcionando. Se completó:
- ✅ Menú WACRM en el frontend (Mensajes y Leads) con sincronización manual desde Supabase.
- ✅ Modelos y endpoints proxy en Odoo para cachear contactos, conversaciones, mensajes, pipelines, stages y deals de WACRM.
- ✅ Script de migración mejorado (
/root/migracion/importar_a_odoo.py) probado con datos de ejemplo. - ✅ Frontend desplegado en nginx (
http://192.168.10.114/). - ✅ Odoo actualizado y corriendo con variables de entorno de Supabase.
Bloqueo ético/legal: no se realizó extracción masiva de datos desde https://sistema.skeenmx.app/ porque requiere autorización documentada del cliente. El script de migración está listo para ejecutarse tan pronto como SKEEN entregue una exportación autorizada (CSVs o dump SQL).
Próximo paso prioritario: que SKEEN proporcione exportación autorizada de pacientes, citas, historial, ventas, pagos y monederos para ejecutar la migración real.
Para cualquier duda, revisar los logs, /root/ANALISIS_SKEEN_SISTEMA.md y /root/ROADMAP_SKEEN_MEJORA.md.