Yurest · Portal de gestión

Esquema de funcionamiento de la web

Cómo se relacionan las pantallas, los actores, las integraciones, la base de datos y los workflows automáticos.

Actualizado el 20 de octubre de 2026

Arquitectura del portal

Diagrama interactivo de cómo viaja una petición: navegador → Cloudflare → gate HMAC → n8n → PostgREST → PostgreSQL. Tiene recorridos guiados, búsqueda, zoom y exportación. Generado con archify desde docs/arquitectura-portal.archify.json.

Abrir el diagrama a pantalla completa ↗

Vida de una ficha: manual por departamentos

Cómo nace una ficha y por qué departamentos pasa, con lo que hace cada uno. Cada carril es un departamento; en el diagrama hay recorridos guiados («Play story») para seguirlo paso a paso. Generado con archify desde docs/flujo-ficha.archify.json.

Abrir el flujo a pantalla completa ↗
PasoDepartamentoDóndeQué se hace
1Ventas · ConsultorFichas · «Solicitar ficha»Crea la solicitud (sociedad o nombre comercial, email, consultor, plan, tipo de implementación y tipo de pago SEPA). El cliente recibe el enlace por correo; también se puede copiar con «🔗 Enlace». Una ficha también puede nacer de una oferta ganada, del importador de Sheet o de HighLevel.
2ClienteFormulario de la solicitudRellena empresa, facturación, jefe de proyecto, firmante y TPV, y firma el mandato SEPA; puede dar un email de Google para compartir la carpeta de Drive. Si la implementación es grupal, reserva su sesión de bienvenida en el propio portal (calendario de la CSM de grupales; HighLevel ya no se usa desde el 24-sep) y elige turno preferido. En el paso 03 puede añadir hasta 10 personas más de la implementación (nombre y email obligatorios; puesto del catálogo).
3AutomáticoAl enviarSe crea la carpeta de Drive y se avisa al consultor. El correo «Ya puedes subir tus documentos» va al jefe de proyecto (o al email de contacto si no hay). Las otras personas que indicó el cliente entran en «Contactos del cliente», la lista compartida de la ficha. Si el TPV no está integrado, Soporte recibe una tarea en Asana (Integraciones) y un correo.
4Cliente → CSCorreo de la carpeta · «Ya he subido mis documentos»Al confirmar, se crea la tarea de carga de datos para el equipo de carga de datos, con el enlace «Abrir carpeta de Drive» y sus subtareas de revisión; se avisa por correo al implementador y la ficha pasa a carga_datos. Si el cliente avisa por otra vía, el implementador pulsa «Datos cargados» en Proyectos (individuales y grupales) y pasa lo mismo.
5Ventas · ConsultorFichas · pestaña «Rellenado cliente» → «Completar ficha»Completa módulos, locales, datos financieros, plan y precios, y guarda. La ficha queda en estado rellenado. Cuando el cliente ya está dado de alta en la app, pulsa «Marcar» en Introducido Yurest (no se puede deshacer).
6ImplementaciónIndividual: Sin asignar · Grupal: ProyectosIndividual: la ficha aparece en Sin asignar; se elige implementador y se pulsa «Crear Proyecto». El proyecto (también el de Cocina de Producción) trae la sección «Sesiones de arranque» con la Sesión de Planificación y la Sesión de Bienvenida: el implementador llama al cliente y las agenda, y el home le avisa mientras no tengan fecha y hora. Grupal: el proyecto nace solo al guardar la ficha y queda en la carpeta «Sin promoción». Con el proyecto se da de alta el acceso del cliente al Espacio Cliente; mientras el Espacio Cliente está en pausa no se le manda ningún correo.
7ImplementaciónProyectos → Grupales · «Asignar promoción»Se elige tanda y turno (el turno tiene límite de plazas). Las invitaciones van al jefe de proyecto, a la persona de contacto y a todos los «Contactos del cliente» salvo los desmarcados. También se puede asignar o cambiar desde la Cascada CS. Al guardar se convocan las sesiones (invitaciones de Calendar con Meet) y el cliente recibe el correo de bienvenida. Los eventos se crean en el calendario del implementador de la promoción: se turnan por semanas o el que se fije en Promociones; si se cambia, las sesiones ya convocadas pasan a su calendario. Desde la promoción del 28-sep convoca el portal; las anteriores las convocó HighLevel. Si una sesión no le toca a un cliente, el implementador la marca «No aplica» y no se le convoca a ella.
8ImplementaciónProyectos · detalle del proyectoSe imparten y documentan las sesiones y se trabajan las secciones y checklists hasta completar el proyecto.
9Customer SuccessCascada CSSigue al cliente por fases: En implementación, Post 1 mes, Post 1 QBR, Post 2 QBR y, desde ahí, QBR recurrente cada 4 meses. Al completar el proyecto, la ficha pasa sola a Post 1 mes; cada reunión tiene su follow-up automático, su aviso de preparación y su formulario en el portal. El detalle, en «Vida de un cliente en Customer Success».
10ContabilidadGrabar en A3Revisa el mandato SEPA («Ver mandato», «Descargar PDF»), lo da de alta en A3 y activa el interruptor «Estado A3».

Vida de un cliente grupal

El recorrido completo de un cliente de implementación grupal: estados de onboarding, correos y recordatorios automáticos, y lo que hace cada equipo. Los carriles separan CS y carga de datos, Implementación, lo automático (n8n) y al cliente. Generado con archify desde docs/flujo-cliente-grupal.archify.json.

Abrir el flujo a pantalla completa ↗
PasoQuiénEstado / disparadorQué pasa · qué se envía
1ClienteSolicitudRellena la solicitud, elige turno preferido y reserva obligatoriamente su sesión de bienvenida en el portal (WF-124, calendario de la CSM de grupales): lunes, miércoles y viernes a las 10:30 y a las 16:00, 4 plazas por hueco, con al menos 36 h de antelación y sin festivos nacionales. Recibe la confirmación «Reunión Bienvenido a Yurest agendada» y un recordatorio 24 h antes. Si rechaza la invitación en Google o el evento se cancela, la reserva se anula y le llega un correo para elegir otra fecha; si cambia el enlace de Meet, se le manda el nuevo. La CSM recibe un aviso interno de cada reserva, y un «Fuera de la oficina» en su calendario cierra el hueco. Si la agenda no carga, el portal lo reintenta solo dos veces antes de ofrecer «Reintentar». Si alguien mueve a mano en Google el evento de un hueco, el portal lo devuelve a su hora y avisa a la CSM; una reserva cancelada a mano en la base de datos se trata como cancelada por la CSM (el cliente recibe el correo para elegir otra fecha). Para darle una hora fuera de los huecos, la CSM usa «Sesión aparte» en la Cascada CS: un evento solo para ese cliente, con su Meet, de lunes a viernes entre las 08:00 y las 20:00 y con al menos 1 h de antelación. La fecha se ve en Proyectos › Grupales («Fecha de bienvenida»).
2AutomáticoFicha rellenadoWF11 crea la carpeta de Drive (Nóminas, Gastos Generales, Compras y, si contrató la Carga masiva de recetas, Recetas), la comparte con el cliente, su jefe de proyecto y su CS Agent, y manda desde la cuenta de Implementación al jefe de proyecto el correo «Ya puedes subir tus documentos» con el botón «Ya he subido todos mis documentos». Las otras personas que indicó en la solicitud entran en «Contactos del cliente». WF58 crea el proyecto grupal con las 6 tareas de configuración del entorno; en Proyectos › Grupales cuelga del implementador de la promoción que se le asigne.
3CSBienvenida «Asistió» → pending_documentsTras la sesión se marca si asistió, en Proyectos o en la columna «Bienvenida» de la Cascada CS (Asistió / No se presentó); desde la Cascada también se puede cancelar o reagendar. Con «Asistió» arranca el reloj de la documentación (WF96, cada hora). Si no se presenta, WF-124 le escribe «tu inicio en yurest está pausado: reagenda tu bienvenida». Si no tiene la sesión asignada ni marcada, la fila lleva la marca «Sin bienvenida».
4Automáticopending_documentsWF96 (cada hora) cuenta desde la entrada en pending_documents, es decir, desde la bienvenida con Show. Cada aviso sale una sola vez y se detiene en cuanto hay documentos. Los correos van al jefe de proyecto (o, si no hay, al email de la ficha).
· 48 h (naturales) · al cliente desde la cuenta de Implementación: «Documentación pendiente para activar su cuenta».
· 72 h (naturales) · al cliente desde la cuenta de Implementación: «Último aviso: pasos pendientes para el inicio de su formación», con el recuadro «Impacto en su cuenta».
· 4 días hábiles · aviso interno al implementador: «‹cliente› · 4 días hábiles sin documentación», para que le llame.
Los correos no llevan fecha de promoción: el cliente todavía no tiene grupo, así que no se le aplaza ni se le reasigna.
5Cliente → CS«Ya he subido» → carga_datosDesde el botón del correo o el Espacio Cliente; WF96 también lo detecta solo si aparecen archivos nuevos del cliente en su carpeta de Drive (subcarpetas incluidas), y si el cliente avisa por otra vía el implementador pulsa «Datos cargados» en Proyectos › Grupales (WF-127). Se crea la tarea en Asana (Carga Datos) para el equipo de carga de datos con el enlace «Abrir carpeta de Drive» y sus subtareas de revisión; las cuatro vías crean la misma tarea y no la duplican si la ficha ya la tiene. Los recordatorios se detienen.
6Automático → ImplementaciónAl pulsar «Ya he subido»Correo al implementador avisando de que el cliente ha subido sus documentos. En el portal, alerta «X clientes con la carga de datos hecha y sin promoción», que lleva a Proyectos › Grupales › Sin promoción.
7ImplementaciónTarea de carga completada → active_onboardingCon los datos cargados se asigna la promoción desde Proyectos o Cascada CS (solo tandas a ≥ 9 días hábiles). Se ve y se puede cambiar el turno preferido; cada turno tiene su límite de plazas en BD y WF69 rechaza la asignación si está completo. Se invita a todos los «Contactos del cliente» salvo los desmarcados. Al completarse la tarea de carga, WF96 avisa por correo al implementador; la columna «Datos cargados» de Proyectos › Grupales distingue Pendiente, En carga y Cargados.
8AutomáticoAsignar promoción (WF69 → WF-109 → WF-113)Se generan las 20 sesiones de la plantilla (las de módulos no contratados, bloqueadas y fuera del proyecto), se envía una invitación de Google Calendar con Meet por sesión desde la cuenta de Implementación y el correo de bienvenida a la promoción (fechas + credenciales). Una sesión que cae en festivo nacional no se convoca: se avisa al implementador para que la reprograme a mano. Dar de baja o pausar un grupal lo saca de las invitaciones al momento. Las sesiones marcadas «No aplica» para un cliente no se le convocan. Un email mal escrito de un contacto ya no tumba la sesión en Google: ese correo se descarta con aviso y el resto del cliente se convoca. Antes de convocar, WF-113 comprueba que los eventos de las sesiones futuras siguen en Google: si alguien borró uno a mano, la sesión sale «Borrada en Google» en el panel de convocatorias y se recupera con «Reprogramar» o se da de baja con «Cancelar». Desde Comunicaciones, «Reenviar convocatoria» añade a los contactos elegidos a las sesiones futuras y les reenvía la bienvenida (WF-113).
9AutomáticoVíspera de cada sesiónRecordatorio de sesiones de mañana: cada día a las 18:00 lee la agenda de mañana de los calendarios de los implementadores. Manda un correo a cada asistente externo, uno por persona para que nadie vea a los demás, desde la cuenta de Implementación: «Recordatorio: ‹sesión› mañana ‹hora›», con fecha, hora, número de asistentes y botón «Unirse a la videollamada». No escribe a nadie de @yurest.com, ni a salas ni a quien ha rechazado, y se salta las reuniones internas (interdepartamental, reunión interna, pre-reunión). Cubre las sesiones grupales que convoca HighLevel (promociones hasta el 21-sep) y las privadas.
Promociones desde el 28-sep (convocadas por WF-113): ese recordatorio se salta sus eventos (id pr…, en las cuatro ramas desde el 24-sep) porque les toca WF-114 «Promociones Recordatorios»: a las 09:00, 24 h antes, «Recordatorio: ‹sesión› mañana a las ‹hora›». Un correo por cliente desde la cuenta de Implementación, con la promoción, la hora de inicio y fin y el botón de Meet; no se repite aunque se lance dos veces. Cron encendido el 24-sep.
10ImplementaciónAsistencia Show / No ShowLo decide y lo marca el implementador, en el proyecto o en Participación: el portal ya no marca asistencia solo (WF-126 y WF-129 apagados desde el 28-sep). Al marcar No Show se elige el motivo de una lista cerrada, con nota opcional. «Guardar» registra sin correo; «Guardar y enviar» (o «Marcar y enviar» en Participación) enseña antes la vista previa del correo (WF-130) y, al confirmar, lo envía WF96. En individuales y privadas con reunión agendada, la casilla «Quitar la reunión de Google Calendar» (marcada por defecto) borra el evento sin avisar a los invitados (WF07); la tarea conserva la fecha de la ausencia. En individuales se elige además cómo se recupera la sesión: réplica para reagendarla aparte, «se verá en otra sesión» ya agendada o «desplazar el calendario pendiente», que corre las siguientes sesiones y manda un solo correo «Nuevo calendario de sesiones». En grupal, un No Show deja la sesión dada: tarea completada y sin réplica. Cada No Show genera el registro PDF «Not-Show» y no imputa tiempo en Asana.
11AutomáticoEscalera de no-showsWF96 evalúa la escalera de esa ficha en cuanto se envía desde el portal (ya no por cron). La bienvenida no cuenta, y el contador vuelve a cero al reasignar. Los correos van al jefe de proyecto del cliente desde la cuenta de Implementación, con el responsable de Implementación en copia, y llevan el motivo marcado. En individuales sale un correo por ausencia, sin escalera.
· 1º No Show · «Se perdieron la sesión de hoy»: si hay grabación, con el botón a la clase grabada y la recomendación de verla antes de la siguiente; si no, sale igual, sin vídeo.
· 2º No Show · «Aseguremos el avance de ‹cliente› con yurest»: enlace a la última grabación y aviso de que, si falta a la siguiente, pasará al próximo grupo desde el inicio.
· 3º No Show · se busca la primera promoción de su mismo turno que empiece a ≥ 9 días hábiles. Si la hay, WF96 le pasa a ella por WF69 (la misma ruta que «Cambiar promoción»: sale de las sesiones de Calendar de su grupo y le convocan a las del nuevo) y, cuando WF69 lo confirma, sale el correo «Reagendamos sus sesiones de implementación» con la fecha y el turno del grupo nuevo, sin perder nada de lo contratado. No se pausa y el contador vuelve a cero. Sin hueco en su turno, o si WF69 rechaza el cambio (por ejemplo, el turno se acaba de llenar), la ficha pasa a paused_onboarding, no sale correo al cliente y queda para que lo gestione una persona (si falló WF69, el implementador recibe un aviso). Mientras está pausado deja de recibir convocatorias y recordatorios; el home avisa al implementador («N clientes pausados por no-shows») y Proyectos lo marca «Onboarding pausado». El botón «Reactivar onboarding» todavía no está operativo: falta su ruta en el backend.
12Cliente · ImplementaciónSesiones privadas2 incluidas (+3 con Pack consultoría); el cliente las reserva o cancela en el Espacio Cliente. Las dos de la plantilla de la promoción (Seguimiento 30 min y Privada 1 h) también las agenda desde el enlace de los correos de la promoción, agendar-sesion.html (WF-138), con la agenda del implementador de su promoción: L–V 9–18, al menos 48 h de antelación y hasta el plazo del cierre. Aviso al implementador tras 21 días sin privada. Tras el cierre de la promoción, las privadas pendientes caducan a los 30 días: el cliente ya no puede reservarlas y el equipo puede agendarlas con aviso.
13Automático · ImplementaciónCierre de la promoción (WF-125)El día siguiente a la última sesión grupal convocada del cliente, WF-125 le manda el correo de cierre desde la cuenta de Implementación (con el implementador en copia): hitos alcanzados, privadas que le quedan y su caducidad, y canales de ayuda. El proyecto pasa a completado. Si el onboarding del cliente no ha terminado, no sale el correo ni se completa el proyecto. Además, desde Proyectos › Documentación se puede generar a mano el comunicado de cierre (PDF o HTML) y enviarlo a los contactos del cliente.
14Automático → CSProyecto completado → Post 1 mesLa ficha entra sola en Post 1 mes de Customer Success y empieza su ciclo de reuniones (post 1 mes, 1QBR, 2QBR y QBR cada 4 meses), con follow-ups, avisos de preparación y escalado a cuenta crítica. Se detalla en la sección siguiente.

