-- ---------------------------------------------------------------------------
-- Desde quando o PDV grava cada coluna que os relatorios esperam:
-- `colunas_gravadas` (26/10/2026, a fatia 43 da fila das telas que faltam,
-- REL-CONSULTA-E-EXPORTACAO; a C2 de `docs/f3-relatorios/spec-comum.md` e a 1.5 de
-- `docs/f3-relatorios/spec-ordem.md`).
--
--   mysql franquia_producao < scripts/migracao-colunas-gravadas.sql
--
-- Roda no laco do passo 0 de `docs/procedimento-de-corte.md`, em PRODUCAO, e no
-- laco da copia do desenvolvimento de `docs/ensaio-geral-do-corte.md`, contra a
-- `franquiabv_dev`; os bancos da suite ja nascem com a tabela (`mysql.sql`, e o
-- `postgres/schema.sql` do gerador). NA COPIA LOCAL DESDE 26/10/2026, nos dois
-- bancos, pela resposta 83 do dono (a opcao (a): o esquema que so acrescenta entra
-- nas duas copias locais quando a resposta pedir). A base do teste do BVIP fica sem
-- ela ate a proxima copia exportada daqui, pela mao do dono.
--
-- O QUE ELA GUARDA. As perguntas 2, 9, 15 e 16 do dono (01/10/2026) e a I3 da
-- Indicacao pedem colunas que o PDV ainda nao grava -- quem cancelou e quando, quem
-- lancou o desconto manual, o motivo da retirada, o dinheiro contado no fechamento,
-- a cota do pacote, a adesao pelo formulario. Cada uma passa a ser gravada num dia,
-- que e diferente em cada ambiente: na copia, quando a migracao dela rodar; em
-- producao, no corte. Uma linha por coluna:
--
--   nome   a chave de `ISRelatorio\Regra\ColunasDoPdv` (`cancelamento`,
--          `descontoManual`, `motivoDaRetirada`, `valorContado`, `cotaDoPacote`,
--          `indicacaoDoFormulario`);
--   desde  o instante em que a migracao daquela coluna rodou, pelo relogio do banco.
--
-- O relatorio le as linhas uma vez por pedido (`ColunasDoPdv::desde`) e diz "gravado
-- desde dd/mm/aaaa; antes disso, sem registro" -- e o numero e nulo quando o periodo
-- inteiro e anterior a data. A data nao pode ser constante no codigo: diria em
-- producao a data da copia, com a coluna vazia ate o corte (a 1.5 do `spec-ordem.md`).
--
-- NASCE VAZIA, E ESTA MIGRACAO NAO GRAVA LINHA NENHUMA: cada migracao da fatia do PDV
-- grava a sua (`INSERT IGNORE`, o instante dela), depois de criar a coluna. Sem linha, o
-- relatorio diz que a coluna ainda nao e gravada. Nada aqui apaga linha.
--
-- SEM A TABELA (o que o passo 1 faria se esta linha fosse esquecida), o codigo pergunta
-- se ela existe (`ISBase\Doctrine\ColunaNoBanco`) e, sem ela, diz "ainda nao gravado"
-- em toda coluna, sem erro.
--
-- IDEMPOTENTE: `CREATE TABLE IF NOT EXISTS`. O DDL e o mesmo do `mysql.sql`, e o
-- portao do passo 0 compara os dois.
--
-- PARA DESFAZER: `DROP TABLE colunas_gravadas;` -- so enquanto ela estiver vazia; com
-- linha, a data de cada coluna se perde, e o relatorio volta a dizer "ainda nao
-- gravado" de coluna que ja e.
--
-- ---------------------------------------------------------------------------
-- ESTA MIGRACAO PRECISA ESTAR EM PRODUCAO ANTES DO PASSO 1 -- o passo 0 (D323).
--
-- O passo 1 refaz o `mysql.sql` a partir da estrutura de producao. Sem a tabela la,
-- ela some do `mysql.sql` e do `schema.sql`.
--
-- PARA O CODIGO DE PRODUCAO A TABELA VAZIA E INOFENSIVA: ele nao a le nem a escreve.
-- Cria-la nao copia tabela nenhuma, e ela nao tem chave estrangeira.
-- ---------------------------------------------------------------------------

CREATE TABLE IF NOT EXISTS `colunas_gravadas` (
  `nome` varchar(40) NOT NULL COMMENT 'A chave de ColunasDoPdv: cancelamento, descontoManual, motivoDaRetirada, valorContado, cotaDoPacote, indicacaoDoFormulario',
  `desde` datetime NOT NULL COMMENT 'O instante em que a migracao da coluna rodou neste ambiente',
  PRIMARY KEY (`nome`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;

-- Conferencia. O esperado: a tabela, com a chave primaria em `nome`, e zero linhas.
SELECT index_name                                         AS indice,
       GROUP_CONCAT(column_name ORDER BY seq_in_index)    AS colunas,
       MAX(non_unique)                                    AS nao_unico
  FROM information_schema.statistics
 WHERE table_schema = DATABASE()
   AND table_name = 'colunas_gravadas'
 GROUP BY index_name
 ORDER BY index_name;

SELECT COUNT(*) AS colunas_gravadas FROM colunas_gravadas;
