FJFrigo · Lançamentos · Faturamento/Exportações › 234

Lançamento de estoque manual

Ajustes de estoque de produto acabado e revenda — implantação, quebra, transferências, produção. Cada regra traz a mensagem exata, quando dispara, onde conferir e o confronto com o sistema antigo.

Tabela: faturamento_lancamentos_manuais Volume: ~811 mil em central Programa antigo: menu234.prg

Bloqueia

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

Confirma

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.

Aviso

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

Português ou espanhol

O servidor devolve a frase do sistema antigo, e várias eram em espanhol lá. Não é tradução faltando.

A

Ao gravar

Na ordem em que é conferido
Bloqueia

Informe a data.

QuandoSem data.

Todos
Bloqueia

Informe o produto.

QuandoSem produto.

Sistema antigo"Campo [Produto] em Branco !" (:663).

Todos
Bloqueia

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

Todos
Bloqueia

Tipo de operação inválido.

QuandoTipo de operação fora da lista do combo.

Todos
Confirma

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.

Todos
Aviso

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

Todos
Aviso

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

Todos
B

Permissões

Quem pode passar

grep hUsuarioRegras no programa do sistema antigo devolve zero: esta tela não tem regra nomeada a conceder no Acesso dos Grupos (444).

C

Como o erro chega na tela

Para o QA reproduzir e reportar

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.

D

Regras chumbadas no código

Esperadas — não abrir como defeito

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.

E

Diferenças e decisões pendentes

O que muda em relação ao sistema antigo

Corrigido em 11/09/2026

O que faltavaSistema antigo
motivo obrigatóriomenu234.prg:673

Diferença

Sistema antigoAqui
grava quantidade e peso zerados sem dizer nadagrava também, mas a tela pergunta antes — lançamento só de valor é legítimo (decisão do usuário em 11/09/2026)
F

Comparação com o CEIF — botões, permissões e campos (17/09/2026)

menu234.prg · D:\CEIF · com.fjfrigo.back.cadastro.estoquelancamento · LancamentosEstoque.vue

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ões

Botão / açãoLegadoCEIFPorte (novo)
Novo / Incluirtrava por testUsPermissao(...,"incluir")— (tela não existe)presente, sem trava de permissão de ação
Editar / Alterartrava por permissão; abre também por duplo-clique—presente; abre por duplo-clique (@activate)
Excluirtrava 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
Atualizarrecarrega 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 produtooBusca:buscar("PRODUTO",...)—LookupField, equivalente funcional
Pesquisa / filtro na gradecampo de busca + combo "buscar em qual coluna" + "contida"—busca livre simples (produto ou motivo); não replica o combo de coluna

Permissões

MecanismoLegadoCEIFPorte (novo)
hUsuarioRegras (regra nomeada)nenhuma — grep vazionão se aplica (tela não existe)nenhuma regra nomeada no pacote
CRUD por opção de menutrava 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.masternão testado nesta tela—não referenciado
Tipo de gruponão testado nesta tela—não referenciado
Visibilidade de menuopção precisa estar liberada em grupo_permissao—igual (mecanismo geral do projeto)

Campos

CampoLegadoPorte (novo)
Datanão exigida de fato (validação comentada no fonte)obrigatória — mais estrito que o legado
Produtoobrigatório ("Campo [Produto] em Branco !")obrigatório, equivalente
Moedacombo, dispara busca de câmbiocampo livre, sem obrigatoriedade
Tipo operaçãocombo fixo de 6 itens, default 111validado contra a lista de tipos válidos
Quantidadenão exigida isoladamentenão exigida (decisão do usuário, 11/09/2026)
Peso (líquido)não exigido isoladamente; recalcula valor unitárionão exigido; aviso na tela quando quantidade e peso são zero
Valor unitárionão persistido — derivado, recalcula o valor totalnão existe como campo — só "Valor" (total) é editável
Valor (total)recalcula o valor unitáriocampo livre, zerado por padrão
Câmbiosempre travado — só leitura, alimentado pela moedaeditável fora da moeda local — divergência de UX
Motivoobrigatório na inclusão e na alteraçãoobrigatório, mesma frase do legado
Usuário incluiu / alterougeradogerado (idêntico)
Usuário conferiununca gravado por esta telanunca gravado (mesma fidelidade)
Excluídosoft delete (excluido='T')soft delete, idêntico ao legado — confirmado no código, sem achado

Achados

Achado real

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.

Todos
Achado real

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.

Todos
Achado real

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

Todos
Divergência de UX

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.

Todos
Confirmado — sem achado

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.

Todos
Confirmado — sem achado

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.

Todos
Gap esperado (CEIF)

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.

Todos

Nenhuma regra bate com essa busca. Tente um trecho menor da mensagem, ou limpe os filtros.