Files
SKEEN-Proyecto/docs/ESTADO_PROYECTO.md
Consultoría Alcaraz Salazar a718592291 Initial commit: SKEEN Derma Experts - Sistema Integral de Gestión Clínica
- 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/
2026-07-20 07:44:23 +00:00

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:

Desde red externa (si los puertos están abiertos):

  • Reemplaza localhost por 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:

  1. Meta webhook simulado → POST /api/whatsapp/webhook (WACRM)
  2. WACRM crea contacto + conversación + mensaje customer
  3. WACRM dispara automatización new_message_received
  4. Automatización ejecuta send_webhook a http://localhost:8090/webhook/wacrm
  5. Bridge extrae from, text, conversation_id, contact_id
  6. Bridge consulta a Nan builders (deepseek-v4-flash) con el system prompt de Sofía
  7. Nan builders genera respuesta
  8. Bridge envía respuesta a WACRM /api/v1/messages → falla porque no hay token Meta
  9. Bridge hace fallback a /api/v1/messages/simulate → respuesta guardada en WACRM como mensaje agent

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 en skeen_whatsapp/controllers/wacrm_proxy.py para sincronizar contactos, conversaciones, mensajes, pipelines, stages y deals desde Supabase hacia Odoo.
  • Menú WACRM en frontend: nuevas páginas /wacrm/messages y /wacrm/leads con sincronización manual y visualización de datos.
  • Script de migración mejorado: /root/migracion/importar_a_odoo.py ahora importa pacientes, servicios, productos, médicos, citas, ventas, pagos, adeudos y monederos desde CSVs.
  • Variables de entorno Supabase: skeen-start-all.sh exporta SUPABASE_URL y SUPABASE_SERVICE_ROLE_KEY para 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

  1. 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/simulate para que el flujo end-to-end funcione en demo.
    • Cuando Meta se conecte, el bridge usará automáticamente /api/v1/messages real; el fallback solo se activa ante errores de Meta.
  2. API key de WACRM

    • Creada en Supabase tabla api_keys con 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).
  3. Automatización en WACRM

    • Nombre: "Nuevo mensaje → Webhook Hermes Bridge"
    • Trigger: new_message_received
    • Step: send_webhook a http://localhost:8090/webhook/wacrm
    • Body template: {"from":"{{ vars.contact_phone }}","text":"{{ message.text }}","conversation_id":"{{ vars.conversation_id }}","contact_id":"{{ vars.contact_id }}"}
  4. Supabase self-hosted

    • PostgreSQL expuesto en puerto 5433 (no el 5432 directo).
    • Para conectar psql desde fuera del contenedor usar el puerto 5433 con external_id o conectarse por docker exec supabase-db psql -U postgres -d postgres.
  5. 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.

📝 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.

  1. 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 ejecutar python3 /root/migracion/importar_a_odoo.py.
  2. 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).
  3. Conexión Odoo ↔ Frontend (FASE 2)

    • Extender endpoints REST de Odoo para todas las secciones.
    • Crear cliente API en React y conectar cada pantalla.
  4. 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.
  5. 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.