Import d’une situation ALM

Deux pré-requis sont nécessaires à l’import d’une situation ALM.

  1. L’existence d’une configuration client, qui déclare le format des données attendu et le mapping des index de courbes de taux ;
  2. La constitution des fichiers d’arrêté décrits ci-dessous.
Astuce

Le menu Situations › Guide de l'import de l’application décrit le parcours écran par écran et chaque fichier colonne par colonne, et propose le modèle Excel et le mapping Crédit Logement au téléchargement. Les règles de lecture propres au format Crédit Logement (sens déduit, bases des swaps, comptes par défaut, courbes de projection…) sont décrites dans Import Crédit Logement. Chaque traitement et chaque conversion appliqués à l’import, fichier par fichier et colonne par colonne, sont rassemblés dans Import : traitements et conversions.

Un seul écran d’import

Une situation s’importe depuis un seul écran, l’import guidé, accessible par le menu Situations › Importer une nouvelle situation ou depuis la liste des situations. Les fichiers y arrivent de deux façons :

  • un par un, chacun dans son emplacement ;
  • d’une archive .zip : ses fichiers sont rangés dans leurs emplacements et l’arrêté est repris (Partir d’une archive).

Dans les deux cas, chaque fichier est contrôlé avant que l’import ne démarre, et le brouillon se relit puis se soumet de la même façon. L’ancien écran Upload, qui lançait l’import d’une archive sans contrôle préalable, a disparu ; l’API garde ce lancement direct (Partir d’une archive). Les fichiers sont lus par l’application elle-même ; le moteur de calcul n’en reçoit aucun (La chaîne de traitement).

Les fichiers d’une situation

Une situation est constituée des fichiers de l’arrêté suivants, lus avec une version de la configuration client. Tous sont obligatoires ; seules les opérations financières peuvent être réparties sur plusieurs fichiers. La classification et les modèles d’écoulement ne sont plus des fichiers de la situation : ce sont deux sections de la configuration client (Les sections de la configuration). Un classification*.xlsx ou un model_*.json laissé dans l’archive est ignoré (IMP-056).

Fichier Contenu Formats acceptés
Informations de la situation L’arrêté — date, portefeuille, devise pivot, index d’actualisation — saisi à l’écran ; aucun fichier saisie
Balance comptable Extrait des balances comptables d’arrêté .xlsx, .csv, .txt
Flux préfixés Valorisation des cash flows déjà fixés .xlsx
Courbes de taux Synthèse des taux de marché à la date d’arrêté .xlsx, .csv, .txt
Opérations Les transactions financières, un ou plusieurs fichiers .xlsx, .csv, .txt

Import guidé

L’écran Import guidé est accessible depuis le bouton du même nom, en haut de la liste des situations. Il se déroule en deux étapes.

Étape 1 — Configuration

Sélectionnez la configuration client avec laquelle la situation doit être lue, et sa version : la dernière est proposée par défaut, une version antérieure rejoue un arrêté avec les règles de l’époque (Versions et rejeu d’un arrêté). Cliquez ensuite sur Suivant. Le brouillon est créé à ce moment-là : l’adresse de la page porte désormais son identifiant, si bien qu’un rafraîchissement ou un retour ultérieur reprend le travail là où il s’est arrêté.

Sous le bouton Suivant, Déposer une archive crée le brouillon à partir d’une archive .zip, ses emplacements déjà remplis (Partir d’une archive).

Note

La configuration d’un brouillon existant ne peut plus être modifiée : elle détermine la façon dont chaque fichier est lu, et donc le résultat des contrôles déjà effectués. Pour utiliser une autre configuration, démarrez un nouvel import guidé.

Étape 2 — Fichiers

Chaque ligne de l’étape Fichiers correspond à un emplacement, c’est-à-dire à l’un des fichiers du tableau ci-dessus. La colonne de gauche rappelle ce que l’emplacement attend, la colonne de droite liste les fichiers qu’il contient déjà.

  • un emplacement simple ne conserve qu’un fichier : pour le remplacer, supprimez-le puis déposez le nouveau ;
  • l’emplacement Opérations accepte plusieurs fichiers, qui s’ajoutent les uns aux autres ; un fichier redéposé sous le même nom remplace le précédent ;
  • les extensions non attendues et les fichiers vides sont refusés avant même d’être envoyés, avec le motif affiché sur l’emplacement concerné.

Renseigner les informations de la situation

