2.4 KiB
US-MGN-007-001-001: Crear Cotización de Venta
RF Asociado: RF-MGN-007-001 Módulo: MGN-007 - Ventas Básico Epic: Cotizaciones Prioridad: P0 Story Points: 3 Sprint: Sprint 16 Estado: Ready for Development Fecha: 2025-11-24
User Story
Como vendedor, Quiero crear cotizaciones para clientes, Para presentar precios y condiciones antes de confirmar ventas.
Descripción Detallada
Cotización (quotation) es el documento preliminar de venta con: cliente, productos, cantidades, precios, descuentos, impuestos, total, validez. Estados: draft, sent, sale (confirmada), cancelled.
Criterios de Aceptación
Escenario 1: Crear cotización en draft (Camino Feliz)
Dado que creo cotización: customer_id=1, lines=[{product:1, qty:5, price:200}], validity_date="2024-02-15", Cuando guardo, Entonces sistema crea cotización draft con número QT/2024/0001, total calculado.
Escenario 2: Calcular totales automáticamente
Dado que línea tiene qty=5, price=200, discount=10%, tax=19%, Cuando guardo, Entonces sistema calcula subtotal=900, tax=171, total=1071.
Escenario 3: Validar cliente es customer
Dado que partner_id=5 tiene is_customer=false, Cuando intento crear, Entonces error 400 "Partner no es cliente".
Reglas de Negocio
- RN-1: Cotizaciones en draft, editables.
- RN-2: Total = suma(líneas) - descuentos + impuestos.
- RN-3: Número secuencial: QT/{year}/{seq}.
- RN-4: Partner debe ser customer.
Tareas Técnicas
Backend
- POST /api/v1/sales/quotations
- QuotationService.create(dto)
- Calcular totales automáticamente
- Unit/Integration tests
Frontend
- CreateQuotationForm.tsx
- Tabla líneas con cálculo automático
- E2E test
Database
- sales.quotations, sales.quotation_lines
- RLS company_isolation
Estimación Detallada
| Tarea | Horas | Backend | 1.5 | Frontend | 2 | Testing | 1 | TOTAL | 4.5h = 3 SP |
Definition of Done
- Código implementado según ET
- Tests >80%
- Code review aprobado
- QA/PO validado