# US-MMD002-005: Registrar Trabajos Realizados

## Metadata

| Campo | Valor |
|-------|-------|
| **ID** | US-MMD002-005 |
| **Epica** | EPIC-MMD-002 - Ordenes de Servicio |
| **Modulo** | ordenes-servicio |
| **Prioridad** | P0 |
| **Story Points** | 8 |
| **Sprint** | Sprint 4 |
| **Estado** | Backlog |

---

## Historia de Usuario

**Como** mecanico,
**quiero** registrar los trabajos realizados con tiempo y refacciones utilizadas,
**para** documentar el servicio y facilitar la facturacion.

## Descripcion Detallada

El mecanico debe poder agregar lineas de trabajo a la orden: que servicio realizo, cuanto tiempo le tomo, y que refacciones utilizo. Esto permite calcular el costo total y tener trazabilidad del servicio.

---

## Criterios de Aceptacion

**Escenario 1: Agregar servicio del catalogo**
```gherkin
DADO que tengo una orden asignada
CUANDO agrego un servicio del catalogo:
  | Servicio | Cantidad | Unidad | Precio |
  | Cambio de aceite | 1 | evento | $350 |
ENTONCES el servicio se agrega a la orden
Y el subtotal se actualiza
```

**Escenario 2: Registrar tiempo de trabajo**
```gherkin
DADO que realizo una reparacion
CUANDO registro el tiempo:
  | Trabajo | Tiempo | Precio/hora |
  | Reparacion bomba | 3.5 hrs | $450 |
ENTONCES se calcula: 3.5 x $450 = $1,575
Y se agrega al total de mano de obra
```

**Escenario 3: Agregar refaccion utilizada**
```gherkin
DADO que uso una refaccion
CUANDO la agrego a la orden:
  | Refaccion | Cantidad | Precio |
  | Filtro diesel | 2 | $225 c/u |
ENTONCES se descuenta del inventario
Y se agrega al costo de refacciones: $450
```

**Escenario 4: Ver resumen de orden**
```gherkin
DADO que he registrado varios trabajos
CUANDO veo el resumen
ENTONCES veo:
  | Concepto | Monto |
  | Mano de obra | $1,925 |
  | Refacciones | $1,850 |
  | Subtotal | $3,775 |
  | IVA 16% | $604 |
  | Total | $4,379 |
```

**Escenario 5: Agregar notas al trabajo**
```gherkin
DADO que encuentro algo importante
CUANDO agrego nota: "Encontre fuga en radiador, requiere atencion"
ENTONCES la nota se guarda en la orden
Y es visible para el jefe de taller y recepcion
```

---

## Estructura de Item de Orden

```typescript
interface OrderItem {
  id: string;
  order_id: string;
  type: 'service' | 'labor' | 'part';

  // Si es servicio del catalogo
  service_id?: string;

  // Si es refaccion
  part_id?: string;

  description: string;
  quantity: number;
  unit: string;
  unit_price: number;
  discount?: number;
  total: number;

  // Para mano de obra
  hours?: number;
  hourly_rate?: number;

  mechanic_id: string;
  created_at: Date;
  notes?: string;
}
```

---

## Tareas Tecnicas

**Database:**
- [ ] DB-023: Crear tabla `order_items`
- [ ] DB-024: Crear tabla `order_notes`
- [ ] DB-025: Trigger para actualizar totales de orden

**Backend:**
- [ ] BE-050: Crear OrderItemEntity
- [ ] BE-051: Crear OrderItemService con CRUD
- [ ] BE-052: Endpoint POST /api/orders/:id/items
- [ ] BE-053: Calcular totales automaticamente
- [ ] BE-054: Integracion con inventario (descontar stock)

**Frontend:**
- [ ] FE-048: Crear OrderWorkPanel component
- [ ] FE-049: Crear ServiceSelector component
- [ ] FE-050: Crear PartSelector component
- [ ] FE-051: Crear OrderSummaryCard
- [ ] FE-052: Formulario de tiempo de trabajo

---

## Dependencias

**Depende de:**
- [ ] US-MMD002-003: Orden asignada
- [ ] US-MMD001-003: Catalogo de servicios
- [ ] US-MMD004-*: Inventario de refacciones

**Bloquea:**
- [ ] US-MMD002-008: Cerrar orden

---

## Definition of Done (DoD)

- [ ] Agregar servicios del catalogo
- [ ] Registrar tiempo de trabajo
- [ ] Agregar refacciones (descuenta inventario)
- [ ] Calcular totales automaticos
- [ ] Agregar notas
- [ ] Tests pasando

---

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