3.0 KiB
US-MGN-006-001-001: Crear Solicitud de Cotización (RFQ)
RF Asociado: RF-MGN-006-001 Módulo: MGN-006 - Compras Básico Epic: Solicitudes de Cotización Prioridad: P0 Story Points: 3 Sprint: Sprint 12 Estado: Ready for Development Fecha: 2025-11-24
User Story
Como usuario de compras, Quiero crear solicitudes de cotización (RFQ) para múltiples proveedores, Para comparar precios y condiciones antes de generar órdenes de compra.
Descripción Detallada
Una RFQ (Request for Quotation) es una solicitud formal a proveedores para cotizar productos. Incluye:
- Proveedor(es) destinatarios
- Líneas con productos y cantidades solicitadas
- Fecha esperada de respuesta
- Términos y condiciones
- Estado: draft, sent, received, cancelled
Criterios de Aceptación
Escenario 1: Crear RFQ en draft (Camino Feliz)
Dado que soy usuario con permiso purchase_user, Cuando creo RFQ: partner_id=1, lines=[{product_id:1, qty:10}, {product_id:2, qty:5}], expected_date="2024-02-01", Entonces el sistema crea RFQ en estado draft con número RFQ/2024/0001.
Escenario 2: Validar proveedor es supplier
Dado que partner_id=5 tiene is_supplier=false, Cuando intento crear RFQ, Entonces el sistema retorna error 400 "El partner seleccionado no es proveedor".
Escenario 3: Generar número secuencial
Dado que creo una RFQ, Cuando guardo, Entonces el sistema genera número único: RFQ/2024/{seq:05d}.
Reglas de Negocio
- RN-1: RFQ se crean en estado draft.
- RN-2: Partner debe tener is_supplier=true.
- RN-3: Número secuencial único por empresa.
- RN-4: RFQ draft pueden editarse y eliminarse.
Tareas Técnicas
Backend
- Endpoint: POST /api/v1/purchase/rfqs
- Service: RFQService.create(createRFQDto)
- DTO: CreateRFQDto, RFQLineDto
- Validar proveedor es supplier
- Generar número secuencial
- Unit tests (>80%)
- Integration tests
- Swagger docs
Frontend
- Componente: CreateRFQForm.tsx
- Selector de proveedor (solo suppliers)
- Tabla editable de líneas
- API client: rfqApi.create()
- Component tests
- E2E test
Database
- Tabla: purchase.rfqs
- Tabla: purchase.rfq_lines
- Índices: idx_rfqs_partner_id, idx_rfqs_state
- RLS policy: company_isolation
Estimación Detallada
| Tarea | Horas |
|---|---|
| Backend | 1.5 |
| Frontend | 2 |
| Testing | 1 |
| Code Review | 0.5 |
| TOTAL | 5 horas = 3 SP |
Definition of Done
- Código implementado según ET
- Tests pasando (>80%)
- Code review aprobado
- QA validado
- PO aprobado