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/
This commit is contained in:
2026-07-20 07:44:23 +00:00
commit a718592291
699 changed files with 324602 additions and 0 deletions

View File

@@ -0,0 +1,103 @@
---
name: skeen-agendar
description: >
Agendamiento de citas para SKEEN Derma Experts.
Consulta disponibilidad, crea citas, reagenda y cancela.
Usar cuando el usuario quiera agendar, reagendar o cancelar una cita.
version: 1.0.0
metadata:
hermes:
requires:
bins: [python]
envVars:
- name: ODOO_URL
required: true
- name: ODOO_DB
required: true
- name: ODOO_API_KEY
required: true
platforms: [whatsapp, webchat, cli]
activation: keyword
keywords: ["agendar", "cita", "hora", "reagendar", "cancelar", "disponibilidad"]
---
# SKEEN — Agendamiento de Citas
## Instrucciones de Uso
### PASO 1: Identificar intencion
- "Quiero agendar" / "Necesito una cita" → NUEVA CITA
- "Quiero cambiar mi cita" / "Reagendar" → REAGENDAR
- "Cancelar mi cita" → CANCELAR
- "Tengo una cita para manana?" → CONSULTAR
### PASO 2: Para NUEVA CITA
1. Pregunta que tipo de servicio desea (si no lo especifico):
- Consulta dermatologica general ($800 MXN, 30 min)
- Tratamiento facial ($1,200-$3,500 MXN, 45-90 min)
- Depilacion laser (desde $500 MXN por zona, 15-60 min)
- Peel quimico ($1,500 MXN, 30 min)
- O consulta de valoracion gratuita (15 min)
2. Consulta disponibilidad usando el plugin `odoo_api_call`:
Modelo: salon.booking, metodo: get_available_slots
Argumentos: [service_id, date_from, date_to]
3. Presenta las 3 mejores opciones de horario
4. Cuando el paciente elige, confirma datos:
- Nombre completo
- Confirmar telefono
- Alergias o condiciones especiales (opcional)
5. Crea la cita usando `odoo_api_call`:
Modelo: salon.booking, metodo: create
Datos: { name, phone, service_id, date, time, state: 'confirmed' }
6. Programa recordatorio via cron:
```bash
hermes cron schedule --name "recordatorio-cita-[ID]" \
--at "[fecha_cita] 18:00 - 1 day" \
--command "skill skeen-recordatorios --phone [PHONE] --cita [DATE]"
```
7. Envia confirmacion via WACRM usando `wacrm_send`
### PASO 3: Para REAGENDAR
1. Busca citas del paciente por telefono via `odoo_api_call`
2. Muestra citas activas
3. Pide nueva fecha/hora
4. Consulta disponibilidad
5. Actualiza cita via `odoo_api_call` (model salon.booking, method write)
6. Confirma cambio
### PASO 4: Para CANCELAR
1. Busca citas del paciente por telefono
2. Confirma cual cita cancelar
3. Pide motivo (opcional, para estadisticas)
4. Cancela via `odoo_api_call` (state: 'cancelled')
5. Ofrece reagendar
## Formato de Confirmacion
Perfecto! Tu cita esta confirmada:
Servicio: [Nombre servicio]
Fecha: [Dia de semana], [DD] de [mes] de [AAAA]
Hora: [HH:MM] AM/PM
Duracion: [X] minutos
Direccion: Blvd. Popotla 123, Playas de Rosarito
Te enviaremos un recordatorio un dia antes. Si necesitas cambiar o cancelar, solo escribenos!
## Reglas Importantes
- Solo agendar dentro del horario de la clinica
- Validar que el paciente no tenga citas duplicadas
- Consulta de valoracion gratuita tiene duracion de 15 min
- Si no hay disponibilidad, ofrecer lista de espera
- Guardar TODAS las citas en memoria para recordatorios

View File

