After completing the five-step personal data registration, applicants proceed to the document submission phase. TheDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/ariellukezz/admision-web/llms.txt
Use this file to discover all available pages before exploring further.
PostulanteDocumentoController manages all upload, retrieval, update, deletion, and review-request operations. Every document belongs to a tipo_documento (document type) that is grouped into RequisitoDocumento records — each requirement specifies whether it is mandatory (obligatorio) for all modalities, mandatory only for specific academic programs, or optional. Applicants need to upload at least one of the accepted document types for each requirement to mark that requirement as complete.
How Requirements Are Determined
Requirements are configured by administrators via theRequisitoDocumento model. Each requirement carries:
- Modalities (
modalidades): which admission modalities it applies to. - Programs (
programas): if set, the document is mandatory only for those specific programs. - Document types (
tiposDocumento): one or more accepted formats for fulfilling the requirement — the applicant uploads any one of them.
GET /postulante/mis-requisitos, the controller resolves their active Inscripcion to determine id_programa_postulante and applies the program-based obligatory logic. The response groups requirements by status (complete / pending) and includes a per-modality progress percentage.
File Upload Constraints
All document uploads are sent asmultipart/form-data to POST /postulante/subir-documento. The DocumentoStorageService handles physical file storage and metadata persistence.
| Constraint | Value |
|---|---|
| Accepted formats (upload) | PDF only (mimes:pdf) |
| Accepted formats (update) | PDF, JPG, JPEG, PNG (mimes:pdf,jpg,jpeg,png) |
| Maximum file size | 20 MB (max:20480) |
| Maximum documents per requirement | 10 (across all accepted types for the same requirement) |
POST /postulante/actualizar-documento/{id} with the new file. Deletion is handled by DELETE /postulante/eliminar-documento/{id} or DELETE /postulante/eliminar-documento-tipo/{idTipoDocumento} for type-level removal.
Document Review States
Each uploaded document (Documento) passes through several states tracked by the following fields:
Pending
Document has been uploaded but not yet reviewed.
apto_revision and valido are both null or false. The document is visible to reviewers but no action has been taken.Approved
A reviewer has set
valido = true and stamped validado_at. The requirement is marked as verified in the applicant’s dashboard.Rejected
A reviewer has set
valido = false and recorded an observacion_revisor explaining the reason. The applicant can replace the file (if no active review request is pending) and resubmit.GET /postulante/mis-requisitos for each document:
fecha_caducidad in the past are automatically deactivated (estado = 0) each time the requirements list is loaded.
Requesting a Document Review
Once at least one document has been uploaded and the applicant has completed all five registration steps (avance ≥ 5), they can submit a review request for a specific modality:
RevisionSolicitud exists for the same (id_postulante, id_modalidad) pair and was submitted fewer than 24 hours ago, the request is rejected with the earliest retry time. After 24 hours, the existing solicitud is reopened (estado = 'solicitada', incrementing veces) rather than creating a duplicate.
The review state can be polled at any time:
Firebase Cloud Messaging (FCM) Notifications
The system uses Firebase Cloud Messaging to deliver real-time push notifications to applicants and reviewers. Applicants register their browser or device FCM token immediately after authentication:FirebaseService sends a push notification to the applicant confirming the submission, and another push to all reviewers (via individual FCM tokens and the revisores topic) alerting them to a pending review. The payload includes the applicant’s DNI, name, and a direct link to their reviewer profile page.
| Event | Recipient | Push title |
|---|---|---|
| Review requested | Applicant | ”Solicitud de revisión enviada” |
| Review requested | Reviewers | ”Solicitud de revisión de documentos” |
| Document approved/rejected | Applicant | Via SolicitudRevisionNotification (DB + FCM) |
Downloading Your Documents
Applicants can download or preview any of their uploaded documents:documento.id_postulante === postulante.id before serving the file, returning HTTP 403 otherwise.
Tracking Progress in the Dashboard
The applicant dashboard (GET /postulante/dashboard) reflects document submission status through the revisionSolicitada flag. Once tiene_revision_activa = true, step 2 of the five-step timeline is marked as done and the overall progressPercent advances. Applicants can also view the full step-by-step audit trail at GET /postulante/seguimiento-data, which returns all Paso records with timestamps and the state of the most recent RevisionSolicitud.