Project Funding

Financiamiento de proyecto

Título

La API de carga de financiamiento de proyecto (V3) se utiliza para crear entradas masivas de elementos de financiamiento de proyecto.

Descripción

La API de financiamiento de proyecto permite la carga programática y la gestión de registros de financiamiento de proyecto en Fluid. Admite la carga masiva de entradas de financiamiento de proyecto mediante una API JSON RESTful.

Los elementos de financiamiento de proyecto representan el presupuesto asignado a un proyecto, desglosado opcionalmente por año fiscal y categoría de gasto. Cada registro almacena el monto de financiamiento en moneda local, moneda predeterminada (convertida) y moneda reexpresada (si está configurada). Cuando se omite el año fiscal, el registro se trata como una entrada de financiamiento Life-to-Date (proyecto completo).

Permiso requerido

Se requieren las siguientes funciones de Fluid para usar esta API:

Rol

Descripción

Administrador financiero (o App Admin)

Necesario para crear o actualizar el financiamiento de proyecto. La función Show Project Financials debe estar activa y el usuario debe tener Financial Administrator o AppAdmin. Los usuarios sin esta combinación reciben una respuesta 403 Forbidden.

Usuario

Rol base requerido para todo acceso a la API.

Endpoints

Método

URL

Content-Type

POST

{rooturl}/rest/api/projectfunding/bulk

application/json

Cuerpo de la solicitud

Cada solicitud se trata como la instantánea completa de financiamiento para todos los proyectos que contiene. Al enviarla, las filas existentes para esos proyectos se reemplazan por las filas del payload.

Para obtener resultados precisos y predecibles:

  • Envíe el financiamiento completo de cada proyecto en una sola solicitud — incluya todos los años fiscales, categorías de gasto y la entrada del proyecto completo (Life-to-Date). Todo lo que se omita será eliminado.

  • Use el endpoint bulk (POST /rest/api/projectfunding/bulk) — está dimensionado para contener el historial completo de financiamiento de un proyecto en una sola llamada.

  • Combine varios proyectos en una sola solicitud cuando sea conveniente. Cada proyecto se procesa de forma independiente, por lo que los proyectos no relacionados no se ven afectados.

Consejo: Trate cada llamada como "este es el panorama completo de financiamiento del proyecto X", no como "agregar estas filas al proyecto X".

Ejemplo

Solicitud bulk única que contiene el conjunto completo de financiamiento para MM1000 (tres filas de año fiscal + una fila 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
    }
  }
]

Si MM1000 se divide entre dos llamadas, el payload de la segunda llamada se convierte en el nuevo estado de MM1000 — las filas enviadas en la primera llamada ya no se conservan.

Tipo

Arreglo JSON para creación masiva.

Referencia completa de campos

Campo

Tipo

¿Requerido?

Descripción

projectRef

string

Condicional

Referencia externa del proyecto (por ejemplo, "MM1000"). Se requiere al menos uno de projectRef, projectId o projectGuid.

projectId

integer

Condicional

ID principal entero del proyecto. Se requiere al menos uno de projectRef, projectId o projectGuid.

projectGuid

string

Condicional

GUID del proyecto (por ejemplo, "873a0b87-f71c-43a0-b45a-25a1152b6ff1"). Se requiere al menos uno de projectRef, projectId o projectGuid.

fiscalYear

integer

No

El año fiscal de esta entrada de financiamiento (por ejemplo, 2024). Si se omite o es null, el registro se trata como una entrada de financiamiento Life-to-Date / proyecto completo.

expenseCategory

string

No

La categoría de gasto del financiamiento (por ejemplo, "Non-resource Cost"). Si se proporciona, debe coincidir con una categoría de gasto válida configurada en Fluid.

localCurrencyCode

string

No

Código de moneda ISO para la moneda local (por ejemplo, "USD", "GBP"). Si se omite, se usa de forma predeterminada la moneda del sistema.

