LPDI

Inventario de Correos Electrónicos

Ecosistema LPDI — Versión 10 — 2026-07-02

53 correos activos + 3 eliminados · Organizados por: USUARIO → STARTUP → ICG → ENTIDADES → CRON → PERKS → EVENTOS

Taxonomía de nombres técnicos:
CATEGORÍA / DESTINATARIO / EXISTENCIA / PRIVILEGIO / TIPO MENSAJE / TYC / FUENTE
Categoría: USUARIO | STARTUP | ICG  •  Destinatario: CEO | CON | TEAM | USER  •  Existencia: NUEVO | EXIST
Privilegio: SI-ED | NO-ED  •  TyC: SI-TYC | NO-TYC  •  Fuente: SUPA | LPDI

Índice completo (53 correos activos + 3 eliminados)

USUARIO (11) STARTUP (13) ICG (3) ENTIDADES (3) CRON (1) PERKS (12) EVENTOS (10) ELIMINADOS (3)
#Nombre TécnicoAsunto del correoDestino CTADescripciónTyCImg
USUARIO — Correos de cuenta y autenticación (11)
01USUARIO/USER/NUEVO/NO-ED/Confirmación de Correo/NO-TYC/SUPA“Confirma tu cuenta en el Ecosistema LPDI”{{ .ConfirmationURL }} → eco.lpdi.coConfirmación de email al crear cuenta nueva.NO
02USUARIO/USER/EXIST/NO-ED/Recuperación de Contraseña/NO-TYC/SUPA“Restablece tu contraseña — Ecosistema LPDI”eco.lpdi.co/auth/recuperarReset de contraseña con enlace seguro.NO
03USUARIO/USER/NUEVO/NO-ED/Magic Link/NO-TYC/SUPA“Tu enlace de acceso — Ecosistema LPDI”{{ .ConfirmationURL }} → eco.lpdi.coEnlace mágico de acceso. Reservado para uso admin.NO
04USUARIO/USER/EXIST/NO-ED/Cambio de Correo/NO-TYC/SUPA“Confirma el cambio de correo — Ecosistema LPDI”{{ .ConfirmationURL }} → eco.lpdi.coVerificación del nuevo correo al cambiar email.NO
05USUARIO/USER/NUEVO/NO-ED/Invitación Admin/NO-TYC/SUPA“Has sido invitado al Ecosistema LPDI”{{ .ConfirmationURL }} → eco.lpdi.coInvitación directa desde Supabase Dashboard.NO
06USUARIO/USER/EXIST/NO-ED/Reautenticación OTP/NO-TYC/SUPA“Código de verificación — Ecosistema LPDI”Código OTP (sin botón)Código de verificación para acciones sensibles.NO
07USUARIO/USER/EXIST/NO-ED/Notificación Correo Cambiado/NO-TYC/SUPA“Tu correo electrónico ha sido actualizado — Ecosistema LPDI”Sin CTAAvisa al usuario que su correo fue actualizado.NO
08USUARIO/USER/EXIST/NO-ED/Notificación Contraseña Cambiada/NO-TYC/SUPA“Tu contraseña ha sido cambiada — Ecosistema LPDI”Sin CTAAvisa al usuario que su contraseña fue actualizada.NO
09USUARIO/USER/EXIST/NO-ED/Eliminación de Cuenta/NO-TYC/LPDI“Tu cuenta en el Ecosistema LPDI ha sido eliminada”eco.lpdi.coConfirmación de eliminación voluntaria de cuenta.NO
10USUARIO/USER/EXIST/NO-ED/Contraseña Actualizada/NO-TYC/LPDI“Tu contraseña ha sido actualizada — Ecosistema LPDI”eco.lpdi.co/auth/recuperarNotificación del sistema LPDI cuando el usuario cambia su contraseña.NO
53NUEVOUSUARIO/USER/AMBOS/NO-ED/Actualización T&C y Política/NO-TYC/LPDI“Actualizamos nuestras condiciones y políticas — Ecosistema LPDI”Enlaces a T&C + PolíticaAviso de publicación de versión nueva de los documentos legales (Grupo A, tácita).NO
STARTUP — Registro, equipo y ciclo de vida de Startups/PyMEs (13)
11STARTUP/CEO/NUEVO/SI-ED/Bienvenida Registro/SI-TYC/LPDI“Bienvenido al Ecosistema LPDI — Confirma tu cuenta”${confirmUrl}Bienvenida al registrante de una startup.SI
12STARTUP/CEO/NUEVO/SI-ED/Bienvenida CEO Designado/SI-TYC/LPDI“Bienvenido al Ecosistema LPDI — {empresa}”eco.lpdi.co/dashboardCEO designado sin cuenta LPDI. Incluye credenciales.SI
13STARTUP/CEO/EXIST/SI-ED/Bienvenida CEO Designado/NO-TYC/LPDI“Has sido designado CEO de {empresa} en el Ecosistema LPDI”eco.lpdi.co/dashboardCEO designado ya tiene cuenta LPDI.NO
14MODIFICADOSTARTUP/CEO/EXIST/SI-ED/Seguimiento de Score/NO-TYC/LPDI“Aumenta el score de tu perfil en el Ecosistema LPDI”${profileUrl}Recordatorio para completar perfil y subir score.NO
15STARTUP/CEO/NUEVO/SI-ED/Recordatorio día 3/NO-TYC/LPDI“Recordatorio: confirma tu cuenta en el Ecosistema LPDI”${confirmUrl}Recordatorio amigable día 3 si no confirmó correo.NO
16STARTUP/CEO/NUEVO/SI-ED/Recordatorio Urgente día 6/NO-TYC/LPDI“Último aviso: confirma tu cuenta en el Ecosistema LPDI”${confirmUrl}Aviso urgente día 6. Cuenta expira día 8.NO
18STARTUP/TEAM/NUEVO/NO-ED/Invitación al Equipo/SI-TYC/LPDI“{CEO} te ha incluido en el equipo de {empresa} — confirma tu registro”${confirmUrl}Invitación a persona sin cuenta LPDI.SI
20STARTUP/TEAM/EXIST/SI-ED/Bienvenida con Edición/NO-TYC/LPDI“Bienvenido al equipo de {empresa} en el Ecosistema LPDI”${resetUrl}Miembro aceptado CON permiso de edición.NO
21STARTUP/TEAM/EXIST/NO-ED/Bienvenida sin Edición/NO-TYC/LPDI“Bienvenido al equipo de {empresa} en el Ecosistema LPDI”${resetUrl}Miembro aceptado SIN permiso de edición.NO
22STARTUP/TEAM/EXIST/NO-ED/Confirmación de Rechazo/NO-TYC/LPDI“Confirmación: no haces parte del equipo de {empresa}”${confirmAgainUrl}Confirma rechazo exitoso de invitación.NO
23STARTUP/CEO/EXIST/SI-ED/Notificación Miembro Aceptó/NO-TYC/LPDI“{miembro} aceptó la invitación al equipo de {empresa}”eco.lpdi.co/dashboardAvisa al equipo que un miembro aceptó.NO
24STARTUP/CEO/EXIST/SI-ED/Notificación Miembro Rechazó/NO-TYC/LPDI“{miembro} rechazó la invitación al equipo de {empresa}”eco.lpdi.co/dashboardAvisa al equipo que un miembro rechazó.NO
25STARTUP/TEAM/EXIST/SI-ED/Cambio de Permisos/NO-TYC/LPDI“Cambio de permisos en {empresa}”eco.lpdi.co/dashboardNotifica al miembro cuando el CEO modifica sus permisos.NO
ICG — Registro y ciclo de vida de ICGs (3)
28ICG/CON/NUEVO/NO-ED/Bienvenida Contacto/SI-TYC/LPDI“{ICG} te ha asignado como contacto en el Ecosistema LPDI”eco.lpdi.co/dashboardContacto designado sin cuenta LPDI. Incluye contraseña temporal.SI
29ICG/CON/EXIST/NO-ED/Bienvenida Contacto/NO-TYC/LPDI“{ICG} te ha asignado como contacto en el Ecosistema LPDI”eco.lpdi.co/dashboardContacto que ya tiene cuenta LPDI.NO
55NUEVOICG/USER/EXIST/NO-ED/Seguimiento de Score/NO-TYC/LPDI“Aumenta el score de tu perfil en el Ecosistema LPDI”/dashboard/icg/{id}Versión ICG del Seguimiento de Score, con barra del semáforo.NO
ENTIDADES — Correos comunes a Startup e ICG (3)
26ENTIDAD/USER/EXIST/NO-ED/Eliminación de Entidad/NO-TYC/LPDI“El registro de {entidad} ha sido eliminado del Ecosistema LPDI”${dashboardUrl}Notifica a todos los asociados que la entidad fue eliminada.NO
27ENTIDAD/USER/EXIST/NO-ED/Restauración de Entidad/NO-TYC/LPDI“{entidad} ha sido restaurado en el Ecosistema LPDI”${dashboardUrl}Notifica restauración desde la papelera. Aplica también a ICG.NO
56NUEVOENTIDAD/USER/NUEVO/NO-ED/Creación de Entidad/NO-TYC/LPDI“Registraste tu {Startup/ICG} en el Ecosistema LPDI”deep-link a la entidadConfirma la creación de la entidad + score inicial con barra del semáforo.NO
31CRON/ADMIN/EXIST/NO-ED/Reporte Diario/NO-TYC/LPDI“Reporte diario Ecosistema LPDI — {fecha}”CSV adjuntoCron 6:00 AM Lima — altas/bajas + CSV de usuarios.NO
BENEFICIOS (PERKS) · notification-emails.ts (12)
32FP/ALIADO/Registro Exitoso/NO-TYC/LPDI“¡Registro exitoso de beneficio!”/dashboard/beneficiosAl aliado: su beneficio quedó en revisión (al pasar a «enviado»). Funcionando.NO
33FP/EQUIPO/Nuevo por Aprobar/NO-TYC/LPDI“Nuevo beneficio por aprobar”/dashboard/beneficios/adminAl admin asignado: beneficio nuevo por revisar. Funcionando.NO
34FP/ALIADO/Aprobado/NO-TYC/LPDI“¡Beneficio aprobado!”/perks/{id}Al aliado: beneficio aprobado y publicado. Funcionando (admin).NO
35FP/ALIADO/Aprobado Programado/NO-TYC/LPDI“¡Beneficio aprobado!”/dashboard/beneficiosAl aliado: aprobado con fecha de publicación futura (F2); el cron publish-scheduled lo activa. Funcionando.NO
36FP/ALIADO/Actualizado/NO-TYC/LPDI“¡Beneficio actualizado!”/perks/{id}Al aliado: cambios guardados (al editar un publicado → «edición»). Funcionando.NO
37FP/EQUIPO/Cambios por Aprobar/NO-TYC/LPDI“Cambios de beneficio por aprobar”/dashboard/beneficios/adminAl equipo: un beneficio publicado tiene cambios por revisar (de «edición» → «enviado»). Funcionando.NO
38FP/ALIADO/Solicitud de Ajustes/NO-TYC/LPDI“Tu beneficio necesita unos ajustes”/dashboard/beneficiosAl aliado: el admin pide ajustes (status «cambios», recuperable: ajusta y reenvía). Incluye el detalle. Funcionando.NO
39FP/ALIADO/No Aceptado/NO-TYC/LPDI“Beneficio no aceptado”/dashboard/beneficiosAl aliado: rechazo definitivo. Template disponible; sin acción que lo dispare hoy (solicitar cambios usa el #38).NO
40FP/ALIADO/Terminado/NO-TYC/LPDI“Beneficio terminado”/dashboard/beneficiosAl aliado: beneficio cerrado (manual o por vigencia). Funcionando (admin desactivar).NO
41FP/ALIADO/Eliminado/NO-TYC/LPDI“Beneficio eliminado”/dashboard/beneficiosAl aliado: beneficio eliminado (enviado a papelera). Funcionando.NO
42FP/ALIADO/Registro en Beneficio/NO-TYC/LPDI“¡Nuevo registro en tu beneficio!”/dashboard/beneficios/referidosAl aliado (cc partners@lpdi.co): un usuario se registró en su beneficio, con sus datos y el tipo de registro. Funcionando.NO
54NUEVOFP/USUARIO/Solicitud recibida/NO-TYC/LPDI“Recibimos tu solicitud — Ecosistema LPDI”eco.lpdi.coAl usuario (cc partners@lpdi.co): confirma que su solicitud de beneficio fue enviada al aliado + tipología. Funcionando.NO
EVENTOS · notification-emails.ts (10)
43FE/ORGANIZADOR/Registro Exitoso/NO-TYC/LPDI“¡Registro exitoso de evento!”/dashboardAl organizador: evento registrado y en revisión (incluye código). Funcionando.NO
44FE/EQUIPO/Nuevo por Aprobar/NO-TYC/LPDI“Nuevo evento por aprobar”/dashboardAl admin asignado: evento nuevo por revisar. Funcionando.NO
45FE/ORGANIZADOR/Aprobado/NO-TYC/LPDI“¡Evento aprobado!”/dashboardAl organizador: evento aprobado. Funcionando.NO
46FE/ORGANIZADOR/Aprobado Programado/NO-TYC/LPDI“¡Evento aprobado!”/dashboardAl organizador: aprobado con fecha de publicación futura (F2). Funcionando.NO
47FE/ORGANIZADOR/Actualizado/NO-TYC/LPDI“¡Evento actualizado!”/dashboardAl organizador: su evento publicado fue actualizado. Funcionando.NO
48FE/EQUIPO/Cambios por Aprobar/NO-TYC/LPDI“Cambios de evento por aprobar”/dashboardAl equipo: un usuario sin auto-aprobación envió cambios que deben revisarse. Pendiente — se activa con «Mis eventos».NO
49FE/ORGANIZADOR/No Aceptado/NO-TYC/LPDI“Evento no aceptado”/dashboardAl organizador: evento no aceptado. Funcionando.NO
50FE/ORGANIZADOR/Eliminado/NO-TYC/LPDI“Evento eliminado”/dashboardAl organizador: evento eliminado. Funcionando.NO
51FE/ORGANIZADOR/Publicación Automática/NO-TYC/LPDI“¡Publicación automática de evento!”/dashboardAl organizador (cc admin): evento publicado automáticamente por privilegio de auto-publicación (F6). Funcionando.NO
52FE/ORGANIZADOR/Solicitud de Ajustes/NO-TYC/LPDI“Tu evento necesita unos ajustes”/dashboardAl organizador (cc al admin que la envía): el admin pide ajustes a un evento, con el detalle. Espejo del #38 de FP. Funcionando.NO
CORREOS ELIMINADOS — consolidados o retirados del sistema (3)
17ELIMINADOExpiración de Registro (Startup) — No se obliga a confirmar la creación de una startup.
19ELIMINADOInvitación al Equipo (usuario existente) — Consolidado en #18 — mismo template (buildTeamInvitationHtml), las dos ramas (usuario nuevo / usuario existente) las maneja el flag userExists.
30ELIMINADOExpiración de Registro ICG — No se obliga a confirmar la creación de un ICG.

USUARIO — Correos de cuenta y autenticación (11)

01Confirmación de Correo↑ índice
Nombre técnicoUSUARIO/USER/NUEVO/NO-ED/Confirmación de Correo/NO-TYC/SUPA
Función en códigoSupabase Auth — Confirm signup template
Asunto“Confirma tu cuenta en el Ecosistema LPDI”
TriggerSupabase Auth dispara tras signup o signInWithOtp
DestinatarioEmail del usuario nuevo
CTABotón: “Confirmar mi cuenta”
Destino: {{ .ConfirmationURL }} → redirige a https://eco.lpdi.co/ (SITE_URL con token de confirmación)
DescripciónCorreo automático de Supabase para verificar que el email es válido al crear una cuenta nueva. El diseño usa el template personalizado configurado en el dashboard de Supabase con branding LPDI.
TyC / TratamientoNO — Los TyC se aceptan en el formulario de la aplicación ANTES de que Supabase envíe este correo.

PREVIEW DEL CORREO

Preview
02Recuperación de Contraseña↑ índice
Nombre técnicoUSUARIO/USER/EXIST/NO-ED/Recuperación de Contraseña/NO-TYC/SUPA
Función en códigoSupabase Auth — Reset password template
Asunto“Restablece tu contraseña — Ecosistema LPDI”
TriggerUsuario solicita reset de contraseña vía /auth/reset
DestinatarioEmail del usuario
CTABotón: “Restablecer mi contraseña”
Destino: https://eco.lpdi.co/auth/recuperar?token_hash=...&type=recovery
DescripciónPermite al usuario restablecer su contraseña mediante un enlace seguro con expiración (por defecto 24h). Template personalizado con branding LPDI.
TyC / TratamientoNO — Acción de seguridad/recuperación. No requiere aceptación.

PREVIEW DEL CORREO

Preview
03Magic Link de Acceso↑ índice
Nombre técnicoUSUARIO/USER/NUEVO/NO-ED/Magic Link/NO-TYC/SUPA
Función en códigoSupabase Auth — Magic link template
Asunto“Tu enlace de acceso — Ecosistema LPDI”
TriggerAdmin invita usuario vía supabase.auth.admin.inviteUserByEmail()
DestinatarioEmail del usuario invitado
CTABotón: “Iniciar sesión”
Destino: {{ .ConfirmationURL }} → redirige a https://eco.lpdi.co/ (SITE_URL)
DescripciónEnlace mágico para acceso directo sin contraseña. Actualmente NO se usa en el flujo principal (las invitaciones van por correos #14/#15). Reservado para invitaciones administrativas manuales.
TyC / TratamientoNO — TyC deberían validarse en la aplicación al llegar.

PREVIEW DEL CORREO

Preview
04Cambio de Correo Electrónico↑ índice
Nombre técnicoUSUARIO/USER/EXIST/NO-ED/Cambio de Correo/NO-TYC/SUPA
Función en códigoSupabase Auth — Change email template
Asunto“Confirma el cambio de correo — Ecosistema LPDI”
TriggerUsuario cambia su email desde configuración de cuenta
DestinatarioEmail nuevo del usuario
CTABotón: “Confirmar cambio de correo”
Destino: {{ .ConfirmationURL }} → redirige a https://eco.lpdi.co/ (SITE_URL)
DescripciónVerificación del nuevo correo cuando el usuario actualiza su dirección de email. El email anterior sigue activo hasta que se confirme el nuevo.
TyC / TratamientoNO — Verificación de identidad. No requiere nueva aceptación.

PREVIEW DEL CORREO

Preview
05Invitación Administrativa↑ índice
Nombre técnicoUSUARIO/USER/NUEVO/NO-ED/Invitación Admin/NO-TYC/SUPA
Función en códigoSupabase Auth — Invite template
Asunto“Has sido invitado al Ecosistema LPDI”
TriggerAdmin invita usuario desde Supabase Dashboard vía inviteUserByEmail()
DestinatarioEmail del usuario invitado por admin
CTABotón: “Aceptar invitación”
Destino: {{ .ConfirmationURL }} → redirige a https://eco.lpdi.co/ (SITE_URL)
DescripciónTemplate de invitación directa. Actualmente NO se usa en el flujo normal del sistema (las invitaciones de equipo van por correos #14/#15 del sistema LPDI). Disponible para invitaciones manuales desde el dashboard de Supabase.
TyC / TratamientoNO — TyC se validan en la aplicación al llegar.

PREVIEW DEL CORREO

Preview
06Reautenticación (Código OTP)↑ índice
Nombre técnicoUSUARIO/USER/EXIST/NO-ED/Reautenticación OTP/NO-TYC/SUPA
Función en códigoSupabase Auth — Reauthentication template
Asunto“Código de verificación — Ecosistema LPDI”
TriggerUsuario intenta una acción que requiere reautenticación (ej: cambio de contraseña, eliminación de cuenta)
DestinatarioEmail del usuario
CTASin botón CTA — muestra código OTP {{ .Token }} en el cuerpo del correo
DescripciónEnvía un código numérico de verificación para acciones sensibles. El usuario debe ingresar el código en la aplicación para continuar.
TyC / TratamientoNO — Es verificación de identidad para seguridad.

PREVIEW DEL CORREO

Preview
07Notificación: Correo Cambiado↑ índice
Nombre técnicoUSUARIO/USER/EXIST/NO-ED/Notificación Correo Cambiado/NO-TYC/SUPA
Función en códigoSupabase Auth — Email changed notification
Asunto“Tu correo electrónico ha sido actualizado — Ecosistema LPDI”
TriggerSupabase detecta que el email del usuario fue cambiado exitosamente
DestinatarioEmail anterior del usuario (el que se reemplazó)
CTASin CTA — correo informativo (notificación de seguridad)
DescripciónNotificación automática de seguridad enviada al email ANTERIOR cuando el usuario cambia su dirección. Permite al usuario detectar cambios no autorizados.
TyC / TratamientoNO — Correo informativo de seguridad.

PREVIEW DEL CORREO

Preview
08Notificación: Contraseña Cambiada (Supabase)↑ índice
Nombre técnicoUSUARIO/USER/EXIST/NO-ED/Notificación Contraseña Cambiada/NO-TYC/SUPA
Función en códigoSupabase Auth — Password changed notification
Asunto“Tu contraseña ha sido cambiada — Ecosistema LPDI”
TriggerSupabase detecta que la contraseña del usuario fue cambiada
DestinatarioEmail del usuario
CTASin CTA — correo informativo (notificación de seguridad)
DescripciónNotificación automática de seguridad enviada por Supabase cuando se detecta un cambio de contraseña. Diferente al correo #10 que es enviado por el sistema LPDI.
TyC / TratamientoNO — Correo informativo de seguridad.

PREVIEW DEL CORREO

Preview
09Eliminación de Cuenta↑ índice
Nombre técnicoUSUARIO/USER/EXIST/NO-ED/Eliminación de Cuenta/NO-TYC/LPDI
Función en códigosendAccountDeletedEmail
Asunto“Tu cuenta en el Ecosistema LPDI ha sido eliminada”
TriggerUsuario elimina su cuenta desde /api/account/delete
DestinatarioEmail del usuario que eliminó su cuenta
CTABotón: “Registrarme de nuevo”
Destino: https://eco.lpdi.co (hardcoded)
DescripciónConfirmación de que la cuenta fue eliminada voluntariamente. Los datos se marcan para eliminación. Si desea volver, debe registrarse de nuevo.
TyC / TratamientoNO — Correo informativo. Si se re-registra, se pedirán TyC nuevamente.

PREVIEW DEL CORREO

Preview
10Contraseña Actualizada (Sistema LPDI)↑ índice
Nombre técnicoUSUARIO/USER/EXIST/NO-ED/Contraseña Actualizada/NO-TYC/LPDI
Función en códigosendPasswordChangedEmail
Asunto“Tu contraseña ha sido actualizada — Ecosistema LPDI”
TriggerUsuario cambia su contraseña exitosamente desde el sistema LPDI
DestinatarioEmail del usuario
CTABotón: “Restablecer contraseña” (emergencia)
Destino: https://eco.lpdi.co/auth/recuperar (hardcoded)
DescripciónNotificación enviada por el sistema LPDI (no Supabase) que confirma al usuario que su contraseña fue actualizada. Complementa al correo #08 de Supabase.
TyC / TratamientoNO — Correo informativo de seguridad.

PREVIEW DEL CORREO

Preview
53NUEVOActualización de Términos y Políticas↑ índice
Nombre técnicoUSUARIO/USER/AMBOS/NO-ED/Actualización T&C y Política/NO-TYC/LPDI
Función en códigosendAccountUpdateNotificationEmail
Asunto“Actualizamos nuestras condiciones y políticas — Ecosistema LPDI”
TriggerPublicación de una versión nueva de T&C / Política de Datos (cutover del lifecycle)
DestinatarioUsuarios con aceptación válida previa (Grupo A) — aceptación tácita por uso continuado
CTAEnlaces a los documentos actualizados (T&C + Política). Sin botón de acción.
DescripciónInforma la publicación de una versión nueva de los documentos legales. Reutilizable: parámetros changes / termsUrl / privacyUrl para futuras actualizaciones. El Grupo B (nunca aceptó válidamente, <25-may) NO recibe tácita: va por casilla expresa al próximo login.
TyC / TratamientoSÍ (informativo) — Aceptación TÁCITA por uso continuado; no incluye casilla. Aprobado por Frank 2026-07-02.

PREVIEW DEL CORREO

Preview

STARTUP — Registro, equipo y ciclo de vida (13)

11Bienvenida Registro de Startup↑ índice
Nombre técnicoSTARTUP/CEO/NUEVO/SI-ED/Bienvenida Registro/SI-TYC/LPDI
Función en códigosendStartupWelcomeEmail
Asunto“Bienvenido al Ecosistema LPDI — Confirma tu cuenta”
TriggerRegistro de startup en /registro-startup (formulario completado)
DestinatarioEmail del CEO que registra la startup
CTABotón: “Confirmar mi cuenta y ver mi registro”
Destino: ${confirmUrl} → URL de confirmación Supabase (redirige a SITE_URL)
DescripciónCorreo de bienvenida al registrante de una startup. La startup queda en estado “pendiente” hasta que el CEO confirme. Si no confirma en 7 días, se activan los correos #15, #16 y eventualmente #17.
TyC / TratamientoSÍ — El formulario de registro (/registro-startup) tiene checkbox obligatorio de TyC y Política de Tratamiento de Datos ANTES de enviar. El consent se graba en consent_log con flow=“FS”.

PREVIEW DEL CORREO

Preview
12Bienvenida CEO Designado (usuario nuevo)↑ índice
Nombre técnicoSTARTUP/CEO/NUEVO/SI-ED/Bienvenida CEO Designado/SI-TYC/LPDI
Función en códigosendCeoWelcomeEmail (userExists=false)
Asunto“Bienvenido al Ecosistema LPDI — {empresa}”
TriggerRegistro de startup → el email del CEO NO existe como usuario en Supabase Auth
DestinatarioEmail del CEO designado durante registro de startup
CTABotón: “Ver mi registro” (existente) / “Confirmar mi cuenta” (nuevo)
Destino: Existente: https://eco.lpdi.co/dashboard | Nuevo: ${resetUrl} (reset Supabase)
DescripciónSe envía cuando el registrante de la startup designa un CEO cuyo email no tiene cuenta en LPDI. Incluye contraseña temporal visible. Solo ocurre cuando el CEO es persona distinta al registrante.
TyC / TratamientoSÍ — El flujo destino (/auth/reset-password) detecta 0 registros en consent_log y muestra checkboxes obligatorios de TyC y Tratamiento de Datos. Implementado en LAP-325.

PREVIEW DEL CORREO

Preview
13Bienvenida CEO Designado (usuario existente)↑ índice
Nombre técnicoSTARTUP/CEO/EXIST/SI-ED/Bienvenida CEO Designado/NO-TYC/LPDI
Función en códigosendCeoWelcomeEmail (userExists=true)
Asunto“Has sido designado CEO de {empresa} en el Ecosistema LPDI”
TriggerRegistro de startup → el email del CEO YA existe como usuario
DestinatarioEmail del CEO
CTABotón: “Ver mi registro” (existente) / “Establecer nueva contraseña” (nuevo)
Destino: Existente: https://eco.lpdi.co/dashboard | Nuevo: ${resetUrl} (reset Supabase)
DescripciónSe envía cuando el CEO designado ya tiene cuenta LPDI. No se muestra contraseña. Botón directo al dashboard.
TyC / TratamientoNO — El CEO ya tiene cuenta y aceptó TyC previamente.

PREVIEW DEL CORREO

Preview
14MODIFICADOSeguimiento de Score↑ índice
Nombre técnicoSTARTUP/CEO/EXIST/SI-ED/Seguimiento de Score/NO-TYC/LPDI
Función en códigosendStartupFollowupEmail
Asunto“Aumenta el score de tu perfil en el Ecosistema LPDI”
TriggerCron automático /api/cron/startup-followup (~2 días después del registro, si score < 100)
DestinatarioTodos los usuarios con privilegio de edición de la startup (CEO + founders con can_edit=true)
CTABotón: “Aumentar mi score”
Destino: ${profileUrl} → perfil de la startup en dashboard
DescripciónRecordatorio automático para que el CEO complete el perfil de su startup y suba su score de visibilidad. Solo se envía si la startup está confirmada y su score es menor a 100.
TyC / TratamientoNO — El usuario ya aceptó TyC durante el registro.

PREVIEW DEL CORREO

Preview
15Recordatorio de Confirmación (día 3)↑ índice
Nombre técnicoSTARTUP/CEO/NUEVO/SI-ED/Recordatorio día 3/NO-TYC/LPDI
Función en códigosendStartupReminderEmail (isUrgent=false)
Asunto“Recordatorio: confirma tu cuenta en el Ecosistema LPDI”
TriggerCron /api/cron/startup-welcome-reminders — día 3 sin confirmar email
DestinatarioTodos los miembros de la startup que no han confirmado su cuenta (email_confirmed_at IS NULL). Nota: en código se consulta startup_founders, que incluye CEO y equipo. Usar “miembros” para distinguir de futuros “founders” formales.
CTABotón: “Confirmar mi cuenta”
Destino: ${confirmUrl} → URL de confirmación Supabase
DescripciónPrimer recordatorio amigable si los miembros no han confirmado su correo 3 días después del registro. Muestra días restantes (4 días). Si confirman antes del día 6, no se envía el correo #16.
TyC / TratamientoNO — TyC ya fueron aceptados en el registro.

PREVIEW DEL CORREO

Preview
16Recordatorio Urgente (día 6)↑ índice
Nombre técnicoSTARTUP/CEO/NUEVO/SI-ED/Recordatorio Urgente día 6/NO-TYC/LPDI
Función en códigosendStartupReminderEmail (isUrgent=true)
Asunto“Ultimo aviso: confirma tu cuenta en el Ecosistema LPDI”
TriggerCron /api/cron/startup-welcome-reminders — día 6 sin confirmar email
DestinatarioTodos los miembros de la startup que no han confirmado su cuenta (email_confirmed_at IS NULL). Misma lógica que correo #15.
CTABotón: “Confirmar mi cuenta”
Destino: ${confirmUrl} → URL de confirmación Supabase
DescripciónAviso urgente con banner amarillo “tu cuenta expira en menos de 24 horas”. Si ningún miembro confirma, al día 8 se purga automáticamente (correo #17).
TyC / TratamientoNO — TyC ya aceptados en registro.

PREVIEW DEL CORREO

Preview
18Invitación al Equipo↑ índice
Nombre técnicoSTARTUP/TEAM/NUEVO/NO-ED/Invitación al Equipo/SI-TYC/LPDI · STARTUP/TEAM/EXIST/NO-ED/Invitación al Equipo/NO-TYC/LPDI
Función en códigosendTeamInvitationEmail (paramía por userExists + canEdit + addedByName)
Asunto“{Nombre de quien agrega} te ha incluido en el equipo de {empresa} — confirma tu registro”
TriggerUn miembro con privilegio de edición agrega miembro en Panel 6 (Equipo). El template se ejecuta sea cual sea el estado del invitado: usuario nuevo o existente.
DestinatarioEmail del miembro invitado (ingresado por quien tiene privilegio de edición)
CTA2 botones: “Confirmar mi vinculación” (verde) / “No hago parte” (rojo)
Destino: Confirmar: ${confirmUrl} | Rechazar: ${rejectUrl} (rutas /team/confirmar)
DescripciónInvitación a unirse al equipo de una startup. Muestra tabla con datos registrados (nombre, email, cargo, permiso de edición asignado). El bloque de TyC solo aparece cuando el invitado aún no tiene cuenta LPDI.
Variantes4 variantes por cruce de 2 ejes: usuario nuevo/existente × con/sin permiso de edición.

(a) Nuevo + CON edición: Persona sin cuenta LPDI, con permiso de editar. Al confirmar, se le piden TyC y Tratamiento de Datos (checkboxes obligatorios en pantalla de confirmación). El consent se graba en consent_log con flow=“team_invitation”.
(b) Nuevo + SIN edición: Persona sin cuenta LPDI, solo lectura. Misma lógica de TyC que variante (a).
(c) Existente + CON edición: Persona con cuenta LPDI activa + permiso de editar. NO se piden TyC (ya los aceptó previamente). Solo confirma vinculación.
(d) Existente + SIN edición: Persona con cuenta LPDI activa, solo lectura. NO se piden TyC. Solo confirma vinculación.
TyC / TratamientoVariantes (a) y (b) — SÍ (usuario nuevo, acepta en pantalla de confirmación) · Variantes (c) y (d) — NO (usuario existente, ya tiene consent previo)
El trigger no está restringido al CEO: cualquier miembro con privilegio de edición (can_edit_form=true) puede agregar a otro miembro al equipo. El privilegio que se asigna al invitado (SI-ED o NO-ED) lo decide quien crea la invitación al momento de capturar el miembro.

Importante: Los TyC NO se aceptan en el email. El email es informativo. La aceptación ocurre en la pantalla /team/confirmar, donde aparecen (o no) los checkboxes según si el usuario ya tiene cuenta.

PREVIEW — Variante (a) Nuevo + CON edición

Preview nuevo + edición

PREVIEW — Variante (b) Nuevo + SIN edición

Preview nuevo + sin edición

PREVIEW — Variante (c) Existente + CON edición

Preview existente + edición

PREVIEW — Variante (d) Existente + SIN edición

Preview existente + sin edición
20Bienvenida al Equipo con Edición↑ índice
Nombre técnicoSTARTUP/TEAM/EXIST/SI-ED/Bienvenida con Edición/NO-TYC/LPDI
Función en códigosendTeamWelcomeWithEditEmail
Asunto“Bienvenido al equipo de {empresa} en el Ecosistema LPDI”
TriggerMiembro hace clic en “Confirmar mi vinculación” + tiene canEdit=true
DestinatarioEmail del miembro que confirmó su vinculación
CTABotón: “Ir al dashboard”
Destino: eco.lpdi.co/dashboard
DescripciónConfirma al miembro (usuario existente) que fue aceptado en el equipo CON permiso de edición. No incluye contraseña temporal (el usuario ya existe y usa su propia contraseña). Nota: “tu CEO te otorgó permisos para editar”.
TyC / TratamientoNO — TyC ya fueron aceptados en el correo de invitación (#18) o en su registro original.

PREVIEW DEL CORREO

Preview
21Bienvenida al Equipo sin Edición↑ índice
Nombre técnicoSTARTUP/TEAM/EXIST/NO-ED/Bienvenida sin Edición/NO-TYC/LPDI
Función en códigosendTeamWelcomeNoEditEmail
Asunto“Bienvenido al equipo de {empresa} en el Ecosistema LPDI”
TriggerMiembro confirma vinculación + tiene canEdit=false
DestinatarioEmail del miembro que confirmó su vinculación
CTABotón: “Ir al dashboard”
Destino: eco.lpdi.co/dashboard
DescripciónConfirma al miembro que fue aceptado en el equipo SIN permiso de edición. Solo puede ver información, no modificarla. No incluye contraseña temporal (el usuario ya existe en el sistema y usa su propia contraseña).
TyC / TratamientoNO — Mismo caso que correo #20. TyC ya aceptados previamente.

PREVIEW DEL CORREO

Preview
22Confirmación de Rechazo de Invitación↑ índice
Nombre técnicoSTARTUP/TEAM/EXIST/NO-ED/Confirmación de Rechazo/NO-TYC/LPDI
Función en códigosendTeamRejectionConfirmationEmail
Asunto“Confirmación: no haces parte del equipo de {empresa}”
TriggerMiembro hace clic en “No hago parte de la compañía” desde correo #18 o #19
DestinatarioEmail del miembro que rechazó la invitación
CTABotón condicional: “Confirmar mi vinculación” (si fue error)
Destino: ${confirmAgainUrl} (condicional, puede ser null → sin CTA)
DescripciónConfirma al miembro que rechazó exitosamente la invitación. Si fue un error, puede contactar al CEO para que lo vuelva a invitar.
TyC / TratamientoNO — Correo informativo de confirmación de rechazo.

PREVIEW DEL CORREO

Preview
23Notificación al CEO: Miembro Aceptó↑ índice
Nombre técnicoSTARTUP/CEO/EXIST/SI-ED/Notificación Miembro Aceptó/NO-TYC/LPDI
Función en códigosendCeoMemberConfirmationEmail
Asunto“{miembro} aceptó la invitación al equipo de {empresa}”
TriggerMiembro acepta invitación (hace clic en “Confirmar mi vinculación”)
DestinatarioTodos los miembros del equipo de la startup
CTABotón: “Ir al dashboard”
Destino: https://eco.lpdi.co/dashboard (hardcoded)
DescripciónAvisa al equipo que un miembro aceptó la invitación. Muestra quién confirmó, su email y los permisos asignados.
TyC / TratamientoNO — Correo informativo al CEO.

PREVIEW DEL CORREO

Preview
24Notificación al CEO: Miembro Rechazó↑ índice
Nombre técnicoSTARTUP/CEO/EXIST/SI-ED/Notificación Miembro Rechazó/NO-TYC/LPDI
Función en códigosendCeoMemberRejectionEmail
Asunto“{miembro} rechazó la invitación al equipo de {empresa}”
TriggerMiembro rechaza invitación (hace clic en “No hago parte de la compañía”)
DestinatarioTodos los miembros del equipo de la startup
CTABotón: “Ir al dashboard”
Destino: https://eco.lpdi.co/dashboard (hardcoded)
DescripciónAvisa al equipo que un miembro rechazó la invitación. Sugiere comunicarse con la persona si fue un error.
TyC / TratamientoNO — Correo informativo al CEO.

PREVIEW DEL CORREO

Preview
25Cambio de Permisos↑ índice
Nombre técnicoSTARTUP/TEAM/EXIST/SI-ED/Cambio de Permisos/NO-TYC/LPDI
Función en códigosendPermissionChangeEmail
Asunto“Cambio de permisos en {empresa}”
TriggerCualquier usuario con permisos de edición modifica los permisos de otro miembro del equipo
DestinatarioEmail del miembro cuyo permiso cambió
CTABotón: “Ir al dashboard”
Destino: https://eco.lpdi.co/dashboard (hardcoded)
DescripciónNotifica al miembro cuando el CEO modifica sus permisos de edición en el equipo (por ejemplo, de solo lectura a edición o viceversa). Detectado en código, no estaba en el reporte v1.
TyC / TratamientoNO — Correo informativo.

PREVIEW DEL CORREO

Preview

ICG — Registro y ciclo de vida (3)

28Bienvenida Contacto (usuario nuevo)↑ índice
Nombre técnicoICG/CON/NUEVO/NO-ED/Bienvenida Contacto/SI-TYC/LPDI
Función en códigosendContactWelcomeEmail (userExists=false)
Asunto“{ICG} te ha asignado como contacto en el Ecosistema LPDI”
TriggerICG registra contacto de compañía en /registro-icg o /dashboard/icg/nuevo — el contacto NO tiene cuenta LPDI
DestinatarioEmail del contacto designado por el ICG
CTABotón: “Ver mi registro” (existente) / “Establecer nueva contraseña” (nuevo)
Destino: Existente: https://eco.lpdi.co/dashboard | Nuevo: ${resetUrl} (reset Supabase)
DescripciónSe envía al contacto designado por un ICG cuando NO tiene cuenta LPDI. Incluye contraseña temporal visible. Si isNewIcg=false, dice “ha actualizado su perfil” en vez de “se ha registrado”.
TyC / TratamientoSÍ — El flujo destino (/auth/reset-password) detecta 0 registros en consent_log y muestra checkboxes obligatorios. Guard en /dashboard redirige a /aceptar-terminos si no hay consent.

PREVIEW DEL CORREO

Preview
29Bienvenida Contacto (usuario existente)↑ índice
Nombre técnicoICG/CON/EXIST/NO-ED/Bienvenida Contacto/NO-TYC/LPDI
Función en códigosendContactWelcomeEmail (userExists=true)
Asunto“{ICG} te ha asignado como contacto en el Ecosistema LPDI”
TriggerICG registra contacto de compañía — el contacto YA tiene cuenta LPDI
DestinatarioEmail del contacto designado por el ICG
CTABotón: “Ver mi registro” (existente) / “Confirmar mi cuenta” (nuevo)
Destino: Existente: https://eco.lpdi.co/dashboard | Nuevo: ${resetUrl} (reset Supabase)
DescripciónSe envía al contacto que ya tiene cuenta LPDI. NO se muestra contraseña temporal. Solo le notifica la nueva vinculación como contacto del ICG.
TyC / TratamientoNO — Ya tiene cuenta y aceptó TyC previamente. Guard en /dashboard verifica como red de seguridad.

PREVIEW DEL CORREO

Preview
55NUEVOSeguimiento de Score (ICG)↑ índice
Nombre técnicoICG/USER/EXIST/NO-ED/Seguimiento de Score/NO-TYC/LPDI
Función en códigosendIcgFollowupEmail
Asunto“Aumenta el score de tu perfil en el Ecosistema LPDI”
TriggerCron de seguimiento (2 días y 30 días post-registro) para ICG con perfil incompleto.
DestinatarioContacto/responsable del ICG
CTABotón: “Completar mi perfil” → deep-link /dashboard/icg/{id}
DescripciónVersión ICG del Seguimiento de Score. Muestra el score con la barra del semáforo (rojo/ámbar/verde). Espejo del de startup (#14).
EstadoCorreo listo; disparador (cron 30d) en wiring.

PREVIEW DEL CORREO

Preview

ENTIDADES — Correos comunes a Startup e ICG (3)

26Eliminación de Entidad↑ índice
Nombre técnicoSTARTUP/USER/EXIST/NO-ED/Eliminación de Entidad/NO-TYC/LPDI
Función en códigosendEntityDeletedEmail
Asunto“El registro de {entidad} ha sido eliminado del Ecosistema LPDI”
TriggerUsuario elimina startup o ICG desde /api/entities/delete
DestinatarioMiembros asociados a la entidad (CEO, equipo, contacto) CON permiso de edición.
Miembros SIN edición reciben variante informativa (correo #26b) sin CTA Restaurar.
CTABotón: “Restaurar”
Destino: https://eco.lpdi.co/dashboard (sección papelera)
DescripciónNotifica a los miembros con edición que la entidad fue eliminada. Incluye quién dio la orden. Los datos se eliminan permanentemente en 30 días. Miembros sin edición reciben un correo solo informativo con el contacto del responsable.
TyC / TratamientoNO — Correo informativo. La restauración no requiere nueva aceptación.
Este correo aplica tanto a Startups como a ICGs. Se clasifica bajo STARTUP porque es el caso de uso principal, pero la función sendEntityDeletedEmail es genérica.

PREVIEW — CON EDICIÓN (CTA Restaurar)

Preview con edición

PREVIEW — SIN EDICIÓN (solo informativo)

Preview sin edición
27Restauración de Entidad↑ índice
Nombre técnicoSTARTUP/USER/EXIST/NO-ED/Restauración de Entidad/NO-TYC/LPDI
Función en códigosendEntityRestoredEmail
Asunto“{entidad} ha sido restaurado en el Ecosistema LPDI”
TriggerUsuario restaura una entidad desde la papelera del dashboard
DestinatarioMiembros asociados a la entidad restaurada
CTABotón: “Ver en Dashboard”
Destino: ${dashboardUrl}https://eco.lpdi.co/dashboard
DescripciónNotifica a los asociados que la entidad fue restaurada exitosamente desde la papelera. Aplica tanto a Startups como a ICGs.
TyC / TratamientoNO — Correo informativo.

PREVIEW DEL CORREO

Preview
56NUEVOConfirmación de creación de entidad↑ índice
Nombre técnicoENTIDAD/USER/NUEVO/NO-ED/Creación de Entidad/NO-TYC/LPDI
Función en códigosendEntityCreatedEmail
Asunto“Registraste tu {Startup/ICG} en el Ecosistema LPDI”
TriggerAl crear una entidad (startup o ICG) en cualquier vía de registro.
DestinatarioUsuario que registró la entidad
CTABotón: “Completar mi perfil” → deep-link a la entidad (/dashboard/startups/{id} o /dashboard/icg/{id})
Variantes2: Startup e ICG (mismo diseño, label dinámico)
DescripciónConfirma que la entidad se creó correctamente + muestra el score inicial con la barra del semáforo. Motiva a completar el perfil.
EstadoCorreo listo; disparador (al crear entidad) en wiring.

PREVIEW DEL CORREO

Preview

CRON — Reportes automáticos (1)

31Reporte Diario Ecosistema LPDI↑ índice
Nombre técnicoCRON/ADMIN/EXIST/NO-ED/Reporte Diario/NO-TYC/LPDI
Función en códigobuildDailyReportHtml + sendDailyReportEmail (email-daily-report.ts)
EndpointGET /api/cron/daily-report (protegido con Authorization: Bearer ${CRON_SECRET})
Asunto“Reporte diario Ecosistema LPDI — {fecha}”
TriggerCron diario configurado a las 6:00 AM Lima/Bogotá (11:00 UTC) en vercel.json
Destinatariocomunidad@lpdi.co (configurable vía DAILY_REPORT_TO)
Remitente“Ecosistema LPDI” <no-reply@lpdi.co> vía Resend SMTP
SeccionesAltas del día anterior — Startups (STARTUP/PYME/SCALEUP), ICGs (todos los tipos), usuarios individuales (profiles sin entidad). Incluye fila “Total usuarios registrados” = usuarios individuales + miembros sumados a una entidad existente + responsables de las nuevas entidades.
Bajas del día anterior — Startups e ICGs (soft-delete vía deleted_at) + usuarios individuales (vía profile_deletions_log)
Acumulado — Entidades — Subtotales por tipo de Startup (STARTUP/PYME/SCALEUP) e ICG (INVESTOR_INDIVIDUAL/CORPORATE/HUB_NETWORK/etc.) + TOTAL ENTIDADES
Acumulado — Usuarios — Usuarios individuales (sin entidad) + Total usuarios registrados (destacado, todos los profiles del sistema)
CSV adjuntos (2)(1) Altas: ecosistema-lpdi-usuarios-YYYY-MM-DD.csv con columnas: Email, Nombre completo, Fecha de registro, Tipo de usuario, Subcategoría del rol, País. (2) Bajas (Frank 26-jun): anexo aparte con usuarios y/o entidades dados de baja el día. Ambos van como attachment.
PreviewPreview Reporte Diario
CTASin botón — correo informativo con datos tabulares.
TyC / TratamientoNO — Correo administrativo interno. No requiere consentimiento del destinatario.
Audit logLas bajas de usuarios individuales se consultan desde profile_deletions_log (migración 045). Datos identificables < 12 meses; anonimización automática tras 12 meses (purga corre desde purge_expired_entities RPC).
LPDI
Ecosistema LPDI · eco.lpdi.co
Versión 7 — Reporte Diario v3 (Entidades + Usuarios separados) — 2026-06-03
53 correos activos + 3 eliminados · Fuentes: Supabase Management API + código LPDI
SMTP: no-reply@lpdi.co vía Resend (operativo en producción) · Sender: “Ecosistema LPDI”

BENEFICIOS (PERKS) (12)

32Registro exitoso de beneficio (FP)↑ índice
Nombre técnicoFP/ALIADO/Registro Exitoso
Función en códigosendPerkNotification('registro_exitoso')
Asunto“¡Registro exitoso de beneficio!”
TriggerPATCH /api/perks/[id] al pasar a enviado (desde otro estado).
DestinatarioAliado (correo del registrante)
CTABotón: “Ver registro” → /dashboard/beneficios
DescripciónConfirma al aliado que su beneficio quedó en revisión por el equipo LPDI.
EstadoFuncionando.

PREVIEW DEL CORREO

Preview
33Nuevo beneficio por aprobar (FP · equipo)↑ índice
Nombre técnicoFP/EQUIPO/Nuevo por Aprobar
Función en códigosendPerkNotification('nuevo_por_aprobar')
Asunto“Nuevo beneficio por aprobar”
TriggerPATCH → enviado desde borrador/cambios.
DestinatarioAdmin asignado
CTABotón: “Revisar beneficio” → /dashboard/beneficios/admin
DescripciónAvisa al equipo que hay un beneficio nuevo pendiente de aprobación.
EstadoFuncionando.

PREVIEW DEL CORREO

Preview
34Beneficio aprobado (FP)↑ índice
Nombre técnicoFP/ALIADO/Aprobado
Función en códigosendPerkNotification('aprobado')
Asunto“¡Beneficio aprobado!”
TriggerAcción admin aprobar_y_publicar/publicar.
DestinatarioAliado
CTABotón: “Ver beneficio” → /perks/{id}
DescripciónNotifica al aliado que su beneficio fue aprobado y publicado.
EstadoFuncionando.

PREVIEW DEL CORREO

Preview
35Beneficio aprobado — publicación programada (FP)↑ índice
Nombre técnicoFP/ALIADO/Aprobado Programado
Función en códigosendPerkNotification('aprobado_programado')
Asunto“¡Beneficio aprobado!”
TriggerAcción admin aprobar con fecha de publicación futura (vigencia posterior a la aprobación).
DestinatarioAliado
CTABotón: “Ver registro” → /dashboard/beneficios
DescripciónSegundo flujo del Correo 34 (F2): notifica la aprobación e informa la fecha futura en que el beneficio se publicará automáticamente. El cron publish-scheduled lo activa en esa fecha.
EstadoFuncionando. NUEVO (F2).

PREVIEW DEL CORREO

Preview
36Beneficio actualizado (FP)↑ índice
Nombre técnicoFP/ALIADO/Actualizado
Función en códigosendPerkNotification('actualizado')
Asunto“¡Beneficio actualizado!”
TriggerPATCH al pasar un publicado a edicion.
DestinatarioAliado
CTABotón: “Ver beneficio” → /perks/{id}
DescripciónConfirma que los cambios se guardaron y pasarán por aprobación.
EstadoFuncionando.

PREVIEW DEL CORREO

Preview
37Cambios de beneficio por aprobar (FP · equipo)↑ índice
Nombre técnicoFP/EQUIPO/Cambios por Aprobar
Función en códigosendPerkNotification('cambios_por_aprobar')
Asunto“Cambios de beneficio por aprobar”
TriggerPATCH → enviado desde edicion.
DestinatarioAdmin asignado
CTABotón: “Revisar cambios” → /dashboard/beneficios/admin
DescripciónAvisa al equipo que un beneficio publicado tiene cambios por revisar.
EstadoFuncionando.

PREVIEW DEL CORREO

Preview
38Solicitud de ajustes (FP)↑ índice
Nombre técnicoFP/ALIADO/Solicitud de Ajustes
Función en códigosendPerkNotification('cambios_solicitados')
Asunto“Tu beneficio necesita unos ajustes”
TriggerAcción admin solicitar_cambios (→ cambios, recuperable).
DestinatarioAliado
CTABotón: “Ajustar beneficio” → /dashboard/beneficios
DescripciónEl admin pide ajustes antes de publicar (incluye el detalle). Reemplaza al “no aceptado” en esta acción porque el estado es recuperable.
EstadoFuncionando. NUEVO.

PREVIEW DEL CORREO

Preview
39Beneficio no aceptado (FP)↑ índice
Nombre técnicoFP/ALIADO/No Aceptado
Función en códigosendPerkNotification('no_aceptado')
Asunto“Beneficio no aceptado”
TriggerRechazo definitivo.
DestinatarioAliado
CTABotón: “Ver registro” → /dashboard/beneficios
DescripciónPlantilla para rechazo definitivo. Hoy ninguna acción la dispara (solicitar cambios usa la #38); queda lista si se define una acción de rechazo.
EstadoDisponible (sin trigger).

PREVIEW DEL CORREO

Preview
40Beneficio terminado (FP)↑ índice
Nombre técnicoFP/ALIADO/Terminado
Función en códigosendPerkNotification('terminado')
Asunto“Beneficio terminado”
TriggerAcción admin desactivar o cierre por vigencia.
DestinatarioAliado · con copia (cc) al admin asignado
CTABotón: “Ver registro” → /dashboard/beneficios
DescripciónNotifica que el beneficio fue cerrado y ya no aparece en el catálogo.
EstadoFuncionando (admin desactivar).

PREVIEW DEL CORREO

Preview
41Beneficio eliminado (FP)↑ índice
Nombre técnicoFP/ALIADO/Eliminado
Función en códigosendPerkNotification('eliminado')
Asunto“Beneficio eliminado”
TriggerDELETE /api/perks/[id] (soft-delete → papelera).
DestinatarioAliado · con copia (cc) al admin asignado
CTABotón: “Validar en la base de datos” → /dashboard/beneficios
DescripciónNotifica que el beneficio fue enviado a la papelera (recuperable 30 días).
EstadoFuncionando.

PREVIEW DEL CORREO

Preview
42Nuevo registro en tu beneficio (FP)↑ índice
Nombre técnicoFP/ALIADO/Registro en Beneficio
Función en códigosendPerkRegistrationEmail()
Asunto“¡Nuevo registro en tu beneficio!”
TriggerUn usuario se registra para obtener el beneficio — cualquier tipo (código, enlace, agenda o «dejar datos»), en /api/perks/[id]/redeem.
DestinatarioAliado (dueño del beneficio) · con copia (cc) a partners@lpdi.co
CTABotón: “Ver referido” → /dashboard/beneficios/referidos (Mis referidos)
DescripciónAvisa al aliado que un usuario se registró en su beneficio, con los datos del registrante (nombre, correo, teléfono, empresa tomada del perfil del usuario) y el tipo de registro. Unifica el antiguo correo de «lead» al diseño FP y lo extiende a todos los tipos de redención.
EstadoFuncionando. NUEVO.

PREVIEW DEL CORREO

Preview
54NUEVOConfirmación de solicitud de beneficio (al usuario)↑ índice
Nombre técnicoFP/USUARIO/Solicitud recibida/NO-TYC/LPDI
Función en códigosendPerkRedemptionUserEmail
Asunto“Recibimos tu solicitud — Ecosistema LPDI”
TriggerEl usuario solicita un beneficio en /api/perks/[id]/redeem (cualquier tipo de canje).
DestinatarioUsuario que solicitó el beneficio · copia a partners@lpdi.co
CTABotón: “Ir al ecosistema” → eco.lpdi.co
DescripciónConfirma al usuario que su solicitud fue enviada al aliado + muestra la tipología (Código de descuento / Enlace de redención / Dejó sus datos de contacto / Agendó una cita). Espejo (al usuario) del aviso al aliado. Aprobado por Frank 2026-07-02.
EstadoFuncionando.

PREVIEW DEL CORREO

Preview

EVENTOS (10)

43Registro exitoso de evento (FE)↑ índice
Nombre técnicoFE/ORGANIZADOR/Registro Exitoso
Función en códigosendEventNotification('registro_exitoso')
Asunto“¡Registro exitoso de evento!”
TriggerAction submit de /registro-evento (evento en PENDING).
DestinatarioOrganizador (contact_email)
CTABotón: “Ver registro” → /dashboard
DescripciónConfirma al organizador que su evento quedó en revisión. Incluye el código.
EstadoFuncionando.

PREVIEW DEL CORREO

Preview
44Nuevo evento por aprobar (FE · equipo)↑ índice
Nombre técnicoFE/EQUIPO/Nuevo por Aprobar
Función en códigosendEventNotification('nuevo_por_aprobar')
Asunto“Nuevo evento por aprobar”
TriggerAction submit de /registro-evento.
DestinatarioAdmin asignado
CTABotón: “Revisar evento” → /dashboard
DescripciónAvisa al equipo que hay un evento nuevo pendiente de revisión.
EstadoFuncionando.

PREVIEW DEL CORREO

Preview
45Evento aprobado (FE)↑ índice
Nombre técnicoFE/ORGANIZADOR/Aprobado
Función en códigosendEventNotification('aprobado')
Asunto“¡Evento aprobado!”
TriggerAcción admin del panel de eventos (N13).
DestinatarioOrganizador
CTABotón: “Ver evento” → /dashboard
DescripciónNotifica al organizador que su evento fue aprobado.
EstadoFuncionando.

PREVIEW DEL CORREO

Preview
46Evento aprobado — publicación programada (FE)↑ índice
Nombre técnicoFE/ORGANIZADOR/Aprobado Programado
Función en códigosendEventNotification('aprobado_programado')
Asunto“¡Evento aprobado!”
TriggerAcción admin aprobar con fecha de publicación futura.
DestinatarioOrganizador
CTABotón: “Ver registro” → /dashboard
DescripciónSegundo flujo de aprobación de evento (F2): informa la fecha futura de publicación automática. Incluye el badge del código del evento.
EstadoFuncionando. NUEVO (F2).

PREVIEW DEL CORREO

Preview
47Evento actualizado (FE)↑ índice
Nombre técnicoFE/ORGANIZADOR/Actualizado
Función en códigosendEventNotification('actualizado')
Asunto“¡Evento actualizado!”
TriggerEdición de un evento ya aprobado (se guarda manteniendo el estado aprobado).
DestinatarioOrganizador
CTABotón: “Ver evento” → /dashboard
DescripciónAl organizador: su evento publicado fue actualizado.
EstadoFuncionando.

PREVIEW DEL CORREO

Preview
48Cambios de evento por aprobar (FE · equipo)↑ índice
Nombre técnicoFE/EQUIPO/Cambios por Aprobar
Función en códigosendEventNotification('cambios_por_aprobar')
Asunto“Cambios de evento por aprobar”
TriggerUn usuario que NO es «editor de confianza» envía un cambio a su evento que sí requiere aprobación. (El editor de confianza auto-aprueba, así que su edición no genera este correo.)
DestinatarioAdmin asignado
CTABotón: “Revisar cambios” → /dashboard
DescripciónAvisa al equipo que un evento tiene cambios enviados por un usuario sin auto-aprobación y deben revisarse.
EstadoPendiente — se activa con el flujo de «Mis eventos».

PREVIEW DEL CORREO

Preview
49Evento no aceptado (FE)↑ índice
Nombre técnicoFE/ORGANIZADOR/No Aceptado
Función en códigosendEventNotification('no_aceptado')
Asunto“Evento no aceptado”
TriggerAcción admin de rechazo (N13).
DestinatarioOrganizador
CTABotón: “Ver registro” → /dashboard
DescripciónNotifica al organizador que su evento no fue aceptado.
EstadoFuncionando.

PREVIEW DEL CORREO

Preview
50Evento eliminado (FE)↑ índice
Nombre técnicoFE/ORGANIZADOR/Eliminado
Función en códigosendEventNotification('eliminado')
Asunto“Evento eliminado”
TriggerEliminación de un evento (N13).
DestinatarioOrganizador · con copia (cc) al admin asignado
CTABotón: “Ver registro” → /dashboard
DescripciónNotifica al organizador que su evento fue eliminado.
EstadoFuncionando.

PREVIEW DEL CORREO

Preview
51Publicación automática de evento (FE)↑ índice
Nombre técnicoFE/ORGANIZADOR/Publicación Automática
Función en códigosendEventNotification('publicacion_exitosa')
Asunto“¡Publicación automática de evento!”
TriggerRegistro de evento por un usuario con privilegio de auto-publicación (F6): el evento se publica sin pasar por aprobación.
DestinatarioOrganizador · con copia (cc) al admin asignado
CTABotón: “Ver evento” → /dashboard
DescripciónConfirma que el evento se publicó automáticamente. El privilegio se administra en el panel de admin de eventos (sección de privilegios de auto-publicación por correo).
EstadoFuncionando. NUEVO (F6).

PREVIEW DEL CORREO

Preview
52Solicitud de ajustes (FE)↑ índice
Nombre técnicoFE/ORGANIZADOR/Solicitud de Ajustes
Función en códigosendEventNotification('cambios_solicitados')
Asunto“Tu evento necesita unos ajustes”
TriggerEl admin pide cambios a un evento (acción «solicitar cambios» en el panel de aprobación).
DestinatarioOrganizador · con copia (cc) al admin que la envía
CTABotón: “Ajustar evento” → /dashboard
DescripciónAl organizador: el admin solicita ajustes e incluye el detalle de lo que debe corregir; con copia al admin que la envía, para trazabilidad. Es el espejo del correo #38 (Solicitud de Ajustes) de Beneficios.
EstadoFuncionando. NUEVO.

PREVIEW DEL CORREO

Preview

CORREOS ELIMINADOS — consolidados o retirados del sistema (3)

17ELIMINADOExpiración de Registro↑ índice
EstadoELIMINADO — No se obliga a confirmar la creación de una startup; lo que se confirma son las cuentas de usuario. El cron de purga (soft-delete a los 8 días) sigue activo, pero ya no envía notificación por email.
Función eliminadasendStartupPurgedEmail (removido de email.ts)
19ELIMINADOInvitación al Equipo (usuario existente)↑ índice
EstadoELIMINADO — Consolidado en #18.
RazónEl sistema usa una única función (sendTeamInvitationEmail) para ambos casos (usuario nuevo y usuario existente). La diferencia se controla con el flag userExists, no con dos templates distintos. Mantener dos entradas duplicaba el mismo correo en el inventario.
Dónde queda documentadoLas dos variantes (usuario nuevo + SI-TYC · usuario existente + NO-TYC) ahora se describen dentro de #18.
30ELIMINADOExpiración de Registro ICG↑ índice
EstadoELIMINADO — No se obliga a confirmar la creación de un ICG; lo que se confirma son las cuentas de usuario. El cron de purga (purge_expired_entities RPC) sigue activo, pero ya no envía notificación por email.
Función eliminadasendIcgPurgedEmail (removido de email.ts)