Só o usuário master inclui, altera ou exclui regra.
QuandoQuem não é master abre a tela: vê as duas abas e os contadores, mas Incluir, Alterar e Excluir não aparecem. O servidor recusa do mesmo jeito (seção B).
Não grava. statuscode 400 com a frase abaixo, que a tela mostra como está.
Pergunta antes de seguir. Aqui quem pergunta é a própria tela, num painel acima da grade.
Passa, mas com um comportamento que surpreende quem está conferindo — ou é conferido só na tela.
A referência é o ceif (D:\gitfj\ceif-master), que é quem alimentava o catálogo. Onde a frase fala em 443, 444, 447 e 46, são as telas de concessão e de token da web.
Só o usuário master inclui, altera ou exclui regra.
QuandoQuem não é master abre a tela: vê as duas abas e os contadores, mas Incluir, Alterar e Excluir não aparecem. O servidor recusa do mesmo jeito (seção B).
(sem mensagem) — os contadores são somados em Java, não por JOIN
QuandoColunas Usuários (443), Grupos (447), Grupos de usuário (444) e Tokens abertos (46, token.regra_especifica com usado <> 'T'). Cada tabela é agrupada sozinha e casada por nome e sistema em maiúsculas.
OrigemEm central o catálogo é utf8mb4_unicode_ci, as concessões latin1 e a regra utf8mb4_0900_ai_ci: um JOIN derrubaria a consulta.
AtençãoO token não guarda sistema: quem gera e consome é a web, que confere a regra no sistema CEIF — então Tokens abertos só contam na regra CEIF (a RH de mesmo nome mostra zero). Tenant sem a coluna token.regra_especifica ou sem a tabela do 444 mostra zero.
Tabela regra — papéis de tela do ceif (Vaadin). O sistema web não as confere; só leitura.
QuandoAba Regras gerais: nome, sistema e concessões por grupo e por usuário. Nada se edita. Tenant sem a tabela regra mostra a lista vazia.
Só usuário master altera o catálogo de regras.
QuandoIncluir, alterar ou excluir sem ser master (usuario.master). Vale nas três ações.
OrigemNo ceif a tela é de ROLE_REGESP/ROLE_MASTER e só o master edita; aqui fica só o master, porque quem cria regra pode se dar qualquer permissão.
Informe o nome, o sistema e a observação da regra.
QuandoIncluir com o corpo da requisição vazio (só por chamada direta à API; antes dava erro inesperado).
Informe o nome da regra.
QuandoNome vazio. A tela confere antes com a mesma frase.
Nome da regra muito longo (máximo 255 caracteres).
QuandoMais de 255 caracteres depois de aparado. A caixa da tela já limita em 255.
O nome da regra só aceita letras sem acento, números e "_": NOME DA REGRA
QuandoO nome, aparado e em maiúsculas, tem algo fora de [A-Z0-9_] (espaço, acento, hífen…).
AtençãoNa tela quase não aparece: ao digitar, ela troca espaço por "_" e tira o resto. Chamada direta à API chega aqui.
Sistema inválido: informe CEIF ou RH.
QuandoSistema fora de CEIF e RH (o enum Sistema do ceif). A tela só oferece os dois.
Já existe a regra NOME_DA_REGRA no sistema CEIF.
QuandoJá há linha com o mesmo nome e sistema. O mesmo nome em outro sistema é aceito.
Informe a observação — é ela que explica a regra nas telas de concessão.
QuandoObservação vazia, ao incluir e ao alterar.
OrigemObrigatória no form do ceif (txtObservacao.setRequired(true)).
AtençãoA tela confere antes com a mesma frase.
Observação muito longa (máximo 500 caracteres).
QuandoMais de 500 caracteres depois de aparada. A caixa da tela já limita em 500.
(sem mensagem) — o nome é gravado aparado e em MAIÚSCULAS
QuandoSempre. O form do ceif grava como digitado (o toUpperCase dele está comentado); todas as regras do catálogo já estão em maiúsculas. "Necessita autorização master" grava autorizacao_master onde a coluna existe (tenant anterior a janeiro/2026 não a tem, e ela é ignorada).
Regra NOME_DA_REGRA (CEIF) não existe.
QuandoAlterar, excluir ou consultar o uso de uma regra que não está mais no catálogo (apagada por outra pessoa, ou pela replicação do ceif).
Nome e sistema são a chave da regra e não se alteram — as concessões e o código apontam para eles.
QuandoNo formulário de alteração os dois campos ficam travados; o servidor ignora nome e sistema do corpo e usa os do endereço.
OrigemO form do ceif deixa editar o nome, e o JPA grava uma regra NOVA deixando a antiga.
O ceif replica este catálogo a partir do hub: a próxima replicação pode sobrescrever a observação e a autorização master.
QuandoSempre, no formulário. O ReplicationService do ceif faz INSERT … ON DUPLICATE KEY UPDATE de regra_especifica: o que se muda aqui pode ser desfeito, e regra apagada aqui pode voltar.
Ao clicar em Excluir a tela primeiro pergunta ao servidor o uso da regra (GET …/uso) e mostra num painel. Com algum motivo, o painel só lista os motivos e o botão vira Fechar; sem motivo, pergunta. O servidor confere tudo de novo na exclusão e, havendo motivo, recusa com uma frase só: "A regra X não pode ser excluída: " seguida dos motivos abaixo, separados por "; ". Apagar uma regra citada no código não daria erro nenhum — a tela que a confere passaria a recusar para todos, menos o master.
Excluir a regra NOME_DA_REGRA? Ela não está concedida nem é conferida no código.
QuandoPergunta da tela, só quando o uso veio sem nenhum motivo. A exclusão é física (DELETE).
A regra MASTER não pode ser excluída: é a regra curinga do sistema.
QuandoA regra se chama MASTER (maiúsculas ou não), em qualquer sistema — a curinga do legado (hUsuarioRegras,"MASTER").
A regra X não pode ser excluída: concedida a 3 usuário(s) (443).
QuandoHá concessão direta ao usuário (controle_acesso_especifico_usuario_regra). Tirar no 443 antes.
A regra X não pode ser excluída: concedida a 2 grupo(s) de controle de acesso (447).
QuandoHá concessão a um grupo do ceif (controle_acesso_especifico_grupo_regra). Tirar no 447 antes.
A regra X não pode ser excluída: concedida a 1 grupo(s) de usuário (444).
QuandoHá concessão a um grupo de usuário (grupo_usuario_regra, a aba de regras do 444). Só conta onde a tabela existe.
A regra X não pode ser excluída: 1 token(s) gerado(s) para ela ainda não usado(s) (46).
QuandoHá token gerado na tela 46 amarrado à regra (token.regra_especifica) e ainda não usado. Só na regra do sistema CEIF (o token não tem sistema e a web o confere no CEIF).
A regra X não pode ser excluída: é conferida no código (porte: Classe, legado: menu2321.prg e mais 4).
QuandoO nome é usado como regra no código do sistema web — lido das classes compiladas do build em execução (não do fonte) —, ou está no arquivo regras/referencias-externas.txt, que lista as regras citadas no legado (hUsuarioRegras,"X") e no ceif (hasRole/verifyRole). No sistema web conta o literal que (1) é carregado num método que chama um conferidor de regra (tem, temAlgumaComPrefixo, consumirComRegra, gerarComRegra, temRegraGeral ou método com "Regra" no nome) ou (2) é o valor de uma constante cujo nome começa por REGRA. Literal que só tem o formato de nome (chave de configuração, status) não conta mais. A frase mostra até 5 lugares; na tela o painel lista todos.
SistemaWeb e ceif conferem as regras do sistema CEIF: a citação deles só trava a regra CEIF. O legado casa só pelo nome: a citação dele só trava a última regra do catálogo com aquele nome.
AtençãoNome montado por concatenação não é visto, nem regra em constante de outro nome que chega ao conferidor por parâmetro de outro método. Conferido em 24/09/2026: das 145 regras CEIF de central, o índice e uma busca no fonte discordam só em TOKEN_FIN_EMISSAO_RECUPERACAO_JUDICIAL, que no porte é chave de Config. Globais — o falso positivo que o critério tirou. O índice é montado na primeira pergunta (~2,5 s) e fica em memória até reiniciar. Regra nova no legado ou no ceif só entra quando alguém regerar o arquivo (python scripts/gera_regras_referenciadas.py).
Registro id=0 nao encontrado em 'regra_especifica'
QuandoO DELETE não apagou nada — outra pessoa ou a replicação apagou a regra entre a conferência e a exclusão. Chega com statuscode 404. Conferência e DELETE rodam na mesma transação.
| Quem | O que pode |
|---|---|
| Qualquer usuário que veja o item no menu | Consultar as duas abas e o uso de uma regra. |
Master (usuario.master) | Incluir, alterar e excluir regra específica. Não há regra nomeada que libere isso — de propósito: o catálogo é o que define as permissões. |
| — | As regras gerais não se editam por ninguém aqui. |
Autorização master é só uma marca gravada: no ceif, conceder uma regra marcada pede o token do master; as telas de concessão da web (443, 444, 447) ainda não pedem — hoje só o master concede nelas.
Recusa de regra (inclusive a de "só master", que no servidor é outra exceção): HTTP 200 com
statuscode 400 e a frase, que a tela mostra no formulário ou no painel de exclusão.
Registro sumido: statuscode 404. As mensagens marcadas "só na tela" não chegam ao
servidor. Erro inesperado traz o código de ocorrência de 8 caracteres — copie-o no chamado.
| O que | Valor |
|---|---|
| Sistemas aceitos | CEIF e RH (o enum do ceif) |
| Regra que nunca sai | MASTER |
| Formato do nome | [A-Z0-9_], até 255 |
| Observação | obrigatória, até 500 |
| Ponto | Situação |
|---|---|
| nome e sistema | não se alteram; no ceif editar o nome grava regra nova e deixa a antiga |
| nome em maiúsculas | forçado aqui; o ceif grava como digitado |
| exclusão | recusada com a regra em uso (concessão, token aberto, citação no código); o ceif apaga direto |
| quem edita | só o master; sem papel de tela equivalente ao ROLE_REGESP |
| replicação do ceif | pode desfazer o que se muda aqui e trazer de volta regra apagada — a tela avisa |
| Pendente | pedir o token do master ao conceder regra com "autorização master" no 443/444/447 |
| Achado | em central (24/09/2026) faltavam VENCOL, EXPPAG, EMPRESTIMO_FIDC e NFE_UPLOAD_XML — os scripts scripts/sql/regra_*.sql não rodaram ali; sem elas 22P e 22L ficam só para o master. Podem ser incluídas por esta tela. |
| teste | exercitado em central (22 de 22, conexão que nunca confirma); não testado na tela |
Nenhuma regra bate com essa busca. Tente um trecho menor da mensagem, ou limpe os filtros.