Skip to main content

FA Back 3.9 - Release notes

FA Back 3.9 [latest updated version FA Back 3.9.5 ] has been released.

FA Back 3.9

Contains: Various improvements in existing features

Released: January 29th, 2021

Improvements - see attached FA Back 3.9 Release notes for more details.

FA Back 3.9 Release notes.pdf

  • New options in Trade order execution, including fetching a price or and FX rate with a question mark, recording rounding errors on trade-amount-based orders and calculating accrued interest or accrual during execution

  • Improvements on how FX Contracts are store in the system, including support for explicitly selecting to create FX Spots or FX Forwards and carrying over contract details to the cashflows and future cashflows

  • Option to export time series of data from Analytics+ as additional tools to help figure out how Analytics+ figures are calculated

  • Better control over TWR through clarified and extended transaction type effects

  • Better control over recording Private Equity investments through extended transaction type effects

  • Support for importing transactions without a currency in the import file and for importing "Linked portfolio" to a security

  • Extended user and system audit logging for better visibility on what is going on in the system, including adding user audit logging to some of the most crucial parts of the application and system audit logging for more details on what is going on in the background

In addition to the improvements highlighted in the release notes, FA Back 3.9.0 includes the following bug fixes and improvements:

Bug fixes:

  • Capital returns on a non-portfolio currency Private Equity now correctly consider the FX gain / loss. For example, if you have a "PE - Call" of $100 with FX 1.0 and a "PE - Capita return" of $10 with FX 1.1, there is now and FX gain of 1 (due to FX rate change from 1 to 1.1). This is shown as "Realized profit (fx)", which in effect ensures that FX gain / loss is not included for example in distributions calculated for the investment.

  • "Distribution" column in Analytics+ now calculates distributions correctly also on the day when there are distributions - the value no longer includes the effect of distributions twice on the date of the distribution.

  • "Duration", "Modified duration" and "YTM" columns in Analytics+ now correctly show a duration aggregated on a group level (such as security type level, when all instruments within the group are bonds) also on days when one of your bonds matures. On the maturity date, a bond's duration is naturally 0, which was before interpreted as "missing" duration, preventing the system from calculating aggregate duration on the group level. Now, 0 values are accepted in the aggregation of bond-related figures if the bond has a maturity date and the analysis is done on or after the maturity date.

  • Exchanges now affect TWR correctly - the TWR of the new position you get from an exchange starts from zero (or close to zero, taking into account the unrealized profit on the first day if there is any), and the TWR of the old position doesn't change. The logic of calculating net cashflows after exchanges is now only applied for transactions configured as "exchange", i.e. when transaction type has "Security 2" effect as one of the "Removes 2nd security" option.

  • Also the "TWR Gross" column in Analytics+ now correctly reacts to the security type level setting "Don't calculate TWR on position level", not showing the TWR figure for instrument types with this setting.

  • XLS exports from search views have been changed to use XLSX instead of XLS in order to allow you to export larger amount of data from search views without system running out of memory. In addition, if you are trying to export more data than XLSX can reliably handle, you are now presented with a proper warning message.

  • "Add Contract" transaction visible in the transaction listing representing an FX Contract saved in the system now correctly shows the contract's settlement date in the transaction listing's "Settlement date" column.

  • Saving an FX Contract in the system now runs rules in the system against the generated future contract and future cashflow securities. This allows you to build custom rules for example to classify your future cashflow securities in a certain way, and the rule would be applied every time a contract generates future cashflow securities.

  • Updating security's ex-post costs through the Security window or through security importer now automatically recalculates the affected portfolios' report data from affected date onward. This ensures that the changes you make in ex-post costs are directly visible in your portfolios, without you having to manually trigger any recalculations.

  • You can now again enter ex-post costs into your portfolio with transactions that are not linked to security or account. This allows you to enter "un-distributed kickbacks" into portfolios without specifying a specific position - you can now enter a cash transaction which has no effects on any of the portfolio's values aside from the portfolio's ex-post-costs.

  • When importing data to FA through the import features available in the Update menu, you no longer need to wait for an unnecessarily long time for the Import window to close after the import has gone through. The system no longer performs unnecessary action when the Import window is closed.

  • Importing bond-related data to your securities through the security import format now validates your import file's content on "Stub convention", "Business day convention", "Yield convention" and "Roll convention", ensuring that you import valid data into these fields.

  • Fixed a small issue in the logic of automatically determining the next available "Ext ID" of a transaction or a trade order: if the next available Ext ID happens to be exactly the same as the biggest Ext ID found in the system, the logic might have used an Ext ID that was already in use.

  • When you select to generate a report from the Report window with "Language of portfolio/customer", the window now correctly passes on the language and the "locale" to report generation, ensuring your report will properly react to your portfolio's or customer's language.

  • Custom reports using custom fonts now work correctly, using the correct custom font when generated from the system.

  • You can no longer create two groups with the same code through the Groups view, ensuring that all your groups have a unique code as they should have. In addition, you can no longer change a group's code after you have saved the group, ensuring that portfolio group selection won't be lost from saved search views if group codes were changed.

  • Groups listed in the Portfolio window's Groups tab are now ordered alphabetically, making it easier for you to see which groups your portfolio belongs to.

  • "Issuer" field in the Portfolio window's Accounts tab now shows issuers with issuer's name instead of issuer's code, making it easier for you to identify issuers you select for your account.

  • Allocations listed in the Security window's Allocation tab are now ordered alphabetically, making it easier for you to see which allocations your security has.

  • Clicking "Copy as new" in the Security window now recalculates report data on the copied security if needed. For example, if you first modify a security's market data and then directly click "Copy as new" without saving or closing the window in between, your original security's report data will be recalculated to take into account the changes in market data.

  • "Capital call" corporate action window now allows you to define an FX rate when running the capital call directly - you no longer need to close the Capital call window between creating the corporate action and running it in order for the necessary FX rate field to appear.

  • "Calculation date" field is now marked as a mandatory field in the Fee calculation window, ensuring that the user selects a desired calculation date before calculating fees.

  • Deleting a contact that is in use in another contact or portfolio, for example as a representative of another contact or a custody of a portfolio, now shows you a proper warning that the contact cannot be deleted because it is in use.

  • Layout of the Trade order execution window has been improved by styling the "Description on statement" field's caption consistently with other fields' captions. In addition, numeric values in all tables in Trade order execution window now follow proper number formatting, ensuring that numbers react to changes in preferred number formatting.

  • "Purchase value without costs" column on the Overview now handles futures' purchase values the same way as the "Purchase value" column does, not including purchase value into "Security total" and "Portfolio total" values.

  • Contact representative columns on Transactions and Trade orders views have now been named consistently: you now have separate columns for "Contact representative (name)" and "Contact representative (ID)", allowing you to easily select between viewing your transaction's contact's representative's name or ID.

  • Exporting a search result with categorized key figures from a search as PDF or XLS now properly shows the categorized key figure with its name within the export - as a result, your PDF and XLS exports show the categorized the same way as the search views do.

  • Columns based on key figures on search views now take into account number formatting, ensuring that numeric values react to changes in preferred number formatting.

  • You can now correctly select the "Security settlement place" column on the Securities view - when selected, the column appears correctly on the search view, allowing you to and filter with security's settlement place.

  • "Security subtype" column on the Securities view now correctly shows the subtypes also when exporting a search result as XLS from the view.

  • Securities view now formats all decimal numbers, such as "Security total outstanding amount", "Min trade amount", "Spread" and default key figures with proper number formatting, ensuring that these decimals numbers react to changes in preferred number formatting.

  • "Spread" column in the Securities view now also correctly uses a number filter, allowing you to filter the column's values with for example "greater than".

  • "TWR calculation" field is now shown in the Security type Preferences directly when creating a new security type. Before, this field appeared only after you had saved your new security type.

  • You can no longer select an empty value in required fields in Security type Preferences, ensuring you don't get unnecessary errors when selecting "empty" on a field that doesn't support empty selections.

  • When opening the "Versions" of a Transaction, you can now see transaction's currency as one of the versioned items, allowing you to see changes also in transaction's currency.

  • Fixed an occasional issue in Transaction window's Bookkeeping tab related to the posting listing not always being up-to-date when you delete postings visible in the listing.

  • Rebalance window no longer shows an unnecessary error when you check/uncheck the "portfolio" row from the table when your portfolio has a lot of positions and all positions are not shown on the screen - all portfolio's positions are now considered when you check/uncheck the portfolio, regardless whether they were originally visible on the screen.

  • You can now modify a contact through the modify icon on the Overview without an error also when you first selected a group on the Overview, then navigated to a contact within the group, and then selected to modify the contact through the modify icon.

  • Import window now shows a proper text in Finnish and Swedish for import error "Field is required", shown when you are trying to import something without providing a value in a required field.

  • Key figure Preferences now show proper texts in Finnish and Swedish for the categories (Contact, Portfolio, Security) shown in the tree that lists the key figures.

  • Fixed a couple of typos in the Finnish texts in the Import window for import error "Does not exist" and in the Exchange corporate action window.

  • Saving a new contact in the system when you have some other screen than the Overview open no longer results in an unnecessary error message on the logs.

  • Log messages about rule runs in the system no longer add an extra line break at the end of the message, making it easier to read through the logs.


  • Performance of mass-deleting transactions or trade orders has been optimized - instead of the system deleting transactions and trade orders one-by-one from the database, they are now deleted in batches. These optimizations take effect when deleting a rebalance, corporate action run or a fee calculation run (which delete all linked transactions or trade orders), when manually mass-deleting transactions or trade orders from the Overview, or when deleting all of portfolio's transactions or trade orders through the Portfolio window.

  • Performance of scheduling new report recalculations has been simplified and optimized. Triggering new report recalculations now always schedules a new "job" in the queue, which is quite quick, instead of pausing, checking and updating existing similar jobs in the queue, which was rather slow and prone to something going wrong.

  • In addition, stability of the report recalculation logic has been improved through adjusting the locking mechanism that ensures that the same portfolio's report data is not calculated concurrently in any scenario. Locking is now spread out to all places that can change report data, timeout has been increased, and locking is no longer ignored if update fails for some reason. This intents to help in scenarios when report recalculation logic fails unexpectedly once in a while.

  • FA-admin user logins and logouts are now correctly recorded in user audit.

  • Fixed an issue related installing, updating or uninstalling reports from the AppStore not working due to shared files being locked when running multiple applications (e.g. FA Back and FA Front).

  • In addition, FA Back has been restructured in the background for it to better fit our microservice architecture. For example, certain technologies have been upgraded to latest versions, new technologies have been introduced for improved monitoring facilities, and some technologies are changed for better performance of the application.