Vida de un cliente en Customer Success

Qué pasa con un cliente desde que termina su implementación: las fases de la Cascada CS, las reuniones de cada fase, los avisos automáticos a la CSM y cuándo un cliente pasa a riesgo o a churn. La lógica vive en la base de datos (funciones cs_*); n8n solo la expone (WF-122) y manda los avisos (WF-123). Los carriles separan a la CSM, lo automático, al cliente y el riesgo. Generado con archify desde docs/flujo-customer-success.archify.json.

Abrir el flujo a pantalla completa ↗
FaseCómo se entraReunión que toca
Sin asignarEl cliente aún no ha arrancado o nadie lo ha colocado. También los grupales sin promoción. Moverlo aquí a mano se guarda. Lleva siempre la columna «Carga de datos».—
En implementaciónSe ve aquí mientras tiene implementador y ya ha arrancado (su promoción ha empezado o su proyecto está activo), hasta que alguien lo mueve. Un grupal solo entra con implementador y promoción (lo bloquea la base de datos); al asignarle promoción pasa aquí solo.—
Post 1 mes post_implementacionSolo, al completarse el proyecto de implementación o el handover, si estaba en Sin asignar o En implementación.Post 1 mes, prevista a 21 días
Post 1 QBR qbr_1Solo, al marcar «Showed» la reunión post 1 mes.1QBR, prevista a 3 meses
Post 2 QBR qbr_2Solo, al marcar «Showed» la 1QBR.2QBR, prevista a 4 meses
QBR recurrente seguimientoSolo, al marcar «Showed» la 2QBR. Sustituye a la antigua fase Seguimiento (29-sep).3QBR a 4 meses; cada QBR hecha, cancelada o que no aplica crea la siguiente a 4 meses
UpsellA mano, cuando hay oportunidades de ampliar lo contratado.Reunión de upsell con sus oportunidades
ChurnSolo, al registrar una baja de tipo Cliente (desde «+ Churn» o desde Bajas). Las bajas de local o de módulos no cambian la fase.—
PasoQuiénCuándoQué pasa · qué se envía
1AutomáticoEntrada en la faseSe crea la reunión de la fase con su fecha prevista (21 días, 3 meses o 4 meses). El cambio queda en el historial del cliente como movimiento automático.
2Automático → CSMUna semana antes de la fecha prevista, sin agendarFollow-up automático para la CSM (etiqueta «Automático» en la pestaña Customer) y aviso por DM de Slack (WF-123, lunes a viernes a las 08:00). Agendar la reunión cierra ese follow-up.
3Automático → Dirección CSSigue sin agendar: +14 días y +45 díasA los 14 días, segundo aviso a la CSM. A los 45, correo de cuenta crítica con copia a la dirección de CS y el estado de riesgo del cliente pasa a Crítico.
4CSMAgendarEn la ficha del cliente › Customer › Hitos del ciclo de vida, la reunión pasa a «Agendada» con fecha y hora. La CSM elige invitados (jefe de proyecto marcado) y duración (45 min por defecto). WF-133 crea el evento con Meet en su Google Calendar y manda desde su Gmail la confirmación y el recordatorio de 24 h, y el enlace nuevo si cambia el Meet. «Cancelar» y «Reagendar» están siempre disponibles: cancelar deja la reunión «Por reagendar» y pide al cliente 2-3 huecos.
5Automático → CSM3 días laborables antesWF-123 manda a la CSM por Slack, a las 08:00, la fecha, la hora y la checklist de preparación: usabilidad en Power BI (pestaña Clientes y scoring), tickets en Zendesk (se piden a Soporte Técnico), notas del CRM, handover y entorno del cliente. Si se agenda con menos margen, llega la mañana siguiente; si cambia la fecha, vuelve a avisar.
6CSM · ClienteDurante la reuniónSe rellena el formulario de la reunión en la pestaña Formularios (post 1 mes, 1QBR, 2QBR; las QBR recurrentes usan el de la 2QBR repasando la anterior), que sustituye a los Google Forms. Cliente, tipo e implementador vienen puestos. «Guardar borrador» o «Completar formulario».
7AutomáticoFormulario completadoNPS (1-10), CSAT (1-5) y CES (1-5) se guardan como encuesta del cliente; en la post 1 mes hay dos CES, backoffice y app, y cuenta su media. Si se contesta que el cliente queda en riesgo, pasa a En riesgo con el motivo. Sale un borrador de resumen para el cliente (lo visto, próximos pasos, sus tareas, la próxima reunión) para copiar o abrir en el correo dirigido a su jefe de proyecto.
8CSMDespués de la reuniónMarca la reunión: «Showed» (resumen obligatorio), «No show» y reprogramarla (WF-133 manda desde su Gmail el correo para buscar otra fecha), «Cancelada» o «No aplica». Con «Showed», el cliente avanza solo a la fase siguiente y empieza el siguiente contador. Una reunión creada de más o por error se quita con «Eliminar reunión» (no la realizada ni la bienvenida individual): desaparece sin correo al cliente, queda en el historial y WF-133 cancela su evento futuro en Google.
9CSM · AutomáticoEn cualquier faseEn riesgo no es una fase: el cliente sigue en la suya, con la fila en rojo y en la pestaña «En riesgo». Entra por marca manual (bandera o «Marcar en riesgo»), downsizing o bonificación en los últimos 90 días, encuesta baja (CES ≤ 2, entre otras), caída de NPS, CSAT o CES respecto a la reunión anterior, 5 o más contactos seguidos «Sin respuesta» o health score alto. La marca manual enseña el motivo que escribió la CSM. Cada día laborable se guarda una foto del riesgo para los KPIs por mes. El riesgo también se ve en la Lista de fichas y en el gestor de Proyectos.
10CSMBajas y retenciónDesde la pestaña Churn de la ficha: «+ Downsizing» (locales o módulos), «+ Bonificación» (pausas y descuentos pactados, alimentan la vista Churn) y «+ Churn» (baja del cliente entero, que lo pasa solo a la fase Churn).
11CSMCada contacto con el cliente«+ Registrar contacto» con el tipo (proactivo o reactivo) y la persona con la que habló. Alimenta Seguimiento de clientes y los KPIs.
12CSM → ImplementaciónNecesita algo del implementador«Tareas a Implementación», desde la pestaña Customer o la cabecera de la Cascada. Al implementador le sale como alerta en su home, donde la marca «Hecha».
13CSMProblema técnico«Registrar incidencia» en la pestaña Soporte técnico: abre el ticket en Zendesk y la tarea en Asana (WF67), igual que desde Proyectos.
14CSMGrupal que cambia de tanda«Cambiar promoción» (o «Asignar promoción») en la pestaña Customer, con el mismo selector que usa Implementación.

