-- ═══════════════════════════════════════════════════════════════════════
-- 2026-10-22_01 · Notas de crédito (05) y de débito (06)
-- ═══════════════════════════════════════════════════════════════════════
-- Las notas se emiten desde un comprobante de crédito fiscal (03) ya
-- emitido y quedan ligadas a él (`id_documento_relacionado`).
--   · Nota de crédito: rebaja lo que el cliente debe por ese crédito fiscal.
--     El total vigente de sus notas de crédito se guarda en el crédito fiscal
--     (`monto_acreditado`); su saldo = total_pagar − monto_acreditado − monto_pagado.
--   · Nota de débito: cargo adicional; se cobra por separado (tiene su propio saldo).
--
-- Respaldo previo: backups/tinsa_db_pre-notas-credito_2026-10-22.sql
-- Reversa: database/rollback/2026-10-22_01_notas_credito_debito.sql
-- ═══════════════════════════════════════════════════════════════════════

USE tinsa_db;

ALTER TABLE factura
  ADD COLUMN id_documento_relacionado INT(10) UNSIGNED DEFAULT NULL
      COMMENT 'nota de crédito/débito: el crédito fiscal al que modifica' AFTER id_oferta,
  ADD COLUMN monto_acreditado DECIMAL(14,2) NOT NULL DEFAULT 0.00
      COMMENT 'crédito fiscal: suma de sus notas de crédito vigentes' AFTER monto_pagado,
  ADD CONSTRAINT fk_factura_relacionado FOREIGN KEY (id_documento_relacionado) REFERENCES factura (id)
      ON DELETE RESTRICT ON UPDATE CASCADE;

-- Habilitar los dos tipos nuevos en el emisor
UPDATE facturacion_emisor
   SET tipos_habilitados = CONCAT_WS(',', NULLIF(tipos_habilitados, ''), '05', '06')
 WHERE FIND_IN_SET('05', tipos_habilitados) = 0;

-- Los tipos permitidos en factura incluyen ahora 05 y 06
ALTER TABLE factura DROP CONSTRAINT chk_factura_tipo;
ALTER TABLE factura ADD CONSTRAINT chk_factura_tipo CHECK (tipo_dte IN ('01','03','04','05','06','11','14'));
