Padrón de participantes
El padrón vive por evento: un mismo email puede existir en eventos
distintos. La unicidad interna es lower(email) dentro del evento.
Estados
Sección titulada «Estados»precargado ──confirmar-registro──▶ registrado ──asistencia──▶ asistio| Estado | Significado |
|---|---|
precargado |
Está en el padrón pero aún no confirma sus datos |
registrado |
Confirmó nombre; elegible para reserva y boleto |
asistio |
Marcado en puerta (manual o vía check-in) |
Repetir una transición ya consumida responde 409.
Importación masiva
Sección titulada «Importación masiva»curl -X POST http://localhost:5000/participantes/importar \ -H 'content-type: application/json' -H "authorization: Bearer $TOKEN" \ -d '{ "eventoId": "<uuid>", "archivoNombre": "padron-diciembre.csv", "ejecutadaPor": "<uuid-admin>", "filas": [ { "email": "ana@empresa.mx", "nombrePadron": "Ana López", "tipoEmpleado": "quincenal" }, { "email": "luis@empresa.mx", "nombrePadron": "Luis Pérez", "tipoEmpleado": "externo" } ] }'Respuesta (200):
{ "importacionId": "…", "filasLeidas": 2, "filasAceptadas": 2, "filasRechazadas": 0, "rechazos": []}Todo es idempotente por email: reimportar un email ya existente no
duplica ni pisa la fila confirmada. Cada corrida queda registrada en
importacion_padron.
tipoEmpleado ∈ quincenal | semanal | externo | invitado.
Altas y correcciones
Sección titulada «Altas y correcciones»POST /participantes/— alta manual (201).PATCH /participantes/{id}— corrige datos de padrón (p. ej.estatusLaboral); las columnas de sistema (id, fechas) no aceptan cambios.DELETE /participantes/{id}—409si el participante tiene reserva vigente (borrar con historial no permitido).
Transiciones
Sección titulada «Transiciones»# precargado → registrado (el participante confirma su nombre)curl -X POST http://localhost:5000/participantes/{id}/confirmar-registro \ -H 'content-type: application/json' -H "authorization: Bearer $TOKEN" \ -d '{"nombreConfirmado":"Ana López"}'
# registrado → asistio (marca manual, p. ej. en ventanilla)curl -X POST http://localhost:5000/participantes/{id}/asistencia \ -H "authorization: Bearer $TOKEN"En el flujo normal, el check-in QR marca la asistencia solo; el endpoint manual cubre casos sin escáner.
Consultas
Sección titulada «Consultas»# Listado paginado del evento (cursor opaco)GET /participantes/?eventoId=<uuid>&limit=100&cursor=…# Filtros: estadoRegistro, q (búsqueda)GET /participantes/por-email?eventoId=<uuid>&email=ana@empresa.mxGET /participantes/{id}El cursor es opaco: pásalo tal cual desde siguienteCursor (null al
final). total acompaña cada página para paginar con contador.
Zonas de acceso
Sección titulada «Zonas de acceso»Qué zonas puede ocupar cada participante (lo usa el selector de lugares):
GET /participantes/{id}/zonas # lista actualPUT /participantes/{id}/zonas # reemplazo completo { zonasIds: [...] }PUT reemplaza, no mezcla. Una zona de otro evento responde 400.
Siguiente paso
Sección titulada «Siguiente paso»→ Reservas