# US-MGN-004-007-003: Cancelar Pago

**RF Asociado:** [RF-MGN-004-007](../../02-modelado/requerimientos-funcionales/mgn-004/RF-MGN-004-007-gestión-de-pagos-y-conciliación.md)
**Módulo:** MGN-004 - Financiero Básico
**Epic:** Pagos y Conciliación
**Prioridad:** P0 (MVP)
**Story Points:** 3
**Sprint:** Sprint 12
**Estado:** Ready for Development
**Fecha:** 2025-11-24

---

## User Story

**Como** usuario tesorería,
**Quiero** cancelar pagos registrados,
**Para** anular pagos erróneos y revertir asiento contable y conciliaciones.

---

## Descripción Detallada

Cancelar pago genera asiento de reversión, elimina conciliaciones, actualiza facturas a state='open', y marca payment.state='cancelled'.

---

## Criterios de Aceptación

### Escenario 1: Cancelar pago
**Dado que** payment.state='posted',
**Cuando** POST /payments/:id/cancel con reason,
**Entonces** state='cancelled', asiento reversión, conciliations eliminadas, facturas reabiertas.

### Escenario 2: Reabrir facturas conciliadas
**Dado que** pago tenía factura conciliada (paid),
**Cuando** cancelo pago,
**Entonces** factura.state='open', amount_residual recalculado.

---

## Reglas de Negocio

- **RN-1:** Solo pagos posted pueden cancelarse.
- **RN-2:** Asiento reversión automático.
- **RN-3:** Eliminar conciliations.
- **RN-4:** Reabrir facturas.

---

## Tareas Técnicas

### Backend
- [ ] POST /payments/:id/cancel
- [ ] Service: PaymentService.cancel()
- [ ] Eliminar conciliations
- [ ] Actualizar invoice.state y amount_residual
- [ ] Unit tests (6 test cases)

---

## Estimación: 6 horas = 3 SP

---

## Referencias

- [RF-MGN-004-007](../../02-modelado/requerimientos-funcionales/mgn-004/RF-MGN-004-007-gestión-de-pagos-y-conciliación.md)
