Pricing Rules
Gerenciamento de regras de pricing com taxas, comissoes e seguros.
Endpoints
| Método | Endpoint | Descrição | Permissão |
|---|---|---|---|
| POST | /api/v1/pricing-rules | Criar pricing rule | PRICING_RULES_CREATE |
| GET | /api/v1/pricing-rules | Listar pricing rules | PRICING_RULES_READ |
| GET | /api/v1/pricing-rules/:id | Obter pricing rule | PRICING_RULES_READ |
| PATCH | /api/v1/pricing-rules/:id | Atualizar pricing rule | PRICING_RULES_UPDATE |
| DELETE | /api/v1/pricing-rules/:id | Excluir pricing rule | PRICING_RULES_DELETE |
Atributos Principais
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
productId | string (UUID) | Sim | ID do produto associado |
name | string | Sim | Nome da regra |
description | string | Não | Descrição da regra |
ruleType | string | Sim | Tipo: DB_RULE ou DECISION |
status | string | Não | Status: ACTIVE, INACTIVE, DRAFT |
decisionProjectId | string (UUID) | Não | ID do projeto de decisão (se ruleType=DECISION) |
priority | integer | Não | Prioridade para ordenacao |
minAmount | number | Não | Valor mínimo do emprestimo |
maxAmount | number | Não | Valor máximo do emprestimo |
minTerm | integer | Não | Prazo mínimo em meses |
maxTerm | integer | Não | Prazo máximo em meses |
effectiveFrom | datetime | Não | Data de inicio de vigencia |
effectiveTo | datetime | Não | Data de fim de vigencia |
Configurações de Taxas (Fees)
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
feeType | string | Sim | Tipo: REGISTRATION, ADMINISTRATION, ANALYSIS, DOCUMENTATION, OTHER |
name | string | Sim | Nome da taxa |
calculationMethod | string | Sim | Método: FIXED, PERCENTAGE_OF_PRINCIPAL, PERCENTAGE_OF_TOTAL |
value | number | Sim | Valor ou percentual |
isFinanced | boolean | Não | Se a taxa e financiada |
isRefundable | boolean | Não | Se a taxa e reembolsavel |
minAmount | number | Não | Valor mínimo da taxa |
maxAmount | number | Não | Valor máximo da taxa |
Configurações de Comissoes
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
commissionType | string | Sim | Tipo: SALES, PARTNER, CHANNEL |
name | string | Sim | Nome da comissao |
percentage | number | Sim | Percentual (0-100) |
fixedAmount | number | Não | Valor fixo adicional |
maxAmount | number | Não | Valor máximo |
paymentTiming | string | Não | Momento do pagamento |
Configurações de Seguros
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
insuranceType | string | Sim | Tipo: LIFE, DISABILITY, UNEMPLOYMENT, PROPERTY, COMBINED |
name | string | Sim | Nome do seguro |
monthlyRate | number | Sim | Taxa mensal (0-100) |
isMandatory | boolean | Não | Se o seguro e obrigatório |
isFinanced | boolean | Não | Se o premio e financiado |
maxCoverage | number | Não | Cobertura maxima |
Criar Pricing Rule
POST /api/v1/pricing-rules
Cria uma nova regra de pricing.
- cURL
- JavaScript
curl -X POST 'https://pricing.stg.catalisa.app/api/v1/pricing-rules' \
-H 'Authorization: Bearer SEU_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"data": {
"type": "pricing-rules",
"attributes": {
"productId": "550e8400-e29b-41d4-a716-446655440000",
"name": "Standard Personal Loan",
"description": "Regra padrão para emprestimo pessoal",
"ruleType": "DB_RULE",
"status": "ACTIVE",
"minAmount": 1000,
"maxAmount": 50000,
"minTerm": 6,
"maxTerm": 48,
"fees": [
{
"feeType": "REGISTRATION",
"name": "Taxa de Cadastro",
"calculationMethod": "FIXED",
"value": 150.00,
"isFinanced": true
},
{
"feeType": "ANALYSIS",
"name": "Taxa de Analise",
"calculationMethod": "PERCENTAGE_OF_PRINCIPAL",
"value": 2.5,
"minAmount": 50,
"maxAmount": 500
}
],
"commissions": [
{
"commissionType": "SALES",
"name": "Comissao Vendedor",
"percentage": 1.5
}
],
"insurances": [
{
"insuranceType": "LIFE",
"name": "Seguro Prestamista",
"monthlyRate": 0.05,
"isMandatory": true,
"isFinanced": true
}
]
}
}
}'
const response = await fetch('https://pricing.stg.catalisa.app/api/v1/pricing-rules', {
method: 'POST',
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
data: {
type: 'pricing-rules',
attributes: {
productId: '550e8400-e29b-41d4-a716-446655440000',
name: 'Standard Personal Loan',
description: 'Regra padrão para emprestimo pessoal',
ruleType: 'DB_RULE',
status: 'ACTIVE',
minAmount: 1000,
maxAmount: 50000,
minTerm: 6,
maxTerm: 48,
fees: [
{
feeType: 'REGISTRATION',
name: 'Taxa de Cadastro',
calculationMethod: 'FIXED',
value: 150.00,
isFinanced: true,
},
],
insurances: [
{
insuranceType: 'LIFE',
name: 'Seguro Prestamista',
monthlyRate: 0.05,
isMandatory: true,
},
],
},
},
}),
});
const { data } = await response.json();
Response (201 Created)
{
"data": {
"type": "pricing-rules",
"id": "550e8400-e29b-41d4-a716-446655440002",
"attributes": {
"productId": "550e8400-e29b-41d4-a716-446655440000",
"name": "Standard Personal Loan",
"description": "Regra padrão para emprestimo pessoal",
"ruleType": "DB_RULE",
"status": "ACTIVE",
"minAmount": 1000,
"maxAmount": 50000,
"minTerm": 6,
"maxTerm": 48,
"fees": [
{
"feeType": "REGISTRATION",
"name": "Taxa de Cadastro",
"calculationMethod": "FIXED",
"value": 150.00,
"isFinanced": true
}
],
"insurances": [
{
"insuranceType": "LIFE",
"name": "Seguro Prestamista",
"monthlyRate": 0.05,
"isMandatory": true
}
],
"createdAt": "2024-01-15T10:30:00Z",
"updatedAt": "2024-01-15T10:30:00Z"
},
"links": {
"self": "/api/v1/pricing-rules/550e8400-e29b-41d4-a716-446655440002"
}
}
}
Listar Pricing Rules
GET /api/v1/pricing-rules
Lista pricing rules com suporte a paginação e filtros.
Query Parameters
| Parâmetro | Tipo | Descrição |
|---|---|---|
page[number] | integer | Número da pagina |
page[size] | integer | Itens por pagina |
productId | string | Filtrar por produto |
status | string | Filtrar por status |
ruleType | string | Filtrar por tipo de regra |
- cURL
- JavaScript
curl 'https://pricing.stg.catalisa.app/api/v1/pricing-rules?status=ACTIVE' \
-H 'Authorization: Bearer SEU_TOKEN'
const params = new URLSearchParams({
status: 'ACTIVE',
});
const response = await fetch(`https://pricing.stg.catalisa.app/api/v1/pricing-rules?${params}`, {
headers: {
'Authorization': `Bearer ${token}`,
},
});
const { data, meta, links } = await response.json();
Response (200 OK)
{
"data": [
{
"type": "pricing-rules",
"id": "550e8400-e29b-41d4-a716-446655440002",
"attributes": {
"productId": "550e8400-e29b-41d4-a716-446655440000",
"name": "Standard Personal Loan",
"ruleType": "DB_RULE",
"status": "ACTIVE"
}
}
],
"meta": {
"totalItems": 5,
"totalPages": 1,
"currentPage": 1
}
}
Obter Pricing Rule
GET /api/v1/pricing-rules/:id
Obtém detalhes de uma pricing rule específica.
- cURL
- JavaScript
curl 'https://pricing.stg.catalisa.app/api/v1/pricing-rules/550e8400-e29b-41d4-a716-446655440002' \
-H 'Authorization: Bearer SEU_TOKEN'
const id = '550e8400-e29b-41d4-a716-446655440002';
const response = await fetch(`https://pricing.stg.catalisa.app/api/v1/pricing-rules/${id}`, {
headers: {
'Authorization': `Bearer ${token}`,
},
});
const { data } = await response.json();
Atualizar Pricing Rule
PATCH /api/v1/pricing-rules/:id
Atualiza uma pricing rule existente.
- cURL
- JavaScript
curl -X PATCH 'https://pricing.stg.catalisa.app/api/v1/pricing-rules/550e8400-e29b-41d4-a716-446655440002' \
-H 'Authorization: Bearer SEU_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"data": {
"type": "pricing-rules",
"id": "550e8400-e29b-41d4-a716-446655440002",
"attributes": {
"status": "INACTIVE",
"maxAmount": 75000
}
}
}'
const id = '550e8400-e29b-41d4-a716-446655440002';
const response = await fetch(`https://pricing.stg.catalisa.app/api/v1/pricing-rules/${id}`, {
method: 'PATCH',
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
data: {
type: 'pricing-rules',
id,
attributes: {
status: 'INACTIVE',
maxAmount: 75000,
},
},
}),
});
Excluir Pricing Rule
DELETE /api/v1/pricing-rules/:id
Remove uma pricing rule.
- cURL
- JavaScript
curl -X DELETE 'https://pricing.stg.catalisa.app/api/v1/pricing-rules/550e8400-e29b-41d4-a716-446655440002' \
-H 'Authorization: Bearer SEU_TOKEN'
const id = '550e8400-e29b-41d4-a716-446655440002';
const response = await fetch(`https://pricing.stg.catalisa.app/api/v1/pricing-rules/${id}`, {
method: 'DELETE',
headers: {
'Authorization': `Bearer ${token}`,
},
});
// Status 204 No Content = sucesso
Response (204 No Content)
Sem corpo de resposta.
Regra com Integração Decision Engine
Para regras complexas, use ruleType: "DECISION" e aponte para um projeto no Decision Engine:
const response = await fetch('https://pricing.stg.catalisa.app/api/v1/pricing-rules', {
method: 'POST',
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
data: {
type: 'pricing-rules',
attributes: {
productId: 'product-uuid',
name: 'Dynamic Pricing Rule',
ruleType: 'DECISION',
status: 'ACTIVE',
decisionProjectId: 'decision-project-uuid',
},
},
}),
});
Neste caso, o calculo de pricing invocara o Decision Engine para determinar taxas dinamicas.
Erros Comuns
| Código | Erro | Descrição |
|---|---|---|
| 400 | VALIDATION | Campos obrigatorios ausentes ou inválidos |
| 404 | NOT_FOUND | Pricing rule ou produto nao encontrado |
| 409 | CONFLICT | Regra com mesmo nome ja existe para o produto |