Módulo Inventario

🌐 Base: /api/v1/

Inventario

Gestión de Dispositivos (tipos de hardware) y Equipos (unidades físicas del laboratorio).

ℹ️
Un Dispositivo es la categoría del hardware (p.ej. "Computadora de Escritorio", "Monitor", "Teclado"). Un Equipo es la unidad física concreta, asociada a un dispositivo y asignada a una estación de trabajo.
5
Endpoints Dispositivos
6
Endpoints Equipos
5
Endpoints Consumibles

Modelos de Datos

Dispositivo

tabla: dispositivo
CampoTipoConstraintDescripción
id integer auto Clave primaria autoincremental.
name string(100) requerido único Nombre del tipo de dispositivo. Debe ser único.
descripcion text opcional Descripción detallada del tipo de dispositivo.

Equipo

tabla: equipo
CampoTipoConstraintDescripción
id integer auto Clave primaria autoincremental.
dispositivo FK → Dispositivo requerido ID del dispositivo al que pertenece. Se elimina en cascada.
dispositivo_name string solo lectura Nombre del dispositivo asociado (campo virtual del serializer).
marca string(100) opcional Marca del equipo (ej. Dell, HP, Lenovo).
modelo string(100) opcional Modelo específico del equipo.
identificador string(100) requerido único Código o número de serie único que identifica físicamente al equipo.
estacion integer requerido único Número de estación de trabajo asignada.
descripcion text opcional Observaciones o detalles adicionales del equipo.
date_reg date requerido Fecha de ingreso al inventario. Formato: YYYY-MM-DD.
is_active boolean opcional Indica si el equipo está activo. Predeterminado: true.

Consumible

tabla: consumible
CampoTipoConstraintDescripción
id integer auto Clave primaria autoincremental.
name string(100) requerido único Nombre del consumible. Debe ser único.
cantidad integer opcional Stock disponible. Predeterminado: 0.
descripcion text opcional Descripción o notas adicionales.

Dispositivos

CRUD completo sobre los tipos de dispositivos del inventario.

GET /api/v1/dispositivos Listar todos los dispositivos (paginado)
Retorna la lista paginada de todos los dispositivos ordenados por -id (más recientes primero).

Parámetros de consulta

ParámetroTipoDescripción
page integer Número de página (predeterminado: 1).
page_size integer Registros por página (predeterminado: 10, máx: 100).

Respuesta exitosa

200 OK
200 OK — application/json
{
  "links": {
    "next":     "http://127.0.0.1:8000/api/v1/dispositivos?page=2",
    "previous": null
  },
  "items":  15,
  "status": "ok",
  "page":   "1/2",
  "data": [
    {
      "id":          3,
      "name":        "Computadora de Escritorio",
      "descripcion": "PC de escritorio con torre ATX"
    }
  ]
}
POST /api/v1/dispositivos Crear un nuevo dispositivo

Cuerpo de la petición (JSON)

CampoTipoRequeridoDescripción
name string requerido Nombre único del dispositivo (máx. 100 caracteres).
descripcion string opcional Descripción del tipo de dispositivo.

Ejemplo de petición

Request Body
{
  "name":        "Monitor",
  "descripcion": "Pantalla LED 24 pulgadas"
}

Respuestas

201 Created 400 Bad Request
201 Created
{
  "status":  "ok",
  "message": "Registro creado exitosamente"
}
GET /api/v1/dispositivos/{id} Obtener un dispositivo por ID

Parámetros de ruta

ParámetroTipoDescripción
id integer ID del dispositivo a consultar.
200 OK 404 Not Found
200 OK
{
  "status": "ok",
  "data": {
    "id":          1,
    "name":        "Monitor",
    "descripcion": "Pantalla LED 24 pulgadas"
  }
}
PUT /api/v1/dispositivos/{id} Actualizar un dispositivo
⚠️
Actualización completa del recurso. Se deben enviar todos los campos requeridos.

Cuerpo de la petición (JSON)

CampoTipoRequeridoDescripción
name string requerido Nombre único del dispositivo.
descripcion string opcional Descripción del tipo de dispositivo.
200 OK 400 Bad Request 404 Not Found
200 OK
{
  "status":  "ok",
  "message": "Registro actualizado exitosamente"
}
DELETE /api/v1/dispositivos/{id} Eliminar un dispositivo 🛡️ admin
⚠️
Requiere rol admin. Al eliminar un dispositivo se eliminarán todos los equipos asociados (relación CASCADE).
200 OK 403 Forbidden 404 Not Found
200 OK
{
  "status":  "ok",
  "message": "Registro eliminado exitosamente"
}

Equipos

Gestión de los equipos físicos del laboratorio, vinculados a un tipo de dispositivo.

GET /api/v1/equipos Listar todos los equipos (paginado)

Parámetros de consulta

