FJFrigo · Manutenção · Usuários › 8-Catálogo de Regras · 448

Catálogo de Regras

O cadastro das regras de acesso que as telas conferem por nome (as "regras específicas"), e a lista, só de leitura, dos papéis de tela do ceif (as "regras gerais"). Cada regra traz a mensagem exata, quando dispara e de onde veio.

Tabelas: regra_especifica, regra (leitura), controle_acesso_especifico_usuario_regra, controle_acesso_especifico_grupo_regra, grupo_usuario_regra, token Origem: não existe no sistema antigo (Harbour), que só lê as regras no login (login.prg:403). Nasceu no web, no desenho do RegraEspecificaGrid/Form e do RegraGrid do ceif. Sem linha em opcao_sistema.

Bloqueia

Não grava. statuscode 400 com a frase abaixo, que a tela mostra como está.

Confirma

Pergunta antes de seguir. Aqui quem pergunta é a própria tela, num painel acima da grade.

Aviso

Passa, mas com um comportamento que surpreende quem está conferindo — ou é conferido só na tela.

Sem sistema antigo

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.

A

Consultar

Abas Regras específicas e Regras gerais
Aviso

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).

Todos
Aviso

(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.

Todos
Aviso

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.

Todos
B

Incluir

RegraCatalogoService.incluir
Bloqueia

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.

Todos
Bloqueia

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).

Todos
Bloqueia

Informe o nome da regra.

QuandoNome vazio. A tela confere antes com a mesma frase.

Todos
Bloqueia

Nome da regra muito longo (máximo 255 caracteres).

QuandoMais de 255 caracteres depois de aparado. A caixa da tela já limita em 255.

Todos
Bloqueia

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.

Todos
Bloqueia

Sistema inválido: informe CEIF ou RH.

QuandoSistema fora de CEIF e RH (o enum Sistema do ceif). A tela só oferece os dois.

Todos
Bloqueia

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.

Todos
Bloqueia

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.

Todos
Bloqueia

Observação muito longa (máximo 500 caracteres).

QuandoMais de 500 caracteres depois de aparada. A caixa da tela já limita em 500.

Todos
Aviso

(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).

Todos
C

Alterar

Só observação e autorização master
Bloqueia

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).

Todos
Aviso

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.

Todos
Aviso

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.

Todos
D

Excluir

Não se exclui regra em uso

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.

Confirma

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).

Todos
Bloqueia

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").

Todos
Bloqueia

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.

Todos
Bloqueia

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.

Todos
Bloqueia

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.

Todos
Bloqueia

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).

Todos
Bloqueia

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).

Todos
Bloqueia

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.

Todos
E

Permissões

Quem pode passar
QuemO que pode
Qualquer usuário que veja o item no menuConsultar 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.

F

Como o erro chega na tela

Para o QA reproduzir e reportar

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.

G

Regras chumbadas no código

Esperadas — não abrir como defeito
O queValor
Sistemas aceitosCEIF e RH (o enum do ceif)
Regra que nunca saiMASTER
Formato do nome[A-Z0-9_], até 255
Observaçãoobrigatória, até 500
H

Diferenças e decisões pendentes

O que muda em relação ao ceif
PontoSituação
nome e sistemanão se alteram; no ceif editar o nome grava regra nova e deixa a antiga
nome em maiúsculasforçado aqui; o ceif grava como digitado
exclusãorecusada com a regra em uso (concessão, token aberto, citação no código); o ceif apaga direto
quem editasó o master; sem papel de tela equivalente ao ROLE_REGESP
replicação do ceifpode desfazer o que se muda aqui e trazer de volta regra apagada — a tela avisa
Pendentepedir o token do master ao conceder regra com "autorização master" no 443/444/447
Achadoem 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.
testeexercitado 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.