# US-MMD006-001: Crear Cotizacion desde Diagnostico

## Metadata

| Campo | Valor |
|-------|-------|
| **ID** | US-MMD006-001 |
| **Epica** | EPIC-MMD-006 - Cotizaciones |
| **Modulo** | cotizaciones |
| **Prioridad** | P0 |
| **Story Points** | 5 |
| **Sprint** | Sprint 5 |
| **Estado** | Backlog |

---

## Historia de Usuario

**Como** recepcionista,
**quiero** crear una cotizacion basada en el diagnostico realizado,
**para** presentar al cliente un presupuesto claro de la reparacion.

## Descripcion Detallada

Despues del diagnostico, se genera una cotizacion con las recomendaciones de reparacion. La cotizacion incluye servicios, refacciones, mano de obra, y un total estimado.

---

## Criterios de Aceptacion

**Escenario 1: Crear cotizacion desde diagnostico**
```gherkin
DADO que un diagnostico tiene recomendaciones
CUANDO hago clic en "Generar Cotizacion"
ENTONCES se crea borrador con:
  - Datos del vehiculo y cliente
  - Recomendaciones del diagnostico como lineas sugeridas
  - Folio automatico: COT-2025-0001
```

**Escenario 2: Agregar servicio a cotizacion**
```gherkin
DADO que tengo una cotizacion en borrador
CUANDO agrego un servicio del catalogo:
  | Servicio | Cantidad | Precio |
  | Reparacion bomba | 1 | $2,500 |
ENTONCES se agrega la linea
Y el subtotal se actualiza
```

**Escenario 3: Agregar refaccion con margen**
```gherkin
DADO que agrego una refaccion
CUANDO selecciono:
  | Refaccion | Cantidad | Costo | Margen |
  | Kit reparacion | 1 | $2,000 | 30% |
ENTONCES el precio calculado es $2,600
Y se muestra tanto costo como precio
```

**Escenario 4: Ver totales**
```gherkin
DADO que tengo servicios y refacciones
CUANDO veo los totales
ENTONCES veo:
  | Concepto | Monto |
  | Mano de obra | $3,500 |
  | Refacciones | $4,200 |
  | Subtotal | $7,700 |
  | IVA 16% | $1,232 |
  | Total | $8,932 |
```

**Escenario 5: Guardar como borrador**
```gherkin
DADO que no he terminado la cotizacion
CUANDO guardo como borrador
ENTONCES se guarda sin enviar al cliente
Y puedo continuar editandola despues
```

---

## Estructura de Cotizacion

```typescript
interface Quote {
  id: string;
  folio: string;              // COT-2025-0001
  vehicle_id: string;
  client_id: string;
  diagnostic_id?: string;

  services: QuoteService[];
  parts: QuotePart[];

  subtotal_services: number;
  subtotal_parts: number;
  discount: number;
  subtotal: number;
  iva: number;
  total: number;

  validity_days: number;
  expires_at: Date;
  status: QuoteStatus;
  notes: string;
}
```

---

## Tareas Tecnicas

**Database:**
- [ ] DB-055: Crear tabla `quotes`
- [ ] DB-056: Crear tabla `quote_items`
- [ ] DB-057: Secuencia de folios

**Backend:**
- [ ] BE-100: Crear QuoteEntity
- [ ] BE-101: Crear QuoteService
- [ ] BE-102: Endpoint POST /api/quotes
- [ ] BE-103: Calculos de totales automaticos

**Frontend:**
- [ ] FE-100: Crear QuoteFormPage
- [ ] FE-101: Crear QuoteItemList
- [ ] FE-102: Crear TotalsCard
- [ ] FE-103: Crear ServicePicker

---

## Definition of Done (DoD)

- [ ] Crear cotizacion desde diagnostico
- [ ] Agregar servicios y refacciones
- [ ] Calcular totales automaticos
- [ ] Guardar como borrador
- [ ] Tests pasando

---

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