La ligne Informations de la situation, en tête de l’étape Fichiers, porte un formulaire : la date de référence, le nom et la référence du portefeuille, l’index d’actualisation et la devise pivot. Le bouton Enregistrer les range sur le brouillon ; aucun fichier n’est écrit, et rien n’est importé avant le lancement de l’import. La Date de référence, l’Index d'actualisation et la Devise pivot (EUR par défaut) sont obligatoires.

Le formulaire ne demande pas de client : c’est celui de la configuration client du brouillon. Il compte encore pour la longueur de la référence du portefeuille, que l’import compose avec lui dans la référence du contexte d’évaluation (IMP-007).

L’Index d'actualisation est une liste déroulante alimentée par la configuration client sélectionnée : elle propose les courbes composées (compoundCurve) et les index déclarés dans indexes, sous le libellé utilisé par la banque. C’est l’index de courbe correspondant qui est enregistré, et non le libellé. Tant qu’aucun index n’est choisi, le formulaire propose l’index par défaut que la configuration associe à la devise pivot (Index d’actualisation par défaut).

Une coche verte indique que les informations sont enregistrées. Après une modification du formulaire, enregistrez à nouveau : l’import ne se lance qu’avec ce qui est enregistré. Un info_*.json n’a plus d’emplacement ; s’il reste dans une archive, il est ignoré (IMP-060).

Note

Si la liste est vide, la configuration client ne référence aucun index : aucune courbe d’actualisation ne peut être construite et son fichier de mapping doit être corrigé au préalable.

Contrôle de chaque fichier

Un fichier est contrôlé pendant son dépôt : l’application le lit avec la configuration client du brouillon, et la réponse au dépôt porte déjà son statut, ses anomalies et le résumé de son contenu (Contrôle d’un fichier au dépôt). Les anomalies s’affichent donc dès que le dépôt se termine, sans attente ni rechargement. La ligne du fichier affiche l’issue du contrôle :

Statut Signification
Vérification… Le contrôle n’a pas encore eu lieu. Ne se voit plus que sur un fichier déposé avant la version actuelle : il est contrôlé à la réouverture du brouillon. S’il reste dans cet état, l’écran le signale au bout de deux minutes ; supprimez-le puis déposez-le à nouveau.
Valide Aucune anomalie bloquante. Le nombre d’avertissements éventuels est indiqué.
n anomalie(s) Le fichier comporte au moins une anomalie de niveau ERROR.

Le lien Afficher les anomalies déplie la liste complète des anomalies du fichier, avec leur niveau, leur message et l’objet ou la référence concernés — le même détail que la liste des anomalies d’un import par archive. La liste s’affiche dans le journal des anomalies : le code de chaque anomalie mène à sa fiche dans la référence des anomalies, et la liste se filtre ou se regroupe par code.

Contenu de chaque fichier

Une fois le contrôle passé, la ligne indique également ce que la solution a effectivement lu dans le fichier : un total, puis une répartition. C’est le moyen le plus simple de vérifier qu’un fichier est bien celui de l’arrêté attendu.

Fichier Total Répartition
Modèle d’écoulement Nombre de stratégies Par type de stratégie (LinearOutflowStrategy, …)
Classification Nombre de lignes de correspondance Par classe IRRBB (ASSET / Retail, …)
Courbes de taux Nombre d’index Nombre de points par index
Balance comptable Nombre de lignes comptables Par classe de compte (le premier chiffre du numéro de compte)
Flux préfixés Nombre de flux Par opération
Opérations Nombre d’opérations Par type de produit (Swap, Loan, …)

Lancer l’import

Le bouton Lancer l'import reste inactif tant qu’un fichier n’est pas vérifié ou est porteur d’anomalies ; un message le rappelle sous la liste des emplacements. Si des emplacements sont encore vides, un clic sur le bouton les énumère au lieu de démarrer l’import, et les emplacements concernés sont signalés dans leur en-tête. Il en va de même des informations de la situation tant qu’elles ne sont pas enregistrées.

L’import démarre ensuite exactement comme un import par archive : la situation apparaît dans la liste avec le statut en cours, puis terminé, ou échec si l’import n’a pas pu construire la situation.

Statut de l’import

L’import se déroule en tâche de fond dans l’application. L’écran reste ouvert et le suit : « La situation est en cours d’import ; cette page en suit l’avancement. » Il relit le statut toutes les 3 secondes et affiche l’issue dès la fin de l’import :

Issue Message
terminé « La situation est importée. »
échec « L’import a échoué avec n erreur(s). », suivi des erreurs de l’import

