Skip to main content
GET
/
api
/
movimientos-stock
Consultar Movimientos de Stock
curl --request GET \
  --url https://api.example.com/api/movimientos-stock \
  --header 'Authorization: <authorization>'
{
  "500": {},
  "success": true,
  "data": [
    {
      "id_movimiento": 123,
      "id_producto": 123,
      "producto": {
        "id_producto": 123,
        "codigo": "<string>",
        "nombre": "<string>"
      },
      "tipo_movimiento": "<string>",
      "cantidad": 123,
      "stock_anterior": 123,
      "stock_nuevo": 123,
      "tipo_documento": "<string>",
      "id_documento": 123,
      "documento_referencia": "<string>",
      "motivo": "<string>",
      "observaciones": "<string>",
      "id_almacen": 123,
      "id_empresa": 123,
      "id_usuario": 123,
      "usuario": {
        "id": 123,
        "name": "<string>"
      },
      "fecha_movimiento": "<string>"
    }
  ]
}
Obtiene el historial completo de movimientos de stock (entradas, salidas, ajustes) con trazabilidad de usuario, documento y motivo.

Autenticación

Requiere token Bearer y permiso productos.view.

Headers

Authorization
string
required
Token de autenticación Bearer

Query Parameters

id_producto
integer
Filtrar por producto específico
tipo_movimiento
string
Filtrar por tipo:
  • entrada: Ingresos de stock (compras, ajustes positivos)
  • salida: Salidas de stock (ventas, ajustes negativos)
  • ajuste: Ajustes manuales
fecha_desde
string
Fecha inicial del rango (formato: YYYY-MM-DD)
fecha_hasta
string
Fecha final del rango (formato: YYYY-MM-DD)
tipo_documento
string
Filtrar por tipo de documento origen:
  • compra: Entrada por compra a proveedor
  • venta: Salida por venta a cliente
  • anulacion_compra: Reversión de stock por compra anulada
  • anulacion_venta: Devolución de stock por venta anulada
  • ajuste_manual: Ajuste de inventario
id_usuario
integer
Filtrar por usuario que realizó el movimiento

Respuesta Exitosa

success
boolean
Indica si la operación fue exitosa
data
array
Listado de movimientos ordenados por fecha descendente

Ejemplo de Respuesta

{
  "success": true,
  "data": [
    {
      "id_movimiento": 523,
      "id_producto": 45,
      "producto": {
        "id_producto": 45,
        "codigo": "PROD-A1-00045",
        "nombre": "Laptop HP ProBook 450 G9"
      },
      "tipo_movimiento": "entrada",
      "cantidad": 50.00,
      "stock_anterior": 120.00,
      "stock_nuevo": 170.00,
      "tipo_documento": "compra",
      "id_documento": 88,
      "documento_referencia": "F001-00000125",
      "motivo": "Compra a proveedor",
      "observaciones": null,
      "id_almacen": 1,
      "id_empresa": 1,
      "id_usuario": 3,
      "usuario": {
        "id": 3,
        "name": "Carlos Mendoza"
      },
      "fecha_movimiento": "2026-03-06 10:45:23"
    },
    {
      "id_movimiento": 524,
      "id_producto": 45,
      "producto": {
        "id_producto": 45,
        "codigo": "PROD-A1-00045",
        "nombre": "Laptop HP ProBook 450 G9"
      },
      "tipo_movimiento": "salida",
      "cantidad": 5.00,
      "stock_anterior": 170.00,
      "stock_nuevo": 165.00,
      "tipo_documento": "venta",
      "id_documento": 445,
      "documento_referencia": "F001-00000245",
      "motivo": "Venta a cliente",
      "observaciones": null,
      "id_almacen": 1,
      "id_empresa": 1,
      "id_usuario": 3,
      "usuario": {
        "id": 3,
        "name": "Carlos Mendoza"
      },
      "fecha_movimiento": "2026-03-06 14:20:15"
    },
    {
      "id_movimiento": 525,
      "id_producto": 45,
      "producto": {
        "id_producto": 45,
        "codigo": "PROD-A1-00045",
        "nombre": "Laptop HP ProBook 450 G9"
      },
      "tipo_movimiento": "salida",
      "cantidad": 50.00,
      "stock_anterior": 165.00,
      "stock_nuevo": 115.00,
      "tipo_documento": "anulacion_compra",
      "id_documento": 88,
      "documento_referencia": "F001-00000125",
      "motivo": "Anulación de compra",
      "observaciones": null,
      "id_almacen": 1,
      "id_empresa": 1,
      "id_usuario": 5,
      "usuario": {
        "id": 5,
        "name": "Ana García"
      },
      "fecha_movimiento": "2026-03-07 09:15:42"
    }
  ]
}

Casos de Uso

Auditoría de Producto Específico

GET /api/movimientos-stock?id_producto=45
Devuelve el historial completo de un producto con stock_anterior/stock_nuevo para reconstruir el kardex.

Movimientos del Día

GET /api/movimientos-stock?fecha_desde=2026-03-06&fecha_hasta=2026-03-06

Solo Entradas de Compras

GET /api/movimientos-stock?tipo_movimiento=entrada&tipo_documento=compra

Movimientos de un Usuario

GET /api/movimientos-stock?id_usuario=3

Tipos de Movimientos

Entradas (tipo_movimiento = entrada)

  • Compra a proveedor (tipo_documento = compra)
    • Se crea automáticamente al registrar una compra
    • Motivo: “Compra a proveedor”
    • Stock aumenta: stock_nuevo = stock_anterior + cantidad
  • Anulación de venta (tipo_documento = anulacion_venta)
    • Devuelve stock cuando se anula una venta
    • Motivo: “Anulación de venta”

Salidas (tipo_movimiento = salida)

  • Venta a cliente (tipo_documento = venta)
    • Solo si la venta tiene afecta_stock = true
    • Motivo: “Venta a cliente”
    • Stock disminuye: stock_nuevo = stock_anterior - cantidad
  • Anulación de compra (tipo_documento = anulacion_compra)
    • Revierte stock cuando se anula una compra
    • Motivo: “Anulación de compra”
    • Stock disminuye: stock_nuevo = max(0, stock_anterior - cantidad)

Ajustes (tipo_movimiento = ajuste)

  • Ajuste manual de inventario
    • Correcciones manuales de stock
    • Puede ser entrada o salida según el ajuste

Códigos de Error

500
error
Error interno del servidor al obtener movimientos

Notas de Implementación

  • Los movimientos se filtran automáticamente por id_empresa del usuario autenticado
  • Las relaciones con producto y usuario se cargan automáticamente (eager loading)
  • Los movimientos son inmutables: NO se pueden editar o eliminar una vez creados
  • Para reconstruir el kardex, usa los campos stock_anterior y stock_nuevo
  • El sistema garantiza la trazabilidad completa de cada cambio de stock

Build docs developers (and LLMs) love