Fontes de Dados
Configuração de fontes de dados externas (Data Sources) para enriquecer o contexto das decisões.
Endpoints
| Método | Endpoint | Descrição | Permissão |
|---|---|---|---|
| POST | /api/v1/decision-platform/configs/:configId/data-sources | Criar data source | DECISION_VERSIONS_CREATE |
| GET | /api/v1/decision-platform/configs/:configId/data-sources | Listar data sources | DECISION_VERSIONS_READ |
| GET | /api/v1/decision-platform/data-sources/:id | Obter data source | DECISION_VERSIONS_READ |
| PATCH | /api/v1/decision-platform/data-sources/:id | Atualizar data source | DECISION_VERSIONS_UPDATE |
| DELETE | /api/v1/decision-platform/data-sources/:id | Excluir data source | DECISION_VERSIONS_DELETE |
Atributos
| Campo | Tipo | Descrição |
|---|---|---|
configId | string (UUID) | ID da configuração pai |
name | string | Nome do data source |
type | enum | Tipo: S3, REDIS_STREAM, HTTP |
typeConfig | object | Configuração específica do tipo |
inputMapping | array | Mapeamento de campos para o input |
priority | number | Prioridade de execução (0-100) |
isRequired | boolean | Se é obrigatório para execução |
timeoutMs | number | Timeout em milissegundos |
createdAt | datetime | Data de criação |
updatedAt | datetime | Data da última atualização |
Tipos de Data Source
| Tipo | Descrição |
|---|---|
S3 | Leitura de arquivos no Amazon S3 |
REDIS_STREAM | Consumo de Redis Streams |
HTTP | Requisições HTTP/REST |
Criar Data Source HTTP
POST /api/v1/decision-platform/configs/:configId/data-sources
Cria um data source que faz requisições HTTP para enriquecer dados.
Configuração HTTP
| Campo | Tipo | Descrição |
|---|---|---|
url | string | URL do endpoint |
method | enum | GET ou POST |
headers | object | Headers da requisição |
body | object | Body para requisições POST |
pagination | object | Configuração de paginação |
- cURL
- JavaScript
curl -X POST 'https://decision-platform.stg.catalisa.app/api/v1/decision-platform/configs/550e8400-e29b-41d4-a716-446655440001/data-sources' \
-H 'Authorization: Bearer SEU_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"data": {
"type": "platform-data-sources",
"attributes": {
"name": "Consulta Serasa",
"type": "HTTP",
"typeConfig": {
"url": "https://api.serasa.com/v1/score",
"method": "POST",
"headers": {
"Authorization": "Bearer api-key-here",
"Content-Type": "application/json"
}
},
"inputMapping": [
{
"path": "$.score",
"targetField": "serasaScore",
"transform": "NONE"
},
{
"path": "$.restrictions",
"targetField": "hasRestrictions",
"transform": "FIRST",
"defaultValue": false
}
],
"priority": 10,
"isRequired": true,
"timeoutMs": 5000
}
}
}'
const configId = '550e8400-e29b-41d4-a716-446655440001';
const response = await fetch(`https://decision-platform.stg.catalisa.app/api/v1/decision-platform/configs/${configId}/data-sources`, {
method: 'POST',
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
data: {
type: 'platform-data-sources',
attributes: {
name: 'Consulta Serasa',
type: 'HTTP',
typeConfig: {
url: 'https://api.serasa.com/v1/score',
method: 'POST',
headers: {
'Authorization': 'Bearer api-key-here',
'Content-Type': 'application/json',
},
},
inputMapping: [
{
path: '$.score',
targetField: 'serasaScore',
transform: 'NONE',
},
{
path: '$.restrictions',
targetField: 'hasRestrictions',
transform: 'FIRST',
defaultValue: false,
},
],
priority: 10,
isRequired: true,
timeoutMs: 5000,
},
},
}),
});
const { data } = await response.json();
console.log(`Data source criado: ${data.id}`);
Response (201 Created)
{
"data": {
"type": "platform-data-sources",
"id": "550e8400-e29b-41d4-a716-446655440020",
"links": {
"self": "/api/v1/decision-platform/data-sources/550e8400-e29b-41d4-a716-446655440020"
},
"attributes": {
"configId": "550e8400-e29b-41d4-a716-446655440001",
"name": "Consulta Serasa",
"type": "HTTP",
"typeConfig": {
"url": "https://api.serasa.com/v1/score",
"method": "POST",
"headers": {
"Authorization": "Bearer api-key-here",
"Content-Type": "application/json"
}
},
"inputMapping": [
{
"path": "$.score",
"targetField": "serasaScore",
"transform": "NONE"
},
{
"path": "$.restrictions",
"targetField": "hasRestrictions",
"transform": "FIRST",
"defaultValue": false
}
],
"priority": 10,
"isRequired": true,
"timeoutMs": 5000,
"createdAt": "2024-01-15T10:30:00Z",
"updatedAt": "2024-01-15T10:30:00Z"
}
}
}
Criar Data Source S3
Cria um data source que lê arquivos do Amazon S3.
Configuração S3
| Campo | Tipo | Descrição |
|---|---|---|
bucket | string | Nome do bucket |
key | string | Caminho do arquivo |
format | enum | JSON ou PARQUET |
region | string | Região AWS (opcional) |
- cURL
curl -X POST 'https://decision-platform.stg.catalisa.app/api/v1/decision-platform/configs/550e8400-e29b-41d4-a716-446655440001/data-sources' \
-H 'Authorization: Bearer SEU_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"data": {
"type": "platform-data-sources",
"attributes": {
"name": "Tabela de Preços",
"type": "S3",
"typeConfig": {
"bucket": "catalisa-data",
"key": "pricing/rates.json",
"format": "JSON",
"region": "sa-east-1"
},
"inputMapping": [
{
"path": "$.rates",
"targetField": "pricingRates",
"transform": "NONE"
}
],
"priority": 5,
"isRequired": false,
"timeoutMs": 3000
}
}
}'
Criar Data Source Redis Stream
Cria um data source que consome dados de Redis Streams.
Configuração Redis Stream
| Campo | Tipo | Descrição |
|---|---|---|
streamName | string | Nome do stream |
consumerGroup | string | Nome do consumer group |
consumerName | string | Nome do consumer |
count | number | Quantidade de mensagens a ler |
startId | string | ID inicial (ex: 0-0, $) |
- cURL
curl -X POST 'https://decision-platform.stg.catalisa.app/api/v1/decision-platform/configs/550e8400-e29b-41d4-a716-446655440001/data-sources' \
-H 'Authorization: Bearer SEU_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"data": {
"type": "platform-data-sources",
"attributes": {
"name": "Eventos de Transação",
"type": "REDIS_STREAM",
"typeConfig": {
"streamName": "transactions:events",
"consumerGroup": "decision-platform",
"consumerName": "worker-1",
"count": 10,
"startId": "$"
},
"inputMapping": [
{
"path": "$.data.amount",
"targetField": "transactionAmount",
"transform": "LAST"
}
],
"priority": 0,
"isRequired": false,
"timeoutMs": 2000
}
}
}'
Mapeamento de Input
O inputMapping define como os dados do data source são mapeados para o input da decisão.
Campos do Mapeamento
| Campo | Tipo | Descrição |
|---|---|---|
path | string | JSONPath para extrair o dado |
targetField | string | Nome do campo no input |
transform | enum | Transformação a aplicar |
defaultValue | any | Valor padrão se não encontrar |
Transformações Disponíveis
| Transformação | Descrição |
|---|---|
NONE | Usa o valor como está |
FLATTEN | Achata arrays aninhados |
FIRST | Pega o primeiro elemento de um array |
LAST | Pega o último elemento de um array |
Listar Data Sources
GET /api/v1/decision-platform/configs/:configId/data-sources
- cURL
curl 'https://decision-platform.stg.catalisa.app/api/v1/decision-platform/configs/550e8400-e29b-41d4-a716-446655440001/data-sources?filter[type]=HTTP' \
-H 'Authorization: Bearer SEU_TOKEN'
Erros Comuns
| Código | Erro | Descrição |
|---|---|---|
| 400 | VALIDATION | Configuração inválida para o tipo |
| 400 | VALIDATION | Input mapping inválido |
| 404 | NOT_FOUND | Configuração ou data source não encontrado |
| 409 | CONFLICT | Nome já existe na configuração |