@@ -0,0 +1,55 @@
---
name: skeen-monedero
description: >
Monedero digital de fidelidad de SKEEN Derma Experts.
Consulta saldo, redime puntos, muestra historial.
1 punto = $1 MXN. Se acumula 1 punto por cada $10 gastados.
Usar cuando el usuario pregunte por puntos, saldo, o redencion.
version: 1.0.0
metadata:
hermes:
requires:
bins: []
envVars:
- name: ODOO_URL
required: true
platforms: [whatsapp, webchat, cli]
activation: keyword
keywords: ["puntos", "monedero", "saldo", "redimir", "fidelidad"]
---
# SKEEN — Monedero Digital
## Consultar saldo
Usa `odoo_api_call`: modelo skeen.monedero, metodo get_balance, args: [phone_number]
Respuesta esperada: { points: 450, equivalent_mxn: 450, history: [...] }
Enviar via WACRM con formato:
Tu monedero SKEEN:
Saldo actual: 450 puntos (= $450 MXN)
Historial reciente:
- 03/07/2026: +120 pts (Pago Tratamiento Acne — $1,200)
- 28/06/2026: +80 pts (Pago Consulta + peel — $800)
- 15/06/2026: +250 pts (Pago Depilacion laser — $2,500)
Puedes redimir tus puntos en tu proxima visita! Cada 10 puntos = $10 MXN de descuento.
## Redimir puntos
1. Verificar que tenga suficientes puntos
2. Consultar monto a pagar de la cita/servicio
3. Calcular descuento (maximo 50% del total)
4. Confirmar redencion
5. Aplicar via `odoo_api_call`: modelo skeen.monedero, metodo redeem
6. Confirmar redencion via WACRM
## Reglas
- Maximo redimible: 50% del total de la compra
- Puntos vencen a los 12 meses de inactividad
- No transferibles entre pacientes
- Se acumulan en pagos confirmados unicamente
- En devoluciones, se restan los puntos correspondientes

View File

@@ -0,0 +1,79 @@
---
name: skeen-pagos
description: >
Gestion de pagos para SKEEN Derma Experts.
Genera links de pago (Stripe/MercadoPago), consulta estados,
y gestiona facturacion. Usar cuando el usuario quiera pagar,
consultar saldo, o ver sus pagos pendientes.
version: 1.0.0
metadata:
hermes:
requires:
bins: [python]
env: [STRIPE_SECRET_KEY, MP_ACCESS_TOKEN]
envVars:
- name: STRIPE_SECRET_KEY
required: true
- name: MP_ACCESS_TOKEN
required: true
- name: ODOO_URL
required: true
platforms: [whatsapp, webchat, cli]
activation: keyword
keywords: ["pagar", "saldo", "deuda", "factura", "pago", "stripe", "mercadopago"]
---
# SKEEN — Gestion de Pagos
## Instrucciones de Uso
### PASO 1: Identificar intencion de pago
- "Quiero pagar" → Generar link de pago
- "Cuanto debo?" / "Saldo pendiente" → Consultar deuda
- "Ya pague" → Verificar pago
- "Necesito factura" → Generar factura (CFDI)
### PASO 2: Consultar servicios pendientes
Usa `odoo_api_call` para consultar modelo account.move:
Dominio: [['partner_id.phone', '=', PACIENTE_PHONE], ['state', '=', 'posted'], ['payment_state', '!=', 'paid']]
Campos: ['name', 'amount_residual', 'invoice_date_due']
### PASO 3: Generar link de pago
Para pagos en Mexico (MXN) — usa MercadoPago:
Crear preference con items del servicio
notification_url: https://skeen.mx/webhooks/mercadopago
back_urls: { success: 'https://app.skeen.mx/pagos/exitoso' }
Para pagos internacionales — usa Stripe Checkout:
Crear session con line_items
mode: 'payment'
success_url: 'https://app.skeen.mx/pagos/exitoso'
metadata: { patient_phone: PACIENTE_PHONE }
### PASO 4: Enviar link de pago
Usa `wacrm_send` para enviar mensaje con resumen y link.
Incluir:
- Listado de servicios con precios
- Total a pagar
- Link de pago
- Metodos aceptados (tarjeta, OXXO, SPEI)
- Puntos de monedero que acumulara
### PASO 5: Confirmacion de pago
Cuando el webhook confirme el pago:
1. Registra pago en Odoo via `odoo_api_call`
2. Calcula puntos de monedero (10% del monto)
3. Envia confirmacion + puntos acumulados
## Reglas
- Siempre confirmar el monto antes de generar el link
- Para pagos >$5,000 MXN, ofrecer opcion de meses sin intereses
- Verificar que el telefono coincida con el paciente
- Guardar referencia de pago en memoria

View File