ParámetroTipoDescripción
page integer Número de página (predeterminado: 1).
page_size integer Registros por página (predeterminado: 10, máx: 50).
200 OK
200 OK — application/json
{
  "links": { ... },
  "items":  30,
  "status": "ok",
  "page":   "1/3",
  "data": [
    {
      "id":               1,
      "dispositivo":     2,
      "dispositivo_name": "Computadora de Escritorio",
      "marca":           "Dell",
      "modelo":          "OptiPlex 7090",
      "identificador":   "SN-001-DELL",
      "estacion":        1,
      "descripcion":     null,
      "date_reg":        "2024-03-15",
      "is_active":       true
    }
  ]
}
POST /api/v1/equipos Registrar un nuevo equipo

Cuerpo de la petición (JSON)

CampoTipoRequeridoDescripción
dispositivo integer requerido ID del dispositivo al que pertenece el equipo.
marca string opcional Marca del fabricante.
modelo string opcional Modelo del equipo.
identificador string requerido Código único de identificación (número de serie, etc.).
estacion integer requerido Número de estación de trabajo (único).
descripcion string opcional Notas adicionales sobre el equipo.
date_reg string (date) requerido Fecha de ingreso al inventario. Formato: YYYY-MM-DD.

Ejemplo de petición

Request Body
{
  "dispositivo":   1,
  "marca":         "HP",
  "modelo":        "ProDesk 400 G7",
  "identificador": "INV-2024-015",
  "estacion":      15,
  "descripcion":   "Equipo con SSD 512GB",
  "date_reg":      "2024-09-01"
}
201 Created 400 Bad Request
201 Created
{
  "status": "ok",
  "data":   "registro creado correctamente"
}
GET /api/v1/equipos/{id} Obtener un equipo por ID
200 OK 404 Not Found
200 OK
{
  "status": "ok",
  "data": {
    "id":               15,
    "dispositivo":     1,
    "dispositivo_name": "Computadora de Escritorio",
    "marca":           "HP",
    "modelo":          "ProDesk 400 G7",
    "identificador":   "INV-2024-015",
    "estacion":        15,
    "descripcion":     "Equipo con SSD 512GB",
    "date_reg":        "2024-09-01",
    "is_active":       true
  }
}
PUT /api/v1/equipos/{id} Actualizar un equipo
⚠️
Actualización completa. Todos los campos requeridos deben incluirse.

Mismos campos que el POST. Ver sección anterior para referencia.

200 OK 400 Bad Request 404 Not Found
DELETE /api/v1/equipos/{id} Eliminar un equipo 🛡️ admin
⚠️
Requiere rol admin. Esta acción es irreversible.
200 OK 403 Forbidden 404 Not Found
200 OK
{
  "status": "ok",
  "data":   "registro eliminado correctamente"
}
GET /api/v1/equipos/dispositivo/{dispositivo_id} Listar equipos por tipo de dispositivo
ℹ️
Filtra los equipos que pertenecen a un tipo de dispositivo específico, ordenados por -id.

Parámetros de ruta

ParámetroTipoDescripción
dispositivo_id integer ID del dispositivo cuyos equipos se desean consultar.
200 OK

La estructura de la respuesta es la misma que en GET /api/v1/equipos.

Consumibles

Gestión del stock de materiales consumibles del laboratorio (cables, cartuchos, pilas, etc.).

GET /api/v1/consumibles Listar todos los consumibles (paginado)

Parámetros de consulta

ParámetroTipoDescripción
page integer Número de página (predeterminado: 1).
page_size integer Registros por página (predeterminado: 10, máx: 50).
200 OK
200 OK — application/json
{
  "links": { ... },
  "items":  8,
  "status": "ok",
  "page":   "1/1",
  "data": [
    {
      "id":          1,
      "name":        "Cable HDMI",
      "cantidad":    12,
      "descripcion": "Cables de repuesto para monitores"
    }
  ]
}
POST /api/v1/consumibles Crear un nuevo consumible

Cuerpo de la petición (JSON)

CampoTipoRequeridoDescripción
name string requerido Nombre único del consumible (máx. 100 caracteres).
cantidad integer opcional Cantidad en stock. Predeterminado: 0.
descripcion string opcional Descripción del consumible.

Ejemplo de petición

Request Body
{
  "name":        "Cable HDMI",
  "cantidad":    12,
  "descripcion": "Cables de repuesto para monitores"
}
201 Created 400 Bad Request
201 Created
{
  "status":  "ok",
  "message": "Registro creado exitosamente"
}
GET /api/v1/consumibles/{id} Obtener un consumible por ID
200 OK 404 Not Found
200 OK
{
  "status": "ok",
  "data": {
    "id":          1,
    "name":        "Cable HDMI",
    "cantidad":    12,
    "descripcion": "Cables de repuesto para monitores"
  }
}
PUT /api/v1/consumibles/{id} Actualizar un consumible
⚠️
Actualización completa del recurso. Se deben enviar todos los campos requeridos.

Mismos campos que el POST. Ver sección anterior para referencia.

200 OK 400 Bad Request 404 Not Found
200 OK
{
  "status":  "ok",
  "message": "Registro actualizado exitosamente"
}
DELETE /api/v1/consumibles/{id} Eliminar un consumible 🛡️ admin
⚠️
Requiere rol admin. Esta acción es irreversible.
200 OK 403 Forbidden 404 Not Found
200 OK
{
  "status":  "ok",
  "message": "Registro eliminado exitosamente"
}