Les boutons Ouvrir la situation et Retour à la liste mènent ensuite à la situation (et à son journal des anomalies) ou à la liste des situations. Vous pouvez aussi quitter l’écran pendant l’import : il continue, et une notification annonce sa fin. Le détail est dans La tâche d’import.

Reprendre ou rouvrir un brouillon

Le bouton Terminer plus tard quitte l’écran sans rien perdre. Un brouillon apparaît dans la liste des situations avec le badge Brouillon ; le lien Reprendre le brouillon — également disponible dans le menu de la ligne — réouvre l’écran sur l’étape Fichiers.

Un import guidé qui a échoué peut être rouvert en brouillon depuis le menu de sa ligne : les fichiers déjà déposés sont conservés, seuls ceux qui posent problème sont à remplacer. Cette action n’est proposée que pour les situations construites fichier par fichier ; un import par archive doit être relancé depuis son archive.

Note

Un brouillon sans activité depuis 30 jours est purgé automatiquement, avec les fichiers qu’il contient.

Partir d’une archive

À l’étape Configuration, Déposer une archive envoie une archive .zip non vide. Chaque fichier est rangé dans l’emplacement de son rôle, le brouillon s’ouvre sur l’étape Fichiers, et chaque fichier y est contrôlé comme s’il avait été déposé à la main. Rien n’est importé tant que le brouillon n’a pas été relu et soumis.

  • Une archive complète — téléchargée depuis une situation (Archive complète d’une situation) — dit elle-même le rôle de chaque fichier, l’arrêté et la configuration. Il n’est pas nécessaire de choisir une configuration.
  • Une autre archive est lue avec la configuration choisie au-dessus, qui est alors obligatoire. Les fichiers model_* et classification* sont reconnus à leur nom, tous les autres sont rangés dans Opérations : déplacez la balance, les flux préfixés et les courbes dans leur emplacement, puis saisissez et enregistrez les informations de la situation. Un info_*.json de l’archive n’est pas repris.

Archive complète d’une situation

Le bouton Télécharger la situation complète d’une situation produit situation_<référence>_<arrêté>.zip. Cette archive se réimporte telle quelle, dans le même espace ou dans un autre. Elle contient :

Entrée Contenu
situation.json L’arrêté (referenceDate, portfolioName, portfolioReference, pivotCurrency, discountFactorIndex), le rôle de chaque fichier (files : RATE_CURVES, ACCOUNTING, CASHFLOWS, TRANSACTIONS) et la configuration utilisée (configuration : id, name, revision). formatVersion vaut 1.
configuration.json La configuration client à la version utilisée par l’import, avec sa classification et ses modèles d’écoulement.
Les fichiers d’entrée Courbes, balance, flux préfixés et opérations, sous leurs noms d’origine.

Le classeur de classification et le model_*.json n’y figurent pas : configuration.json les remplace.

Au réimport, la configuration de configuration.json est recherchée dans l’espace. Une configuration existante n’est jamais modifiée. La règle appliquée est indiquée à l’ouverture du brouillon.

Règle Condition Configuration utilisée
Même version Même identifiant, même version et même contenu Cette configuration, à cette version
Même mapping Une configuration de l’espace a le même format de données et le même mapping Cette configuration, à sa dernière version
Création Aucune ne correspond Une nouvelle configuration, <nom> (importée le jj/mm/aaaa), créée à partir du fichier
Note

L’API POST /api/v1/import garde le lancement direct de l’import : submit vaut true par défaut, et la tâche se suit comme celle de l’écran (La tâche d’import). Avec une archive complète, configurationId et discountFactorIndex deviennent facultatifs. Avec une autre archive, la requête donne la configuration, l’index, l’arrêté (referenceDate, pivotCurrency, et au besoin portfolioName, portfolioReference) et le rôle des fichiers (fileRoles) ; sans configuration, index, date ou devise, la tâche passe FAIL. submit: false laisse un brouillon, comme l’écran. Une demande qui porte un arrêté sans dire le rôle de chaque fichier est refusée à l’import (IMP-058). Le détail figure dans Informations de la situation.

Détail des fichiers

Informations Générales

Les informations de la situation ne forment plus un fichier : elles se saisissent à l’écran d’import (Renseigner les informations de la situation) et sont enregistrées avec le brouillon. Ce sont les suivantes ; seules les valeurs marquées [*] changent d’ordinaire d’une situation à l’autre.

