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.