CSM de cada cliente. Por defecto, según el tipo de implementación: una CSM para los grupales y otra para los individuales. Sale siempre del tipo de implementación; ya no se reasigna a mano. «Mis clientes» en la Cascada filtra por ese CSM.

Dónde se trabaja. Mi día CS (agenda con Google Calendar, follow-ups y reuniones del día), Cascada CS (fases, tabla y ficha del cliente con sus 13 pestañas), Seguimiento de clientes, KPIs Customer Success, Bajas y Churn.

Actores y pantallas

Las audiencias que tocan la plataforma —organizadas por departamento— y sus pantallas principales.

Ventas / Consultor Cliente Implementación · CS · Soporte · Producto · I+D · Marketing · RRHH Contabilidad Integraciones externas Backend (n8n propio + Postgres)
flowchart LR classDef cliente fill:#fde68a,stroke:#f59e0b,color:#78350f classDef consultor fill:#dbeafe,stroke:#3b82f6,color:#1e3a8a classDef yurest fill:#fecaca,stroke:#d62929,color:#7f1d1d classDef contab fill:#dcfce7,stroke:#16a34a,color:#14532d classDef integ fill:#ede9fe,stroke:#8b5cf6,color:#4c1d95 classDef backend fill:#cbd5e1,stroke:#64748b,color:#0f172a Ventas[👔 Ventas / Consultor
configurador · ofertas · lista]:::consultor Cliente[👤 Cliente · preventa
oferta.html · solicitud.html
enlace con token]:::cliente EC[🏠 Cliente · postventa
espacio-cliente.yurest.es
login propio, token propio]:::cliente Impl[🔧 Implementación
sinasignar · proyectos
panel-sesiones · promociones
convocatorias · checklists]:::yurest CS[❤️ Customer Success
mi día CS · cascada · seguimiento · KPIs
bajas · churn · highlevel]:::yurest Sop[🎧 Soporte
integraciones · hardware · stock]:::yurest Prod[💡 Producto
triaje · sprint · errores
tareas Asana · presupuestos]:::yurest IMD[🧪 I+D
permisos de roles]:::yurest Mkt[📣 Marketing
landings]:::yurest RRHH[🧑‍🍳 RRHH
tareas de cocina · mi equipo
gestión documental]:::yurest Contab[💼 Contabilidad
contabilidad · clientes-a3
proformas]:::contab Ext[🔌 Integraciones externas
Asana · HighLevel · Zendesk
Drive · Calendar · Slack
Redsys · SEUR · Gmail]:::integ BD[(🗄️ n8n propio
+ Postgres propio)]:::backend Ventas -.oferta / ficha.-> BD Cliente -.datos firmados / pago.-> BD EC -.mensajes · pedidos · facturas.-> BD Impl -.proyectos y sesiones.-> BD CS -.altas / bajas / promos.-> BD Sop -.tickets y envíos.-> BD Prod -.triaje / presupuestos.-> BD Contab -.SEPA / A3.-> BD RRHH -.equipos / NDA.-> BD Mkt -.enlaces.-> Ext BD -.sincroniza.-> Ext Ext -.webhooks.-> BD

Flujo principal: Origen → Ficha → Completada → Implementación → A3

El recorrido completo del cliente. La ficha puede nacer de varias fuentes; el ejemplo detalla la solicitud al cliente, la ruta más habitual. En implementación grupal se añade un paso: el cliente reserva su sesión de bienvenida en el portal antes de enviar, y el implementador asigna la promoción desde Proyectos.

flowchart TD classDef cliente fill:#fde68a,stroke:#f59e0b,color:#78350f classDef consultor fill:#dbeafe,stroke:#3b82f6,color:#1e3a8a classDef yurest fill:#fecaca,stroke:#d62929,color:#7f1d1d classDef contab fill:#dcfce7,stroke:#16a34a,color:#14532d classDef backend fill:#cbd5e1,stroke:#64748b,color:#0f172a O0[🟦 Origen de la ficha
Oferta ganada · Solicitud al cliente
Importador Sheet · HighLevel]:::consultor A1[1️⃣ Consultor · lista.html
📨 Solicitar ficha]:::consultor A2[(solicitudes
estado=pendiente
access_token=uuid)]:::backend A3[📧 Email al cliente
solicitud.html?t=ABC]:::backend B1[2️⃣ Cliente · solicitud.html
Empresa, JP, firmante,
TPV, SEPA]:::cliente B2[✍️ Firma SEPA en canvas
+ valida IBAN MOD-97]:::cliente B2b[📅 Solo grupal: reserva la bienvenida
en el portal · WF-124
calendario de la CSM de grupales]:::cliente B3[📤 Envía formulario
+ turno preferido si es grupal]:::cliente C1[(fichas_alta
estado=completada
fecha_rellenado set
sepa_mandato JSONB)]:::backend C2[📁 Crea carpeta Drive]:::backend C3[📧 Email al cliente con enlace a Drive
+ botón «Ya he subido mis documentos»]:::backend C3b[WF-116 · documentos-subidos.html
tarea de carga en Asana
ficha pasa a carga_datos]:::backend C4[📧 Email al consultor
aviso ficha rellenada]:::backend C5{TPV
no integrado?}:::backend C6[📋 Tarea Asana
+ email a soporte]:::backend D1[3️⃣ Pestaña 'Rellenado cliente'
Consultor pulsa 'Completar ficha']:::consultor D2[Consultor · ficha-cliente.html
Módulos, locales, financiero,
plan y precios]:::consultor D3[(fichas_alta
estado=rellenado
fecha_completado set)]:::backend P1[🔧 Proyecto de implementación
proyectos.html + Asana]:::yurest G1{¿Grupal?}:::backend G2[WF58 crea el proyecto grupal al guardar
+ 6 tareas fijas de Configuración del entorno]:::backend G3[Implementador asigna la promoción
Proyectos · carpeta Sin promoción]:::yurest G4[WF-113 convoca las sesiones
eventos de Calendar + correo de bienvenida
con calendario y credenciales]:::backend P2[🏠 Alta del acceso al Espacio Cliente
WF01 lo inserta con cred_master
+ email con set_token al contacto]:::backend P3[👤 Cliente · espacio-cliente.yurest.es
cronograma, mensajes, documentos,
facturas, hardware y sesiones privadas]:::cliente CS1[❤️ Customer Success · Cascada CS
Post 1 mes → 1QBR → 2QBR
→ QBR cada 4 meses]:::yurest E1[4️⃣ Pestaña 'Fichas'
Listado con SEPA disponible]:::yurest E2[5️⃣ Contabilidad · contabilidad.html
Pendientes A3]:::contab E3[📄 Ver mandato SEPA
+ Descargar PDF]:::contab E4[Toggle 'Grabado en A3']:::contab E5[(grabado_a3=true
grabado_a3_at set)]:::backend O0 --> A1 A1 --> A2 --> A3 --> B1 B1 --> B2 --> B2b --> B3 B3 --> C1 C1 --> C2 --> C3 -.cliente pulsa.-> C3b C1 --> C4 C1 --> C5 C5 -- Sí --> C6 C5 -- No --> D1 C6 --> D1 C1 --> D1 D1 --> D2 --> D3 D3 --> G1 G1 -- No --> P1 G1 -- Sí --> G2 --> G3 --> G4 --> P1 P1 --> P2 --> P3 P1 -- completado --> CS1 D3 --> E1 D3 --> E2 E2 --> E3 E2 --> E4 --> E5

Mapa de pantallas y navegación

Sidebar agrupado por departamento (con búsqueda global ⌘K, que también encuentra proformas por su número). Cada pantalla es accesible desde cualquier otra y se filtra por permisos del usuario.

flowchart LR classDef informes fill:#fff7ed,stroke:#f59e0b,color:#9a3412 classDef consultor fill:#eff6ff,stroke:#3b82f6,color:#1e40af classDef impl fill:#fef2f2,stroke:#d62929,color:#7f1d1d classDef contab fill:#f0fdf4,stroke:#16a34a,color:#14532d classDef sop fill:#faf5ff,stroke:#8b5cf6,color:#5b21b6 classDef cs fill:#fff1f2,stroke:#fb7185,color:#9f1239 classDef prod fill:#fefce8,stroke:#ca8a04,color:#854d0e classDef adm fill:#f1f5f9,stroke:#64748b,color:#0f172a SB[📐 Sidebar lateral
+ búsqueda global ⌘K] SB --> I[📊 Informes] I --> Iimp[Implementadores · Proyectos · Carga de datos
Seguimiento semanal · Participación · Heatmaps
Incidencias DEV · Integraciones TPV
KPIs mensuales de soporte · Resúmenes IA · Churn técnico]:::informes SB --> Ve[💼 Ventas] Ve --> Vc[Configurador · Ofertas · Fichas de cliente
Escalados 🟠 · Distribuidores potenciales]:::consultor SB --> Im[🔧 Implementación] Im --> Ip[Sin asignar 🟠 · Proyectos · Panel Sesiones
Promociones 🟠 · Importador de clientes
Configuradores: checklists · recetas]:::impl SB --> Cs[❤️ Customer Success] Cs --> Ck[Mi día CS · Cascada CS · Seguimiento de clientes
KPIs Customer Success · Bajas · Churn
HighLevel · Sin CRM]:::cs SB --> Cont[📒 Contabilidad] Cont --> Ca[Grabar en A3 🟠 · Clientes A3 · Cruce A3 · Proformas 🟠
Facturas de cliente · Facturas de distribuidores]:::contab SB --> Sup[🎧 Soporte] Sup --> Si[Estado clientes · Integraciones · Docs
Hardware envíos 🟠 · Stock · Clientes Free 3m]:::sop SB --> Pr[💡 Producto] Pr --> Pt[Triaje de sugerencias · Triaje de sprint
Productividad · Errores · Tareas Asana
Presupuestos 🟠 · Bolsa de horas
Documento interno IA · Updates]:::prod SB --> Id[🧪 I+D] Id --> Ip2[Permisos de roles · Editor de etiquetas ZPL]:::adm SB --> Mk[📣 Marketing] Mk --> Ml["Landings · Muro de rentabilidad (externo)"]:::prod SB --> Rh[🧑‍🍳 RRHH] Rh --> Rt[Tareas de cocina · Mi equipo
Gestión documental]:::adm SB --> Ad[🛡️ Administración] Ad --> Au[Usuarios y permisos · Logs
Mis contraseñas]:::adm EC2[🏠 Espacio Cliente
espacio-cliente.yurest.es
sitio aparte, fuera del sidebar]