Champ Contenu Obligatoire
Date de référence (referenceDate) [*] La date d’arrêté de la situation, au format aaaa-mm-jj oui
Nom du portefeuille (portfolioName) Le nom du portefeuille importé, 100 caractères au plus non
Référence du portefeuille (portfolioReference) [*] Une référence du portefeuille, 100 caractères au plus non
Index d'actualisation (discountFactorIndex) La courbe qui actualise les flux oui
Devise pivot (pivotCurrency) La devise des résultats, 3 caractères oui

La date de référence est aussi la date d’évaluation retenue pour la valorisation : il n’y a pas de champ distinct à renseigner.

  • Le client n’est plus saisi : c’est celui de la configuration client. La façon de lire les fichiers est déterminée par le format des données de cette configuration.
  • L’index d’actualisation doit désigner une courbe que la configuration client sait construire (une clé de compoundCurve ou une valeur de indexes). Un index absent ou inconnu est refusé avant que l’import ne démarre, avec la liste des index possibles. Il est enregistré déjà résolu.
  • Les noms des fichiers ne se déclarent plus : chaque fichier est dans son emplacement.

Modèle d’écoulement

Le contenu d’un model_*.json se charge dans la section Modèles d’écoulement de la configuration client ; il n’est plus déposé avec la situation. Il décrit les stratégies d’écoulement appliquées aux postes du bilan qui ne portent pas d’opération financière (dépôts à vue, fonds propres, immobilisations…). Chaque stratégie précise le poste comptable visé, le taux à appliquer, la fréquence et l’horizon d’écoulement :

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

Une ligne de balance écoulée par une stratégie est classée sur la référence de la stratégie sans ses étoiles (291200), qui doit figurer dans l’onglet mapping_compta de la classification, et non sur son propre compte (Import Crédit Logement).

Les stratégies lues sont ensuite consultables dans le sous-onglet Modeled Outflows du détail de la situation.

Classification des transactions

Le classeur se charge dans la section Classification de la configuration client ; il n’est plus déposé avec la situation. C’est un classeur Excel qui relie les catégories comptables de la banque aux classes réglementaires. L’onglet mapping_compta associe chaque catégorie à un couple type d’actif / contrepartie (par exemple ASSET / Retail), et l’onglet mapping_compta_irrbb résout ce couple en code FINREP et en classe IRRBB pour les besoins des modèles EVE et MNI. Une opération reçoit son compte de l’onglet facultatif histo (numéro d’opération → compte) ou, à défaut, du mapping instrumentAccounts de la configuration client (Import Crédit Logement). Une ligne de mapping_compta sans catégorie est signalée par un avertissement et ne classe aucune opération. Les comptes de mapping_compta doivent être des cellules numériques : une ligne dont le compte est du texte est écartée en erreur.

Balances comptables

Extrait des balances comptables à la date d’arrêté, accepté sous deux formes :

  • un classeur Excel (.xlsx), dont l’onglet i1-balance porte la balance ; les colonnes sont, dans l’ordre : date, numéro de compte, libellé du compte, montant ;
  • un fichier texte délimité (.txt ou .csv), sans ligne d’en-tête : la première ligne est déjà une ligne de compte. Le séparateur (;, tabulation, , ou |) est détecté sur cette première ligne, et les colonnes sont, dans l’ordre : numéro de compte, libellé du compte, montant, date au format JJMMAAAA (30062025). Une ligne d’en-tête ajoutée serait lue comme un compte, et écartée en erreur.

Toute autre extension — comme un fichier de balance illisible — interrompt l’import, car les postes modélisés du bilan en dépendent.

Les montants sont lus dans les formats effectivement produits par les systèmes des banques : séparateur décimal , ou ., séparateurs de milliers en espace (y compris les espaces insécables produites par Excel), et notation scientifique. Un numéro de compte texte (comptes hors bilan H96…) est lu comme du texte. Lorsque les deux séparateurs sont présents, le plus à droite est le séparateur décimal (1,234.56 et 1.234,56 valent la même chose). Une cellule vide n’est pas interprétée comme un montant nul : la ligne est signalée en anomalie.

Cash Flows Pré-fixés

Classeur Excel portant les flux déjà fixés des opérations, utilisé en lieu et place du calcul pour les échéances connues. Les flux sont rattachés à l’opération dont ils portent la référence.

Courbes de taux

Le fichier des taux de marché est accepté sous deux formes : un classeur Excel, ou un fichier texte délimité par des points-virgules (.csv ou .txt). Dans les deux cas, une ligne d’en-tête nomme les colonnes — la première ligne du fichier délimité ; dans le classeur, la première ligne d’au moins huit cellules remplies de l’onglet qui porte les colonnes ci-dessous — et les colonnes suivantes, en minuscules, sont obligatoires :