amount

decimal

El monto total de financiamiento en moneda local. Un valor de 0 eliminará el registro de financiamiento del año fiscal correspondiente.

capex

decimal

No

Porción de gasto de capital del financiamiento en moneda local. Si tanto capex como opex son 0, el amount completo se aplica a opex.

opex

decimal

No

Porción de gasto operativo del financiamiento en moneda local. Si tanto capex como opex son 0, el amount completo se aplica a opex.

Propiedades personalizadas

NOTA: Las propiedades personalizadas actualmente no están soportadas para registros de financiamiento de proyecto mediante esta API.

Solicitudes de ejemplo

Solicitud de creación masiva

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

Respuesta

Respuesta de creación masiva

Devuelve un BulkProjectFundingResponseModel con:

Campo

Tipo

Descripción

Status

string

Estado general: "success" (todos válidos), "partial" (algunos válidos) o "failed" (ninguno válido).

TotalCount

integer

Número total de registros enviados.

ValidCount

integer

Número de registros procesados correctamente.

InvalidCount

integer

Número de registros que fallaron la validación o el procesamiento.

CorrelationId

string

ID de correlación único para el seguimiento de esta solicitud.

Results

array

Resultados por fila, ordenados por RowIndex. Cada entrada contiene Fields.Id, Fields.IsValid, Fields.Status, Fields.RowIndex y Fields.ValidationMessages.

Ejemplo de respuesta masiva (éxito 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."
        ]
      }
    }
  ]
}

Reglas de validación

  1. Identificador de proyecto: Se debe proporcionar al menos uno de ProjectRef, ProjectId o ProjectGuid. El proyecto debe existir en la base de datos de Fluid.

  2. Monto: El campo Amount es obligatorio. Un valor de 0 eliminará el registro de financiamiento del año fiscal existente para esa combinación de proyecto y categoría de gasto.

  3. ExpenseCategory: Opcional. El cargador original de carga por Excel trataba este campo como opcional, y la API V3 conserva ese comportamiento por paridad.

  4. Código de moneda: Opcional. El código de moneda se establece de forma predeterminada en la moneda del sistema cuando no se proporciona, y se ignora cuando no hay una moneda secundaria definida en el sistema Fluid.

  5. FiscalYear: Opcional. Si se omite o es null, el registro se trata como una entrada de financiamiento Life-to-Date / proyecto completo.

  6. Capex y Opex: Ambos opcionales. Si no se proporciona ninguno (o ambos son 0), el Amount completo se aplica a Opex.

  7. Manejo de duplicados: Si ya existe un registro para el mismo proyecto, año fiscal y categoría de gasto, se actualizará (de lo contrario, se creará un registro nuevo). El conjunto completo de registros para una combinación dada de proyecto + año fiscal se reemplaza en cada carga.

  8. Generación automática de año completo: Si existen registros de año fiscal pero no se proporciona ningún registro Life-to-Date explícito, se genera automáticamente un registro de resumen de año completo sumando todos los registros de año fiscal por proyecto y categoría de gasto.

Códigos de estado HTTP

Código

Descripción

200 OK

Solicitud procesada. Verifique Status en la respuesta para ver "success", "partial" o "failed".

400 Bad Request

El cuerpo de la solicitud está mal formado o le faltan campos obligatorios.

401 Unauthorized

El emisor de la llamada no está autenticado.

403 Forbidden

La función Show Project Financials debe estar activa y el usuario debe tener Financial Administrator o AppAdmin. Los usuarios sin esta combinación reciben una respuesta 403 Forbidden.

429 Too Many Requests

Se superó el límite de tasa. Consulte los encabezados de respuesta RateLimit-*.

500 Internal Server Error

Ocurrió un error inesperado durante el procesamiento.

Límites de tasa

Endpoint

Solicitudes

Ventana

POST {rooturl}/rest/api/projectfunding/bulk

100

10 segundos

Was this article helpful?