Título
A API de Upload de Financiamento de Projetos (V3) é utilizada para criar entradas em massa de itens de financiamento de projetos.
Descrição
A API de Financiamento de Projetos permite o upload programático e o gerenciamento de registros de financiamento de projetos no Fluid. Ela suporta o upload em massa de entradas de financiamento de projetos por meio de uma API JSON RESTful.
Os itens de financiamento de projetos representam o orçamento alocado para um projeto, opcionalmente dividido por ano fiscal e categoria de despesa. Cada registro armazena o valor do financiamento em moeda local, moeda padrão (convertida) e moeda reapresentada (se configurada). Quando o ano fiscal é omitido, o registro é tratado como uma entrada de financiamento Life-to-Date (projeto completo).
Permissão Necessária
As seguintes funções do Fluid são necessárias para usar esta API:
Função | Descrição |
|---|---|
Administrador Financeiro (ou App Admin) | Necessário para criar ou atualizar o financiamento de projetos. O recurso |
Usuário | Função base necessária para todo acesso à API. |
Endpoints
Método | URL | Content-Type |
|---|---|---|
POST |
|
|
Corpo da Requisição
Cada requisição é tratada como o snapshot completo de financiamento para todos os projetos que ela contém. Ao ser enviada, as linhas existentes para esses projetos são substituídas pelas linhas no payload.
Para resultados precisos e previsíveis:
Envie o financiamento completo de cada projeto em uma única requisição — inclua todos os anos fiscais, categorias de despesa e a entrada do projeto completo (Life-to-Date). Qualquer item omitido será removido.
Use o endpoint bulk (
POST /rest/api/projectfunding/bulk) — ele é dimensionado para conter o histórico completo de financiamento de um projeto em uma única chamada.Combine múltiplos projetos em uma única requisição quando conveniente. Cada projeto é processado de forma independente, portanto projetos não relacionados não são afetados.
Dica: Trate cada chamada como "este é o quadro completo de financiamento do projeto X", não como "adicionar estas linhas ao projeto X".
Exemplo
Requisição bulk única contendo o conjunto completo de financiamento para MM1000 (três linhas de AF + uma linha Life-to-Date):
[
{
"fields": {
"projectRef": "MM1000",
"fiscalYear": 2024,
"expenseCategory": "Resource Cost",
"amount": 50000
}
},
{
"fields": {
"projectRef": "MM1000",
"fiscalYear": 2024,
"expenseCategory": "Non-resource Cost",
"amount": 20000
}
},
{
"fields": {
"projectRef": "MM1000",
"fiscalYear": 2025,
"expenseCategory": "Resource Cost",
"amount": 70000
}
},
{
"fields": {
"projectRef": "MM1000",
"expenseCategory": "Resource Cost",
"amount": 120000
}
}
]
Se MM1000 for dividido em duas chamadas, o payload da segunda chamada se torna o novo estado para MM1000 — as linhas enviadas na primeira chamada não são mais mantidas.
Tipo
Array JSON para criação em massa.
Referência Completa de Campos
Campo | Tipo | Obrigatório? | Descrição |
|---|---|---|---|
| string | Condicional | Referência externa do projeto (ex.: |
| integer | Condicional | ID principal inteiro do projeto. Pelo menos um entre |
| string | Condicional | GUID do projeto (ex.: |
| integer | Não | O ano fiscal para esta entrada de financiamento (ex.: |
| string | Não | A categoria de despesa para o financiamento (ex.: |
| string | Não | Código de moeda ISO para a moeda local (ex.: |
| decimal | Sim | O valor total do financiamento em moeda local. Um valor de |
| decimal | Não | Parcela de despesas de capital do financiamento em moeda local. Se tanto |
| decimal | Não | Parcela de despesas operacionais do financiamento em moeda local. Se tanto |
Propriedades Personalizadas
NOTA: Propriedades personalizadas atualmente não são suportadas para registros de financiamento de projetos por meio desta API.
Exemplos de Requisições
Requisição de Criação em Massa
POST {rooturl}/rest/api/projectfunding/bulk
Content-Type: application/json
[
{
"Fields": {
"ProjectRef": "MM1000",
"FiscalYear": 2024,
"ExpenseCategory": "Non-resource Cost",
"Amount": 50000.00
}
},
{
"Fields": {
"ProjectRef": "MM1000",
"FiscalYear": 2025,
"ExpenseCategory": "Non-resource Cost",
"Amount": 60000.00
}
},
{
"Fields": {
"ProjectRef": "HD1000",
"FiscalYear": 2024,
"ExpenseCategory": "Resource Cost",
"Amount": 80000.00,
"Capex": 20000.00,
"Opex": 60000.00
}
}
]
Resposta
Resposta de Criação em Massa
Retorna um BulkProjectFundingResponseModel com:
Campo | Tipo | Descrição |
|---|---|---|
| string | Status geral: |
| integer | Número total de registros enviados. |
| integer | Número de registros processados com sucesso. |
| integer | Número de registros que falharam na validação ou no processamento. |
| string | ID de correlação único para rastreamento desta solicitação. |
| array | Resultados por linha, ordenados por |
Exemplo de Resposta em Massa (Sucesso Parcial)
{
"Status": "partial",
"TotalCount": 3,
"ValidCount": 2,
"InvalidCount": 1,
"CorrelationId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"Results": [
{
"Fields": {
"IsValid": true,
"Status": "valid",
"RowIndex": 1,
"ValidationMessages": []
}
},
{
"Fields": {
"IsValid": true,
"Status": "valid",
"RowIndex": 2,
"ValidationMessages": []
}
},
{
"Fields": {
"IsValid": false,
"Status": "invalid",
"RowIndex": 3,
"ValidationMessages": [
"This row was skipped as no projects could be found with ProjectRef specified in the file."
]
}
}
]
}
Regras de Validação
Identificador do Projeto: Pelo menos um dos campos
ProjectRef,ProjectIdouProjectGuiddeve ser fornecido. O projeto deve existir no banco de dados do Fluid.Valor: O campo
Amounté obrigatório. Um valor de0removerá o registro de financiamento do ano fiscal existente para aquela combinação de projeto e categoria de despesa.ExpenseCategory: Opcional. O carregador original de upload em Excel tratava este campo como opcional, e a API V3 preserva esse comportamento para paridade.
Código de Moeda: Opcional. O Código de Moeda é padronizado para a moeda do sistema quando não fornecido, e é ignorado quando nenhuma Moeda Secundária está definida no sistema Fluid.
FiscalYear: Opcional. Se omitido ou
null, o registro é tratado como uma entrada de financiamento Life-to-Date / projeto completo.Capex e Opex: Ambos opcionais. Se nenhum for fornecido (ou ambos forem
0), o valor total deAmounté aplicado aoOpex.Tratamento de Duplicatas: Se já existir um registro para o mesmo projeto, ano fiscal e categoria de despesa, ele será atualizado (caso contrário, um novo registro será criado). O conjunto completo de registros para uma determinada combinação de projeto + ano fiscal é substituído a cada upload.
Geração Automática do Ano Completo: Se existirem registros de ano fiscal, mas nenhum registro Life-to-Date explícito for fornecido, um registro de resumo do ano completo é gerado automaticamente pela soma de todos os registros de ano fiscal por projeto e categoria de despesa.
Códigos de Status HTTP
Código | Descrição |
|---|---|
200 OK | Solicitação processada. Verifique o campo |
400 Bad Request | O corpo da solicitação está malformado ou faltam campos obrigatórios. |
401 Unauthorized | O chamador não está autenticado. |
403 Forbidden | O recurso |
429 Too Many Requests | Limite de taxa excedido. Consulte os cabeçalhos de resposta |
500 Internal Server Error | Ocorreu um erro inesperado durante o processamento. |
Limites de Taxa
Endpoint | Solicitações | Janela |
|---|---|---|
| 100 | 10 segundos |