ContractPlus APIs | Consulta de modelos de aprovação
19 min
Criado por Eduardo Martins Dos Santos em 05/08/2026 09:54
Atualizado por Eduardo Martins Dos Santos em 05/08/2026 09:59

Objetivo

A API permite consultar todos os modelos de aprovação cadastrados no ContractPlus.

O retorno apresenta a estrutura completa de cada modelo, incluindo:

  • Empresa;

  • Local de aprovação;

  • Data de vigência;

  • Tipo do modelo;

  • Usuário responsável pelo cadastro;

  • Faixas de aprovação;

  • Sequências;

  • Aprovadores;

  • Configurações adicionais de cada nível.

A consulta pode ser utilizada para exibir os modelos cadastrados, localizar seus identificadores e fornecer os dados necessários para operações posteriores de edição, exclusão ou duplicação.


Aplicação da API

A API retorna os modelos configurados para os locais de aprovação disponíveis no ContractPlus.

PlaceId
Local de aprovação
0
Não Definido
1
Contrato
3
Medição
5
Aditivo do Contrato
6
Requisição de Compra
7
Cotação de Compra
8
Distrato do Contrato
9
Documentos da Medição
10
Alteração Contratual

O local ao qual cada modelo pertence é identificado pelos campos PlaceId e PlaceEnum.


Endpoint

GET /api/approvalPattern

Autenticação

A requisição exige um token de autenticação válido.

O token deve ser enviado no cabeçalho:

Authorization: Bearer {{token}}

Quando a requisição for enviada sem autenticação válida, o comportamento esperado é:

401 Unauthorized

Nenhum dado dos modelos de aprovação deverá ser retornado.


Cabeçalhos

Accept: application/json
Authorization: Bearer {{token}}

Como se trata de uma operação de consulta, não é necessário enviar um corpo na requisição.


Parâmetros

O endpoint não utiliza parâmetros de rota, query string ou corpo.

Exemplo:

GET /api/approvalPattern

A resposta contém todos os modelos de aprovação cadastrados e disponíveis para o usuário autenticado.


Como realizar a consulta

  1. Utilize o método GET.

  2. Informe a URL:

/api/approvalPattern
  1. Envie um token Bearer válido no cabeçalho.

  2. Execute a requisição.

  3. Analise o array retornado.

Não deve ser enviado conteúdo no corpo da requisição.

Observação sobre desempenho: a consulta retorna todos os modelos de aprovação cadastrados, incluindo suas faixas, níveis e aprovadores. Por esse motivo, o tempo de resposta pode variar conforme a quantidade e a complexidade dos modelos existentes na base consultada.


Resposta de sucesso

Status esperado

200 OK

Tipo do retorno

A resposta é um array JSON.

Cada item do array representa um modelo de aprovação cadastrado.

[
  {
    "Id": 2,
    "CompanyId": 1,
    "PlaceId": 3,
    "IsAuto": false,
    "HasRange": false,
    "HasQuery": false,
    "HasSeq": false,
    "EffectiveDate": "2023-09-04T13:57:13.637",
    "UserName": "leandro.melo",
    "PlaceEnum": 3,
    "Ranges": [
      {
        "Id": 2,
        "PatternId": 2,
        "AnyValue": 1,
        "InitialValue": 0.0,
        "EndValue": 0.0,
        "ApprovalLevels": [
          {
            "Id": 2,
            "RangeId": 2,
            "SeqId": 1,
            "UseSignProvider": 0,
            "Name": "Nível de Aprovação Padrão",
            "Approvers": [
              {
                "Id": 6,
                "SequenceId": 2,
                "UserName": "manager",
                "USER_CODE": "manager",
                "U_NAME": "manager"
              }
            ],
            "ApproveLowerSequences": false
          }
        ],
        "ApprovalRangeTypeId": 0,
        "ContractTypeId": 0,
        "ApprovalByQuery": false,
        "ApprovalRangeTypeEnum": 0,
        "ContractTypeEnum": 0
      }
    ]
  }
]

Nos testes, o endpoint retornou status 200, resposta no formato de array e a estrutura completa dos modelos cadastrados.


Estrutura do modelo

Campos principais

