Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/JuanM84/gestor-visitas/llms.txt

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

Una institución representa la organización de origen de un grupo visitante: puede ser una escuela, universidad, empresa, ONG u otro tipo de entidad. Las instituciones se mantienen como un catálogo independiente al que se vinculan los grupos (Grupo.institucion_id) en el momento de registrar una visita. Dado que los guías necesitan asociar instituciones en tiempo real durante el alta de un grupo, la creación de instituciones está disponible para cualquier usuario autenticado, sin restricción de rol.
Una institución es distinta de un gestor (el coordinador administrativo que puede tener múltiples grupos a cargo) y de un grupo (la delegación concreta que visita el túnel en una fecha y turno determinados). Una misma institución puede tener múltiples grupos registrados en diferentes fechas. El campo institucion_id en la tabla Grupo establece esta relación de uno a muchos.
El servicio detecta duplicados usando una comparación insensible a mayúsculas sobre los campos nombre, localidad, provincia y pais, evitando registros repetidos para la misma entidad.

GET /api/instituciones

Devuelve el catálogo completo de instituciones registradas en el sistema, ordenadas alfabéticamente por nombre. Autenticación: Authorization: Bearer <token> — cualquier rol.

Respuesta exitosa 200 OK

Un arreglo de objetos institución. Puede ser un arreglo vacío [] si todavía no se ha registrado ninguna institución.
id
integer
Identificador único de la institución en la base de datos.
nombre
string
Nombre oficial de la institución.
telefono
string | null
Número de teléfono de contacto. Puede ser null si no fue informado al momento del alta.
email
string | null
Correo electrónico de contacto. Puede ser null si no fue informado.
localidad
string | null
Ciudad o localidad donde se encuentra la institución. Puede ser null.
provincia
string | null
Provincia o estado de la institución. Puede ser null.
pais
string | null
País de la institución. Por defecto "Argentina" cuando se crea a través de la API.

Ejemplo

curl -X GET https://api.example.com/api/instituciones \
  -H "Authorization: Bearer <token>"
[
  {
    "id": 1,
    "nombre": "Escuela Técnica N° 5",
    "telefono": "0343-4123456",
    "email": "secretaria@et5.edu.ar",
    "localidad": "Paraná",
    "provincia": "Entre Ríos",
    "pais": "Argentina"
  },
  {
    "id": 2,
    "nombre": "Universidad Nacional del Litoral",
    "telefono": null,
    "email": "extensión@unl.edu.ar",
    "localidad": "Santa Fe",
    "provincia": "Santa Fe",
    "pais": "Argentina"
  },
  {
    "id": 3,
    "nombre": "Colegio Secundario Belgrano",
    "telefono": null,
    "email": null,
    "localidad": "Diamante",
    "provincia": "Entre Ríos",
    "pais": "Argentina"
  }
]

Respuestas de error

CódigoDescripción
401 UnauthorizedToken ausente o inválido.
500 Internal Server ErrorError interno al consultar la base de datos.

POST /api/instituciones

Registra una nueva institución en el catálogo del sistema. El campo nombre es el único requerido; el resto de los datos de contacto y ubicación son opcionales y pueden completarse más adelante. Autenticación: Authorization: Bearer <token> — cualquier rol.

Cuerpo de la solicitud

nombre
string
required
Nombre oficial de la institución. No puede estar vacío. Se utiliza junto con localidad, provincia y pais para la detección de duplicados (comparación insensible a mayúsculas).
telefono
string
Número de teléfono de contacto. Opcional.
email
string
Correo electrónico de contacto. Opcional.
localidad
string
Ciudad o localidad de la institución. Opcional. Se usa en la validación de duplicados.
provincia
string
Provincia o estado de la institución. Opcional. Se usa en la validación de duplicados.
pais
string
País de la institución. Opcional. Si se omite, se almacena como "Argentina" por defecto.

Respuesta exitosa 201 Created

mensaje
string
Confirmación de la operación. Siempre es "Institución creada exitosamente".
institucion
object
Objeto con todos los campos de la institución recién creada, tal como quedó almacenada en la base de datos.

Ejemplo completo

curl -X POST https://api.example.com/api/instituciones \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
    "nombre": "Instituto Superior de Formación Docente N° 8",
    "telefono": "0343-4987654",
    "email": "info@isfd8.edu.ar",
    "localidad": "Paraná",
    "provincia": "Entre Ríos",
    "pais": "Argentina"
  }'
{
  "mensaje": "Institución creada exitosamente",
  "institucion": {
    "id": 5,
    "nombre": "Instituto Superior de Formación Docente N° 8",
    "telefono": "0343-4987654",
    "email": "info@isfd8.edu.ar",
    "localidad": "Paraná",
    "provincia": "Entre Ríos",
    "pais": "Argentina"
  }
}

Ejemplo mínimo (solo nombre)

curl -X POST https://api.example.com/api/instituciones \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{ "nombre": "Club Deportivo Municipal" }'
{
  "mensaje": "Institución creada exitosamente",
  "institucion": {
    "id": 6,
    "nombre": "Club Deportivo Municipal",
    "telefono": null,
    "email": null,
    "localidad": null,
    "provincia": null,
    "pais": "Argentina"
  }
}

Respuestas de error

CódigoDescripción
400 Bad RequestEl campo nombre está ausente o vacío, o ya existe una institución con el mismo nombre en la misma ubicación. El cuerpo incluye { "error": "<descripción>" }.
401 UnauthorizedToken ausente o inválido.
La creación de una institución genera una entrada en el log de auditoría con el formato Registró nueva institución "<nombre>", asociada al usuario que realizó la solicitud.

Build docs developers (and LLMs) love