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
Utilize o método
GET.Informe a URL:
/api/approvalPattern
Envie um token Bearer válido no cabeçalho.
Execute a requisição.
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[].PatternIddeve corresponder ao modelo relacionado;ApprovalLevels[].RangeIddeve corresponder à faixa relacionada;Approvers[].SequenceIddeve 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
Ididentifica o modelo e pode ser reutilizado em outros endpoints.O campo
PlaceIdidentifica o processo ao qual o modelo pertence.Rangespode conter uma ou várias faixas.ApprovalLevelspode conter um ou vários níveis.Approverspode 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,EffectiveDateeRanges.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.