359 lines
10 KiB
Markdown
359 lines
10 KiB
Markdown
# RF-PURCH-003: Almacenes y Control de Inventarios
|
|
|
|
**Épica:** MAI-004 - Compras e Inventarios
|
|
**Versión:** 1.0
|
|
**Fecha:** 2025-11-17
|
|
|
|
---
|
|
|
|
## 1. Descripción General
|
|
|
|
Sistema multi-almacén con control de entradas, salidas, traspasos, devoluciones y ajustes de inventario. Incluye trazabilidad completa, valorización por método PEPS y control por ubicaciones.
|
|
|
|
---
|
|
|
|
## 2. Objetivos de Negocio
|
|
|
|
- **Control:** Inventario exacto en tiempo real
|
|
- **Reducción de pérdidas:** Mermas <2% del valor total
|
|
- **Optimización:** Stock justo (ni exceso ni faltantes)
|
|
- **Trazabilidad:** Cada movimiento rastreado a proyecto/partida
|
|
|
|
---
|
|
|
|
## 3. Alcance Funcional
|
|
|
|
### 3.1 Estructura de Almacenes
|
|
|
|
**Tipos de Almacén:**
|
|
```
|
|
1. Almacén General (Oficina Central)
|
|
- Materiales comunes
|
|
- Stock para múltiples obras
|
|
- Control estricto
|
|
|
|
2. Almacenes de Obra (1 por proyecto)
|
|
- Materiales específicos del proyecto
|
|
- Control por residente
|
|
- Semiautomático
|
|
|
|
3. Almacenes Temporales
|
|
- Áreas de obra temporales
|
|
- Sin control estricto (registro manual)
|
|
```
|
|
|
|
**Ejemplo:**
|
|
```
|
|
┌──────────────────────────────────────┐
|
|
│ ALMACENES ACTIVOS (5) │
|
|
├──────────────────────────────────────┤
|
|
│ 📦 Almacén General │
|
|
│ Ubicación: Oficina Central │
|
|
│ Items: 1,247 │
|
|
│ Valor: $8,450,000 │
|
|
│ │
|
|
│ 🏗️ Fracc. Los Pinos - Almacén Obra │
|
|
│ Proyecto: Los Pinos │
|
|
│ Items: 342 │
|
|
│ Valor: $1,850,000 │
|
|
│ │
|
|
│ 🏗️ Torre Central - Almacén Obra │
|
|
│ Proyecto: Torre Central │
|
|
│ Items: 198 │
|
|
│ Valor: $980,000 │
|
|
└──────────────────────────────────────┘
|
|
```
|
|
|
|
### 3.2 Tipos de Movimientos
|
|
|
|
#### A. Entradas de Almacén
|
|
**Fuentes:**
|
|
1. **Recepción de OC:** Entrada desde proveedor
|
|
2. **Traspaso de otro almacén**
|
|
3. **Devolución de obra** (material no usado)
|
|
4. **Ajuste positivo** (corrección de inventario)
|
|
|
|
**Ejemplo Entrada desde OC:**
|
|
```
|
|
ENTRADA #ENT-2025-00234
|
|
Fecha: 20/Nov/2025
|
|
Almacén: Fracc. Los Pinos
|
|
Origen: OC-2025-00145 (Cemex)
|
|
|
|
┌──────────────────┬────────┬────────┬──────────┐
|
|
│ Material │ Cant. │ PU │ Total │
|
|
├──────────────────┼────────┼────────┼──────────┤
|
|
│ Cemento CPC 30R │ 80 ton │ $4,350 │ $348,000 │
|
|
│ Grava 3/4" │ 85 m³ │ $380 │ $32,300 │
|
|
└──────────────────┴────────┴────────┴──────────┘
|
|
|
|
Recibió: Almacenista José García
|
|
Documentos: Remisión R-12345, Factura A-12345
|
|
```
|
|
|
|
#### B. Salidas de Almacén
|
|
**Destinos:**
|
|
1. **Consumo en obra:** Asignado a partida presupuestal
|
|
2. **Traspaso a otro almacén**
|
|
3. **Devolución a proveedor** (material defectuoso)
|
|
4. **Baja por merma/robo**
|
|
|
|
**Ejemplo Salida para Obra:**
|
|
```
|
|
SALIDA #SAL-2025-00456
|
|
Fecha: 21/Nov/2025
|
|
Almacén: Fracc. Los Pinos
|
|
Destino: Cimentación Etapa 2
|
|
|
|
┌──────────────────┬────────┬──────────────────┐
|
|
│ Material │ Cant. │ Partida Presup. │
|
|
├──────────────────┼────────┼──────────────────┤
|
|
│ Cemento CPC 30R │ 15 ton │ 02-Cimentación │
|
|
│ Grava 3/4" │ 20 m³ │ 02-Cimentación │
|
|
│ Arena │ 25 m³ │ 02-Cimentación │
|
|
└──────────────────┴────────┴──────────────────┘
|
|
|
|
Autorizó: Ing. Pedro Ramírez (Residente)
|
|
Vale: VALE-2025-789
|
|
```
|
|
|
|
#### C. Traspasos
|
|
```
|
|
TRASPASO #TRA-2025-00078
|
|
Fecha: 22/Nov/2025
|
|
Origen: Almacén General
|
|
Destino: Fracc. Los Pinos
|
|
|
|
Material: Varilla 3/8" fy=4200
|
|
Cantidad: 500 kg
|
|
Motivo: Faltante en obra
|
|
|
|
Status:
|
|
✓ Salida de Almacén General
|
|
⏳ En tránsito
|
|
⬜ Recibido en Los Pinos
|
|
```
|
|
|
|
### 3.3 Valorización de Inventario
|
|
|
|
**Método PEPS (Primeras Entradas, Primeras Salidas):**
|
|
```
|
|
Ejemplo Cemento CPC 30R:
|
|
|
|
Entradas:
|
|
01/Nov: 100 ton @ $4,200 = $420,000
|
|
15/Nov: 120 ton @ $4,350 = $522,000
|
|
──────────────────────────────────
|
|
Total: 220 ton, Valor: $942,000
|
|
|
|
Salida 21/Nov: 150 ton
|
|
Consume primero: 100 ton @ $4,200 = $420,000
|
|
Consume después: 50 ton @ $4,350 = $217,500
|
|
──────────────────────────────────
|
|
Costo salida: $637,500
|
|
|
|
Inventario Restante:
|
|
70 ton @ $4,350 = $304,500
|
|
```
|
|
|
|
### 3.4 Ubicaciones y Zonas
|
|
|
|
**Almacén con Ubicaciones:**
|
|
```
|
|
Almacén General:
|
|
├─ Zona A (Cementantes)
|
|
│ ├─ A-01: Cemento CPC 30R
|
|
│ ├─ A-02: Cemento blanco
|
|
│ └─ A-03: Cal hidratada
|
|
├─ Zona B (Agregados)
|
|
│ ├─ B-01: Grava 3/4"
|
|
│ ├─ B-02: Arena
|
|
│ └─ B-03: Tezontle
|
|
└─ Zona C (Acero)
|
|
├─ C-01: Varilla 3/8"
|
|
├─ C-02: Varilla 1/2"
|
|
└─ C-03: Varilla 5/8"
|
|
```
|
|
|
|
**Beneficios:**
|
|
- Localización rápida
|
|
- Control de espacio
|
|
- Inventarios cíclicos por zona
|
|
|
|
### 3.5 Inventario Físico
|
|
|
|
**Proceso:**
|
|
1. **Programar conteo:** Mensual/trimestral
|
|
2. **Generar listas** por zona
|
|
3. **Conteo físico** (1 o 2 personas)
|
|
4. **Captura de cantidades**
|
|
5. **Comparación:** Físico vs Sistema
|
|
6. **Ajustes** (con autorización)
|
|
|
|
**Ejemplo:**
|
|
```
|
|
INVENTARIO FÍSICO #IF-2025-11
|
|
Almacén: Fracc. Los Pinos
|
|
Fecha: 30/Nov/2025
|
|
Responsable: José García
|
|
|
|
┌──────────────┬─────────┬──────────┬──────────┬────────┐
|
|
│ Material │ Sistema │ Físico │ Diferenc.│ Status │
|
|
├──────────────┼─────────┼──────────┼──────────┼────────┤
|
|
│ Cemento CPC │ 70 ton │ 68 ton │ -2 ton │ ⚠️ -2.9%│
|
|
│ Grava 3/4" │ 65 m³ │ 65 m³ │ 0 │ ✓ OK │
|
|
│ Varilla 3/8" │ 850 kg │ 900 kg │ +50 kg │ ⚠️ +5.9%│
|
|
└──────────────┴─────────┴──────────┴──────────┴────────┘
|
|
|
|
Ajustes requeridos:
|
|
• Cemento: Baja 2 ton (merma)
|
|
• Varilla: Alta 50 kg (no registrada)
|
|
|
|
Autorización: Gerente Operaciones
|
|
```
|
|
|
|
---
|
|
|
|
## 4. Casos de Uso Principales
|
|
|
|
### CU-001: Registrar Entrada desde OC
|
|
**Actor:** Almacenista
|
|
**Flujo:**
|
|
1. Proveedor llega con material
|
|
2. Almacenista busca OC-2025-00145
|
|
3. Verifica material contra remisión
|
|
4. Registra entrada parcial: 80 ton (de 120 ordenadas)
|
|
5. Sistema:
|
|
- Crea movimiento ENT-2025-00234
|
|
- Actualiza inventario: +80 ton
|
|
- Valoriza: $4,350/ton
|
|
- Actualiza status OC: Parcialmente recibida
|
|
6. Imprime comprobante de entrada
|
|
|
|
### CU-002: Salida de Material para Obra
|
|
**Actor:** Residente
|
|
**Flujo:**
|
|
1. Solicita material para cimentación
|
|
2. Almacenista verifica existencia
|
|
3. Registra salida: 15 ton cemento
|
|
4. Vincula a partida: 02-Cimentación
|
|
5. Sistema:
|
|
- Valora salida por PEPS
|
|
- Reduce inventario
|
|
- Afecta costo real del proyecto
|
|
- Genera vale de salida
|
|
6. Residente firma vale
|
|
|
|
### CU-003: Traspaso entre Almacenes
|
|
**Actor:** Gerente de Almacén
|
|
**Flujo:**
|
|
1. Obra Los Pinos requiere varilla urgente
|
|
2. Verifica: Almacén General tiene stock
|
|
3. Crea traspaso: 500 kg
|
|
4. Almacenista General prepara material
|
|
5. Transporta a obra
|
|
6. Almacenista Obra recibe y confirma
|
|
7. Sistema completa traspaso
|
|
|
|
---
|
|
|
|
## 5. Modelo de Datos
|
|
|
|
```typescript
|
|
// warehouses
|
|
{
|
|
id: UUID,
|
|
code: VARCHAR(20),
|
|
name: VARCHAR(255),
|
|
type: ENUM('general', 'project', 'temporary'),
|
|
projectId: UUID NULLABLE,
|
|
address: TEXT,
|
|
managedBy: UUID,
|
|
isActive: BOOLEAN,
|
|
}
|
|
|
|
// warehouse_locations
|
|
{
|
|
id: UUID,
|
|
warehouseId: UUID,
|
|
zone: VARCHAR(10), // A, B, C
|
|
position: VARCHAR(10), // 01, 02, 03
|
|
code: VARCHAR(20), // A-01
|
|
description: VARCHAR(255),
|
|
}
|
|
|
|
// inventory_movements
|
|
{
|
|
id: UUID,
|
|
code: VARCHAR(20),
|
|
warehouseId: UUID,
|
|
movementType: ENUM('entry', 'exit', 'transfer_out', 'transfer_in', 'adjustment'),
|
|
movementDate: DATE,
|
|
|
|
sourceType: ENUM('purchase_order', 'transfer', 'return', 'adjustment'),
|
|
sourceId: UUID,
|
|
|
|
projectId: UUID NULLABLE,
|
|
budgetItemId: UUID NULLABLE,
|
|
|
|
items: JSONB, // [{materialId, quantity, unitCost, totalCost, lotId}]
|
|
totalValue: DECIMAL(15,2),
|
|
|
|
notes: TEXT,
|
|
authorizedBy: UUID,
|
|
recordedBy: UUID,
|
|
}
|
|
|
|
// inventory_stock
|
|
{
|
|
id: UUID,
|
|
warehouseId: UUID,
|
|
materialId: UUID,
|
|
locationId: UUID NULLABLE,
|
|
|
|
quantity: DECIMAL(12,4),
|
|
reservedQuantity: DECIMAL(12,4),
|
|
availableQuantity: DECIMAL(12,4), // quantity - reserved
|
|
|
|
averageCost: DECIMAL(12,2),
|
|
totalValue: DECIMAL(15,2),
|
|
|
|
lastMovementDate: DATE,
|
|
updatedAt: TIMESTAMP,
|
|
}
|
|
|
|
// inventory_lots (para PEPS)
|
|
{
|
|
id: UUID,
|
|
warehouseId: UUID,
|
|
materialId: UUID,
|
|
|
|
lotNumber: VARCHAR(50),
|
|
entryDate: DATE,
|
|
quantity: DECIMAL(12,4),
|
|
remainingQuantity: DECIMAL(12,4),
|
|
unitCost: DECIMAL(12,2),
|
|
|
|
sourceType: VARCHAR(20),
|
|
sourceId: UUID,
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## 6. Criterios de Aceptación
|
|
|
|
- [ ] Multi-almacén (general + por obra)
|
|
- [ ] 4 tipos de movimientos (entrada, salida, traspaso, ajuste)
|
|
- [ ] Valorización PEPS
|
|
- [ ] Ubicaciones por zona
|
|
- [ ] Inventario físico con ajustes
|
|
- [ ] Reservas de material
|
|
- [ ] Trazabilidad completa
|
|
- [ ] Dashboard de stock por almacén
|
|
- [ ] Reportes de movimientos
|
|
|
|
---
|
|
|
|
**Estado:** ✅ Ready for Development
|