-- ---------------------------------------------------------------------------
-- O dinheiro contado no fechamento do caixa (03/11/2026, a fatia 70 da fila das
-- telas que faltam, PDV-CANCELAMENTO; a P0 de `docs/f3-relatorios/spec-ordem.md`,
-- secao 4.1, a pergunta 15 do dono).
--
--   mysql franquia_producao < scripts/migracao-caixa-valor-contado.sql
--
-- `caixas.valor_contado`, o dinheiro que o operador contou na gaveta ao fechar: com ele,
-- o relatorio de caixa mostra a quebra (contado menos a gaveta esperada). O tipo e o de
-- `valor_final`. NULO em todo caixa de antes, e ate o fechamento passar a pedir o valor.
--
-- SO A COLUNA, SEM ESCRITOR NEM DATA: quem a grava (o fechamento pelas duas telas, com o
-- campo obrigatorio) e a linha `valorContado` de `colunas_gravadas` entram na fatia 72
-- (PDV-GAVETA-CONTADA), num passo proprio que roda DEPOIS do codigo que grava (a nota 4
-- da fatia 70). Gravar a data aqui faria o relatorio dizer "gravado desde hoje" com a
-- coluna vazia, e a quebra nula pareceria registro.
--
-- NA COPIA LOCAL DESDE 03/11/2026, nos dois bancos (a resposta 83 do dono, a opcao (a)).
--
-- IDEMPOTENTE: o `ALTER` so roda se a coluna ainda nao existir. NAO COPIA A TABELA:
-- `ALGORITHM=INSTANT` (coluna anulavel, sem indice); se o servidor recusar, para com
-- erro sem mudar nada.
--
-- PARA DESFAZER: `ALTER TABLE caixas DROP COLUMN valor_contado;`
--
-- ---------------------------------------------------------------------------
-- ESTA MIGRACAO PRECISA ESTAR EM PRODUCAO ANTES DO PASSO 1 -- o passo 0 (D323). O codigo
-- antigo de producao nao a le nem a escreve.
-- ---------------------------------------------------------------------------

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

SET @sql = IF(@existe = 0,
    'ALTER TABLE caixas
       ADD COLUMN valor_contado double DEFAULT NULL
       COMMENT ''O dinheiro contado na gaveta ao fechar. NULL = sem registro.''
       AFTER valor_final,
       ALGORITHM=INSTANT',
    'SELECT ''caixas: coluna ja existe, nada a fazer'' AS aviso'
);

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

-- Conferencia. O esperado: nenhum caixa com o valor contado.
SELECT COUNT(*) AS caixas, SUM(valor_contado IS NOT NULL) AS com_contado FROM caixas;
