← Back to batches

Upload Manual GL Batch

Must be unique. You won't be able to reuse a name even after deletion, so pick something descriptive and dated.
Max 20 MB. UTF-8, comma-delimited. Header row required.

Expected columns

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.

Registering new companies and accounts

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.

1Register the company in SharePoint

Add a row to the SharePoint list azure_entity_relationships:

2Register the chart of accounts

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:

The pipeline translates subsidiary account codes to group codes automatically during migration. Your CSV can use the local codes; reports will show the group codes.

3Wait for sync and run a full migration

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.

4Upload the CSV

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.

Common errors and what to do: