Skip to main content

Introducción

Los lotes representan agrupaciones de producción vinculadas a órdenes de producción y bitácoras de turno. Cada lote tiene un código único generado automáticamente en formato {codigo_orden}-{correlativo} y transita por estados que controlan su ciclo de vida. Estados de lote:
  • activo: Lote disponible para consumo en procesos productivos
  • pausado: Lote temporalmente no disponible (requiere comentario)
  • cerrado: Estado terminal, no puede cambiar ni ser consumido (requiere comentario)
Relaciones:
  • Cada lote pertenece a una orden de producción (orden_produccion_id)
  • Se genera en una bitácora de turno específica (bitacora_id)
  • Puede ser consumido por múltiples telares (tabla telar_consumo_lote)

Listar Todos los Lotes

curl -X GET https://api.prod-sys.com/api/lotes \
  -H "Authorization: Bearer {token}" \
  -H "Content-Type: application/json"
{
  "status": "success",
  "data": [
    {
      "id": 45,
      "codigo_lote": "OP-2025-001-003",
      "orden_produccion_id": 12,
      "bitacora_id": 89,
      "correlativo": 3,
      "fecha_produccion": "2025-11-15",
      "estado": "activo",
      "comentario_estado": null,
      "codigo_orden": "OP-2025-001",
      "created_at": "2025-11-15T08:30:00Z",
      "created_by": "operador.turno1",
      "updated_at": null,
      "updated_by": null
    },
    {
      "id": 44,
      "codigo_lote": "OP-2025-001-002",
      "orden_produccion_id": 12,
      "bitacora_id": 88,
      "correlativo": 2,
      "fecha_produccion": "2025-11-14",
      "estado": "pausado",
      "comentario_estado": "Problema en bobinado, revisar tensión",
      "codigo_orden": "OP-2025-001",
      "created_at": "2025-11-14T14:20:00Z",
      "created_by": "operador.turno2",
      "updated_at": "2025-11-14T16:45:00Z",
      "updated_by": "supervisor.calidad"
    }
  ]
}
GET /api/lotes Retorna todos los lotes disponibles (estados activo y pausado), ordenados por fecha de producción descendente.

Headers

Authorization
string
required
Token de autenticación Bearer

Permisos Requeridos

  • VIEW_QUALITY: Ver información de calidad

Respuesta

status
string
Estado de la respuesta (success)
data
array
Array de objetos lote
id
integer
ID único del lote
codigo_lote
string
Código único del lote en formato {codigo_orden}-{correlativo}
orden_produccion_id
integer
ID de la orden de producción asociada
bitacora_id
integer
ID de la bitácora de turno donde se generó el lote
correlativo
integer
Número secuencial del lote dentro de la orden
fecha_produccion
string
Fecha de producción en formato ISO 8601 (YYYY-MM-DD)
estado
string
Estado actual: activo, pausado, o cerrado
comentario_estado
string
Comentario asociado al último cambio de estado
codigo_orden
string
Código de la orden de producción (JOIN)
created_at
string
Timestamp de creación
created_by
string
Usuario que creó el lote
updated_at
string
Timestamp de última actualización
updated_by
string
Usuario que actualizó el lote

Obtener Lotes Disponibles

curl -X GET https://api.prod-sys.com/api/lotes/disponibles \
  -H "Authorization: Bearer {token}" \
  -H "Content-Type: application/json"
GET /api/lotes/disponibles Retorna lotes en estado activo o pausado, aptos para ser seleccionados en procesos de telar. Los lotes cerrados no aparecen en esta lista.

Headers

Authorization
string
required
Token de autenticación Bearer

Permisos Requeridos

  • VIEW_QUALITY: Ver información de calidad

Respuesta

Idéntica estructura al endpoint /api/lotes. Retorna solo lotes con estado IN ('activo', 'pausado').

Obtener Lotes por Orden