APIs, decision tables and other developer tools:

  • FA's API call responses now contain recommended security headers - these HTTP response headers restrict modern browsers from running into easily preventable vulnerabilities.

  • Analytics+ is now smarter to determine the required start and/or end date for the analysis based on the requested time periods when using analytics through the API. Before, it was the responsibility of the caller to specifically set the start and end date - if not given, full history was loaded even if it was not intentional. Now if the start and end dates are not set, the logic determines the required start and end dates based on the time period codes requested.

  • GraphQL endpoints for contacts, portfolios and securities now return a unique, exact match when you are searching with a unique identifier, such as the ID or a code of the contact, portfolio or a security.

  • GraphQL APIs have been extended. Portfolio API now allows you to fetch transactions and trade orders in the context of portfolio report items, load individual transactions or trade orders, load a portfolio report on list of portfolios, fetch transactions and trade orders with a list of types and aggregate transactions and trade orders. In addition, portfolio report and transactions APIs now allow you to convert values to selected currency with an FX rate.

  • This version introduces various helper methods that allow you to build decision table rule more efficiently. Method setTransactionTypeByCode() allows you to easily set a transaction type, setProfileAttributeValue() and getProfileAttributeValue() allow you to set or check values stored in contact's, portfolio's or security's profiles, and methods hasGroup()., hasNotGroup(), hasAllGroups() and hasAnyGroups() allow you to easily check if a portfolio belongs to a specific group.

  • Fixed an issue related to deploying a process through the Administration view when the process has a dependency to an extension JAR which contains invalid files.

