-- Migration 051 — AP#11 / PRD-0007-EXT.
-- Adiciona colunas de reprovacao categorizada + ciclo de correcao em
-- agente_lote_resgate.
--
-- ESCOPO:
--
--   REPROVACAO CATEGORIZADA (refator das colunas legacy reprovado_motivo/em/by
--   da Migration 036): agora o motivo vem do cadastro agente_motivo_reprovacao
--   (FK) + observacao livre. A coluna reprovado_motivo VARCHAR(240) da 036
--   permanece como retrocompat (DESPRECIADA — preencher pelo backend so se
--   nao houver categoria); novos endpoints (resgate_reprovar.php refatorado)
--   exigem motivo_categoria_id + observacao.
--
--   CICLO DE CORRECAO (aprovacao parcial — 1 chance):
--     - `correcao_tentativas` TINYINT — contador (default 0; incrementa quando
--       parceiro reanexa via lote_correcao_anexar.php). >=1 BLOQUEIA novo
--       aprovado_parcial (resgate_aprovar.php valida com 409 SEM_PARCIAL_PERMITIDO).
--     - `correcao_aberta_em` — quando Tef.Net abriu a pendencia (transicao
--       pendente_aprovacao -> aprovado_parcial).
--     - `correcao_aberta_motivo_categoria_id` (FK) + `correcao_aberta_observacao` —
--       o que precisa ser corrigido.
--
-- POSICAO DAS COLUNAS:
--   AFTER reprovado_motivo (existe desde Migration 036) — mantem agrupamento
--   logico das colunas de reprovacao/correcao na DESCRIBE.
--
-- FKs:
--   - ON DELETE SET NULL — se Tef.Net desativar/remover categoria, o lote
--     historico preserva apenas a observacao (texto livre) e perde o link
--     com a categoria. Soft delete (ativo=0) e a forma preferida; DELETE
--     fisico fica como fallback defensivo.
--   - InnoDB obrigatorio: agente_lote_resgate ja e InnoDB
--     (Migration 006); agente_motivo_reprovacao tambem (Migration 049).

SET SESSION sql_mode = '';

ALTER TABLE agente_lote_resgate
  ADD COLUMN reprovado_motivo_categoria_id INT NULL
    COMMENT 'AP#11 — FK agente_motivo_reprovacao.id; substitui reprovado_motivo (texto livre) como fonte canonica.'
    AFTER reprovado_motivo,
  ADD COLUMN reprovado_observacao TEXT NULL
    COMMENT 'AP#11 — Observacao detalhada (5-1000 chars) obrigatoria pelo endpoint resgate_reprovar.php.'
    AFTER reprovado_motivo_categoria_id,
  ADD COLUMN correcao_tentativas TINYINT NOT NULL DEFAULT 0
    COMMENT 'AP#11 — Contador de correcoes ja aceitas. >=1 bloqueia novo aprovado_parcial (regra dura: 1 chance).'
    AFTER reprovado_observacao,
  ADD COLUMN correcao_aberta_em DATETIME NULL
    COMMENT 'AP#11 — Quando Tef.Net abriu a pendencia (transicao -> aprovado_parcial).'
    AFTER correcao_tentativas,
  ADD COLUMN correcao_aberta_motivo_categoria_id INT NULL
    COMMENT 'AP#11 — FK agente_motivo_reprovacao.id (motivo da pendencia de correcao).'
    AFTER correcao_aberta_em,
  ADD COLUMN correcao_aberta_observacao TEXT NULL
    COMMENT 'AP#11 — O que precisa ser corrigido (obrigatorio quando decisao=parcial).'
    AFTER correcao_aberta_motivo_categoria_id;

ALTER TABLE agente_lote_resgate
  ADD CONSTRAINT fk_alr_rep_motivo_cat
    FOREIGN KEY (reprovado_motivo_categoria_id)
    REFERENCES agente_motivo_reprovacao(id)
    ON DELETE SET NULL,
  ADD CONSTRAINT fk_alr_cor_motivo_cat
    FOREIGN KEY (correcao_aberta_motivo_categoria_id)
    REFERENCES agente_motivo_reprovacao(id)
    ON DELETE SET NULL;