curl -X GET https://api.prod-sys.com/api/lotes/orden/12 \
  -H "Authorization: Bearer {token}" \
  -H "Content-Type: application/json"
{
  "status": "success",
  "data": [
    {
      "id": 43,
      "codigo_lote": "OP-2025-001-001",
      "orden_produccion_id": 12,
      "bitacora_id": 87,
      "correlativo": 1,
      "fecha_produccion": "2025-11-13",
      "estado": "cerrado",
      "comentario_estado": "Lote completamente consumido en telares",
      "codigo_orden": "OP-2025-001",
      "created_at": "2025-11-13T09:00:00Z",
      "created_by": "operador.turno1",
      "updated_at": "2025-11-14T10:00:00Z",
      "updated_by": "supervisor.prod"
    },
    {
      "id": 44,
      "codigo_lote": "OP-2025-001-002",
      "orden_produccion_id": 12,
      "bitacora_id": 88,
      "correlativo": 2,
      "fecha_produccion": "2025-11-14",
      "estado": "activo",
      "comentario_estado": null,
      "codigo_orden": "OP-2025-001",
      "created_at": "2025-11-14T14:20:00Z",
      "created_by": "operador.turno2",
      "updated_at": null,
      "updated_by": null
    }
  ]
}
GET /api/lotes/orden/:id Retorna todos los lotes asociados a una orden de producción específica, ordenados por correlativo ascendente.

Path Parameters

id
integer
required
ID de la orden de producción

Headers

Authorization
string
required
Token de autenticación Bearer

Permisos Requeridos

  • VIEW_QUALITY: Ver información de calidad

Respuesta

Array de lotes con la misma estructura que /api/lotes, ordenados por correlativo ASC.

Obtener Consumo de Telar

curl -X GET "https://api.prod-sys.com/api/lotes/consumo-telar?maquina_id=5&bitacora_id=89" \
  -H "Authorization: Bearer {token}" \
  -H "Content-Type: application/json"
{
  "status": "success",
  "data": [
    {
      "id": 102,
      "registro_trabajo_id": 456,
      "maquina_id": 5,
      "bitacora_id": 89,
      "lote_id": 45,
      "codigo_lote": "OP-2025-001-003",
      "codigo_orden": "OP-2025-001",
      "created_at": "2025-11-15T10:30:00Z",
      "created_by": "operador.telar2"
    },
    {
      "id": 103,
      "registro_trabajo_id": 456,
      "maquina_id": 5,
      "bitacora_id": 89,
      "lote_id": 44,
      "codigo_lote": "OP-2025-001-002",
      "codigo_orden": "OP-2025-001",
      "created_at": "2025-11-15T10:30:00Z",
      "created_by": "operador.telar2"
    }
  ]
}
GET /api/lotes/consumo-telar Retorna los lotes declarados como consumidos por un telar específico en una bitácora determinada.

Query Parameters

maquina_id
integer
required
ID de la máquina (telar)
bitacora_id
integer
required
ID de la bitácora de turno

Headers

Authorization
string
required
Token de autenticación Bearer

Permisos Requeridos

  • VIEW_QUALITY: Ver información de calidad

Respuesta

status
string
Estado de la respuesta (success)
data
array
Array de registros de consumo
id
integer
ID del registro de consumo
registro_trabajo_id
integer
ID del registro de trabajo asociado
maquina_id
integer
ID de la máquina (telar)
bitacora_id
integer
ID de la bitácora de turno
lote_id
integer
ID del lote consumido
codigo_lote
string
Código del lote (JOIN)
codigo_orden
string
Código de la orden de producción (JOIN)
created_at
string
Timestamp de creación del registro
created_by
string
Usuario que registró el consumo

Errores

400
error
Parámetros maquina_id y bitacora_id son obligatorios

Obtener Historial de Estado

curl -X GET https://api.prod-sys.com/api/lotes/45/historial \
  -H "Authorization: Bearer {token}" \
  -H "Content-Type: application/json"
{
  "status": "success",
  "data": [
    {
      "id": 23,
      "lote_id": 45,
      "estado_anterior": "pausado",
      "estado_nuevo": "activo",
      "comentario": "Problema resuelto, lote disponible nuevamente",
      "changed_by": "supervisor.calidad",
      "changed_at": "2025-11-15T14:00:00Z"
    },
    {
      "id": 22,
      "lote_id": 45,
      "estado_anterior": "activo",
      "estado_nuevo": "pausado",
      "comentario": "Detectada variación en parámetro de tensión",
      "changed_by": "operador.calidad",
      "changed_at": "2025-11-15T11:30:00Z"
    }
  ]
}
GET /api/lotes/:id/historial Retorna el historial completo de cambios de estado de un lote, ordenado cronológicamente (más reciente primero).

Path Parameters

id
integer
required
ID del lote

Headers

Authorization
string
required
Token de autenticación Bearer

Permisos Requeridos

  • VIEW_QUALITY: Ver información de calidad

Respuesta

