Header row must match these names exactly (lowercase). Download an empty template or download an example with sample rows.
| Column | Type / Required | Example | Description |
|---|---|---|---|
| company_regno | string required | 16396632 |
Registration number of the legal entity the entry belongs to. Must match an existing registration_number in dim_company. |
| transaction_date | ISO date required | 2025-01-15 |
Date the transaction is posted. Must be formatted as YYYY-MM-DD; locale formats like 01.02.2025 are rejected. |
| voucher_id | string required | JV-2025-0001 |
Groups lines into one balanced journal entry. Client-defined. The sum of debits must equal the sum of credits for every voucher_id, otherwise the batch is rejected. |
| account_code | string required | 612100 |
GL account code the line posts to. Must already exist in core_account. |
| debit | decimal one of | 500.00 |
Debit amount in the transaction currency. Exactly one of debit or credit must be populated per row; both must be non-negative. |
| credit | decimal one of | 500.00 |
Credit amount in the transaction currency. Exactly one of debit or credit must be populated per row; both must be non-negative. |
| description | string | Office supplies |
Free-text description of the line. Shown in ledger views and report drill-downs. |
| counterparty_regno | string | 10234567 |
Preferred way to link a counterparty. Matched against dim_company.registration_number. If supplied but not found, the row imports with counterparty = NULL and a warning is logged. |
| counterparty_name | string | Sample Supplier OÜ |
Fallback used only when counterparty_regno is empty. Requires an exact match against dim_company.company_name; no fuzzy matching. |
| project_code | string | PROJ-ALFA |
Project allocation. Must match dim_project.project_code exactly. Unmatched values import the row without a project and log a warning. |
| object_code | string | ADM |
Object / categorization tag. Must match dim_object.object_code exactly. Unmatched values import without an object and log a warning. |
| cost_center | string | HEADOFFICE |
Free-text cost-center label. Stored as-is for reference; not yet linked to a dimension. |
| vat_rate | decimal | 24 |
VAT rate percentage (e.g. 24 for 24%). Informational; the system does not recompute VAT. |
| currency | ISO 4217 | EUR |
Three-letter transaction currency code. Defaults to EUR when blank. Non-alphabetic values are rejected. |
| fx_rate | decimal if currency != EUR | 0.97 |
Exchange rate from the transaction currency to base currency (EUR). Required whenever currency is not EUR; used to compute the base-currency amounts stored in reports. |
| external_reference | string | INV-2025-042 |
Original document reference (invoice nr, voucher nr from the source system, etc.) for audit and drill-down. |
Companies (dim_company) and accounts (core_account) are maintained
in SharePoint, not in this app. Uploading a CSV for an entity that isn't yet registered will
fail with COMPANY_NOT_FOUND or ACCOUNT_NOT_FOUND. Follow the steps
below before your first upload for a new entity.
Add a row to the SharePoint list azure_entity_relationships:
company_regno in your CSV must match this value exactly)You have two options depending on whether the entity uses the group chart of accounts or its own.
A. Entity uses the group chart — no account registration needed. Just make sure the account codes you list in the CSV already exist in azure_kontserni_kontoplaan.
B. Entity has its own chart (e.g. a Finnish subsidiary with Finnish account numbering) — add one row per account to the SharePoint list azure_indi_account_mapping_sp:
subsidiary_id — the entity's registration number (same as step 1)account / account_name — the entity's own account code and name (what your CSV uses)neo_acc_no / neo_acc_name — the group account the entity code translates toThe pipeline translates subsidiary account codes to group codes automatically during migration. Your CSV can use the local codes; reports will show the group codes.
The Azure / SharePoint import runs nightly at 02:30, or can be triggered manually from
Azure / SharePoint. After the sync completes,
run a full migration from the dashboard.
Only after the full migration completes will dim_company and
core_account_mappings reflect your new SharePoint rows.
Come back here, upload the file. Validation should now pass for the newly-registered entity. If it still fails, the batch detail page lists every offending row with the field and value that caused the error.
COMPANY_NOT_FOUND — registration number in the CSV isn't in dim_company. Finish step 1 + step 3.ACCOUNT_NOT_FOUND — account code isn't in the group chart and no mapping exists for this entity. Finish step 2 + step 3.VOUCHER_UNBALANCED — debits and credits don't match within a voucher. Fix the source data, then re-upload with a new batch name.FX_RATE_MISSING — non-EUR currency without an exchange rate. Add fx_rate for those rows.