Índice completo de pantallas (84). Todas las páginas del portal con su fichero y su función. Las de «Cliente / público» se acceden por enlace con token; el resto viven tras el login.

PantallaFicheroPara qué
📊 Informes
Distribución implementadoresdistribucion.htmlCarga y disponibilidad del equipo de implementación.
Proyectos (dashboard)informe-implementacion.htmlKPIs de implementación con filtros por implementador y plan.
Carga de datoscarga-datos.htmlEstado de la carga de datos de cada cliente (snapshot diario de Asana + Drive).
Seguimiento semanalinforme-seguimiento.htmlLo mismo que manda el correo de los lunes a Operaciones (WF-104), calculado en servidor para que pantalla y correo no diverjan.
Participación en sesionesparticipacion.htmlAsistencia por promoción con marcado en bloque, filtro por mes de inicio y sesiones asistidas/faltadas por cliente. Pestaña «Re enganche»: el recorrido de cada cliente que salta de una promoción a otra.
Incidencias en desarrolloincidencias-dev.htmlSnapshot diario de las incidencias Zendesk × Asana que están en DEV.
Integraciones TPVincidencias-integraciones.htmlGemela de la anterior para las integraciones de TPV, por estado y proveedor.
Mapa de calor de ticketsinforme-tickets.htmlVolumen de tickets por franja horaria.
Heatmap · Agente IAinforme-tickets-ia.htmlMismo mapa de calor para el agente de IA.
Resumen semanalresumen-semanal.htmlResumen IA de las incidencias de la semana.
Resumen mensualresumen-mensual.htmlInforme mensual profundo de incidencias.
Informe mensual de KPIsinforme-mensual-soporte.htmlKPIs de soporte del mes cerrado (WF105): tipos de ticket, módulos, top organizaciones, incidencia_dev e integraciones TPV.
Churn técnicochurn-tecnico.htmlSeñales técnicas de fuga de clientes.
💼 Ventas
Configurador de ofertaconfigurador.htmlArma la oferta (planes, módulos, order bumps) y la envía al cliente. Desde el 7-oct la consultoría personalizada sale primera y marcada (997 € de pago único) y la implementación grupal cuesta 250 € (antes, incluida); las dos tarjetas comparan la misma lista de lo que incluye cada modalidad.
Ofertas generadasofertas.htmlListado de ofertas y su estado (enviada / ganada); ampliar caducidad.
Distribuidores potencialesdistribuidores-detectados.htmlDominios detectados al rellenar el TPV de un local que aún no constan como distribuidor.
Fichas de clientelista.htmlFichas con pestañas Fichas / Rellenado cliente / Solicitudes.
Escalados de clientesescalados.htmlAmpliaciones y upsell de contrato (módulo, local o firmas), con pago mensual o anual. Finanzas, Compras, Yulia IA y Paneles BI también se pueden escalar. Badge y alerta del home con los escalados sin aplicar. Un local se puede crear directo o solicitar al cliente (estado «Solicitado», con «Copiar enlace» y «Reenviar»): el cliente rellena local, encargado, TPV y SEPA en escalado-local.html. Al aplicarlo se da de alta el local en la ficha con su SEPA y su contacto, y si el TPV es integrado se abre su ticket de integración. El alta en el entorno Yurest del cliente sigue siendo manual; el home avisa 7 días con «Local nuevo contratado» a quien ve Escalados y al comercial, CSM e implementador del cliente.
🔧 Implementación
Sin asignarsinasignar.htmlFichas personalizadas pendientes de asignar implementador.
Proyectosproyectos.htmlGestor de proyectos: pestañas (Formularios pasa a llamarse Documentación), secciones por módulo, cronograma Asana, vistas «Implementación / Escalado N», anotaciones que leen y escriben notas de HighLevel, turno preferido (editable) y asignación de promoción en los grupales, fecha de bienvenida, «Datos cargados», marca de riesgo de Customer Success, pestaña «Comunicaciones automáticas» (lo que el portal ha enviado al cliente, con «Ver correo», «Reenviar» y «Reenviar convocatoria»), adjuntos en almacenamiento privado, motivo al pausar, promoción inicial y actual, y exportación a CSV/Excel. «Datos cargados» con tres estados (Pendiente, En carga, Cargados). Sección «Sesiones de arranque» en los proyectos nuevos. Contactos = la lista compartida con Customer Success. Al marcar un No Show individual, recuperar la sesión en otra o desplazar el calendario pendiente. Desde el 24-oct la tabla sesiones recoge también las sesiones agendadas de los individuales (tipo individual), y «Última actividad» = última sesión dada (regla única en js/lib/sesion-reglas.js, la misma en WF01). «No aplica» por sesión de promoción. Alta de proyecto de Cocina de Producción con sus locales. Icono «Calendario de promociones»: mes por implementador, con festivos. En individuales, «Cerrar fase» en cada sección de módulo genera el resumen de cierre en PDF (sesiones, asistentes, criterios, incidencias y decisión de avance), que se guarda en Documentación y Customer Success ve en Formularios. La ficha del cliente muestra «Locales y módulos contratados» por local, como en la Cascada CS. En la pestaña Hardware, «Editar artículos» corrige una proforma sin justificante y regenera el PDF con el mismo número. En Grupales, el desplegable «Promociones» oculta por defecto las terminadas. Si el contacto de HighLevel de la ficha ya no existe, Anotaciones lo avisa y pide corregir el ID. Desde el 24-oct cada tarea lleva versión: guardar desde una copia vieja (otra pestaña, o después del Panel de sesiones) se rechaza y recarga en vez de pisar; las anotaciones se guardan entrada a entrada (sin pisarse entre Proyectos y Cascada CS); convocar, cancelar, recordar o cerrar promociones exige permiso de escritura.
Panel Sesionespanel-sesiones.htmlAgenda de sesiones + registro Show/No-Show y auto-resumen. «Seleccionar sesión» filtra por mes y semana (o mes entero). Marca cada sesión con ✅ (resumen enviado) o 💾 (guardado sin correo); los invitados se toman solo por su email.
Promocionespromociones.htmlPromos grupales (una nueva cada semana con la auto-serie), ocupación de huecos, implementador que imparte cada una y convocatorias: panel «Sesiones convocadas» y «Calendario por cliente». Antes de que arranque la promo se puede cambiar la fecha u hora de una sesión aún sin convocar («Cambiar fecha»).
Importador de clientesimportador-clientes.htmlAlta unificada: ficha desde Google Sheets y proyecto desde Asana en un solo paso. Origen HighLevel (WF-132) para migrar clientes: contactos, notas, promoción inicial y aviso si el cliente está de baja.
Configurador de checklistschecklists.htmlConstruye con IA las checklists del cliente y las da de alta en Yurest por su API (WF112). Subgrupo «Configuradores».
Configurador de recetasconfigurador-recetas.htmlDe la carta del restaurante (fotos o PDF) a fichas técnicas con ingredientes y el JSON de carga en Yurest. La IA va por n8n (WF140) y los productos de compra por el proxy de WF112. Botón «Historial»: copias en el servidor del trabajo de cada cliente para consultarlas o restaurarlas (WF-145). Subgrupo «Configuradores».
❤️ Customer Success
Mi día CScs-inicio.htmlAgenda de la CSM: reuniones agendadas, bienvenidas grupales reservadas (con el follow-up «Marcar asistencia a la bienvenida» si pasan sin marcar), follow-ups pendientes (los vencidos salen hoy), clientes sin respuesta y su Google Calendar.
Cascada CSclientes.htmlUna pestaña por fase (Sin asignar, En implementación, Post 1 mes, Post 1 QBR, Post 2 QBR, QBR recurrente, Upsell, Churn) más «En riesgo», con la tabla de la fase: salud, próximo hito, último contacto, alertas, uso, MRR y CSM, más «Bienvenida» y, en Sin asignar, «Carga de datos». Se cambia de fase arrastrando la fila o con el selector «Fase». La ficha del cliente tiene 13 pestañas (Información, Datos, Formación, Formularios, Soporte técnico, Customer, Anotaciones, Usabilidad, Desarrollos, Facturación, Escalados, Churn y Comunicaciones), con «Registrar incidencia», «Tareas a Implementación» y «Cambiar promoción». En Customer, «Eliminar reunión» y, en la bienvenida grupal, «Sesión aparte».
Seguimiento de clientescs-actividad.htmlPanel de dirección con la actividad de la cartera: gráfico del año con los clientes contactados cada mes (proactivo o reactivo), tabla de los contactados el último mes con los que están en riesgo en rojo, y quién no responde.
KPIs Customer Successcs-kpis.htmlContactos hechos, show rate de las reuniones (también 3QBR y 4QBR), encuestas, clientes en riesgo por mes y por motivo, entradas a Customer y upsells.
Bajasbajas.htmlGestión de bajas de clientes.
Churnchurn.htmlMRR y número de bajas por mes (cliente entero, locales y módulos) con la tabla de bonificaciones. Sustituye al Excel de churn.
HighLevel · Contactoscs-highlevel.htmlContactos del CRM HighLevel.
HighLevel · Clientes ganadoshighlevel-clientes.htmlOportunidades ganadas en HighLevel.
Clientes Yurest sin CRMhuerfanos-prod.htmlClientes en producción sin ficha en el CRM.
📒 Contabilidad
Grabar en A3contabilidad.htmlMandato SEPA + toggle de alta en A3. Los escalados de pago anual llevan la píldora «Anual».
Clientes A3clientes-a3.htmlClientes ya grabados en A3.
Cruce A3cruce-a3.htmlCruce de lo facturado en A3 con el portal, HighLevel y producto (WF137). Lee la última foto, que se genera a mano desde la oficina porque A3 solo es accesible por túnel.
Pagos de proformasproformas.htmlSeguimiento de cobros de proformas de hardware.
Facturas de clientefacturas.htmlFacturas que emitimos al cliente; se publican en su Espacio Cliente.
Facturas de distribuidoresfacturas-distribuidores.htmlFacturas que los distribuidores nos emiten por comisiones (otra base de datos).
🎧 Soporte
Estado clientes Yurestestado-clientes-yurest.htmlTelemetría de uso del producto por cliente (snapshot de producción). Tipología por locales activos (Independiente 1-2, Corporate 3-5 o 1-2 con cocina de producción, Enterprise más de 5) y tipo de implementación según HighLevel: primero el pipeline de Customer Success donde está el cliente (WF-136) y, si no está en ninguno, su venta ganada (WF50). Indicadores que siguen los filtros y filtran con un clic, filtros por módulos e integraciones, gestor de columnas y exportación a Excel o CSV.
Integracionesintegraciones.htmlPanel de tareas de integración (Asana) y TPV no integrados. Con «ID Zendesk», la tarjeta enseña el último comentario y los recordatorios del ticket y permite añadir una nota interna (WF07).
Doc. integracionesdocumentacion-integraciones.htmlManual de integraciones (público).
Hardware envíoshardware.htmlEnvíos de hardware (SEUR) y generación de proformas. Las etiquetas de varios bultos salen en un solo PDF; zona «Recogida / entrega en mano» sin gastos de envío. El home avisa de los pedidos pendientes de envío. «Editar artículos» corrige una proforma sin justificante (artículos, precios, envío, IVA) y la regenera con el mismo número, también desde la pestaña Hardware del proyecto.
Stockstock.htmlInventario de hardware. El stock se descuenta al marcar el pedido como enviado.
Clientes Free 3 mesesclientes-free.htmlClientes en periodo gratuito y su paso a Basic.
💡 Producto
Triaje de sugerenciastriaje.htmlClasificación de tareas por módulo con sugerencias IA.
Triaje de sprinttriaje-sprint.htmlTablero del sprint activo de Producto leído y escrito en vivo contra Asana: capacidad según horas disponibles (descuenta vacaciones y festivos de València) y el % de horas productivas de cada persona, editable en la propia vista (70 % senior, 50 % junior por defecto), burndown, carga por tipo, canal y módulo.
Productividadproductividad.htmlHoras imputadas por persona y día frente a las esperadas, en el sprint y hasta hoy, y desvío entre tiempo real y estimado.
Erroreserrores.htmlErrores del sprint: burn down por día hábil, columna actual, desglose por sección y caja «En QA / por subir». Un error cuenta como resuelto al pasar a QC.
Tareas Asanatareas-asana.htmlTareas abiertas que dependen de Producto (Back Clientes), por semana y por persona, editables en Asana. Snapshot cada 15 min (WF-115).
Presupuestospresupuestos.htmlListado con KPIs y filtros; alta y edición en un asistente de 4 pasos; estado, cobro y entrega editables desde la fila; visor del documento para editar, descargar o enviar el PDF (con el IVA elegido).
Bolsa de horasbolsa-horas.htmlControl financiero de horas (consumo FIFO).
Documento interno IAdocumento-interno-ia.htmlBase de conocimiento de sprints generada por IA.
Updatesupdates.htmlNewsletter de novedades a clientes desde Asana: combina sprints, módulo por tarea, «Generar con IA» respeta lo retocado a mano y se descarga en PDF, HTML o Word.
🧪 I+D
Permisos de rolespermisos-roles.htmlPermisos de cada rol de la plataforma Yurest (backoffice y app), con la ficha de cada vista (qué hace, etiquetas, fallos de seguridad y avisos) y asistente de rol nuevo. Desde el 7-oct ya no calcula pesos ni niveles. Es una simulación: no guarda nada en Yurest. Permiso propio permisos_roles.
Editor de etiquetas ZPLeditor-etiquetas.htmlDiseña etiquetas para impresoras Zebra (texto, códigos de barras, QR, cajas) y genera su código ZPL; también importa ZPL existente. Diseños base, entre ellos la ficha «Receta». Imprime directamente con Zebra Browser Print (varias impresoras, con una fijada o preguntando cada vez). Sin backend: los diseños se guardan en el navegador. Permiso propio editor_etiquetas.
📣 Marketing
Landingslandings.htmlAccesos a las webs de Yurest, entre ellas el Muro de rentabilidad (externo); se abren en una pestaña nueva.
🧑‍🍳 RRHH
Tareas de cocinatareas-cocina.htmlTurnos y tareas de la cocina de la oficina (sustituye a YuTasks). Avisa de los usuarios del portal que aún no están dados de alta en cocina.
Mi equipomi-equipo.htmlInventario del equipo físico de cada persona; el empleado declara el suyo, corrige el nº de serie y firma la cesión.
Gestión documentaldocumentos-rrhh.htmlNDA y cesión de equipos por empleado, generados y firmados en el portal.
🛡️ Administración
Usuarios y permisosadmin.htmlRoles, permisos por usuario y auditoría. Cada página del portal tiene su propio permiso.
Logs de actividadlogs.htmlTrazabilidad de acciones del portal. Se busca por persona, por texto o pegando el id de una ficha, un proyecto o un usuario.
Mis contraseñasmis-contrasenas.htmlGestor de contraseñas de portales externos, cifradas en BD.
👤 Cliente / público (enlace con token)
Ficha de alta (cliente)solicitud.htmlEl cliente rellena empresa, JP, firmante, TPV y firma SEPA. En el paso 03 puede añadir «Otras personas que participarán en la implementación». Si la implementación es grupal, reserva su sesión de bienvenida y elige turno preferido.
Sesión de bienvenidabienvenida.htmlSelector de huecos de la bienvenida grupal (WF-124) que se abre desde la solicitud; sustituye al calendario de HighLevel.
Tu oferta (cliente)oferta.htmlEl cliente ve la oferta, edita plan/módulos y paga (Redsys).
Formulario de altaficha-cliente.htmlEl consultor completa todos los detalles de la ficha. La implementación grupal sale a 250 € a cobrar; las fichas anteriores al 7-oct conservan lo vendido entonces (1.700 € con un 100 % de descuento). Admite el ID de oportunidad de HighLevel a mano.
Documentos subidosdocumentos-subidos.htmlDestino del botón del correo de la carpeta de Drive: el cliente confirma que ha subido sus documentos (WF-116). Pide confirmar porque los antivirus de correo abren los enlaces solos.
Firmar mandato SEPAfirmar-sepa.htmlRe-firma del mandato SEPA por parte del cliente.
Agendar sesiones privadasagendar-sesion.htmlEl cliente grupal agenda sus dos privadas de la promoción con el implementador (WF-138), desde el enlace de los correos.
Nuevo localescalado-local.htmlEl cliente rellena los datos del local que amplía (local, encargado, TPV y SEPA con firma) para un escalado solicitado (WF-142). Caduca a los 30 días.
Espacio Clienteespacio-cliente.htmlSitio propio del cliente (espacio-cliente.yurest.es): cronograma, mensajes, documentos, facturas, hardware, contrato y sesiones privadas. Login con contraseña propia, no enlace con token. El equipo entra con la llave maestra: elige cliente en un selector y lo ve en solo lectura. En pausa: no sale ningún correo al cliente.
⚙️ Sistema / utilidades
Portal (inicio)index.htmlHome con accesos por departamento y buscador global.
Accesologin.htmlLogin; emite el token de sesión firmado.
Página no encontrada404.htmlError 404.
Novedades del portalnovedades.htmlHistórico de lo publicado en el portal, filtrable por área. Se entra desde el home, no desde el sidebar.
Informe ejecutivo de soporteinforme-soporte-zendesk.htmlInforme estático de un periodo concreto (Zendesk Search API), pensado para imprimir. Fuera del sidebar.
Matcheo entre sistemasmatcheo-sistemas.htmlCruce de IDs Yurest / HighLevel / Zendesk por cliente.
Cascada CS (alias)cs-kanban.htmlEntrada alternativa al kanban de Customer Success.
Proforma (mockup)proforma-mockup.htmlMockup visual del documento de proforma.
Doc. integraciones (standalone)documentacion-integraciones-standalone.htmlVersión independiente del manual de integraciones.
Doc. integraciones (Zendesk)documentacion-integraciones-zendesk.htmlManual de integraciones embebible en Zendesk.

Integraciones externas

El backend n8n orquesta una decena de servicios externos. Todo pasa por workflows; el frontend nunca habla directamente con ellos.

ServicioPara quéDirección
AsanaProyectos de implementación (secciones por módulo/cliente), tareas, cronograma, tickets de Zendesk enlazados y, para Producto, el sprint: horas imputadas, errores y tareas de Back Clientes.lectura + escritura
HighLevel (CRM)Contactos, negocios, oportunidades y notas (las anotaciones del proyecto). Al ganar la ficha sincroniza contacto / business / Custom Object Local. Importador de clientes desde HighLevel (WF-132), que migra contactos, notas y promociones. La ficha admite el ID de oportunidad a mano. La sincronización (WF65) no adopta locales de otra empresa, manda el TPV «Yuprod» como «No aplica» y rellena el «ID BBDD» del Business por CIF si está vacío (nunca pisa uno existente). Dos snapshots diarios alimentan el tipo de implementación de Estado clientes: ventas ganadas (WF50, que ya incluye los clientes Basic y no machaca el snapshot si HighLevel limita peticiones) y pipelines de Customer Success (WF-136). Si el contacto de una ficha se borró o fusionó en HighLevel, las anotaciones lo avisan en vez de fallar. Desde el 24-sep ya no agenda la bienvenida grupal ni convoca promociones: lo hace el portal.lectura + escritura
ZendeskTickets de soporte por TPV; se enlazan a Asana por el campo «ID Zendesk». «Registrar incidencia», desde Proyectos o desde la Cascada CS, abre el ticket y su tarea en Asana (WF67).lectura + escritura
Google DriveCarpeta por cliente con la documentación de la ficha; grabaciones de sesiones compartidas.escritura
Redsys (TPV BBVA)Pasarela de pago para aceptar ofertas (cobro = importe final × 1,21).request / response
SEUREnvíos de hardware (SEUR PIC); proformas con coste de envío por zona. Las etiquetas de varios bultos se unen en un solo PDF.escritura
GmailLos correos salen de varias cuentas: la de Implementación (documentación, promociones, bienvenida y no-shows), el Gmail de cada CSM (reuniones de Customer, WF-133), el de algunos implementadores (resúmenes de sesión, WF52) y la de Soporte (avisos y otros correos del portal). WF-134 busca el original en esos buzones para reenviarlo o enseñarlo («Ver correo»).escritura + lectura
Google CalendarAgenda de cada implementador: se leen sus huecos para no solapar sesiones y se crean, mueven y cancelan los eventos. También los eventos de las sesiones de promoción que convoca WF-113 (desde la cuenta de Implementación), que comprueba antes de convocar si alguno se borró a mano, la bienvenida grupal en el calendario de la CSM de grupales (WF-124), que detecta rechazos y eventos borrados y devuelve a su hora los eventos movidos, y la agenda de Mi día CS. En el calendario de cada CSM, los eventos con Meet de las reuniones de Customer (WF-133), que también revisa rechazos y cambios de Meet.lectura + escritura
API de Yurest (WS)Vacaciones del equipo de desarrollo para el sprint y alta de checklists en la cuenta del cliente.lectura + escritura
SlackAvisos internos: alertas de ofertas, incidencias en DEV, crones caídos y errores de credenciales. DMs a las CSM con follow-ups y preparación de reuniones (WF-123). Canal privado #pregunta-al-portal con el bot de ayuda (WF-131). Novedades del portal al canal del equipo (WF-135, cada 10 min).escritura
Anthropic (Claude)Bot de ayuda del portal en Slack (WF-131): responde dudas de Ventas, Implementación, CS y Producto con el manual y las reglas de negocio. Además, el conector «Portal Yurest» de claude.ai (Worker mcp-portal) deja al staff con permiso api_claude consultar proyectos, fichas y la Cascada CS en solo lectura, con su usuario del portal y sin datos bancarios ni credenciales.request / response · lectura (conector)
OpenAI (gpt-4o)Resúmenes de sesión, resúmenes de incidencias, sugerencias de triaje, documento interno y reescritura de la newsletter.request / response

Infraestructura y seguridad

Cómo está montada la plataforma hoy, tras la migración a infraestructura propia.

