Balanção
Balança Rodoviária Novo
Rotina responsável pelo registro do peso de caminhões que transportam animais vivos (ou outros tipos de carga) até o frigorífico. Cobre identificação do veículo por placa, seleção do tipo de frete, captura de pesos inicial e final (ou peso único), associação de contrato/romaneio de origem, e impressão do comprovante.
Visão Geral Balança Rodoviária
Esta rotina é responsável pelo registro do peso de caminhões que transportam animais vivos (ou outros tipos de carga) até o frigorífico. O operador registra a entrada do veículo, captura um ou mais pesos na balança rodoviária, e grava a carga no sistema. O fluxo cobre: identificação do veículo por placa, seleção do tipo de frete, captura de pesos inicial e final (ou peso único), associação de contrato/romaneio de origem, e impressão do comprovante.
A rotina opera em modo online: toda a persistência e as principais validações de negócio acontecem na API centralizada. O serviço local atua como proxy entre a tela do operador e a API.
operadores de balança, supervisores de indústria.
Pré-requisitos Balança Rodoviária
O posto de trabalho deve estar configurado no cadastro de postos do sistema. Se não estiver: a balança física não é inicializada e o operador não consegue pesar.
A balança física deve estar configurada para o posto (host/porta). Se o host estiver em branco: o sistema exibe alerta com o nome do posto, mas não bloqueia o acesso à tela.
Os Parametros com identificadores 15009, 15010 e 15012 devem estar cadastradas no sistema para que os filtros de tipo de frete e os campos obrigatórios funcionem corretamente .
erpatak > customização > Parêmetros> Logistica
Os tipos de movimento de frete, tipos de veículos, transportadoras, motoristas, pecuaristas e itens de carga devem estar cadastrados no ERPAtak antes do uso.
Fluxo Operacional Balança Rodoviária
Ao conectar ao serviço, o sistema carrega automaticamente os tipos de veículo e tipos de movimento de frete disponíveis, e inicializa a conexão com a balança física.
O operador digita a placa do veículo e pressiona Enter ou Tab.
O sistema consulta a API para obter os dados do veículo (marca/modelo, transportadora, motorista padrão e tipo de veículo).
erpatak > Logistica >Dados do Veículo > Cadastro de Veiculo
- Se o veículo estiver cadastrado: os campos são preenchidos automaticamente.
- Se o veículo não estiver cadastrado: os campos permanecem em branco e a flag de “placa cadastrada” fica como falso.
- Em paralelo, o sistema consulta as cargas em aberto nos últimos 30 dias para a mesma placa; se houver, exibe a tela de seleção de cargas existentes.
O operador seleciona o tipo de frete.
erpatak > Logistica >Dados da Carga> Tipo de Movimentação de frota
- Se o tipo de frete tiver a flag
RestringePlaca = "S"e a placa não estiver cadastrada: o sistema exibe alerta e retorna o combo ao primeiro item, impedindo a seleção. - Se o tipo de frete exigir documento relacionado (
UsaDocumentoRelacionado = "E"ou"S"): o botão de contrato é habilitado e o painel de produtor é desabilitado. Caso contrário, o botão de contrato é desabilitado e o painel de produtor é habilitado. - Os campos auxiliares (Peso V1, Peso V2, Quantidade V1, Quantidade V2, Data V1, Data V2) são exibidos ou ocultados conforme o tipo de frete selecionado: apenas os campos cujos nomes estiverem preenchidos no cadastro do tipo de frete ficam visíveis.
O operador informa os demais campos: motorista, transportadora, GTA, NF produtor, lacre, item da carga, produtor, observação, e campos auxiliares visíveis.
O operador clica em Pesar para capturar o peso via balança física.
- Antes de liberar a pesagem, o sistema valida se tipo de frete e tipo de veículo foram selecionados; se não: exibe alerta e não libera.
- Se o tipo de frete exigir documento relacionado e o campo de contrato estiver vazio: o sistema pergunta se o operador deseja acessar a tela de contratos. Se o operador responder sim, abre a tela de contratos. Em ambos os casos, a pesagem não é liberada até que o contrato seja informado.
- O modo de captura da balança pode ser:
CAPTURA_PROXIMA_AMOSTRA,CAPTURA_PLATAFORMA_VAZIA,CAPTURA_ACAO_ENTER_APOS_PESO_DISPONIVELouCAPTURA_ACAO_ENTER. Cada modo exibe uma mensagem diferente na tela (ver seção Pesagem).
Quando a balança captura o peso, o sistema aplica o fator de divisão configurado na balança (se o fator for nulo ou zero, usa 1) e registra o peso na mensagem.
O operador pressiona Enter para confirmar o peso capturado.
Se necessário, o operador alterna entre peso único (botão Pesagem Única) e pesagem dupla (inicial + final).
O operador clica em Salvar.
- O sistema valida todos os campos obrigatórios antes de salvar (ver seção Validação de Salvamento).
- Se houver erro: exibe mensagem consolidada e não prossegue.
- Se válido: envia a carga e todos os pesos para a API, aguarda resposta e, após sucesso, oferece a impressão do comprovante.
Após salvar com sucesso, a tela retorna ao estado inicial.
A qualquer momento, o operador pode pressionar Cancelar (ou Tecla ESC) para confirmar o cancelamento e limpar todos os dados da tela.
Pesagem Balança Rodoviária
Regras de Negócio
- Se a balança ainda não foi iniciada (
BalancaRodando == false): o sistema carrega as configurações de balança do posto, valida a configuração, e inicializa a balança com callbacks de pós-pesagem e de notificação. - Se a balança já foi iniciada: ignora a chamada de inicialização.
- O peso bruto e o peso líquido enviados para o sistema são calculados como:
peso_da_balanca / fator_de_divisao_configurado. - Se o fator de divisão for nulo ou zero, o fator usado é 1 (sem divisão).
- Nota: no código atual, tanto o peso bruto quanto o peso líquido são calculados como
peso.Bruto / fator, ou seja, o peso líquido é igual ao peso bruto neste fluxo.
- Cada pesagem tem um tipo: I (Inicial), F (Final), U (Único) ou numérico (parcial).
- Ao registrar o primeiro peso de uma carga nova:
- Se o modo for pesagem única (botão Pesagem Única ativo): o tipo inicial é U.
- Caso contrário: o tipo inicial é I.
- Ao registrar o segundo peso (quando já existe um peso I ou U):
- Se já existe peso U: o sistema lança erro — já existe peso único, não é possível adicionar outro.
- Se já existe peso I e já existe peso F gravado na carga em banco: o sistema lança erro — já existe peso final e inicial.
- Se já existe peso I e não existe F em banco: o próximo peso é automaticamente definido como F.
- Se a mensagem de pesagens na tela estiver vazia e o tipo selecionado for F: o sistema notifica que é preciso inserir o peso inicial primeiro, e não registra o peso.
- Se já existe peso do tipo I na mensagem e o tipo a inserir também for I: o sistema exibe alerta de que já existe peso deste tipo.
- Se já existe peso do tipo F na mensagem e o tipo a inserir também for F: o sistema exibe alerta de que já existe peso deste tipo.
- O peso do balancão é exibido na tela apenas quando existem exatamente 2 pesagens na mensagem.
- Cálculo:
|peso_final_liquido - peso_inicial_liquido|(valor absoluto da diferença). - Se o número de pesagens for diferente de 2: o peso exibido é 0.
Cada peso registrado recebe: chave de fato do frete (da carga em processo), tara = 0, peso bruto, peso líquido, data/hora atual, tipo de peso, status de envio = 1 (novo, não enviado), casas decimais = 3, e observação (quando fornecida).
- Quando o botão Pesagem Única está ativo:
- A flag
PesagemUnicaé marcada como verdadeira. - Se já existem pesagens na mensagem: o tipo do primeiro peso é alterado para U.
- A flag
- Quando o botão é desativado: a flag
PesagemUnicaé marcada como falsa.
- Se a carga tem menos de 2 pesos salvos no banco:
- Se existe peso do tipo I ou U: o próximo tipo esperado é automaticamente F.
- Se não existe peso I ou U: o sistema exibe alerta de que não foi encontrado peso inicial.
- Os pesos são ordenados de forma decrescente por data/hora antes de exibição.
- Se a carga já estiver com status fechado (StatusFechado diferente de “N”): a tela é colocada em modo de edição, o botão cancelar e o botão imprimir são ativados, e a mensagem de balança indica que a carga está com status fechado.
Quando a balança sinaliza que um peso está disponível para captura: a mensagem na tela é atualizada para “Pressione Enter para gravar o peso”.
Comportamento do Sistema
- Ao clicar em Pesar: valida tipo de frete e contrato, desabilita o combo de tipo de frete, e inicia o ciclo de captura da balança.
- Ao confirmar com Enter: executa a ação de confirmação da pesagem, que efetiva o valor capturado e o adiciona à mensagem.
- Após registrar cada peso: o botão Pesar é liberado, o botão Digitar Peso é liberado, o botão Tipo Peso é liberado, o botão Pesagem Única é liberado, a tela é habilitada, o botão Remover Peso é habilitado, o campo de placa é desabilitado (não permite alterar a placa depois da primeira pesagem), e o peso do balancão é recalculado.
Peso Manual Balança Rodoviária
Regras de Negócio
- Se o usuário logado não for supervisor de indústria: o sistema exibe alerta informando que o usuário não tem permissão, e não abre o formulário de peso manual.
- Se o usuário for supervisor de indústria: o sistema abre diretamente o formulário de peso manual.
- Se o usuário não for supervisor mas precisar digitar peso: é necessário autenticar um usuário administrador ou supervisor (via tela de autenticação).
- O operador informa usuário e senha de um administrador/supervisor.
- O sistema consulta a API para verificar as credenciais.
- Se o usuário autenticado for administrador: o formulário de peso manual é aberto.
- Se não for administrador: o sistema exibe alerta com nome e código de filial do usuário, informando que não tem permissão.
- Se o usuário não for encontrado: o sistema exibe alerta informando que o usuário não foi encontrado.
- O peso informado deve ser convertível para decimal (aceita ponto ou vírgula como separador decimal).
- A observação é obrigatória: se estiver vazia, o sistema exibe alerta de peso inválido e não registra.
- Se o resultado do diálogo for OK e a conversão e a observação forem válidas: o peso é registrado via o mesmo fluxo de registro de peso da balança, com o peso bruto igual ao peso líquido (valor digitado) e a observação preenchida.
- Após o formulário de peso manual, o combo de tipo de frete é desabilitado.
Comportamento do Sistema
- Ao clicar em Digitar Peso: o sistema valida tipo de frete e contrato, valida os combos (tipo de veículo e tipo de frete), verifica a permissão do usuário, e abre o formulário de peso manual (após autenticação se necessário).
- A balança física é desabilitada enquanto o formulário de peso manual está aberto.
Contratos e Produtor Balança Rodoviária
Regras de Negócio
- Se o tipo de frete exige documento relacionado (
UsaDocumentoRelacionado = "E"ou"S"):- O botão de contrato é habilitado e o painel de produtor é desabilitado.
- Se o campo contrato estiver vazio ao tentar pesar: o sistema pergunta se o operador quer acessar a tela de contratos.
- Se o tipo de frete não exige documento relacionado:
- O botão de contrato é desabilitado.
- O painel de produtor é habilitado (o produtor pode ser informado livremente).
- Ao selecionar um contrato: o campo de texto do contrato recebe o documento do contrato, o lookup de produtor exibe
Codigo Pecuarista - Nome Pecuarista, e o campo de propriedade exibeCodigo Propriedade - Nome Da Propriedade Rural(quando o ID for diferente de zero; caso contrário, apenas o nome). - Se a carga já estiver em aberto (
Carga Em Aberto = SIM): o botão cancelar é ativado.
- O filtro de pesquisa usa os seguintes campos: código da filial, chave de fato do SISBOV, data de abate, situação, lote e perfil de movimento.
- O perfil padrão para pesquisa é ABT0101.
- O tipo de pesquisa de data utiliza
UTILIZAR_DATA_V2(data abate). - A operação de pesquisa de documento é
Indefinido. - Se o filtro tiver situação > 0: o sistema busca contratos associados às cargas já salvas no armazenamento local.
- Se o filtro tiver situação = 0: o sistema retorna os contratos da API diretamente.
Os contratos do armazenamento são agrupados por ChaveDeFato e convertidos para a forma de sincronismo (cada grupo resulta em um item com a chave de fato). Esses itens são adicionados às estatísticas de escalas da carga em processo.
Comportamento do Sistema
- Ao clicar em Contrato: abre a tela de seleção de contratos. Ao selecionar, preenche os campos de contrato, produtor e propriedade na tela principal.
Consulta e Seleção de Cargas Balança Rodoviária
Regras de Negócio
- O filtro usado é: ID da filial, data de movimento de 30 dias atrás até a data atual, status = “N” (em aberto), e placa informada.
- Se houver cargas encontradas: a tela de consulta de cargas é exibida.
- O filtro inicial usa: ID da filial, data de movimento = data do parâmetro do sistema, data final = data do parâmetro do sistema, status = “N”.
- A tela permite filtrar por: texto livre (parâmetro de busca), tipo de movimento de frete (ID ou “Todos” quando ID = -1), datas de início e fim, e status (Aberto = “N”, Fechado = “S”, Todos = “T”).
- Ao pesquisar: o filtro usa o parâmetro de busca, o ID do tipo de movimento de frete (vazio quando “Todos”), o intervalo de datas dos seletores, e o status (vazio quando “Todos”).
- O filtro de status na tela de seleção rápida funciona localmente: a mensagem já carregada é filtrada sem nova chamada à API.
- A grid de cargas é ordenável por qualquer coluna: ao clicar no cabeçalho, ordena ascendente; ao clicar novamente, ordena descendente.
- Ao dar duplo clique em uma carga na grid: a carga é carregada na tela principal.
- Os campos preenchidos ao selecionar uma carga: placa, marca/modelo, código da carga (filial-documento-série-número), NF produtor, observação, GTA, lacre, pesos existentes (carregados da API), tipo de veículo, tipo de movimento de frete, transportadora, motorista, item da carga, produtor, contrato, propriedade, campos auxiliares (V1, V2 de pesos, quantidades e datas).
- O campo contrato é preenchido a partir dos dados da carga. Se o campo produtor estiver preenchido: é feito split por “-” para extrair ID e nome. Se o campo produtor estiver vazio: são usados os valores “0” e “NÃO INFORMADO”.
- As estatísticas de escalas do armazenamento são adicionadas à carga em processo.
- A tela muda para o estado “Editando” e o botão cancelar é ativado.
Comportamento do Sistema
- Ao clicar em Cargas: abre a tela de consulta de cargas com a mensagem inicial.
- Ao pesquisar: atualiza a grid com os resultados filtrados da API.
- Ao selecionar: fecha a tela de cargas e popula a tela principal.
Validação de Salvamento Balança Rodoviária
Regras de Negócio
- Se o combo de tipo de frete estiver visível e não houver valor selecionado: o sistema adiciona o aviso “Tipo de Frete” à mensagem.
- Se o combo de tipo de veículo estiver visível e não houver valor selecionado: o sistema adiciona o aviso “Tipo de Veículo” à mensagem.
- Se não houver nenhuma pesagem registrada na mensagem: o sistema adiciona o aviso “Não foi feita nenhuma pesagem” .
- O tipo de frete pode conter uma mensagem de campos obrigatórios (campo
CamposObrigatorios). - Os campos possíveis são mapeados como:
Peso_1→ campo de peso V1,Peso_2→ campo de peso V2,Qtde_1→ campo de quantidade V1,Qtde_2→ campo de quantidade V2,Data_1→ seletor de data V1,Data_2→ seletor de data V2,GTA→ campo GTA,NF_Produtor→ campo NF produtor,Lacre→ campo lacre. - Para cada campo obrigatório definido: se for um campo de texto e estiver vazio, ou se for um seletor de data e o valor for
vazio, o campo é adicionado à mensagem de faltantes. - Se houver campos faltantes: os nomes são concatenados com vírgula e adicionados à mensagem.
- A configuração de ID 15012 – Informe o Tipo Frete Lançamento para definir o Valor Frete contém uma mensagem de IDs de tipos de movimento de frete (separados por “|”) que exigem motorista e transportadora preenchidos.
- Se o tipo de frete selecionado estiver nessa mensagem:
- Se o campo de motorista estiver vazio, o sistema adiciona o aviso “Motorista” à mensagem .
- Se o campo de transportadora estiver vazio, o sistema adiciona o aviso “Transportadora” à mensagem.
- Ao salvar, se os campos de quantidade V1 ou V2 estiverem visíveis e preenchidos: o sistema valida se o valor é um número inteiro. Se não for: exibe alerta e interrompe o salvamento.
Se houver avisos na mensagem: o sistema exibe a mensagem “Não foi possível salvar a carga” seguida dos campos faltantes concatenados com vírgula, e não prossegue com o salvamento.
Ao carregar o combo de tipos de frete: as configurações com IDs 15009 – Informe o Tipo Frete Lançamento para definir o Valor de Acréscimo e 15010 – Informe o Tipo Frete Lançamento para definir o Valor de Desconto (excluindo 15012) têm seus conteúdos lidos. Os IDs de tipos de frete mensagemdos nesses conteúdos (separados por “|”) são removidos do combo. O operador só vê os tipos de frete que não estão nestas mensagems de exclusão.
Comportamento do Sistema
- O sistema consolida todos os erros antes de exibir, mostrando uma única mensagem com todos os problemas encontrados.
Persistência (Envio para a API) Balança Rodoviária
Regras de Negócio — aqui
- O objeto enviado à API contém: usuário logado, ID da filial, ID do tipo de frete, placa, número da carga, datas (cadastro, movimento, entrada, abate), hora, observação, lacre, tipo do frete, tipo de veículo, peso do balancão, chave de fato do contrato de origem, documento do contrato, chave de fato do frete (quando existir), GTA, NF produtor, código e nome do transportador, apelido do transportador, nome e código do motorista, propriedade rural, código da propriedade rural, código e nome do pecuarista, código e nome do item da carga, série da carga, peso V1, peso V2, data V1, data V2, quantidade V1, quantidade V2, código do participante, e a mensagem completa de pesagens.
- As estatísticas de escalas são enviadas como nulo (campo fixo no código).
- Se o campo de motorista tiver exatamente 1 segmento ao dividir por “-“: o nome é o valor completo do campo.
- Se tiver mais de 1 segmento: o nome é o segundo segmento (após o primeiro “-“).
- Se o campo de motorista contiver “-” e tiver mais de 1 segmento: o ID é o primeiro segmento convertido para inteiro.
- Se o motorista tiver sido selecionado via lookup (objeto selecionado presente): o ID é o do objeto selecionado.
- Caso contrário: o ID é nulo.
- Mesma lógica que o motorista: se o campo de produtor contiver “-” e tiver mais de 1 segmento, usa o primeiro segmento como ID; se houver objeto selecionado, usa o ID do objeto; caso contrário, ID nulo.
- Se o objeto de transportadora estiver selecionado via lookup: usa o ID do objeto.
- Se não houver seleção direta mas o campo de texto contiver “-” com mais de 1 segmento: usa o primeiro segmento convertido para inteiro.
- Caso contrário: ID nulo.
- Se a API retornar a carga sem campo de erro: o sistema exibe a tela de opção de impressão e, conforme a escolha (OK ou Visualizar impressão), abre o visualizador de PDF com o comprovante.
- Os botões são desmarcados, a mensagem de pesagens é limpa, os campos são limpos, e a tela retorna ao estado inicial.
- Se a API retornar erro (campo
Erropreenchido): o sistema exibe a mensagem de erro da API.
- Campos atualizados: observação, GTA, NF produtor, tipo de veículo, lacre, motorista, nome do motorista, ID do tipo de frete, ID do motorista, transportadora, apelido do transportador, código e nome do item, produtor, ID do participante, peso V1, peso V2, quantidade V1, quantidade V2, data V1 e data V2.
- O peso V1 é convertido removendo vírgulas e substituindo por pontos antes do parse decimal.
- Os campos atualizados são: ID do transportador, ID do motorista, nome do motorista, ID do tipo de frete, ID do participante, código e nome do item, peso V1, peso V2, quantidade V1, quantidade V2, nome do item, observação, GTA, NF produtor, lacre, data V1 e data V2.
Cancelamento de Carga Balança Rodoviária
Regras de Negócio
- Se o usuário logado for supervisor de indústria: o cancelamento é iniciado diretamente.
- Se não for supervisor: é exibida a tela de autenticação de supervisor.
- O operador informa usuário e senha de um supervisor.
- O sistema consulta a API para verificar as credenciais.
- Se o usuário autenticado tiver a flag
EhSupervisorIndustria = Sim: o cancelamento prossegue. - Se não for supervisor de indústria: o sistema exibe alerta com nome e código de filial do usuário.
- Se o usuário não for encontrado: o sistema exibe alerta informando que o usuário não foi encontrado.
- Se a carga em processo não tiver chave de fato preenchida: o sistema exibe alerta pedindo para selecionar uma carga, e o botão cancelar é desmarcado.
- Se a carga tiver chave de fato: o sistema solicita confirmação do operador (Sim/Não).
- Se confirmado: envia a chave de fato para a API cancelar a carga.
- Se cancelado: apenas desmarca o botão.
- Após cancelamento bem-sucedido na API: exibe mensagem de sucesso, limpa a mensagem de pesagens, limpa todos os campos, e retorna a tela ao estado inicial.
- Se a API retornar nulo: exibe mensagem de erro informando que não foi possível cancelar a carga com aquela chave de fato.
Comportamento do Sistema
- Ao clicar em Cancelar Carga: inicia o fluxo de cancelamento (com ou sem autenticação, conforme perfil do usuário).
Remoção de Pesagem Balança Rodoviária
Regras de Negócio
- Se o usuário logado for supervisor de indústria: a exclusão é iniciada diretamente.
- Se não for supervisor: é exibida a tela de autenticação.
- O sistema verifica se o usuário autenticado é administrador ou supervisor.
- Se for administrador ou supervisor: a remoção prossegue.
- Se não tiver permissão: o sistema exibe alerta com nome e código de filial do usuário.
- Se o usuário não for encontrado: exibe alerta.
- Se não houver linha selecionada na grid de pesagens: a remoção não ocorre.
- Se a pesagem selecionada for do tipo I e existir uma pesagem do tipo F na mensagem: o sistema exibe alerta de que não é possível excluir o peso inicial quando existe peso final, e interrompe.
- Se o
StatusDeEnvioda pesagem for 1 (peso ainda não enviado ao banco): o sistema exibe alerta de que não é possível excluir um peso que ainda não foi finalizado/enviado, e interrompe. - Após confirmação do operador: o item é removido da mensagem visual, a API é chamada para excluir o peso do banco, a grid é atualizada, e o cálculo do peso do balancão é refeito.
- O campo
Codigo Usuarioda pesagem é preenchido com o nome do usuário logado após a exclusão.
Comportamento do Sistema
- Ao clicar em Remover Peso: inicia o fluxo de remoção (com ou sem autenticação).
Tipo de Peso Balança Rodoviária
Regras de Negócio
- A tela de tipo de peso é acessível pelo botão Tipo Peso.
- O operador pode definir explicitamente o tipo de peso antes de pesar.
Dados Persistidos Balança Rodoviária
Via API (persistência centralizada)
- É gerada uma nova chave de fato para o frete via sequenciador.
- É obtida a série ativa do tipo “CRG” para a filial. Se não existir série ativa: alerta é lançado.
- É obtido o próximo número da sequência “CRG” com atualização.
- O veículo é consultado pela placa e o tipo de veículo vem do cadastro; se o veículo não estiver cadastrado, usa o tipo informado pelo operador.
- A transportadora e o motorista são consultados pelo código.
- Se não houver motorista cadastrado mas o veículo tiver motorista associado: o motorista do veículo é usado.
- É criada uma nova movimentação de frete com status = “N” (em aberto ou não atualizado) e peso do balancão = 0 (o peso é preenchido depois).
- A propriedade rural é consultada pelo código (quando informada). A distância da propriedade à filial é registrada na movimentação (buscando na mensagem de distâncias da propriedade filtrada pela filial; se não encontrar distância específica, usa a distância geral da propriedade).
- Os campos adicionais são gravados: DataDoMovimento, DataV1, DataV2, PesoV1, PesoV2, HoraV1, HoraV2, QuantidadeV1, QuantidadeV2, DataDaCompetencia, Hora (formato HHmmss), tipo de veículo, ID da propriedade, ID do participante.
- Deve haver ao menos um peso do tipo I ou U para nova carga; se não houver, alerta é lançado.
- Os campos atualizados são: ID do tipo de frete, transportadora, GTA, NF produtor, chave de fato da origem (contrato), observação, tipo de veículo, ID do item, DataV1, DataV2, PesoV1, PesoV2, QuantidadeV1, QuantidadeV2, ID do participante, lacre.
- Se o motorista tiver código > 0: o motorista é consultado no repositório e atribuído; o nome do motorista vem do cadastro.
- Se o motorista não tiver código (= 0 ou nulo): o motorista é nulo;
- A distância (km) é atualizada se houver na propriedade rural.
- Uma inserção dos dados é executado imediatamente após a atualização dos dados da carga.
- Cada peso é processado na ordem: I primeiro (ordem 0), parciais numéricos em seguida (por valor numérico), F por último; tipos não reconhecidos vão para o final.
- Para pesos com
StatusDeEnvio = 1(novos): é criada uma nova entidade de peso no banco. Se o peso tiver observação: um registro de log de operação é criado detalhando o peso manual, o operador, o motivo e o tipo do peso. - Para pesos com
StatusDeEnvio = 2(já enviados): não são inseridos no banco, mas o peso bruto inicial é capturado para cálculo. - Para pesos com
StatusDeEnvio = 0: alerta é lançado. - Se a data do peso tiver Ticks <= 0: alerta é lançado.
- Para peso do tipo I: se for o único peso no envio, o peso do balancão é calculado como
|pesoBruto_I - 0| = pesoBruto_I; caso contrário, peso do balancão fica 0 e o peso anterior é registrado. - Para tipos numéricos (parciais): se for o primeiro parcial (pesoAnterior = 0), registra o peso como referência; se for o segundo parcial (pesoAnterior > 0), soma
|parcial - pesoAnterior|ao peso do balancão e zera o peso anterior. - Para peso do tipo F: soma
|pesoBruto_F - pesoAnterior|ao peso do balancão. - Para peso do tipo U: o peso do balancão é o peso bruto do peso único; o status da carga é fechado imediatamente.
- Se após processar todos os pesos o peso final (tipo F) tiver valor > 0: o status da carga é alterado para S (fechado / Atualizada).
- Se houver peso único (tipo U): o status é alterado para S.
- Após o fechamento, uma inserção de dados é executado.
- Para cada peso que tiver imagens associadas:
- Imagens presentes no banco de dados, mas ausentes nas informações enviadas para o SQL (por ID e tipo de peso): são excluídas do banco.
- Imagens novas (ID = 0) enviadas para o SQL: são convertidas de Base64 para bytes e inseridas no banco com um novo ID sequencial, seguidas de commit imediato.
- A tabela de movimentação de frete é atualizada diretamente via SQL:
STATUS_FECHADO = 'C'para a carga selecionada. - Se ocorrer erro: a exceção é capturada silenciosamente e a função retorna
verdadeiromesmo em caso de falha.
- São executados dois comandos SQL diretos: DELETE na tabela de imagens de pesagem e DELETE na tabela de pesos de balancão, ambos filtrando por chave de fato do frete e tipo de peso.
- Se a pesagem tiver ID > 0 e a mensagem de log não for nula: é registrado um log de depuração no banco com os detalhes da pesagem removida.
- O log de depuração é criado com campos: ID local, ID da carga no balancão, peso líquido, data formatada, chave de fato, tipo de peso, status de envio e observação.
- O retorno interno (para o log) é silencioso; erros de log não impedem a remoção.
- O retorno externo captura exceções e as retorna como mensagem de erro.
- Após salvar a carga, se as informações contiver estatísticas de escalas: o sistema executa uma consulta SQL agrupada na tabela de movimentação de frete, somando a quantidade V1 por chave de fato de origem (escala), para cada chave de fato informada.
- O resultado substitui as estatísticas originais na informações de retorno.
Validação de Placa Balança Rodoviária
Regras de Negócio
- A placa deve ter exatamente 7 caracteres.
- Formato padrão (antigo): 3 letras + 4 dígitos numéricos.
- Formato Mercosul (novo): 3 letras + 1 dígito + 1 letra + 2 dígitos.
- Antes da validação: espaços, pontos, vírgulas e hífens são removidos, e a placa é convertida para maiúsculas.
- Se o código do país for o da Bolívia (código “973”): a validação de formato é ignorada e a placa é aceita como válida independentemente do formato.
- Se o código do país estiver em branco: a validação de formato é ignorada.
- Para demais países: aplica a validação de formato descrita acima.
- Se o campo de placa estiver vazio ou em branco: o sistema exibe alerta “O campo PLACA, Não pode estar vazio” e retorna falso.
- Se a placa não atender ao formato: o sistema exibe alerta “Formato de placa inválido”, coloca o foco no campo de placa, e retorna falso.
Integração com Balança Física Balança Rodoviária
Regras de Negócio
- A balança é inicializada com as configurações do posto (host, porta, fator de divisão).
- A balança recebe atividades: ação pós-pesagem (executa quando o peso é confirmado), notificação de peso disponível (executa quando o valor está pronto para captura), e captura do objeto de controle da balança.
- O ciclo de captura pode ser iniciado em modo não-exclusivo (permitindo múltiplas amostras).
- A ação pós-pesagem aplica o fator de divisão ao peso capturado.
- A ação de confirmação (Enter) executa a efetivação do peso quando a pesagem está ativa e o botão Pesar está habilitado.
Tratamento de Erros Balança Rodoviária
Cenário: o operador tenta pesar sem selecionar tipo de veículo ou tipo de frete.
Mensagem exibida: “Selecione o Tipo de Veículo” ou “Selecione o Tipo de Frete” (conforme o campo faltante).
O que fazer: selecionar os campos obrigatórios antes de pesar.
Cenário: o tipo de frete exige placa cadastrada e a placa digitada não está no cadastro.
Mensagem exibida: “Placa informada não está cadastrada”.
O que fazer: cadastrar o veículo no sistema ou usar um tipo de frete que não exige placa cadastrada.
Cenário: o tipo de frete exige documento relacionado e o campo de contrato está vazio.
Mensagem exibida: caixa de confirmação perguntando se deseja acessar a tela de contratos.
O que fazer: selecionar um contrato na tela de contratos ou cancelar e escolher outro tipo de frete.
Cenário: o operador tenta registrar um segundo peso do mesmo tipo (dois iniciais ou dois finais).
Mensagem exibida: “Já existe peso deste tipo” (para peso inicial duplicado) ou “Já existe peso final” (para peso final duplicado).
O que fazer: remover o peso existente antes de registrar um novo do mesmo tipo.
Cenário: a mensagem de pesagens está vazia e o tipo selecionado é Final.
Mensagem exibida: “Primeiro insira o peso inicial”.
O que fazer: registrar primeiro o peso inicial.
Cenário: já existe um peso do tipo Único e o operador tenta adicionar outro peso.
Mensagem exibida: exceção com mensagem “Já existe peso único”.
O que fazer: remover o peso único antes de prosseguir.
Cenário: o operador tenta remover o peso inicial quando já existe peso final na mensagem.
Mensagem exibida: “Não é possível excluir o peso inicial”.
O que fazer: remover o peso final antes de remover o inicial.
Cenário: o operador tenta remover um peso com StatusDeEnvio = 1 (ainda não salvo no banco).
Mensagem exibida: “Não é possível excluir sem finalizar o peso”.
O que fazer: salvar a carga antes de tentar remover o peso.
Cenário: o operador clica em Salvar sem preencher todos os campos exigidos.
Mensagem exibida: “Não foi possível salvar a carga: [mensagem de campos faltantes]”.
O que fazer: preencher todos os campos indicados na mensagem.
Cenário: a API retorna um erro no campo Erro do objeto de resposta.
Mensagem exibida: texto do erro retornado pela API.
O que fazer: verificar o motivo do erro conforme a mensagem exibida.
Cenário: o operador tenta digitar peso manual ou cancelar carga sem ser supervisor/administrador.
Mensagem exibida: “Usuário [nome-código_filial] não é Supervisor de Indústria” ou similar.
O que fazer: solicitar que um supervisor autentique para a operação.
Cenário: o usuário informado na tela de autenticação não existe no sistema.
Mensagem exibida: “Usuário não encontrado”.
O que fazer: verificar o código e senha informados.
Cenário: o valor digitado no formulário de peso manual não é um número decimal válido, ou a observação está vazia.
Mensagem exibida: “Peso inválido”.
O que fazer: informar um valor numérico válido e preencher a observação.
Cenário: o operador pressiona Escape para limpar os dados da tela.
Mensagem exibida: caixa de confirmação “Confirmar — Deseja apagar os dados?”.
O que fazer: confirmar para limpar ou cancelar para manter os dados.
Casos de Uso Balança Rodoviária
Caso 1 — Entrada normal de caminhão com pesagem dupla
O operador digita a placa “ABC1D23”. O sistema encontra o veículo, preenche marca/modelo e transportadora. O operador seleciona o tipo de frete “Animais Vivos”, informa o GTA e o lacre. Clica em Pesar. A balança captura o peso de entrada: 28.450 kg. O operador pressiona Enter. O peso Inicial é registrado. O caminhão descarrega os animais. O operador clica em Pesar novamente. A balança captura 15.200 kg. Enter confirma. O peso Final é registrado. O peso do balancão exibido é |15.200 – 28.450| = 13.250 kg. O operador clica em Salvar. A API persiste a carga e retorna. A tela de impressão é exibida. O operador confirma a impressão e visualiza o comprovante em PDF.
Caso 2 — Entrada com contrato SISBOV
O operador digita a placa “XYZ5678”. Tipo de frete selecionado é um que exige documento relacionado. O botão Contrato fica habilitado. O operador clica em Contrato, pesquisa pelo contrato de abate do produtor “Fazenda São José”, seleciona o contrato com documento “0001-ABT0101-001-00001”. Os campos Contrato, Produtor e Propriedade são preenchidos automaticamente. O operador pesa (peso único de 22.100 kg via Pesagem Única). Salva. A carga é fechada imediatamente com status “S” pela API.
Caso 3 — Peso manual por supervisor
O operador está sem balança física disponível. Clica em Digitar Peso. O sistema verifica que o usuário não é supervisor. A tela de autenticação é exibida. O supervisor informa seu usuário e senha. A API confirma as credenciais. O formulário de peso manual é aberto. O supervisor digita “18.540” e informa a observação “Balança em manutenção”. O peso é registrado como Inicial com observação. O fluxo segue normalmente.
Caso 4 — Seleção de carga em andamento
O operador de segundo turno precisa retomar uma pesagem iniciada. Digita a placa “DEF3G45”. O sistema encontra uma carga aberta para essa placa. A tela de seleção de cargas é exibida. O operador seleciona a carga. Os dados são carregados: o peso Inicial de 29.100 kg já está mensagemdo, e o campo tipo de peso já está apontando para Final. O operador pesa o caminhão vazio (16.800 kg), pressiona Enter, e salva. A carga é fechada.