Importing an ALM Situation

Two prerequisites must be met before an ALM situation can be imported.

  1. A client configuration must exist, declaring the expected format des données (data format) and the mapping of rate curve indexes;
  2. The reporting-date files described below must have been prepared.
Tip

The application’s Situations › Import guide menu describes the journey screen by screen and every file column by column, and offers the Excel template and the Crédit Logement mapping for download. The reading rules specific to the Crédit Logement format (inferred direction, swap day counts, default accounts, projection curves…) are described in Crédit Logement import. Every processing step and conversion applied at import, file by file and column by column, is gathered in Import: processing and conversions.

One import screen

A situation is imported from a single screen, the guided import. It is reached from the Situations › Importer une nouvelle situation menu or from the list of situations. The files get there in two ways:

  • one at a time, each into its slot;
  • from a .zip archive: its files go into their slots and the arrêté is read from it (Starting from an archive).

Either way, each file is checked before the import starts, and the draft is reviewed and submitted the same way. The former Upload screen launched the import of an archive with no prior check; it is gone. The API keeps that direct launch (Starting from an archive). The files are read by the application itself; the calculation engine receives none of them (The processing chain).

The files of a situation

A situation consists of the following files of the arrêté, read with a version of the client configuration. All of them are mandatory; only the financial transactions may be split across several files. The classification and the run-off models are no longer files of the situation: they are two sections of the client configuration (The sections of the configuration). A classification*.xlsx or a model_*.json left in the archive is ignored (IMP-056).

File Content Accepted formats
Situation information The arrêté — date, portfolio, pivot currency, discount index — entered on the screen; no file form
Accounting balance Extract of the accounting balances at the reporting date .xlsx, .csv, .txt
Pre-fixed cash flows Valuation of the cash flows already fixed .xlsx
Rate curves Summary of market rates at the reporting date .xlsx, .csv, .txt
Transactions The financial transactions, in one or more files .xlsx, .csv, .txt

Guided import

The Import guidé screen is accessed via the button of the same name at the top of the list of situations. It proceeds in two steps.

Step 1 — Configuration

Select the client configuration with which the situation is to be read, and its version: the latest is offered by default, an earlier one replays an arrêté with the rules of its time (Versions and replaying an arrêté). Then click Suivant. The draft is created at this point: the page address now carries its identifier, so a page refresh or a later return resumes the work where it left off.

Below the Suivant button, Déposer une archive creates the draft from a .zip archive, its slots already filled (Starting from an archive).

Note

The configuration of an existing draft can no longer be changed: it determines how each file is read, and therefore the outcome of the checks already performed. To use a different configuration, start a new guided import.

Step 2 — Files

Each row of the Fichiers step corresponds to a slot, i.e. to one of the files in the table above. The left-hand column describes what the slot expects; the right-hand column lists the files it already contains.

  • a single slot holds only one file: to replace it, delete it and then upload the new one;
  • the Opérations slot accepts several files, which are added to one another; a file uploaded again under the same name replaces the previous one;
  • unexpected extensions and empty files are rejected before they are even uploaded, with the reason displayed on the slot concerned.

Entering the situation information

The Informations de la situation row, at the top of the Fichiers step, holds a form: the reference date, the portfolio name and reference, the discount index and the pivot currency. The Enregistrer button stores them on the draft; no file is written, and nothing is imported before the import is launched. The Date de référence, the Index d'actualisation and the Devise pivot (EUR by default) are mandatory.

The form asks for no client: it is the draft’s client configuration’s. It still counts for the length of the portfolio reference, which the import puts together with it in the evaluation context reference (IMP-007).

The Index d'actualisation is a drop-down list populated from the selected client configuration: it offers the compound curves (compoundCurve) and the indexes declared in indexes, under the label used by the bank. It is the matching curve index that is saved, not the label. As long as no index is chosen, the form proposes the default index the configuration associates with the pivot currency (Default discount factor index).

A green tick shows that the information is saved. After changing the form, save again: the import is launched only with what is saved. An info_*.json no longer has a slot; if one is left in an archive, it is ignored (IMP-060).

Note

If the list is empty, the client configuration does not reference any index: no discount curve can be built and its mapping file must be corrected first.

Checking each file

A file is checked during its upload: the application reads it with the draft’s client configuration, and the answer to the upload already carries its status, its anomalies and the summary of its content (Checking a file on upload). The anomalies therefore show as soon as the upload ends, with no wait and no reload. The file’s row displays the outcome of the check:

