Pular para o conteúdo principal

Pricing Rules

Gerenciamento de regras de pricing com taxas, comissoes e seguros.

Endpoints

MétodoEndpointDescriçãoPermissão
POST/api/v1/pricing-rulesCriar pricing rulePRICING_RULES_CREATE
GET/api/v1/pricing-rulesListar pricing rulesPRICING_RULES_READ
GET/api/v1/pricing-rules/:idObter pricing rulePRICING_RULES_READ
PATCH/api/v1/pricing-rules/:idAtualizar pricing rulePRICING_RULES_UPDATE
DELETE/api/v1/pricing-rules/:idExcluir pricing rulePRICING_RULES_DELETE

Atributos Principais

CampoTipoObrigatórioDescrição
productIdstring (UUID)SimID do produto associado
namestringSimNome da regra
descriptionstringNãoDescrição da regra
ruleTypestringSimTipo: DB_RULE ou DECISION
statusstringNãoStatus: ACTIVE, INACTIVE, DRAFT
decisionProjectIdstring (UUID)NãoID do projeto de decisão (se ruleType=DECISION)
priorityintegerNãoPrioridade para ordenacao
minAmountnumberNãoValor mínimo do emprestimo
maxAmountnumberNãoValor máximo do emprestimo
minTermintegerNãoPrazo mínimo em meses
maxTermintegerNãoPrazo máximo em meses
effectiveFromdatetimeNãoData de inicio de vigencia
effectiveTodatetimeNãoData de fim de vigencia

Configurações de Taxas (Fees)

CampoTipoObrigatórioDescrição
feeTypestringSimTipo: REGISTRATION, ADMINISTRATION, ANALYSIS, DOCUMENTATION, OTHER
namestringSimNome da taxa
calculationMethodstringSimMétodo: FIXED, PERCENTAGE_OF_PRINCIPAL, PERCENTAGE_OF_TOTAL
valuenumberSimValor ou percentual
isFinancedbooleanNãoSe a taxa e financiada
isRefundablebooleanNãoSe a taxa e reembolsavel
minAmountnumberNãoValor mínimo da taxa
maxAmountnumberNãoValor máximo da taxa

Configurações de Comissoes

CampoTipoObrigatórioDescrição
commissionTypestringSimTipo: SALES, PARTNER, CHANNEL
namestringSimNome da comissao
percentagenumberSimPercentual (0-100)
fixedAmountnumberNãoValor fixo adicional
maxAmountnumberNãoValor máximo
paymentTimingstringNãoMomento do pagamento

Configurações de Seguros

CampoTipoObrigatórioDescrição
insuranceTypestringSimTipo: LIFE, DISABILITY, UNEMPLOYMENT, PROPERTY, COMBINED
namestringSimNome do seguro
monthlyRatenumberSimTaxa mensal (0-100)
isMandatorybooleanNãoSe o seguro e obrigatório
isFinancedbooleanNãoSe o premio e financiado
maxCoveragenumberNãoCobertura maxima

Criar Pricing Rule

POST /api/v1/pricing-rules

Cria uma nova regra de pricing.

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
}
]
}
}
}'

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âmetroTipoDescrição
page[number]integerNúmero da pagina
page[size]integerItens por pagina
productIdstringFiltrar por produto
statusstringFiltrar por status
ruleTypestringFiltrar por tipo de regra
curl 'https://pricing.stg.catalisa.app/api/v1/pricing-rules?status=ACTIVE' \
-H 'Authorization: Bearer SEU_TOKEN'

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 'https://pricing.stg.catalisa.app/api/v1/pricing-rules/550e8400-e29b-41d4-a716-446655440002' \
-H 'Authorization: Bearer SEU_TOKEN'

Atualizar Pricing Rule

PATCH /api/v1/pricing-rules/:id

Atualiza uma pricing rule existente.

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
}
}
}'

Excluir Pricing Rule

DELETE /api/v1/pricing-rules/:id

Remove uma pricing rule.

curl -X DELETE 'https://pricing.stg.catalisa.app/api/v1/pricing-rules/550e8400-e29b-41d4-a716-446655440002' \
-H 'Authorization: Bearer SEU_TOKEN'

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ódigoErroDescrição
400VALIDATIONCampos obrigatorios ausentes ou inválidos
404NOT_FOUNDPricing rule ou produto nao encontrado
409CONFLICTRegra com mesmo nome ja existe para o produto