-- ---------------------------------------------------------------------------
-- O envio da pesquisa de satisfacao: `nps.envio`, o mesmo numero em todas as linhas de `nps`
-- que um envio do formulario grava (o D648; o D-n1 de `docs/f3-relatorios/spec-nps.md`).
--
--   mysql franquia_producao < scripts/migracao-nps-envio.sql
--
-- Roda no laco do passo 0 de `docs/procedimento-de-corte.md`, em PRODUCAO (o passo 4 da
-- etapa 1, `docs/procedimento-de-corte-etapa-1.md`), e no laco da copia do
-- desenvolvimento de `docs/ensaio-geral-do-corte.md`, contra a `franquiabv_dev`. Nas duas
-- copias locais desde 07/11/2026 (a fatia 114, ESQUEMA-QUE-SO-ACRESCENTA; a resposta 83 (a) do
-- dono). O PostgreSQL da copia a recebe por `postgres/migracao-nps-envio.sql`; os bancos da
-- suite, o do contrato e a producao nascem do `postgres/schema.sql`.
--
-- POR QUE: o envio do formulario grava uma linha de `nps` por venda avaliada, com as mesmas
-- notas, cada uma com o seu relogio (`PesquisaNpsService::salvar`). O relatorio de NPS conta a
-- recepcao e a experiencia uma vez por ENVIO, e sem o numero o adivinha pela cadeia de 60 s (a
-- decisao E1, `ContasDoNps::envios`). Com a coluna, o servico grava o mesmo numero nas linhas de
-- um envio, e o relatorio agrupa por ele; a cadeia fica so para as linhas de antes, com a coluna
-- nula.
--
-- SO ACRESCENTA: coluna nula, sem padrao, sem indice e sem chave -- nula em toda linha de antes,
-- e nula para sempre nelas. `ALGORITHM=INSTANT`: nao copia a tabela. O codigo antigo de producao
-- nao a le nem a escreve; o novo a le e a escreve pela entidade (`ISCadastro\Entity\Nps`), e por
-- isso ela e condicao de subir: sem ela, toda leitura e gravacao de `nps` falha.
--
-- IDEMPOTENTE: com a coluna, nao faz nada. ENSAIADA em 07/11/2026 (a correcao da fatia 114), num banco
-- descartavel com a `nps` da copia sem a coluna (37.957 linhas): acrescenta em 0,07 s, as 37.957 com ela
-- nula, e a segunda vez "ja existe" em 0,04 s. Os dois ramos rodam a cada suite
-- (`EsquemaQueSoAcrescentaTest::testAMigracaoDoEnvioAcrescentaAColunaUmaVez`).
--
-- PARA DESFAZER: `ALTER TABLE nps DROP COLUMN envio;` (o relatorio volta a cadeia em todas).
--
-- ---------------------------------------------------------------------------
-- ESTA MIGRACAO PRECISA ESTAR EM PRODUCAO ANTES DO PASSO 1 -- o passo 0 (D323).
-- ---------------------------------------------------------------------------

SET @existe = (
    SELECT COUNT(*) FROM information_schema.columns
     WHERE table_schema = DATABASE()
       AND table_name = 'nps'
       AND column_name = 'envio'
);

SET @sql = IF(@existe = 0,
    'ALTER TABLE nps
       ADD COLUMN envio varchar(32) DEFAULT NULL
       COMMENT ''O envio do formulario: o mesmo em todas as linhas dele. NULL = de antes.''
       AFTER data,
       ALGORITHM=INSTANT',
    'SELECT ''nps: coluna envio ja existe, nada a fazer'' AS aviso'
);

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

SELECT COUNT(*) AS pesquisas, SUM(envio IS NOT NULL) AS com_envio FROM nps;
