Informe a data.
QuandoSem data.
Não grava. statuscode 400 com a frase abaixo, que a tela mostra como está.
Pergunta antes de seguir. Quem pergunta está dito em cada regra — o servidor (statuscode 409, com o nome do campo) ou a própria tela.
Passa, mas com um comportamento que surpreende quem está conferindo — ou é conferido só na tela.
O servidor devolve a frase do sistema antigo, e várias eram em espanhol lá. Não é tradução faltando.
Informe a data.
QuandoSem data.
Informe o produto.
QuandoSem produto.
Sistema antigo"Campo [Produto] em Branco !" (:663).
Debe informar el motivo !
QuandoGravar sem motivo — na inclusão e na alteração. Nova em 11/09/2026.
AtençãoQuase todo lançamento vindo da produção está sem motivo (em central, 808 mil dos 811 mil). Para regravar um deles por esta tela, informe um motivo — o sistema antigo exige o mesmo.
Sistema antigoA mesma frase (:673).
Tipo de operação inválido.
QuandoTipo de operação fora da lista do combo.
Lançamento sem quantidade e sem peso — só de valor. Gravar assim?
QuandoQuantidade e peso zerados. Quem pergunta é a tela; com "sim" grava. Há lançamento só de valor, e o servidor aceita, como o sistema antigo (que nem pergunta).
AtençãoEm central são 81 lançamentos assim.
Essa data já está fechada.
ComportamentoDesde 04/10/2026 incluir, alterar e excluir conferem parametros.udf da filial: data igual ou anterior recusa. Na alteração vale a data gravada e a nova (tirar um lançamento de um mês fechado também mexe no estoque daquele mês).
Sistema antigoO validaData(…, oParametros:dUDF) do gravar (:668) e do excluir (:764) está comentado no fonte; o porte o liga por decisão do usuário (04/10/2026). Só o importaTXT2 (:969) conferia.
ConsequênciaLançamento retroativo em mês aberto refaz o custo médio das vendas seguintes (até 30 dias).
(sem mensagem) — o tipo de operação do 234 não é o do almoxarifado
QuandoOs mesmos números têm significados diferentes: 112 é Quebra aqui e Entrada no almoxarifado (244); 113 e 114 são transferências aqui. Comparar com tipo_faturamento também engana.
grep hUsuarioRegras no programa do sistema antigo devolve
zero: esta tela não tem regra nomeada a conceder no Acesso dos Grupos (444).
Recusa de regra: HTTP 200 com statuscode 400 e a frase, que a tela mostra no
rodapé da janela. Pergunta do servidor: statuscode 409 com o campo a
reenviar como true. As mensagens que só a tela confere (marcadas como Aviso,
"conferido só na tela") não chegam ao servidor. Erro inesperado traz o código de
ocorrência de 8 caracteres — copie-o no chamado.
Nada chumbado nesta tela. O sistema antigo gravava, na filial 10, a
quantidade igual ao peso — o IF saiu do fonte em 11/09/2026, e o porte nunca o teve.
| O que faltava | Sistema antigo |
|---|---|
| motivo obrigatório | menu234.prg:673 |
| Sistema antigo | Aqui |
|---|---|
| grava quantidade e peso zerados sem dizer nada | grava também, mas a tela pergunta antes — lançamento só de valor é legítimo (decisão do usuário em 11/09/2026) |
Esta seção compara a tela com o CEIF (sistema antecessor, em D:\CEIF) — usado aqui como
segunda fonte, ao lado do sistema antigo — cruzando botões, permissões e campos. O CEIF não tem uma tela
equivalente a esta (nenhuma opção de menu junta produto, quantidade, peso, valor e motivo do jeito que o
menu234 faz), então a comparação serve para confirmar o que já foi levantado acima e para separar achado
real de lacuna esperada. Complementa, sem repetir, as regras de validação já documentadas nas seções A a E.
| Botão / ação | Legado | CEIF | Porte (novo) |
|---|---|---|---|
| Novo / Incluir | trava por testUsPermissao(...,"incluir") | — (tela não existe) | presente, sem trava de permissão de ação |
| Editar / Alterar | trava por permissão; abre também por duplo-clique | — | presente; abre por duplo-clique (@activate) |
| Excluir | trava por permissão; diálogo de confirmação próprio | — | presente; usa confirm() do navegador |
| Imprimir / Demonstrativos (Excel) | exporta planilha via automação OLE do Excel, 12 colunas | — | não portado |
| Atualizar | recarrega a grade | — | presente, equivalente |
| Importar (TXT de produção) | importa TXT posicional, dois leiautes por campo | — | não portado |
| Gravar / Cancelar (formulário) | presente | — | presente, equivalente |
| "..." busca de produto | oBusca:buscar("PRODUTO",...) | — | LookupField, equivalente funcional |
| Pesquisa / filtro na grade | campo de busca + combo "buscar em qual coluna" + "contida" | — | busca livre simples (produto ou motivo); não replica o combo de coluna |
| Mecanismo | Legado | CEIF | Porte (novo) |
|---|---|---|---|
hUsuarioRegras (regra nomeada) | nenhuma — grep vazio | não se aplica (tela não existe) | nenhuma regra nomeada no pacote |
| CRUD por opção de menu | trava incluir/alterar/excluir por botão, dentro da tela já aberta | — | sem equivalente — qualquer sessão com JWT válido e o menu visível grava livremente |
usuario.master | não testado nesta tela | — | não referenciado |
| Tipo de grupo | não testado nesta tela | — | não referenciado |
| Visibilidade de menu | opção precisa estar liberada em grupo_permissao | — | igual (mecanismo geral do projeto) |
| Campo | Legado | Porte (novo) |
|---|---|---|
| Data | não exigida de fato (validação comentada no fonte) | obrigatória — mais estrito que o legado |
| Produto | obrigatório ("Campo [Produto] em Branco !") | obrigatório, equivalente |
| Moeda | combo, dispara busca de câmbio | campo livre, sem obrigatoriedade |
| Tipo operação | combo fixo de 6 itens, default 111 | validado contra a lista de tipos válidos |
| Quantidade | não exigida isoladamente | não exigida (decisão do usuário, 11/09/2026) |
| Peso (líquido) | não exigido isoladamente; recalcula valor unitário | não exigido; aviso na tela quando quantidade e peso são zero |
| Valor unitário | não persistido — derivado, recalcula o valor total | não existe como campo — só "Valor" (total) é editável |
| Valor (total) | recalcula o valor unitário | campo livre, zerado por padrão |
| Câmbio | sempre travado — só leitura, alimentado pela moeda | editável fora da moeda local — divergência de UX |
| Motivo | obrigatório na inclusão e na alteração | obrigatório, mesma frase do legado |
| Usuário incluiu / alterou | gerado | gerado (idêntico) |
| Usuário conferiu | nunca gravado por esta tela | nunca gravado (mesma fidelidade) |
| Excluído | soft delete (excluido='T') | soft delete, idêntico ao legado — confirmado no código, sem achado |
Nenhuma permissão de ação (incluir/alterar/excluir) foi portada
QuandoO legado condiciona os três botões da grade a menu0:testUsPermissao(cClassName,"incluir"|"alterar"|"excluir"), uma matriz de CRUD por opção de menu independente de hUsuarioRegras. No projeto novo essa matriz não é conferida em lugar nenhum: qualquer sessão autenticada com a opção 234 visível no menu pode incluir, alterar e excluir livremente pela API.
AtençãoÉ um padrão arquitetural já assumido no resto do projeto, não uma regressão isolada do 234 — nenhuma tela reproduz a matriz granular do legado. Registrado para o usuário confirmar se é intencional.
Exportação para Excel ("Imprimir/Demonstrativos") não foi portada
QuandoO botão "Imprimir" da grade na verdade chama exportarXLS(), que monta uma planilha via automação OLE do Excel (cabeçalho "Lanzamientos manuais stock", 12 colunas) com os mesmos dados já presentes na grade. Não há endpoint nem botão equivalente na tela nova.
AtençãoRegistrado como pendência, não como bug — o padrão de exportação de grade já existe em outras telas do projeto e poderia ser reaproveitado aqui.
Importação de TXT de produção ("Importar") não foi portada
QuandoO botão "Importar" abre uma janela que pede uma data e lê um arquivo .txt/.csv de produção (layout posicional, com variantes NOVO/CONCEPCION distintas por campo), apagando previamente os lançamentos do dia com tipo_operacao=115 antes de inserir um lançamento por linha reconhecida.
AtençãoCoerente com o comentário do próprio backend: a esmagadora maioria dos lançamentos vem da produção, não de digitação manual, e é exatamente esse mecanismo de importação que grava a maioria dos registros. Gap relevante, fora do escopo desta tarefa (só levantamento).
Câmbio: travado no legado, editável no front
QuandoNo legado, oValorCambio é sempre desabilitado — só leitura, populado automaticamente ao trocar a moeda. No frontend novo o campo "Valor do câmbio" é editável, com um watch que só força o valor 1 quando a moeda escolhida é a moeda local da filial; fora dela o valor fica livre para digitação manual, sem o backend recalcular ou validar contra a tabela de cotação.
AtençãoNão é um bug crítico — o dado ainda é gravado corretamente —, mas é uma divergência de comportamento registrada como achado de UX/fidelidade, sem correção implementada.
Quantidade e peso zerados: regra deliberadamente afrouxada, já documentada
QuandoO legado não recusa lançamento com quantidade e peso ambos zerados (desde que não seja a regra de filial 10, que já saiu do legado). O servidor aceita lançamento só de valor, e a tela pergunta antes de enviar — decisão já tomada e registrada em 11/09/2026.
ConfirmadoEstoqueLancamentoService.validar() não exige quantidade nem peso, e a janela de edição tem o confirm() correspondente. Sem divergência — só documentando que foi conferido de novo contra o CEIF e está de acordo com a decisão já tomada.
Exclusão: soft-delete, fiel ao legado
QuandoO legado faz soft delete (UPDATE ... SET excluido='T') na exclusão. Uma leitura anterior deste levantamento chegou a registrar aqui uma divergência (exclusão física no porte) que, relida no código, não existe: o excluir() do backend já está implementado como soft delete, idêntico ao legado.
ConfirmadoO próprio javadoc do método já cita a linha do legado que fundamenta a fidelidade. Item registrado só para deixar claro que foi conferido — não é achado real.
Nenhuma tela equivalente no CEIF
QuandoConfirmado por dois métodos: (a) CEI234.PRG e CEI244.PRG têm o cabeçalho "Acerto do Estoque/Custo" — função diferente de "lançamento manual de estoque"; (b) busca por conteúdo em todo D:\CEIF não encontrou nenhuma tela com produto+quantidade+peso+valor+motivo/tipo_operacao equivalente ao menu234.prg.
AtençãoComo a maioria dos registros vem da produção, é plausível que o CEIF nunca tenha precisado de uma tela de lançamento manual equivalente. Gap esperado — não inventar correspondência.
Nenhuma regra bate com essa busca. Tente um trecho menor da mensagem, ou limpe os filtros.