# US-MMD004-003: Solicitar Refaccion desde Orden

## Metadata

| Campo | Valor |
|-------|-------|
| **ID** | US-MMD004-003 |
| **Epica** | EPIC-MMD-004 - Inventario |
| **Modulo** | inventario |
| **Prioridad** | P0 |
| **Story Points** | 5 |
| **Sprint** | Sprint 3 |
| **Estado** | Backlog |

---

## Historia de Usuario

**Como** mecanico,
**quiero** solicitar refacciones al almacen desde la orden de servicio,
**para** obtener las piezas necesarias para la reparacion.

## Descripcion Detallada

Desde la orden de servicio, el mecanico puede buscar y solicitar refacciones. El almacenista recibe la solicitud, verifica stock, y despacha las piezas. El sistema actualiza el inventario automaticamente.

---

## Criterios de Aceptacion

**Escenario 1: Solicitar refaccion con stock**
```gherkin
DADO que necesito un filtro de diesel
CUANDO busco "filtro diesel" y selecciono "Filtro Diesel FD-001"
Y solicito cantidad: 2
ENTONCES se crea solicitud para almacen
Y el almacenista recibe notificacion
Y estado de solicitud es "PENDIENTE"
```

**Escenario 2: Ver stock disponible**
```gherkin
DADO que busco una refaccion
CUANDO veo los resultados
ENTONCES veo el stock disponible de cada una:
  | Refaccion | Stock | Ubicacion |
  | Filtro FD-001 | 5 | B-02-01 |
  | Filtro FD-002 | 0 | - |
Y las sin stock aparecen deshabilitadas
```

**Escenario 3: Solicitud sin stock suficiente**
```gherkin
DADO que solicito 3 unidades de una refaccion con stock 2
CUANDO confirmo la solicitud
ENTONCES el sistema advierte "Solo hay 2 en stock"
Y puedo ajustar cantidad o confirmar parcial
```

**Escenario 4: Almacenista despacha**
```gherkin
DADO que hay una solicitud pendiente
CUANDO el almacenista la despacha
ENTONCES el stock se descuenta automaticamente
Y la refaccion se agrega a la orden de servicio
Y estado cambia a "DESPACHADO"
```

**Escenario 5: Devolver refaccion no usada**
```gherkin
DADO que no use una refaccion solicitada
CUANDO la devuelvo al almacen
ENTONCES el stock se incrementa
Y se registra el movimiento de devolucion
```

---

## Flujo de Solicitud

```
MECANICO                    ALMACENISTA
    │                            │
    │──── Solicita refaccion ────▶│
    │                            │
    │◀─── Notificacion ──────────│
    │                            │
    │                            │ Verifica stock
    │                            │ Prepara piezas
    │                            │
    │◀─── Despacha ──────────────│
    │                            │
    │ Recibe piezas              │ Stock actualizado
    │ Usa en reparacion          │
    │                            │
```

---

## Estados de Solicitud

| Estado | Descripcion |
|--------|-------------|
| PENDIENTE | Esperando atencion de almacen |
| EN_PREPARACION | Almacenista preparando |
| DESPACHADO | Entregado al mecanico |
| PARCIAL | Entrega parcial (falta stock) |
| CANCELADO | Solicitud cancelada |
| DEVUELTO | Refaccion devuelta |

---

## Tareas Tecnicas

**Database:**
- [ ] DB-045: Crear tabla `part_requests`
- [ ] DB-046: Estados de solicitud
- [ ] DB-047: Trigger para actualizar stock

**Backend:**
- [ ] BE-085: Crear PartRequestEntity
- [ ] BE-086: Endpoint POST /api/orders/:id/part-request
- [ ] BE-087: Endpoint PATCH /api/part-requests/:id/dispatch
- [ ] BE-088: Notificacion a almacenista
- [ ] BE-089: Actualizar stock automaticamente

**Frontend:**
- [ ] FE-084: Crear PartRequestForm en orden
- [ ] FE-085: Crear PartRequestsList (almacen)
- [ ] FE-086: Crear DispatchDialog
- [ ] FE-087: Indicador de stock en busqueda

---

## Dependencias

**Depende de:**
- [ ] US-MMD004-001: Refacciones registradas
- [ ] US-MMD002-001: Orden de servicio

**Bloquea:**
- [ ] US-MMD002-005: Registrar trabajos (refacciones)

---

## Definition of Done (DoD)

- [ ] Solicitar desde orden
- [ ] Ver stock disponible
- [ ] Notificacion a almacen
- [ ] Despachar y descontar stock
- [ ] Devolucion
- [ ] Tests pasando

---

**Creada por:** Requirements-Analyst
**Fecha:** 2025-12-06