Status Meaning
Vérification… The check has not taken place yet. Only seen on a file uploaded before the current version: it is checked when the draft is reopened. If it stays in that state, the screen says so after two minutes; delete it and upload it again.
Valide No blocking anomaly. The number of any warnings is shown.
n anomalie(s) The file contains at least one anomaly of level ERROR.

The Afficher les anomalies link expands the complete list of the file’s anomalies, with their level, their message and the object or reference concerned — the same level of detail as the list of anomalies of an archive import. The list shows in the anomaly log: each anomaly’s code leads to its entry in the anomaly reference, and the list can be filtered or grouped by code.

Content of each file

Once the check has passed, the row also shows what the solution has actually read from the file: a total, followed by a breakdown. This is the simplest way to verify that a file is indeed the one for the expected reporting date.

File Total Breakdown
Run-off model Number of strategies By strategy type (LinearOutflowStrategy, …)
Classification Number of mapping rows By IRRBB class (ASSET / Retail, …)
Rate curves Number of indexes Number of points per index
Accounting balance Number of accounting lines By account class (the first digit of the account number)
Pre-fixed cash flows Number of cash flows By transaction
Transactions Number of transactions By product type (Swap, Loan, …)

Launching the import

The Lancer l'import button remains disabled as long as a file is not checked or contains anomalies; a message below the list of slots serves as a reminder. If any slots are still empty, clicking the button lists them instead of starting the import, and the slots concerned are flagged in their header. The same goes for the situation information as long as it is not saved.

The import then starts exactly like an archive import: the situation appears in the list with the status en cours (in progress), then terminé (completed), or échec (failed) if the import could not build the situation.

Import status

The import runs in the background in the application. The screen stays open and follows it: “The situation is being imported; this page follows it.” It reads the status every 3 seconds and shows the outcome as soon as the import ends:

Outcome Message
terminé “The situation is imported.”
échec “The import failed with n error(s).”, followed by the import’s errors

The Open the situation and Back to the list buttons then lead to the situation (and its anomaly log) or to the list of situations. You can also leave the screen during the import: it goes on, and a notification announces its end. The details are in The import task.

Resuming or reopening a draft

The Terminer plus tard button leaves the screen without losing anything. A draft appears in the list of situations with the Brouillon badge; the Reprendre le brouillon link — also available in the row’s menu — reopens the screen at the Fichiers step.

A guided import that has failed can be reopened as a draft from its row’s menu: the files already uploaded are kept, and only those causing problems need to be replaced. This action is only offered for situations built file by file; an archive import must be relaunched from its archive.

Note

A draft with no activity for 30 days is purged automatically, together with the files it contains.

Starting from an archive

On the Configuration step, Déposer une archive sends a non-empty .zip archive. Each file goes into the slot of its role, the draft opens on the Fichiers step, and each file is checked there as if it had been dropped by hand. Nothing is imported until the draft has been reviewed and submitted.

  • A complete archive — downloaded from a situation (Complete archive of a situation) — states the role of each file, the arrêté and the configuration itself. No configuration needs to be chosen.
  • Any other archive is read with the configuration chosen above, which is then mandatory. The model_* and classification* files are recognised by their name, every other file goes to Opérations: move the balance, the prefixed cash flows and the curves to their slots, then enter and save the situation information. An info_*.json of the archive is not taken over.

Complete archive of a situation

The Télécharger la situation complète button of a situation produces situation_<reference>_<arrêté>.zip. This archive can be imported again as it is, in the same space or in another one. It contains:

Entry Content
situation.json The arrêté (referenceDate, portfolioName, portfolioReference, pivotCurrency, discountFactorIndex), the role of each file (files: RATE_CURVES, ACCOUNTING, CASHFLOWS, TRANSACTIONS) and the configuration used (configuration: id, name, revision). formatVersion is 1.
configuration.json The client configuration at the version the import used, with its classification and its run-off models.
The input files Curves, ledger, pre-fixed cash flows and transactions, under their original names.

The classification workbook and the model_*.json are not in it: configuration.json replaces them.

On re-import, the configuration of configuration.json is looked up in the space. An existing configuration is never changed. The draft says which rule applied when it opens.

Rule Condition Configuration used
Same version Same id, same version and same content That configuration, at that version
Same mapping A configuration of the space has the same data format and the same mapping That configuration, at its latest version
Creation None matches A new configuration, <name> (importée le dd/mm/yyyy), created from the file
Note

The POST /api/v1/import API keeps launching the import directly: submit is true by default, and the task is followed like the screen’s (The import task). With a complete archive, configurationId and discountFactorIndex become optional. With any other archive, the request gives the configuration, the index, the arrêté (referenceDate, pivotCurrency, and if need be portfolioName, portfolioReference) and the role of the files (fileRoles); without configuration, index, date or currency, the task goes FAIL. submit: false leaves a draft, like the screen. A request that carries an arrêté without saying the role of each file is refused at import (IMP-058). The details are in Situation information.

File details

General Information

The situation information is no longer a file: it is entered on the import screen (Entering the situation information) and saved with the draft. It is the following; only the values marked [*] usually change from one situation to the next.

Field Content Mandatory
Date de référence (referenceDate) [*] The arrêté date of the situation, as yyyy-mm-dd yes
Nom du portefeuille (portfolioName) The name of the imported portfolio, at most 100 characters no
Référence du portefeuille (portfolioReference) [*] A reference of the portfolio, at most 100 characters no
Index d'actualisation (discountFactorIndex) The curve that discounts the cash flows yes
Devise pivot (pivotCurrency) The currency of the results, 3 characters yes

The reference date is also the evaluation date used for valuation: there is no separate field to fill in.

  • The client is no longer entered: it is the client configuration’s. How the files are read is determined by the format des données (data format) of that configuration.
  • The discount index must designate a curve the client configuration is able to build (a key of compoundCurve or a value of indexes). A missing or unknown index is refused before the import starts, with the list of possible indexes. It is saved already resolved.
  • The file names are no longer declared: each file sits in its slot.

Run-off model

What a model_*.json holds is loaded into the Run-off models section of the client configuration; it is no longer uploaded with the situation. It describes the run-off strategies applied to the balance sheet items that do not carry a financial transaction (sight deposits, equity, fixed assets…). Each strategy specifies the targeted accounting item, the rate to apply, and the run-off frequency and horizon:

{
  "outflowStrategies": [
    {
      "@type": "LinearOutflowStrategy",
      "rate": { "type": "FIXED", "value": 0.015, "interestMode": "SIMPLE", "base": "EXACT_EXACT" },
      "productName": "accounting",
      "reference": "291200**",
      "frequency": "YEAR",
      "timeHorizon": "6Y"
    }
  ]
}

A balance line run off by a strategy is classified on the strategy reference without its stars (291200), which must appear in the mapping_compta sheet of the classification, and not on its own account (Crédit Logement import).

The strategies read can then be viewed in the Modeled Outflows sub-tab of the situation detail.

Transaction classification

The workbook is loaded into the Classification section of the client configuration; it is no longer uploaded with the situation. It is an Excel workbook linking the bank’s accounting categories to the regulatory classes. The mapping_compta sheet associates each category with an asset type / counterparty pair (for example ASSET / Retail), and the mapping_compta_irrbb sheet resolves this pair into a FINREP code and an IRRBB class for the purposes of the EVE and NII models. A transaction gets its account from the optional histo sheet (deal number → account) or, failing that, from the client configuration’s instrumentAccounts mapping (Crédit Logement import). A mapping_compta row without a category is flagged by a warning and classifies no transaction. The mapping_compta accounts must be numeric cells: a row whose account is text is set aside as an error.

Accounting balances

Extract of the accounting balances at the reporting date, accepted in two forms:

  • an Excel workbook (.xlsx), whose i1-balance sheet holds the balance; the columns are, in order: date, account number, account label, amount;
  • a delimited text file (.txt or .csv), without a header line: the first line is already an account line. The separator (;, tab, , or |) is detected from this first line, and the columns are, in order: account number, account label, amount, date as DDMMYYYY (30062025). An added header line would be read as an account, and dropped with an error.

Any other extension — like an unreadable balance file — aborts the import, since the modelled balance sheet items depend on it.

Amounts are read in the formats actually produced by banks’ systems: , or . as decimal separator, spaces as thousands separators (including the non-breaking spaces produced by Excel), and scientific notation. A text account number (off-balance-sheet accounts H96…) is read as text. When both separators are present, the rightmost one is the decimal separator (1,234.56 and 1.234,56 have the same value). An empty cell is not interpreted as a zero amount: the line is flagged as an anomaly.

