-- ═══════════════════════════════════════════════════════════════════════
-- 2026-10-22_03 · Categoría de contribuyente (grande / mediano / pequeño)
-- ═══════════════════════════════════════════════════════════════════════
-- Las reglas del 1 % (retención y percepción de IVA) dependen de la
-- categoría de TINSA y de la del cliente o proveedor (ver Factura::reglasIva):
--   · facturacion_emisor.agente_retencion: designado agente de retención
--     aunque no sea gran contribuyente (un gran contribuyente siempre lo es).
--     El usuario confirmó (2026-10-22) que TINSA es agente de retención.
--   · proveedor.tipo_contribuyente: misma escala que cliente; reemplaza la
--     marca gran_contribuyente creada en 2026-10-22_02.
--
-- Respaldo previo: backups/tinsa_db_pre-categorias_2026-10-22.sql
-- Reversa: database/rollback/2026-10-22_03_categorias_contribuyente.sql
-- ═══════════════════════════════════════════════════════════════════════

USE tinsa_db;

ALTER TABLE facturacion_emisor
  ADD COLUMN agente_retencion TINYINT(1) NOT NULL DEFAULT 0
      COMMENT 'designado agente de retención de IVA (los grandes contribuyentes lo son siempre)' AFTER tipo_contribuyente;
UPDATE facturacion_emisor SET agente_retencion = 1;

ALTER TABLE proveedor
  ADD COLUMN tipo_contribuyente ENUM('pequeno','mediano','grande') NOT NULL DEFAULT 'mediano' AFTER nrc;
UPDATE proveedor SET tipo_contribuyente = 'grande' WHERE gran_contribuyente = 1;
ALTER TABLE proveedor DROP COLUMN gran_contribuyente;
