Informe a data inicial.
QuandoListar sem data inicial (vale também para a data final: "Informe a data final.").
Não grava. statuscode 400 com a frase abaixo, que a tela mostra como está.
Pergunta antes de seguir. Nesta tela quem pergunta é sempre a própria tela, antes de chamar o servidor.
Passa, mas com um comportamento que surpreende quem está conferindo — ou é conferido só na tela.
O Harbour não tem esta tela. As regras são as do ceif, conferidas de novo no servidor — a tela só as reflete.
A grade lê ordem_compra_animal pelo período escolhido na coluna
data_compra ou data_abate (o combo "Data compra / Data abate"). Sem a regra de
multi filial, só a filial da sessão; com ela, as filiais a que o usuário tem acesso
(usuario_filial), ou uma só, escolhida no campo Filial.
Informe a data inicial.
QuandoListar sem data inicial (vale também para a data final: "Informe a data final.").
A data final é anterior à inicial.
QuandoPeríodo invertido.
Data inválida: 2026-13-01
QuandoQualquer data da tela que não esteja em aaaa-mm-dd (grade, gravação, relatórios, data de abate).
Você não tem acesso à filial 53.
QuandoCom a regra de multi filial, escolher uma filial que não está no usuario_filial do usuário. A mesma frase sai ao abrir, alterar, autorizar ou imprimir uma ordem de filial fora do alcance.
(sem mensagem) — Multi filial sem a regra é ignorado
QuandoPedir multi filial (ou mandar idFilial) sem HABILITA_FILTRO_MULTI_FILIAL_ORDEM_COMPRA_ANIMAL: a grade volta só com a filial da sessão, sem recusa. A tela nem mostra o interruptor sem a regra.
A gravação é uma transação só (cabeçalho + itens). Numeração pela trigger. A
observação é gravada como mediumblob em UTF-8, e vazia vira bytes vazios, como o ceif grava.
Informe a data de compra.
QuandoSem data de compra.
Informe a data de abate.
QuandoSem data de abate.
A data de abate não pode ser anterior à data de compra.
QuandoAbate antes da compra. A tela confere antes de enviar, com a mesma frase; o servidor confere de novo.
Informe o horário de início do abate.
QuandoSem horário de início (e "Informe o horário final do abate." sem o final).
Horário inválido: 25:00
QuandoHorário fora de hh:mm ou hh:mm:ss.
O horário de início do abate é depois do horário final.
QuandoInício depois do fim (conferido na tela e no servidor). Início igual ao fim passa.
Informe o pecuarista.
QuandoSem pecuarista.
O emitente 10254246 não está cadastrado como pecuarista.
QuandoO emitente não tem o tipo de emitente 12 (PEC) em emitente_tipo_emitente. A busca da tela (EMITENTE_PECUARISTA) já filtra; a recusa pega o id digitado ou enviado direto.
Informe a propriedade.
QuandoSem propriedade.
A propriedade 1005 não é do pecuarista escolhido.
QuandoA propriedade (emitente_propriedade) pertence a outro emitente, ou não existe. O combo do ceif filtra pelo pecuarista; aqui o servidor confere.
O emitente 10033 não está cadastrado como comprador de gado.
QuandoComprador informado sem o tipo de emitente 4 (CGA). O comprador é opcional.
Comissionista 10044 não encontrado.
QuandoComissionista informado que não existe em emitente. É opcional, e não se confere o tipo do emitente.
Informe a moeda.
QuandoSem moeda, ou moeda que não existe no cadastro. A ordem nova nasce na moeda local da filial.
Tipo de compra inválido.
QuandoTipo de compra diferente de 1 (Vivo) e 2 (Morto). Sem valor vale Morto.
Compra a prazo: informe um prazo maior que zero.
QuandoTipo de pagamento "Prazo" com prazo vazio ou zero.
Tipo de pagamento inválido.
QuandoTipo de pagamento diferente de 1 (A Vista) e 2 (Prazo). Sem valor vale A Vista.
Tipo de comissão inválido.
QuandoFora de 1 a 4 (Sem comissão, Valor cabeça, Valor Quilo, Quilo cabeça). Sem valor vale Sem comissão.
O valor da comissão não pode ser negativo.
QuandoValor de comissão negativo num tipo que tem comissão.
(sem mensagem) — à vista grava prazo 0; "Sem comissão" grava valor 0
QuandoO servidor normaliza: com A Vista o prazo digitado é descartado (a tela já trava o campo), e com Sem comissão o valor da comissão vai a zero.
Os itens vão para ordem_compra_animal_item, acertados linha a
linha (o id da linha se mantém, como o orphanRemoval do ceif). Linha sem tipo de animal
é descartada antes de conferir. Tipo de animal, tipo de mercado e padrão de preço têm de ser da
filial da ordem. Habilitação vazia vale TODOS.
Informe os itens da ordem de compra.
QuandoNenhuma linha com tipo de animal.
Tipo de animal 1003 não é desta filial.
QuandoO tipo de animal da linha não é do cadastro 18J › Tipo Animal da filial da ordem.
Sem valor de preço para o item BOI_INTEIRO.
QuandoPreço vazio, zero ou negativo. A grade marca a célula com "Informe o preço" antes de enviar.
Sem quantidade para o item BOI_INTEIRO.
QuandoQuantidade vazia (zero é aceito).
Quantidade inválida no item BOI_INTEIRO.
QuandoQuantidade negativa (a grade marca "Quantidade inválida").
Informe o tipo de mercado do item BOI_INTEIRO.
QuandoSem tipo de mercado, ou tipo de mercado de outra filial (a grade marca "Informe o tipo de mercado").
Sem padrão de preço para o item BOI_INTEIRO.
QuandoSem padrão de preço, ou padrão de outra filial (a grade marca "Informe o padrão de preço").
O padrão de preço do item BOI_INTEIRO é de outro tipo de animal.
QuandoO padrao_preco.idtipo_animal escolhido não é o tipo da linha.
Habilitação HILTON não cadastrada.
QuandoA habilitação da linha não está na lista de habilitações do banco.
Combinação duplicada: Tipo Animal: BOI_INTEIRO e Habilitação: TODOS.
QuandoDuas linhas com o mesmo tipo de animal e a mesma habilitação.
Deve ter pelo menos um item do tipo VACA e habilitação TODOS.
QuandoAlgum tipo de animal da filial não tem linha com habilitação TODOS. Na inclusão a tela já nasce com uma linha fixa por tipo de animal da filial.
AtençãoTipo de animal novo cadastrado no 18J passa a ser exigido em toda ordem da filial, inclusive ao regravar ordens antigas.
Tipos de animal sem padrão de preço: VACA, NOVILHA
QuandoConferido só na tela, ao abrir a inclusão: tipos de animal da filial sem padrão de preço ativo. Sem cadastrar o padrão (18J › Padrão Preço), a gravação vai recusar a linha.
Excluir é lógico: marca excluido = 'T' e o usuário que excluiu.
Ordem de compra 100211 não encontrada.
QuandoO id não existe (abrir, alterar, excluir, autorizar, trocar a data de abate, demonstrativo).
A ordem de compra 100211 foi excluída.
QuandoAlterar, excluir, autorizar, trocar a data de abate ou imprimir o demonstrativo de ordem excluída.
Esta ordem de compra já foi autorizada e não pode ser alterada - desautorize-a antes.
QuandoOrdem com idusuario_autorizou preenchido. Na exclusão a frase termina em "não pode ser excluída - desautorize-a antes." A tela já abre travada ("Ordem autorizada por … — não pode ser alterada; desautorize-a antes.") e o botão Excluir fica desabilitado.
A ordem de compra 100211 é da filial 53 - entre nessa filial para alterá-la.
QuandoAlterar ou excluir uma ordem de outra filial (aberta pelo Multi filial). A gravação usa a filial da ordem, e o usuário precisa estar nela.
Autorizar grava idusuario_autorizou e data_autorizou;
desautorizar os zera. A chegada na indústria é lida em chegada_animal pela
ordem_compra.idordem_compra_ceif do banco da indústria (conexão só de leitura).
Confirma a autorização da ordem de compra?
QuandoPergunta da tela. Com a ordem autorizada a pergunta é "Ordem já autorizada. Desautorizar?". Resposta: "Ordem autorizada." / "Ordem desautorizada."
Sem permissão para autorizar [AUTORIZAR_ORDEM_COMPRA_ANIMAL].
QuandoAutorizar ou desautorizar sem a regra (a tela deixa o botão desabilitado).
Já existe chegada de animais na indústria para esta ordem de compra - não é possível desautorizar.
QuandoDesautorizar com chegada registrada no banco da indústria. Filial sistema_industrial LEGADO não consulta; filial fora da WEB sem host_ind também não.
A filial BMG TARAUACA não possui host de indústria configurado. Id ordem compra: 100211
QuandoDesautorizar em filial com sistema_industrial WEB e filial.host_ind vazio — não há como conferir a chegada.
Só quem autorizou pode desautorizar esta ordem.
QuandoOutro usuário (mesmo com a regra, mesmo master) tenta desautorizar.
Grava só data_abate. Vale também em ordem autorizada — é para
isso que o botão existe.
Informe a nova data de abate.
QuandoSem a data nova.
Não é possível alterar a data de abates anteriores a 21/09/2026.
QuandoA data de abate gravada é de mais de 3 dias atrás (a data na frase é hoje − 3).
A data de abate não pode ser anterior à data de compra.
QuandoA data nova é anterior à data de compra gravada na ordem. A mesma regra e a mesma frase da gravação.
(sem mensagem) — ordem de outra filial do usuário
QuandoO botão alcança ordem de outra filial desde que ela esteja nas filiais do usuário (não pede para entrar nela). A janela nasce com a data de hoje.
Escala de abate prevista MOD 1 e MOD 2 (sempre pela data de abate), Ordem de compra MOD 1 em PDF ou XLS (pela data do combo da grade) e Demonstrativo da ordem selecionada. Todos são de uma filial: a da sessão, ou a escolhida com a regra de multi filial. As colunas de animal saem dos tipos que as ordens têm. No MOD 2 a folha fecha com até 30 ordens.
Sem permissão para outra filial [HABILITA_FILTRO_MULTI_FILIAL_ORDEM_COMPRA_ANIMAL].
QuandoPedir um relatório de filial diferente da sessão sem a regra de multi filial. Com a regra, a filial ainda tem de estar no alcance do usuário.
Não há dados para gerar o relatório.
QuandoNenhuma ordem viva no período (e na filial) do relatório.
Os cinco endpoints do OrdemCompraAnimalApi do ceif, sem sessão e
sem token: {id}, buscar-por-data?dataIncluiu&idFilial (inclusões desde a
data − 6 dias), buscar-por-data-alterou e buscar-por-data-autorizou (da data até
o fim de hoje) e buscar-padrao-preco?idFilial. JSON com os nomes de campo do ceif. Ordem
excluída vai com excluido: true; item excluído não vai. Não há frase de regra aqui: o que a
indústria recebe é o status HTTP.
Base central_x não encontrada.
QuandoHTTP 404 com {"status":404,"error":"Base não encontrada","message":…}: o nome do banco no caminho tem caractere fora de [A-Za-z0-9_-], não está na tabela conexao ou está fora do ar.
(sem corpo) — HTTP 400
QuandoNas buscas por data e de padrão: data ausente ou fora de aaaa-mm-dd, ou idFilial ausente ou não numérico.
OrdemCompraAnimal não encontrada com ID: 100211
QuandoHTTP 404, "error":"Erro ao buscar a ordem de compra": id inexistente ou não numérico. Falha de leitura sai como "Erro ao ler a ordem 100211", também 404.
(sem corpo) — HTTP 404 em buscar-padrao-preco
QuandoA filial não tem padrão de preço — é a resposta do ceif, reproduzida. As buscas por data sem resultado devolvem 200 com lista vazia.
AtençãoFalha inesperada: 404 na busca por inclusão, 500 nas demais (sem pilha, o erro nunca passa pelo tratador geral).
(sem corpo) — HTTP 401, hoje desligado
QuandoA conferência do cabeçalho token contra system_config.INDUSTRIA_API_TOKEN daquele banco está pronta e desligada (OrdemCompraAnimalApiService.EXIGE_TOKEN = false, decisão de 24/09/2026). Ligada, token ausente, diferente ou chave vazia dá 401.
| Regra nomeada | O que libera |
|---|---|
AUTORIZAR_ORDEM_COMPRA_ANIMAL | o botão Autorizar/Desautorizar; desautorizar exige ainda ser quem autorizou |
HABILITA_FILTRO_MULTI_FILIAL_ORDEM_COMPRA_ANIMAL | o interruptor Multi filial e o campo Filial da grade, e relatório de outra filial — sempre limitado às filiais do usuário |
As duas vêm do ceif e se concedem no 444 (ao grupo) ou no 443 (ao usuário); o
master passa. Incluir, alterar e excluir não têm regra própria além do acesso à opção do menu.
GET /lancamento/ordem-compra-animal/permissoes diz à tela o que liberar.
Recusa de regra: HTTP 200 com statuscode 400 e a frase, que a janela mostra no rodapé
(a grade, na faixa de erro acima dela). As perguntas desta tela são todas da própria tela
(window.confirm) — o servidor não devolve 409. A API pública responde com o status HTTP
de verdade (400/401/404/500), sem sessão. Erro inesperado traz o código de ocorrência de 8
caracteres — copie-o no chamado.
| O quê | Valor |
|---|---|
| tipo de emitente do pecuarista / comprador de gado | 12 (PEC) / 4 (CGA) |
| habilitação obrigatória por tipo de animal | TODOS |
| corte da troca de data de abate | 3 dias antes de hoje |
| janela da busca por inclusão da API | data − 6 dias, sem data final (a do ceif) |
| ordens por folha na Escala MOD 2 | até 30 |
| Ponto | Situação |
|---|---|
| moeda da ordem nova | a moeda local da filial, não o literal 111 do ceif |
| tipo animal / mercado / padrão de outra filial | recusados no servidor; o ceif só filtra o combo |
| Multi filial | alcança as filiais do usuário, não o banco inteiro |
| consulta da chegada na indústria | decidida por filial.sistema_industrial e host_ind, no lugar da lista de ids do ceif (5, 11, 12, 14, 16, 17, 27); dá o mesmo resultado nas 13 filiais com gado do central |
| mensagem da data de abate | diz o corte certo (o ceif confere 3 dias e escreve 1) |
| relatórios | colunas de animal pelos tipos presentes; quantidade soma as linhas do tipo e o preço é o da linha TODOS (o ceif fixa 7 colunas e casa por LIKE '%BOI%'); SIF de filial.numero_sif |
| API: banco no caminho | inevitável — o ceif atende um banco só |
| API: item excluído | não vai (o ceif mandaria sem marca) |
| pendente: token da API | desligado para manter a compatibilidade com a indústria; ligar EXIGE_TOKEN quando ela mandar o cabeçalho |
Nenhuma regra bate com essa busca. Tente um trecho menor da mensagem, ou limpe os filtros.