# US-MGN-004-006-002: Validar Factura de Proveedor y Generar Asiento **RF Asociado:** [RF-MGN-004-006](../../02-modelado/requerimientos-funcionales/mgn-004/RF-MGN-004-006-gestión-de-facturas-de-proveedor.md) **Módulo:** MGN-004 - Financiero Básico **Epic:** Facturas de Proveedor **Prioridad:** P0 (MVP) **Story Points:** 5 **Sprint:** Sprint 11 **Estado:** Ready for Development **Fecha:** 2025-11-24 --- ## User Story **Como** usuario de compras o contador, **Quiero** validar facturas de proveedor draft, **Para** contabilizarlas y generar asiento contable automático. --- ## Descripción Detallada Al validar factura proveedor: - State: draft → open - Asiento contable generado: - Débito: Cuentas de Gasto (product.expense_account) por subtotal de cada línea - Débito: Impuestos (tax.paid_account) por impuestos - Crédito: Cuentas por Pagar (partner.payable_account) por total --- ## Criterios de Aceptación ### Escenario 1: Validar y generar asiento **Dado que** factura proveedor draft, subtotal=1000, IVA 21%=210, total=1210, **Cuando** valido, **Entonces** asiento: - Débito: Gastos 1000 - Débito: IVA a Recuperar 210 - Crédito: Cuentas por Pagar 1210 ### Escenario 2: Calcular due_date **Dado que** invoice_date + payment_term, **Cuando** valido, **Entonces** due_date calculado correctamente. --- ## Reglas de Negocio - **RN-1:** Solo draft pueden validarse. - **RN-2:** Asiento débito a gastos, crédito a payables. - **RN-3:** Facturas open son inmutables. --- ## Tareas Técnicas ### Backend - [ ] POST /vendor-invoices/:id/validate - [ ] Service: VendorInvoiceService.validate() - [ ] Service: VendorInvoiceService.generateJournalEntry() - [ ] Generar asiento con estructura correcta - [ ] Unit tests (8 test cases) ### Frontend - [ ] Botón Validar - [ ] Modal confirmación - [ ] E2E test --- ## Estimación: 9 horas = 5 SP --- ## Referencias - [RF-MGN-004-006](../../02-modelado/requerimientos-funcionales/mgn-004/RF-MGN-004-006-gestión-de-facturas-de-proveedor.md)