@@ -0,0 +1,59 @@
---
name: skeen-rag
description: >
Catalogo de servicios dermatologicos de SKEEN Derma Experts.
Proporciona informacion sobre tratamientos, precios, duracion y contraindicaciones.
SOLO usar cuando el usuario pregunte por servicios, tratamientos, precios o el catalogo.
version: 1.0.0
metadata:
hermes:
requires:
bins: []
envVars:
- name: SKEEN_SERVICES_JSON
required: false
description: "Path al archivo JSON con catalogo de servicios"
platforms: [whatsapp, webchat, cli]
activation: keyword
keywords: ["servicios", "tratamientos", "precios", "catalogo", "acne", "peel", "laser", "dermatologia"]
---
# SKEEN Derma Experts — Catalogo de Servicios
## Instrucciones de Uso
Cuando un paciente pregunte por tratamientos, servicios, precios o recomendaciones dermatologicas:
1. Lee el archivo de catalogo: `${env:SKEEN_SERVICES_JSON:-/skills/data/skeen-servicios.json}`
2. Filtra los servicios relevantes segun la pregunta
3. Presenta la informacion de forma clara y amigable
4. SIEMPRE incluye: nombre del tratamiento, precio aproximado, duracion, y una breve descripcion
5. NUNCA diagnostiques condiciones medicas — invita al paciente a agendar una consulta
6. Si no encuentras el servicio, ofrece agendar una consulta de valoracion
## Formato de Respuesta
Hola! En SKEEN contamos con estos tratamientos para [condicion]:
1. **[Nombre tratamiento]** — $[precio] MXN
Duracion: [X] minutos
[Descripcion breve]
2. **[Nombre tratamiento]** — $[precio] MXN
...
Te gustaria agendar una consulta de valoracion? Podemos evaluar tu caso especifico y recomendarte el mejor tratamiento.
## Limites
- NO diagnosticar — solo informacion general
- NO recomendar medicamentos especificos
- SIEMPRE sugerir consulta presencial para evaluacion
- Precios son aproximados — pueden variar segun evaluacion
## Datos de la Clinica
- Nombre: SKEEN Derma Experts
- Direccion: Blvd. Popotla 123, Playas de Rosarito, BC, Mexico
- Horario: Lun-Vie 9:00-18:00, Sab 9:00-14:00
- Telefono: +52 (664) 123-4567

View File

@@ -0,0 +1,89 @@
---
name: skeen-recordatorios
description: >
Recordatorios de citas, follow-ups y re-engagement para SKEEN.
Usar PRINCIPALMENTE via cron (hermes cron).
Tambien puede responder a consultas sobre recordatorios.
version: 1.0.0
metadata:
hermes:
always: true
requires:
bins: []
envVars:
- name: ODOO_URL
required: true
- name: WACRM_URL
required: true
- name: WACRM_API_KEY
required: true
platforms: [whatsapp, webchat, cli]
activation: cron
cron:
- schedule: "0 */6 * * *" # Cada 6 horas: generar recordatorios
command: "skill skeen-recordatorios --action generate"
- schedule: "0 18 * * *" # 6 PM diario: enviar recordatorios
command: "skill skeen-recordatorios --action send"
- schedule: "0 9 * * 1" # Lunes 9 AM: re-engagement
command: "skill skeen-recordatorios --action reengage"
---
# SKEEN — Recordatorios y Follow-ups
## Ejecucion via Cron
Esta skill se ejecuta automaticamente via `hermes cron`.
### PASO 1: Generar recordatorios (cada 6 horas)
Recordatorios de citas (24h antes):
Consulta Odoo: salon.booking con date=tomorrow, state=confirmed
Para cada cita, programa cron:
```bash
hermes cron schedule --name "recordatorio-[booking_id]" \
--at "[fecha_cita] 18:00 - 1 day" \
--command "skill skeen-recordatorios --action send --phone [PHONE] --cita [DATE]"
```
Follow-ups post-tratamiento (7 dias despues):
Consulta Odoo: salon.booking con date=7_days_ago, state=done
Programa cron para cada paciente:
```bash
hermes cron schedule --name "followup-[booking_id]" \
--at "[fecha_cita + 7 days] 10:00" \
--command "skill skeen-recordatorios --action followup --phone [PHONE]"
```
Re-engagement (pacientes inactivos 90 dias):
Consulta Odoo: res.partner con last_visit <= 90_days_ago
Programa cron semanal:
```bash
hermes cron schedule --name "reengage-[partner_id]" \
--at "lunes 9:00" \
--command "skill skeen-recordatorios --action reengage --phone [PHONE]"
```
### PASO 2: Enviar recordatorios (6 PM diario)
Para cada recordatorio programado para hoy:
1. Enviar via WACRM usando `wacrm_send` con template aprobado
2. Si es exitoso, marcar como enviado en Odoo
3. Si falla, reintentar en siguiente ejecucion (max 3 intentos)
### PASO 3: Limpieza
Eliminar cron jobs completados con mas de 7 dias:
```bash
hermes cron list --completed | awk '$4 > 7 {print $1}' | xargs hermes cron delete
```
## Templates de WhatsApp Aprobados
recordatorio_cita_skeen:
"Hola {{1}}! Te recordamos tu cita manana {{2}} a las {{3}} en SKEEN Derma Experts."
followup_tratamiento_skeen:
"Hola {{1}}! Han pasado {{2}} dias desde tu {{3}}. Como te sientes?"
reengage_skeen:
"Hola {{1}}! Te extranamos en SKEEN. Agenda tu proxima visita y recibe 50 puntos."