Campo
Tipo
Descrição
Id
Inteiro
Identificador do modelo de aprovação.
CompanyId
Inteiro
Identificador da empresa vinculada ao modelo.
PlaceId
Inteiro
Identificador do local de aprovação.
IsAuto
Booleano
Indica se o modelo possui aprovação automática.
HasRange
Booleano
Indica se o modelo utiliza intervalos de valores.
HasQuery
Booleano
Indica se o modelo utiliza uma consulta condicional.
HasSeq
Booleano
Indica se o modelo utiliza sequências de aprovação.
EffectiveDate
Data e hora
Data de início da vigência do modelo.
UserName
Texto
Usuário responsável pelo cadastro do modelo.
PlaceEnum
Inteiro
Valor enumerado correspondente ao local de aprovação.
Ranges
Array
Faixas, condições e sequências vinculadas ao modelo.

Identificador do modelo

O campo Id representa o identificador principal do modelo.

Exemplo:

{
  "Id": 605
}

Esse identificador pode ser utilizado em operações posteriores, como:

  • Edição;

  • Exclusão;

  • Duplicação;

  • Consulta de consistência após uma criação ou alteração.


Flags do modelo

Os campos abaixo identificam o tipo de funcionamento do modelo:

Campo
Quando estiver true
IsAuto
O modelo utiliza aprovação automática.
HasRange
O modelo possui intervalos de valores.
HasQuery
O modelo utiliza uma consulta para determinar o fluxo.
HasSeq
O modelo possui níveis ou sequências de aprovação.

Essas flags permitem identificar como a estrutura do modelo foi configurada.


Data de vigência

O campo EffectiveDate apresenta a data e a hora de início da vigência.

Exemplo:

{
  "EffectiveDate": "2023-09-04T13:57:13.637"
}

Quando necessário, a aplicação consumidora poderá formatar o valor para exibir somente a data.


Estrutura de faixas

O array Ranges contém as faixas e condições vinculadas ao modelo.

{
  "Ranges": [
    {
      "Id": 2,
      "PatternId": 2,
      "AnyValue": 1,
      "InitialValue": 0.0,
      "EndValue": 0.0,
      "ApprovalLevels": [],
      "ApprovalRangeTypeId": 0,
      "ContractTypeId": 0,
      "ApprovalByQuery": false,
      "ApprovalRangeTypeEnum": 0,
      "ContractTypeEnum": 0
    }
  ]
}

Campos da faixa

Campo
Tipo
Descrição
Id
Inteiro
Identificador da faixa.
PatternId
Inteiro
Identificador do modelo ao qual a faixa pertence.
AnyValue
Inteiro
Indica se a faixa considera qualquer valor.
InitialValue
Decimal
Valor inicial da faixa.
EndValue
Decimal
Valor final da faixa.
ApprovalLevels
Array
Níveis de aprovação vinculados à faixa.
ApprovalRangeTypeId
Inteiro
Identificador do comportamento da faixa.
ContractTypeId
Inteiro
Identificador do tipo de contrato relacionado.
ApprovalByQuery
Booleano
Indica se a faixa utiliza consulta.
ApprovalRangeTypeEnum
Inteiro
Valor enumerado do comportamento da faixa.
ContractTypeEnum
Inteiro
Valor enumerado do tipo de contrato.

Tipo da faixa

O campo ApprovalRangeTypeId identifica o comportamento configurado para a faixa.

Valor
Comportamento
0
Encaminhar para sequência de aprovação
1
Aprovar automaticamente
2
Reprovar automaticamente

Faixa para qualquer valor

Quando AnyValue indicar que qualquer valor deve ser considerado, os campos InitialValue e EndValue não representam um intervalo restritivo.

Exemplo:

{
  "AnyValue": 1,
  "InitialValue": 0.0,
  "EndValue": 0.0
}

Quando a faixa não for configurada para qualquer valor, os campos inicial e final devem ser utilizados para identificar o intervalo aplicável.


Estrutura dos níveis de aprovação

O array ApprovalLevels contém os níveis ou sequências cadastrados para a faixa.

{
  "ApprovalLevels": [
    {
      "Id": 2,
      "RangeId": 2,
      "SeqId": 1,
      "UseSignProvider": 0,
      "Name": "Nível de Aprovação Padrão",
      "Approvers": [],
      "ApproveLowerSequences": false
    }
  ]
}

Campos do nível

Campo
Tipo
Descrição
Id
Inteiro
Identificador interno do nível de aprovação.
RangeId
Inteiro
Identificador da faixa à qual o nível pertence.
SeqId
Inteiro
Número ou identificador da sequência.
UseSignProvider
Inteiro
Indica a utilização de provedor de assinatura.
Name
Texto
Descrição do nível de aprovação.
Approvers
Array
Usuários aprovadores vinculados ao nível.
ApproveLowerSequences
Booleano
Indica se o nível permite aprovar sequências inferiores.

