| ID | Nombre tecnico | Asunto | Trigger | Destinatario | CTA | TyC | Variantes |
|---|---|---|---|---|---|---|---|
| EMAIL-001 | sendStartupWelcomeEmail | Bienvenido al Sistema LPDI — ${companyName} | Registro startup completado | CEO startup | Confirmar cuenta | No | 1 |
| EMAIL-002 | sendStartupFollowupEmail | Aumenta el score de tu perfil en el Ecosistema LPDI | Cron 2 dias post-registro | CEO startup | Aumentar score | No | 2 (low/mid) |
| EMAIL-003 | sendStartupReminderEmail | Bienvenido al Sistema LPDI — ${companyName} | Cron dia 3 / dia 6 sin confirmar | CEO startup | Confirmar cuenta | No | 2 (normal/urgente) |
| EMAIL-004 | sendStartupPurgedEmail | El registro de ${companyName} en el Ecosistema LPDI ha expirado | Purga automatica dia 8+ | CEO startup | Registrarme de nuevo | No | 1 |
| EMAIL-005 | sendCeoWelcomeEmail | Bienvenido al Ecosistema LPDI — Confirma tu cuenta | Registro startup (CEO creado automaticamente) | CEO de la startup | Confirmar / Ver registro | No | 2 (nuevo/existente) |
| EMAIL-006 | sendContactWelcomeEmail | ${icgName} te ha asignado como contacto en el Ecosistema LPDI | ICG designa contacto de empresa | Contacto empresa | Establecer pwd / Ver registro | No | 4 variantes |
| EMAIL-007 | sendIcgPurgedEmail | El registro de ${organizationName} en el Ecosistema LPDI ha expirado | Purga automatica ICG no confirmado | Contacto ICG | Registrarme de nuevo | No | 1 |
| EMAIL-008 | sendTeamInvitationEmail | ${ceoName} te ha incluido en el equipo de ${companyName} — confirma tu registro | CEO invita miembro al equipo (P6) | Miembro invitado | Confirmar / Rechazar | Si (en pantalla /team/confirmar) | 4 variantes |
| EMAIL-012 | sendTeamWelcomeWithEditEmail | Bienvenido al equipo de ${companyName} en LPDI | Miembro confirma vinculacion (con edicion) | Miembro confirmado | Establecer nueva contrasena | No | 1 |
| EMAIL-013 | sendTeamWelcomeNoEditEmail | Bienvenido al equipo de ${companyName} en LPDI | Miembro confirma vinculacion (sin edicion) | Miembro confirmado | Establecer nueva contrasena | No | 1 |
| EMAIL-014 | sendTeamRejectionConfirmationEmail | Confirmación: no haces parte del equipo de ${companyName} | Miembro rechaza vinculacion | Miembro que rechazo | Confirmar vinculacion (recuperacion) | No | 2 (con/sin recuperacion) |
| EMAIL-016 | sendCeoMemberConfirmationEmail | ${memberName} aceptó la invitación al equipo de ${companyName} | Miembro acepta invitacion | CEO startup | Ir al dashboard | No | 2 (con/sin edicion) |
| EMAIL-018 | sendCeoMemberRejectionEmail | ${memberName} rechazó la invitación al equipo de ${companyName} | Miembro rechaza invitacion | CEO startup | Ir al dashboard | No | 1 |
| EMAIL-019 | sendEntityDeletedEmail | El registro de ${entityName} ha sido eliminado del Ecosistema LPDI | CEO/miembro elimina entidad | Asociados a la entidad | Restaurar | No | 2 (startup/ICG) |
| EMAIL-020 | sendEntityRestoredEmail | ${entityName} ha sido restaurado en el Ecosistema LPDI | CEO/admin restaura entidad | Asociados a la entidad | Ver en Dashboard | No | 1 |
| EMAIL-021 | sendPermissionChangeEmail | Cambio de permisos en ${companyName} | CEO cambia permisos de miembro | Miembro afectado | Ninguno (informativo) | No | 1 (concesion/revocacion) |
| EMAIL-022 | sendPasswordChangedEmail | Tu contraseña ha sido actualizada — Ecosistema LPDI | Usuario cambia su contrasena | Usuario afectado | Restablecer contrasena | No | 1 |
| AUTH-001 | Supabase: Confirm signup | Confirma tu correo electrónico | Registro de usuario Supabase Auth | Usuario nuevo | Confirm your email | No (flujo Supabase) | 1 |
| AUTH-002 | Supabase: Reset password | Restablece tu contraseña | Solicitud recuperacion de contrasena | Usuario solicitante | Reset Password | No | 1 |
| AUTH-003 | Supabase: Magic Link | Tu enlace de acceso | RESERVA — no activo en flujo normal | N/A | N/A | N/A | RESERVA |
| AUTH-004 | Supabase: Change email | Confirma tu cambio de correo | Usuario solicita cambio de email | Nuevo email del usuario | Confirm email change | No | 1 |
Flujo Startup
4 correos / 6 variantesStartup — Bienvenida y confirmacion de cuenta
1 variantesendStartupWelcomeEmail / buildStartupWelcomeHtml/registro-startup). Se dispara en el endpoint de creacion de startup.https://eco.lpdi.co/auth/confirmar-startup?token=[TOKEN]
Enlace valido por 7 dias. Expira automaticamente.
consent_log desde este email.Startup — Followup de score (score bajo, <50)
Score bajosendStartupFollowupEmail / buildStartupFollowupHtmlhttps://eco.lpdi.co/dashboard/startups/mi-perfil
Startup — Followup de score (score medio, 50-79)
Score mediosendStartupFollowupEmail / buildStartupFollowupHtmlhttps://eco.lpdi.co/dashboard/startups/mi-perfil
Startup — Recordatorio dia 3 (sin confirmar)
Dia 3sendStartupReminderEmail / buildStartupReminderHtmlisUrgent=false, daysRemaining=4.https://eco.lpdi.co/auth/confirmar-startup?token=[TOKEN]
Startup — Recordatorio dia 6 (ultimo aviso)
UrgentesendStartupReminderEmail / buildStartupReminderHtmlisUrgent=true, daysRemaining=1. Subject: "Ultimo aviso: confirma tu cuenta en el Ecosistema LPDI".https://eco.lpdi.co/auth/confirmar-startup?token=[TOKEN]
Startup — Purga automatica (dia 8+)
SistemasendStartupPurgedEmail / buildStartupPurgedHtmlhttps://eco.lpdi.co/registro-startup
Startup — Bienvenida CEO (usuario nuevo)
Usuario nuevosendCeoWelcomeEmail / buildCeoWelcomeHtmlhttps://eco.lpdi.co/auth/reset-password?token=[TOKEN]
Muestra contrasena temporal. Enlace valido 7 dias.
userExists=false: Muestra contrasena temporal y CTA de establecer nueva contrasena. userExists=true: Ver EMAIL-005b.Startup — Bienvenida CEO (usuario existente)
Usuario existentesendCeoWelcomeEmail / buildCeoWelcomeHtmlhttps://eco.lpdi.co/dashboard
userExists=true: Sin contrasena temporal. Solo CTA de ir al dashboard.Flujo ICG
3 correos / 7 variantesICG — Bienvenida Contacto (usuario nuevo, ICG nuevo)
Nuevo + ICG nuevosendContactWelcomeEmail / buildContactWelcomeHtmlhttps://eco.lpdi.co/auth/reset-password?token=[TOKEN]
Muestra contrasena temporal. El texto indica que el ICG "se ha registrado".
userExists=false, isNewIcg=true. Texto: "[ICG] se ha registrado como [rol] en el Sistema LPDI y te ha designado como contacto..."ICG — Bienvenida Contacto (usuario nuevo, ICG existente)
Nuevo + ICG existentesendContactWelcomeEmail / buildContactWelcomeHtmlhttps://eco.lpdi.co/auth/reset-password?token=[TOKEN]
userExists=false, isNewIcg=false. Texto cambia: "[ICG] ha actualizado su perfil como [rol]..."ICG — Bienvenida Contacto (usuario existente, ICG nuevo)
Existente + ICG nuevosendContactWelcomeEmail / buildContactWelcomeHtmlhttps://eco.lpdi.co/dashboard
userExists=true, isNewIcg=true. Sin contrasena temporal. CTA directo al dashboard.ICG — Bienvenida Contacto (usuario existente, ICG existente)
Existente + ICG existentesendContactWelcomeEmail / buildContactWelcomeHtmlhttps://eco.lpdi.co/dashboard
userExists=true, isNewIcg=false. Mensaje informativo de actualizacion, sin credenciales.ICG — Purga automatica (no confirmado)
SistemasendIcgPurgedEmail / buildIcgPurgedHtmlhttps://eco.lpdi.co/registro-icg
https://eco.lpdi.co como fallback.Flujo Team (Equipo Fundador / Directivo)
6 correos / 11 variantesEquipo — Invitacion (usuario nuevo, requiere TyC)
Nuevo Requiere TyCsendTeamInvitationEmail / buildTeamInvitationHtmlhttps://eco.lpdi.co/team/confirmar?token=[TOKEN]
No hago parte de la compania
https://eco.lpdi.co/api/team/reject?token=[TOKEN]
userExists=false, requiresTyC=true. Nota: requiresTyC no altera el HTML del email — la validacion de TyC se hace en la pantalla /team/confirmar (C5/H2), no en el correo. El enlace expira en 7 dias.consent_log desde este correo. La pantalla de destino muestra el checkbox obligatorio de TyC antes de procesar la confirmacion.Equipo — Invitacion (usuario nuevo, sin TyC requerido)
Nuevo Sin TyCsendTeamInvitationEmail / buildTeamInvitationHtmlhttps://eco.lpdi.co/team/confirmar?token=[TOKEN]
No hago parte de la compania
https://eco.lpdi.co/api/team/reject?token=[TOKEN]
userExists=false, requiresTyC=false. El template HTML generado es identico al caso TyC=true (la diferencia es solo logica de backend).Equipo — Invitacion (usuario existente, requiere TyC)
Existente Requiere TyCsendTeamInvitationEmail / buildTeamInvitationHtmlhttps://eco.lpdi.co/team/confirmar?token=[TOKEN]
No hago parte de la compania
userExists=true: El texto introductorio cambia a "Ya tienes una cuenta en el Sistema LPDI. [CEO] te ha anadido como miembro..."Equipo — Invitacion (usuario existente, sin TyC)
Existente Sin TyCsendTeamInvitationEmail / buildTeamInvitationHtmlhttps://eco.lpdi.co/team/confirmar?token=[TOKEN]
No hago parte de la compania
userExists=true, requiresTyC=false. Mismo HTML que el caso existente+TyC.Equipo — Bienvenida confirmado (con permisos de edicion)
Con edicionsendTeamWelcomeWithEditEmail / buildTeamWelcomeWithEditHtml/team/confirmar y tiene permisos de edicion del perfil.https://eco.lpdi.co/auth/reset-password?token=[TOKEN]
Incluye email + contrasena temporal. Enlace valido 7 dias.
Equipo — Bienvenida confirmado (sin permisos de edicion)
Sin edicionsendTeamWelcomeNoEditEmail / buildTeamWelcomeNoEditHtmlhttps://eco.lpdi.co/auth/reset-password?token=[TOKEN]
Equipo — Rechazo de vinculacion (con opcion de recuperar)
Con recuperacionsendTeamRejectionConfirmationEmail / buildTeamRejectionConfirmationHtmlhttps://eco.lpdi.co/team/confirmar?token=[TOKEN]
CTA de recuperacion aparece solo si el token aun es valido.
confirmAgainUrl != null: Muestra opcion de revertir. El enlace expira 7 dias desde la invitacion original.Equipo — Rechazo de vinculacion (sin opcion de recuperar)
Sin recuperacionsendTeamRejectionConfirmationEmail / buildTeamRejectionConfirmationHtmlconfirmAgainUrl == null: No muestra el boton de revertir. Solo confirma que no fue asociado al equipo.Equipo — Notificacion CEO: miembro acepto (con edicion)
Puede editarsendCeoMemberConfirmationEmail / buildCeoMemberConfirmationHtml/team/confirmar.https://eco.lpdi.co/dashboard
canEdit=true: Muestra "Puede editar el perfil de la startup / PyMe". Incluye nombre, email del miembro y permisos.Equipo — Notificacion CEO: miembro acepto (sin edicion)
Sin edicionsendCeoMemberConfirmationEmail / buildCeoMemberConfirmationHtmlhttps://eco.lpdi.co/dashboard
canEdit=false: Muestra "Sin permisos de edicion del perfil".Equipo — Notificacion CEO: miembro rechazo
RechazosendCeoMemberRejectionEmail / buildCeoMemberRejectionHtmlhttps://eco.lpdi.co/dashboard
Eliminacion y Restauracion
4 correos / 5 variantesEliminacion — Notificacion de entidad eliminada (Startup)
StartupsendEntityDeletedEmail / buildEntityDeletedHtmlhttps://eco.lpdi.co/dashboard/papelera
Los datos se eliminan permanentemente en 30 dias.
entityType='startup'. Muestra el label del subtipo de entidad (ej. "Startup", "PyMe", "Scaleup") tomado de ALL_ENTITY_TYPE_LABELS. Muestra el nombre del eliminador si se provee.Eliminacion — Notificacion de entidad eliminada (ICG)
ICGsendEntityDeletedEmail / buildEntityDeletedHtmlhttps://eco.lpdi.co/dashboard/papelera
entityType='icg'. El label del subtipo se resuelve desde ALL_ENTITY_TYPE_LABELS (ej. "Inversionista Individual", "Corporativo", etc.).Restauracion — Entidad restaurada desde papelera
1 variantesendEntityRestoredEmail / buildEntityRestoredHtmlhttps://eco.lpdi.co/dashboard
entityType: 'startup' | 'icg' pero el HTML es el mismo para ambos casos. Muestra nombre de la entidad y nombre del restaurador.Sistema / Seguridad
3 correos / 3 variantesPermisos — Cambio de permisos de edicion en equipo
InformativosendPermissionChangeEmail / buildPermissionChangeHtml (funcion privada)newPermission=true: "[CEO] ha otorgado permisos de edicion a [miembro]". newPermission=false: "[CEO] ha revocado los permisos de edicion de [miembro]". Mismo template con mensaje dinamico.Seguridad — Confirmacion de cambio de contrasena
SeguridadsendPasswordChangedEmail / buildPasswordChangedHtml (funcion privada)https://eco.lpdi.co/auth/recuperar
CTA de alerta: para usar si el usuario NO realizo el cambio.
Cuenta — Eliminacion de cuenta de usuario
SistemasendAccountDeletedEmail / buildAccountDeletedHtmlhttps://eco.lpdi.co
Auth — Supabase (plantillas del proveedor de identidad)
4 correos / 4 variantes{ "{" } .ConfirmationURL { "}" }, etc.). No tienen preview en el endpoint /api/dev/email-preview.
Auth — Confirmacion de email (Confirm signup)
SupabaseTemplate gestionado por
Supabase Auth Dashboard
supabase.auth.signUp().{ "{" } .ConfirmationURL { "}" } (gestionado por Supabase)
Configurado en: Supabase Dashboard > Authentication > Email Templates > Confirm signup
Auth — Restablecimiento de contrasena (Reset password)
SupabaseTemplate gestionado por
Supabase Auth Dashboard
/auth/recuperar. El sistema llama a supabase.auth.resetPasswordForEmail().{ "{" } .ConfirmationURL { "}" } (redirige a /auth/reset-password)
Configurado en: Supabase Dashboard > Authentication > Email Templates > Reset password
Auth — Magic Link
RESERVA — No activoRESERVA
No activo en flujo normal
supabase.auth.signInWithOtp(), pero este flujo no esta implementado en la app LPDI.Estado: RESERVA. No eliminar del panel de Supabase. Configurado en: Authentication > Email Templates > Magic Link
Auth — Cambio de email (Change email address)
SupabaseTemplate gestionado por
Supabase Auth Dashboard
supabase.auth.updateUser({ ' }} email: newEmail {{ ' }).{ "{" } .ConfirmationURL { "}" } (confirma el nuevo email en Supabase)
Configurado en: Supabase Dashboard > Authentication > Email Templates > Change email address