Skip to main content

Developer release notes Q3 / 2024

The 2024 Q3 release includes various GraphQL API improvements, as well as updates in FA Client Portal roles and configurations.m

GraphQL API improvements

Importing

In this release, we introduced new importers for addresses, limits, and limit definitions. This includes support both for file-based (CSV) and API-based import of the data.

The “importAddresses” endpoint can be used to import addresses to contacts. This allows you to manage multiple addresses via our importer, which wasn’t previously possible. It also makes it much easier to import addresses.

The “importLimitDefinitions” endpoint allows you to create and modify limit definitions. The “importPortfolios” endpoint now allows you to link limit definitions to portfolios through the “limitCodes” and “limitGroups” fields.

We also introduced a feature for returning autogenerated database ID numbers for imported objects. This feature only works when you import data synchronously, so we now allow synchronous import for some endpoints that did not previously support it.

Importing trade orders from FA Client Portal

We introduced a new more restrictive endpoint “importLimitedTradeOrder” for users of FA Client Portal and other similar customer applications. We also improved the validation of the existing endpoint “importSwitchOrders”.

In addition to enhanced out-of-the-box validation, the new and improved endpoints allow smooth integration of additional custom validation logic to your client trading. This is done with decision tables. For a sample decision table which adds back-end enforcement for most of FA Client Portal’s front-end-only validation rules, see Transaction and trade order decision tables.

Defining rules against the “LimitedTradeOrderDTO” class, as we do in the sample rules, ensures that they apply only to orders entered via this endpoint, not orders modified by users in FA Back, for example.

The “importLimitedTradeOrder” endpoint is used for entering trades in our standard Client Portal starting from this release, and we recommend customized client portals to also switch over to this new endpoint. After switching over to the new API, client portal users’ permissions should be adjusted to ensure all trades are entered through the new endpoint: we introduced two new permissions to control access to these limited trade order endpoints: API.importLimitedTradeOrder and API.importSwitchOrder.

Conservative position forecasting

We introduced a new parameter “calculateExpectedAmountPessimistically” in “portfolioReport” context queries. The new parameter allows you to calculate projected holdings and take into account ongoing trades so that available cash and units are deducted based on ongoing trades and never increased. While this does not accurately forecast portfolio positions, it is useful as a basis for front-end validation when entering new trades into a portfolio. The purpose is to prevent a situation where a portfolio cash account dips below zero or a position is shorted unintentionally.

Other GraphQL API improvements

  • You can now search for the address of a specific contact with an “address” query in the context of a Contact.

  • In addition to importing limits and limit definitions, we introduced new endpoints for querying them.

  • Fund service now features an extended version of the liquidity forecasting endpoint released in Q2. Liquidity forecasting for fund portfolios also considers expected subscriptions and redemptions.

Updated FA Client Portal roles and configurations

We changed the way to define user roles in the keycloak.json file. Previously, write-roles and impersonate-roles were defined like this:

"write-roles": {
	"fa-clientportal": ["ROLE_CLIENT_ACCESS"]
},
"impersonate-roles": {
	"fa-clientportal": ["ROLE_IMPERSONATE"]
},

Now, the role definitions are more fine-grained:

"enableBuy": {
  "fa-clientportal": ["ROLE_CLIENT_ACCESS"],
  "fa-advisor": ["ROLE_USER"]
},
"enableSwitch": {
  "fa-clientportal": ["ROLE_CLIENT_ACCESS"],
  "fa-advisor": ["ROLE_USER"]
},
"enableDeposit": {
  "fa-clientportal": ["ROLE_CLIENT_ACCESS"],
  "fa-advisor": ["ROLE_USER"]
},
"enableWithdraw": {
	"fa-advisor": ["ROLE_USER"]
},
"enableCancelOrder": {
  "fa-clientportal": ["ROLE_CLIENT_ACCESS"],
  "fa-advisor": ["ROLE_USER"]
},
"enableImpersonate": {
  "fa-clientportal": ["ROLE_IMPERSONATE"],
  "fa-advisor": ["ROLE_USER"]
},
"enableAdvisor": {
  "fa-clientportal": ["ROLE_CLIENT_ACCESS"],
  "fa-advisor": ["ROLE_USER"]
}

Other improvements

Custom Camel routes deployed to our Connector Microservice can now use the Camel RabbitMQ component.