Updates to FA Back 3.9:

FA 3.9.1 Release notes

FA 3.9.1 is an update to FA 3.9. This update includes the following bug fixes:

  • Nightly report data update now works correctly without errors when the nightly update affects multiple portfolios starting from different dates. This issue was introduced in FA 3.9 when adding audit logging to report recalculations, and resulted in nightly report data update failing in some scenarios.

  • TWR no longer shows a sudden drop after nightly report data update for positions that have an exchange transaction earlier in the position's history. Before, logic related to handling exchanges (updating the original trade amount in the purchase lot created by an exchange with the market value and market FX rate) was mistakenly not considered in the nightly report data update but only when recalculating report data through the menu or through modifying transactions within the portfolio.

  • Updating and FX rate on a currency cross now correctly triggers report recalculation also on portfolios where the updated currency cross is used to triangulate an FX rate through crosses against the base currency. When the price of a currency cross is updated, the logic fetches all the portfolios that are affected by the change and whose reports need to be recalculated. Before, logic failed to find the portfolios where the effect of the updated cross is indirect, that is, where the actual cross is triangulated via the system's base currency. Now the logic takes such cases into account so that if either one of the updated cross’s currencies (e.g. EUR/GBP) equals the system base currency (e.g. EUR), the logic fetches for report data where either the security or portfolio currency equals the non-system-base-currency part of the cross (e.g. GBP). For example, you have a GBP security in a USD portfolio, but you don't maintain the direct GBP/USD cross in your system - when your system's base currency is EUR and you update either GBP/EUR or USD/EUR currency cross, your GBP position in your USD portfolio is also updated.

  • "Modify transactions" on the Transactions view now works without throwing an unnecessary error also when you have the "Last modified" column selected in Transactions view when you start mass-modifying your transactions. Before, the actual modifications were done, but the screen showed a misleading error message when you confirmed your modifications.

  • You can now view the time series of a key figure in the Security window also with the view-only permission (SECURITY.VIEW without SECURITY.MODIFY permission). With the view-only permission, clicking a key figure from the listing shows you the time series and details of the selected key figure, but doesn't allow you to modify the values.

  • "Gross price" and "Price" columns in transaction listings now correctly show the gross price and price also for transactions on index linked bonds which have a coefficient defined in the Transaction window.

  • You can now manually add a holiday to a weekend holiday calendar (such as "Saturday/Sunday weekends (SatSun)" or "Friday/Saturday weekends (FriSat)") through Holiday calendar Preferences. Before, manually extending a weekend holiday calendar with an extra holiday date resulted in an error an prevented you from accessing Holiday calendars Preferences again.

  • Fixed an issue that accessing "Texts" section within the Content and translation Preferences occasionally through an error and prevented you from accessing the section.