Colonne Contenu
ratename L’index de la courbe (par exemple EONIA, EURIBOR 6M SWAP)
ratedate La date de cotation
timeband La maturité du point de courbe
offer Le taux, exprimé en pourcentage (2,40 pour 2,40 %)
currency La devise de la courbe

Les colonnes supplémentaires du fichier (bid, ratetype, INEO, …) sont ignorées. Dans un classeur, une ligne de moins de huit cellules remplies est ignorée : un classeur réduit aux cinq colonnes obligatoires ne donne aucune courbe (Import : traitements et conversions).

La colonne timeband accepte les libellés suivants ; tout autre libellé fait l’objet d’un avertissement et la ligne est ignorée :

Libellé Point de courbe
ACTUAL Le jour même (point spot)
OVERNIGHT 1 jour
<n> WEEKS / <n> WEEK n semaines
<n> MONTHS / <n> MONTH n mois
<n> YEARS / <n> YEAR n années

Exemple de fichier délimité :

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

Dans un fichier délimité, la date de cotation est au format dd/MM/yyyy HH:mm. Dans un classeur, ratedate doit être une vraie date Excel : une date saisie en texte interrompt l’import (Import Crédit Logement).

Note

Une courbe cotée à plus de 50 jours de la date d’arrêté — avant comme après — fait l’objet d’un avertissement nommant l’écart : la courbe est construite, mais elle ne décrit pas le marché de l’arrêté. Ce contrôle n’est possible qu’à l’import, la date d’arrêté n’étant pas connue lors de la vérification du fichier de taux seul.

Opérations

Les opérations financières sont réparties sur un ou plusieurs fichiers, généralement un par famille de produits (swaps, prêts et emprunts, titres, pensions…). Les colonnes attendues sont celles déclarées dans la partie model de la configuration client, et les valeurs des colonnes de produit et de convention doivent être couvertes par ses mappings. Une colonne nommée dans le mapping doit exister dans le fichier, même vide. Les règles appliquées ligne par ligne au format Crédit Logement — sens des opérations monétaires, base des jambes de swap, encours restant, calls, compte comptable par défaut — sont décrites dans Import Crédit Logement.

Contrôles de cohérence des index

Les courbes de taux sont la source d’erreur la plus fréquente, parce qu’elles font intervenir trois éléments qui doivent s’accorder : la configuration client, le fichier de taux et les opérations. Trois contrôles y veillent.

  1. Chaque index mappé doit exister dans le fichier de taux. Toutes les valeurs de indexes et toutes les courbes élémentaires des compoundCurve de la configuration client sont recherchées dans le fichier de taux dès sa lecture. Un index introuvable fait l’objet d’une erreur portée sur le fichier de taux, qui nomme l’index manquant et les libellés de la banque qui le visent. La comparaison ignore la casse et les espaces superflus.
  2. L’index d’actualisation doit être connu. Un index absent ou que la configuration client ne sait pas construire est refusé avant le démarrage de l’import (voir plus haut).
  3. Une opération citant un taux non mappé est conservée. Lorsqu’une opération porte un libellé de taux absent de indexes, elle n’est plus rejetée : un avertissement nommant le libellé à ajouter est émis, et l’opération est valorisée. Une opération à taux fixe l’est sans changement ; une opération à taux variable dont le libellé désigne malgré tout une courbe du fichier utilise cette courbe ; à défaut, elle est valorisée au taux qu’elle porte actuellement. Le mapping reste à compléter, mais l’arrêté est exploitable et le nombre d’opérations du portefeuille reste juste.
Note

Les mappings de produit et de classification restent bloquants : une opération dont le produit n’est pas mappé est rejetée, car la solution ne saurait pas quel modèle de calcul lui appliquer.

Exemple de situation d’import

Télécharger un exemple de fichier d’import.

import_example.zip.

Avertissement

Cette archive d’exemple n’est plus importable en l’état : son RT_indices.txt suit l’ancien format index;valeur;date sans ligne d’en-tête, et son mapping_cl.json mappe tous les libellés sur des index (ISWAP, ISAP) que le fichier de taux ne porte pas. Elle ne contient plus d’info_*.json : ses informations de la situation se saisissent à l’écran (date de référence 2024-12-31, portefeuille Swap Portfolio, référence ptf_swap_1_31_12_24, index DISCOUNT_EUR, devise EUR). Elle reste utile comme illustration de la composition d’une situation, mais pas comme jeu d’essai ; référez-vous aux formats décrits ci-dessus.