============================================================================== BUSCAS QUE PEDEM UMA LINHA SEM DIZER QUAL (D72) ============================================================================== selecionam linha, sem ordem: 0 linha de base: 0 com ORDER BY: 46 agregacoes (ordem nao muda): 27 dispensadas com motivo: 20 DISPENSADA module/ISCadastro/src/Entity/ClienteRepository.php::selecionarPorIdHash — o filtro fixa `cl.id`, que e a chave primaria: uma linha ou nenhuma, e o hash so decide qual das duas. DISPENSADA module/ISCadastro/src/Entity/ClienteSessaoRepository.php::porTokenHash — a segunda linha nao pode existir: o filtro e o sha256 INTEIRO de um token de 256 bits sorteado por random_bytes, e duas iguais significariam o gerador quebrado, nao empate de dados. DISPENSADA module/ISCadastro/src/Entity/PontuacaoHistoricoRepository.php::selecionarPorDescricao — o unico chamador faz `if (empty($historico))` -- quer saber SE existe, e qual linha volta nao muda decisao nenhuma. DISPENSADA module/ISCadastro/src/Service/ClienteService.php::comprarCreditoTravado — o operador tem um caixa aberto so: as duas portas abrem por `CaixaService::abrirSemDuplicar`, sob a trava da linha do usuario. E a mesma busca de `DevedorService::quitarSobTrava` e de `CaixaRepository::selecionarPorUsuario`. DISPENSADA module/ISCadastro/src/Service/ClienteService.php::creditoDevolucao — o operador tem um caixa aberto so: as duas portas abrem por `CaixaService::abrirSemDuplicar`, sob a trava da linha do usuario. E a mesma busca de `comprarCreditoTravado`, de `DevedorService::quitarSobTrava` e de `CaixaRepository::selecionarPorUsuario`. DISPENSADA module/ISCadastro/src/Service/DevedorService.php::quitarSobTrava — o operador tem um caixa aberto so: as duas portas abrem por `CaixaService::abrirSemDuplicar`, sob a trava da linha do usuario, e na copia de 26/09/2026 nenhum dos 139 caixas abertos tinha irmao. E a mesma busca de `CaixaRepository::selecionarPorUsuario`, que a finalizacao usa -- uma ordem so aqui faria as duas escolherem caixas diferentes se um dia houvesse dois. DISPENSADA module/ISConfiguracao/src/Entity/PesquisaRepository.php::selecionarPorFidelidade — a segunda linha nao pode existir: o unico escritor da marca e `PesquisaService::marcarParaAdesao`, que trava todas as pesquisas em ordem de id (`travarTodas`), le as marcadas com trava (`travarAsMarcadas`) e desmarca as outras na mesma transacao; a pesquisa nova nasce desmarcada. Um par herdado da tela antiga desfaz-se na proxima troca. O `PesquisasPelosControllersTest` fica vermelho sem a trava de todas (testATrocaTravaAPesquisaEAsMarcadasAntesDeLer; no PostgreSQL, tambem testDuasTrocasAoMesmoTempoDeixamUmaSoNaAdesao) ou sem o desmarcar das outras (testATrocaPoeAOutraETiraSoAMarcada). Ver D72. DISPENSADA module/ISConfiguracao/src/Entity/ProdutoRepository.php::pesquisarQuantidade — o filtro fixa `p.id`, que e a chave primaria; o `status` apenas pode zerar o resultado, nunca multiplica-lo. Ver D72. DISPENSADA module/ISConfiguracao/src/Entity/UnidadeRepository.php::getUnidadeColaboradoresServicos — o `setMaxResults(1)` abaixo pertence a DQL que filtra `uni.id`, a chave primaria: uma linha ou nenhuma, e nao ha o que sortear. Ele aparece aqui porque o portao passou a ler POR CHAMADA em 14/09/2026 -- antes este metodo era creditado como ordenado por causa do `ORDER BY` das OUTRAS duas consultas que ele monta. Ver D72. DISPENSADA module/ISConfiguracao/src/Entity/UsuarioAcessoRepository.php::entrouPeloNavegadorDesde — a pergunta e se existe alguma linha: qualquer uma que case responde o mesmo, e so se ela veio e lido -- nunca o conteudo. DISPENSADA module/ISConfiguracao/src/Entity/UsuarioComissaoExtraRepository.php::selecionarPorUsuarioProduto — a segunda linha nao pode existir: um par (pessoa, produto), uma extra -- as duas portas que gravam (a janela antiga, `UsuarioService::comissaoExtraSalvar`, e o `PUT` da tela nova, `gravarCotaParte`) travam a pessoa (`travarAPessoa`) e conferem o par de novo com ela travada (`outraExtraNoPar`, `RegraDaCotaParte::conferirExtras`). O `UsuarioCotaPartePelaApiTest` fica vermelho sem a trava (testATravaDaPessoaEDeVerdadeNasPortas), sem o par da janela (testOParDaJanelaEConferidoDeNovoComAPessoaTravada) ou sem o do `PUT` (testARecusaDaRegraNaoGravaNada). Ver D72. DISPENSADA module/ISConfiguracao/src/Entity/UsuarioRepository.php::selecionarPorTokenTocarSenha — mesmo caso do `selecionarPorTokenWeb`: 100 caracteres sorteados por `random_int`, e duas linhas com o mesmo token nao acontecem. Ver D72 e D77. DISPENSADA module/ISConfiguracao/src/Entity/UsuarioRepository.php::selecionarPorTokenWeb — o filtro e um token de 100 caracteres sorteados por `random_int` em `RandomString`: duas linhas iguais nao acontecem, e o `status` so pode zerar o resultado. DISPENSADA module/ISConfiguracao/src/Entity/VipClassMaterialRepository.php::selecionarMaterialPorIdHash — o filtro fixa `vip.id`, que e a chave primaria: uma linha ou nenhuma, e o hash so decide qual das duas. Ver D72. DISPENSADA module/ISMarketing/src/Entity/PushAppRepository.php::selecionarCronJob — devolve LISTA, e nao uma linha: sao ate 100 e o chamador percorre todas. O `cronjob` tem 2 valores repetidos em 701 linhas, e as duas entram na mesma volta -- nenhuma e descartada. Alem disso o envio e OneSignal, congelado por decisao. Ver D110. DISPENSADA module/ISMarketing/src/Entity/SorteioVendaRepository.php::validarGanhador — a unica coluna projetada e `sorven.ganhador`, e o WHERE fixa `ganhador = true`: qualquer linha que case devolve exatamente o mesmo valor. DISPENSADA module/ISVenda/src/Entity/CaixaRepository.php::selecionarPorUsuario — a segunda linha nao pode existir: o operador tem um caixa aberto so, porque as duas portas que abrem caixa (a tela antiga e a `/adm/api/caixas`) passam por `CaixaService::abrirSemDuplicar`, que trava a linha do usuario e so entao pergunta aqui se ja ha um aberto. O `CaixaSobTravaTest` fica vermelho sem a trava (testAAberturaTravaOOperadorAntesDeConferir, testAAberturaEsperaATravaDoOperador). Ver D72. DISPENSADA module/ISVenda/src/Entity/VendaProdutoRepository.php::pesquisaNpsLocalizarClientePorId — agrupa por `cli.id, uni.id` e o WHERE ja fixa `cli.id`; como o cliente tem uma unidade so, ha no maximo um grupo. Ver D72. DISPENSADA module/ISVenda/src/Entity/VendaProdutoRepository.php::selecionarProdutoVenda — os dois chamadores so perguntam `empty()`/`!empty()`: e teste de existencia, e o conteudo da linha nunca e lido. DISPENSADA module/ISVenda/src/Entity/VendaRepository.php::parceiroAtendeuNaUnidade — a pergunta e se existe alguma linha: qualquer uma que case responde o mesmo, e nenhuma coluna dela e lida. Nenhuma busca nova sem ordem.