status
string
Estado de la respuesta (success)
data
array
Array de registros de historial
id
integer
ID del registro de historial
lote_id
integer
ID del lote
estado_anterior
string
Estado antes del cambio
estado_nuevo
string
Estado después del cambio
comentario
string
Comentario explicativo del cambio
changed_by
string
Usuario que ejecutó el cambio
changed_at
string
Timestamp del cambio

Obtener Trazabilidad Completa

curl -X GET https://api.prod-sys.com/api/lotes/45/trazabilidad \
  -H "Authorization: Bearer {token}" \
  -H "Content-Type: application/json"
{
  "status": "success",
  "data": {
    "lote": {
      "id": 45,
      "codigo_lote": "OP-2025-001-003",
      "orden_produccion_id": 12,
      "bitacora_id": 89,
      "correlativo": 3,
      "fecha_produccion": "2025-11-15",
      "estado": "activo",
      "comentario_estado": null,
      "codigo_orden": "OP-2025-001",
      "created_at": "2025-11-15T08:30:00Z",
      "created_by": "operador.turno1"
    },
    "consumos": [
      {
        "id": 102,
        "registro_trabajo_id": 456,
        "maquina_id": 5,
        "bitacora_id": 90,
        "lote_id": 45,
        "codigo_telar": "TELAR-05",
        "fecha_operativa": "2025-11-15",
        "turno": "mañana",
        "created_at": "2025-11-15T10:30:00Z",
        "created_by": "operador.telar2"
      },
      {
        "id": 108,
        "registro_trabajo_id": 461,
        "maquina_id": 7,
        "bitacora_id": 91,
        "lote_id": 45,
        "codigo_telar": "TELAR-07",
        "fecha_operativa": "2025-11-15",
        "turno": "tarde",
        "created_at": "2025-11-15T15:45:00Z",
        "created_by": "operador.telar4"
      }
    ],
    "historial": [
      {
        "id": 23,
        "lote_id": 45,
        "estado_anterior": "pausado",
        "estado_nuevo": "activo",
        "comentario": "Problema resuelto",
        "changed_by": "supervisor.calidad",
        "changed_at": "2025-11-15T14:00:00Z"
      },
      {
        "id": 22,
        "lote_id": 45,
        "estado_anterior": "activo",
        "estado_nuevo": "pausado",
        "comentario": "Detectada variación en tensión",
        "changed_by": "operador.calidad",
        "changed_at": "2025-11-15T11:30:00Z"
      }
    ]
  }
}
GET /api/lotes/:id/trazabilidad Retorna la trazabilidad completa de un lote: información del lote, dónde se produjo, dónde se consumió (telares) y su historial de estados.

Path Parameters

id
integer
required
ID del lote

Headers

Authorization
string
required
Token de autenticación Bearer

Permisos Requeridos

  • VIEW_QUALITY: Ver información de calidad

Respuesta

status
string
Estado de la respuesta (success)
data
object
Objeto de trazabilidad
lote
object
Información completa del lote (misma estructura que /api/lotes)
consumos
array
Array de registros de consumo en telares
id
integer
ID del registro de consumo
registro_trabajo_id
integer
ID del registro de trabajo asociado
maquina_id
integer
ID de la máquina (telar)
bitacora_id
integer
ID de la bitácora donde se consumió
lote_id
integer
ID del lote consumido
codigo_telar
string
Nombre visible del telar (JOIN con MAQUINAS)
fecha_operativa
string
Fecha operativa de la bitácora (YYYY-MM-DD)
turno
string
Turno de la bitácora (mañana, tarde, noche)
created_at
string
Timestamp del registro
created_by
string
Usuario que registró el consumo
historial
array
Array de cambios de estado (misma estructura que /api/lotes/:id/historial)

Errores

404
error
Lote no encontrado

Cambiar Estado del Lote

curl -X PATCH https://api.prod-sys.com/api/lotes/45/estado \
  -H "Authorization: Bearer {token}" \
  -H "Content-Type: application/json" \
  -d '{
    "estado": "pausado",
    "comentario": "Detectada variación en parámetro de tensión durante control de calidad"
  }'
{
  "status": "success",
  "data": {
    "id": 45,
    "codigo_lote": "OP-2025-001-003",
    "orden_produccion_id": 12,
    "bitacora_id": 89,
    "correlativo": 3,
    "fecha_produccion": "2025-11-15",
    "estado": "pausado",
    "comentario_estado": "Detectada variación en parámetro de tensión durante control de calidad",
    "codigo_orden": "OP-2025-001",
    "created_at": "2025-11-15T08:30:00Z",
    "created_by": "operador.turno1",
    "updated_at": "2025-11-15T16:20:00Z",
    "updated_by": "supervisor.calidad",
    "motivo_cambio": "Detectada variación en parámetro de tensión durante control de calidad"
  }
}
PATCH /api/lotes/:id/estado Cambia el estado de un lote. Cualquier usuario autenticado puede ejecutarlo, quedando registrado el usuario que realizó el cambio.