PiezaDetalle
FrontendHTML/JS estático servido por Cloudflare Pages desde un repo privado (build scripts/build-site.sh). URLs limpias, sin .html.
Segundo sitioEl Espacio Cliente se publica aparte, en espacio-cliente.yurest.es (build scripts/build-espacio-cliente.sh → _site-cliente). No comparte despliegue con el portal interno: al cliente se le da la raíz del dominio a secas.
Backend299 workflows en n8n propio: 208 de producción y 91 copias [DEV]. Toda la lógica y las integraciones viven aquí, salvo la de Customer Success, que vive en funciones SQL cs_* que n8n solo expone.
Base de datosPostgreSQL autogestionado (BD yurest), sustituto de Supabase. Los workflows leen y escriben directamente. Desde el cierre de seguridad del 30-sep, anon y authenticated no tienen acceso a las tablas, vistas ni funciones de public: todo pasa por n8n con service_role. RLS activa en todas las tablas de public y storage fuera del search_path.
Entorno DEVdev.portal.yurest.es contra la BD yurest_dev y las copias [DEV] de los workflows (webhooks bajo /webhook/dev/). Los correos van a la cuenta de Soporte y las escrituras en Asana, Calendar y Drive se simulan. La rama dev se sincroniza con main una vez al día.
AutenticaciónEl login emite un token de sesión firmado (HMAC); cada webhook de staff lo valida en línea. Sin auth básica compartida.
Bloqueos de IP (España)El portal y el Espacio Cliente salen por IPs compartidas de Cloudflare Pages (rango 188.114.9x para dominios personalizados). Durante los partidos, las operadoras españolas bloquean esas IPs por orden de LaLiga y el portal deja de cargar para quien use esa operadora, hasta que acaba el partido. No es una caída: por otra IP de Cloudflare responde igual. Mitigación de hoy: datos móviles de otra operadora o VPN.
PermisosRoles con permisos predefinidos + deltas por usuario; cada página tiene su propio permiso y el sidebar se filtra por él. Cada usuario puede cambiar su contraseña. Trazabilidad en logs.html.

Workflows n8n implicados

La instancia tiene 299 workflows a 20 de octubre de 2026 (91 son copias [DEV]). Estos son los que sostienen el flujo principal; el resto cubre integraciones, informes y automatismos programados.

