El módulo de proveedores y recepciones de mercancía permite registrar los ingresos de stock que llegan de los distribuidores. Al crear una recepción, el sistema incrementa automáticamente el inventario de la sucursal receptora en una transacción atómica, garantizando que el stock siempre refleje la mercancía física disponible. Los rolesDocumentation 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.
ADMIN y BODEGA tienen acceso a este módulo.
Gestión de proveedores
Los proveedores se almacenan en el modeloProveedor:
| Campo | Tipo | Descripción |
|---|---|---|
nombre | string | Nombre comercial del proveedor (mínimo 2 caracteres) |
nit | string (opcional) | NIT tributario; debe ser único si se provee |
telefono | string (opcional) | Teléfono de contacto |
email | string (opcional) | Correo electrónico; se valida el formato |
direccion | string (opcional) | Dirección física |
activo | boolean | true por defecto; se usa soft-delete |
| Método | Ruta | Roles | Descripción |
|---|---|---|---|
GET | /api/proveedores | Todos | Lista proveedores activos ordenados por nombre |
POST | /api/proveedores | ADMIN, BODEGA | Crea un nuevo proveedor |
PUT | /api/proveedores/:id | ADMIN, BODEGA | Actualiza datos del proveedor |
DELETE | /api/proveedores/:id | ADMIN | Desactiva el proveedor (soft delete) |
activo pasa a false para preservar el historial de recepciones asociadas al proveedor.
Recepción de mercancía
Una recepción registra el ingreso de uno o más productos al inventario de una sucursal. El endpoint es:ADMIN, BODEGA. Un usuario con rol BODEGA solo puede crear recepciones para su propia sucursal asignada.
Cuerpo de la solicitud:
- Valida que el proveedor exista y esté activo.
- Valida que todos los productos existan y estén activos.
- Crea el registro
RecepcionMercanciay losDetalleRecepcionen una transacción. - Incrementa el
StockSucursalde cada producto en la sucursal indicada (upsert: crea el registro si no existía). - Sincroniza
stockActualen el modeloProductosumando todas las sucursales. - Invalida el
OfflineCachede la sucursal.
Campos de recepción
| Modelo | Campo | Tipo | Descripción |
|---|---|---|---|
RecepcionMercancia | proveedorId | Int | Proveedor del que proviene la mercancía |
RecepcionMercancia | sucursalId | Int | Sucursal que recibe |
RecepcionMercancia | usuarioId | Int? | Usuario que registra la recepción |
RecepcionMercancia | numeroFactura | String? | Número de factura del proveedor para trazabilidad |
RecepcionMercancia | observaciones | String? | Notas libres sobre el pedido |
RecepcionMercancia | total | Float | Suma de cantidad × costoUnit de todos los ítems |
DetalleRecepcion | productoId | Int | Producto recibido |
DetalleRecepcion | cantidad | Float | Unidades recibidas |
DetalleRecepcion | costoUnit | Float | Costo unitario de compra |
DetalleRecepcion | subtotal | Float | cantidad × costoUnit |
Acceso por rol
| Acción | ADMIN | BODEGA | CAJERO |
|---|---|---|---|
| Ver proveedores | ✓ | ✓ | ✓ |
| Crear / editar proveedor | ✓ | ✓ | — |
| Desactivar proveedor | ✓ | — | — |
| Registrar recepción (cualquier sucursal) | ✓ | — | — |
| Registrar recepción (su sucursal) | ✓ | ✓ | — |
| Ver historial de recepciones | ✓ (todas) | ✓ (su sucursal) | — |
Flujo de recepción de mercancía
Seleccionar proveedor
Elige el proveedor de la lista (
GET /api/proveedores). Si el proveedor no está registrado, créalo primero con POST /api/proveedores.Ingresar número de factura
Escribe el número de factura del proveedor en el campo
numeroFactura. Este dato es opcional pero facilita la conciliación contable.Agregar productos y cantidades
Para cada producto recibido, indica
productoId, cantidad y costoUnit. El sistema valida que los productos existan y estén activos antes de continuar.Confirmar recepción
Envía
POST /api/proveedores/recepcion. El servidor ejecuta toda la operación en una sola transacción atómica: crea la recepción, sus detalles e incrementa el stock de cada producto en la sucursal.