El módulo de préstamos es el núcleo operativo del sistema. Gestiona el ciclo de vida completo de cada préstamo: desde la creación hasta la devolución, aplicando de forma automática todas las reglas de negocio de la biblioteca. El sistema verifica el estado del socio, controla el límite de préstamos simultáneos, gestiona el stock del material y marca automáticamente los préstamos vencidos como morosos, todo dentro de transacciones de base de datos para garantizar consistencia.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/camiloivcode/biblioteca-la-palabra/llms.txt
Use this file to discover all available pages before exploring further.
Reglas de negocio
Límite de préstamos activos por socio
Límite de préstamos activos por socio
Cada socio puede tener como máximo 3 préstamos activos de forma simultánea. El sistema cuenta los préstamos en estado
ACTIVO o MORA al momento de crear un nuevo préstamo. Si el socio ya tiene 3 o más, la operación se rechaza con un error 409 Conflict.Bloqueo por mora o suspensión
Bloqueo por mora o suspensión
Antes de crear un préstamo, el sistema verifica el estado del socio. Si su estado es Para desbloquear un socio moroso, se deben devolver todos sus préstamos en estado
MOROSO o SUSPENDIDO, la operación se rechaza con un error 409 Conflict y un mensaje descriptivo.MORA. El sistema restaura el estado a ACTIVO automáticamente al completar la última devolución pendiente.Mora automática por vencimiento
Mora automática por vencimiento
Los préstamos tienen un plazo de 30 días (
DIAS_PRESTAMO = 30). Al llamar a PATCH /api/prestamos/actualizar-mora, el sistema busca todos los préstamos con estado ACTIVO cuya fechaDevolucion sea anterior a la fecha actual y los marca como MORA. Simultáneamente, actualiza el estado de los socios involucrados a MOROSO.Este endpoint no se ejecuta de forma automática en segundo plano; debe invocarse explícitamente desde el frontend (por ejemplo, al cargar la página de préstamos o al pulsar el botón “Actualizar Mora” en la interfaz).Cascada de stock en el material
Cascada de stock en el material
Al crear un préstamo, el sistema verifica que el material tenga estado
DISPONIBLE y que el número de préstamos activos simultáneos no supere el stock registrado. Si tras el nuevo préstamo todos los ejemplares quedan en circulación, el estado del material se actualiza a PRESTADO.Al registrar una devolución, el estado del material vuelve a DISPONIBLE automáticamente. Ambas operaciones se ejecutan dentro de la misma transacción que crea o cierra el préstamo.Campos del préstamo
| Campo | Tipo | Descripción |
|---|---|---|
socioId | integer | ID del socio que solicita el préstamo |
materialId | integer | ID del material a prestar |
fechaPrestamo | datetime | Asignada automáticamente al momento de creación |
fechaDevolucion | datetime | Asignada automáticamente: fechaPrestamo + 30 días |
fechaDevReal | datetime | Fecha real de devolución; se registra al ejecutar PATCH /api/prestamos/:id/devolver |
estado | enum | Estado del préstamo: ACTIVO, DEVUELTO o MORA |
observaciones | string | Notas opcionales sobre el préstamo |
Flujo de un préstamo
Crear el préstamo
El personal selecciona un socio y un material en el formulario y envía
POST /api/prestamos con socioId, materialId y, opcionalmente, observaciones.Validación de reglas de negocio
El servicio ejecuta las siguientes verificaciones en orden:
- El socio existe y su estado no es
MOROSOniSUSPENDIDO - El socio no supera el límite de 3 préstamos activos (
ACTIVOoMORA) - El material existe y su estado es
DISPONIBLE - El número de préstamos activos del material no supera su
stock
409 Conflict con un mensaje descriptivo. No se realiza ninguna modificación en la base de datos.Registro del préstamo y actualización del stock
Dentro de una transacción, el sistema crea el registro del préstamo con
fechaDevolucion = hoy + 30 días y, si corresponde, actualiza el estado del material a PRESTADO. La respuesta incluye los datos del socio y el material asociados.Registrar la devolución
Cuando el socio devuelve el material, el personal ejecuta
PATCH /api/prestamos/:id/devolver.Actualización de mora
El endpointPATCH /api/prestamos/actualizar-mora recorre todos los préstamos con estado ACTIVO cuya fechaDevolucion sea anterior a la fecha y hora actuales, y los marca como MORA. En la misma operación, actualiza el estado de los socios afectados a MOROSO.
{ "actualizados": 0, "message": "No hay préstamos en mora" } sin realizar ninguna modificación.
Este endpoint es invocado desde el frontend al cargar la página de préstamos y también está disponible como acción manual mediante el botón “Actualizar Mora” de la interfaz.
Operaciones
| Método | Endpoint | Descripción |
|---|---|---|
GET | /api/prestamos | Lista paginada de préstamos; filtra por estado, socioId y materialId |
GET | /api/prestamos/:id | Detalle de un préstamo con socio y material completos |
POST | /api/prestamos | Crea un nuevo préstamo aplicando todas las reglas de negocio |
PATCH | /api/prestamos/:id/devolver | Registra la devolución y actualiza stock y estado del socio |
PATCH | /api/prestamos/actualizar-mora | Marca como MORA todos los préstamos activos vencidos |