Path Parameters

id
integer
required
ID del lote

Headers

Authorization
string
required
Token de autenticación Bearer

Body Parameters

estado
string
required
Nuevo estado del lote: activo, pausado, o cerrado
comentario
string
Comentario explicativo del cambio. Obligatorio para estados pausado y cerrado

Permisos Requeridos

  • Usuario autenticado (no requiere permisos específicos)

Transiciones de Estado Permitidas

Estado ActualEstados Permitidos
activopausado, cerrado
pausadoactivo, cerrado
cerradoNinguno (terminal)

Reglas de Negocio

  1. Transiciones válidas: Solo se permiten las transiciones definidas en la tabla anterior
  2. Comentario obligatorio: Los estados pausado y cerrado requieren comentario no vacío
  3. Estado terminal: Un lote en estado cerrado no puede cambiar a ningún otro estado
  4. Auditoría automática: Cada cambio se registra en:
    • Tabla lote_historial_estado (historial de cambios)
    • Sistema de auditoría general (tabla AUDIT_LOG)
  5. Usuario registrado: El sistema captura el usuario del token JWT (req.user.nombre o req.user.username)

Respuesta

status
string
Estado de la respuesta (success)
data
object
Lote actualizado con la misma estructura que /api/lotes
estado
string
Nuevo estado aplicado
comentario_estado
string
Comentario del cambio de estado
updated_at
string
Timestamp de la actualización
updated_by
string
Usuario que ejecutó el cambio
motivo_cambio
string
Motivo del cambio (igual al comentario)

Errores

400
error
  • Campo estado es obligatorio
  • Comentario obligatorio para pausado o cerrado
  • Transición de estado no permitida
404
error
Lote no encontrado

Modelo de Datos

Tabla lotes

CREATE TABLE lotes (
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  codigo_lote TEXT NOT NULL UNIQUE,
  orden_produccion_id INTEGER NOT NULL,
  bitacora_id INTEGER NOT NULL,
  correlativo INTEGER NOT NULL,
  fecha_produccion TEXT NOT NULL,
  estado TEXT NOT NULL CHECK(estado IN ('activo', 'pausado', 'cerrado')),
  comentario_estado TEXT,
  created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP,
  created_by TEXT NOT NULL,
  updated_at TEXT,
  updated_by TEXT,
  motivo_cambio TEXT,
  FOREIGN KEY (orden_produccion_id) REFERENCES orden_produccion(id),
  FOREIGN KEY (bitacora_id) REFERENCES bitacora_turno(id)
);

Tabla telar_consumo_lote

Registra qué lotes fueron consumidos por qué telares en qué bitácoras.
CREATE TABLE telar_consumo_lote (
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  registro_trabajo_id INTEGER NOT NULL,
  maquina_id INTEGER NOT NULL,
  bitacora_id INTEGER NOT NULL,
  lote_id INTEGER NOT NULL,
  created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP,
  created_by TEXT NOT NULL,
  FOREIGN KEY (registro_trabajo_id) REFERENCES registro_trabajo(id),
  FOREIGN KEY (maquina_id) REFERENCES MAQUINAS(id),
  FOREIGN KEY (bitacora_id) REFERENCES bitacora_turno(id),
  FOREIGN KEY (lote_id) REFERENCES lotes(id)
);

Tabla lote_historial_estado

Almacena el historial completo de cambios de estado de cada lote.
CREATE TABLE lote_historial_estado (
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  lote_id INTEGER NOT NULL,
  estado_anterior TEXT NOT NULL,
  estado_nuevo TEXT NOT NULL,
  comentario TEXT,
  changed_by TEXT NOT NULL,
  changed_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP,
  FOREIGN KEY (lote_id) REFERENCES lotes(id)
);

Relación con Muestras

Los lotes están relacionados con muestras de calidad a través de la tabla muestras. Cada muestra puede estar asociada a un lote_id, permitiendo rastrear resultados de análisis de calidad para lotes específicos. Para más información, consulta la documentación de Muestras.

Build docs developers (and LLMs) love