erp-core/docs/05-user-stories/mgn-007/US-MGN-007-001-001-crear-cotizacion.md

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

Referencias