# EPICA: EPIC-MMD-006 - Cotizaciones ## Metadata | Campo | Valor | |-------|-------| | **ID** | EPIC-MMD-006 | | **Nombre** | Cotizaciones | | **Modulo** | cotizaciones | | **Fase** | Fase 1 - MVP | | **Prioridad** | P1 (Alta) | | **Estado** | Backlog | | **Story Points** | 26 | | **Sprint(s)** | Sprint 5-6 | --- ## Descripcion Modulo de generacion y gestion de cotizaciones para servicios de reparacion. Permite crear cotizaciones basadas en diagnosticos, con desglose de mano de obra, refacciones, y tiempos estimados. Incluye flujo de aprobacion por parte del cliente y conversion a orden de servicio. --- ## Objetivo de Negocio - Profesionalizar presentacion de presupuestos - Reducir tiempo de cotizacion de 30min a 5min - Aumentar tasa de aprobacion con cotizaciones claras - Registro de cotizaciones para seguimiento comercial - Base para facturacion posterior --- ## Historias de Usuario | ID | Historia | Prioridad | SP | Estado | |----|----------|-----------|-----|--------| | US-MMD006-001 | Como recepcionista, quiero crear cotizacion desde diagnostico para presentar al cliente | P0 | 5 | Backlog | | US-MMD006-002 | Como recepcionista, quiero agregar servicios con precio de catalogo para cotizar rapidamente | P0 | 3 | Backlog | | US-MMD006-003 | Como recepcionista, quiero agregar refacciones con costo y margen para incluir en cotizacion | P0 | 5 | Backlog | | US-MMD006-004 | Como recepcionista, quiero aplicar descuento a cotizacion para negociar con cliente | P1 | 3 | Backlog | | US-MMD006-005 | Como recepcionista, quiero generar PDF de cotizacion profesional para enviar al cliente | P0 | 5 | Backlog | | US-MMD006-006 | Como cliente, quiero aprobar/rechazar cotizacion para autorizar trabajos | P0 | 3 | Backlog | | US-MMD006-007 | Como recepcionista, quiero convertir cotizacion aprobada en orden de servicio | P0 | 2 | Backlog | **Total Story Points:** 26 SP --- ## Flujo de Cotizacion ``` ┌─────────────────┐ │ DIAGNOSTICO │ ← Origen de la cotizacion └────────┬────────┘ │ ▼ ┌─────────────────┐ │ BORRADOR │ ← Se agregan servicios y refacciones └────────┬────────┘ │ ▼ ┌─────────────────┐ │ ENVIADA │ ← Se envia al cliente (PDF/WhatsApp) └────────┬────────┘ │ ┌────┴────┐ ▼ ▼ ┌───────┐ ┌───────────┐ │APROBADA│ │ RECHAZADA │ └───┬───┘ └───────────┘ │ ▼ ┌─────────────────┐ │ ORDEN SERVICIO │ ← Conversion automatica └─────────────────┘ ``` **Estados adicionales:** - `VENCIDA` - Cotizacion paso su vigencia sin respuesta - `MODIFICADA` - Cliente solicito cambios --- ## Criterios de Aceptacion de la Epica **Funcionales:** - [ ] Crear cotizacion desde diagnostico o desde cero - [ ] Agregar servicios del catalogo con precio - [ ] Agregar refacciones con costo y margen - [ ] Aplicar descuento global o por linea - [ ] Calcular subtotal, IVA, total automaticamente - [ ] Generar PDF con formato profesional - [ ] Enviar por email/WhatsApp - [ ] Registro de aprobacion/rechazo - [ ] Convertir a orden de servicio **No Funcionales:** - [ ] Generacion de PDF < 3 segundos - [ ] Cotizacion vigente por 15 dias (configurable) **Tecnicos:** - [ ] Integracion con modulo Diagnosticos - [ ] Integracion con modulo Ordenes - [ ] Integracion con modulo Inventario (precios) - [ ] Template de PDF configurable --- ## Estructura de Cotizacion ```typescript interface Quote { id: string; folio: string; // COT-2025-0001 vehicle_id: string; // Vehiculo a cotizar client_id: string; // Cliente diagnostic_id?: string; // Diagnostico origen (opcional) // Items services: QuoteService[]; // Servicios parts: QuotePart[]; // Refacciones // Totales subtotal_services: number; subtotal_parts: number; discount: number; discount_type: 'percent' | 'amount'; subtotal: number; iva: number; total: number; // Metadata validity_days: number; // Dias de vigencia expires_at: Date; status: QuoteStatus; notes: string; created_at: Date; approved_at?: Date; approved_by?: string; // Nombre de quien aprueba } interface QuoteService { service_id: string; description: string; quantity: number; unit: string; unit_price: number; discount?: number; total: number; } interface QuotePart { part_id: string; description: string; quantity: number; unit: string; cost: number; // Costo interno price: number; // Precio al cliente margin_percent: number; // Margen aplicado total: number; } ``` --- ## Dependencias **Esta epica depende de:** | Epica/Modulo | Estado | Bloqueante | |--------------|--------|------------| | EPIC-MMD-001 Fundamentos | Backlog | Si | | EPIC-MMD-003 Diagnosticos | Backlog | No | | EPIC-MMD-004 Inventario | Backlog | Si | | EPIC-MMD-005 Vehiculos | Backlog | Si | **Esta epica bloquea:** | Epica/Modulo | Razon | |--------------|-------| | EPIC-MME-007 Facturacion | Base para facturar | --- ## Desglose Tecnico **Database:** - [ ] Schema: `service_management` (compartido) - [ ] Tablas: 4 (quotes, quote_services, quote_parts, quote_log) - [ ] Funciones: 2 (calcular_totales, generar_folio) **Backend:** - [ ] Modulo: `quotes` - [ ] Entities: 3 (Quote, QuoteService, QuotePart) - [ ] Endpoints: 12+ - [ ] Tests: 20+ **Frontend:** - [ ] Paginas: 3 (QuotesList, QuoteDetail, QuoteForm) - [ ] Componentes: 8+ (QuoteLineItem, TotalsCard, PDFPreview, etc.) - [ ] Stores: 1 (quotesStore) --- ## Endpoints API | Metodo | Endpoint | Descripcion | |--------|----------|-------------| | GET | /api/quotes | Listar cotizaciones | | POST | /api/quotes | Crear cotizacion | | GET | /api/quotes/:id | Detalle cotizacion | | PATCH | /api/quotes/:id | Actualizar cotizacion | | POST | /api/quotes/:id/services | Agregar servicio | | POST | /api/quotes/:id/parts | Agregar refaccion | | POST | /api/quotes/:id/send | Enviar al cliente | | POST | /api/quotes/:id/approve | Aprobar | | POST | /api/quotes/:id/reject | Rechazar | | POST | /api/quotes/:id/convert | Convertir a orden | | GET | /api/quotes/:id/pdf | Generar PDF | --- ## Template PDF Cotizacion ``` ┌─────────────────────────────────────────────────┐ │ [LOGO] TALLER MECANICO DIESEL │ │ RFC: XXXX000000XXX │ │ Direccion, Tel, Email │ ├─────────────────────────────────────────────────┤ │ COTIZACION: COT-2025-0001 │ │ Fecha: 06/12/2025 Vigencia: 21/12/2025 │ ├─────────────────────────────────────────────────┤ │ CLIENTE: Transportes del Norte SA │ │ VEHICULO: Kenworth T680 2020 - ABC-123 │ │ MOTOR: Cummins ISX15 (serie: XXXXX) │ ├─────────────────────────────────────────────────┤ │ SERVICIOS │ │ ───────────────────────────────────────────── │ │ 1. Diagnostico computarizado 1 $500.00 │ │ 2. Reparacion bomba inyeccion 5h $2,250.00 │ │ │ │ REFACCIONES │ │ ───────────────────────────────────────────── │ │ 1. Kit reparacion bomba 1 $3,500.00 │ │ 2. Filtro diesel 2 $450.00 │ │ 3. Aceite motor 15W40 20L $1,800.00 │ ├─────────────────────────────────────────────────┤ │ Subtotal: $8,500.00 │ │ IVA 16%: $1,360.00 │ │ TOTAL: $9,860.00 │ ├─────────────────────────────────────────────────┤ │ NOTAS: │ │ - Tiempo estimado: 2 dias habiles │ │ - Garantia: 30 dias en mano de obra │ │ - Cotizacion valida por 15 dias │ ├─────────────────────────────────────────────────┤ │ ☐ APROBADO ☐ RECHAZADO │ │ │ │ Firma: ____________________ Fecha: ________ │ └─────────────────────────────────────────────────┘ ``` --- ## Riesgos | Riesgo | Probabilidad | Impacto | Mitigacion | |--------|--------------|---------|------------| | Precios desactualizados | Media | Medio | Sincronizar con catalogo | | Cotizaciones sin seguimiento | Alta | Medio | Alertas de vencimiento | | PDF mal formateado | Baja | Bajo | Preview antes de enviar | --- ## Definition of Ready (DoR) - [x] Historias de usuario definidas - [x] Flujo de estados claro - [x] Estructura de datos definida - [ ] Template PDF aprobado - [ ] Margenes de refacciones definidos ## Definition of Done (DoD) - [ ] CRUD de cotizaciones funcionando - [ ] Calculo de totales automatico - [ ] Generacion de PDF - [ ] Aprobacion/rechazo - [ ] Conversion a orden - [ ] Tests pasando --- ## Historial | Fecha | Cambio | Autor | |-------|--------|-------| | 2025-12-06 | Creacion de epica | Requirements-Analyst | --- **Creada por:** Requirements-Analyst **Fecha:** 2025-12-06 **Ultima actualizacion:** 2025-12-06