Skip to main content
Participation data lives in two apps. The ponente app manages speaker profiles and ponencia submissions. The participante app manages participant profiles, project submissions, QR access passes, and participation certificates.

PerfilPonente

Extended speaker profile. Created as a OneToOne extension of Usuario so that speaker-specific data does not pollute the core user model.
usuario
OneToOneField → Usuario
required
The speaker’s user account. Cascades on user deletion.
institucion
string
Institutional affiliation. Max 180 characters. Optional.
especialidad
string
Area of expertise or specialization. Max 180 characters. Optional.
telefono
string
Contact phone number. Max 30 characters. Optional.
bio
string
Free-text biography. Optional.
avatar
file
Profile photo. Accepts jpg, jpeg, png, webp. Stored under ponente/perfil/avatar/user_<id>/. Optional.
cv
file
Curriculum vitae. PDF only, max 10 MB. Stored under ponente/perfil/cv/user_<id>/. Optional.

Ponencia

A speaker’s submission to an event. Each speaker can submit at most one ponencia per event (UniqueConstraint on evento and ponente).

Core fields

evento
ForeignKey → Evento
required
The event this ponencia is submitted to.
ponente
ForeignKey → Usuario
required
The submitting speaker.
titulo
string
required
Ponencia title. Max 240 characters.
tipo
string
Presentation type (e.g., oral, poster). Max 120 characters. Optional.
area_tematica
string
Thematic area or track. Max 160 characters. Optional.
resumen
string
Abstract text. Optional.
autores
string
Co-author list as free text. Optional.
estado
string
required
Review state. Defaults to REGISTRADA.
ValueDisplay label
REGISTRADARegistrada
EN_REVISIONEn revisión
ACEPTADAAceptada
RECHAZADARechazada

Document fields

Each document field has a paired _estado field that tracks the coordinator’s validation of that file.
archivo_resumen
file
Extended abstract. PDF only, max 10 MB. Stored under ponente/resumenes/.
presentacion
file
Presentation file. Accepts pdf, ppt, pptx, max 25 MB. Stored under ponente/presentaciones/.
cv_documento
file
Speaker CV as a document. PDF only, max 10 MB. Stored under ponente/cv/.
cv_estado
string
required
Validation state of cv_documento. Defaults to PENDIENTE.
ValueDisplay label
PENDIENTEPendiente
EN_REVISIONEn revisión
VALIDADOValidado
resena_biografica
file
Biographical note as a PDF, max 10 MB. Stored under ponente/resenas/.
resena_estado
string
required
Validation state of resena_biografica. Same choices as cv_estado. Defaults to PENDIENTE.
diapositivas_presentacion
file
Final slide deck. Accepts pdf, ppt, pptx, max 25 MB. Stored under ponente/diapositivas/.
diapositivas_estado
string
required
Validation state of diapositivas_presentacion. Same choices as cv_estado. Defaults to PENDIENTE.

Scheduling fields

fecha_programada
date
Scheduled presentation date. Nullable.
hora_inicio
time
Scheduled start time. Nullable.
hora_fin
time
Scheduled end time. Nullable.
espacio_asignado
string
Name of the assigned room or area. Max 180 characters. Optional.
estado_programacion
string
required
Scheduling state. Defaults to PENDIENTE.
ValueDisplay label
PENDIENTEPendiente
CONFIRMADOConfirmado
REPROGRAMADOReprogramado
CANCELADOCancelado

Certificate fields

constancia_habilitada
boolean
required
When True, the speaker can download their certificate regardless of whether their presentation has concluded. Defaults to False.
folio_constancia
string
Certificate folio number. Max 50 characters. Assigned when the certificate is generated. Optional.

Methods

puede_editar()
boolean
Returns True if the event is PUBLICADO and the ponencia is in REGISTRADA or EN_REVISION state.
porcentaje_documentacion()
integer
Returns the percentage of the four tracked documents (cv_documento, resena_biografica, diapositivas_presentacion, requerimientos_tecnicos) that have been provided. Returns values from 0 to 100.
tiene_horario_asignado()
boolean
Returns True if all four scheduling fields (fecha_programada, hora_inicio, hora_fin, espacio_asignado) are set.
puede_generar_constancia()
boolean
Returns True if the ponencia has a speaker, an event, a scheduled date, is not cancelled, is not rejected, and either constancia_habilitada is True or the presentation has already concluded.

