{
  "info": {
    "name": "PetroW — integração Vitreum",
    "_postman_id": "petrow-petrow-integração-vitreum",
    "description": "Coleção gerada da documentação oficial (https://wiki.txfuel.com.br/pt-br/petrow/api). Preencha as variáveis da coleção: base_url, tipo_identificador (APP, REDE, CNPJ ou CPF), valor_identificador, identificador e app_id. A senha do dia é calculada automaticamente.",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "event": [
    {
      "listen": "prerequest",
      "script": {
        "type": "text/javascript",
        "exec": [
          "// Autenticação das APIs de terceiro do PetroW: acrescenta APP|REDE|CNPJ|CPF, SENHA (do dia) e A em todo pedido.",
          "// SENHA = md5(identificador + AAAA-MM-DD + valor enviado em APP/REDE/CNPJ/CPF), data de Brasília.",
          "const tipo = pm.variables.get('tipo_identificador') || 'APP';",
          "const valor = pm.variables.get('valor_identificador') || '';",
          "const identificador = pm.variables.get('identificador') || '';",
          "const hoje = new Date(Date.now() - 3 * 3600 * 1000).toISOString().slice(0, 10);",
          "const chave = (tipo === 'CNPJ' || tipo === 'CPF') ? valor.replace(/\\D/g, '') : valor;",
          "const senha = CryptoJS.MD5(identificador + hoje + chave).toString();",
          "['APP', 'REDE', 'CNPJ', 'CPF', 'SENHA', 'A'].forEach(k => pm.request.url.query.remove(k));",
          "pm.request.url.query.add({ key: tipo, value: chave });",
          "pm.request.url.query.add({ key: 'SENHA', value: senha });",
          "pm.request.url.query.add({ key: 'A', value: pm.variables.get('app_id') });"
        ]
      }
    }
  ],
  "variable": [
    {
      "key": "base_url",
      "value": "https://pwbase1.txfuel.com.br/api"
    },
    {
      "key": "tipo_identificador",
      "value": "APP"
    },
    {
      "key": "valor_identificador",
      "value": "NOME DO APP"
    },
    {
      "key": "identificador",
      "value": ""
    },
    {
      "key": "app_id",
      "value": "0"
    }
  ],
  "item": [
    {
      "name": "Integração Vitreum",
      "description": "Integração com o Vitreum, sistema usado por clientes do PetroW: rotas em /v1/terceiro/vitreum/, próprias desse sistema. Hoje seguem as regras das rotas gerais equivalentes (indicadas em cada endpoint). Autenticação, perfis e erros seguem o manual geral das APIs de terceiro.",
      "item": [
        {
          "name": "GET vitreum/cliente — Consulta um cliente",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/terceiro/vitreum/cliente?id_cliente=",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "terceiro",
                "vitreum",
                "cliente"
              ],
              "query": [
                {
                  "key": "id_cliente",
                  "value": "",
                  "description": "Id do cliente",
                  "disabled": false
                }
              ]
            },
            "description": "Mesma regra de `cliente`. Cadastro de cliente (dados da pessoa + cadastro de cliente). Localiza o cliente por id_cliente ou, se id_cliente não vier, por cpf_cnpj. Gravação parcial: só os campos presentes no JSON são alterados. Campos de texto precisam vir como texto JSON (entre aspas). DELETE apenas desativa (ativo = N). Acesso com perfil cliente não pode criar (403) e só consulta e altera o próprio cliente.\n\nPerfis: App, Rede, Filial, Cliente, Pessoa."
          }
        },
        {
          "name": "POST vitreum/cliente — Cria um cliente",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/terceiro/vitreum/cliente",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "terceiro",
                "vitreum",
                "cliente"
              ],
              "query": []
            },
            "description": "Sempre cria um novo cliente; não altera um existente. Se já houver uma pessoa com o cpf_cnpj, ela é reaproveitada. Se algo falhar, nada é gravado.\n\nPerfis: App, Rede, Filial, Pessoa.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"cpf_cnpj\": \"00.000.000/0001-00\",\n  \"nome_razao_social\": \"EMPRESA EXEMPLO LTDA\",\n  \"identificacao\": \"EXEMPLO\",\n  \"email\": \"contato@exemplo.com.br\",\n  \"cep\": \"80000-000\",\n  \"logradouro\": \"RUA EXEMPLO\",\n  \"numero\": 100,\n  \"bairro\": \"CENTRO\",\n  \"localidade\": \"CURITIBA\",\n  \"estado\": \"PR\",\n  \"codigo_erp\": \"C001\",\n  \"simp_instalacao\": \"1234567\",\n  \"simp_agente\": \"1234567890\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "PUT vitreum/cliente — Altera um cliente",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/terceiro/vitreum/cliente?id_cliente=",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "terceiro",
                "vitreum",
                "cliente"
              ],
              "query": [
                {
                  "key": "id_cliente",
                  "value": "",
                  "description": "Id do cliente",
                  "disabled": false
                }
              ]
            },
            "description": "Mesma regra de `cliente`. Cadastro de cliente (dados da pessoa + cadastro de cliente). Localiza o cliente por id_cliente ou, se id_cliente não vier, por cpf_cnpj. Gravação parcial: só os campos presentes no JSON são alterados. Campos de texto precisam vir como texto JSON (entre aspas). DELETE apenas desativa (ativo = N). Acesso com perfil cliente não pode criar (403) e só consulta e altera o próprio cliente.\n\nPerfis: App, Rede, Filial, Pessoa.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"email\": \"novo@exemplo.com.br\",\n  \"telefone\": \"4133335555\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "DELETE vitreum/cliente — Desativa um cliente",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/terceiro/vitreum/cliente?id_cliente=",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "terceiro",
                "vitreum",
                "cliente"
              ],
              "query": [
                {
                  "key": "id_cliente",
                  "value": "",
                  "description": "Id do cliente",
                  "disabled": false
                }
              ]
            },
            "description": "Mesma regra de `cliente`. Cadastro de cliente (dados da pessoa + cadastro de cliente). Localiza o cliente por id_cliente ou, se id_cliente não vier, por cpf_cnpj. Gravação parcial: só os campos presentes no JSON são alterados. Campos de texto precisam vir como texto JSON (entre aspas). DELETE apenas desativa (ativo = N). Acesso com perfil cliente não pode criar (403) e só consulta e altera o próprio cliente.\n\nPerfis: App, Rede, Filial, Pessoa."
          }
        },
        {
          "name": "GET vitreum/conhecimentoTransporte — Consulta CT-e por id ou chave",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/terceiro/vitreum/conhecimentoTransporte?id_conhecimento_transporte=",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "terceiro",
                "vitreum",
                "conhecimentoTransporte"
              ],
              "query": [
                {
                  "key": "id_conhecimento_transporte",
                  "value": "",
                  "description": "Id do CT-e",
                  "disabled": false
                }
              ]
            },
            "description": "Na busca por chave, só o formato (44 dígitos) é verificado.\n\nPerfis: App, Rede, Filial, Cliente, Pessoa."
          }
        },
        {
          "name": "GET vitreum/fornecedor — Consulta um fornecedor",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/terceiro/vitreum/fornecedor?id_fornecedor=",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "terceiro",
                "vitreum",
                "fornecedor"
              ],
              "query": [
                {
                  "key": "id_fornecedor",
                  "value": "",
                  "description": "Id do fornecedor",
                  "disabled": false
                }
              ]
            },
            "description": "Mesma regra de `fornecedor`. Cadastro de fornecedor (dados da pessoa + cadastro de fornecedor). Localiza o fornecedor por id_fornecedor ou, se id_fornecedor não vier, por cpf_cnpj. Gravação parcial: só os campos presentes no JSON são alterados. Campos de texto precisam vir como texto JSON (entre aspas). DELETE apenas desativa (ativo = N). O endpoint não restringe pelo escopo do acesso (cliente ou filial): vale só a permissão de acesso ao endpoint.\n\nPerfis: App, Rede, Filial, Cliente, Pessoa."
          }
        },
        {
          "name": "POST vitreum/fornecedor — Cria um fornecedor",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/terceiro/vitreum/fornecedor",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "terceiro",
                "vitreum",
                "fornecedor"
              ],
              "query": []
            },
            "description": "Sempre cria um novo fornecedor; não altera um existente. Se já houver uma pessoa com o cpf_cnpj, ela é reaproveitada. Se algo falhar, nada é gravado.\n\nPerfis: App, Rede, Filial, Cliente, Pessoa.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"cpf_cnpj\": \"00.000.000/0001-00\",\n  \"nome_razao_social\": \"EMPRESA EXEMPLO LTDA\",\n  \"identificacao\": \"EXEMPLO\",\n  \"email\": \"contato@exemplo.com.br\",\n  \"cep\": \"80000-000\",\n  \"logradouro\": \"RUA EXEMPLO\",\n  \"numero\": 100,\n  \"bairro\": \"CENTRO\",\n  \"localidade\": \"CURITIBA\",\n  \"estado\": \"PR\",\n  \"codigo_erp\": \"C001\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "PUT vitreum/fornecedor — Altera um fornecedor",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/terceiro/vitreum/fornecedor?id_fornecedor=",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "terceiro",
                "vitreum",
                "fornecedor"
              ],
              "query": [
                {
                  "key": "id_fornecedor",
                  "value": "",
                  "description": "Id do fornecedor",
                  "disabled": false
                }
              ]
            },
            "description": "Mesma regra de `fornecedor`. Cadastro de fornecedor (dados da pessoa + cadastro de fornecedor). Localiza o fornecedor por id_fornecedor ou, se id_fornecedor não vier, por cpf_cnpj. Gravação parcial: só os campos presentes no JSON são alterados. Campos de texto precisam vir como texto JSON (entre aspas). DELETE apenas desativa (ativo = N). O endpoint não restringe pelo escopo do acesso (cliente ou filial): vale só a permissão de acesso ao endpoint.\n\nPerfis: App, Rede, Filial, Cliente, Pessoa.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"email\": \"novo@exemplo.com.br\",\n  \"telefone\": \"4133335555\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "DELETE vitreum/fornecedor — Desativa um fornecedor",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/terceiro/vitreum/fornecedor?id_fornecedor=",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "terceiro",
                "vitreum",
                "fornecedor"
              ],
              "query": [
                {
                  "key": "id_fornecedor",
                  "value": "",
                  "description": "Id do fornecedor",
                  "disabled": false
                }
              ]
            },
            "description": "Mesma regra de `fornecedor`. Cadastro de fornecedor (dados da pessoa + cadastro de fornecedor). Localiza o fornecedor por id_fornecedor ou, se id_fornecedor não vier, por cpf_cnpj. Gravação parcial: só os campos presentes no JSON são alterados. Campos de texto precisam vir como texto JSON (entre aspas). DELETE apenas desativa (ativo = N). O endpoint não restringe pelo escopo do acesso (cliente ou filial): vale só a permissão de acesso ao endpoint.\n\nPerfis: App, Rede, Filial, Pessoa."
          }
        },
        {
          "name": "GET vitreum/importarConhecimentoTransporte — Consulta o andamento",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/terceiro/vitreum/importarConhecimentoTransporte?id_importar_conhecimento_transporte=",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "terceiro",
                "vitreum",
                "importarConhecimentoTransporte"
              ],
              "query": [
                {
                  "key": "id_importar_conhecimento_transporte",
                  "value": "",
                  "description": "Id do pedido de importação",
                  "disabled": false
                }
              ]
            },
            "description": "O GET não restringe pelo escopo do acesso (cliente ou filial): consulta qualquer pedido do app.\n\nPerfis: App, Rede, Filial, Pessoa."
          }
        },
        {
          "name": "POST vitreum/importarConhecimentoTransporte — Coloca a chave na fila de importação",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/terceiro/vitreum/importarConhecimentoTransporte?chave=",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "terceiro",
                "vitreum",
                "importarConhecimentoTransporte"
              ],
              "query": [
                {
                  "key": "chave",
                  "value": "",
                  "description": "Chave de acesso do CT-e (44 dígitos; aceita máscara).",
                  "disabled": false
                }
              ]
            },
            "description": "A chave vai na query string, não no corpo. O corpo é ignorado.\n\nPerfis: App, Rede, Filial, Pessoa."
          }
        },
        {
          "name": "GET vitreum/importarNotaFiscal — Consulta o andamento",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/terceiro/vitreum/importarNotaFiscal?id_importar_nota_fiscal=",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "terceiro",
                "vitreum",
                "importarNotaFiscal"
              ],
              "query": [
                {
                  "key": "id_importar_nota_fiscal",
                  "value": "",
                  "description": "Id do pedido de importação",
                  "disabled": false
                }
              ]
            },
            "description": "O GET não restringe pelo escopo do acesso (cliente ou filial): consulta qualquer pedido do app.\n\nPerfis: App, Rede, Filial, Pessoa."
          }
        },
        {
          "name": "POST vitreum/importarNotaFiscal — Coloca a chave na fila de importação",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/terceiro/vitreum/importarNotaFiscal?chave=",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "terceiro",
                "vitreum",
                "importarNotaFiscal"
              ],
              "query": [
                {
                  "key": "chave",
                  "value": "",
                  "description": "Chave de acesso da NF-e (44 dígitos; aceita máscara).",
                  "disabled": false
                }
              ]
            },
            "description": "A chave vai na query string, não no corpo. O corpo é ignorado.\n\nPerfis: App, Rede, Filial, Pessoa."
          }
        },
        {
          "name": "GET vitreum/laudoProduto — Consulta um laudo com checklist, vínculos e PDF",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/terceiro/vitreum/laudoProduto?id_laudo_produto=",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "terceiro",
                "vitreum",
                "laudoProduto"
              ],
              "query": [
                {
                  "key": "id_laudo_produto",
                  "value": "",
                  "description": "Id do laudo",
                  "disabled": false
                }
              ]
            },
            "description": "Mesma regra de `laudoProduto`. Cria, consulta, altera e desativa laudos de produto. O laudo nasce pendente (aprovado = X). Aprovar ou reprovar não é feito por esta API; depois de aprovado ou reprovado, o laudo não pode mais ser alterado. O checklist é escolhido pela configuração de checklist de laudo mais específica para filial × fornecedor × produto × grade × tipo. O GET lista todas as perguntas desse checklist (respondidas ou não); POST e PUT gravam as respostas por id_checklist_item (criam a resposta ou alteram a existente). Acesso com perfil filial ou rede só acessa laudos da filial; acesso com perfil cliente só consulta laudos ligados a ordens do cliente.\n\nPerfis: App, Rede, Filial, Cliente, Pessoa."
          }
        },
        {
          "name": "POST vitreum/laudoProduto — Cria um laudo (e respostas do checklist)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/terceiro/vitreum/laudoProduto",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "terceiro",
                "vitreum",
                "laudoProduto"
              ],
              "query": []
            },
            "description": "Laudo e respostas são gravados juntos: qualquer erro desfaz tudo. Sem 'checklist' no corpo, nenhuma resposta é gravada.\n\nPerfis: App, Rede, Filial, Cliente, Pessoa.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"cpf_cnpj_tx_estabelecimento\": \"00.000.000/0001-00\",\n  \"cpf_cnpj_fornecedor\": \"11.111.111/0001-11\",\n  \"id_produto\": 5,\n  \"quantidade\": 30000,\n  \"unidade\": \"L\",\n  \"numero\": \"LAU-001\",\n  \"data_amostra\": \"2026-11-10\",\n  \"data_laudo\": \"2026-11-10\",\n  \"lacres\": \"123;124\",\n  \"checklist\": [\n    {\n      \"id_checklist_item\": 48,\n      \"resposta\": \"LÍMPIDO\",\n      \"observacao\": \"\"\n    },\n    {\n      \"id_checklist_item\": 49,\n      \"resposta\": \"INCOLOR\"\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "PUT vitreum/laudoProduto — Altera um laudo pendente (e respostas)",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/terceiro/vitreum/laudoProduto?id_laudo_produto=",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "terceiro",
                "vitreum",
                "laudoProduto"
              ],
              "query": [
                {
                  "key": "id_laudo_produto",
                  "value": "",
                  "description": "Id do laudo",
                  "disabled": false
                }
              ]
            },
            "description": "Atenção: o PUT não é parcial. Todos os campos do laudo são regravados com o valor do corpo ou com o padrão (0, '', 'L'): mande o laudo completo. data_amostra e data_laudo só mudam quando enviadas. As respostas do checklist só mudam para os itens enviados.\n\nPerfis: App, Rede, Filial, Pessoa.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"id_tx_estabelecimento\": 3,\n  \"id_fornecedor\": 12,\n  \"id_produto\": 5,\n  \"quantidade\": 30000,\n  \"unidade\": \"L\",\n  \"numero\": \"LAU-001\",\n  \"data_amostra\": \"2026-11-10\",\n  \"data_laudo\": \"2026-11-10\",\n  \"checklist\": {\n    \"respostas\": [\n      {\n        \"id_checklist_item\": 49,\n        \"resposta\": \"INCOLOR\",\n        \"observacao\": \"conferido\"\n      }\n    ]\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "DELETE vitreum/laudoProduto — Desativa um laudo",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/terceiro/vitreum/laudoProduto?id_laudo_produto=",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "terceiro",
                "vitreum",
                "laudoProduto"
              ],
              "query": [
                {
                  "key": "id_laudo_produto",
                  "value": "",
                  "description": "Id do laudo",
                  "disabled": false
                }
              ]
            },
            "description": "Desativa (ativo = N); não apaga.\n\nPerfis: App, Rede, Filial, Pessoa."
          }
        },
        {
          "name": "GET vitreum/motorista — Consulta um motorista",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/terceiro/vitreum/motorista?id_motorista=",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "terceiro",
                "vitreum",
                "motorista"
              ],
              "query": [
                {
                  "key": "id_motorista",
                  "value": "",
                  "description": "Id do motorista",
                  "disabled": false
                }
              ]
            },
            "description": "Mesma regra de `motorista`. Cadastro de motoristas (dados da pessoa, CNH e validades de cursos). Localiza o motorista por id_motorista ou, se id_motorista não vier, por cpf. POST sempre cria um motorista: a pessoa com o mesmo CPF é reaproveitada; se ela já é motorista, responde 'Dados já cadastrados'. PUT é parcial. DELETE desativa (ativo = N). validade_integracao também é renovada quando um checklist do motorista é aprovado. O endpoint não restringe pelo escopo do acesso (cliente ou filial): vale só a permissão de acesso ao endpoint.\n\nPerfis: App, Rede, Filial, Cliente, Pessoa."
          }
        },
        {
          "name": "POST vitreum/motorista — Cria um motorista",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/terceiro/vitreum/motorista",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "terceiro",
                "vitreum",
                "motorista"
              ],
              "query": []
            },
            "description": "Mesma regra de `motorista`. Cadastro de motoristas (dados da pessoa, CNH e validades de cursos). Localiza o motorista por id_motorista ou, se id_motorista não vier, por cpf. POST sempre cria um motorista: a pessoa com o mesmo CPF é reaproveitada; se ela já é motorista, responde 'Dados já cadastrados'. PUT é parcial. DELETE desativa (ativo = N). validade_integracao também é renovada quando um checklist do motorista é aprovado. O endpoint não restringe pelo escopo do acesso (cliente ou filial): vale só a permissão de acesso ao endpoint.\n\nPerfis: App, Rede, Filial, Cliente, Pessoa.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"cpf\": \"000.000.001-91\",\n  \"nome\": \"MOTORISTA EXEMPLO\",\n  \"celular\": \"41999990000\",\n  \"numero_cnh\": \"00000000000\",\n  \"categoria_cnh\": \"E\",\n  \"validade_cnh\": \"2028-03-01\",\n  \"validade_mopp\": \"2027-08-01\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "PUT vitreum/motorista — Altera um motorista (parcial)",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/terceiro/vitreum/motorista?id_motorista=",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "terceiro",
                "vitreum",
                "motorista"
              ],
              "query": [
                {
                  "key": "id_motorista",
                  "value": "",
                  "description": "Id do motorista",
                  "disabled": false
                }
              ]
            },
            "description": "Mesma regra de `motorista`. Cadastro de motoristas (dados da pessoa, CNH e validades de cursos). Localiza o motorista por id_motorista ou, se id_motorista não vier, por cpf. POST sempre cria um motorista: a pessoa com o mesmo CPF é reaproveitada; se ela já é motorista, responde 'Dados já cadastrados'. PUT é parcial. DELETE desativa (ativo = N). validade_integracao também é renovada quando um checklist do motorista é aprovado. O endpoint não restringe pelo escopo do acesso (cliente ou filial): vale só a permissão de acesso ao endpoint.\n\nPerfis: App, Rede, Filial, Cliente, Pessoa.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"validade_mopp\": \"2028-08-01\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "DELETE vitreum/motorista — Desativa um motorista",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/terceiro/vitreum/motorista?id_motorista=",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "terceiro",
                "vitreum",
                "motorista"
              ],
              "query": [
                {
                  "key": "id_motorista",
                  "value": "",
                  "description": "Id do motorista",
                  "disabled": false
                }
              ]
            },
            "description": "Mesma regra de `motorista`. Cadastro de motoristas (dados da pessoa, CNH e validades de cursos). Localiza o motorista por id_motorista ou, se id_motorista não vier, por cpf. POST sempre cria um motorista: a pessoa com o mesmo CPF é reaproveitada; se ela já é motorista, responde 'Dados já cadastrados'. PUT é parcial. DELETE desativa (ativo = N). validade_integracao também é renovada quando um checklist do motorista é aprovado. O endpoint não restringe pelo escopo do acesso (cliente ou filial): vale só a permissão de acesso ao endpoint.\n\nPerfis: App, Rede, Filial, Pessoa."
          }
        },
        {
          "name": "GET vitreum/notaFiscal — Consulta nota fiscal por id ou chave",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/terceiro/vitreum/notaFiscal?id_nota_fiscal=",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "terceiro",
                "vitreum",
                "notaFiscal"
              ],
              "query": [
                {
                  "key": "id_nota_fiscal",
                  "value": "",
                  "description": "Id da nota fiscal.",
                  "disabled": false
                }
              ]
            },
            "description": "Mesma regra de `notaFiscal`. Devolve a identificação e a situação de uma NF-e que já existe no PetroW, localizada por id_nota_fiscal ou pela chave de 44 dígitos. Só leitura. Acesso com perfil cliente ou de filial só vê notas do próprio cliente ou filial.\n\nPerfis: App, Rede, Filial, Cliente, Pessoa."
          }
        },
        {
          "name": "GET vitreum/operador — Consulta um operador",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/terceiro/vitreum/operador?id_operador=",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "terceiro",
                "vitreum",
                "operador"
              ],
              "query": [
                {
                  "key": "id_operador",
                  "value": "",
                  "description": "Id do operador",
                  "disabled": false
                }
              ]
            },
            "description": "Mesma regra de `operador`. Devolve o operador (funcionário que opera o carregamento e o descarregamento) e os dados da pessoa, por id_operador ou CPF. Só leitura. Não restringe pelo escopo do acesso.\n\nPerfis: App, Rede, Filial, Pessoa."
          }
        },
        {
          "name": "GET vitreum/ordem — Ordem pelo id",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/terceiro/vitreum/ordem?id_ordem=",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "terceiro",
                "vitreum",
                "ordem"
              ],
              "query": [
                {
                  "key": "id_ordem",
                  "value": "",
                  "description": "Id da ordem. Não aceita o número nem o codigo_interno.",
                  "disabled": false
                }
              ]
            },
            "description": "Mesma regra de `ordem`. Verifica o tipo da ordem e devolve exatamente a mesma resposta de GET ordemCarregamento (tipo C) ou GET ordemDescarregamento (tipo D). Só aceita GET.\n\nPerfis: App, Rede, Filial, Cliente, Pessoa."
          }
        },
        {
          "name": "GET vitreum/ordemAmostra — Lista as amostras da ordem",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/terceiro/vitreum/ordemAmostra?id_ordem=",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "terceiro",
                "vitreum",
                "ordemAmostra"
              ],
              "query": [
                {
                  "key": "id_ordem",
                  "value": "",
                  "description": "Id da ordem. Não aceita o número nem o codigo_interno.",
                  "disabled": false
                }
              ]
            },
            "description": "Mesma regra de `ordemAmostra`. 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.\n\nPerfis: App, Rede, Filial, Cliente, Pessoa."
          }
        },
        {
          "name": "PUT vitreum/ordemAmostra — Substitui todas as amostras da ordem pela lista enviada",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/terceiro/vitreum/ordemAmostra?id_ordem=",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "terceiro",
                "vitreum",
                "ordemAmostra"
              ],
              "query": [
                {
                  "key": "id_ordem",
                  "value": "",
                  "description": "Id da ordem. Não aceita o número nem o codigo_interno.",
                  "disabled": false
                }
              ]
            },
            "description": "Mesma regra de `ordemAmostra`. 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.\n\nPerfis: App, Rede, Filial, Cliente, Pessoa.",
            "body": {
              "mode": "raw",
              "raw": "[\n  {\n    \"tipo\": \"SUPERIOR\",\n    \"numero\": 1001\n  },\n  {\n    \"tipo\": \"INFERIOR\",\n    \"numero\": 1002\n  }\n]",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "GET vitreum/ordemCarregamento — Consulta a ordem de carregamento",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/terceiro/vitreum/ordemCarregamento?id_ordem=",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "terceiro",
                "vitreum",
                "ordemCarregamento"
              ],
              "query": [
                {
                  "key": "id_ordem",
                  "value": "",
                  "description": "Id da ordem. Não aceita o número nem o codigo_interno.",
                  "disabled": false
                }
              ]
            },
            "description": "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.\n\nPerfis: App, Rede, Filial, Cliente, Pessoa."
          }
        },
        {
          "name": "POST vitreum/ordemCarregamento — Cria ordem de carregamento",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/terceiro/vitreum/ordemCarregamento",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "terceiro",
                "vitreum",
                "ordemCarregamento"
              ],
              "query": []
            },
            "description": "Mesma regra de `ordemCarregamento`. 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.\n\nPerfis: App, Rede, Filial, Cliente, Pessoa.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"cpf_cnpj_cliente\": \"00.000.000/0001-00\",\n  \"cpf_motorista\": \"000.000.000-00\",\n  \"placa1\": \"ABC1D23\",\n  \"placa2\": \"ABC1D24\",\n  \"cpf_cnpj_transportadora\": \"00.000.000/0002-00\",\n  \"transferencia\": false,\n  \"validade_inicial\": \"2026-11-12 00:00:00\",\n  \"validade_final\": \"2026-11-13 23:59:59\",\n  \"codigo_interno\": \"OC-0001\",\n  \"observacao\": \"\",\n  \"ordem_item\": [\n    {\n      \"placa\": \"ABC1D24\",\n      \"id_produto\": 10,\n      \"compartimento\": 1,\n      \"nivel\": 0,\n      \"quantidade\": 10000,\n      \"amostras\": 0\n    },\n    {\n      \"placa\": \"ABC1D24\",\n      \"id_produto\": 10,\n      \"compartimento\": 2,\n      \"nivel\": 0,\n      \"quantidade\": 15000,\n      \"amostras\": 0\n    }\n  ],\n  \"ordem_lacre\": [\n    {\n      \"tipo\": \"SUPERIOR\",\n      \"numero\": \"1001\"\n    }\n  ],\n  \"ordem_amostra\": [\n    {\n      \"tipo\": \"TESTEMUNHA\",\n      \"numero\": \"5001\"\n    }\n  ],\n  \"laudo_produto\": [\n    {\n      \"id_produto\": 10,\n      \"id_laudo_produto\": 77\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "PUT vitreum/ordemCarregamento — Muda a situação (acao) ou vincula/remove laudos por produto",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/terceiro/vitreum/ordemCarregamento?id_ordem=",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "terceiro",
                "vitreum",
                "ordemCarregamento"
              ],
              "query": [
                {
                  "key": "id_ordem",
                  "value": "",
                  "description": "Id da ordem. Não aceita o número nem o codigo_interno.",
                  "disabled": false
                },
                {
                  "key": "acao",
                  "value": "",
                  "description": "FILA, OPERACAO, FINALIZAR ou CANCELAR. Obrigatória, exceto quando o corpo traz laudo_produto.",
                  "disabled": true
                }
              ]
            },
            "description": "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.\n\nPerfis: App, Rede, Filial, Pessoa.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"laudo_produto\": [\n    {\n      \"id_produto\": 10,\n      \"id_laudo_produto\": 77\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "DELETE vitreum/ordemCarregamento — Cancela a ordem (só em P, pendente)",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/terceiro/vitreum/ordemCarregamento?id_ordem=",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "terceiro",
                "vitreum",
                "ordemCarregamento"
              ],
              "query": [
                {
                  "key": "id_ordem",
                  "value": "",
                  "description": "Id da ordem. Não aceita o número nem o codigo_interno.",
                  "disabled": false
                }
              ]
            },
            "description": "Mesma regra de `ordemCarregamento`. 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.\n\nPerfis: App, Rede, Filial, Cliente, Pessoa."
          }
        },
        {
          "name": "GET vitreum/ordemDescarregamento — Consulta a ordem de descarregamento",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/terceiro/vitreum/ordemDescarregamento?id_ordem=",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "terceiro",
                "vitreum",
                "ordemDescarregamento"
              ],
              "query": [
                {
                  "key": "id_ordem",
                  "value": "",
                  "description": "Id da ordem. Não aceita o número nem o codigo_interno.",
                  "disabled": false
                }
              ]
            },
            "description": "Mesma regra de `ordemDescarregamento`. 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).\n\nPerfis: App, Rede, Filial, Cliente, Pessoa."
          }
        },
        {
          "name": "POST vitreum/ordemDescarregamento — Cria ordem de descarregamento",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/terceiro/vitreum/ordemDescarregamento",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "terceiro",
                "vitreum",
                "ordemDescarregamento"
              ],
              "query": []
            },
            "description": "Mesma regra de `ordemDescarregamento`. 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).\n\nPerfis: App, Rede, Filial, Cliente, Pessoa.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"cpf_cnpj_cliente\": \"00.000.000/0001-00\",\n  \"cpf_motorista\": \"000.000.000-00\",\n  \"placa1\": \"ABC1D23\",\n  \"id_produto\": 10,\n  \"volume_ambiente_remessa\": 30000,\n  \"volume_a_20_remessa\": 29850,\n  \"densidade_a_20_remessa\": 0.835,\n  \"codigo_interno\": \"OC-0002\",\n  \"nfe_origem\": \"00000000000000000000000000000000000000000000\",\n  \"id_laudo_produto\": 77\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "PUT vitreum/ordemDescarregamento — Muda a situação (acao) ou vincula/remove o laudo",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/terceiro/vitreum/ordemDescarregamento?id_ordem=",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "terceiro",
                "vitreum",
                "ordemDescarregamento"
              ],
              "query": [
                {
                  "key": "id_ordem",
                  "value": "",
                  "description": "Id da ordem. Não aceita o número nem o codigo_interno.",
                  "disabled": false
                },
                {
                  "key": "acao",
                  "value": "",
                  "description": "FILA, OPERACAO, FINALIZAR ou CANCELAR. Obrigatória, exceto quando se informa id_laudo_produto.",
                  "disabled": true
                },
                {
                  "key": "id_laudo_produto",
                  "value": "",
                  "description": "Se informado (>= 0), o PUT faz só isso e ignora acao: > 0 vincula o laudo à ordem; 0 remove o laudo.",
                  "disabled": true
                }
              ]
            },
            "description": "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.\n\nPerfis: App, Rede, Filial, Pessoa."
          }
        },
        {
          "name": "DELETE vitreum/ordemDescarregamento — Cancela a ordem (só em P, pendente)",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/terceiro/vitreum/ordemDescarregamento?id_ordem=",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "terceiro",
                "vitreum",
                "ordemDescarregamento"
              ],
              "query": [
                {
                  "key": "id_ordem",
                  "value": "",
                  "description": "Id da ordem. Não aceita o número nem o codigo_interno.",
                  "disabled": false
                }
              ]
            },
            "description": "Mesma regra de `ordemDescarregamento`. 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).\n\nPerfis: App, Rede, Filial, Cliente, Pessoa."
          }
        },
        {
          "name": "GET vitreum/ordemLacre — Lista os lacres da ordem",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/terceiro/vitreum/ordemLacre?id_ordem=",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "terceiro",
                "vitreum",
                "ordemLacre"
              ],
              "query": [
                {
                  "key": "id_ordem",
                  "value": "",
                  "description": "Id da ordem. Não aceita o número nem o codigo_interno.",
                  "disabled": false
                }
              ]
            },
            "description": "Mesma regra de `ordemLacre`. 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).\n\nPerfis: App, Rede, Filial, Cliente, Pessoa."
          }
        },
        {
          "name": "PUT vitreum/ordemLacre — Substitui todos os lacres da ordem pela lista enviada",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/terceiro/vitreum/ordemLacre?id_ordem=",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "terceiro",
                "vitreum",
                "ordemLacre"
              ],
              "query": [
                {
                  "key": "id_ordem",
                  "value": "",
                  "description": "Id da ordem. Não aceita o número nem o codigo_interno.",
                  "disabled": false
                }
              ]
            },
            "description": "Mesma regra de `ordemLacre`. 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).\n\nPerfis: App, Rede, Filial, Cliente, Pessoa.",
            "body": {
              "mode": "raw",
              "raw": "[\n  {\n    \"tipo\": \"SUPERIOR\",\n    \"numero\": 1001\n  },\n  {\n    \"tipo\": \"INFERIOR\",\n    \"numero\": 1002\n  }\n]",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "GET vitreum/produto — Consulta um produto",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/terceiro/vitreum/produto?id_produto=",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "terceiro",
                "vitreum",
                "produto"
              ],
              "query": [
                {
                  "key": "id_produto",
                  "value": "",
                  "description": "Id do produto",
                  "disabled": false
                }
              ]
            },
            "description": "Atenção: alguns campos têm grafia diferente da esperada e devem ser lidos exatamente assim: 'undiade', 'id_produto_composicacaoN' e 'perc_composicacaoN'.\n\nPerfis: App, Rede, Filial, Cliente, Pessoa."
          }
        },
        {
          "name": "GET vitreum/transportadora — Consulta uma transportadora",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/terceiro/vitreum/transportadora?id_transportadora=",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "terceiro",
                "vitreum",
                "transportadora"
              ],
              "query": [
                {
                  "key": "id_transportadora",
                  "value": "",
                  "description": "Id da transportadora.",
                  "disabled": false
                }
              ]
            },
            "description": "Mesma regra de `transportadora`. Cadastro de transportadora (dados da pessoa + cadastro de transportadora). Localiza a transportadora por id_transportadora ou, se id_transportadora não vier, por cpf_cnpj. Gravação parcial: só os campos presentes no JSON são alterados. Campos de texto precisam vir como texto JSON (entre aspas). DELETE apenas desativa (ativo = N). O endpoint não restringe pelo escopo do acesso (cliente ou filial): vale só a permissão de acesso ao endpoint.\n\nPerfis: App, Rede, Filial, Cliente, Pessoa."
          }
        },
        {
          "name": "POST vitreum/transportadora — Cria uma transportadora",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/terceiro/vitreum/transportadora",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "terceiro",
                "vitreum",
                "transportadora"
              ],
              "query": []
            },
            "description": "Sempre cria uma nova transportadora; não altera uma existente. Se já houver uma pessoa com o cpf_cnpj, ela é reaproveitada. Se algo falhar, nada é gravado.\n\nPerfis: App, Rede, Filial, Cliente, Pessoa.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"cpf_cnpj\": \"00.000.000/0001-00\",\n  \"nome_razao_social\": \"EMPRESA EXEMPLO LTDA\",\n  \"identificacao\": \"EXEMPLO\",\n  \"email\": \"contato@exemplo.com.br\",\n  \"cep\": \"80000-000\",\n  \"logradouro\": \"RUA EXEMPLO\",\n  \"numero\": 100,\n  \"bairro\": \"CENTRO\",\n  \"localidade\": \"CURITIBA\",\n  \"estado\": \"PR\",\n  \"codigo_erp\": \"C001\",\n  \"antt\": \"12345678\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "PUT vitreum/transportadora — Altera uma transportadora",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/terceiro/vitreum/transportadora?id_transportadora=",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "terceiro",
                "vitreum",
                "transportadora"
              ],
              "query": [
                {
                  "key": "id_transportadora",
                  "value": "",
                  "description": "Id da transportadora.",
                  "disabled": false
                }
              ]
            },
            "description": "Mesma regra de `transportadora`. Cadastro de transportadora (dados da pessoa + cadastro de transportadora). Localiza a transportadora por id_transportadora ou, se id_transportadora não vier, por cpf_cnpj. Gravação parcial: só os campos presentes no JSON são alterados. Campos de texto precisam vir como texto JSON (entre aspas). DELETE apenas desativa (ativo = N). O endpoint não restringe pelo escopo do acesso (cliente ou filial): vale só a permissão de acesso ao endpoint.\n\nPerfis: App, Rede, Filial, Cliente, Pessoa.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"email\": \"novo@exemplo.com.br\",\n  \"telefone\": \"4133335555\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "DELETE vitreum/transportadora — Desativa uma transportadora",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/terceiro/vitreum/transportadora?id_transportadora=",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "terceiro",
                "vitreum",
                "transportadora"
              ],
              "query": [
                {
                  "key": "id_transportadora",
                  "value": "",
                  "description": "Id da transportadora.",
                  "disabled": false
                }
              ]
            },
            "description": "Mesma regra de `transportadora`. Cadastro de transportadora (dados da pessoa + cadastro de transportadora). Localiza a transportadora por id_transportadora ou, se id_transportadora não vier, por cpf_cnpj. Gravação parcial: só os campos presentes no JSON são alterados. Campos de texto precisam vir como texto JSON (entre aspas). DELETE apenas desativa (ativo = N). O endpoint não restringe pelo escopo do acesso (cliente ou filial): vale só a permissão de acesso ao endpoint.\n\nPerfis: App, Rede, Filial, Pessoa."
          }
        },
        {
          "name": "GET vitreum/txEstabelecimento — Consulta uma filial",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/terceiro/vitreum/txEstabelecimento?id_tx_estabelecimento=",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "terceiro",
                "vitreum",
                "txEstabelecimento"
              ],
              "query": [
                {
                  "key": "id_tx_estabelecimento",
                  "value": "",
                  "description": "Id da filial",
                  "disabled": false
                }
              ]
            },
            "description": "Para acesso com perfil filial, o id_tx_estabelecimento da query é substituído pelo da própria filial (só vê a própria).\n\nPerfis: App, Rede, Filial, Cliente, Pessoa."
          }
        },
        {
          "name": "GET vitreum/txObservacao — Consulta uma observação ou as de um registro",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/terceiro/vitreum/txObservacao?",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "terceiro",
                "vitreum",
                "txObservacao"
              ],
              "query": [
                {
                  "key": "id_tx_observacao",
                  "value": "",
                  "description": "Id da observação (tem prioridade).",
                  "disabled": true
                },
                {
                  "key": "tabela",
                  "value": "",
                  "description": "Tabela (usar junto com id quando não houver id_tx_observacao).",
                  "disabled": true
                },
                {
                  "key": "id",
                  "value": "",
                  "description": "Id do registro na tabela.",
                  "disabled": true
                }
              ]
            },
            "description": "Por id_tx_observacao a resposta é um objeto plano (sem data[]): {status, id_tx_observacao, tabela, id, observacao, data_hora, ativo}.\n\nPerfis: App."
          }
        },
        {
          "name": "POST vitreum/txObservacao — Cria uma observação",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/terceiro/vitreum/txObservacao",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "terceiro",
                "vitreum",
                "txObservacao"
              ],
              "query": []
            },
            "description": "Mesma regra de `txObservacao`. Grava e consulta observações (texto) ligadas a qualquer registro do sistema, identificado por tabela + id. GET por id_tx_observacao devolve uma; por tabela + id devolve a lista. DELETE desativa (ativo = N). A API não verifica se a tabela e o id existem e não restringe pelo escopo do acesso (só pelo app).\n\nPerfis: App.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"tabela\": \"ordem\",\n  \"id\": 9001,\n  \"observacao\": \"Cliente pediu conferência\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "PUT vitreum/txObservacao — Altera uma observação (parcial)",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/terceiro/vitreum/txObservacao?id_tx_observacao=",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "terceiro",
                "vitreum",
                "txObservacao"
              ],
              "query": [
                {
                  "key": "id_tx_observacao",
                  "value": "",
                  "description": "Id da observação",
                  "disabled": false
                }
              ]
            },
            "description": "Mesma regra de `txObservacao`. Grava e consulta observações (texto) ligadas a qualquer registro do sistema, identificado por tabela + id. GET por id_tx_observacao devolve uma; por tabela + id devolve a lista. DELETE desativa (ativo = N). A API não verifica se a tabela e o id existem e não restringe pelo escopo do acesso (só pelo app).\n\nPerfis: App.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"observacao\": \"Texto corrigido\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "DELETE vitreum/txObservacao — Desativa uma observação",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/terceiro/vitreum/txObservacao?id_tx_observacao=",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "terceiro",
                "vitreum",
                "txObservacao"
              ],
              "query": [
                {
                  "key": "id_tx_observacao",
                  "value": "",
                  "description": "Id da observação",
                  "disabled": false
                }
              ]
            },
            "description": "Mesma regra de `txObservacao`. Grava e consulta observações (texto) ligadas a qualquer registro do sistema, identificado por tabela + id. GET por id_tx_observacao devolve uma; por tabela + id devolve a lista. DELETE desativa (ativo = N). A API não verifica se a tabela e o id existem e não restringe pelo escopo do acesso (só pelo app).\n\nPerfis: App."
          }
        },
        {
          "name": "GET vitreum/txPessoa — Consulta uma pessoa",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/terceiro/vitreum/txPessoa?id_tx_pessoa=",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "terceiro",
                "vitreum",
                "txPessoa"
              ],
              "query": [
                {
                  "key": "id_tx_pessoa",
                  "value": "",
                  "description": "Id da pessoa",
                  "disabled": false
                }
              ]
            },
            "description": "Mesma regra de `txPessoa`. Devolve os dados cadastrais de uma pessoa (física ou jurídica) do app, por id_tx_pessoa ou CPF/CNPJ. Pessoa ligada a um cliente só é vista por quem tem acesso a esse cliente.\n\nPerfis: App, Rede, Filial, Pessoa."
          }
        },
        {
          "name": "GET vitreum/veiculo — Consulta um veículo",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/terceiro/vitreum/veiculo?id_veiculo=",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "terceiro",
                "vitreum",
                "veiculo"
              ],
              "query": [
                {
                  "key": "id_veiculo",
                  "value": "",
                  "description": "Id do veículo",
                  "disabled": false
                }
              ]
            },
            "description": "'compartimentos' só aparece se o veículo tiver compartimentos; cada compartimento lista só os níveis com cap_l > 0.\n\nPerfis: App, Rede, Filial, Cliente, Pessoa."
          }
        },
        {
          "name": "POST vitreum/veiculo — Cria um veículo",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/terceiro/vitreum/veiculo",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "terceiro",
                "vitreum",
                "veiculo"
              ],
              "query": []
            },
            "description": "Mesma regra de `veiculo`. Cadastro de veículos e carretas. Localiza o veículo por id_veiculo ou, se id_veiculo não vier, por placa. POST sempre cria (placa ou RENAVAM já cadastrados dão 'Dados já cadastrados'). PUT é parcial (só os campos enviados). DELETE desativa (ativo = N). O endpoint não restringe pelo escopo do acesso (cliente ou filial): vale só a permissão de acesso ao endpoint.\n\nPerfis: App, Rede, Filial, Cliente, Pessoa.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"placa\": \"ABC1D23\",\n  \"tipo\": \"CARRETA\",\n  \"renavam\": \"00000000000\",\n  \"ano_fabricacao\": \"2020\",\n  \"ano_modelo\": \"2021\",\n  \"estado\": \"PR\",\n  \"localidade\": \"CURITIBA\",\n  \"compartimentos\": [\n    {\n      \"compartimento\": 1,\n      \"lacres\": 2,\n      \"niveis\": [\n        {\n          \"nivel\": 1,\n          \"cap_l\": 15000,\n          \"ev_mm\": 120,\n          \"ec_mm\": 300,\n          \"et_mm\": 1500\n        }\n      ]\n    },\n    {\n      \"compartimento\": 2,\n      \"lacres\": 2,\n      \"niveis\": [\n        {\n          \"nivel\": 1,\n          \"cap_l\": 30000\n        }\n      ]\n    }\n  ],\n  \"licencas_ambientais\": [\n    {\n      \"estado\": \"PR\",\n      \"validade\": \"2027-06-30\"\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "PUT vitreum/veiculo — Altera um veículo (parcial)",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/terceiro/vitreum/veiculo?id_veiculo=",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "terceiro",
                "vitreum",
                "veiculo"
              ],
              "query": [
                {
                  "key": "id_veiculo",
                  "value": "",
                  "description": "Id do veículo",
                  "disabled": false
                }
              ]
            },
            "description": "Mesma regra de `veiculo`. Cadastro de veículos e carretas. Localiza o veículo por id_veiculo ou, se id_veiculo não vier, por placa. POST sempre cria (placa ou RENAVAM já cadastrados dão 'Dados já cadastrados'). PUT é parcial (só os campos enviados). DELETE desativa (ativo = N). O endpoint não restringe pelo escopo do acesso (cliente ou filial): vale só a permissão de acesso ao endpoint.\n\nPerfis: App, Rede, Filial, Cliente, Pessoa.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"validade_vistoria\": \"2027-05-10\",\n  \"compartimentos\": [\n    {\n      \"compartimento\": 2,\n      \"niveis\": [\n        {\n          \"nivel\": 1,\n          \"cap_l\": 0\n        }\n      ]\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "DELETE vitreum/veiculo — Desativa um veículo",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{base_url}}/v1/terceiro/vitreum/veiculo?id_veiculo=",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "v1",
                "terceiro",
                "vitreum",
                "veiculo"
              ],
              "query": [
                {
                  "key": "id_veiculo",
                  "value": "",
                  "description": "Id do veículo",
                  "disabled": false
                }
              ]
            },
            "description": "Mesma regra de `veiculo`. Cadastro de veículos e carretas. Localiza o veículo por id_veiculo ou, se id_veiculo não vier, por placa. POST sempre cria (placa ou RENAVAM já cadastrados dão 'Dados já cadastrados'). PUT é parcial (só os campos enviados). DELETE desativa (ativo = N). O endpoint não restringe pelo escopo do acesso (cliente ou filial): vale só a permissão de acesso ao endpoint.\n\nPerfis: App, Rede, Filial, Pessoa."
          }
        }
      ]
    }
  ]
}
