REGISTRO DE DEBITOS -- docs/debitos-tecnicos.md 746 debitos, e 2 remissao(oes) que nao entram na conta. fechado 544 72.9% o defeito nao existe mais medido 1 0.1% o numero existe e esta escrito; o defeito continua de pe preparado 58 7.8% o conserto esta pronto e desligado, esperando a janela do corte parcial 63 8.4% parte fechada, parte nao -- e o titulo diz qual adiado 14 1.9% deixado para depois por decisao de quem manda, nao por esquecimento aberto 66 8.8% sem marca nenhuma no titulo NAO ESTAO MAIS DE PE: 616 de 746 (82.6%) -- fechado, preparado ou adiado por decisao. CONTINUAM DE PE: 130 -- 66 abertos, 1 medidos sem conserto, 63 parciais. OS QUE NAO SAO 'fechado' NEM 'aberto', um a um, porque sao os que a contagem de dois baldes erra: medido D65 98 colunas onde a anotação e o banco discordam sobre aceitar nulo — e um SEGUNDO eixo, o tip preparado D1 Arquivos com dados pessoais expostos no webroot — PREPARADO, lido em 05/10/2026 preparado D2 Endpoint público de migração de senhas — PREPARADO, lido em 05/10/2026 preparado D3 Rotação das oito credenciais — PARCIAL em 03/10/2026: a chave do Asaas saiu do código; a rot preparado D6 Banco em utf8mb3 (não armazena emoji) — PREPARADO, lido em 05/10/2026 preparado D9 Credencial do sistema de BI — REDUZIDO A UM RESÍDUO em 09/09/2026 — PREPARADO, lido em 05/10 preparado D11 `laminas-cache` trava a atualização do PHP — PREPARADO em 08/11/2026: o lock aceita do 8.1 a preparado D16 Endpoints retornam 500 em vez de erro tratado — CORRIGIDO em 14/09/2026 — PREPARADO, lido em preparado D26 Dois eventos agendados dentro do banco — PREPARADO em 07/11/2026: as duas limpezas viraram r preparado D34 O inventário de diretórios de upload estava incompleto — PARCIAL em 14/09/2026: o repositóri preparado D40 O dashboard de colaboradores tem linhas duplicadas e divergentes — PREPARADO em 15/09/2026 preparado D48 A aplicação conecta como superusuário, e isso desliga o RLS inteiro — PREPARADO, lido em 05/ preparado D54 A coluna `pontuacao_validade_dias` precisa existir em produção ANTES do corte — PREPARADO, l preparado D44 A trava contra execução simultânea é usada em 6 rotinas, não 4 — e o teste do dashboard fica preparado D42 PHP e MySQL discordam sobre que dia é, três horas por dia — CORRIGIDO E COM PORTÃO em 13/09/ preparado D39 A view `v46` existe em produção e ninguém sabe para quê — PREPARADO, lido em 05/10/2026 preparado D71 87 linhas de royalties duplicadas, e o `SUM` só acerta por acidente — PREPARADO em 13/09/202 preparado D74 O CEP passou a vir do ViaCEP, e o dicionario virou cache — FEITO em 31/08/2026 — PREPARADO, preparado D88 Um código mestre resgatava a pontuação de qualquer cliente — CORRIGIDO em 03/09/2026 — PREPA preparado D98 As 22 rotinas de cron rodam no PostgreSQL, e duas morriam por outro motivo — PREPARADO, lido preparado D119 No dia do corte, a busca de cliente deixa de achar 8,5% das pessoas — PREPARADO E DESLIGADO preparado D124 A mesma pergunta, três listas de números diferentes: o grupo decidido por id — CORRIGIDO em preparado D161 A finalização baixa estoque sem conferir saldo, e ele fica negativo — CORRIGIDO em 09/09/202 preparado D162 O endpoint de pagamento não tem três recusas que a tela velha tinha — CORRIGIDO em 10/09/202 preparado D181 As fixtures apagaram 2,3 milhões de linhas de `vendas_pagamentos` da cópia, e ninguém viu po preparado D189 A grade da agenda lê 241.218 linhas para devolver 189, e o conserto tem duas metades que con preparado D198 A configuração de sessão é declarada e nunca aplicada: o cookie sai sem `SameSite` e sem `Ht preparado D220 Achar a família de um agendamento varre a tabela inteira — ANOTADO em 23/09/2026 — MEDIDO em preparado D227 A API do caixa pedia um privilégio que nenhuma tela do ERP usa — CORRIGIDO em 26/09/2026 — P preparado D271 Mudar o desconto ou o produto da campanha muda os cupons já emitidos — REGISTRADO em 28/09/2 preparado D284 Cancelar uma venda estorna REAIS da pontuação, e não os pontos que ela deu — CORRIGIDO em 01 preparado D285 Comprar e devolver crédito não são idempotentes: o pedido repetido cria duas vendas — PARCIA preparado D289 A gravação do privilégio mexia numa linha e deixava a gêmea concedendo — CORRIGIDO em 29/09/ preparado D296 Em Arquivos, o endereço do link virava caminho em disco: o download entregava a configuração preparado D308 O "cliente novo" do painel lê cada venda pela tabela, e um índice de três colunas tira essa preparado D312 Os pontos da indicação vão para a coluna da unidade de quem indicou, e a linha do histórico preparado D323 O passo 0 do corte não cobre todas as mudanças de esquema feitas desde o dump de produção — preparado D331 O crontab de produção não lê a resposta das rotinas, e manda o token na URL: o 401 do D4 só preparado D355 O nginx entrega os 109 arquivos da biblioteca sem sessão, pelo nome, e desativar um deles nã preparado D364 Dois dias de retrato de royalties ficaram zerados sem alarme, e R$ 7.438,12 de royalty nunca preparado D368 A taxa de royalty não tem vigência nem autor: o retrato recalcula ontem e hoje com a taxa no preparado D372 Concluir um curso da VIP Class grava uma linha a cada envio aprovado: 191 conclusões repetid preparado D374 Gravar um molde de privilégio num par de grupo e funcionalidade que já tem molde: o MySQL ac preparado D419 Depois do D303, a campanha que falha no primeiro destinatário fica "enviando" e a tela não a preparado D430 O passo 3 do corte apagava `estados`, e o ERP antigo monta dela o campo obrigatório de UF — preparado D453 Tirar da venda o item que gastou a sessão do pacote deixa o outro do mesmo serviço pelo preç preparado D561 Os sorteios só davam um cupom por venda, e o dono pediu o cupom por valor e por serviço — RE preparado D618 A busca das campanhas por título e por texto acha sem acento no MySQL, e no PostgreSQL só co preparado D622 No PostgreSQL, a chave de `colunas_gravadas` é só o nome: um segundo inquilino não grava a d preparado D630 `produtos_estoque.data_criacao` não tem índice, e o mês da Retirada lê a tabela inteira — RE preparado D632 O motivo "Convênio …" em venda que não guarda o convênio: os Descontos o contam numa linha " preparado D648 Uma pesquisa de NPS por venda avaliada, e não por envio do formulário — REGISTRADO em 28/10/ preparado D697 A regra da Carteira passa de 1 s na rede no MySQL e fica no limite no PostgreSQL, e o índice preparado D698 O consumo do cadastro está atrasado em 4.477 clientes ativos, e é ele que o filtro de consum preparado D701 A permissão das Datas da equipe segue com o nome "Relatórios de aniversariante" no cadastro preparado D707 O cliente sem venda finalizada fica com o consumo nulo pela rotina e com zero pelo refazer d preparado D710 A tela antiga de Contas a Pagar continua no ERP ao lado da nova, e quando ela sai é do dono preparado D715 VIP Class do aluno: a página do ERP convive com a nova, e a saída dela espera o dono — REGIS preparado D746 Os assistentes falam com a API da Anthropic só pela porta do servidor: ninguém a chama, e a parcial D4 Autenticação fraca nos endpoints de cron — CORRIGIDO em 03/10/2026 no código: o token saiu d parcial D14 Rota V1 de agendamento aponta para ação inexistente — PARCIAL em 07/10/2026: a raiz `/mod-ve parcial D10 Cobertura de testes limitada ao núcleo financeiro — REENQUADRADO em 11/09/2026: deixou de se parcial D50 A rotina que sinaliza contratos a renovar não é agendada, e o filtro devolve sempre vazio — parcial D53 `clientes_creditos.pontuacao_validade` é fóssil da implementação anterior da mesma regra, e parcial D61 Seis endpoints que mudam estado só têm contrato do caso vazio — OS SEIS COBERTOS em 11/09/20 parcial D41 As campanhas por WhatsApp deixam 3.473 pessoas sem parabéns por ano — PARCIAL, lido em 05/10 parcial D37 Produção não está sob controle de versão — PARCIAL em 08/11/2026: o roteiro de publicar está parcial D36 `app.json` é configuração morando em arquivo — PARCIAL em 20/10/2026: um gravador só, e a te parcial D33 Arquivos ficam fora do failover — PARCIAL, lido em 05/10/2026 — PARCIAL em 08/11/2026: a fot parcial D31 Logins e CPFs duplicados em produção — PARCIAL em 08/10/2026: os logins e e-mails repetidos parcial D32 Números de telefone de balcão contaminam a base — PARCIAL, lido em 05/10/2026 — PARCIAL em 1 parcial D29 Nenhuma restrição de unicidade em todo o banco — PARCIAL, lido em 05/10/2026 parcial D67 Nove chamadas de rede sem tempo limite — 7 CORRIGIDAS em 31/08/2026, 2 congeladas — PARCIAL parcial D77 O gerador trocado; os valores ja emitidos e que esperam decisao — PARCIAL, lido em 05/10/202 parcial D84 A F1.7 vai para a homologação — DECIDIDO em 02/09/2026 — PARCIAL, lido em 05/10/2026 parcial D86 A autorização da venda em fiado não autoriza: é um aviso no navegador — PARCIAL em 02/09/202 parcial D105 Um item de menu levava a lugar nenhum, e o portão que nasceu disso lia 15% dos links — PARCI parcial D111 O fechamento da agenda era validado no navegador, e o servidor aceitava o que viesse — CORRI parcial D113 Trinta e um relatórios verdes, e nenhum deles precisava mostrar nada — CORRIGIDO em 06/09/20 parcial D115 O servidor do CI morreu no meio da varredura, uma vez, depois do XLS de clientes — instrumen parcial D131 A conferência de privilégio do ERP é opt-in, e 34 ações ainda não optam — PARCIAL em 08/09/2 parcial D165 A autorização de fiado sobrevive ao fiado que a motivou — CORRIGIDO na API nova em 10/09/202 parcial D177 A cobertura era medida por NOME de método, e nome não é método: 179 pares atrás de 140 nomes parcial D194 Fechar a agenda perguntava os agendamentos do dia com a hora do RELÓGIO, recebia zero, e blo parcial D203 As telas do ERP imprimem texto do banco sem escape, e isso anula a proteção do POST — PARCIA parcial D214 Com convênio, o motivo do desconto do PDV é apagado pelo nome do convênio — ANOTADO em 23/09 parcial D219 A trava da remarcação só valia entre duas remarcações: as outras escritas gravavam sem confe parcial D306 Os relatórios que ficaram fora da primeira lista do dono voltam à mesa antes de fechar a eta parcial D307 As rotinas noturnas dos painéis antigos gravam números errados em cinco pontos — REGISTRADO parcial D321 A tela do PDV antigo finalizava a mesma venda de novo: 1.154 vendas na cópia, 52 com o débit parcial D322 As telas da Fase 3 vistas pelas prévias do Claude Design: os defeitos que ficaram — REGISTRA parcial D342 Três telas apagam os vínculos e os regravam um a um, sem transação: uma falha no meio abre o parcial D349 No PostgreSQL, quem digita o login com uma letra maiúscula não entra, e o cadastro aceita "U parcial D350 As configurações da unidade e a chave do WhatsApp viajam copiadas na sessão e na fila: troca parcial D353 A troca da imagem do banner acontece fora de ordem: o envio que falha apaga o banner que exi parcial D360 Nada impede o ambiente local de chamar o provedor de WhatsApp, e duas unidades de fixture tê parcial D370 O PDV pode gravar dois cupons da mesma venda no mesmo sorteio, e nenhum dos dois bancos tem parcial D377 Os defeitos menores que os desenhos das telas mandam só registrar, sem fatia que os conserte parcial D431 O laboratório de migração, como a documentação o ensina, divide portas e `local.php` com a h parcial D440 O portão do relógio nos testes não vê `new DateTimeImmutable('+1 day')`, e dois testes leem parcial D447 Filtros de tela que leem a data da URL sem conferir: a data torta derruba o PostgreSQL — REG parcial D461 A troca do push pelo Firebase: o envio está pronto, e faltam os aparelhos, as chaves e o apl parcial D478 A mensagem de WhatsApp que falhou fica na fila sem a causa nem a hora, e nada a limpa — REGI parcial D481 A etapa 1 da adesão troca o telefone sem o teto dos 10 cadastros — REGISTRADO em 13/10/2026; parcial D495 Seis textos que a API grava não passam pela RegraDoTexto, e aceitam `<`, `>` e caractere de parcial D515 As gêmeas que a produção ainda tem até o passo 3 do corte ficaram sem caso no banco: a suíte parcial D516 Um número de rota maior que o `integer` da coluna dá 500 no PostgreSQL, e não 404, na `/adm/ parcial D530 Na lista de unidades do cadastro, duas unidades diferentes podem ter o mesmo rótulo — REGIST parcial D550 A versão do aplicativo podia ser baixada sem aviso — REGISTRADO em 20/10/2026 — PARCIAL em 2 parcial D634 As Vendas Canceladas da rede leem a base de dois meses: de 1,50 a 2,17 s fria e 238,5 MB de parcial D641 O período padrão da tela antiga dos Royalties se inverte em 7 dias do ano — REGISTRADO em 28 parcial D642 A linha da rede da tela antiga dos Royalties soma as taxas do crédito das unidades — REGISTR parcial D645 A tela de Faturas do gerente deixa em branco duas situações do Asaas — REGISTRADO em 28/10/2 parcial D652 O TXT antigo do NPS sai da lista guardada na sessão, e não do pedido — REGISTRADO em 28/10/2 parcial D653 As faixas antigas do NPS se sobrepõem no 8 e têm vãos na média — REGISTRADO em 28/10/2026 — parcial D658 O convite do aplicativo muda de unidade na primeira compra do convidado — REGISTRADO em 29/1 parcial D660 Os clientes novos por indicação da rede levam de 18 a 20 s no MySQL da cópia, e o primeiro p parcial D670 O Atendimentos antigo mostrava a unidade inteira a quem não é gerente — REGISTRADO em 01/11/ parcial D671 A cota-parte tem quatro contas nos quatro arquivos de hoje — REGISTRADO em 02/11/2026 — PARC parcial D694 A última visita do cadastro não volta quando a venda é cancelada — REGISTRADO em 03/11/2026 parcial D728 O ensaio geral do corte não roda as migrações do passo 3 que apagam linha, e a carga da cópi parcial D738 A venda guarda um convênio sem nenhum item com o desconto dele: a comanda trocada de cliente adiado D59 A API do aplicativo não autentica, e um telefone devolve o CPF — PARCIAL, lido em 05/10/2026 adiado D91 A API do aplicativo aceita AGIR EM NOME de qualquer cliente — PARCIAL, lido em 05/10/2026 — adiado D167 Sobraram linhas de fixture dentro da cópia anonimizada de produção — RÉGUAS FILTRADAS e PORT adiado D174 O contrato congelado descreve `data_venda` como texto, e a produção sempre manda nulo — ANOT adiado D175 A ordem alfabética de uma lista muda entre os dois bancos, e não é por acento — ANOTADO em 1 adiado D218 O arquivo de exclusões não distingue remarcação de cancelamento — ANOTADO em 23/09/2026 adiado D221 Remarcar não acompanha a comanda aberta — ANOTADO em 23/09/2026 adiado D225 O anonimizador deixava o nome, o telefone e o e-mail reais na busca e em texto — CORRIGIDO n adiado D237 Treze ações do ERP antigo aceitam um id ou uma unidade de outra franquia, sem conferir — PAR adiado D583 O registro de quem abre os arquivos guarda dado de funcionário sem prazo de guarda, sem regr adiado D606 LGPD dos envios de marketing: o aceite de quem os recebe, e por quanto tempo fica o rol de q adiado D607 SMS fora, a mando do dono: 13 mensagens de 2020 a 2023, e o tipo que nenhuma tela cria — REG adiado D682 A tela antiga da Retirada de Produtos soma o acerto de inventário, a perda e o vencimento co adiado D685 A Retirada vale pelo preço de compra de hoje o que veio antes da gravação, e não como "sem r REMISSOES (fora da conta): D30 Dinheiro em ponto flutuante — MESMO DEFEITO DO D49 o titulo termina em "MESMO DEFEITO DO D49", que nao e conserto: e ponteiro. O defeito -- 85 campos de dinheiro em ponto flutuante -- continua aberto no D49, e a resolucao dos dois esta adiada para depois do corte D83 A F1.1 vai para a homologação — DECIDIDO em 02/09/2026 — REMISSÃO ao D1, D2, D3 e D7, lido em 05 e a DECISAO de 02/09/2026 de levar a F1.1 para a homologacao, e nao um defeito: a tabela do corpo manda cada pendencia para o D1, o D2, o D3 e o D7, que sao onde elas moram. Ate 05/10/2026 o titulo terminava em "DECIDIDO", que esta regua le como fechado