WorkflowTriggerQué hace
Auth / rolesPOST login · rolesValida credenciales y emite el token de sesión HMAC; resuelve permisos (rol + deltas por usuario).
Configurador / ofertasPOST oferta-enviar · GET ofertasGenera la oferta, la envía al cliente y gestiona estados (enviada/ganada) y caducidad.
Pago RedsysPOST pago/iniciar · retorno TPVFirma la petición Redsys, procesa el retorno y dispara el enlace a la ficha tras el cobro.
Fichas de altaPOST guardarFicha · GET altasListado y CRUD de fichas. UPDATE solo de campos enviados (no destructivo).
SolicitudesPOST crearSolicitud · GET listaSolicitudesCrea la solicitud con access_token y devuelve la lista filtrada por estado.
Responder solicitudPOST responderSolicitudCliente envía → INSERT ficha + carpeta Drive + emails (cliente/consultor) + tarea Asana si TPV no integrado. El correo de la carpeta va al jefe de proyecto; las otras personas de la implementación se importan a «Contactos del cliente».
Importador SheetPOST importar-sheetConvierte una URL de Google Sheets en una ficha pre-rellenada.
ProyectosPOST/PUT proyectos + tareasCrea el proyecto desde la ficha (master Asana según módulos), secciones y tareas.
WF07 · CalendarPOST calendar/event · calendar/disponibilidadCrea, mueve y cancela el evento de Google Calendar de una sesión (con Meet e invitados) y lee la agenda del implementador. Cancelar o mover avisa a los invitados salvo con avisar:false (No Show y desplazar el calendario). También sirve a Integraciones la actividad de un ticket Zendesk (último comentario y recordatorios) y añade notas internas firmadas con el usuario del portal.
Panel de sesioneswebhooks panel/*Agenda sesiones, valida disponibilidad de calendario y registra Show/No-Show en Asana. Toma los invitados solo por su email, marca cada sesión como resumen enviado o guardado, y manda el correo «Nuevo calendario de sesiones» al desplazar el calendario. Busca las sesiones en la semana o el mes que pide el panel (máx. 35 días).
Grabado A3POST grabadoA3Toggle del flag grabado_a3 con diagnóstico de filas afectadas.
Sync HighLevelwebhook al ganar fichaUpsert de contacto / business / oportunidad ganada + Custom Object Local en el CRM. Usa la oportunidad puesta a mano en la ficha si es de ese contacto; sin contacto no toca ninguna oportunidad. No adopta locales de otra empresa; «Yuprod» va como «No aplica» y, si algún local falla, la sincronización queda «parcial». Rellena el «ID BBDD» del Business cuando el CIF casa con un único cliente de producción, ningún otro Business lo lleva y el campo está vacío.
WF77 · Espacio Clientewebhooks portal-cliente/*Todo lo que ve y hace el cliente en su espacio: login propio, cronograma, mensajes, documentos, facturas, pedidos de hardware, contrato y sesiones privadas. También sirve la llave maestra del equipo (lista de clientes y cabecera X-Cliente-Proyecto), que corta cualquier escritura. El workflow más grande de la instancia.
WF-101 · Accesos Portalwebhook portal-accesosAltas, reenvíos y revocaciones de los accesos al Espacio Cliente. El acceso inicial lo crea WF01 al nacer el proyecto.
WF102 · Facturas Clientewebhooks facturas · facturaSube la factura al bucket privado y la publica en el Espacio Cliente.
WF99 · Facturas Distribuidorwebhook facturas-distribuidorFacturas de comisiones que nos emiten los distribuidores; vive contra la BD del portal de distribuidores.
WF-97 / WF-98 · Carga de datoscron 06:15 + GETReconstruye y sirve el estado de la carga de datos de cada cliente cruzando Asana y Drive. WF-98 sirve además los comentarios de la tarea de carga de varias fichas a la vez (Proyectos › Grupales).
WF-99 · Sesiones privadas staffwebhooks staff/privadas*Mismo motor de huecos que el Espacio Cliente, pero agendando nosotros y sin que la cuota vete.
WF26 · EscaladosPOST escalados · aplicarAl aplicar un escalado de tipo modulo o local sobre una implementación individual, crea en el proyecto la sección del módulo nuevo con sus sesiones y la sella con escalado_id, que es lo que separa las vistas del tab Proyecto. Un escalado de local se puede solicitar al cliente: nace en «Solicitado» y le manda el enlace desde la cuenta de Implementación (reenviar reutiliza el token). Al aplicarlo, una función de la BD da de alta el local con su SEPA y su contacto en una transacción y, con TPV integrado, WF62 abre el ticket de integración de ese local aunque el cliente ya tenga otros.
WF-142 · Escalado local públicoPOST escalado-local/solicitud · responderFormulario público del cliente para un escalado de local solicitado, autorizado por el token del enlace. Token, caducidad (30 días) y validación viven en la BD; al responder, el escalado pasa a pendiente y dispara WF-143.
WF-143 · Avisos escalado localwebhook + cron 5 minCuando un escalado de local llega a pendiente, manda un correo a Soporte, al implementador, al CSM y al comercial del cliente (uno por persona, una sola vez por escalado).
WF-104 · Seguimientocron lunes 08:00 + GET informe-seguimientoCalcula en servidor el informe semanal de implementaciones. La misma respuesta alimenta el correo a Operaciones y la pantalla, para que no puedan divergir.
WF105 · Informe mensualcron día 1 + GET informe-mensual-soporteLanza las 52 consultas a la Search API de Zendesk del mes cerrado y guarda el informe ya redactado en informes_mensuales_soporte.
WF-106 · Triaje de sprintwebhooks sprint-triaje/asana*Lee y escribe en vivo el tablero «Sprint #N» de Producto en Asana: tareas, secciones, miembros y campos personalizados.
WF-107 · Vacaciones sprintGET sprint-triaje/vacacionesVacaciones del equipo de desarrollo leídas del WS API de Yurest; el triaje ya no las pide a mano.
WF-108 · Alerta de memoriatimer del host cada 5 minVigila la memoria de la máquina de n8n y avisa por DM de Slack. Vive fuera de n8n porque el sandbox no ve el sistema de ficheros.
WF-100 · Participaciónwebhooks sesiones/*Asistencia por promoción, marcado en bloque (se proyecta al árbol del proyecto) y datos del re enganche.
WF58 · Proyecto grupalwebhook al guardar la ficha + reconcile cada 6 hCrea el proyecto grupal en cuanto se guarda la ficha, con las 6 tareas fijas de «Configuración del entorno».
WF61 · Fase CSPOST cs-estadoCambio de fase de la Cascada CS. Acepta «Sin asignar» y devuelve el error de la BD (un grupal no entra en implementación sin implementador y promoción).
WF67 · Registro de errorPOST registro-error«Registrar incidencia» desde Proyectos › Tickets soporte y Cascada CS › Soporte técnico: ticket en Zendesk (etiqueta cascada_cs si viene de CS) y tarea en Asana. No necesita proyecto. No confundir con el WF67 de oportunidades de HighLevel.
WF69 · Asignar promociónPOST desde Proyectos, Cascada CS y WF96Asigna o cambia la promoción del cliente grupal (también al cambiarle de grupo por el tercer no-show); dispara la convocatoria de WF-113.
WF-109 · Sesiones de promociónwebhookGenera las sesiones de cada promoción desde la plantilla fija del cronograma, conservando los eventos ya agendados.
WF-110 · Horas del sprintcron + GETHoras imputadas por día en Asana; alimenta Productividad y el triaje.
WF-111 · Errorescron + GETSnapshot de los errores del sprint y su historial de columnas para la página Errores.
WF112 · Checklists · BonificacioneswebhooksProxy de IA y API de Yurest para el configurador de checklists; CRUD de bonificaciones para la vista Churn.
WF-113 · Convocatoriaswebhook promociones/convocatoriasConvoca, reprograma y cancela las sesiones de la promoción al asignarla, y manda el correo de bienvenida con fechas, calendario y credenciales. Invita al jefe de proyecto, a la persona de contacto y a los «Contactos del cliente» salvo los desmarcados, y salta las sesiones «No aplica» de cada cliente. Operación «reenviar»: añade a los contactos elegidos a las sesiones futuras y les reenvía la bienvenida. Comprueba en Google cada sesión convocada futura: las borradas a mano salen «Borrada en Google» y no se recrean solas. Descarta los emails inválidos (con aviso) para que un solo invitado malo no haga rechazar el evento, y limpia los errores viejos de sesiones que ya están al día. Cancelar deja la sesión «No aplica» en los proyectos que siguen en la promo. Antes del arranque, «ajustar» fija a mano la fecha u hora de una sesión aún no convocada, y «fechas» da al calendario las fechas reales. El correo de bienvenida enseña la cuenta Master real del cliente.
WF-138 · Agenda de privadasPOST agenda-privadas/estado · reservarEl cliente grupal agenda sus dos privadas desde agendar-sesion.html: huecos libres del implementador de su promoción (FreeBusy de Google) y, al reservar, evento de Google primero y fecha en la tarea del proyecto después; si la BD lo rechaza, se borra el evento.
WF-114 · Recordatorioscron 09:00Recordatorio de las sesiones de promoción del día siguiente, un correo por cliente. Encendido desde el 24-sep. Se salta bajas, pausados y promociones archivadas.
WF-115 · Tareas Asanacron 15 min + webhooksSnapshot de las 4 secciones de Back Clientes y escrituras (guardar, comentar) en Asana.
WF-116 · Carga desde el correoPOST firmadoLo mismo que el check del Espacio Cliente: crea la tarea de carga de datos y pasa la ficha a carga_datos.
WF-117 · Contadores del homeGET home/contadoresCalcula en servidor los contadores de los badges del sidebar y el home.
WF96 · Onboardingcron cada hora + POST onboarding/noshowEstados del onboarding grupal: recordatorios de documentación (48 h, 72 h, 4 hábiles), detección de archivos en Drive y, al enviarse un No Show desde el portal, la escalera de no-shows de esa ficha. Los recordatorios van al jefe de proyecto. Al detectar documentos en Drive crea la tarea de carga como las demás vías, sin duplicarla; al terminarla el equipo de carga, avisa por correo al implementador. En el tercer no-show con hueco en su turno, le cambia de grupo por WF69.
WF-122 · Customer SuccessGET cs?recurso= · POST cs/accionPuerta de la Cascada CS: valida la sesión y llama a las funciones SQL cs_* (ficha, resumen, agenda, KPIs, acciones, formularios), también los contactos del cliente, las tareas a Implementación y cancelar o reagendar reuniones. Toda la lógica del ciclo de vida está en la BD.
WF-123 · CS Avisos diarioscron L-V 08:00Avanza el ciclo de vida (follow-ups automáticos, 2º aviso, cuenta crítica con correo a la dirección de CS) y manda por DM de Slack a cada CSM sus follow-ups y los avisos de preparación de reuniones. Guarda la foto diaria del riesgo para los KPIs por mes.
WF-124 · Bienvenida grupalwebhooks + cron 15 minHuecos y reservas de la sesión de bienvenida en el calendario de la CSM de grupales; correos de confirmación, recordatorio 24 h y no-show. Cada 15 min revisa en Google las reservas futuras: si el cliente rechaza o el evento se cancela, anula la reserva y le pide otra fecha; si cambia el Meet, le manda el enlace nuevo. Avisa a la CSM de cada reserva, el «Fuera de la oficina» cierra el hueco y la CSM puede cancelar desde la Cascada. Si el evento de un hueco aparece movido en Google, lo devuelve a su hora y avisa a la CSM. Una reserva cancelada a mano en la base de datos sigue la misma ruta que la cancelada por la CSM. «Sesión aparte» (permiso de un solo uso que da WF01) reserva una hora fuera de los huecos con evento propio. Los fallos al servir la agenda quedan registrados como error.
WF-125 · Cierre de promocióncron + envío manualAl día siguiente de la última sesión grupal del cliente, correo de cierre (hitos, privadas pendientes y su caducidad) y proyecto a completado, que lo pasa a Customer Success.
WF-127 · Carga desde ProyectosPOSTBotón «Datos cargados» del implementador: lo mismo que WF-116, sin que el cliente pulse el correo.
WF-128 · ComunicacionesGETLista lo que el portal ha enviado a un cliente (correos, invitaciones, avisos) para la pestaña Comunicaciones de Proyectos y Cascada CS.
WF-130 · Vista previa No ShowPOST onboarding/noshow/previewDevuelve el correo de No Show que saldría, sin enviar nada, para confirmarlo antes. Si toca cambio de grupo, enseña la fecha y el turno del grupo nuevo.
WF-131 · Bot de ayudaeventos de SlackResponde en el canal #pregunta-al-portal con Claude, el manual y las reglas de negocio.
WF-132 · Importador HighLevelwebhookOrigen HighLevel del importador de clientes: trae la oportunidad ganada como ficha y migra el cliente completo: contactos (paginados), notas a la bitácora del proyecto, promoción inicial y actual y aviso si el cliente está de baja.
WF-133 · Reuniones CS en Googlecron 5 minReuniones de Customer (post 1 mes, QBR, upsell y la bienvenida individual ya agendada) en el Google Calendar de cada CSM, con Meet e invitados. Desde su Gmail manda confirmación, recordatorio de 24 h, nuevo enlace, no show y cancelación con «reagendar obligatorio». Relee los eventos: cada hora los de las reuniones futuras y cada 15 min el de la bienvenida individual, que queda «Por reagendar» si todos rechazan o el evento desaparece. Cancela en Google el evento futuro de una reunión eliminada desde la Cascada, sin correo al cliente.
WF-134 · Reenviar comunicaciónPOST proyectos/comunicaciones/reenviarBotón «Reenviar» de Comunicaciones (Proyectos y Cascada CS): busca el correo original en Enviados de la cuenta de Implementación, de Soporte y de los Gmail de implementadores, y lo reenvía tal cual desde la cuenta de Implementación a los contactos elegidos. Con modo:'ver' («Ver correo») no envía nada: devuelve el original leído (cabeceras, HTML, adjuntos) para enseñarlo. Nunca adivina: si no lo encuentra o hay varios, lo dice.
WF-139 · MencionesGET/POST mencionesMenciones «@» en las anotaciones de Proyectos y Cascada CS: da la lista de compañeros que entran en cualquiera de las dos páginas y de los comerciales (que leen esa bitácora aunque no tengan permiso), apunta el aviso del mencionado (tabla menciones), lo devuelve al panel de alertas del escritorio y lo marca leído al abrir esas anotaciones. Quién puede ser mencionado lo decide la base de datos, no el navegador.
WF137 · Cruce A3GET contabilidad/cruce-a3Sirve a cruce-a3.html la última foto del cruce A3 ↔ portal ↔ HighLevel ↔ producto. Solo lee: la foto se publica a mano.
WF140 · Configurador de recetasPOST recetas/iaIA del configurador de recetas con la clave en el servidor; el formulario «Carga en Yurest» sube el JSON resultante al Yurest del cliente.
WF-145 · Recetas HistorialGET/POST recetas/historialHistorial del configurador de recetas: guarda una copia del trabajo de cada cliente al exportar, antes de «Nuevo cliente» y antes de restaurar otra (tabla recetas_historial), la lista con su resumen, la devuelve entera para consultarla o restaurarla y la borra si se elimina. Quién entra lo decide la base de datos (permiso del configurador).
WF-135 · Novedades a Slackcron 10 minLee las novedades publicadas del portal y manda las nuevas al canal de Slack del equipo, agrupadas por departamento y con @canal (sin Backend ni General).
WF50 / WF-136 · Snapshots HighLevelcron 06:30 · cron 06:45WF50 guarda las ventas ganadas de HighLevel (también las de clientes Basic); WF-136, las oportunidades de los pipelines de Customer Success (sin Churn ni Upsell) en highlevel_cs_snapshot. Estado clientes (WF47) cruza ambos por ID BBDD o CIF: pipeline CS de Planes o Basic = Grupal, Corporate o Enterprise = Individual; si no está en CS, manda la venta ganada. Si HighLevel limita peticiones y fallan demasiadas lecturas, el refresco se aborta y se conserva el snapshot anterior.

Modelo de datos esencial

Tablas y relaciones que sostienen todo el flujo. Soft-delete vía deleted_at en casi todas (no en locales).

erDiagram OFERTAS ||--o| FICHAS_ALTA : "oferta↔ficha (oferta_id / solicitud_ficha_id)" SOLICITUDES ||--o{ FICHAS_ALTA : genera FICHAS_ALTA ||--o{ LOCALES : tiene FICHAS_ALTA ||--o{ PROYECTOS : "se convierte en" FICHAS_ALTA ||--o| PROMOCIONES : "ocupa hueco (promocion_id)" FICHAS_ALTA ||--o{ BAJAS : "puede darse de baja" FICHAS_ALTA ||--o{ DISTRIBUCION : "asignada a implementador" FICHAS_ALTA ||--o{ FICHAS_HISTORIAL : "registra cambios" FICHAS_ALTA ||--o{ CS_CONTACTOS_CLIENTE : "contactos del cliente" PROYECTOS ||--o| PROMOCIONES : "ocupa hueco (promocion_id)" PROMOCIONES ||--o{ PROMOCIONES_CONVOCATORIAS : "sesiones convocadas" OFERTAS { uuid id PK text estado "borrador|ganada|pagada_transferencia" text billing "mensual|anual" text plan text cliente_sociedad text cliente_cif jsonb addons "módulos/extras del configurador" numeric final_amount uuid solicitud_ficha_id FK text access_token UK timestamptz expires_at timestamptz created_at } SOLICITUDES { uuid id PK text access_token UK uuid ficha_id FK text estado jsonb datos timestamptz created_at } FICHAS_ALTA { uuid id PK text estado "completada|rellenado" text tipo_cliente "lite|pro|corporate" text denominacion text nombre_comercial text cif text modulos "array TEXT[]" uuid oferta_id FK uuid promocion_id FK text promocion_turno "manana|tarde" text preferencia_turno "la que pide el cliente" uuid promocion_inicial_id "la primera; trigger BD" text cs_estado "fase de la Cascada CS" text onboarding_estado "pending_documents|carga_datos|active_onboarding|paused_onboarding" text cred_master text cred_yurest text origen "sheet|solicitud|manual|highlevel" bool introducido_yurest jsonb paquetes_carrito "snapshot del carrito, impl_grupal con precio y dto de la grupal" text highlevel_opportunity_id "oportunidad de HighLevel" jsonb adjuntos bool grabado_a3 jsonb sepa_mandato timestamptz fecha_rellenado timestamptz fecha_completado } LOCALES { uuid id PK uuid ficha_id FK "NOT NULL, ON DELETE RESTRICT" text nombre text sociedad_cif decimal mensualidad bool es_cocina_central text tpv uuid sepa_mandato_id } PROYECTOS { uuid id PK uuid ficha_id FK text cliente text estado "activo|completado|pausado" uuid promocion_id FK uuid promocion_inicial_id "la primera; trigger BD" text asana_project_url jsonb secciones "tareas del proyecto; escalado_id/escalado_fecha marcan las que nacen de un escalado" jsonb contactos "copia de cs_contactos_cliente que mantiene un trigger" jsonb formularios "documentos del proyecto, entre ellos cierre_fase" jsonb sepa_mandato } PROMOCIONES { uuid id PK text nombre date fecha_inicio int plazas_manana int plazas_tarde text asana_project_gid } PROMOCIONES_CONVOCATORIAS { uuid id PK uuid promocion_id FK text clave_sesion "de la plantilla" text turno "manana|tarde|*" timestamptz inicio text google_event_id jsonb asistentes "proyecto_id + email" text estado } BAJAS { uuid id PK uuid ficha_id FK } DISTRIBUCION { uuid id PK uuid ficha_id FK text implementador } FICHAS_HISTORIAL { uuid id PK uuid ficha_id FK text accion timestamptz created_at } CS_CONTACTOS_CLIENTE { uuid id PK uuid ficha_id FK text nombre text apellidos text email "una sola vez por ficha" text rol "puesto del catálogo" bool convocar "se invita a las sesiones grupales" }

Alcance: diagrama esencial. fichas_alta tiene ~120 columnas reales (financiero fin_*, highlevel_*, health_*, exento_iva, fraccionamiento_*, TPV, dirección de entrega…); arriba solo las representativas. Tablas secundarias no diagramadas: usuarios, cs_estado_historial, prod_clientes_snapshot/estado, hardware_pedidos, escalados (pago mensual o anual en detalle.periodicidad), seur_*, sesiones, facturas_cliente, portal_accesos, proyecto_mensajes, bolsa_horas_compras/asignaciones, bonificaciones, promociones_bienvenidas, promociones_cierres, bienvenida_reservas (con el motivo de cancelación y el último Meet enviado), bienvenida_apartes (permisos de un solo uso para la sesión aparte), comunicaciones_cliente, onboarding_eventos, panel_resumenes_enviados, las de Customer Success (cs_hitos, con el evento de Google y el Meet de cada reunión y borrado lógico al eliminarla, cs_followups, cs_contactos, cs_encuestas, cs_formularios, cs_handover, cs_oportunidades, cs_riesgos, cs_riesgo_mensual, cs_tareas_impl, cs_incidencias_cuenta), sprint_time_entries, los snapshots de Producto (errores_snapshot, tareas_asana_snapshot), los de HighLevel (highlevel_clientes_snapshot, ventas ganadas, y highlevel_cs_snapshot, pipelines de Customer Success) y los de soporte (soporte_incidencias_dev_snapshot, soporte_integraciones_tpv_snapshot). La fuente de verdad es database/schema.sql + las migraciones en database/migrations/.

Nota semántica: en fichas_alta el estado completada significa "rellenada por el cliente" y rellenado significa "completada por el consultor". Triggers SQL actualizan automáticamente fecha_rellenado, fecha_completado y grabado_a3_at al cambiar el campo correspondiente.

Cómo se usa cada acción clave

AcciónQuiénDóndeQué pasa
Solicitar fichaConsultorlista.html · botón "Solicitar ficha"Crea solicitud + envía email al cliente con URL ?t=<token>.
Rellenar solicitudClientesolicitud.html (link del email)Datos empresa + JP + firmante + TPV (integrado/no) + IBAN + firma SEPA.
Completar fichaConsultorPestaña "Rellenado cliente" → botónAbre ficha-cliente.html con los datos prellenados; al guardar pasa a estado rellenado.
Editar fichaConsultor / YurestPestaña "Fichas" · botón EditarUPDATE solo de campos enviados — no destructivo.
Eliminar ficha/solicitudConsultor / YurestPestañas correspondientes · botón EliminarSoft-delete con confirmación + toast de diagnóstico.
Grabar en A3Contabilidadcontabilidad.html · toggle por filaUPDATE flag grabado_a3; trigger setea grabado_a3_at.
Ver mandato SEPAContabilidadcontabilidad.html · botón "📄 Ver mandato"Modal con datos legales completos + firma + descarga PDF (popup, una sola hoja A4).
Ver el trabajo de un escalado aparteImplementaciónproyectos.html · tab Proyecto · selector «Implementación / Escalado N»Filtra las secciones por escalado_id. Sin sello = implementación inicial. El progreso y los KPIs no cambian: las secciones de escalado siguen contando en el total.
Atender las alertas del homeCualquieraindex.html · panel de alertasSe calculan en el front sobre las fichas ya cargadas y llevan a lista.html con el filtro puesto. Incluye «fichas nuevas pendientes de introducir en Yurest» (estado rellenado, sin introducido_yurest, creadas desde el 22-jun-2026).
Ver las alertas desde cualquier páginaCualquieraAsistente Yu (todas las páginas con login)La mascota «yu» con ojos de abajo a la derecha lleva el número de alertas y, al pulsarla, las lista con su enlace. Usa el mismo cálculo que el panel del home (js/lib/alertas-calculo.js): pinta la última foto guardada en el navegador y la recalcula en segundo plano si tiene más de 10 minutos.
Exportar la lista de proyectosImplementaciónproyectos.html · botón ExportarVuelca a CSV o Excel lo que la tabla tiene filtrado en ese momento; no pasa por el backend.
Añadir add-ons a manoConsultorficha-cliente.html · bloque financieroPara fichas que no nacen de una oferta, donde no hay carrito del que arrastrarlos.
Asignar promoción a un grupalImplementaciónproyectos.html · carpeta «Sin promoción» (o la alerta del home)WF69 guarda la promoción y WF-113 convoca las sesiones y manda la bienvenida. Se ve el turno que prefirió el cliente.
Confirmar documentos subidosClienteBotón del correo de la carpeta → documentos-subidos.htmlWF-116 crea la tarea de carga de datos y la ficha pasa a carga_datos. Un segundo clic solo avisa de que ya estaba confirmado.
Reservar la bienvenida grupalClientesolicitud.html → bienvenida.htmlElige hueco en el calendario de la CSM de grupales (WF-124). La reserva cuelga de la solicitud y pasa sola al proyecto cuando nace.
Marcar No Show y avisar al clienteImplementaciónproyectos.html (sesión) o participacion.htmlMotivo obligatorio. «Guardar» solo registra; «Guardar y enviar» enseña la vista previa (WF-130) y WF96 manda el correo que toque en la escalera. Si la sesión tenía reunión propia, «Quitar la reunión de Google Calendar» (marcada por defecto) la borra sin avisar a los invitados (WF07 con avisar:false).
Marcar «Datos cargados»Implementaciónproyectos.html · Individuales o GrupalesWF-127 crea la tarea de carga de datos, como si el cliente hubiera pulsado el botón del correo.
Cambiar de fase a un clienteCustomer Successclientes.html · arrastrar la fila o selector «Fase»Guarda la fase nueva y queda en el historial. Entrar en Post 1 mes, Post 1 QBR o Post 2 QBR crea la reunión de esa fase con su plazo.
Rellenar el formulario de la reuniónCSMclientes.html · ficha › FormulariosAl completarlo, NPS/CSAT/CES pasan a encuesta, «en riesgo: Sí» marca el riesgo y se genera el resumen para el cliente.
Marcar en riesgoCSMclientes.html · bandera junto al nombreEl cliente sigue en su fase, con la fila en rojo y en la pestaña «En riesgo». Se ve también en Fichas y en Proyectos.
Ver, reenviar un correo o la convocatoriaImplementación / CSPestaña Comunicaciones (proyecto o Cascada CS)«Ver correo»: WF-134 (modo ver) enseña el original tal cual salió, en un iframe aislado. «Reenviar»: WF-134 reenvía el original a los contactos elegidos. «Reenviar convocatoria»: en grupal, WF-113 añade a esos contactos a las sesiones futuras y les manda la bienvenida; en individual abre «Convocar sesiones» con ellos marcados. Una sola sesión individual: «Reenviar convocatoria de esta sesión» en el modal de la sesión (correo con su fecha, hora y Meet + invitación en Calendar; queda en Comunicaciones).
Recuperar una sesión perdidaImplementaciónproyectos.html · No Show (individual)Tres opciones: réplica para reagendar aparte; «se verá en otra sesión» ya agendada (cierra la perdida, sin correo); o «desplazar el calendario pendiente», que corre las siguientes sesiones un hueco y manda un solo correo «Nuevo calendario de sesiones».
Marcar «No aplica» una sesión de promociónImplementaciónproyectos.html · sesiones de la promociónLa sesión queda bloqueada para ese cliente y WF-113 deja de convocarle (le quita del evento si ya estaba). Se puede deshacer.
Agendar la bienvenida individualImplementadorproyectos.html · Sesiones de arranqueLlama al cliente y agenda la tarea «Sesión de Bienvenida» (WF07). El home avisa mientras no tenga fecha y hora. La Cascada CS la ve en solo lectura.
Agendar, cancelar, reagendar o eliminar una reunión CSCSMclientes.html · ficha › CustomerWF-133 crea o cancela el evento con Meet en su Google Calendar y manda los correos desde su Gmail. Cancelar deja la reunión «Por reagendar». «Eliminar reunión» la quita sin correo al cliente (no la realizada ni la bienvenida individual); si tenía evento futuro, WF-133 lo cancela.
Dar la bienvenida grupal fuera de los huecosCSMclientes.html · ficha › Customer › Bienvenida · «Sesión aparte»Elige día y hora (L-V 08:00-20:00, al menos 1 h de antelación). WF01 da un permiso de un solo uso y WF-124 crea un evento solo para ese cliente, con confirmación y recordatorio como cualquier reserva; si tenía otra sesión, sale de ella.
Cerrar la fase de un móduloImplementadorproyectos.html · pestaña Proyecto · «Cerrar fase» en la sección del módulo (individuales)Sesiones del módulo, asistentes, criterios, incidencias, recomendación y decisión de avance; se guarda en el proyecto y se descarga en PDF para enviarlo a mano. La sección muestra «Fase cerrada» y Customer Success lo ve en Formularios.
Corregir una proforma de hardwareSoporte / Implementaciónhardware.html · Proformas generadas, o pestaña Hardware del proyecto · «Editar artículos»Solo sin justificante. Cambia artículos, precios, envío o IVA y regenera el PDF con el mismo número (WF21); si ya estaba enviada, ofrece reenviarla.
Aplicar un escalado de localVentas / CSescalados.html · AplicarLo hace Soporte. Da de alta el local en la ficha con su SEPA y su contacto, contrata los módulos y crea su sección en el proyecto; con TPV integrado abre su ticket de integración. El entorno Yurest del cliente se prepara a mano.
Solicitar un escalado de local al clienteVentas / CSescalados.html o asistente de la ficha · «Solicitar al cliente»El staff fija módulos e importes y el cliente recibe un enlace a escalado-local.html. Al enviarlo, Soporte, implementador, CSM y comercial reciben correo y el escalado queda pendiente de aplicar.
Registrar incidenciaCSM / Implementaciónclientes.html › Soporte técnico · proyectos.html › Tickets soporteWF67 abre el ticket en Zendesk (miembro de la organización, módulo, capturas) y la tarea en Asana.
Pedir una tarea a ImplementaciónCSMclientes.html · Customer o cabecera de la CascadaLe sale al implementador como alerta en el home, donde la marca «Hecha».
Añadir contactos del clienteImplementación / CSPestaña Contactos (proyecto) o Información (Cascada CS)Una sola lista por ficha (cs_contactos_cliente). Se edita en Proyectos; desde la Cascada se añaden y se quitan. Quién recibe las invitaciones grupales se marca contacto a contacto en el selector de promoción.
Escalado con pago anualVentas / CSescalados.html o asistente de la fichaSelector Pago mensual / Pago anual: se propone anual cuando el mandato SEPA es de pago único. En Grabar en A3 sale con la píldora «Anual».
TPV no integradoClientesolicitud.html · checkbox cabecera TPVAl enviar: tarea automática en Asana (proyecto Integraciones) + email a soporte/Yurest/Roocket.

Estados de ficha y solicitud

stateDiagram-v2 [*] --> OfertaEnviada: Consultor genera oferta OfertaEnviada --> OfertaGanada: Cliente acepta / paga OfertaGanada --> FichaCompletada: Arranca la ficha [*] --> SolicitudPendiente: Consultor crea solicitud SolicitudPendiente --> SolicitudCompletada: Cliente rellena SolicitudCompletada --> FichaCompletada: INSERT fichas_alta
estado=completada FichaCompletada --> FichaRellenada: Consultor guarda
estado=rellenado FichaRellenada --> Implementacion: Se crea proyecto en Asana FichaRellenada --> GrabadoA3: Contabilidad activa toggle GrabadoA3 --> [*]

"Completada" = rellenada por cliente · "Rellenado" = cerrada por consultor. La nomenclatura es legacy pero los triggers SQL ya alinean fechas con esta semántica.