Pre-fixed Cash Flows

Excel workbook holding the transactions’ already-fixed cash flows, used instead of computation for known payment dates. The cash flows are attached to the transaction whose reference they carry.

Rate curves

The market rates file is accepted in two forms: an Excel workbook, or a semicolon-delimited text file (.csv or .txt). In both cases, a header row names the columns — the first line of the delimited file; in the workbook, the first row with at least eight filled cells of the sheet carrying the columns below — and the following columns, in lower case, are mandatory:

Column Content
ratename The curve index (for example EONIA, EURIBOR 6M SWAP)
ratedate The quotation date
timeband The maturity of the curve point
offer The rate, expressed as a percentage (2,40 for 2.40%)
currency The curve currency

Additional columns in the file (bid, ratetype, INEO, …) are ignored. In a workbook, a row with fewer than eight filled cells is ignored: a workbook reduced to the five mandatory columns yields no curve (Import: processing and conversions).

The timeband column accepts the following labels; any other label triggers a warning and the line is ignored:

Label Curve point
ACTUAL The same day (spot point)
OVERNIGHT 1 day
<n> WEEKS / <n> WEEK n weeks
<n> MONTHS / <n> MONTH n months
<n> YEARS / <n> YEAR n years

Example of a delimited file:

bid;currency;INEO;offer;ratedate;ratename;ratetype;timeband
2,10;EUR;;2,10;31/03/2026 18:00;EONIA;End of Day;ACTUAL
2,40;EUR;;2,40;31/03/2026 18:00;EONIA;End of Day;OVERNIGHT
2,60;EUR;;2,60;31/03/2026 18:00;EONIA;End of Day;1 MONTH
3,00;EUR;;3,00;31/03/2026 18:00;EONIA;End of Day;1 YEAR

In a delimited file, the quotation date is in dd/MM/yyyy HH:mm format. In a workbook, ratedate must be a real Excel date: a date entered as text aborts the import (Crédit Logement import).

Note

A curve quoted more than 50 days from the reporting date — before or after — triggers a warning stating the gap: the curve is built, but it does not describe the market at the reporting date. This check is only possible at import, since the reporting date is not known when the rates file is checked on its own.

Transactions

The financial transactions are spread over one or more files, usually one per product family (swaps, loans and borrowings, securities, repos…). The expected columns are those declared in the model section of the client configuration, and the values of the product and convention columns must be covered by its mappings. A column named in the mapping must exist in the file, even empty. The rules applied row by row to the Crédit Logement format — direction of money-market transactions, day count of swap legs, remaining nominal, calls, default accounting account — are described in Crédit Logement import.

Index consistency checks

Rate curves are the most frequent source of errors, because they involve three elements that must be consistent with one another: the client configuration, the rates file and the transactions. Three checks ensure this.

  1. Each mapped index must exist in the rates file. All values of indexes and all elementary curves of the client configuration’s compoundCurve entries are looked up in the rates file as soon as it is read. An index that cannot be found triggers an error on the rates file, naming the missing index and the bank labels that refer to it. The comparison ignores case and superfluous spaces.
  2. The discount index must be known. An index that is missing, or that the client configuration is unable to build, is rejected before the import starts (see above).
  3. A transaction referencing an unmapped rate is kept. When a transaction carries a rate label that is absent from indexes, it is no longer rejected: a warning naming the label to be added is issued, and the transaction is valued. A fixed-rate transaction is valued unchanged; a floating-rate transaction whose label nevertheless designates a curve in the file uses that curve; failing that, it is valued at the rate it currently carries. The mapping still needs to be completed, but the reporting date remains usable and the number of transactions in the portfolio remains correct.
Note

The product and classification mappings remain blocking: a transaction whose product is not mapped is rejected, since the solution would not know which calculation model to apply to it.

Sample import situation

Download a sample import file.

import_example.zip.

Warning

This sample archive can no longer be imported as is: its RT_indices.txt follows the former index;valeur;date format without a header row, and its mapping_cl.json maps all labels to indexes (ISWAP, ISAP) that the rates file does not contain. It no longer holds an info_*.json: its situation information is entered on the screen (reference date 2024-12-31, portfolio Swap Portfolio, reference ptf_swap_1_31_12_24, index DISCOUNT_EUR, currency EUR). It remains useful as an illustration of the composition of a situation, but not as a test data set; refer to the formats described above.