FJFrigo · QA · Manutenção (opções 41 a 49 e cadastro da filial)
Passo a passo para conferir configuração, fechamento, usuários e acesso, integrações, token, SIAT e saúde do cadastro, com resultado esperado e como conferir. Marca o que mudou em 04/10/2026.
Menu: 4-Manutenção › 1-Configuração (41) › botão Config. Globais · Doc técnico: validacoes-config-globais-41.html · Ajuda: botão ? da janela
Status no status-porte.csv: FECHADO_100%
central e um banco paraguaio para ver a tela traduzida.IDCENTRO_CUSTO_TAXA_COBRANCA_EXTERIOR (04/10/2026) é lida pela Cobrança Exportação (22H): para testar o efeito, precisa de um centro de custo existente no tenant.FazerAbra o 41.
Resultado esperadoA grade lista as filiais (id, descrição, cidade). Só existe Alterar: não há Incluir nem Excluir filial.
FazerClique em Config. Globais.
Resultado esperadoAbas: Documentos fiscais, Faturamento, Contabilidade, Financeiro, Integrações, Sistema e Outras chaves. A chave aparece com o rótulo e, embaixo, o nome técnico. Chave do catálogo que não está no banco mostra "Não cadastrada - vale o padrão: ..." e nada é criado ao abrir. Token/senha nunca voltam: só "Preenchido" ou "Vazio".
FazerNa aba Financeiro procure IDCENTRO_CUSTO_TAXA_COBRANCA_EXTERIOR ("Centro de custo das taxas da cobrança de exportação"). Como master, informe o id de um centro existente e grave; abra uma Cobrança Exportação (22H) nova.
Resultado esperadoA chave existe no catálogo (campo texto, padrão vazio). Gravada, o 22H novo abre com esse centro de custo das taxas (e a cobrança gravada sem centro também). Vazio ou zero: vale a regra do legado por país (1176 no Brasil e na Bolívia, 113 nos demais); a parte por razão social (ALL PAR 10013 e INCKA 1001109) só vem pela chave - o tenant cadastra. Id que não existe no banco do tenant (ex.: 1176 no central) não é sugerido: o campo fica vazio.
Como conferirSELECT chave, valor_string FROM system_config WHERE chave = 'IDCENTRO_CUSTO_TAXA_COBRANCA_EXTERIOR'; SELECT id, descricao FROM centro_custo WHERE id = :id
FazerComo master, altere duas chaves de abas diferentes e grave.
Resultado esperado"Configurações gravadas."; a marca de alteração pendente da aba some; só as chaves alteradas são gravadas, numa transação. A mudança vale na hora, sem reiniciar o backend (o desktop só depois de sair e entrar).
Como conferirSELECT chave, valor_string, valor_int, valor_boolean FROM system_config WHERE chave IN (...)
FazerEntre com usuário que não é master e abra Config. Globais.
Resultado esperadoOs campos já abrem travados com o aviso no topo; chamada direta recusa "Só usuário master altera as configurações globais.".
FazerChame a gravação (API) com uma chave fora do catálogo e com CODICFJ, TIPO_BANCO, LOGO, LOGO_FORMATO.
Resultado esperado"A chave X não é uma configuração conhecida." e "A chave X não se altera por esta tela.". Nada é gravado (nem as outras chaves enviadas junto).
FazerTeste: valor com mais de 255 caracteres; liga/desliga com valor diferente de 0/1 (API); ambiente fiscal com outro valor; tipo de título/conta com texto não numérico; URL sem http:// ou https://.
Resultado esperado"A chave X passa de 255 caracteres."; "A chave X aceita só 0 (desligada) ou 1 (ligada)."; "A chave X aceita só PRODUCAO ou HOMOLOGACAO."; "A chave X aceita só um número (0 para nenhum)."; "A chave X tem de começar com http:// ou https://.". Sempre em português, mesmo no tenant paraguaio.
FazerGrave IDTIPO_TITULO_COBRANCA_DESPESA com um id inexistente e IDCONTA_AJUSTE_IRFS com conta inexistente (API).
Resultado esperado"O tipo de título N de IDTIPO_TITULO_COBRANCA_DESPESA não existe." e "A conta contábil N de IDCONTA_AJUSTE_IRFS não existe no plano de contas.". No central a IDTIPO_TITULO_COBRANCA_DESPESA vale 100125, que não existe lá: a tela mostra o aviso "O id gravado (100125) não existe no cadastro" (decisão pendente).
FazerVeja uma chave de ambiente gravada com valor não reconhecido e uma gravada como 1 ou 2; grave outra chave.
Resultado esperadoValor não reconhecido: "Valor gravado [X] não reconhecido - o sistema emite em homologação.". Ambiente gravado como 1/2 continua 1/2 (a tela mostra a palavra, grava o número e o valor_int); chave nova recebe a palavra.
FazerAltere outra chave sem tocar no campo de um token (API_HUB_TOKEN, TOKEN_FISCAL...).
Resultado esperadoO token gravado é mantido; só um valor digitado troca; não há como apagar um token pela tela.
FazerLigue e desligue uma chave de liga/desliga.
Resultado esperadovalor_string, valor_int e valor_boolean ficam iguais; as demais chaves mexem só em valor_string.
FazerAbra em tenant sem system_config.
Resultado esperado"Este banco não tem a tabela system_config."; o sistema segue com os padrões de cada chave.
Menu: 4-Manutenção › 1-Configuração (41) › selecionar a filial › Alterar › aba NFe › seção "NFS-e (prestador de serviço)" · Doc técnico: docs/nfse-plano.md (seção 04/10/2026 - cadastro da filial) · Ajuda: botão ? da janela
Status no status-porte.csv: FECHADO_100%
scripts/sql/nfse_colunas.sql, rodado na fjfrigo_ps) e um banco sem elas para o caso de ocultar a seção.inscricao_municipal, op_simp_nac, reg_ap_trib_sn, reg_esp_trib, perc_tot_trib_sn (em filial_trib).FazerAbra Alterar da filial, aba NFe, num banco com as colunas e noutro sem elas.
Resultado esperadoCom as colunas: seção "NFS-e (prestador de serviço)" com Inscrição municipal, Simples Nacional, Apuração no Simples, Regime especial de tributação e % aprox. tributos do Simples. Sem as colunas: nada é mostrado. Cada campo só aparece se a sua coluna existe (/cadastro/colunas-opcionais).
Como conferirSELECT column_name FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = 'filial_trib' AND column_name IN ('inscricao_municipal','op_simp_nac','reg_ap_trib_sn','reg_esp_trib','perc_tot_trib_sn')
FazerAbra os combos.
Resultado esperadoSimples Nacional: 1 não optante, 2 MEI, 3 ME/EPP. Regime especial: nenhum, ato cooperado, estimativa, microempresa municipal, notário/registrador, profissional autônomo, sociedade de profissionais (0 a 6). Cada combo tem a opção "(não informado)".
FazerEscolha Simples Nacional = 1 ou 2 e olhe Apuração no Simples; depois escolha 3.
Resultado esperadoA apuração só fica habilitada com ME/EPP (3), como no DpsXmlBuilder; com 3 oferece os três valores (1 a 3).
FazerPreencha os cinco campos (ex.: inscrição municipal, Simples 3, apuração 1, regime 0, percentual 8,5), grave e reabra.
Resultado esperadoOs valores voltam iguais; a filial continua gravando só os campos da aba (os demais parâmetros não são tocados).
Como conferirSELECT inscricao_municipal, op_simp_nac, reg_ap_trib_sn, reg_esp_trib, perc_tot_trib_sn FROM filial_trib WHERE idfilial = :filial
FazerDeixe um combo em "(não informado)" e grave (filial com a coluna já preenchida e filial nova).
Resultado esperadoCampo nulo fica fora do UPDATE/INSERT (não apaga o que já estava gravado); string vazia "" limpa. O campo "(não informado)" não é enviado na nota.
FazerChame a gravação (API) com Simples 4, apuração 0, regime 7 e percentual 101 ou -1.
Resultado esperadoRecusa: os códigos aceitos são 1-3, 1-3 e 0-6, e o percentual vai de 0 a 100 (enviado como texto para separar nulo de limpar).
FazerGrave a filial num banco sem as colunas da NFS-e.
Resultado esperadoA gravação funciona; coluna ausente fica fora do UPDATE/INSERT, sem erro.
Menu: 4-Manutenção › 2-Fechamento › 1-U.D.F. (421) · Doc técnico: validacoes-udf-421.html · Ajuda: botão ? da janela
Status no status-porte.csv: FECHADO_100%
tipo_grupo); um usuário de outro grupo; um usuário com a regra HABILITAR_DATAS_UDF_UDF_FAT; um sem ela; um com LANCAR_UDF_COM_DATA_MENOR_60_DIAS; token genérico gerado no 46.FazerAbra o 421 com usuário de outro grupo.
Resultado esperadoA janela mostra só a frase "Sem permissão para alterar a data de fechamento (U.D.F.).", sem campos.
FazerAbra numa filial da sessão sem linha em parametros.
Resultado esperado"Não há linha em parametros para filial_ativa=N" (cadastro faltando, não defeito).
FazerEntre com ADM sem HABILITAR_DATAS_UDF_UDF_FAT.
Resultado esperadoData financeira e Data fatura ficam cinza com a dica "Travada: falta a regra HABILITAR_DATAS_UDF_UDF_FAT."; a data contábil continua livre. Chamada direta com a data financeira ou de faturamento alterada: "Usuário não tem permissão [HABILITAR_DATAS_UDF_UDF_FAT]!".
FazerLimpe uma das três datas e grave.
Resultado esperado"udf: não deve estar em branco" (o nome antes dos dois-pontos é udf, udfFat ou udfCont; várias vêm separadas por ;).
FazerGrave a data financeira depois de hoje (sem a regra dos 60 dias).
Resultado esperado"Data maior que a data atual, não será permitido prosseguir.". Só a financeira é conferida (faturamento e contábil podem ser futuras). A regra LANCAR_UDF_COM_DATA_MENOR_60_DIAS dispensa.
FazerGrave a data financeira mais de 60 dias antes de hoje e diferente da gravada.
Resultado esperado"Data menor que 60 dias da data atual, não será permitido prosseguir.". Regravar a mesma data antiga passa. A regra dos 60 dias dispensa.
FazerMarque "Momentâneo" e grave sem token; depois informe um token genérico do 46.
Resultado esperado1ª tentativa: 428, abre a janela "Token de liberação" e reenvia. Com token válido: parametros não muda, mas a linha em udf_log é gravada (a grade Histórico mostra uma "mudança" que não vale). Token inválido ou já usado: "Token inválido ou já utilizado.". Token gerado para uma regra específica também é recusado com essa frase. Data futura bloqueia antes de gastar o token.
Como conferirSELECT data, udf, idfilial, idusuario FROM udf_log ORDER BY data DESC LIMIT 5; SELECT udf, udf_fat, udf_cont FROM parametros WHERE idfilial = :filial
FazerGrave as três datas sem "Todas as filiais".
Resultado esperadoSó a linha de parametros da filial da sessão muda; uma linha nova em udf_log (grade Histórico).
Como conferirSELECT idfilial, udf, udf_fat, udf_cont FROM parametros ORDER BY idfilial
FazerMarque "Todas as filiais" e grave (homologação!).
Resultado esperadoAs três datas vão para todas as linhas de parametros do banco (não só as filiais do usuário); o log sai com a filial da sessão.
FazerDepois de fechar um mês, tente alterar/excluir um lançamento daquele mês numa tela de lançamento.
Resultado esperadoA tela recusa por mês fechado (a U.D.F. financeira é parametros.udf, nunca filial.udf).
Menu: 4-Manutenção › 4-Usuários › 2-Cadastro de Grupos (442) · Doc técnico: validacoes-usuarios-grupos-442-443-444.html · Ajuda: botão ? da janela
Status no status-porte.csv: FECHADO_100%
FazerIncluir, descrição "Teste QA" e um tipo (ex.: FIN), Gravar.
Resultado esperadoO grupo aparece na grade com descrição e tipo; fica disponível no 443 e no 444. O formulário novo nasce sem tipo escolhido.
FazerDeixe descrição ou tipo vazio e grave.
Resultado esperado"Campo obrigatório." embaixo do campo (só na tela); pelo servidor "descricao: não deve estar em branco" (idem tipoGrupo).
FazerChamada direta com tipo XYZ.
Resultado esperado"Tipo de grupo inválido: XYZ". O combo tem 26 siglas (ADM, GER, SGE, APR, GIN, FIN, FAT, ALM, GRH, FRH, CON, AIN, IND, GCO, AEX, COG, GVE, CRE, CR2, CCR, FIM, VEN, CR3, IDR, IDG, GAL). Na alteração, o tipo já gravado fora da lista (CRH, aux no concepcion) passa; só a troca para fora da lista é recusada.
FazerAltere um grupo apagado (outra janela/API).
Resultado esperado"Registro id=N nao encontrado em 'grupo_usuario'" (404).
FazerCom usuário comum (opção 442, fora do grupo ADM, não master) inclua um grupo tipo ADM, troque um grupo para ADM e tire o ADM de um grupo ADM.
Resultado esperado"Só um usuário do grupo ADM ou o master pode dar ou tirar o tipo ADM de um grupo." nos três casos. Regravar um grupo ADM sem mudar o tipo passa. Troca livre entre os tipos que não são ADM.
FazerProcure o botão Excluir.
Resultado esperadoNão há botão Excluir nem rota no servidor (o legado respondia "Operação não permitida!").
Menu: 4-Manutenção › 4-Usuários › 3-Cadastro de Usuários (443) · Doc técnico: validacoes-usuarios-grupos-442-443-444.html · Ajuda: botão ? da janela
Status no status-porte.csv: FECHADO_100%
USUARIO_BLOQUEAR.FazerAbra o 443 com usuário que não é do grupo ADM.
Resultado esperado"Sem permissão para acessar o cadastro de usuários." na grade, abrir, incluir, alterar, excluir, exportar, suporte, desbloqueio e regras por usuário.
FazerInclua um usuário com todos os campos obrigatórios, grupo, filial, filiais de acesso e senha válida.
Resultado esperadoGrava cadastro, usuario_filial (com a filial de origem do usuário, não a da sessão) e grupos do ceif numa transação só; language='espanhol' em usuário novo, como no legado.
Como conferirSELECT id, login, idgrupo_usuario FROM usuario WHERE login = :login; SELECT * FROM usuario_filial WHERE idusuario = :id
FazerInclua com senha em branco; senha e confirmação diferentes; sem grupo; sem filial.
Resultado esperado"Senha em branco."; "Senha e confirmação não conferem." (só na tela); no servidor "idGrupoUsuario: não deve ser nulo" e "<campo>: não deve estar em branco" (descricao, login, documentoIdent, telefoneParticular).
FazerDeixe Ramal e Telefone Empresa vazios.
Resultado esperado"Ramal ou Telefone Empresa em branco." (basta um dos dois; usuário antigo sem os dois não regrava até preencher um).
FazerTeste senhas: com 7 caracteres; com 15; começando por número; com 123; com @ repetido; com !; sem especial; só 1 letra; com 2 números.
Resultado esperado"Senha inferior a 8 caracteres."; "Senha superior a 14 caracteres."; "O primeiro caractere da senha não pode ser número."; "Não é permitido sequência de números."; "Não pode repetir um caractere especial em sequência."; "Caractere inválido '!', permitidos @#., números e letras."; "Quantidade de caracteres especiais inferior a 1 (aceitos '@', '#' e '.')."; "Quantidade de letras inferior a 2."; "Quantidade de números inferior a 3.". Vem só a primeira que falhar, na ordem listada. A senha "teste" é recusada pelo tamanho. Na alteração, senha em branco mantém a gravada.
FazerSem a regra USUARIO_BLOQUEAR (e não master), mexa na caixa Bloqueado e grave.
Resultado esperadoA caixa já aparece travada com a dica "Bloquear ou desbloquear exige a regra USUARIO_BLOQUEAR."; chamada direta recusa "Sem permissão para bloquear ou desbloquear usuário [USUARIO_BLOQUEAR].". Regravar sem mexer na caixa passa; o master passa. Marcar grava idusuario_bloqueou; desmarcar não limpa.
FazerNa grade de regras do usuário, conceda e revogue uma regra; tente uma regra herdada do grupo.
Resultado esperadoA caixa grava na hora, uma regra por clique, em controle_acesso_especifico_usuario_regra. Regra herdada aparece travada ("Vem do grupo - para retirar, mexa no grupo"); chamada direta: "A regra 'NOME' já vem do grupo do usuário e não precisa ser concedida aqui." / "A regra 'NOME' vem do grupo do usuário - retire-a do grupo, não daqui."; regra fora do catálogo "Regra 'NOME' não existe."; revogar o que não tinha direto: 404.
FazerMexa na caixa Suporte com e sem master.
Resultado esperadoSem master: "Só o usuário master pode marcar ou desmarcar o suporte.". Em banco sem usuario.suporte: "Este banco não tem a marca de suporte no cadastro de usuários." (a caixa nem aparece). A marca mostra o botão </> de documentação técnica.
FazerErre a senha 5 vezes no login de um usuário (15 min); como ADM clique em desbloquear.
Resultado esperado"Login fulano liberado: as tentativas foram zeradas."; se não estava travado: "O login fulano não estava travado por tentativas.". Não mexe no Bloqueado do cadastro; a trava por IP não é zerada.
FazerExclua o usuário de teste: Excluir abre o formulário travado; confirme.
Resultado esperado"Confira os dados abaixo. Ao confirmar, o registro é apagado e não há como desfazer."; apaga usuário, filiais de acesso e grupos do ceif, sem conferir movimento. Para tirar o acesso, prefira Bloqueado.
FazerExportar XLS e Imprimir.
Resultado esperadoO XLS tem uma linha por filial de acesso (cargo, filial geral, último login): usuário com 70 filiais sai 70 vezes. O Imprimir é a grade como está na tela. A coluna Documento da grade vem preenchida.
Menu: 4-Manutenção › 4-Usuários › 4-Configura Acesso (444) · Doc técnico: validacoes-usuarios-grupos-442-443-444.html · Ajuda: botão ? da janela
Status no status-porte.csv: FECHADO_100%
grupo_usuario_regra, grupo_usuario_controle_acesso) são criadas na primeira gravação do 444.FazerAbra o 444 sem ser do grupo ADM.
Resultado esperado"Sem permissão para acessar a configuração de acesso dos grupos." ao abrir e ao gravar.
FazerAbra um grupo comum; marque Entrar/Inclui/Altera/Exclui em duas opções; Gravar. Entre com um usuário do grupo.
Resultado esperadoDuas abas e um Gravar só, numa transação. O usuário do grupo vê no menu só as opções marcadas com Entrar.
Como conferirSELECT idopcao, permissao_opcao_entrar, permissao_opcao_inclui FROM grupo_permissao WHERE idgrupo = :grupo
FazerAbra um grupo com tipo ADM.
Resultado esperadoAviso "Grupo ADM: enxerga todo o menu, sem matriz de opções. As regras específicas valem para ele como para qualquer grupo."; a matriz não é lida nem gravada, só as regras.
FazerClique em "Resetar permissões"; depois Cancelar.
Resultado esperadoPergunta "Isso desmarca TODAS as opções deste grupo na tela ... Nada é gravado ainda"; sem Gravar nada muda.
FazerNa aba de regras marque uma regra direta ao grupo e grave; entre com um usuário do grupo.
Resultado esperadoO usuário herda a regra (uma das quatro origens). Regra fora do catálogo: "Regra 'NOME' não existe." e nada é gravado.
FazerLigue um grupo do ceif ao grupo de usuário; tente um inexistente (API).
Resultado esperadoA coluna "Herdada de" mostra o que o grupo do ceif concede (não se edita aqui; é no 447). Inexistente: "Grupo do ceif 'XYZ' não existe." e nada é gravado (nem as opções). Grupo sem nenhum do ceif ligado: sugestão "Sugestão: FIN - 169 dos 509 usuários deste grupo já estão nele." (sem gravar).
FazerAbra um grupo que não existe mais.
Resultado esperado"Registro id=N nao encontrado em 'grupo_usuario'" (404).
Menu: 4-Manutenção › 4-Usuários › 5-Usuários Online (445) · Doc técnico: validacoes-usuarios-online-transacoes-445-446.html · Ajuda: botão ? da janela
Status no status-porte.csv: FECHADO_100%
FazerAbra o 445.
Resultado esperadoUma linha por usuário em usuario_log (nome, status, bloqueado, travado por tentativas, login, última atividade, logout, grupo, tipo do grupo e filial; "Todas" quando não tem filial única). Online primeiro.
FazerCompare um usuário logado agora e um parado há mais de 45 minutos.
Resultado esperadoOff-line quando a última atividade é igual ao login, tem mais de 45 minutos, ou o logout é posterior à última atividade; os demais "Online" (linha laranja). A última atividade só anda com clique ou tecla (aba esquecida fica Off-line após 45 min).
FazerErre a senha 5 vezes de um login (travado por 15 minutos).
Resultado esperadoColuna "travado por tentativas" mostra "até dd/mm/aaaa hh:mm" e a linha sai em vermelho. A trava vive na memória do servidor (reiniciar apaga); a trava por IP não aparece.
FazerProcure um usuário excluído do cadastro e um que nunca entrou.
Resultado esperadoNenhum dos dois é listado (LEFT JOIN do legado mostrava o excluído sem nome; usuário sem usuario_log não aparece, nem como Off-line).
FazerUse os botões de filtro.
Resultado esperadoFiltro só da tela sobre a lista carregada; "Bloqueados" junta o bloqueio do cadastro e a trava por tentativas.
Menu: 4-Manutenção › 4-Usuários › 6-Transações Abertas (446) · Doc técnico: validacoes-usuarios-online-transacoes-445-446.html · Ajuda: botão ? da janela
Status no status-porte.csv: FECHADO_100%
FazerAbra o 446.
Resultado esperadoTransações InnoDB com a conexão parada há mais de 10 segundos, só do banco da sessão (thread, tempo, estado, consulta, host, banco). Mais antigas primeiro; 60 s ou mais em vermelho, o resto em laranja.
FazerComo usuário não master, clique em Matar.
Resultado esperadoO botão aparece, mas a recusa vem do servidor: "Só usuário master pode encerrar uma conexão do banco.".
FazerComo master, selecione uma conexão de teste e clique em Matar.
Resultado esperadoPergunta "Encerrar a conexão N? A transação aberta nela será desfeita."; Cancelar não faz nada; confirmar encerra a conexão e a transação é desfeita. Conferir host e consulta antes.
Como conferirSHOW PROCESSLIST (a thread deve sumir).
FazerChame o Matar (API) com thread inexistente, de outro banco do mesmo servidor e com o id da própria consulta.
Resultado esperado"A conexão N não existe mais."; "A conexão N não é do banco desta sessão - não pode ser encerrada daqui."; "A conexão N é a desta própria consulta.". Nada é encerrado.
Menu: 4-Manutenção › 4-Usuários › 7-Controle de Acesso do Grupo (447) · Doc técnico: validacoes-controle-acesso-grupo-447.html · Ajuda: botão ? da janela
Status no status-porte.csv: FECHADO_100% · falta: a aba "Regras de Acesso" geral do ceif (papéis Vaadin) fica fora de propósito, de caso pensado
opcao_sistema: o item aparece sem depender do 444.FazerComo master, crie um grupo com código "Gerente Adm-Almox", descrição e tipo.
Resultado esperadoO código vira GERENTE_ADM_ALMOX (maiúsculas, acento tirado, espaço e hífen viram _, o resto é descartado); a tela mostra o resultado enquanto digita; o código não se edita depois. Tipo vazio grava nulo (17 de 42 grupos do central não têm tipo).
FazerCódigo vazio, só com símbolos, com mais de 255 caracteres, repetido; descrição vazia; tipo XYZ (API).
Resultado esperado"Informe um código para o grupo."; "Informe um código válido para o grupo."; "Código do grupo muito longo (máximo 255 caracteres)."; "Já existe um grupo de controle de acesso 'FAT'."; "Informe a descrição do grupo."; "Tipo de grupo inválido: XYZ".
FazerCom usuário não master tente criar, alterar, excluir, conceder e revogar.
Resultado esperadoVer é livre; criar, alterar, excluir, conceder e revogar exigem usuario.master; "Ver regras..." é só leitura.
FazerSalve o grupo e marque/desmarque uma regra na aba Regras.
Resultado esperadoGrava na hora (não espera o Gravar). Grupo novo sem gravar: "Grave o grupo antes de conceder regras.". Conceder de novo não duplica. Revogar tira de todos os usuários do grupo e de todos os grupos de usuário (444) que o ligam; quem tem a regra por outra origem continua com ela. Regra fora do catálogo: "Regra 'X' não existe."; revogar o que não concede: 404.
FazerTente excluir um grupo com usuários, com regras específicas, com regras gerais do ceif e ligado a grupo de usuário (444).
Resultado esperado"Excluir o grupo de controle de acesso FAT?" e depois, conforme o caso: "Grupo 'FAT' tem 12 usuário(s) vinculado(s) - desvincule pelo cadastro de usuário antes de excluir."; "... concede 3 regra(s) específica(s) - revogue-as antes de excluir."; "... concede 5 regra(s) geral(is) do ceif - revogue-as (no ceif) antes de excluir."; "... está ligado a 2 grupo(s) de usuário (444) - desligue antes de excluir.".
FazerExclua o grupo de teste sem dependências.
Resultado esperadoO grupo some da lista.
Menu: 4-Manutenção › 4-Usuários › 8-Catálogo de Regras (448) · Doc técnico: validacoes-catalogo-regras-448.html · Ajuda: botão ? da janela
Status no status-porte.csv: REVISAR
opcao_sistema. Status REVISAR.FazerAbra as duas abas (Regras específicas e Regras gerais).
Resultado esperadoRegras específicas com contadores Usuários (443), Grupos (447), Grupos de usuário (444) e Tokens abertos (46, só na regra CEIF). Regras gerais: nome, sistema e concessões, só leitura.
FazerComo não master, tente incluir, alterar e excluir.
Resultado esperado"Só usuário master altera o catálogo de regras." nas três ações.
FazerComo master, inclua TESTE_QA (sistema CEIF, observação preenchida).
Resultado esperadoGravada aparada e em MAIÚSCULAS; ao digitar a tela troca espaço por _. "Necessita autorização master" grava autorizacao_master onde a coluna existe.
FazerNome vazio; com mais de 255; com espaço, acento ou hífen (API); sistema fora de CEIF/RH; repetido no mesmo sistema; sem observação; observação com mais de 500.
Resultado esperado"Informe o nome da regra."; "Nome da regra muito longo (máximo 255 caracteres)."; "O nome da regra só aceita letras sem acento, números e "_": NOME DA REGRA"; "Sistema inválido: informe CEIF ou RH."; "Já existe a regra NOME no sistema CEIF." (mesmo nome em outro sistema é aceito); "Informe a observação - é ela que explica a regra nas telas de concessão."; "Observação muito longa (máximo 500 caracteres).".
FazerAltere a regra criada.
Resultado esperadoNome e sistema ficam travados; o servidor ignora nome/sistema do corpo. 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.". Regra apagada por outra pessoa: "Regra NOME (CEIF) não existe.".
FazerClique Excluir numa regra concedida a usuário/grupo, numa com token aberto e numa citada no código.
Resultado esperadoA tela consulta o uso e lista os motivos (o botão vira Fechar): "concedida a N usuário(s) (443)", "concedida a N grupo(s) de controle de acesso (447)", "concedida a N grupo(s) de usuário (444)", "N token(s) gerado(s) para ela ainda não usado(s) (46)", "é conferida no código (porte: ..., legado: ...)". O servidor recusa com "A regra X não pode ser excluída: ..." (motivos separados por "; ").
FazerExclua a regra de teste sem uso; tente excluir MASTER.
Resultado esperadoLivre: pergunta "Excluir a regra NOME_DA_REGRA? Ela não está concedida nem é conferida no código." e apaga (DELETE físico). MASTER: "A regra MASTER não pode ser excluída: é a regra curinga do sistema.".
FazerVeja se VENCOL, EXPPAG, EMPRESTIMO_FIDC e NFE_UPLOAD_XML existem no central.
Resultado esperadoEm 24/09/2026 faltavam no central (os scripts regra_*.sql não rodaram ali; sem elas 22P e 22L ficam só para o master). Podem ser incluídas por esta tela. Registre se já existem (o script 2026.046 inclui VENCOL, EXPPAG, COLASI, CENT_CUST_BLOQ_BAIXA_VENC).
Como conferirSELECT nome, sistema FROM regra_especifica WHERE nome IN ('VENCOL','EXPPAG','EMPRESTIMO_FIDC','NFE_UPLOAD_XML','COLASI')
Menu: 4-Manutenção › 5-Integrações › 2-Baixas Domínio (452) · Doc técnico: validacoes-baixas-dominio-452.html · Ajuda: botão ? da janela
Status no status-porte.csv: PARCIAL · falta: testar na tela
contabilidade_cod_conta preenchido; filial com razão social, cidade e código contábil. Status PARCIAL, "testar na tela" (só exercitado contra o banco).FazerCom um usuário de grupo que tem a opção 452 em grupo_permissao abra 4-Manutenção › 5-Integrações › 2-Baixas Domínio. Depois entre com um usuário de grupo sem a opção.
Resultado esperadoO primeiro vê o item e abre a janela; o segundo não vê o item no menu. No script 2026.046 a opção entrou com INSERT IGNORE e a permissão copiada de 451 (quem já tinha a opção não mudou). O master sempre vê. O corte é só do menu: a API não confere a opção.
Como conferirSELECT idopcao, descricao FROM opcao_sistema WHERE idopcao IN ('452','451'); SELECT idgrupo, permissao_opcao_entrar FROM grupo_permissao WHERE idopcao = '452' ORDER BY idgrupo
FazerEscolha período (no mesmo ano), tipo Todos, filial em branco, informe o usuário (vira maiúsculas) e gere.
Resultado esperadoO arquivo baixa pelo navegador em windows-1252 com CRLF. Cada baixa abre com |6000|X||<id do título>| e cada lançamento é |6100|dd/mm/aaaa|débito|crédito|valor||histórico|usuário|código da filial| (valor com 3 casas e vírgula). Duas passadas: títulos da filial contra o fornecedor/cliente; banco da filial pagando título de outra filial. Só baixas vivas de conta bancária com contabilidade_cod_conta. As datas nascem em hoje.
FazerDatas vazias; final anterior à inicial; anos diferentes; filial inexistente; período sem baixa.
Resultado esperado"Informe a data inicial e a final."; "A data final é anterior à inicial."; "O período tem de estar dentro do mesmo ano."; "Filial 7 não encontrada."; "Nenhuma baixa no período com conta contábil no banco.".
FazerGere até um dia que tem baixa com hora.
Resultado esperadoA baixa do último dia entra (faixa meio-aberta; o legado perdia o último dia com hora).
FazerGere um período com baixa viva de título excluído.
Resultado esperadoO arquivo é gerado e o rodapé avisa "3 baixa(s) de título excluído ficaram fora do arquivo." (cabeçalho X-Avisos, com a contagem de baixas e linhas); o legado derrubava a geração.
FazerGere sem filtro de filial.
Resultado esperadoA 2ª passada traz só o que foi pago por banco de outra filial (o legado repetia todas as baixas contra a transitória 999999 e duplicava o arquivo).
FazerConfira em baixas de filial com razão social UNIAO e baixa com filial do título diferente da do banco.
Resultado esperadoConta do fornecedor/cliente = conta_for_contab_ext/conta_cli_contab_ext do centro de custo do título, senão o código contábil do emitente. Conta do banco vira transitória 38 (razão social com UNIAO) ou 10544; na 2ª passada, a transitória quando as filiais diferem e 999999 quando coincidem. Baixa de valor zero gera só o |6000| e os lançamentos de juros/desconto.
FazerGere filtrando uma filial diferente da da sessão.
Resultado esperadoRazão social, cidade e código contábil do cabeçalho são da filial do filtro (sem filtro, da sessão).
Menu: 4-Manutenção › 5-Integrações › 3-Emitentes Domínio (453) · Doc técnico: validacoes-emitentes-dominio-453.html · Ajuda: botão ? da janela
Status no status-porte.csv: PARCIAL · falta: testar na tela
contabil e Fornecedor ou Cliente (maiúsculas como estão); linhas empresa;nome;CNPJ/CPF;conta. Homologação (o Importar grava emitente). Status PARCIAL, "testar na tela" (só exercitado contra o banco).FazerCom um usuário de grupo que tem a opção 453 em grupo_permissao abra 4-Manutenção › 5-Integrações › 3-Emitentes Domínio. Depois entre com um usuário de grupo sem a opção.
Resultado esperadoO primeiro vê o item e abre a janela; o segundo não vê o item no menu. No script 2026.046 a opção entrou com INSERT IGNORE e a permissão copiada de 451 (quem já tinha a opção não mudou). O master sempre vê. O corte é só do menu: a API não confere a opção.
Como conferirSELECT idopcao, descricao FROM opcao_sistema WHERE idopcao IN ('453','451'); SELECT idgrupo, permissao_opcao_entrar FROM grupo_permissao WHERE idopcao = '453' ORDER BY idgrupo
FazerEscolha clientes.csv e depois contabil_Fornecedor.csv.
Resultado esperado"Arquivo inválido: o nome tem de conter "contabil" e "Fornecedor" ou "Cliente" (é o nome que o Domínio dá ao arquivo). Recebido: clientes.csv". Com "Fornecedor" a conta vai para contabilidade_cod_fornecedor, senão para contabilidade_cod_cliente.
FazerEscolha um arquivo válido e leia a grade da prévia.
Resultado esperadoSó conta a linha que começa por algarismo de 1 a 9 (cabeçalho e total ficam de fora); linha sem CNPJ/CPF ou sem conta, ou com conta só de zeros, é pulada calada. CNPJ/CPF reduzido aos algarismos, completado com zeros e mascarado. Situações: Alterar, Não encontrado, Repetido, Erro.
FazerUse linha com menos de 4 campos, documento com mais de 14 algarismos e conta com mais de 15 caracteres.
Resultado esperado"Linha sem os 4 campos (…;…;CNPJ/CPF;conta)."; "CNPJ/CPF com mais de 14 algarismos."; "Conta com mais de 15 caracteres." (situação Erro, não gravada). Sem nenhuma linha útil: "Nenhuma linha válida no arquivo.".
FazerUse CNPJ sem cadastro; o mesmo CNPJ duas vezes (contas iguais e diferentes); CNPJ com 2 emitentes.
Resultado esperado"CNPJ/CPF não encontrado no cadastro de emitentes." (Não encontrado); "Repetido no arquivo; vale a linha seguinte."; aviso "08.594.527/0001-01 aparece mais de uma vez com contas diferentes (54024 na linha 12, 60311 na linha 40): vale a última."; "2 emitentes com este CNPJ/CPF." na Observação (todos recebem a conta).
FazerUse linha com campo entre aspas contendo ;.
Resultado esperadoO campo entre aspas é lido inteiro (o legado e o ceif cortavam em todo ; e perdiam a linha calados).
FazerCom linhas Alterar, clique Importar e confirme.
Resultado esperadoPergunta "Gravar a conta em 30 emitente(s)?"; grava só as linhas Alterar numa transação; o resultado diz quantos emitentes e documentos foram atualizados e quantos não estão no cadastro. Emitente com a coluna NULL também recebe. Nada a alterar: "Nada a alterar: todas as contas já estão gravadas." com o botão desabilitado.
Como conferirSELECT id, cnpj_cpf, contabilidade_cod_fornecedor, contabilidade_cod_cliente FROM emitente WHERE cnpj_cpf = :documento
Menu: 4-Manutenção › 5-Integrações › 4-Exportar SERASA (454) · Doc técnico: validacoes-exportar-serasa-454.html · Ajuda: botão ? da janela
Status no status-porte.csv: PARCIAL · falta: testar na tela
PARCIAL, "testar na tela" (só exercitado contra o banco).FazerCom um usuário de grupo que tem a opção 454 em grupo_permissao abra 4-Manutenção › 5-Integrações › 4-Exportar SERASA. Depois entre com um usuário de grupo sem a opção.
Resultado esperadoO primeiro vê o item e abre a janela; o segundo não vê o item no menu. No script 2026.046 a opção entrou com INSERT IGNORE e a permissão copiada de 451 (quem já tinha a opção não mudou). O master sempre vê. O corte é só do menu: a API não confere a opção.
Como conferirSELECT idopcao, descricao FROM opcao_sistema WHERE idopcao IN ('454','451'); SELECT idgrupo, permissao_opcao_entrar FROM grupo_permissao WHERE idopcao = '454' ORDER BY idgrupo
FazerAbra a tela.
Resultado esperadoO período nasce na última semana fechada, de sábado a sexta (a remessa do Relato é semanal).
FazerDatas vazias; final anterior à inicial; banco sem filial com CNPJ.
Resultado esperado"Informe a data inicial e a data final."; "A data final é anterior à inicial."; "Nenhuma filial com CNPJ cadastrado para o cabeçalho do Relato.".
FazerGere a remessa de uma semana.
Resultado esperadoResultado "Arquivo remessa_relato_… baixado: 812 clientes, 3.405 títulos, 2 parte(s)." (números variam). Registros de 130 posições com CRLF: 00 cabeçalho (CNPJ da matriz, período, periodicidade S), 01/01 tempo de relacionamento, 01/05 título (documento-parcela, emissão, valor em centavos truncado, vencimento, data do pagamento ou brancos) e 99 rodapé. Com mais de 20.000 documentos (50.000 nos cancelados) o arquivo é partido num .zip e só a última parte leva cabeçalho e rodapé.
FazerConfira títulos a receber vivos do tipo 114 com emissão no período, e as baixas do último dia.
Resultado esperadoEntra título 114 com emissão no período e o emitido antes só se a baixa for do último dia do período. Fora: cliente com CPF, ou do próprio grupo (mesma raiz de 8 dígitos do CNPJ da matriz), documento que não começa por 0. Parcela maior que 9 sai como *. Cancelados: títulos excluídos com export_serasa='T', NF-e cancelada e alteração no período.
FazerGere até um dia com título emitido com hora.
Resultado esperadoO título do último dia entra (faixa meio-aberta).
Menu: 4-Manutenção › 5-Integrações › 5-Conciliação SERASA (455) · Doc técnico: validacoes-conciliacao-serasa-455.html · Ajuda: botão ? da janela
Status no status-porte.csv: PARCIAL · falta: testar na tela
PARCIAL, "testar na tela" (só exercitado contra o banco).FazerCom um usuário de grupo que tem a opção 455 em grupo_permissao abra 4-Manutenção › 5-Integrações › 5-Conciliação SERASA. Depois entre com um usuário de grupo sem a opção.
Resultado esperadoO primeiro vê o item e abre a janela; o segundo não vê o item no menu. No script 2026.046 a opção entrou com INSERT IGNORE e a permissão copiada de 451 (quem já tinha a opção não mudou). O master sempre vê. O corte é só do menu: a API não confere a opção.
Como conferirSELECT idopcao, descricao FROM opcao_sistema WHERE idopcao IN ('455','451'); SELECT idgrupo, permissao_opcao_entrar FROM grupo_permissao WHERE idopcao = '455' ORDER BY idgrupo
FazerEscolha arquivo de uma linha, cabeçalho sem CONCILIA, data ilegível (2026AB12) e registro com data de pagamento já preenchida.
Resultado esperado"Arquivo invalido: não é um arquivo de conciliação do SERASA."; "Arquivo invalido: data da conciliação ilegível no cabeçalho (2026AB12)."; "Arquivo invalido: a linha 37 já traz data de pagamento (esperado 99999999 nas posições 58-65).".
FazerEscolha um arquivo válido e leia a grade.
Resultado esperadoBusca o CNPJ em todo o cadastro, mesma parcela e documento começando por 0 + documento do arquivo. Vale a baixa viva com data entre o vencimento e a data da conciliação; a data do retorno é a maior e o valor baixado é a soma. Baixa anterior ao vencimento não conta; depois da conciliação é ignorada.
FazerUse um título que não existe.
Resultado esperadoColuna Status "Não encontrado 00123456" com a linha em vermelho e o aviso "Existem titulos não encontrados!" ao lado do resumo.
FazerClique Gerar retorno.
Resultado esperadoBaixa retorno_conciliacao_ref_AAAA_MM_DD_em_AAAA_MM_DD_HH_MM_SS.txt: cabeçalho como veio, cada registro com 1-57 como veio + data da baixa (ou 8 brancos) + 66-130 como veio, e o trailer, completados a 150 colunas. O servidor relê o arquivo (não confia na grade). Arquivo sem trailer: "Arquivo sem trailer - não dá para gerar o retorno.".
Menu: 4-Manutenção › 5-Integrações › 6-Importar XML de Entrada (456) · Doc técnico: validacoes-importar-xml-entrada-456.html · validacoes-nfe-recebidas-374-457.html · Ajuda: botão ? da janela
Status no status-porte.csv: PARCIAL · falta: testar na tela
xml_fornecedor). Status PARCIAL, "testar na tela" (só exercitado contra o banco).opcao_sistema (idOpcao: null): quem vê o submenu Integrações usa a tela; o alcance é limitado às filiais do usuário.FazerEscolha vários .xml e depois um .zip.
Resultado esperadoEscolher os arquivos já dispara a prévia, que não grava nada; o Importar reenvia e o servidor relê tudo. .zip sem XML: "Nenhum arquivo XML recebido.".
FazerEnvie XML vazio; não XML (com DOCTYPE); evento/CT-e; XML repetido no mesmo envio; nota da própria filial; nota cancelada (<cStat>101</cStat>); CNPJ sem cadastro; nota sem lançamento.
Resultado esperado"Arquivo vazio."; "Não é um XML válido."; "Não é uma NF-e (sem <ide>/<emit>)."; "O mesmo XML já veio neste envio." (Repetido); "Emitida pela própria filial (nota de saída)." (Própria); "NF-e cancelada." (Cancelada); "CNPJ/CPF sem cadastro de emitente." (Sem cadastro); "Nenhum lançamento com esta nota para o emitente." (Não encontrada). "Mostrar só os pulados" filtra só eles.
FazerUse nota presente em 242, 2322 e 221; documento 001-001-0000055 com nNF 55; nota 12 e documento 1234.
Resultado esperadoVale o primeiro: almoxarifado ("Almox."), carne ("Carne"), título ("Título"), só lançamentos vivos e só nas filiais do usuário; com mais de um na mesma tabela vale o de menor id. 001-001-0000055 e 12-1 casam com 55 e 12; a nota 12 não casa com o documento 1234 (o legado casava).
FazerEnvie o XML de um lançamento que já tem XML.
Resultado esperado"O lançamento já tem XML." (Já importada); nada muda.
FazerCom notas "Importar", clique Importar e confirme.
Resultado esperadoPergunta "Anexar o XML em 3 lançamento(s)?"; grava numa transação o XML (UTF-8) em xml_fornecedor; na compra de almoxarifado e na de carne a data_emissao passa a ser a do XML; no título só o XML. Depois a grade mostra o que aconteceu. Não há trava de mês fechado (como no legado: decisão pendente).
Como conferirSELECT id, documento, data_emissao, xml_fornecedor IS NOT NULL FROM almoxarifado_compra WHERE id = :id (ou faturamento_compra_carne / financeiro_emissao)
FazerEm vez de escolher arquivos, informe "Recebidas no SIEG de ... até" (no máximo 31 dias) e clique Buscar no SIEG; depois marque "Todas as minhas filiais".
Resultado esperadoTraz as NF-e recebidas pelo CNPJ da filial em que você está (uma consulta por filial com a opção marcada, pode demorar); o Importar reaproveita o que a busca trouxe por 10 minutos. A chave do SIEG fica em Config. Globais (41), "SIEG - chave da API" (master). Não rodar em produção sem combinar. Fonte: ajuda 456 (o doc técnico não cobre este caso).
FazerSelecione uma linha e clique Visualizar DANFE; depois Imprimir.
Resultado esperadoO DANFE abre sem gravar nada; o Imprimir tira a lista em PDF ou planilha.
Menu: 4-Manutenção › 5-Integrações › 8-Importar NFC-e do PDV (458) · Doc técnico: validacoes-importar-nfce-pdv-458.html · Ajuda: botão ? da janela
Status no status-porte.csv: PARCIAL · falta: teste na tela
pdv_route (a conexão ao PDV é somente leitura) e banco do PDV acessível; só nas filiais de Umuarama, São Lourenço e Iporã há contas de caixa no código. O PDV de São Lourenço (filial 8) não responde desde agosto/2026. Homologação (grava venda tipo 114). Status PARCIAL, "testar na tela" (só exercitado contra o banco).FazerCom um usuário de grupo que tem a opção 458 em grupo_permissao abra 4-Manutenção › 5-Integrações › 8-Importar NFC-e do PDV. Depois entre com um usuário de grupo sem a opção.
Resultado esperadoO primeiro vê o item e abre a janela; o segundo não vê o item no menu. No script 2026.046 a opção entrou com INSERT IGNORE e a permissão copiada de 451 (quem já tinha a opção não mudou). O master sempre vê. O corte é só do menu: a API não confere a opção.
Como conferirSELECT idopcao, descricao FROM opcao_sistema WHERE idopcao IN ('458','451'); SELECT idgrupo, permissao_opcao_entrar FROM grupo_permissao WHERE idopcao = '458' ORDER BY idgrupo
FazerAbra em filial sem caixa; depois sem escolher caixa; sem datas; datas invertidas; período começando em mês fechado.
Resultado esperado"Esta filial não tem caixa de PDV cadastrado (pdv_route)."; "Selecione a conexão do PDV (caixa)."; "Informe a data inicial."; "Informe a data final."; "A data final não pode ser anterior à inicial."; "O período começa em mês fechado: a U.D.F. é 31/08/2026." (o próprio dia da U.D.F. também é recusado).
FazerEscolha caixa desligado/fora da rede; caixa de outra filial (API); senha do pdv_route inválida.
Resultado esperado"Falha ao ler o PDV (192.168.0.10:3306/pdv): ..." (não é defeito da tela); "Conexão PDV 12 não encontrada nesta filial."; "A senha cadastrada da conexão PDV tem caractere inválido.".
FazerClique Conferir num período com cupons variados.
Resultado esperadoCada cupom aparece com a situação e a frase na Observação: "Cupom sem NFC-e no PDV."; "NF-e modelo 55 (emitida pelo CEIF a partir do PDV) - não é NFC-e."; "NFC-e sem documento/série/modelo no PDV."; "Emissão em mês fechado (U.D.F.)."; "NFC-e cancelada (cStat 135) - não há venda a excluir."; "NFC-e cancelada: a venda será excluída."; "NFC-e não autorizada (cStat vazio)."; "Já importada - será substituída.". Autorizada = 100 ou 150; a situação vem da tabela do PDV (caixa_nfe), não do XML.
FazerUse cupom com cliente inexistente, produto inexistente, produto sem centro de custo de venda, sem itens com valor e filial de outra cidade.
Resultado esperado"O cliente 10254246 do PDV não existe no cadastro."; "Produto 10057 do PDV não existe no cadastro."; "Produto PICANHA BOVINA [10057] sem centro de custo de venda."; "Cupom sem itens com valor."; "Não há conta de caixa definida para a loja de MARINGA.". Sem id do PDV vale o emitente pelo CPF/CNPJ do consumidor e, sem ele, o cliente padrão da cidade.
FazerReimporte venda que já tem asiento conferido e outra com baixa conciliada.
Resultado esperado"A venda 1003300001 já importada tem asiento conferido - não será substituída." e "... tem baixa conciliada - não será substituída."; só esse cupom fica em Erro.
FazerClique Importar e confirme (homologação).
Resultado esperadoPergunta "Gravar 42 cupom(ns)? As vendas já importadas serão substituídas.". Por cupom grava: faturamento_venda tipo 114 (MI, SFR, tipo_doc 'FA', chave na observação), cada item duas vezes (tipo_produto 1 e 2), um título a receber por centro de custo do produto (vNF, já baixado na conta do caixa) e a linha de faturamento_nfe com o XML. Uma transação por cupom: o que falha fica em Erro sem deixar nada gravado e sem impedir os outros; o resumo conta importados, substituídos, cancelados e erros. Quantidade com 3 casas; forma de pagamento pelo 1º tPag.
FazerImporte de novo o mesmo período.
Resultado esperadoOs cupons já importados aparecem como "Já importada - será substituída."; ao confirmar, a venda nova tem os mesmos números da antiga (itens, título, baixa).
Menu: 4-Manutenção › 5-Integrações › 9-Reprocessar Comissões (459) e A-Reprocessar Custo Médio (459) · Doc técnico: validacoes-reprocessamentos-459.html · Ajuda: botão ? da janela
Status no status-porte.csv: PARCIAL · falta: testar na tela
central (custo médio roda só no Brasil 004 e no Chile 005). Sem opção em opcao_sistema. Status PARCIAL, "testar na tela" (só exercitado contra o banco).FazerAbra "Reprocessar Comissões", informe data inicial (final opcional) e gere a prévia.
Resultado esperadoDuas metades na filial da sessão: pedido de venda (tipos 113, 114, 1121, 1194, 11107, 11151, 11154, 11109, 11153 com venda viva) e ordem de compra (112, 1112, 1113 com compra viva), com % atual × novo. A prévia é livre.
FazerSem data inicial; final anterior; Aplicar sem ser master.
Resultado esperado"Informe a data inicial."; "A data final é anterior à inicial."; "Só o usuário master pode reprocessar as comissões." (botão desabilitado: "Só o usuário master aplica.").
FazerProcure venda tipo 11109, pedido sem vendedor, compra sem documento de referência, sem venda do cliente com o documento, compra tipo 112.
Resultado esperado"venda 1002131035 é troca de nota (11109) - não reprocessada"; "pedido sem vendedor - % vai a zero"; "compra 100312804 sem documento de referência - ordem não tocada"; "nenhuma venda viva do cliente com o documento [000038988] - ordem não tocada"; a compra 112 é pulada sem aviso.
FazerComo master, aplique num período curto.
Resultado esperadoPergunta "Gravar o % de comissão em 14 lançamento(s) e 18 título(s)?"; grava no pedido/ordem e em perc_comissal das parcelas 1 vivas. Atenção: o título cujo % foi acertado à mão no 221 volta ao % da tabela do vendedor (decisão de 24/09/2026; conferir a prévia antes). Jun-set/2026 no central: mesmo % em 5.460 de 5.460 pedidos contra o PED antigo.
Como conferirSELECT id, perc_comissal FROM financeiro_emissao WHERE idfaturamento = :venda AND idtipo_parcela = 1
FazerAbra "Reprocessar Custo Médio", informe período e filial, e gere a prévia.
Resultado esperadoVenda (2333): toda linha tipo_produto='1' das vendas vivas do período recebe o custo médio móvel no fim do dia da emissão e vlr_tab_minimo da tabela vigente (a mais recente); pedido (2332): só linhas com custo zerado ou nulo. A grade mostra as 3.000 primeiras (o resumo conta todas). Os números mudam em relação ao gravado (conta nova em kg, com produção e lançamentos manuais).
FazerSem período; final anterior; filial fora do alcance; Aplicar sem ser master.
Resultado esperado"Informe o período (data inicial e final)."; "A data final é anterior à inicial."; "Você não tem acesso à filial 18."; "Só o usuário master pode reprocessar o custo médio.".
FazerProcure linha de venda sem nenhuma entrada com preço até o fim do dia e linha de pedido sem custo.
Resultado esperado"Sem custo médio na data (grava zero)" (e vlr_tab_minimo 0 sem tabela vigente); pedido: "Sem custo médio: vale o valor unitário da linha".
FazerComo master, aplique.
Resultado esperadoPergunta "Gravar o custo médio em 162 linha(s)?" (total das que mudam, não só as mostradas); grava numa transação.
FazerGrave (homologação) uma Compra de Carne (2322) ou Lançamento Manual (234) com data de mais de 30 dias atrás.
Resultado esperadoA gravação acontece, mas o recálculo automático do custo médio não roda; aparece o painel de aviso (cabeçalho X-Aviso-Sistema): "Movimento de estoque com data de 19/06/2026, mais de 30 dias atrás: o custo médio das vendas seguintes NÃO foi recalculado. ... rode 4-Manutenção › 5-Integrações › Reprocessar Custo Médio (459) a partir de 19/06/2026.". Movimento com data futura não recalcula nem avisa; outros países não recalculam nem avisam.
Menu: 4-Manutenção › 6-Token (46) · Doc técnico: validacoes-token-46.html · Ajuda: botão ? da janela
Status no status-porte.csv: FECHADO_100%
TOKEN_*; um com TOKEN_MASTER; um sem regra. O consumo se testa numa tela que pede token (421 momentâneo, 221 recuperação judicial, centro de custo 175).INSERT IGNORE e permissão copiada de 41 nas bases que não a tinham.FazerCom um usuário de grupo que tem a opção 46 em grupo_permissao abra 4-Manutenção › 6-Token. Depois entre com um usuário de grupo sem a opção.
Resultado esperadoO primeiro vê o item e abre a janela; o segundo não vê o item no menu. No script 2026.046 a opção entrou com INSERT IGNORE e a permissão copiada de 41. O master sempre vê. O corte é só do menu: a API não confere a opção.
Como conferirSELECT idopcao, descricao FROM opcao_sistema WHERE idopcao IN ('46','41'); SELECT idgrupo, permissao_opcao_entrar FROM grupo_permissao WHERE idopcao = '46' ORDER BY idgrupo
FazerAbra o 46; mude o período e use "Somente abertos".
Resultado esperadoPeríodo pela data de criação, padrão os últimos 30 dias; token não usado destacado em laranja. Datas invertidas: "A data inicial não pode ser maior que a final.". Fora do master, a grade traz só os tokens gerados pelo próprio usuário; o master vê os de todos.
FazerGere um token com motivo e (opcional) regra específica.
Resultado esperadoA senha tem dez letras que cifram data e hora seguidas de AAAAMMDD-HHMMSS (igual ao legado: serve no desktop e vice-versa). Dois tokens no mesmo segundo: a senha é gerada de novo com o segundo seguinte.
FazerCom usuário fora do ADM, ou ADM sem master nem regra TOKEN_*, tente gerar/alterar.
Resultado esperado"Sem permissão para gerar token - é preciso ser do grupo ADM e ser master ou ter uma regra TOKEN_*." (a tela já desabilita Gerar e Alterar).
FazerSem TOKEN_MASTER, gere um token sem regra.
Resultado esperado"Token genérico exige a regra [TOKEN_MASTER] - escolha a regra (a finalidade) do token." (a janela esconde a opção genérico). Token com regra que o usuário não tem: "Você não tem a regra [TOKEN_HABILITA_BLOQUEIO_CENTRO_CUSTO] - não pode gerar um token para ela.".
FazerAltere motivo e regra de um token não usado; tente um usado; tente o de outra pessoa.
Resultado esperadoMuda só motivo e regra (a senha nunca). "Este token já foi utilizado e não pode ser alterado."; "Só quem gerou o token (ou o master) pode alterá-lo."; id inexistente "Token não encontrado.".
FazerUse o token genérico no 421 (Momentâneo) ou na baixa de título em recuperação judicial; depois reuse o mesmo.
Resultado esperadoO token vale uma vez (usado='T'). Reuso, senha errada ou token gerado com regra: "Token inválido ou já utilizado.". Exemplo 428: "Título em recuperação judicial - informe um token de liberação para pagar.".
FazerGere um token com a regra TOKEN_HABILITA_BLOQUEIO_CENTRO_CUSTO e use no 175 para marcar/desmarcar Bloqueado.
Resultado esperadoSem token: "Bloquear centro de custo requer token específico - fale com quem tem a regra TOKEN_HABILITA_BLOQUEIO_CENTRO_CUSTO." (desmarcar diz "Desbloquear"). Token genérico, errado ou usado: "Token inválido para esta operação - confira se ele foi gerado com a regra TOKEN_HABILITA_BLOQUEIO_CENTRO_CUSTO e ainda não foi usado.". O token com regra não libera um pagamento em recuperação judicial (a trava comum recusa).
Menu: 4-Manutenção › 8-Configuração SIAT (48) · Doc técnico: validacoes-configuracao-siat-48.html · Ajuda: botão ? da janela
Status no status-porte.csv: PARCIAL · falta: rodar scripts/sql/siat_bolivia.sql; envio real ao piloto do SIN; validação por XSD; teste de tela
scripts/sql/siat_bolivia.sql rodado; ponto de teste do piloto do SIN com código do sistema e token delegado.PARCIAL: falta rodar o script de banco, o envio real ao piloto do SIN, a validação por XSD e o teste de tela. Opção própria 48 desde o script 2026.046 (permissão copiada da 41; antes não pedia permissão).FazerCom um usuário de grupo que tem a opção 48 em grupo_permissao abra 4-Manutenção › 8-Configuração SIAT. Depois entre com um usuário de grupo sem a opção.
Resultado esperadoO primeiro vê o item e abre a janela; o segundo não vê o item no menu. Antes do script o item aparecia para todo usuário com o menu (antesDaOpcao: null), em qualquer país; depois, só quem tem a opção 48 (cópia da 41). Base sem a linha 48: vale a regra antiga. O master sempre vê. O corte é só do menu: a API não confere a opção.
Como conferirSELECT idopcao, descricao FROM opcao_sistema WHERE idopcao IN ('48','41'); SELECT idgrupo, permissao_opcao_entrar FROM grupo_permissao WHERE idopcao = '48' ORDER BY idgrupo
FazerAbra o 48 em tenant que ainda não rodou siat_bolivia.sql.
Resultado esperado"Este banco não tem as tabelas do SIAT - peça ao suporte para rodar scripts/sql/siat_bolivia.sql e reiniciar o backend."; sem botões de gravação.
Como conferirSELECT table_name FROM information_schema.tables WHERE table_schema = DATABASE() AND table_name LIKE 'siat\_%'
FazerEntre sem ser master e abra o 48.
Resultado esperadoGrade visível, campos desabilitados, aviso "Só o master grava a configuração SIAT.", sem Novo/Gravar/Excluir/Testar/Sincronizar. Chamada direta de gravação: "So o master grava a configuracao SIAT.".
FazerNovo, sucursal 0, ponto 0, código do sistema e token do piloto, Ativo marcado, Gravar.
Resultado esperado"Ponto de venda gravado."; a linha aparece com token "preenchido" e CUIS vazio; o token nunca volta (reabrir: campo vazio com a dica "em branco mantém o gravado").
Como conferirSELECT id, idfilial, codigo_sucursal, codigo_punto_venta, codigo_sistema, token IS NOT NULL tem_token, cuis, ativo FROM siat_punto_venta
FazerInclua outro ponto com a mesma sucursal e o mesmo ponto na filial; depois altere um ponto para ficar igual a outro.
Resultado esperado"Ja existe nesta filial um ponto de venda com a sucursal X e o ponto Y." na inclusão e na alteração (desconsidera o próprio ponto). Antes saía erro cru da chave única siat_punto_venta_uk.
Como conferirSELECT idfilial, codigo_sucursal, codigo_punto_venta, COUNT(*) FROM siat_punto_venta GROUP BY 1,2,3 HAVING COUNT(*) > 1 (deve voltar vazio)
FazerInclua um segundo ponto com Ativo; depois altere o primeiro para Ativo.
Resultado esperadoSempre exatamente um ativo='T' por filial; o anterior passa a F na mesma gravação.
Como conferirSELECT idfilial, COUNT(*) FROM siat_punto_venta WHERE ativo = 'T' GROUP BY idfilial HAVING COUNT(*) > 1 (deve voltar vazio)
FazerSucursal 100 + ponto 10; sucursal vazia; código do sistema vazio.
Resultado esperado"Sucursal e ponto de venda juntos passam de 5 caracteres (faturamento_nfe.serie)."; "Informe a sucursal e o ponto de venda (0 ou mais)."; "Informe o codigo do sistema entregue pelo SIN.".
FazerAltere só o código do sistema, token em branco, Gravar; depois altere sucursal/ponto ou digite um token.
Resultado esperadoToken e CUIS preservados. Alterando sucursal/ponto, ou digitando qualquer token, o CUIS e os CUFD do ponto são apagados.
Como conferirSELECT cuis, cuis_vigencia FROM siat_punto_venta WHERE id = :id; SELECT COUNT(*) FROM siat_cufd WHERE idsiat_punto_venta = :id
FazerCom token válido do piloto e AMBIENTE_NFEBO = HOMOLOGACAO, clique no botão; depois com token errado e com ponto sem token.
Resultado esperado"Comunicação: OK · PILOTO · CUIS <código> · CUFD válido até <data>"; siat_cufd ganha uma linha. Token errado: "O SIAT recusou o token delegado (HTTP 401)...". Sem token: "Ponto de venda SIAT sem token delegado cadastrado." (uma única redação, a mesma em todos os caminhos). Sem NIT: "A filial N nao tem NIT (filial.cnpj).".
Como conferirSELECT codigo_control, direccion, fecha_vigencia FROM siat_cufd WHERE idsiat_punto_venta = :id ORDER BY id DESC LIMIT 1
FazerClique "Sincronizar leyendas".
Resultado esperado"N leyendas sincronizadas."; siat_leyenda é substituída por completo (se o SIN devolver vazio: "O SIAT devolveu a lista de leyendas vazia." e a lista antiga fica).
Como conferirSELECT codigo_actividad, COUNT(*) FROM siat_leyenda GROUP BY codigo_actividad
FazerCom usuário não master, chame GET /lancamento/nfe/bolivia/pontos/{id}/catalogo/{nome} (nenhuma tela chama; teste pela API) e depois com master.
Resultado esperadoNão master: "So o master grava a configuracao SIAT." (o catálogo usa o token e pode pedir CUIS novo, que grava). Master: devolve o catálogo. Só a lista (GET /pontos) continua livre.
FazerExclua um ponto sem facturas; depois um que já emitiu.
Resultado esperadoO primeiro some; o segundo recusa "Este ponto de venda ja emitiu N factura(s) - desative em vez de excluir.".
FazerCadastre pontos em duas filiais e alterne a filial da sessão.
Resultado esperadoA grade mostra só os pontos da filial da sessão; alterar/excluir/testar ponto de outra filial por id: "Este ponto de venda e de outra filial.".
FazerCom ponto ativo, CUIS/CUFD e leyendas, emita uma factura (piloto). Envio real ao piloto ainda não foi feito: este caso é o que falta.
Resultado esperadoCabeçalho da factura com sucursal/ponto, CUF e CUFD do ponto; faturamento_nfe com modelo BO e cstat_nfe 908 quando validada. Sem ponto ativo: "A filial N nao tem ponto de venda SIAT ativo - cadastre em Configuracao SIAT...".
Como conferirSELECT idfaturamento, modelonf, serie, cstat_nfe, motivo_nfe FROM faturamento_nfe WHERE modelonf = 'BO' ORDER BY id DESC LIMIT 5
Menu: 4-Manutenção › 9-Saúde do Cadastro (49) · Doc técnico: validacoes-saude-cadastro-49.html · Ajuda: botão ? da janela
Status no status-porte.csv: REVISAR
central (Brasil) e, para os itens que existem fora do Brasil, fjfrigo_concepcion. Só avisa: nada é alterado (sem confirmação, token ou transação).49 desde o script 2026.046 (permissão copiada da 15; antes não pedia permissão). A tela irmã A-Vencimentos tem outro serviço e fica fora deste roteiro.REVISAR. A reconferência automática de situação fiscal (item EMITENTE_SITUACAO_FISCAL) não roda em homologação (app.conexao.hml=1).FazerCom um usuário de grupo que tem a opção 49 em grupo_permissao abra 4-Manutenção › 9-Saúde do Cadastro. Depois entre com um usuário de grupo sem a opção.
Resultado esperadoO primeiro vê o item e abre a janela; o segundo não vê o item no menu. Antes do script o item aparecia para todos (antesDaOpcao: null); depois, só quem tem a opção 49 (cópia da 15). Base sem a linha 49: vale a regra antiga. O painel mostra nomes, CNPJ/CPF, chaves PIX e contas a qualquer usuário que o abra. O master sempre vê. O corte é só do menu: a API não confere a opção.
Como conferirSELECT idopcao, descricao FROM opcao_sistema WHERE idopcao IN ('49','15'); SELECT idgrupo, permissao_opcao_entrar FROM grupo_permissao WHERE idopcao = '49' ORDER BY idgrupo
FazerAbra o 49, deixe "Todas as minhas filiais" desmarcada e clique Conferir.
Resultado esperadoOs itens aparecem por área (Financeiro, Faturamento, Contábil) com "!" e contagem, ou "✓" verde quando zerado; "Nenhum problema encontrado." só se todos zerarem. Contador "Conferindo… (Ns)"; os blocos rodam em paralelo.
FazerAbra o "?" da janela e compare a lista de itens com a tela.
Resultado esperadoA ajuda descreve os 22 itens por área, com o recorte de cada um (produto desativado fora, mínimo abaixo do custo só da filial da sessão, conta sintética do tipo aceita) e o item "Conferência que não rodou". Antes listava 13.
FazerNum produto desativado (central: 279) sem NCM, sem tributação ou sem centro de custo de venda, procure-o nos itens de produto.
Resultado esperadoProduto desativado não aparece nos itens "sem tributação", "tabela sem filial", "sem grupo/subgrupo comercial", "sem NCM" e "sem centro de custo de venda" (o filtro é IFNULL(p.desativado,'F') <> 'T', como no item de NCM fora da tabela).
Como conferirSELECT p.id, p.descricao, p.desativado FROM produto p WHERE p.desativado = 'T' AND (LENGTH(TRIM(IFNULL(p.codigo_mercosul,''))) < 8 OR IFNULL(p.idtab_impostos,0) = 0) LIMIT 20 (nenhum desses ids pode estar na lista da tela)
FazerSe possível, derrube uma conferência (ex.: banco sem uma tabela/coluna usada por um bloco) e abra o painel; senão registre "sem como simular".
Resultado esperadoA conferência inteira não cai: o bloco que falhar vira um item FALHA_<bloco> na sua área, com a linha "Esta conferência não rodou" e a causa raiz; a tela mostra "Conferência que não rodou"; os outros itens saem normalmente; o log registra "Saude do cadastro: o bloco X falhou".
FazerAbra o item "sem conta contábil" do tipo de faturamento e compare com tipos que apontam para conta sintética (central: 89; concepcion: 56).
Resultado esperadoTipo cuja conta é sintética (FORNECEDORES LOCAIS, DUPLICATAS A RECEBER...) não aparece (a sincronização lança na analítica do emitente sob ela). Só entram conta zerada, inexistente ou excluída.
Como conferirSELECT tf.id, tf.descricao, tf.idplconta FROM tipo_faturamento tf LEFT JOIN ct_plano_conta pc ON pc.id = tf.idplconta WHERE IFNULL(tf.idplconta,0) = 0 OR pc.id IS NULL OR pc.excluido = 'T'
FazerAbra o item "Produto com mínimo abaixo do custo médio" com a filial da sessão e depois marque "Todas as minhas filiais".
Resultado esperadoA lista é sempre da filial da sessão (mínimo, custo, margem %); marcar todas as filiais não muda este item (de propósito: o custo médio percorre o estoque inteiro da filial). A ajuda diz isso agora.
FazerMarque "Todas as minhas filiais" e Conferir.
Resultado esperadoItens de produto, filial e conta bancária crescem com as outras filiais; itens de emitente, tipo e subgrupo ficam iguais (não são por filial).
FazerMarque o filtro.
Resultado esperadoAs contagens passam a ser as recentes; linhas em laranja são as recentes; cadastro parado some (filtro local).
FazerEscolha "Produto sem NCM" e abra um produto da lista; corrija no 183 e reconfira.
Resultado esperadoO produto tem codigo_mercosul com menos de 8 caracteres; corrigido, sai da lista. Fora do Brasil os itens de tributação/comercial não existem, mas NCM e centro de custo sim.
Como conferirSELECT p.id, p.descricao, p.codigo_mercosul, p.idtab_impostos, p.idcentro_custo_venda FROM produto p WHERE p.idfilial IN (:filiais) AND (LENGTH(TRIM(IFNULL(p.codigo_mercosul,''))) < 8 OR IFNULL(p.idtab_impostos,0) = 0 OR IFNULL(p.idcentro_custo_venda,0) = 0)
FazerItem "Tabela de tributação sem linha na filial do produto" (Brasil).
Resultado esperadoDetalhe "filial N · tabela T"; corrige-se cadastrando a linha da filial na tabela de tributação.
Como conferirSELECT p.id, p.idfilial, p.idtab_impostos FROM produto p WHERE IFNULL(p.idtab_impostos,0) > 0 AND NOT EXISTS (SELECT 1 FROM tab_impostos_uf u WHERE u.idtab_impostos = p.idtab_impostos AND u.idfilial = p.idfilial)
FazerCadastre um produto com NCM de 8 dígitos que não está na tabela oficial (ou extinto) e confira.
Resultado esperadoAparece em "Produto com NCM inexistente ou extinto" com o motivo ("NCM xxxx.xx.xx inexistente" ou "extinto (descrição)"; com 7 dígitos e zero faltando sugere a forma com o zero). Produto desativado não entra. Sem tab_ncm carregada: uma linha pedindo "Atualizar tabela NCM" no 183.
Como conferirSELECT n.codigo, n.ativo, n.descricao FROM tab_ncm n WHERE n.codigo = REGEXP_REPLACE(:ncm, '[^0-9]', '')
FazerItem "Emitente sem cidade (ou cidade sem estado)".
Resultado esperadoLinhas com "sem cidade", "cidade N inexistente" ou "cidade N sem estado", com último uso = última venda.
Como conferirSELECT e.id, e.razao_social FROM emitente e LEFT JOIN cidade c ON c.id = e.idcidade WHERE c.id IS NULL OR IFNULL(c.idestado,0) = 0
FazerGrave no 15 uma chave PIX de telefone sem +55 e uma conta do Bradesco com dígito errado; confira.
Resultado esperadoAparecem em "Emitente com chave PIX fora do formato" e "Emitente com dígito de agência/conta que não confere"; um título a pagar em aberto com esses dados aparece nos itens de título (221). Banco que não é BB/Bradesco/Itaú não é conferido. Referência: 213 emitentes com dígito de conta no central.
Como conferirSELECT id, razao_social, tipo_pix, chave_pix, banco1, agenciabancaria1, contabancaria1 FROM emitente WHERE id = :id
FazerItem "Tipo de faturamento sem operação fiscal (tipo_natop)" (Brasil).
Resultado esperadoCada linha mostra "tipo_natop vazio"; o último uso vem do último ano; tipo só usado em título avulso sai sem último uso.
Como conferirSELECT tf.id, tf.descricao FROM tipo_faturamento tf WHERE TRIM(IFNULL(tf.tipo_natop,'')) = ''
FazerFilial sem conta de diferença cambial; subgrupo de almoxarifado sem conta de entrada/saída; conta bancária sem conta contábil.
Resultado esperadoCada um lista a filial/subgrupo/conta com o motivo ("sem conta de diferença cambial", "conta X é sintética", "sem conta de entrada"...); a conta bancária sem conta contábil abre o 173.
Como conferirSELECT cb.id, cb.descricao FROM conta_bancaria cb WHERE IFNULL(cb.idplconta,0) = 0 AND (cb.data_desativacao IS NULL OR cb.data_desativacao > CURDATE())
FazerTroque o PIX/conta de um emitente no 15 (web) e abra o item.
Resultado esperadoA troca aparece nos 30 dias seguintes com "por USUARIO" e, se houve pagamentos depois, "N pagamento(s) depois"; "Abrir" abre a fila de vistos. Quem fez a troca não dá o visto. Troca feita no desktop não aparece.
FazerAbra um item com mais de 300 registros.
Resultado esperadoMostra 300, "mostrando 300", e a contagem total no cabeçalho do item e no painel esquerdo.
FazerImprima a lista de um item e clique "Abrir (opção)".
Resultado esperadoPDF/planilha com as linhas visíveis; "Abrir (183)" abre o cadastro de produtos etc.; no item de troca bancária abre a fila de vistos.