El módulo de inventario de Ferred gestiona el stock de forma independiente por sucursal. Cada sede mantiene su propia tablaDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/Carlos-Gnd/FERRED-Inventario-y-Ventas/llms.txt
Use this file to discover all available pages before exploring further.
StockSucursal (par único productoId + sucursalId), lo que permite que el inventario refleje la realidad física de cada local sin interferir con las demás. Los administradores tienen visibilidad consolidada de todas las sucursales; los usuarios con rol BODEGA o CAJERO solo ven su sede asignada.
Stock por sucursal
El modeloStockSucursal almacena la cantidad disponible y el umbral mínimo para cada producto en cada sucursal:
- Online: devuelve los datos de Prisma y los almacena en
OfflineCachecon TTL de 5 minutos. - Offline (o Prisma caído): devuelve los datos de
obtenerStockSucursalSqlite(sucursalId)directamente desde SQLite.
Alertas de stock crítico
Un producto se considera en estado de alerta cuando sucantidad es menor o igual al minimo configurado para esa sucursal.
| Estado | Condición | Descripción |
|---|---|---|
disponible | cantidad > minimo | Stock dentro del rango normal |
bajo | cantidad <= minimo y cantidad > 0 | Por debajo del umbral mínimo |
critico | cantidad = 0 | Sin existencias en la sucursal |
Ajuste de stock
Para corregir el stock de un producto en una sucursal (inventario físico, merma, donación, etc.):ADMIN, BODEGA.
Cuerpo de la solicitud:
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
sucursalId | number | Sí | Sucursal donde se ajusta el stock |
cantidad | number | Sí | Nueva cantidad absoluta (no es un incremento) |
minimo | number | No | Nuevo umbral mínimo (default 0) |
motivo | string | No | Razón del ajuste, queda en el log de sync |
upsert: crea el registro si no existía o lo actualiza si ya existía. Tras el ajuste, recalcula stockActual sumando todas las sucursales y actualiza el campo en Producto.
Transferencias entre sucursales
Para mover stock de una sucursal a otra sin pasar por una venta:ADMIN.
Stock comparativo
Para ver todos los productos con su stock desglosado por sucursal en una sola consulta:ADMIN, BODEGA.
La respuesta es un arreglo de productos, cada uno con un campo sucursales que incluye cantidad, minimo y estado por sede:
Modo offline
El sistema implementa un caché de respaldo conOfflineCache (TTL de 5 minutos) y lectura directa desde SQLite cuando Prisma no está disponible.
Cómo funciona el OfflineCache
Cómo funciona el OfflineCache
OfflineCache.set(key, data) almacena la respuesta en memoria con marca de tiempo. Al recibir una petición, el servidor primero comprueba conectividad con SyncService.checkConnectivity(). Si la respuesta falla con un código Prisma de conexión (P1001, P1002, P1008, P1017) o con mensajes como ECONNREFUSED, el handler cae al bloque catch y devuelve los datos de SQLite sin propagar el error.Invalidación del caché
Invalidación del caché
El caché se invalida automáticamente al realizar ajustes de stock (
OfflineCache.invalidate('stock:<sucursalId>')) y transferencias (OfflineCache.invalidate('stock:<origenId>'), OfflineCache.invalidate('stock:<destinoId>')). También se invalida la clave productos: al crear o editar productos.