Ordens de carregamento e descarregamento: criar, consultar, mudar a situação (fila, operação, finalizar), cancelar, lacres, amostras e conferência.
Autenticação em todos os exemplos: veja Autenticação. Teste no navegador pelo Swagger ou importe a coleção do Postman.
| Endpoint | Métodos | Para que serve |
|---|---|---|
ordem |
GET | Consulta uma ordem de carregamento ou descarregamento pelo id |
ordemCarregamento |
GET, POST, PUT, DELETE | Ordem de carregamento: criar, consultar, mudar situação, vincular laudo e cancelar |
ordemDescarregamento |
GET, POST, PUT, DELETE | Ordem de descarregamento: criar, consultar, mudar situação, vincular laudo e cancelar |
ordemLacre |
GET, POST, PUT, DELETE | Lacres da ordem |
ordemAmostra |
GET, POST, PUT, DELETE | Amostras da ordem |
conferencia |
GET, POST, PUT | Conferência da ordem antes da finalização |
Consulta uma ordem de carregamento ou descarregamento pelo id. Verifica o tipo da ordem e devolve exatamente a mesma resposta de GET ordemCarregamento (tipo C) ou GET ordemDescarregamento (tipo D). Só aceita GET.
/v1/terceiro/ordemOrdem pelo id
Perfis: App, Rede, Filial, Cliente, Pessoa
Parâmetros (query)
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
id_ordem |
integer | sim | Id da ordem. Não aceita o número nem o codigo_interno. |
curl -s -X GET "$BASE/v1/terceiro/ordem?$AUTH&id_ordem="
Resposta:
{
"status": "ok",
"id_ordem": 123456,
"tipo": "C",
"id_cliente": 101,
"id_motorista": 2001,
"id_fornecedor": 0,
"id_veiculo1": 3001,
"id_veiculo2": 3002,
"id_veiculo3": 0,
"id_veiculo4": 0,
"id_transportadora": 401,
"id_operador": 0,
"validade_inicial": "2026-11-12 00:00:00",
"validade_final": "2026-11-13 23:59:59",
"situacao": "P",
"data_hora_pendente": "2026-11-12 08:00:00",
"data_hora_aguardando": null,
"data_hora_operacao": null,
"data_hora_finalizada": null,
"data_hora_cancelada": null,
"transferencia": "N",
"congenere": "N",
"ajuste": "N",
"vazio_balanca": 0,
"cheio_balanca": 0,
"modal": "R",
"data_hora_vistoria": null,
"vistoria": "N",
"metodo": "",
"codigo_interno": "OC-0001",
"id_nota_fiscal": 0,
"observacao": "",
"data_hora_apuracao": null,
"data_hora_conferencia": null,
"tarifar": "S",
"numero": 98765,
"ordem_item": [
{
"id_ordem_item": 1,
"id_veiculo": 3002,
"compartimento": 1,
"nivel": 0,
"sequencia": 0,
"id_operador": 0,
"amostras": 0,
"id_produto": 10,
"quantidade": 10000.0,
"temperatura": 0,
"densidade": 0,
"fator_de_correcao": 0,
"quantidade_a_20": 0,
"massa": 0,
"inpm": 0,
"gl": 0,
"densidade_a_20": 0,
"composicao": [
{
"id_produto": 10,
"percentual": 100,
"quantidade_ambiente": 10000.0,
"quantidade_a_20": 0.0,
"temperatura": 0,
"densidade": 0,
"densidade_a_20": 0,
"fator_de_correcao": 0,
"massa": 0
}
],
"apuracao": {
"quantidade_ambiente": 10000.0,
"quantidade_a_20": 0,
"massa": 0,
"temperatura": 0,
"densidade": 0,
"densidade_a_20": 0,
"fator_de_correcao": 0
}
}
],
"ordem_produto": [
{
"id_ordem_produto": 1,
"id_produto": 10,
"id_laudo_produto": 0,
"quantidade_ambiente": 10000,
"quantidade_a_20": 0,
"temperatura": 0,
"densidade": 0,
"fator_de_correcao": 0,
"massa": 0,
"densidade_a_20": 0,
"quantidade_a_20_apurado": 0,
"quantidade_encerrante": 0,
"inpm": 0,
"gl": 0
}
],
"ordem_senha": [
{
"compartimento": 1,
"sequencia": 0,
"senha": "1234"
}
],
"ordem_situacao": [
{
"id_ordem_situacao": 1,
"situacao": "P",
"data_hora": "2026-11-12 08:00:00",
"id_tx_pessoa": 0
}
],
"ordem_lacre": [
{
"tipo": "SUPERIOR",
"numero": 1001
}
],
"ordem_amostra": []
}
Erros específicos: 400 — sem detalhe, quando a ordem é de outro tipo (ex. A, abastecimento).; 403 — ordem fora do escopo do acesso.; 200 — com corpo vazio quando o id_ordem não existe.; 405 — método diferente de GET..
Ordem de carregamento: criar, consultar, mudar situação, vincular laudo e cancelar. POST cria a ordem de carregamento com os itens (compartimentos) e, se enviados, lacres, amostras e laudos, tudo de uma vez: se algo falhar, nada é gravado. PUT muda a situação (?acao=FILA|OPERACAO|FINALIZAR|CANCELAR) ou, se o corpo trouxer laudo_produto, só vincula ou remove laudos. DELETE cancela, apenas ordem em P (pendente). Acesso com perfil filial cria a ordem na própria filial; acesso com perfil cliente só cria e consulta ordens do próprio cliente.
/v1/terceiro/ordemCarregamentoConsulta a ordem de carregamento
Datas no formato ISO 'AAAA-MM-DDTHH:MM:SS.ffffff' (segundos e frações omitidos quando zero). 1980-01-01T00:00 = sem data; 2099-12-31T23:59(:59) = sem limite.
Perfis: App, Rede, Filial, Cliente, Pessoa
Parâmetros (query)
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
id_ordem |
integer | sim | Id da ordem. Não aceita o número nem o codigo_interno. |
curl -s -X GET "$BASE/v1/terceiro/ordemCarregamento?$AUTH&id_ordem="
Resposta:
{
"status": "ok",
"id_ordem": 123456,
"tipo": "C",
"id_cliente": 101,
"id_motorista": 2001,
"id_fornecedor": 0,
"id_veiculo1": 3001,
"id_veiculo2": 3002,
"id_veiculo3": 0,
"id_veiculo4": 0,
"id_transportadora": 401,
"id_operador": 0,
"validade_inicial": "2026-11-12 00:00:00",
"validade_final": "2026-11-13 23:59:59",
"situacao": "P",
"data_hora_pendente": "2026-11-12 08:00:00",
"data_hora_aguardando": null,
"data_hora_operacao": null,
"data_hora_finalizada": null,
"data_hora_cancelada": null,
"transferencia": "N",
"congenere": "N",
"ajuste": "N",
"vazio_balanca": 0,
"cheio_balanca": 0,
"modal": "R",
"data_hora_vistoria": null,
"vistoria": "N",
"metodo": "",
"codigo_interno": "OC-0001",
"id_nota_fiscal": 0,
"observacao": "",
"data_hora_apuracao": null,
"data_hora_conferencia": null,
"tarifar": "S",
"numero": 98765,
"ordem_item": [
{
"id_ordem_item": 1,
"id_veiculo": 3002,
"compartimento": 1,
"nivel": 0,
"sequencia": 0,
"id_operador": 0,
"amostras": 0,
"id_produto": 10,
"quantidade": 10000.0,
"temperatura": 0,
"densidade": 0,
"fator_de_correcao": 0,
"quantidade_a_20": 0,
"massa": 0,
"inpm": 0,
"gl": 0,
"densidade_a_20": 0,
"composicao": [
{
"id_produto": 10,
"percentual": 100,
"quantidade_ambiente": 10000.0,
"quantidade_a_20": 0.0,
"temperatura": 0,
"densidade": 0,
"densidade_a_20": 0,
"fator_de_correcao": 0,
"massa": 0
}
],
"apuracao": {
"quantidade_ambiente": 10000.0,
"quantidade_a_20": 0,
"massa": 0,
"temperatura": 0,
"densidade": 0,
"densidade_a_20": 0,
"fator_de_correcao": 0
}
}
],
"ordem_produto": [
{
"id_ordem_produto": 1,
"id_produto": 10,
"id_laudo_produto": 0,
"quantidade_ambiente": 10000,
"quantidade_a_20": 0,
"temperatura": 0,
"densidade": 0,
"fator_de_correcao": 0,
"massa": 0,
"densidade_a_20": 0,
"quantidade_a_20_apurado": 0,
"quantidade_encerrante": 0,
"inpm": 0,
"gl": 0
}
],
"ordem_senha": [
{
"compartimento": 1,
"sequencia": 0,
"senha": "1234"
}
],
"ordem_situacao": [
{
"id_ordem_situacao": 1,
"situacao": "P",
"data_hora": "2026-11-12 08:00:00",
"id_tx_pessoa": 0
}
],
"ordem_lacre": [
{
"tipo": "SUPERIOR",
"numero": 1001
}
],
"ordem_amostra": []
}
Erros específicos: 400 — {id_ordem: Inválido}: id_ordem ausente ou inválido.; 400 — {registro: 'Falha ao localizar'}: a ordem não existe ou não é de carregamento.; 403 — ordem fora do escopo do acesso..
/v1/terceiro/ordemCarregamentoCria ordem de carregamento
Perfis: App, Rede, Filial, Cliente, Pessoa
Corpo (JSON objeto)
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
id_cliente |
integer | não | Cliente da ordem. Alternativa: cpf_cnpj_cliente. Se o terceiro é de um cliente, a ordem vai sempre para esse cliente (informar outro dá 403). |
cpf_cnpj_cliente |
string | não | CPF/CNPJ do cliente (só números ou formatado). Usado quando id_cliente vem vazio ou 0. |
id_motorista |
integer | não | Alternativa: cpf_motorista. |
cpf_motorista |
string | não | CPF do motorista. |
id_fornecedor |
integer | não | Alternativa: cpf_cnpj_fornecedor. |
cpf_cnpj_fornecedor |
string | não | |
id_veiculo1 |
integer | não | Veículo 1 (cavalo). Alternativa: placa1. |
placa1 |
string | não | Placa do veículo 1 (precisa ser uma placa válida). |
id_veiculo2 |
integer | não | Alternativa: placa2. |
placa2 |
string | não | |
id_veiculo3 |
integer | não | Alternativa: placa3. |
placa3 |
string | não | |
id_veiculo4 |
integer | não | Alternativa: placa4. |
placa4 |
string | não | |
id_transportadora |
integer | não | Alternativa: cpf_cnpj_transportadora. |
cpf_cnpj_transportadora |
string | não | |
transferencia |
boolean | não | true = transferência (grava S). Padrão: false (N). |
validade_inicial |
datetime | não | Texto 'AAAA-MM-DD HH:MM:SS' (precisa ter 14 dígitos). Formato diferente é ignorado e o campo fica vazio. |
validade_final |
datetime | não | Idem. |
codigo_interno |
string | não | Código da ordem no sistema do integrador. |
observacao |
string | não | |
nfe_origem |
string | não | |
cte_origem |
string | não | |
ordem_item |
array | sim | Obrigatório, com pelo menos 1 item. Cada item: id_veiculo (ou placa), id_produto (só o id), compartimento (inteiro, padrão 0), nivel (inteiro, padrão 0), quantidade (litros, inteiro, padrão 0) e amostras (inteiro, padrão 0). A sequencia é a posição do item na lista (0, 1, …). O servidor calcula os totais por produto (ordem_produto) a partir dos itens. |
ordem_lacre |
array | não | Opcional: [{tipo (texto), numero (inteiro maior que 0; aceita 1001 ou "1001")}]. Lacre repetido na lista é recusado (400). |
ordem_amostra |
array | não | Opcional, mesmo formato de ordem_lacre. O par (tipo, numero) da amostra não pode se repetir na lista nem em outra ordem (400). |
laudo_produto |
array | não | Opcional: [{id_produto, id_laudo_produto}]. Vincula o laudo ao produto da ordem; id_laudo_produto = 0 remove. Produto que não está na ordem dá erro. |
curl -s -X POST "$BASE/v1/terceiro/ordemCarregamento?$AUTH" \
-H 'Content-Type: application/json' \
-d '{"cpf_cnpj_cliente": "00.000.000/0001-00", "cpf_motorista": "000.000.000-00", "placa1": "ABC1D23", "placa2": "ABC1D24", "cpf_cnpj_transportadora": "00.000.000/0002-00", "transferencia": false, "validade_inicial": "2026-11-12 00:00:00", "validade_final": "2026-11-13 23:59:59", "codigo_interno": "OC-0001", "observacao": "", "ordem_item": [{"placa": "ABC1D24", "id_produto": 10, "compartimento": 1, "nivel": 0, "quantidade": 10000, "amostras": 0}, {"placa": "ABC1D24", "id_produto": 10, "compartimento": 2, "nivel": 0, "quantidade": 15000, "amostras": 0}], "ordem_lacre": [{"tipo": "SUPERIOR", "numero": "1001"}], "ordem_amostra": [{"tipo": "TESTEMUNHA", "numero": "5001"}], "laudo_produto": [{"id_produto": 10, "id_laudo_produto": 77}]}'
Resposta:
{
"status": "ok",
"id_ordem": 123456
}
Erros específicos: 400 — {body: 'O conteúdo não é um JSON válido'}.; 403 — cliente diferente do cliente do terceiro.; 400 — {id_ordem: 'Ordem de carregamento precisa dos itens'}: ordem_item ausente.; 400 — {id_ordem: 'Nenhum item encontrado'}: ordem_item vazio.; 400 — erros de validação da ordem ou dos itens (cliente, veículo, motorista, produto…).; 400 — {laudo_produto: mensagem}: produto não está na ordem, laudo inválido etc.; 400 — {registro: 'Falha por duplicidade: ordem_lacre[i] (ou ordem_amostra[i]): …'}: item repetido na lista ou amostra já usada em outra ordem; {ordem_lacre[i].numero: Inválido} para número vazio ou não numérico. Nada é gravado..
/v1/terceiro/ordemCarregamentoMuda a situação (acao) ou vincula/remove laudos por produto
FILA, OPERACAO e FINALIZAR não verificam se a ordem é de carregamento (só CANCELAR verifica o tipo). FILA e OPERACAO fora da situação esperada respondem 200 com situacao='ORDEM NÃO ENCONTRADA', e não um erro.
Perfis: App, Rede, Filial, Pessoa
Ações (parâmetro acao):
| Ação | O que faz |
|---|---|
FILA |
Põe a ordem na fila. Só age se a ordem estiver em P (pendente) e for do app; caso contrário, responde 200 com situacao='ORDEM NÃO ENCONTRADA'. Sucesso: situacao='ORDEM INCLUÍDA NA FILA' + id_ordem, tipo, id_cliente, cliente, id_veiculo, veiculo, id_motorista, motorista, produtos. Pendência de documento ou de agendamento: 400 com {"errors":{"exception": …}} e, quando houver, situacao='ORDEM C/ PENDÊNCIAS' + pendencias[]. |
OPERACAO |
Passa a ordem para O (operação), com data_hora_operacao = agora. Só age se a ordem estiver em A (aguardando); caso contrário, responde 200 com situacao='ORDEM NÃO ENCONTRADA'. No carregamento, preenche a temperatura e a densidade padrão do cliente para o produto (por produto ou por item, conforme o parâmetro ORDEM_PRODUTO_PREENCHER_TEMP_DENS) e recalcula os volumes. Sucesso: situacao='ORDEM INCLUÍDA NA OPERAÇÃO' + os mesmos campos da ação FILA. |
FINALIZAR |
Finaliza a ordem (ordens de equipamentos Dayler são processadas antes). Pode ser repetida: ordem já finalizada responde situacao='ORDEM FINALIZADA'. Se o app exige conferência (parâmetro OPERACAO_CARREGAMENTO_CONFERENCIA ou OPERACAO_DESCARREGAMENTO_CONFERENCIA = S) e a ordem não foi conferida: 400 'Falha ao finalizar: Conferência não realizada'. Outras falhas (ex. bloqueio de temperatura): 400 com {"errors":{"ordem": …}} e situacao='ORDEM NÃO FINALIZADA'. Esta ação não exige uma situação de origem específica. |
CANCELAR |
Igual ao DELETE: cancela apenas ordem em P (pendente) e do tipo do endpoint. |
Parâmetros (query)
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
id_ordem |
integer | sim | Id da ordem. Não aceita o número nem o codigo_interno. |
acao |
string | não | FILA, OPERACAO, FINALIZAR ou CANCELAR. Obrigatória, exceto quando o corpo traz laudo_produto. |
Corpo (JSON objeto)
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
laudo_produto |
array | não | [{id_produto, id_laudo_produto}]: vincula o laudo ao produto da ordem; id_laudo_produto = 0 remove. Quando presente, o PUT faz só isso e ignora acao. |
curl -s -X PUT "$BASE/v1/terceiro/ordemCarregamento?$AUTH&id_ordem=" \
-H 'Content-Type: application/json' \
-d '{"laudo_produto": [{"id_produto": 10, "id_laudo_produto": 77}]}'
Resposta:
{
"status": "ok",
"situacao": "ORDEM INCLUÍDA NA FILA",
"id_ordem": 123456,
"tipo": "C",
"id_cliente": 101,
"cliente": "CLIENTE EXEMPLO",
"id_veiculo": 3001,
"veiculo": "ABC1D23",
"id_motorista": 2001,
"motorista": "MOTORISTA 01",
"produtos": "DIESEL S10"
}
Erros específicos: 400 — {acao: Inválido}: acao ausente ou diferente de FILA, OPERACAO, FINALIZAR e CANCELAR (quando o corpo não traz laudo_produto).; 400 — {id_ordem: Inválido}: id_ordem ausente ou inválido.; 403 — ordem fora do escopo do acesso.; 400 — erros de validação ou de situação, conforme a ação.; 200 — com laudo_produto no corpo: {status: ok}, sem outros campos. Em caso de erro, 400 {laudo_produto: mensagem}..
/v1/terceiro/ordemCarregamentoCancela a ordem (só em P, pendente)
Perfis: App, Rede, Filial, Cliente, Pessoa
Parâmetros (query)
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
id_ordem |
integer | sim | Id da ordem. Não aceita o número nem o codigo_interno. |
curl -s -X DELETE "$BASE/v1/terceiro/ordemCarregamento?$AUTH&id_ordem="
Resposta:
{
"status": "ok",
"id_ordem": 123456,
"situacao": "C"
}
Erros específicos: 400 — {id_ordem: Inválido}: id_ordem ausente ou inválido.; 403 — ordem fora do escopo do acesso.; 400 — {registro: 'Falha ao localizar'}: a ordem não existe ou é de outro tipo (D no endpoint de carregamento e vice-versa).; 400 — {registro: 'Falha ao cancelar: a ordem só pode ser cancelada enquanto estiver PENDENTE'}.; 400 — {registro: 'Falha ao cancelar'}..
Ordem de descarregamento: criar, consultar, mudar situação, vincular laudo e cancelar. POST cria a ordem de descarregamento (um produto, volumes da nota de remessa e laudo opcional). Ao contrário do carregamento, não tem itens nem compartimentos: o POST ignora ordem_item, ordem_lacre, ordem_amostra e transferencia (lacres e amostras vão por ordemLacre e ordemAmostra). PUT muda a situação por ?acao= ou, com ?id_laudo_produto=, só vincula ou remove o laudo. DELETE cancela apenas ordem em P (pendente).
/v1/terceiro/ordemDescarregamentoConsulta a ordem de descarregamento
Perfis: App, Rede, Filial, Cliente, Pessoa
Parâmetros (query)
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
id_ordem |
integer | sim | Id da ordem. Não aceita o número nem o codigo_interno. |
curl -s -X GET "$BASE/v1/terceiro/ordemDescarregamento?$AUTH&id_ordem="
Resposta:
{
"status": "ok",
"id_ordem": 123457,
"tipo": "D",
"id_cliente": 101,
"id_motorista": 2001,
"id_fornecedor": 0,
"id_veiculo1": 3001,
"id_veiculo2": 0,
"id_veiculo3": 0,
"id_veiculo4": 0,
"id_transportadora": 401,
"id_operador": 0,
"validade_inicial": "2026-11-12 00:00:00",
"validade_final": "2026-11-13 23:59:59",
"situacao": "P",
"data_hora_pendente": "2026-11-12 08:00:00",
"id_produto": 10,
"volume_ambiente_remessa": 30000,
"volume_a_20_remessa": 29850,
"densidade_a_20_remessa": 0.835,
"volume_ambiente": 30000,
"volume_a_20": 0,
"codigo_interno": "OC-0002",
"nfe_origem": "",
"cte_origem": "",
"id_laudo_produto": 0,
"numero": 98766,
"ordem_senha": [],
"ordem_situacao": [
{
"id_ordem_situacao": 2,
"situacao": "P",
"data_hora": "2026-11-12 08:00:00",
"id_tx_pessoa": 0
}
],
"...": "demais campos de resposta_campos"
}
Erros específicos: 400 — {id_ordem: Inválido}: id_ordem ausente ou inválido.; 400 — {registro: 'Falha ao localizar'}: a ordem não existe ou não é de descarregamento.; 403 — ordem fora do escopo do acesso..
/v1/terceiro/ordemDescarregamentoCria ordem de descarregamento
Perfis: App, Rede, Filial, Cliente, Pessoa
Corpo (JSON objeto)
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
id_cliente |
integer | não | Alternativa: cpf_cnpj_cliente. Se o terceiro é de um cliente, a ordem vai sempre para esse cliente (informar outro dá 403). |
cpf_cnpj_cliente |
string | não | |
id_motorista |
integer | não | Alternativa: cpf_motorista. |
cpf_motorista |
string | não | |
id_fornecedor |
integer | não | Alternativa: cpf_cnpj_fornecedor. |
cpf_cnpj_fornecedor |
string | não | |
id_veiculo1 |
integer | não | Alternativa: placa1. |
placa1 |
string | não | |
id_veiculo2 |
integer | não | Alternativa: placa2. |
placa2 |
string | não | |
id_veiculo3 |
integer | não | Alternativa: placa3. |
placa3 |
string | não | |
id_veiculo4 |
integer | não | Alternativa: placa4. |
placa4 |
string | não | |
id_transportadora |
integer | não | Alternativa: cpf_cnpj_transportadora. |
cpf_cnpj_transportadora |
string | não | |
id_produto |
integer | não | Produto descarregado (só o id; não há alternativa por código). |
validade_inicial |
datetime | não | Texto 'AAAA-MM-DD HH:MM:SS'. |
validade_final |
datetime | não | Texto 'AAAA-MM-DD HH:MM:SS'. |
volume_a_20_remessa |
number | não | Volume a 20 °C da nota de remessa (L). |
volume_ambiente_remessa |
number | não | Volume ambiente da remessa (L). Também preenche volume_ambiente. |
densidade_a_20_remessa |
number | não | |
codigo_interno |
string | não | |
observacao |
string | não | |
nfe_origem |
string | não | |
cte_origem |
string | não | |
id_laudo_produto |
integer | não | Laudo a vincular à ordem (> 0). |
curl -s -X POST "$BASE/v1/terceiro/ordemDescarregamento?$AUTH" \
-H 'Content-Type: application/json' \
-d '{"cpf_cnpj_cliente": "00.000.000/0001-00", "cpf_motorista": "000.000.000-00", "placa1": "ABC1D23", "id_produto": 10, "volume_ambiente_remessa": 30000, "volume_a_20_remessa": 29850, "densidade_a_20_remessa": 0.835, "codigo_interno": "OC-0002", "nfe_origem": "00000000000000000000000000000000000000000000", "id_laudo_produto": 77}'
Resposta:
{
"status": "ok",
"id_ordem": 123457
}
Erros específicos: 400 — {body: 'O conteúdo não é um JSON válido'}.; 403 — cliente diferente do cliente do terceiro.; 400 — erros de validação da ordem.; 400 — {id_laudo_produto: mensagem}: laudo não encontrado ou incompatível. A ordem não é gravada.; 500 — erro inesperado..
/v1/terceiro/ordemDescarregamentoMuda a situação (acao) ou vincula/remove o laudo
O PUT do descarregamento não lê o corpo: o laudo vai na query (no carregamento, vai no corpo). FILA, OPERACAO e FINALIZAR não verificam o tipo da ordem.
Perfis: App, Rede, Filial, Pessoa
Ações (parâmetro acao):
| Ação | O que faz |
|---|---|
FILA |
Põe a ordem na fila. Só age se a ordem estiver em P (pendente) e for do app; caso contrário, responde 200 com situacao='ORDEM NÃO ENCONTRADA'. Sucesso: situacao='ORDEM INCLUÍDA NA FILA' + id_ordem, tipo, id_cliente, cliente, id_veiculo, veiculo, id_motorista, motorista, produtos. Pendência de documento ou de agendamento: 400 com {"errors":{"exception": …}} e, quando houver, situacao='ORDEM C/ PENDÊNCIAS' + pendencias[]. |
OPERACAO |
Passa a ordem para O (operação), com data_hora_operacao = agora. Só age se a ordem estiver em A (aguardando); caso contrário, responde 200 com situacao='ORDEM NÃO ENCONTRADA'. No carregamento, preenche a temperatura e a densidade padrão do cliente para o produto (por produto ou por item, conforme o parâmetro ORDEM_PRODUTO_PREENCHER_TEMP_DENS) e recalcula os volumes. Sucesso: situacao='ORDEM INCLUÍDA NA OPERAÇÃO' + os mesmos campos da ação FILA. |
FINALIZAR |
Finaliza a ordem (ordens de equipamentos Dayler são processadas antes). Pode ser repetida: ordem já finalizada responde situacao='ORDEM FINALIZADA'. Se o app exige conferência (parâmetro OPERACAO_CARREGAMENTO_CONFERENCIA ou OPERACAO_DESCARREGAMENTO_CONFERENCIA = S) e a ordem não foi conferida: 400 'Falha ao finalizar: Conferência não realizada'. Outras falhas (ex. bloqueio de temperatura): 400 com {"errors":{"ordem": …}} e situacao='ORDEM NÃO FINALIZADA'. Esta ação não exige uma situação de origem específica. |
CANCELAR |
Igual ao DELETE: cancela apenas ordem em P (pendente) e do tipo do endpoint. |
Parâmetros (query)
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
id_ordem |
integer | sim | Id da ordem. Não aceita o número nem o codigo_interno. |
acao |
string | não | FILA, OPERACAO, FINALIZAR ou CANCELAR. Obrigatória, exceto quando se informa id_laudo_produto. |
id_laudo_produto |
integer | não | Se informado (>= 0), o PUT faz só isso e ignora acao: > 0 vincula o laudo à ordem; 0 remove o laudo. |
curl -s -X PUT "$BASE/v1/terceiro/ordemDescarregamento?$AUTH&id_ordem="
Resposta:
{
"status": "ok",
"situacao": "ORDEM INCLUÍDA NA OPERAÇÃO",
"id_ordem": 123457,
"tipo": "D",
"id_cliente": 101,
"cliente": "CLIENTE EXEMPLO",
"id_veiculo": 3001,
"veiculo": "ABC1D23",
"id_motorista": 2001,
"motorista": "MOTORISTA 01",
"produtos": "ETANOL"
}
Erros específicos: 400 — {acao: Inválido}: acao ausente ou diferente de FILA, OPERACAO, FINALIZAR e CANCELAR (quando não se informa id_laudo_produto).; 400 — {id_ordem: Inválido}: id_ordem ausente ou inválido.; 403 — ordem fora do escopo do acesso.; 400 — erros de validação ou de situação, conforme a ação.; 200 — com id_laudo_produto: {status: ok}. Em caso de erro, 400 {id_laudo_produto: mensagem}..
/v1/terceiro/ordemDescarregamentoCancela a ordem (só em P, pendente)
Perfis: App, Rede, Filial, Cliente, Pessoa
Parâmetros (query)
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
id_ordem |
integer | sim | Id da ordem. Não aceita o número nem o codigo_interno. |
curl -s -X DELETE "$BASE/v1/terceiro/ordemDescarregamento?$AUTH&id_ordem="
Resposta:
{
"status": "ok",
"id_ordem": 123457,
"situacao": "C"
}
Erros específicos: 400 — {id_ordem: Inválido}: id_ordem ausente ou inválido.; 403 — ordem fora do escopo do acesso.; 400 — {registro: 'Falha ao localizar'}: a ordem não existe ou é de outro tipo (D no endpoint de carregamento e vice-versa).; 400 — {registro: 'Falha ao cancelar: a ordem só pode ser cancelada enquanto estiver PENDENTE'}.; 400 — {registro: 'Falha ao cancelar'}..
Lacres da ordem. Consulta e mantém os lacres de uma ordem (carregamento ou descarregamento). POST, PUT e DELETE só funcionam com a ordem em P (pendente) e dentro do escopo do acesso. POST acrescenta, PUT substitui a lista inteira e DELETE remove um lacre ou todos. O mesmo lacre não pode se repetir na mesma ordem (pode existir em outras).
/v1/terceiro/ordemLacreLista os lacres da ordem
Perfis: App, Rede, Filial, Cliente, Pessoa
Parâmetros (query)
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
id_ordem |
integer | sim | Id da ordem. Não aceita o número nem o codigo_interno. |
curl -s -X GET "$BASE/v1/terceiro/ordemLacre?$AUTH&id_ordem="
Resposta:
{
"data": [
{
"tipo": "SUPERIOR",
"numero": 1001
}
],
"status": "ok"
}
Erros específicos: 400 — {id_ordem: Inválido}: id_ordem ausente ou inválido.; 400 — {registro: 'Falha ao localizar'}: a ordem não existe.; 403 — ordem fora do escopo do acesso..
/v1/terceiro/ordemLacreAcrescenta lacres (sem apagar os existentes)
Perfis: App, Rede, Filial, Cliente, Pessoa
Parâmetros (query)
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
id_ordem |
integer | sim | Id da ordem. Não aceita o número nem o codigo_interno. |
Corpo (JSON lista)
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
tipo |
string | sim | Tipo do lacre (texto livre, ex. SUPERIOR). |
numero |
integer | sim | Número (inteiro maior que 0). Aceita número ou texto só com dígitos (1001 ou "1001"). |
curl -s -X POST "$BASE/v1/terceiro/ordemLacre?$AUTH&id_ordem=" \
-H 'Content-Type: application/json' \
-d '[{"tipo": "SUPERIOR", "numero": 1001}, {"tipo": "INFERIOR", "numero": 1002}]'
Resposta:
{
"status": "ok"
}
Erros específicos: 400 — {id_ordem: Inválido}: id_ordem ausente ou inválido.; 400 — {body: …}: corpo vazio ou que não é uma lista JSON.; 400 — {item[i]: Inválido}, {item[i].tipo: Inválido} ou {item[i].numero: Inválido}.; 400 — {registro: 'Falha ao localizar'}: a ordem não existe.; 403 — ordem fora do escopo do acesso.; 400 — {registro: 'Falha ao alterar: a ordem só aceita alteração enquanto estiver PENDENTE'}.; 400 — {registro: 'Falha por duplicidade: item[i]: …'}. Nada é gravado..
/v1/terceiro/ordemLacreSubstitui todos os lacres da ordem pela lista enviada
Perfis: App, Rede, Filial, Cliente, Pessoa
Parâmetros (query)
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
id_ordem |
integer | sim | Id da ordem. Não aceita o número nem o codigo_interno. |
Corpo (JSON lista)
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
tipo |
string | sim | Tipo do lacre (texto livre, ex. SUPERIOR). |
numero |
integer | sim | Número (inteiro maior que 0). Aceita número ou texto só com dígitos (1001 ou "1001"). |
curl -s -X PUT "$BASE/v1/terceiro/ordemLacre?$AUTH&id_ordem=" \
-H 'Content-Type: application/json' \
-d '[{"tipo": "SUPERIOR", "numero": 1001}, {"tipo": "INFERIOR", "numero": 1002}]'
Resposta:
{
"status": "ok"
}
Erros específicos: 400 — {id_ordem: Inválido}: id_ordem ausente ou inválido.; 400 — {body: …}: corpo vazio ou que não é uma lista JSON.; 400 — {item[i]: Inválido}, {item[i].tipo: Inválido} ou {item[i].numero: Inválido}.; 400 — {registro: 'Falha ao localizar'}: a ordem não existe.; 403 — ordem fora do escopo do acesso.; 400 — {registro: 'Falha ao alterar: a ordem só aceita alteração enquanto estiver PENDENTE'}.; 400 — {registro: 'Falha por duplicidade: item[i]: …'}: a lista tem lacre repetido(a). Nada é gravado (a lista atual fica como estava)..
/v1/terceiro/ordemLacreRemove um lacre (tipo+numero) ou todos (sem os dois)
Perfis: App, Rede, Filial, Cliente, Pessoa
Parâmetros (query)
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
id_ordem |
integer | sim | Id da ordem. Não aceita o número nem o codigo_interno. |
tipo |
string | não | Tipo do item a remover. Vai junto com numero; sem os dois, remove todos. |
numero |
integer | não | Número do item a remover. |
curl -s -X DELETE "$BASE/v1/terceiro/ordemLacre?$AUTH&id_ordem="
Resposta:
{
"status": "ok",
"removidos": 1
}
Erros específicos: 400 — {tipo: Inválido} ou {numero: Inválido}: só um dos dois foi informado.; 400 — {registro: 'Falha ao localizar'}: o item não existe.; 403 — ordem fora do escopo do acesso.; 400 — a ordem não está em P (pendente)..
Amostras da ordem. Consulta e mantém as amostras de uma ordem (carregamento ou descarregamento). POST, PUT e DELETE só funcionam com a ordem em P (pendente) e dentro do escopo do acesso. POST acrescenta, PUT substitui a lista inteira e DELETE remove uma amostra ou todas. O par (tipo, numero) da amostra é único em todas as ordens: o POST avisa se a amostra já está nesta ou em outra ordem.
/v1/terceiro/ordemAmostraLista as amostras da ordem
Perfis: App, Rede, Filial, Cliente, Pessoa
Parâmetros (query)
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
id_ordem |
integer | sim | Id da ordem. Não aceita o número nem o codigo_interno. |
curl -s -X GET "$BASE/v1/terceiro/ordemAmostra?$AUTH&id_ordem="
Resposta:
{
"data": [
{
"tipo": "SUPERIOR",
"numero": 1001
}
],
"status": "ok"
}
Erros específicos: 400 — {id_ordem: Inválido}: id_ordem ausente ou inválido.; 400 — {registro: 'Falha ao localizar'}: a ordem não existe.; 403 — ordem fora do escopo do acesso..
/v1/terceiro/ordemAmostraAcrescenta amostras (sem apagar as existentes)
Perfis: App, Rede, Filial, Cliente, Pessoa
Parâmetros (query)
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
id_ordem |
integer | sim | Id da ordem. Não aceita o número nem o codigo_interno. |
Corpo (JSON lista)
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
tipo |
string | sim | Tipo da amostra (texto livre, ex. SUPERIOR). |
numero |
integer | sim | Número (inteiro maior que 0). Aceita número ou texto só com dígitos (1001 ou "1001"). |
curl -s -X POST "$BASE/v1/terceiro/ordemAmostra?$AUTH&id_ordem=" \
-H 'Content-Type: application/json' \
-d '[{"tipo": "SUPERIOR", "numero": 1001}, {"tipo": "INFERIOR", "numero": 1002}]'
Resposta:
{
"status": "ok"
}
Erros específicos: 400 — {id_ordem: Inválido}: id_ordem ausente ou inválido.; 400 — {body: …}: corpo vazio ou que não é uma lista JSON.; 400 — {item[i]: Inválido}, {item[i].tipo: Inválido} ou {item[i].numero: Inválido}.; 400 — {registro: 'Falha ao localizar'}: a ordem não existe.; 403 — ordem fora do escopo do acesso.; 400 — {registro: 'Falha ao alterar: a ordem só aceita alteração enquanto estiver PENDENTE'}.; 400 — {registro: 'Falha por duplicidade: item[i]: …'}. Nada é gravado..
/v1/terceiro/ordemAmostraSubstitui todas as amostras da ordem pela lista enviada
Perfis: App, Rede, Filial, Cliente, Pessoa
Parâmetros (query)
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
id_ordem |
integer | sim | Id da ordem. Não aceita o número nem o codigo_interno. |
Corpo (JSON lista)
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
tipo |
string | sim | Tipo da amostra (texto livre, ex. SUPERIOR). |
numero |
integer | sim | Número (inteiro maior que 0). Aceita número ou texto só com dígitos (1001 ou "1001"). |
curl -s -X PUT "$BASE/v1/terceiro/ordemAmostra?$AUTH&id_ordem=" \
-H 'Content-Type: application/json' \
-d '[{"tipo": "SUPERIOR", "numero": 1001}, {"tipo": "INFERIOR", "numero": 1002}]'
Resposta:
{
"status": "ok"
}
Erros específicos: 400 — {id_ordem: Inválido}: id_ordem ausente ou inválido.; 400 — {body: …}: corpo vazio ou que não é uma lista JSON.; 400 — {item[i]: Inválido}, {item[i].tipo: Inválido} ou {item[i].numero: Inválido}.; 400 — {registro: 'Falha ao localizar'}: a ordem não existe.; 403 — ordem fora do escopo do acesso.; 400 — {registro: 'Falha ao alterar: a ordem só aceita alteração enquanto estiver PENDENTE'}.; 400 — {registro: 'Falha por duplicidade: item[i]: …'}: a lista tem amostra repetido(a) ou com número já usado em outra ordem. Nada é gravado (a lista atual fica como estava)..
/v1/terceiro/ordemAmostraRemove uma amostra (tipo + numero) ou todas (sem os dois)
Perfis: App, Rede, Filial, Cliente, Pessoa
Parâmetros (query)
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
id_ordem |
integer | sim | Id da ordem. Não aceita o número nem o codigo_interno. |
tipo |
string | não | Tipo do item a remover. Vai junto com numero; sem os dois, remove todos. |
numero |
integer | não | Número do item a remover. |
curl -s -X DELETE "$BASE/v1/terceiro/ordemAmostra?$AUTH&id_ordem="
Resposta:
{
"status": "ok",
"removidos": 1
}
Erros específicos: 400 — {tipo: Inválido} ou {numero: Inválido}: só um dos dois foi informado.; 400 — {registro: 'Falha ao localizar'}: o item não existe.; 403 — ordem fora do escopo do acesso.; 400 — a ordem não está em P (pendente)..
Conferência da ordem antes da finalização. Quando o app exige conferência (parâmetros OPERACAO_CARREGAMENTO_CONFERENCIA, OPERACAO_DESCARREGAMENTO_CONFERENCIA ou OPERACAO_ABASTECIMENTO_CONFERENCIA = S), a ordem só finaliza depois de conferida. POST (ou PUT, que é idêntico) grava data_hora_conferencia = agora numa ordem em O (operação) ou V (vistoria) dentro da validade. GET lista as ordens já conferidas que ainda estão em O ou V.
/v1/terceiro/conferenciaOrdens conferidas ainda em O (operação) ou V (vistoria)
Perfis: App, Rede, Filial, Cliente, Pessoa
Parâmetros (query)
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
tipo |
string | não | C (carregamento, padrão), D (descarregamento) ou A (abastecimento). |
curl -s -X GET "$BASE/v1/terceiro/conferencia?$AUTH"
Resposta:
{
"data": [
{
"id_ordem": 123456,
"tipo": "C",
"situacao": "O",
"data_hora": "2026-11-12 09:30:00",
"id_cliente": 101,
"cliente": "CLIENTE EXEMPLO",
"id_veiculo": 3001,
"veiculo": "ABC1D23",
"id_motorista": 2001,
"motorista": "MOTORISTA",
"produtos": "DIESEL S10",
"transferencia": "N"
}
],
"status": "ok"
}
Erros específicos: 401/403 — autenticação ou permissão (respostas padrão)..
/v1/terceiro/conferenciaRegistra a conferência da ordem
Perfis: App, Rede, Filial, Cliente, Pessoa
Parâmetros (query)
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
id_ordem |
integer | sim | Id da ordem. Não aceita o número nem o codigo_interno. |
curl -s -X POST "$BASE/v1/terceiro/conferencia?$AUTH&id_ordem="
Resposta:
{
"status": "ok",
"situacao": "ORDEM CONFERIDA",
"id_ordem": 123456,
"tipo": "C",
"id_cliente": 101,
"cliente": "CLIENTE EXEMPLO",
"id_veiculo": 3001,
"veiculo": "ABC1D23",
"id_motorista": 2001,
"motorista": "MOTORISTA 01",
"produtos": "DIESEL S10"
}
Erros específicos: 200 — situacao='ORDEM NÃO ENCONTRADA': sem id, ordem fora de O/V, fora da validade, de outro app ou fora do escopo do acesso (não responde 403).; 200 — situacao='ORDEM JÁ CONFERIDA'.; 400 — {registro: 'Falha ao Conferir'}..
/v1/terceiro/conferenciaIgual ao POST
Perfis: App, Rede, Filial, Pessoa
Parâmetros (query)
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
id_ordem |
integer | sim | Id da ordem. Não aceita o número nem o codigo_interno. |
curl -s -X PUT "$BASE/v1/terceiro/conferencia?$AUTH&id_ordem="
Resposta:
{
"status": "ok",
"situacao": "ORDEM CONFERIDA",
"id_ordem": 123456,
"tipo": "C",
"id_cliente": 101,
"cliente": "CLIENTE EXEMPLO",
"id_veiculo": 3001,
"veiculo": "ABC1D23",
"id_motorista": 2001,
"motorista": "MOTORISTA 01",
"produtos": "DIESEL S10"
}
Erros específicos: 200 — situacao='ORDEM NÃO ENCONTRADA': sem id, ordem fora de O/V, fora da validade, de outro app ou fora do escopo do acesso (não responde 403).; 200 — situacao='ORDEM JÁ CONFERIDA'.; 400 — {registro: 'Falha ao Conferir'}..