Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/interezante456-pixel/Miercoles-Proyecto/llms.txt

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

El módulo de Inventario proporciona una pista de auditoría completa de cada cambio de stock en Tiendas Mi Cholo. Cada vez que se registra una venta, se recibe una compra o se anula cualquiera de ambas operaciones, el sistema crea automáticamente un registro de movimiento en la tabla inventario. Estos registros son inmutables: no se editan ni eliminan, solo se crean. Esto garantiza que siempre sea posible reconstruir el historial de existencias de cualquier producto desde el primer movimiento hasta el estado actual.

Tipos de Movimiento

ENTRADA

Se genera cuando una compra pasa a estado RECIBIDA. También cuando se anula una venta (el stock regresa al almacén). El stockNuevo es mayor que el stockAnterior.

SALIDA

Se genera al registrar una venta exitosa. Por cada producto en el detalle de la venta se crea un movimiento de tipo SALIDA. El stockNuevo es menor que el stockAnterior.

AJUSTE

Reservado para correcciones manuales de inventario. No se genera automáticamente en ningún flujo de ventas o compras.

Tipos de Referencia (referenciaTipo)

Cada movimiento incluye el campo referenciaTipo que indica el origen de la operación y el referenciaId con el ID del documento de origen:
referenciaTiporeferenciaId apunta aCuándo se crea
VENTAventas.idAl registrar o anular una venta
COMPRAcompras.idAl recibir una orden de compra
AJUSTEN/AAjuste manual (uso futuro)

Campos de un Movimiento

La entidad Inventario (tabla inventario) almacena los siguientes datos:
CampoTipoDescripción
idLongIdentificador del movimiento
tipoEnumENTRADA, SALIDA o AJUSTE
cantidadIntegerUnidades movidas (siempre positivo)
stockAnteriorIntegerStock del producto antes del movimiento
stockNuevoIntegerStock del producto después del movimiento
motivoString (max 300)Descripción del motivo (ej. "Venta V-2024-0001", "Recepción compra C-2024-0003")
referenciaIdLongID del documento origen (venta o compra)
referenciaTipoString (max 20)VENTA, COMPRA o AJUSTE
productoProductoProducto al que pertenece el movimiento
usuarioUsuarioUsuario que desencadenó la operación
fechaLocalDateTimeFecha y hora exacta del movimiento (asignada por el servidor)

Endpoints de la API

Listar todos los movimientos

GET /api/inventario
Authorization: Bearer <token>
Devuelve todos los movimientos registrados en el sistema, en el orden que los almacena la base de datos. El frontend Angular invierte el arreglo al recibirlo (ms.reverse()) para mostrar los más recientes primero.

Movimientos por producto

GET /api/inventario/producto/{productoId}
Authorization: Bearer <token>
Devuelve el historial completo de movimientos de un producto específico, ordenado por fecha descendente (más reciente primero) directamente desde la base de datos.
ParámetroTipoDescripción
productoIdLongID del producto a consultar

Ejemplo de Respuesta

El siguiente es el formato estándar de un movimiento devuelto por ambos endpoints:
[
  {
    "id": 12,
    "tipo": "SALIDA",
    "cantidad": 1,
    "stockAnterior": 11,
    "stockNuevo": 10,
    "motivo": "Venta V-2024-0005",
    "referenciaId": 5,
    "referenciaTipo": "VENTA",
    "producto": {
      "id": 1,
      "codigo": "PROD-001",
      "nombre": "Laptop HP 15"
    },
    "usuario": {
      "id": 2,
      "nombre": "Luis",
      "apellido": "Mendoza",
      "username": "lmendoza"
    },
    "fecha": "2024-01-15T14:30:00"
  },
  {
    "id": 8,
    "tipo": "ENTRADA",
    "cantidad": 5,
    "stockAnterior": 6,
    "stockNuevo": 11,
    "motivo": "Recepción compra C-2024-0002",
    "referenciaId": 2,
    "referenciaTipo": "COMPRA",
    "producto": {
      "id": 1,
      "codigo": "PROD-001",
      "nombre": "Laptop HP 15"
    },
    "usuario": {
      "id": 1,
      "nombre": "Juan",
      "apellido": "Pérez",
      "username": "admin"
    },
    "fecha": "2024-01-10T09:00:00"
  }
]

Cómo leer un movimiento

El campo cantidad indica cuántas unidades salieron. Para verificar la operación: stockAnterior - cantidad = stockNuevo. El referenciaId apunta al id de la venta; puedes cruzar datos con GET /api/ventas/{referenciaId} para ver los detalles completos de la transacción.

Interfaz de Usuario

La pantalla Inventario en el frontend muestra una tabla con los siguientes campos para cada movimiento:
ColumnaFuente en la API
Fechafecha (formateada dd/MM/yyyy HH:mm)
Productoproducto.nombre
Tipotipo con badge de color (verde=ENTRADA, rojo=SALIDA, amarillo=AJUSTE)
Cantidadcantidad prefijado con + o según el tipo
Stock Ant.stockAnterior
Stock NuevostockNuevo (en rojo si ≤ 5)
Motivomotivo
ReferenciareferenciaTipo con badge
Usuariousuario.nombre

Control de Acceso

El módulo de inventario es de solo lectura para todos los roles. No existe un endpoint para crear movimientos manualmente a través de la API pública — los movimientos solo se generan de forma automática por el sistema al procesar ventas y compras.
RolVer movimientos
ADMIN
VENDEDOR
ALMACENERO
Para auditar el stock de un producto específico, usa GET /api/inventario/producto/{productoId}. Los registros llegan ordenados por fecha descendente, por lo que el primer elemento siempre es el último movimiento registrado y su stockNuevo debe coincidir exactamente con el stockActual actual del producto.

Build docs developers (and LLMs) love