Skip to main content
Version: 🚧 Next

CSV import

What does the CSV import do?​

The CSV import creates or updates data of a front office in bulk from CSV files: parties, dossiers, the links between them (related parties, members and UBOs, signatories, insured parties, related dossiers), additional contact information of parties, partner users of the front office, and information exchanges for the counterparties of dossiers.

It is typically used to migrate the data of an FSP from its own system into Harmoney in one go, and to keep it in sync afterwards through a recurring feed. Each kind of data has its own import template; a CSV file always corresponds to exactly one template.

The same templates are available in two ways:

  • Manually, through the Import button of the front-office application. A popup asks for the template, the delimiter and the file. When the import is finished, a result file can be downloaded (see Processing and result file).
  • Automatically, through the CSV Import Scheduled Provider, which picks the file up from an SFTP/FTP server on a schedule.

Where to find the import button​

Page in the front-office applicationTemplatesRequired role / permission
Parties listParties, Party related parties, Party members and UBOs, Party contact information, Party signatoriesRole PARTNER_MANAGER
Dossiers listDossiers, Dossier related parties, Dossier responsible parties, Dossier counterparties, Dossier insured parties, Dossier related dossiersPermission IMPORT on FSP_DOSSIER_SET
Users of the front office (management)Partner usersPermission IMPORT on FSP_MANAGEMENT_USER

The Financial service providers template is an administrator feature, available in the administrator application only.

File format​

  • One CSV file per template, UTF-8 encoded, at most 50 MB.
  • The first row contains the column names. Column names are case-sensitive and must be written exactly as documented below.
  • The delimiter is a comma or a semicolon and is selected when uploading the file (or configured). Every row uses the same delimiter; the first row must contain at least two columns, otherwise the delimiter is rejected.
  • Values containing the delimiter, a newline or a double quote are surrounded by double quotes; a double quote inside a value is doubled ("").
  • The required columns of a template must be present in the header, otherwise the whole file is refused before any row is processed. Optional columns may be left out completely. Remove the columns for which no data is available rather than leaving them empty.
  • An empty cell means "no value": the import never removes existing data. When a row updates an existing record, only the cells with a value are applied, metadata columns are merged into the existing metadata and pipe-separated lists replace the existing list.

Value formats:

TypeFormat
Dateyyyy-MM-dd, for example 2026-01-31.
Booleantrue or false.
DecimalComma as decimal separator, for example 1250,50. Dots, spaces and the euro sign are ignored.
Country codeISO 3166-1 alpha-2, uppercase, for example BE.
LanguageISO 639-1 code, for example nl.
Phone numberInternational format, for example +32470010203.
E-mail addressMust be a valid e-mail address.
MetadataA JSON object with key-value pairs, for example {"segment":"retail"}. Empty or blank values inside the JSON are treated as no value.
ListValues separated by a pipe (`
ReferenceThe external reference of a party, dossier or FSP, as known in the system of the front office. Used to find existing records.

Processing and result file​

Rows are processed one by one, each in its own transaction: a row that fails is reported and skipped, the other rows are imported. Rows are matched with existing data through their external references, so a file can be re-imported without creating duplicates.

Every import produces a result file csv_import_<date>.csv with one line per row of the input file:

ColumnValue
row_indexIdentifies the row of the input file the message refers to; rows are numbered in file order.
messageOK, or the reason why the row was not imported (for example Validation error on row 12: Dossier reference invalid).
durationThe processing time of the row in milliseconds.

In the front-office application the result file is offered for download when the import has finished. For the scheduled provider it is stored as a document of the front office.

  1. Prepare one sheet per template, starting from the column lists below, and export every sheet to its own CSV file.
  2. Open each CSV file in a text editor and check the formats (dates, country codes, company numbers, decimal separators) before importing.
  3. Import on a test environment with a small, representative sample (five to ten parties and dossiers) and correct the files based on the result file.
  4. Import in this order: parties first, then dossiers, then the links between parties and dossiers (related parties, members, insured parties, related dossiers, responsible parties or counterparties).
  5. Repeat on production once the sample imports without errors.

Templates​

Parties​

Template HARMONEY_PARTY_IMPORT. Creates or updates the parties of the front office. One row can contain up to one company, one indivision, one partnership and up to five individuals; the columns of an individual are prefixed with individual1_ to individual5_.

Required: there are no mandatory columns, but every row must contain at least one party: a reference or a name of an individual (individual1_reference or individual1_lastname), a company (company_reference or company_name), an indivision (indivision_reference or indivision_name) or a partnership (partnership_reference or partnership_name).

Rules:

  • A party is created when its reference is unknown and updated when it exists. A reference can be used for one party only: a company, indivision or partnership reference cannot be equal to an individual reference, and the individuals of a row must have different references.
  • The individuals of a row become the members of the indivision or partnership of that row, each with an equal percentage.
  • When a row contains individual1_… and individual2_… columns and no company, indivision or partnership, an indivision is created for the two individuals, named <lastname 1> - <lastname 2>.
  • The type of a party that is the client of a dossier cannot be changed.
  • indivision_name is limited to 255 characters.

Columns of an individual (replace individualN_ by individual1_ … individual5_):

ColumnType
individualN_referenceReference
individualN_firstname, individualN_lastnameText
individualN_genderMALE or FEMALE
individualN_languageLanguage
individualN_mobile_phonePhone number
individualN_emailE-mail address
individualN_date_of_birthDate
individualN_place_of_birthText
individualN_country_of_birth, individualN_nationalityCountry code
individualN_additional_nationalitiesList of country codes
individualN_marital_statusText
individualN_marital_status_sinceDate
individualN_address_country_code, individualN_address_full_street, individualN_address_postal_code, individualN_address_city, individualN_address_subdivisionOfficial address
individualN_postal_address_country_code, individualN_postal_address_full_street, individualN_postal_address_postal_code, individualN_postal_address_city, individualN_postal_address_subdivisionPostal address
individualN_national_registration_numberText
individualN_card_numberText
individualN_card_expiry_dateDate
individualN_social_stateText
individualN_social_state_sinceDate
individualN_occupationText
individualN_occupation_sinceDate
individualN_employer_name, individualN_employer_addressText
individualN_nace_codeText
individualN_stateText
individualN_state_sinceDate
individualN_legal_capacityText
individualN_metadata, individualN_external_metadataMetadata

Columns of a company:

ColumnType
company_referenceReference
company_nameText
company_number, company_legal_form, company_type, company_nace_codeText
company_address_country_code, company_address_full_street, company_address_postal_code, company_address_city, company_address_subdivisionOfficial address
company_postal_address_country_code, company_postal_address_full_street, company_postal_address_postal_code, company_postal_address_city, company_postal_address_subdivisionPostal address
company_websiteText
company_phonePhone number
company_emailE-mail address
company_establishment_country_codeCountry code
company_establishment_dateDate
company_vat_liable, company_lei_liableBoolean
company_vat_number, company_lei_numberText
company_ibanIBAN without spaces; creates a bank account on the company
company_stateText
company_state_sinceDate
company_metadata, company_external_metadataMetadata

Columns of an indivision:

ColumnType
indivision_referenceReference
indivision_name, indivision_typeText
indivision_postal_address_country_code, indivision_postal_address_full_street, indivision_postal_address_postal_code, indivision_postal_address_city, indivision_postal_address_subdivisionPostal address
indivision_stateText
indivision_state_sinceDate
indivision_metadata, indivision_external_metadataMetadata

Columns of a partnership:

ColumnType
partnership_referenceReference
partnership_name, partnership_type, partnership_registration_numberText
partnership_address_country_code, partnership_address_full_street, partnership_address_postal_code, partnership_address_city, partnership_address_subdivisionOfficial address
partnership_postal_address_country_code, partnership_postal_address_full_street, partnership_postal_address_postal_code, partnership_postal_address_city, partnership_postal_address_subdivisionPostal address
partnership_stateText
partnership_state_sinceDate
partnership_metadata, partnership_external_metadataMetadata

Dossiers​

Template HARMONEY_DOSSIER_IMPORT. Creates or updates dossiers for existing clients of the front office.

ColumnRequiredType / meaning
client_referenceyesReference of an existing party, the client of the dossier.
dossier_nameyesName of the dossier.
dossier_numberyesNumber of the dossier, unique within the front office.
dossier_typeyesIdentifier of the dossier type.
dossier_productyesIdentifier of the dossier service (product).
dossier_referencenoExternal reference of the dossier. An existing dossier with this reference is updated; the other link templates refer to dossiers through this reference.
dossier_start_datenoDate. Creation date of the dossier.
dossier_statusnoDossier status. On an existing dossier the status is changed without executing the actions linked to the status change.
dossier_lifecyclenoLifecycle of the dossier.
dossier_internal_infonoNotes on the dossier.
dossier_intermediary_referencenoReference of the intermediary FSP linked to the dossier.
dossier_metadata, dossier_external_metadatanoMetadata.
dossier_external_sourcenoExternal source of the dossier.
dossier_task_identifiersnoList of task identifiers.
dossier_rba_result_manual_assessmentnoManual assessment of the risk-based assessment.
dossier_rba_result_commentsnoComment on the manual assessment.
dossier_transaction_amountnoDecimal. Amount of the transaction of the dossier.
dossier_transaction_currencynoCurrency of the transaction (3 characters).
dossier_transaction_metadatanoMetadata of the transaction.
dossier_premiumnoDecimal. Insurance dossiers: value of the premium.
dossier_periodicitynoInsurance dossiers: payment frequency of the premium.
dossier_reservenoDecimal. Insurance dossiers: value of the reserve.
dossier_reserve_datenoDate. Insurance dossiers: date of the reserve value.
ibannoInsurance dossiers: IBAN.
dossier_account_typenoInvestment dossiers: type of the account.

Rules:

  • The combination of dossier_type, dossier_product and the type of the client must correspond to a dossier definition of the front office.
  • The client, type and product of an existing dossier cannot be changed.

Template HARMONEY_PARTY_RELATED_PARTIES_IMPORT. Links a related party to a party. Both parties must exist; a party cannot be related to itself.

ColumnRequiredMeaning
party_referenceyesReference of the party.
related_party_referenceyesReference of the related party.
relation_typenoIdentifier of the relation type.
metadatanoMetadata of the relation.
commentsnoComment on the relation.

Party signatories​

Template HARMONEY_PARTY_SIGNATORIES_IMPORT. Links a signatory to a party. Both parties must exist; a party cannot be its own signatory. Only available through the scheduled provider.

ColumnRequiredMeaning
party_referenceyesReference of the party.
signatory_party_referenceyesReference of the signatory party.
signatory_typenoType of signatory.
metadatanoMetadata of the signatory link.

Party members and UBOs​

Template HARMONEY_PARTY_OWNERS_IMPORT. Adds an individual as member or UBO of a company, indivision or partnership. Both parties must exist; the party cannot be an individual and the member must be an individual.

ColumnRequiredMeaning
party_referenceyesReference of the party.
party_member_referenceyesReference of the individual added as member or UBO.
member_percentagenoDecimal between 0 and 100.
ubo_typenoType of UBO.
member_metadatanoMetadata of the membership.

Party contact information​

Template HARMONEY_PARTY_CONTACT_INFO_IMPORT. Adds an additional e-mail address, phone number or address to an existing party.

ColumnRequiredMeaning
party_referenceyesReference of the party.
typeyesEMAIL, PHONE or ADDRESS.
emailfor EMAILThe e-mail address. Not allowed for the other types.
phonefor PHONEThe phone number. Not allowed for the other types.
address_country_code, address_full_street, address_postal_code, address_city, address_subdivisionfor ADDRESSAt least one of them. Not allowed for the other types.
sub_typenoSub type of the contact information.
metadatanoMetadata of the contact information.

Template HARMONEY_DOSSIER_RELATED_PARTIES_IMPORT. Links a related party to a dossier. The dossier and the party must exist.

ColumnRequiredMeaning
dossier_referenceyesReference of the dossier.
related_party_referenceyesReference of the related party.
relation_typenoIdentifier of the relation type.
metadatanoMetadata of the relation.
commentsnoComment on the relation.

Dossier responsible parties​

Template HARMONEY_DOSSIER_RESPONSIBLE_PARTIES_IMPORT. Adds a responsible party to a dossier, for front offices using the responsibility matrix of the Investor Flow module. The dossier and the party must exist.

ColumnRequiredMeaning
dossier_referenceyesReference of the dossier.
responsible_party_referenceyesReference of the responsible party.

Dossier counterparties​

Template HARMONEY_DOSSIER_COUNTERPARTIES_IMPORT. Creates an information exchange on a dossier for an individual or intermediary counterparty, for front offices using the Information Exchange module.

ColumnRequiredMeaning
dossier_referenceyesReference of the dossier.
counterparty_referenceyesReference of the counterparty: the party reference of an individual, or the external reference of an intermediary FSP.
counterparty_typenoINDIVIDUAL (default) or INTERMEDIARY.

For each row:

  • The information exchange is created in status CREATED. The counterparty is not invited by the import; the information exchange is completed afterwards from the dossier page or through the configured automated actions.
  • When the counterparty already has a pending or a completed information exchange on the dossier, the row is reported as OK and nothing changes. The import can therefore be re-run with the same file.
  • When the dossier has a pending information exchange for another counterparty, that one is cancelled (rejection reason Replaced by CSV import, without executing the actions linked to the status change) and a new information exchange is created for the imported counterparty. Two rows for the same dossier thus end with the counterparty of the last row.
  • The dossier must be in a status in which an information exchange can be created, and the flow configuration of the dossier definition must support the counterparty type; otherwise the row is reported with an error.

Dossier insured parties​

Template HARMONEY_DOSSIER_INSURED_PARTIES_IMPORT. Links an insured party to a dossier. The dossier and the party must exist.

ColumnRequiredMeaning
dossier_referenceyesReference of the dossier.
insured_party_referenceyesReference of the insured party.

Template HARMONEY_DOSSIER_RELATED_DOSSIERS_IMPORT. Links a dossier to another dossier. Both dossiers must exist; a dossier cannot be related to itself.

ColumnRequiredMeaning
dossier_referenceyesReference of the dossier.
related_dossier_referenceyesReference of the related dossier.

Partner users​

Template HARMONEY_PARTNER_USER_IMPORT. Creates the users of the front office and assigns their roles. All columns are required.

ColumnMeaning
partner_first_nameFirst name of the user.
partner_last_nameLast name of the user.
partner_genderMALE or FEMALE.
partner_language_isoLanguage of the user.
partner_emailE-mail address of the user, must be valid.
partner_mobile_phoneMobile phone number of the user, in international format.
partner_rolesList of role identifiers. At least one role; every role must be a role allowed for the front office.

Financial service providers​

An administrator can import financial service providers in the administrator application. The columns are prefixed with financial_sp_: financial_sp_name (required), financial_sp_external_reference, financial_sp_language, financial_sp_email, financial_sp_phone, financial_sp_website, financial_sp_enterprise_number, financial_sp_fsma_number, financial_sp_legal_person_register, financial_sp_address_full_street, financial_sp_address_postal_code, financial_sp_address_city, financial_sp_address_country_code, financial_sp_definition_identifier (identifier of the FSP definition to apply) and financial_sp_external_metadata.