-- ═══════════════════════════════════════════════════════════════════════
-- 2026-10-26_01 · Pagos a proveedores salen de una cuenta de fondos
-- ═══════════════════════════════════════════════════════════════════════
-- Al registrar el pago de una recepción (/compras/pagos) se elige la cuenta
-- (caja general o banco) de la que sale; queda en cuenta_movimiento como
-- 'pago_proveedor' por lo que se paga de verdad (monto − IVA retenido).
-- Anular el pago borra el movimiento (el saldo vuelve). Una recepción tiene a
-- lo sumo un pago vigente: id_recepcion es UNIQUE.
-- No había pagos registrados al aplicar esta migración.
--
-- Respaldo: backups/tinsa_db_pre-pago-proveedor-cuenta_2026-10-26.sql
-- Reversa:  database/rollback/2026-10-26_01_pago_proveedor_cuenta.down.sql
-- ═══════════════════════════════════════════════════════════════════════

USE tinsa_db;

ALTER TABLE cuenta_movimiento
  DROP CONSTRAINT chk_movimiento_signo,
  MODIFY tipo ENUM('cobro','reposicion','pago_proveedor','transferencia','ingreso','egreso') NOT NULL,
  ADD COLUMN id_recepcion INT UNSIGNED DEFAULT NULL COMMENT 'recepción de orden de compra pagada' AFTER id_reposicion,
  ADD UNIQUE KEY uq_movimiento_recepcion (id_recepcion),
  ADD CONSTRAINT fk_movimiento_recepcion FOREIGN KEY (id_recepcion) REFERENCES orden_compra_recepcion (id) ON DELETE CASCADE ON UPDATE CASCADE,
  ADD CONSTRAINT chk_movimiento_signo CHECK ((tipo IN ('cobro','ingreso') AND monto > 0) OR (tipo IN ('reposicion','pago_proveedor','egreso') AND monto < 0) OR tipo = 'transferencia');