PerfilParticipante

Extended participant profile. A OneToOne extension of Usuario.
usuario
OneToOneField → Usuario
required
The participant’s user account. Cascades on user deletion.
telefono
string
Contact phone number. Max 20 characters. Optional.
institucion
string
Institutional affiliation. Max 180 characters. Optional.
biografia
string
Free-text biography. Optional.
avatar
file
Profile photo. ImageField. Stored under participante/perfil/user_<id>/. Optional.
cv
file
Curriculum vitae. Accepts pdf, doc, docx, max 10 MB. Stored under participante/cv/user_<id>/. Optional.

ProyectoParticipante

A project submitted by a participant to an event. Each participant can submit at most one project per event (UniqueConstraint on evento and participante).

Core fields

evento
ForeignKey → Evento
required
The event the project is submitted to.
participante
ForeignKey → Usuario
required
The submitting participant.
nombre_proyecto
string
required
Project name. Max 220 characters.
categoria
string
required
Project category.
ValueDisplay label
TECNOLOGIATecnología
INNOVACIONInnovación
INVESTIGACIONInvestigación
SOCIALImpacto social
EMPRESARIALEmprendimiento
numero_integrantes
integer
required
Number of team members. Must be at least 1. Defaults to 1.
resumen
string
Project abstract. Optional.
presentacion
file
Project presentation. Accepts pdf, ppt, pptx, max 25 MB. Stored under participante/presentaciones/.
informe
file
Project report. Accepts pdf, doc, docx, max 15 MB. Stored under participante/informes/.
estado
string
required
Review state. Defaults to REGISTRADO.
ValueDisplay label
REGISTRADORegistrado
EN_REVISIONEn revisión
ACEPTADOAceptado
RECHAZADORechazado
estado_programacion
string
required
Scheduling state. Defaults to PENDIENTE.
ValueDisplay label
PENDIENTEPendiente
PROGRAMADOProgramado
FINALIZADOFinalizado
CANCELADOCancelado

Methods

tiene_programacion()
boolean
Returns True if fecha_programada, hora_inicio, and hora_fin are all set.
porcentaje_documentacion()
integer
Returns the percentage of three tracked items (resumen, presentacion, informe) that have been provided. Returns values from 0 to 100.
puede_editar()
boolean
Returns True if the project is in REGISTRADO or EN_REVISION state.

PaseAccesoParticipante

A UUID-based QR access pass linked one-to-one with a ProyectoParticipante. Used to track entry scanning at the event.
proyecto
OneToOneField → ProyectoParticipante
required
The project this pass belongs to.
token
UUID
required
Unique, auto-generated UUID. Indexed. Used to construct the validation URL.
activo
boolean
required
Whether the pass is currently active. Defaults to True.
total_escaneos
integer
required
Running count of how many times the QR code has been scanned. Defaults to 0.
ultimo_escaneo
datetime
Timestamp of the most recent scan. Nullable — null means never scanned.

Methods

registrar_escaneo()
None
Increments total_escaneos by 1, sets ultimo_escaneo to the current time, and saves only those two fields plus actualizado_en.
regenerar_token()
None
Replaces token with a new uuid4 value and saves. Use this to invalidate previously printed QR codes.

ConstanciaParticipante

A participation certificate issued to a project. Linked one-to-one with ProyectoParticipante.
proyecto
OneToOneField → ProyectoParticipante
required
The project this certificate was issued for.
folio
string
required
Unique certificate reference number. Auto-generated, not editable. Indexed. Format: SIGEP-CP-YYYYMMDD-XXXXXXXX where XXXXXXXX is 8 random uppercase hex characters.
emitida_en
datetime
required
Timestamp of certificate issuance. Defaults to timezone.now.
The folio format is generated by the generar_folio_constancia() module-level function. Because it encodes the date and a random suffix, folios are effectively unique without requiring a sequence counter.

Build docs developers (and LLMs) love