Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/Renzo717/Aula-Virtual-Universidad-Radiolocucion/llms.txt

Use this file to discover all available pages before exploring further.

The final grades module (/api/finales) allows authorised staff to read and bulk-save end-of-year exam results for any subject. Each grade record tracks the numeric score, a retake score, and two boolean condition flags (libre, regular). The academic year (anio_academico) is resolved automatically from the subject record — callers never need to supply it. The companion boletines endpoint generates PDF grade transcripts per student.

Final Grades

Get final grades for a subject

GET /api/finales/materia/:materiaId
Returns the academic year and a sorted list of all enrolled students paired with their current final grade record for the subject. Students without a grade entry have null for all numeric fields and false for condition flags. Auth: admin, docente, preceptor (docentes must be assigned to the subject; admins and preceptors have access to any subject)
curl -X GET https://api.nuestravoz.edu.ar/api/finales/materia/<materiaId> \
  -H "Authorization: Bearer <token>"
const response = await fetch(`/api/finales/materia/${materiaId}`, {
  headers: { Authorization: `Bearer ${token}` },
});
const { data } = await response.json();
// data.anio_academico → 2025
// data.alumnos → AlumnoNotaFinal[]
data
FinalesMateriaResponse
anio_academico
number
The academic year resolved from the subject configuration (e.g. 2025).
alumnos
AlumnoNotaFinal[]
Student list sorted alphabetically by apellido then nombre.
estudiante_id
string
Student user UUID.
nombre
string
Student first name.
apellido
string
Student last name.
email
string
Student email address.
dni
string | null
National ID number, if on file.
nota
number | null
Final exam grade (1–10), or null if not yet entered.
nota_recuperatorio
number | null
Retake exam grade (1–10), or null if not applicable.
libre
boolean
Whether the student is marked as libre (failed by attendance). Defaults to false.
regular
boolean
Whether the student is marked as regular (passed coursework, pending final exam). Defaults to false.

Bulk upsert final grades

PUT /api/finales/materia/:materiaId
Creates or updates final grade records for one or more students in a single request. Uses upsert semantics keyed on (estudiante_id, materia_id, anio_academico) — existing records are overwritten, and new records are inserted. Only students enrolled in the subject are accepted; submitting an estudiante_id for a non-enrolled student results in a 400 error. Auth: admin, docente, preceptor (docentes must be assigned to the subject) Request body (application/json) — bulkUpsertNotasFinalesSchema:
notas
UpsertNotaFinal[]
required
Array of grade entries to save. At least one entry is required.Each item:
notas[].estudiante_id
string
required
UUID of the enrolled student.
notas[].nota
number | null
required
Final exam grade. Must be between 1 and 10, or null to clear the grade.
notas[].nota_recuperatorio
number | null
Retake exam grade. Must be between 1 and 10, or null. Defaults to null.
notas[].libre
boolean
Mark the student as libre. Defaults to false. Cannot be true at the same time as regular — the Zod schema enforces this constraint and returns a validation error if both flags are set.
notas[].regular
boolean
Mark the student as regular. Defaults to false. Cannot be true at the same time as libre.
curl -X PUT https://api.nuestravoz.edu.ar/api/finales/materia/<materiaId> \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
    "notas": [
      {
        "estudiante_id": "3e4a1b2c-...",
        "nota": 7,
        "nota_recuperatorio": null,
        "libre": false,
        "regular": false
      },
      {
        "estudiante_id": "9f8d7e6a-...",
        "nota": null,
        "libre": true,
        "regular": false
      }
    ]
  }'
const response = await fetch(`/api/finales/materia/${materiaId}`, {
  method: "PUT",
  headers: {
    Authorization: `Bearer ${token}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    notas: [
      { estudiante_id: studentId, nota: 8, libre: false, regular: false },
    ],
  }),
});
const { data } = await response.json();
// data.message → "Notas guardadas"
Returns 200 on success:
data.message
string
Always "Notas guardadas" on success.
Constraint: libre and regular are mutually exclusive The upsertNotaFinalSchema applies a superRefine rule that rejects any entry where both libre and regular are true. Attempting to save such an entry returns 400 with:
{
  "error": "Datos inválidos",
  "details": {
    "fieldErrors": {},
    "formErrors": ["Libre y Regular no pueden estar marcados a la vez"]
  }
}

Boletines (Grade Transcripts)

Download student PDF transcript

GET /api/boletines/pdf
Generates and streams a PDF grade transcript for a specific student in a specific career. The PDF includes the student’s personal details, career name, academic year, and a table of subjects with their final grades and condition flags. Auth: admin, preceptor Query parameters:
estudiante_id
string
required
UUID of the student whose transcript to generate.
carrera_id
string
required
UUID of the career for which the transcript is generated.
curl -X GET "https://api.nuestravoz.edu.ar/api/boletines/pdf?estudiante_id=<uuid>&carrera_id=<uuid>" \
  -H "Authorization: Bearer <token>" \
  --output boletin.pdf
The response is a binary PDF file:
  • Content-Type: application/pdf
  • Content-Disposition: attachment; filename="<apellido>_<nombre>.pdf"
The filename is sanitised (special characters replaced) to ensure safe download across operating systems. If the student or career is not found, the endpoint returns 404 JSON.

List careers (for transcript selector)

GET /api/boletines/carreras
Returns all active careers. Useful for populating the career selector in the transcript download UI. Auth: admin, preceptor
data
object[]
id
string
Career UUID.
nombre
string
Career name.
codigo
string
Short code.
anio
number
Academic year of the career.

List students in a career

GET /api/boletines/carrera/:carreraId/alumnos
Returns the career details and a list of enrolled students. Used alongside the PDF endpoint to allow selecting a specific student. Auth: admin, preceptor
curl -X GET https://api.nuestravoz.edu.ar/api/boletines/carrera/<carreraId>/alumnos \
  -H "Authorization: Bearer <token>"
data
object
carrera
object
Career context: id, nombre, codigo, anio.
alumnos
BoletinAlumnoResumen[]
Enrolled students: id, nombre, apellido, dni, email.

Build docs developers (and LLMs) love