FA 3.9.2 Release notes

FA 3.9.2 is an update to FA 3.9. This update includes the following bug fixes:

  • Custom holiday calendars now again consider weekend days as holidays. This issue was introduced in FA 3.9.1 when allowing to manually add holidays to weekend holiday calendars.

FA 3.9.3 Release notes

FA 3.9.3 is an update to FA 3.9. This update includes the following bug fixes and improvements:

  • When automatically setting up a new client "fa-api" to enable access to FA's APIs, the client now gets a new, unique secret.

  • Fixed an issue in permission checks in GraphQL APIs for fa-admin users without explicit roles in FA Back.

  • In addition, the built-in support to overwrite process configurations with values defined in preferences now supports other types of configurations than just text, including for example checkboxes, radio buttons and number fields. The process configuration window also now indicates if a configuration has been overwritten. This provides us with the technical facilities to in he future build separate, easy-to-use preference windows to configure setups without user having to go into the complex process configurations.

FA 3.9.4 Release notes

FA 3.9.4 is an update to FA 3.9. This update includes the following bug fixes:

  • Reports generated from the system now again show negative values as negative also when the report is generated in Finnish or Swedish. This issue was introduced in FA 3.9 when upgrading certain technologies under the hood - negative numbers and the minus sign character are now interpreted correctly also in other languages than English.

  • Fixed an occasional issue in deploying something through Administration - Processes - Deployment resulting in a crash of the system due to old base image.

In addition, this version contains all fixes from versions FA 3.8.11 and FA 3.8.12:

  • TWR calculation no longer shows a sudden drops or jumps if the position includes two or more exchanges. TWR calculation now works correctly also if there are two or more exchange transaction in one day (resulting from exchange corporate action run against a position with multiple open purchase lots) or if there are two or more consecutive exchanges over time on the same position.

  • TWR no longer shows a sudden drop after nightly report data update for positions that have an exchange transaction earlier in the position's history. Before, logic related to handling exchanges (updating the original trade amount in the purchase lot created by an exchange with the market value and market FX rate) was mistakenly not considered in the nightly report data update but only when recalculating report data through the menu or through modifying transactions within the portfolio.

  • Manually fetching market prices in the Security window with one of the "Update close" buttons now correctly recalculates affected portfolios' reports only for the new prices fetched through the market data connector. Before, when fetching prices with the "Update close" buttons, the logic unnecessarily always recalculated affected portfolios' reports from the earliest market date observation onward, even if only one or two new prices were filled in for recent days.

  • Analyzing a limit based on strategy, investment plan or model portfolio now correctly considers the date of the strategy or plan when determining what to analyze your portfolio's positions against. Analyzing limits now compares your portfolio against only the latest strategy or plan, ignoring the history of strategies or plans.

  • Building the transaction listings has been optimized, making it less likely to come across occasional errors when concurrently populating the transaction listings.

FA 3.9.5 Release notes

FA 3.9.5 is an update to FA 3.9. This update includes the following improvements and bug fixes:

  • IRR calculation in Analytics+ has now been improved to also handle cases when the current calculation logic doesn't find a solution. The current library cannot always calculate an IRR due to non-convergence problem with Newton-Raphson method when there are alternating positive and negative cashflows. This version now uses the Brent-Dekker method to find a solution to IRR when the original method has failed.

  • Realized and unrealized profits are now calculated correctly when an exchanged position is sold away. Before, there was a one-day spike in TWR on the day when a position created from an exchange was sold.

  • "Trade amount" and "Trade amount change" columns now show appropriate values also after exchanges and similar transactions, and these columns now show the "unadjusted" trade amount as before. After the change in TWR calculation, trade amount was adjusted to reflect the required changes e.g. when exchange happens. During exchange, the trade amount from TWR's point of view is corrected to be the market value of the position at the time of an exchange. This lead to unexpected result in the "Trade amount" column as users expect the trade amount to be the trade amount from transactions, not from these revaluations.

  • In addition, "Value change absolute" column now shows appropriate change values also after exchanges and similar transactions. This column now uses the "unadjusted" values as before.