🧠 Logica de Negocio - PuntoHack
Reglas funcionales del MVP. Esta seccion alinea producto, backend y frontend.
📋 Índice
- Roles y Permisos (RBAC)
- Ciclo de Vida del Hackathon
- Registro y Participaciones
- Equipos
- Invitaciones y Solicitudes
- Submissions
- Evaluacion de Submissions
- Sponsors y Challenges
- Leaderboard y Ranking Global
- Metricas y Analytics
- Notificaciones y Realtime
- Exportacion de Reportes
- Integridad y Validaciones
- Fuentes de Verdad
🔐 Roles y Permisos (RBAC)
Roles:
- ADMIN: administracion global.
- ORGANIZER: crea y gestiona hackathons.
- PARTICIPANT: se registra, crea equipos, envia submissions.
- JUDGE: evalua submissions y challenges.
- SPONSOR: gestiona organizaciones, sponsorships y challenges.
Reglas:
- Toda accion critica se valida en servidor antes de modificar datos.
- Los roles determinan acceso a rutas y acciones.
🕒 Ciclo de Vida del Hackathon
Estados:
- DRAFT: configuracion inicial, no visible para participantes.
- REGISTRATION: abierto para registro y creacion de equipos.
- RUNNING: periodo activo para trabajo y envio de submissions.
- JUDGING: evaluacion de jueces.
- FINISHED: cierre final.
Reglas clave:
- Las fechas deben cumplir orden cronologico.
- El cron
/api/cron/update-hackathon-statesactualiza estados segun las fechas. - No se permiten cambios de fechas que rompan el orden o restricciones del estado actual.
🧾 Registro y Participaciones
Reglas:
- Un perfil solo puede registrarse una vez por hackathon.
- El registro solo aplica en estado REGISTRATION.
- El estado del hackathon controla visibilidad y operaciones permitidas.
👥 Equipos
Reglas:
- Un equipo pertenece a un hackathon.
- Cada hackathon define
minTeamSizeymaxTeamSize. - No se puede exceder
maxTeamSize. - Si existe submission, el equipo no puede quedar debajo de
minTeamSize. - Un participante no puede estar en mas de un equipo del mismo hackathon.
✉️ Invitaciones y Solicitudes
Tipos:
- EMAIL: invitacion enviada por el lider a un email.
- CODE: solicitud de union con codigo del equipo.
Estados:
- PENDING: pendiente de respuesta.
- ACCEPTED: aceptada y aplicada.
- REJECTED: rechazada.
Reglas:
- Solo el lider puede invitar.
- No se aceptan invitaciones si el equipo esta lleno.
- No se aceptan invitaciones si el hackathon ya paso la fecha de submission.
- Un usuario solo puede aceptar invitaciones dirigidas a su email o a su perfil.
📤 Submissions
Reglas:
- Un equipo puede enviar submission si:
- Cumple
minTeamSize. - El hackathon esta en RUNNING.
- No se ha pasado
submissionDeadline.
- Cumple
- La submission contiene campos tecnicos requeridos por el MVP (stack, arquitectura, features, etc.).
🧪 Evaluacion de Submissions
Reglas:
- Los criterios pertenecen a un hackathon y tienen
weightymaxScore. - Los jueces evalua por criterio con puntajes dentro del rango permitido.
- El puntaje total considera pesos para el ranking.
🤝 Sponsors y Challenges
Reglas:
- Una organizacion puede tener multiples sponsorships.
- Un sponsorship puede crear challenges.
- Los challenges se asocian a un hackathon.
- Jueces evaluan challenges y sponsors pueden aprobar o rechazar evaluaciones.
🏅 Leaderboard y Ranking Global
Reglas:
- El leaderboard usa puntajes ponderados por criterio.
- Se normaliza para mostrar un maximo de 100 puntos.
- El ranking global calcula:
- Puntaje promedio por hackathon.
- Consistencia (rendimiento agregado por participacion).
- Top 3 por hackathon (segun promedio de puntajes).
📈 Metricas y Analytics
Reglas:
- Los dashboards muestran estadisticas por rol.
- Las metricas de participante incluyen rendimiento, consistencia y distribuciones.
- Las metricas de organizer incluyen participaciones, submissions y distribuciones de equipos.
🔔 Notificaciones y Realtime
Reglas:
- Eventos relevantes generan notificaciones (invitaciones, aprobaciones, etc.).
- Realtime depende de que
Notificationtenga replication habilitada en Supabase. - Si Realtime no esta activo, la UI debe seguir funcionando con polling o fetch tradicional.
📄 Exportacion de Reportes
Reglas:
- Participantes pueden exportar metricas en:
- CSV (scores por hackathon).
- Excel (CSV multi-seccion).
- PDF (HTML imprimible).
✅ Integridad y Validaciones
Principios:
- Nunca confiar en el cliente.
- Validar inputs con Zod antes de acciones criticas.
- Enforzar restricciones en el servidor (roles, fechas, estados).
📌 Fuentes de Verdad
- Modelos:
prisma/schema.prisma. - Reglas:
src/modules/**/actions.tsyvalidations.ts. - Rutas:
src/app/**/page.tsxysrc/app/api/**/route.ts.