Estrutura dos aprovadores

O array Approvers contém os usuários vinculados ao nível de aprovação.

{
  "Approvers": [
    {
      "Id": 6,
      "SequenceId": 2,
      "UserName": "manager",
      "USER_CODE": "manager",
      "U_NAME": "manager"
    }
  ]
}

Campos do aprovador

Campo
Tipo
Descrição
Id
Inteiro
Identificador do vínculo do aprovador.
SequenceId
Inteiro
Identificador do nível ou sequência.
UserName
Texto
Nome de usuário utilizado pelo ContractPlus.
USER_CODE
Texto
Código do usuário no SAP Business One.
U_NAME
Texto
Nome apresentado para o usuário no SAP Business One.

Um nível pode possuir um ou vários aprovadores.


Modelos por consulta

Quando o modelo utilizar consulta, o campo:

{
  "HasQuery": true
}

indicará que sua lógica depende de uma instrução SQL.

Na criação e na edição do modelo, a consulta deve ser enviada em Base64, devido às limitações de compatibilidade existentes no envio de consultas em seu formato original.

O relatório de testes utilizado como base não apresenta, no exemplo do GET, um campo contendo o conteúdo da consulta. Por isso, não é possível afirmar por esse material se a consulta será retornada codificada, decodificada ou se não será incluída na resposta.


Consulta sem registros

Quando não existirem modelos cadastrados, o comportamento esperado é:

200 OK

Com um array vazio:

[]

A ausência de registros não deve ser tratada como erro.

Esse cenário consta no relatório como planejado, mas foi marcado como ignorado naquele ciclo de testes. Portanto, o array vazio representa o comportamento esperado da API.


Operação somente leitura

O endpoint realiza apenas uma consulta.

A execução não deve:

  • Criar modelos;

  • Alterar modelos;

  • Excluir faixas;

  • Modificar sequências;

  • Alterar aprovadores;

  • Atualizar datas de vigência;

  • Produzir qualquer mudança na base.

Nos testes, o estado anterior e posterior à execução foi comparado, sem identificação de alterações provocadas pelo endpoint.


Consistência dos relacionamentos

Os identificadores retornados devem manter a relação entre as estruturas.

Exemplo:

{
  "Id": 2,
  "Ranges": [
    {
      "PatternId": 2,
      "ApprovalLevels": [
        {
          "RangeId": 2,
          "Approvers": [
            {
              "SequenceId": 2
            }
          ]
        }
      ]
    }
  ]
}

A estrutura deve respeitar os seguintes vínculos:

  • Ranges[].PatternId deve corresponder ao modelo relacionado;

  • ApprovalLevels[].RangeId deve corresponder à faixa relacionada;

  • Approvers[].SequenceId deve corresponder ao nível relacionado.

Essa consistência permite reutilizar os dados retornados em outras operações da API.


Respostas esperadas

Situação
Status
Retorno
Consulta realizada com registros
200
Array com os modelos cadastrados
Consulta realizada sem registros
200
Array vazio
Token ausente ou inválido
401
Erro de autenticação, sem dados dos modelos
Erro interno durante a consulta
500
Erro interno da API

O relatório fornecido confirma os cenários de sucesso, estrutura do retorno, consistência e comportamento somente leitura.


Pontos de atenção

  • A resposta deve ser tratada como um array.

  • Um retorno vazio não representa falha.

  • O endpoint não utiliza corpo na requisição.

  • O token Bearer é obrigatório.

  • O campo Id identifica o modelo e pode ser reutilizado em outros endpoints.

  • O campo PlaceId identifica o processo ao qual o modelo pertence.

  • Ranges pode conter uma ou várias faixas.

  • ApprovalLevels pode conter um ou vários níveis.

  • Approvers pode conter um ou vários usuários.

  • Os relacionamentos entre modelo, faixa, sequência e aprovador devem ser preservados.

  • A consulta não deve alterar nenhuma informação na base.

  • As datas são retornadas com data e hora.

  • Os nomes das propriedades retornadas utilizam inicial maiúscula, como CompanyId, EffectiveDate e Ranges.

  • Modelos que utilizam consulta são identificados por HasQuery.

  • O tempo de resposta pode variar conforme a quantidade de modelos de aprovação cadastrados na base.

  • Bases com grande volume de faixas, níveis e aprovadores podem exigir mais tempo para concluir a consulta.

  • A aplicação consumidora deve considerar esse comportamento ao definir timeout e indicador de carregamento.

Este artigo foi útil para você?
Últimos artigos visitados