Consolidation
Group consolidation: the group structure and its approval, a run that translates the subsidiaries to the reporting currency (IAS 21) and aggregates them, the translated trial balances, the group statements before eliminations and the translation reserve roll-forward.
GET /v1/consolidation-groups
List the consolidation groups
The organization's groups by code, each with the latest approved version of every subsidiary, the member versions that wait for a second person and how many runs it has.
| Required scope | read (admin implies every scope) |
| Operation id | list_groups_v1_consolidation_groups_get |
Parameters
| In | Name | Type | Required | Description |
|---|---|---|---|---|
| query | limit |
integer | At most this many rows. (min 1; max 500; default 100) |
Example request
curl "$ERP_URL/v1/consolidation-groups" \
-H "Authorization: Bearer $ERP_KEY"
Responses
| Status | Meaning | Body |
|---|---|---|
| 200 | OK | array of GroupOut |
| 401 | Missing or invalid API key (unauthorized). |
ErrorEnvelope |
| 403 | The caller lacks the required scope (missing_right, with scope), the key belongs to no person where a person is needed (forbidden), or the approval policy denies the action (policy_denied, with action and rule_id). |
ErrorEnvelope |
| 422 | Validation failed: the error envelope (validation_failed). For a malformed body or parameter its message is in sentences ("Line 2: the quantity must be above zero") and fields lists each error with pydantic's loc, type and msg beside its sentence (message) and its parts, to word it in another language: items (name and number from 1: line 2), field (its name as sent) and the rule it breaks with its limit, count and choices (none for a validator's own sentence); FastAPI's own detail list stays beside the envelope. |
HTTPValidationError |
Example response (shape)
[
{
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"code": "string",
"name": "string",
"parent_entity": "string",
"reporting_currency": "string",
"framework": "fer",
"framework_verified": true,
"framework_implemented": true,
"goodwill_policy": "amortise",
"goodwill_years": 1,
"ic_tolerance_amount": "string",
"members": [
{
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"group": "string",
"entity": "string",
"entity_name": "string",
"currency": "string",
"version": 1,
"ownership_percent": "string",
"method": "full",
"control_basis": "string",
"goodwill_policy": "amortise",
"acquired_on": "2026-09-21",
"consolidated_from": "2026-09-21",
"effective_from": "2026-09-21",
"corrects_version": null,
"acquisition_cost": null,
"acquisition_cost_currency": null,
"net_assets_at_acquisition": null,
"investment_account": null,
"approval_id": null,
"requested_by": {},
"approved_by": {},
"approved_at": "2026-09-21T09:30:00Z"
}
],
"pending": [
{
"approval_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"entity": "string",
"ownership_percent": "string",
"consolidated_from": "2026-09-21",
"requested_by": {},
"requested_at": "2026-09-21T09:30:00Z"
}
],
"runs": 1,
"created_by": {},
"created_at": "2026-09-21T09:30:00Z"
}
]
POST /v1/consolidation-groups
Create a consolidation group
Create a group: a parent entity, the reporting currency and the framework (ifrs, fer or
hgb). A human does it (the policy action approve_group_structure denies agents with 403
policy_denied). The reporting currency is the parent's functional currency in this version.
The goodwill policy and the useful life of goodwill must be ones the framework allows; a life
left empty is the framework's for goodwill whose life cannot be determined (5 years under
fer, 10 under hgb). The group has no subsidiary until a member version is
requested (POST /v1/consolidation-groups/{group}/members) and approved by a second person.
409 when the code is taken. Needs an Idempotency-Key.
| Required scope | draft (admin implies every scope) |
| Idempotency-Key | required |
| Operation id | create_group_v1_consolidation_groups_post |
Request body
application/json (required): GroupInput
| Field | Type | Required | Description |
|---|---|---|---|
code |
string or null | The group's own code, unique in the organization (letters, digits, ., _, -, at most 30 characters). Omitted: made from the name (Demo Group is DEMO-GROUP, with -2 when taken). (pattern ^[A-Za-z0-9][A-Za-z0-9._-]{0,29}$) |
|
name |
string | yes | The group's name. (min length 1; max length 200) |
parent_entity |
string | yes | Code of the parent entity: the entity that controls the others. It is in the group without being a member, and is not translated. |
reporting_currency |
string or null | The presentation currency (ISO 4217). In this version it is the parent's functional currency: the parent is carried over unchanged. Omitted: that currency. (pattern ^[A-Z]{3}$) |
|
framework |
"fer" | "hgb" | "ifrs" |
yes | The framework the group reports under: ifrs, fer (Swiss GAAP FER 30) or hgb (sections 290 to 315e HGB). A run under a framework whose rules have not been checked against its standard is refused (framework_unverified, framework_not_implemented); today all three run. |
goodwill_policy |
"amortise" | "impairment_only" | "offset_equity" or null |
How goodwill is treated: impairment_only (IFRS), offset_equity (FER) or amortise (FER, HGB); default: the framework's first. It must be one the framework allows. |
|
goodwill_years |
integer or null | The useful life of goodwill in years, for the policies that take one: amortise, and under fer also offset_equity (the notes show a theoretical capitalisation over it). Left empty, the framework's life for goodwill whose life cannot be determined: 5 years under fer, 10 under hgb. At most 20; null for impairment_only. (min 1; max 20) |
|
ic_tolerance_amount |
decimal string | The difference between two sides of an intragroup balance, or of intragroup income and expense, that is still accepted, in the reporting currency: a residual of an elimination whose sides do not agree is the blocking exception ic_difference above it and a warning within it. (min 0; default "1") |
Example request
curl -X POST "$ERP_URL/v1/consolidation-groups" \
-H "Authorization: Bearer $ERP_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"code": "DEMO",
"framework": "ifrs",
"name": "Demo Group",
"parent_entity": "CH01",
"reporting_currency": "CHF"
}'
Responses
| Status | Meaning | Body |
|---|---|---|
| 201 | Created | GroupOut |
| 401 | Missing or invalid API key (unauthorized). |
ErrorEnvelope |
| 403 | The caller lacks the required scope (missing_right, with scope), the key belongs to no person where a person is needed (forbidden), or the approval policy denies the action (policy_denied, with action and rule_id). |
ErrorEnvelope |
| 409 | The request conflicts with the data: an Idempotency-Key reused with a different request, a closed period, or an integrity rule of the database (conflict, integrity_violation). |
ErrorEnvelope |
| 422 | Validation failed: the error envelope (validation_failed). For a malformed body or parameter its message is in sentences ("Line 2: the quantity must be above zero") and fields lists each error with pydantic's loc, type and msg beside its sentence (message) and its parts, to word it in another language: items (name and number from 1: line 2), field (its name as sent) and the rule it breaks with its limit, count and choices (none for a validator's own sentence); FastAPI's own detail list stays beside the envelope. |
HTTPValidationError |
Example response (shape)
{
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"code": "string",
"name": "string",
"parent_entity": "string",
"reporting_currency": "string",
"framework": "fer",
"framework_verified": true,
"framework_implemented": true,
"goodwill_policy": "amortise",
"goodwill_years": 1,
"ic_tolerance_amount": "string",
"members": [
{
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"group": "string",
"entity": "string",
"entity_name": "string",
"currency": "string",
"version": 1,
"ownership_percent": "string",
"method": "full",
"control_basis": "string",
"goodwill_policy": "amortise",
"acquired_on": "2026-09-21",
"consolidated_from": "2026-09-21",
"effective_from": "2026-09-21",
"corrects_version": 1,
"acquisition_cost": "string",
"acquisition_cost_currency": "string",
"net_assets_at_acquisition": "string",
"investment_account": "string",
"approval_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"requested_by": {},
"approved_by": {},
"approved_at": "2026-09-21T09:30:00Z"
}
],
"pending": [
{
"approval_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"entity": "string",
"ownership_percent": "string",
"consolidated_from": "2026-09-21",
"requested_by": {},
"requested_at": "2026-09-21T09:30:00Z"
}
],
"runs": 1,
"created_by": {},
"created_at": "2026-09-21T09:30:00Z"
}
GET /v1/consolidation-groups/{group}
Get a consolidation group
One group: the framework (and whether its sources are verified, so that a run is allowed), the latest approved version of every subsidiary and the versions that wait for approval. 404 for an unknown group.
| Required scope | read (admin implies every scope) |
| Operation id | get_group_v1_consolidation_groups__group__get |
Parameters
| In | Name | Type | Required | Description |
|---|---|---|---|---|
| path | group |
string | yes | Code or id of the consolidation group (GET /v1/consolidation-groups). |
Example request
curl "$ERP_URL/v1/consolidation-groups/DEMO" \
-H "Authorization: Bearer $ERP_KEY"
Responses
| Status | Meaning | Body |
|---|---|---|
| 200 | OK | GroupOut |
| 401 | Missing or invalid API key (unauthorized). |
ErrorEnvelope |
| 403 | The caller lacks the required scope (missing_right, with scope), the key belongs to no person where a person is needed (forbidden), or the approval policy denies the action (policy_denied, with action and rule_id). |
ErrorEnvelope |
| 404 | The resource does not exist, or belongs to another organization (not_found). |
ErrorEnvelope |
| 422 | Validation failed: the error envelope (validation_failed). For a malformed body or parameter its message is in sentences ("Line 2: the quantity must be above zero") and fields lists each error with pydantic's loc, type and msg beside its sentence (message) and its parts, to word it in another language: items (name and number from 1: line 2), field (its name as sent) and the rule it breaks with its limit, count and choices (none for a validator's own sentence); FastAPI's own detail list stays beside the envelope. |
HTTPValidationError |
Example response (shape)
{
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"code": "string",
"name": "string",
"parent_entity": "string",
"reporting_currency": "string",
"framework": "fer",
"framework_verified": true,
"framework_implemented": true,
"goodwill_policy": "amortise",
"goodwill_years": 1,
"ic_tolerance_amount": "string",
"members": [
{
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"group": "string",
"entity": "string",
"entity_name": "string",
"currency": "string",
"version": 1,
"ownership_percent": "string",
"method": "full",
"control_basis": "string",
"goodwill_policy": "amortise",
"acquired_on": "2026-09-21",
"consolidated_from": "2026-09-21",
"effective_from": "2026-09-21",
"corrects_version": 1,
"acquisition_cost": "string",
"acquisition_cost_currency": "string",
"net_assets_at_acquisition": "string",
"investment_account": "string",
"approval_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"requested_by": {},
"approved_by": {},
"approved_at": "2026-09-21T09:30:00Z"
}
],
"pending": [
{
"approval_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"entity": "string",
"ownership_percent": "string",
"consolidated_from": "2026-09-21",
"requested_by": {},
"requested_at": "2026-09-21T09:30:00Z"
}
],
"runs": 1,
"created_by": {},
"created_at": "2026-09-21T09:30:00Z"
}
GET /v1/consolidation-groups/{group}/checklist
Get the close checklist of a group
The group close checklist at a month end, in the shape of an entity's checklist (pass,
warn, fail, n/a): the member periods are closed, every intercompany relationship between
two members agrees, and, from the latest run at the date, every rate is available, every
account maps, every elimination agrees within the tolerance, the translation reserve ties and
the balance sheet balances. A run older than the books is a warning on run. The checks of
later versions (manual adjustments, finalising, non-controlling interests) are n/a. ready
is true when nothing fails. 422 when the date is not a month end.
| Required scope | read (admin implies every scope) |
| Operation id | get_checklist_v1_consolidation_groups__group__checklist_get |
Parameters
| In | Name | Type | Required | Description |
|---|---|---|---|---|
| path | group |
string | yes | Code or id of the consolidation group (GET /v1/consolidation-groups). |
| query | as_of |
string (date) | yes | The group date: a month end (YYYY-MM-DD). |
Example request
curl "$ERP_URL/v1/consolidation-groups/DEMO/checklist?as_of=2026-09-30" \
-H "Authorization: Bearer $ERP_KEY"
Responses
| Status | Meaning | Body |
|---|---|---|
| 200 | OK | GroupChecklist |
| 401 | Missing or invalid API key (unauthorized). |
ErrorEnvelope |
| 403 | The caller lacks the required scope (missing_right, with scope), the key belongs to no person where a person is needed (forbidden), or the approval policy denies the action (policy_denied, with action and rule_id). |
ErrorEnvelope |
| 404 | The resource does not exist, or belongs to another organization (not_found). |
ErrorEnvelope |
| 422 | Validation failed: the error envelope (validation_failed). For a malformed body or parameter its message is in sentences ("Line 2: the quantity must be above zero") and fields lists each error with pydantic's loc, type and msg beside its sentence (message) and its parts, to word it in another language: items (name and number from 1: line 2), field (its name as sent) and the rule it breaks with its limit, count and choices (none for a validator's own sentence); FastAPI's own detail list stays beside the envelope. |
HTTPValidationError |
Example response (shape)
{
"group": "string",
"as_of": "2026-09-21",
"run": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"run_version": 1,
"ready": true,
"checks": [
{
"id": "string",
"title": "string",
"status": "fail",
"detail": "string",
"code": "string",
"details": {}
}
]
}
GET /v1/consolidation-groups/{group}/members
List the member versions of a group
Every approved version of every subsidiary, by entity and version: who requested and who approved it, the share, the control basis and the dates. Versions are append-only; a change is a new version.
| Required scope | read (admin implies every scope) |
| Operation id | list_members_v1_consolidation_groups__group__members_get |
Parameters
| In | Name | Type | Required | Description |
|---|---|---|---|---|
| path | group |
string | yes | Code or id of the consolidation group (GET /v1/consolidation-groups). |
Example request
curl "$ERP_URL/v1/consolidation-groups/DEMO/members" \
-H "Authorization: Bearer $ERP_KEY"
Responses
| Status | Meaning | Body |
|---|---|---|
| 200 | OK | array of MemberOut |
| 401 | Missing or invalid API key (unauthorized). |
ErrorEnvelope |
| 403 | The caller lacks the required scope (missing_right, with scope), the key belongs to no person where a person is needed (forbidden), or the approval policy denies the action (policy_denied, with action and rule_id). |
ErrorEnvelope |
| 404 | The resource does not exist, or belongs to another organization (not_found). |
ErrorEnvelope |
| 422 | Validation failed: the error envelope (validation_failed). For a malformed body or parameter its message is in sentences ("Line 2: the quantity must be above zero") and fields lists each error with pydantic's loc, type and msg beside its sentence (message) and its parts, to word it in another language: items (name and number from 1: line 2), field (its name as sent) and the rule it breaks with its limit, count and choices (none for a validator's own sentence); FastAPI's own detail list stays beside the envelope. |
HTTPValidationError |
Example response (shape)
[
{
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"group": "string",
"entity": "string",
"entity_name": "string",
"currency": "string",
"version": 1,
"ownership_percent": "string",
"method": "full",
"control_basis": "string",
"goodwill_policy": "amortise",
"acquired_on": "2026-09-21",
"consolidated_from": "2026-09-21",
"effective_from": "2026-09-21",
"corrects_version": 1,
"acquisition_cost": "string",
"acquisition_cost_currency": "string",
"net_assets_at_acquisition": "string",
"investment_account": "string",
"approval_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"requested_by": {},
"approved_by": {},
"approved_at": "2026-09-21T09:30:00Z"
}
]
POST /v1/consolidation-groups/{group}/members
Request a subsidiary's place in the group
Ask for a new version of a subsidiary in the group: its ownership share, the control
assessment (IFRS 10.5 to 10.7, Art. 963 para. 2 OR), when it was acquired and from when it is
consolidated. A human does it (the policy action approve_group_structure denies agents with
403 policy_denied); by default the version waits for a second person (POST /v1/approvals/{approval_id}/approve, status: pending_approval), and a one-person
organization allows approve_group_structure in its approval policy (PUT /v1/approval-policy), which puts the version in force at once (status: approved). A key the
system issued can only request. 409 rate_source_missing when the subsidiary's currency is not
published by the rate source (the ECB), 409 fx_rate_missing when no rate is published yet
for the date, 409 when a version of the subsidiary already waits for
approval, 422 for the parent or a share beyond 100 %. Only direct subsidiaries are supported.
Needs an Idempotency-Key.
| Required scope | draft (admin implies every scope) |
| Idempotency-Key | required |
| Operation id | request_member_v1_consolidation_groups__group__members_post |
Parameters
| In | Name | Type | Required | Description |
|---|---|---|---|---|
| path | group |
string | yes | Code or id of the consolidation group (GET /v1/consolidation-groups). |
Request body
application/json (required): MemberInput
| Field | Type | Required | Description |
|---|---|---|---|
entity |
string | yes | Code of the subsidiary entity (a direct subsidiary of the parent). |
ownership_percent |
decimal string | yes | The parent's share of the subsidiary, in percent. A percentage with up to four decimals (a decimal string). (max 100; greater than 0) |
control_basis |
string | yes | The control assessment (IFRS 10.5 to 10.7; Art. 963 para. 2 OR): why the parent controls the subsidiary. It is kept with the approval and is what a second person confirms. (min length 3; max length 2000) |
acquired_on |
string (date) | yes | The date the parent acquired control (ISO 8601). |
consolidated_from |
string (date) | yes | The date from which the subsidiary is consolidated and translated: its equity at this date is translated at the rate of the date. Not before acquired_on. |
effective_from |
string (date) or null | The group date from which this version applies; default: consolidated_from. A run takes the version in force at its date. |
|
acquisition_cost |
decimal string or null | What the parent paid for the shares; used by the acquisition entries. (min 0) | |
acquisition_cost_currency |
string or null | The currency of acquisition_cost; required with it. (pattern ^[A-Z]{3}$) |
|
net_assets_at_acquisition |
decimal string or null | The fair value of the subsidiary's identifiable net assets at acquired_on (IFRS 3.18), in its functional currency. This version takes the book value: it must equal the net assets the subsidiary's ledger holds at that date, else the run reports fair_value_adjustment_unsupported. Required, with the cost and the investment account, for the capital consolidation (E4, E5). |
|
investment_account |
string or null | Code of the account in the parent entity that holds the cost of the shares. |
Example request
curl -X POST "$ERP_URL/v1/consolidation-groups/DEMO/members" \
-H "Authorization: Bearer $ERP_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"acquired_on": "2026-01-02",
"acquisition_cost": "800000",
"acquisition_cost_currency": "CHF",
"consolidated_from": "2026-01-02",
"control_basis": "80 % of the voting rights and the right to appoint the management board (IFRS 10.7).",
"entity": "DE01",
"ownership_percent": "80"
}'
Responses
| Status | Meaning | Body |
|---|---|---|
| 201 | Created | MemberResult |
| 401 | Missing or invalid API key (unauthorized). |
ErrorEnvelope |
| 403 | The caller lacks the required scope (missing_right, with scope), the key belongs to no person where a person is needed (forbidden), or the approval policy denies the action (policy_denied, with action and rule_id). |
ErrorEnvelope |
| 404 | The resource does not exist, or belongs to another organization (not_found). |
ErrorEnvelope |
| 409 | The request conflicts with the data: an Idempotency-Key reused with a different request, a closed period, or an integrity rule of the database (conflict, integrity_violation). |
ErrorEnvelope |
| 422 | Validation failed: the error envelope (validation_failed). For a malformed body or parameter its message is in sentences ("Line 2: the quantity must be above zero") and fields lists each error with pydantic's loc, type and msg beside its sentence (message) and its parts, to word it in another language: items (name and number from 1: line 2), field (its name as sent) and the rule it breaks with its limit, count and choices (none for a validator's own sentence); FastAPI's own detail list stays beside the envelope. |
HTTPValidationError |
Example response (shape)
{
"status": "approved",
"approval_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"member": {
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"group": "string",
"entity": "string",
"entity_name": "string",
"currency": "string",
"version": 1,
"ownership_percent": "string",
"method": "full",
"control_basis": "string",
"goodwill_policy": "amortise",
"acquired_on": "2026-09-21",
"consolidated_from": "2026-09-21",
"effective_from": "2026-09-21",
"corrects_version": 1,
"acquisition_cost": "string",
"acquisition_cost_currency": "string",
"net_assets_at_acquisition": "string",
"investment_account": "string",
"approval_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"requested_by": {},
"approved_by": {},
"approved_at": "2026-09-21T09:30:00Z"
}
}
GET /v1/consolidation-groups/{group}/runs
List the runs of a group
The group's runs, newest date and version first, each with its status and how many blocking exceptions and warnings it has.
| Required scope | read (admin implies every scope) |
| Operation id | list_runs_v1_consolidation_groups__group__runs_get |
Parameters
| In | Name | Type | Required | Description |
|---|---|---|---|---|
| path | group |
string | yes | Code or id of the consolidation group (GET /v1/consolidation-groups). |
| query | limit |
integer | At most this many rows. (min 1; max 500; default 100) |
Example request
curl "$ERP_URL/v1/consolidation-groups/DEMO/runs" \
-H "Authorization: Bearer $ERP_KEY"
Responses
| Status | Meaning | Body |
|---|---|---|
| 200 | OK | array of ConsolidationRunSummary |
| 401 | Missing or invalid API key (unauthorized). |
ErrorEnvelope |
| 403 | The caller lacks the required scope (missing_right, with scope), the key belongs to no person where a person is needed (forbidden), or the approval policy denies the action (policy_denied, with action and rule_id). |
ErrorEnvelope |
| 404 | The resource does not exist, or belongs to another organization (not_found). |
ErrorEnvelope |
| 422 | Validation failed: the error envelope (validation_failed). For a malformed body or parameter its message is in sentences ("Line 2: the quantity must be above zero") and fields lists each error with pydantic's loc, type and msg beside its sentence (message) and its parts, to word it in another language: items (name and number from 1: line 2), field (its name as sent) and the rule it breaks with its limit, count and choices (none for a validator's own sentence); FastAPI's own detail list stays beside the envelope. |
HTTPValidationError |
Example response (shape)
[
{
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"as_of": "2026-09-21",
"version": 1,
"status": "draft",
"complete": true,
"blocking": 1,
"warnings": 1,
"created_by": {},
"created_at": "2026-09-21T09:30:00Z"
}
]
POST /v1/consolidation-groups/{group}/runs
Run a consolidation
Make a draft run at a month end: read each entity's ledger by entry date (posted entries,
without the year-end closing entries), translate the subsidiaries to the reporting currency at
the closing, average and historical rates of data-vNext (IAS 21.39 to 21.41), aggregate by
report line, eliminate intragroup balances (E1), loans (E2), income and expense (E3) and
dividends (E6) between the entities, set the investment against the subsidiary's equity at
acquisition with goodwill and non-controlling interests (E4, E5) and amortise goodwill where
the framework's policy does (E7), and keep the snapshot. It is one transaction and it never
edits an earlier run. Two sides that do not agree in the
document currency are the exception ic_difference (blocking above the group's
ic_tolerance_amount). A missing rate is the blocking exception rate_missing (the entity is
left out and the run says so), never an invented rate. 422 framework_unverified or
framework_not_implemented for a framework whose rules are not checked or not built, 422
when the date is not a month end, 409 no_members when no subsidiary is consolidated by the
date, and 502 when data-vNext is unavailable. Needs an Idempotency-Key.
| Required scope | draft (admin implies every scope) |
| Idempotency-Key | required |
| Operation id | create_run_v1_consolidation_groups__group__runs_post |
Parameters
| In | Name | Type | Required | Description |
|---|---|---|---|---|
| path | group |
string | yes | Code or id of the consolidation group (GET /v1/consolidation-groups). |
Request body
application/json (required): RunInput
| Field | Type | Required | Description |
|---|---|---|---|
as_of |
string (date) | yes | The group date: a month end (ISO 8601), because the rates are the calendar months of data-vNext. The ledger is read up to this date by entry date. |
comment |
string or null | A note kept on the run. (max length 1000) |
Example request
curl -X POST "$ERP_URL/v1/consolidation-groups/DEMO/runs" \
-H "Authorization: Bearer $ERP_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"as_of": "2026-09-30",
"comment": "September close"
}'
Responses
| Status | Meaning | Body |
|---|---|---|
| 201 | Created | RunOut |
| 401 | Missing or invalid API key (unauthorized). |
ErrorEnvelope |
| 403 | The caller lacks the required scope (missing_right, with scope), the key belongs to no person where a person is needed (forbidden), or the approval policy denies the action (policy_denied, with action and rule_id). |
ErrorEnvelope |
| 404 | The resource does not exist, or belongs to another organization (not_found). |
ErrorEnvelope |
| 409 | The request conflicts with the data: an Idempotency-Key reused with a different request, a closed period, or an integrity rule of the database (conflict, integrity_violation). |
ErrorEnvelope |
| 422 | Validation failed: the error envelope (validation_failed). For a malformed body or parameter its message is in sentences ("Line 2: the quantity must be above zero") and fields lists each error with pydantic's loc, type and msg beside its sentence (message) and its parts, to word it in another language: items (name and number from 1: line 2), field (its name as sent) and the rule it breaks with its limit, count and choices (none for a validator's own sentence); FastAPI's own detail list stays beside the envelope. |
HTTPValidationError |
Example response (shape)
{
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"group": "string",
"as_of": "2026-09-21",
"version": 1,
"status": "draft",
"comment": "string",
"reporting_currency": "string",
"framework": "fer",
"policy": {},
"members": [
{
"entity": "string",
"role": "parent",
"currency": "string",
"version": 1,
"ownership_percent": "string",
"consolidated_from": "2026-09-21",
"acquired_on": "2026-09-21",
"purchase_data_version": 1,
"acquisition_cost": "string",
"acquisition_cost_currency": "string",
"net_assets_at_acquisition": "string",
"investment_account": "string",
"translated": true
}
],
"complete": true,
"blocking": 1,
"warnings": 1,
"eliminations_applied": true,
"eliminations": [
"string"
],
"eliminations_pending": [
"string"
],
"inputs_digest": "string",
"entity_heads": {},
"created_by": {},
"created_at": "2026-09-21T09:30:00Z"
}
GET /v1/consolidation-runs/{consolidation_run}
Get a consolidation run
The header of a run: the group date, the framework and its resolved switches (fixed when the run was made), the entities and member versions used, whether it is complete, the digest of its inputs and the position of each entity's ledger chain. 404 for an unknown run.
| Required scope | read (admin implies every scope) |
| Operation id | get_run_v1_consolidation_runs__consolidation_run__get |
Parameters
| In | Name | Type | Required | Description |
|---|---|---|---|---|
| path | consolidation_run |
string (uuid) | yes | Id of the consolidation run (GET /v1/consolidation-groups/{group}/runs). |
Example request
curl "$ERP_URL/v1/consolidation-runs/3fa85f64-5717-4562-b3fc-2c963f66afa6" \
-H "Authorization: Bearer $ERP_KEY"
Responses
| Status | Meaning | Body |
|---|---|---|
| 200 | OK | RunOut |
| 401 | Missing or invalid API key (unauthorized). |
ErrorEnvelope |
| 403 | The caller lacks the required scope (missing_right, with scope), the key belongs to no person where a person is needed (forbidden), or the approval policy denies the action (policy_denied, with action and rule_id). |
ErrorEnvelope |
| 404 | The resource does not exist, or belongs to another organization (not_found). |
ErrorEnvelope |
| 422 | Validation failed: the error envelope (validation_failed). For a malformed body or parameter its message is in sentences ("Line 2: the quantity must be above zero") and fields lists each error with pydantic's loc, type and msg beside its sentence (message) and its parts, to word it in another language: items (name and number from 1: line 2), field (its name as sent) and the rule it breaks with its limit, count and choices (none for a validator's own sentence); FastAPI's own detail list stays beside the envelope. |
HTTPValidationError |
Example response (shape)
{
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"group": "string",
"as_of": "2026-09-21",
"version": 1,
"status": "draft",
"comment": "string",
"reporting_currency": "string",
"framework": "fer",
"policy": {},
"members": [
{
"entity": "string",
"role": "parent",
"currency": "string",
"version": 1,
"ownership_percent": "string",
"consolidated_from": "2026-09-21",
"acquired_on": "2026-09-21",
"purchase_data_version": 1,
"acquisition_cost": "string",
"acquisition_cost_currency": "string",
"net_assets_at_acquisition": "string",
"investment_account": "string",
"translated": true
}
],
"complete": true,
"blocking": 1,
"warnings": 1,
"eliminations_applied": true,
"eliminations": [
"string"
],
"eliminations_pending": [
"string"
],
"inputs_digest": "string",
"entity_heads": {},
"created_by": {},
"created_at": "2026-09-21T09:30:00Z"
}
GET /v1/consolidation-runs/{consolidation_run}/balance-sheet
Get the group balance sheet of a run
The group balance sheet by report line from the run's snapshot (never recomputed from the
ledger): assets, liabilities and equity (capital, retained earnings, the results of earlier
years not yet appropriated, the translation reserve) and the result of the year. balanced
says assets equal liabilities plus equity. Intragroup balances, income and expense are
eliminated (eliminations_applied; a run made before the eliminations existed is the aggregate
of the entities); complete is false while the run has a blocking exception.
| Required scope | read (admin implies every scope) |
| Operation id | get_balance_sheet_v1_consolidation_runs__consolidation_run__balance_sheet_get |
Parameters
| In | Name | Type | Required | Description |
|---|---|---|---|---|
| path | consolidation_run |
string (uuid) | yes | Id of the consolidation run (GET /v1/consolidation-groups/{group}/runs). |
Example request
curl "$ERP_URL/v1/consolidation-runs/3fa85f64-5717-4562-b3fc-2c963f66afa6/balance-sheet" \
-H "Authorization: Bearer $ERP_KEY"
Responses
| Status | Meaning | Body |
|---|---|---|
| 200 | OK | GroupBalanceSheet |
| 401 | Missing or invalid API key (unauthorized). |
ErrorEnvelope |
| 403 | The caller lacks the required scope (missing_right, with scope), the key belongs to no person where a person is needed (forbidden), or the approval policy denies the action (policy_denied, with action and rule_id). |
ErrorEnvelope |
| 404 | The resource does not exist, or belongs to another organization (not_found). |
ErrorEnvelope |
| 422 | Validation failed: the error envelope (validation_failed). For a malformed body or parameter its message is in sentences ("Line 2: the quantity must be above zero") and fields lists each error with pydantic's loc, type and msg beside its sentence (message) and its parts, to word it in another language: items (name and number from 1: line 2), field (its name as sent) and the rule it breaks with its limit, count and choices (none for a validator's own sentence); FastAPI's own detail list stays beside the envelope. |
HTTPValidationError |
Example response (shape)
{
"run": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"as_of": "2026-09-21",
"currency": "string",
"framework": "fer",
"complete": true,
"eliminations_applied": true,
"assets": [
{
"report_line": "string",
"labels": {},
"amount": "string",
"unmapped": true
}
],
"liabilities": [
{
"report_line": "string",
"labels": {},
"amount": "string",
"unmapped": true
}
],
"equity": [
{
"report_line": "string",
"labels": {},
"amount": "string",
"unmapped": true
}
],
"result_of_year": "string",
"total_assets": "string",
"total_liabilities": "string",
"total_equity": "string",
"after_equity": [
{
"report_line": "string",
"labels": {},
"amount": "string",
"unmapped": true
}
],
"total_after_equity": "0.00",
"balanced": true
}
GET /v1/consolidation-runs/{consolidation_run}/cash-flow
Get the group cash flow statement of a run
The group cash flow statement of the group year (1 January to the run's date) by the
indirect method, from the run and the group's run at the end of the previous year (both
snapshots): the group's profit, depreciation added back, the change of each report line in
operating, investing or financing activities, and the effect of exchange rates on the cash of
subsidiaries in other currencies; the rest of the translation reserve's movement is its own
operating line. Each line lists its report lines. 409 group_opening_run_missing (as_of)
when the entities had books before the year and the group has no run at the end of the
previous year; a group whose books start in the year starts from nothing.
| Required scope | read (admin implies every scope) |
| Operation id | get_cash_flow_v1_consolidation_runs__consolidation_run__cash_flow_get |
Parameters
| In | Name | Type | Required | Description |
|---|---|---|---|---|
| path | consolidation_run |
string (uuid) | yes | Id of the consolidation run (GET /v1/consolidation-groups/{group}/runs). |
Example request
curl "$ERP_URL/v1/consolidation-runs/3fa85f64-5717-4562-b3fc-2c963f66afa6/cash-flow" \
-H "Authorization: Bearer $ERP_KEY"
Responses
| Status | Meaning | Body |
|---|---|---|
| 200 | OK | GroupCashFlow |
| 401 | Missing or invalid API key (unauthorized). |
ErrorEnvelope |
| 403 | The caller lacks the required scope (missing_right, with scope), the key belongs to no person where a person is needed (forbidden), or the approval policy denies the action (policy_denied, with action and rule_id). |
ErrorEnvelope |
| 404 | The resource does not exist, or belongs to another organization (not_found). |
ErrorEnvelope |
| 422 | Validation failed: the error envelope (validation_failed). For a malformed body or parameter its message is in sentences ("Line 2: the quantity must be above zero") and fields lists each error with pydantic's loc, type and msg beside its sentence (message) and its parts, to word it in another language: items (name and number from 1: line 2), field (its name as sent) and the rule it breaks with its limit, count and choices (none for a validator's own sentence); FastAPI's own detail list stays beside the envelope. |
HTTPValidationError |
Example response (shape)
{
"run": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"opening_run": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"start": "2026-09-21",
"as_of": "2026-09-21",
"currency": "string",
"framework": "string",
"complete": true,
"eliminations_applied": true,
"opening_cash": "string",
"sections": [
{
"section": "financing",
"total": "string",
"lines": [
null
]
}
],
"net_change": "string",
"closing_cash": "string",
"balanced": true
}
GET /v1/consolidation-runs/{consolidation_run}/cta
Get the translation reserve roll-forward of a run
For each translated subsidiary the translation reserve at the group date twice: as the
balancing amount of its translated balance sheet, and as the roll-forward of the rates (opening
net assets, each month's profit and each equity movement times the move of the closing rate
since then, IAS 21.41). They agree within rounding (reconciled); a difference beyond it is
the blocking exception cta_unreconciled. The reserve starts at zero at the date the
subsidiary is consolidated from.
| Required scope | read (admin implies every scope) |
| Operation id | get_cta_v1_consolidation_runs__consolidation_run__cta_get |
Parameters
| In | Name | Type | Required | Description |
|---|---|---|---|---|
| path | consolidation_run |
string (uuid) | yes | Id of the consolidation run (GET /v1/consolidation-groups/{group}/runs). |
Example request
curl "$ERP_URL/v1/consolidation-runs/3fa85f64-5717-4562-b3fc-2c963f66afa6/cta" \
-H "Authorization: Bearer $ERP_KEY"
Responses
| Status | Meaning | Body |
|---|---|---|
| 200 | OK | CtaRollForward |
| 401 | Missing or invalid API key (unauthorized). |
ErrorEnvelope |
| 403 | The caller lacks the required scope (missing_right, with scope), the key belongs to no person where a person is needed (forbidden), or the approval policy denies the action (policy_denied, with action and rule_id). |
ErrorEnvelope |
| 404 | The resource does not exist, or belongs to another organization (not_found). |
ErrorEnvelope |
| 422 | Validation failed: the error envelope (validation_failed). For a malformed body or parameter its message is in sentences ("Line 2: the quantity must be above zero") and fields lists each error with pydantic's loc, type and msg beside its sentence (message) and its parts, to word it in another language: items (name and number from 1: line 2), field (its name as sent) and the rule it breaks with its limit, count and choices (none for a validator's own sentence); FastAPI's own detail list stays beside the envelope. |
HTTPValidationError |
Example response (shape)
{
"run": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"currency": "string",
"entities": [
{
"entity": "string",
"currency": "string",
"start": "2026-09-21",
"opening_reserve": "string",
"opening_net_assets": "string",
"opening_rate": "string",
"closing_rate": "string",
"opening_effect": "string",
"results": [
null
],
"movements": [
null
],
"rounding": "string",
"closing_reserve": "string",
"translated_reserve": "string",
"difference": "string",
"reconciled": true
}
],
"closing_reserve": "string",
"reconciled": true
}
GET /v1/consolidation-runs/{consolidation_run}/eliminations
List the eliminations of a run
The elimination layer of the run, per rule and pair of entities: what each side held in
every document currency, whether they agree, every line that reverses an account (at the
closing rate for a balance, at each month's average for income and expense) and where the
residual went. E1 (intragroup balances): an agreed residual is an exchange difference that
stays in profit or loss (IAS 21.45). E3 (intragroup income and expense): an agreed residual is
a translation difference and goes to the translation reserve (IAS 21.41). Sides that disagree
keep their residual on a line of its own (unreconciled) and the run carries ic_difference.
Every pair balances. A run made before the eliminations has none (rules is empty).
| Required scope | read (admin implies every scope) |
| Operation id | get_eliminations_v1_consolidation_runs__consolidation_run__eliminations_get |
Parameters
| In | Name | Type | Required | Description |
|---|---|---|---|---|
| path | consolidation_run |
string (uuid) | yes | Id of the consolidation run (GET /v1/consolidation-groups/{group}/runs). |
Example request
curl "$ERP_URL/v1/consolidation-runs/3fa85f64-5717-4562-b3fc-2c963f66afa6/eliminations" \
-H "Authorization: Bearer $ERP_KEY"
Responses
| Status | Meaning | Body |
|---|---|---|
| 200 | OK | RunEliminations |
| 401 | Missing or invalid API key (unauthorized). |
ErrorEnvelope |
| 403 | The caller lacks the required scope (missing_right, with scope), the key belongs to no person where a person is needed (forbidden), or the approval policy denies the action (policy_denied, with action and rule_id). |
ErrorEnvelope |
| 404 | The resource does not exist, or belongs to another organization (not_found). |
ErrorEnvelope |
| 422 | Validation failed: the error envelope (validation_failed). For a malformed body or parameter its message is in sentences ("Line 2: the quantity must be above zero") and fields lists each error with pydantic's loc, type and msg beside its sentence (message) and its parts, to word it in another language: items (name and number from 1: line 2), field (its name as sent) and the rule it breaks with its limit, count and choices (none for a validator's own sentence); FastAPI's own detail list stays beside the envelope. |
HTTPValidationError |
Example response (shape)
{
"run": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"currency": "string",
"rules": [
"string"
],
"pending": [
"string"
],
"acquisitions": [
{
"entity": "string",
"parent": "string",
"currency": "string",
"ownership_percent": "string",
"nci_percent": "string",
"nci_measurement": "proportionate_share",
"fair_value_basis": "book_value",
"acquired_on": "2026-09-21",
"policy": "string",
"goodwill_years": 1,
"investment_account": "string",
"consideration": "string",
"net_assets_local": "string",
"historical_rate": "string",
"closing_rate": "string",
"equity_at_acquisition": "string",
"nci_at_acquisition": "string",
"goodwill_at_acquisition": "string",
"goodwill_treatment": "asset",
"goodwill_local": "string",
"goodwill_closing": "string",
"goodwill_translation": "string",
"bargain_purchase_gain": "string",
"amortisation": null,
"theoretical_capitalisation": null,
"negative_goodwill": null,
"net_assets_closing": "string",
"profit_of_year": "string",
"nci_profit": "string",
"owners_profit": "string",
"reserve": "string",
"nci_reserve": "string",
"other_equity": "string",
"nci_other": "string",
"nci_closing": "string",
"nci_exact": "string",
"nci_rounding": "string",
"sources": {},
"lines": [
null
]
}
],
"pairs": [
{
"rule": "E1",
"entity_a": "string",
"entity_b": "string",
"documents": [
null
],
"agreed": true,
"residual": "string",
"treatment": "cash_in_transit",
"in_transit": "string",
"lines": [
null
]
}
],
"debit": "string",
"credit": "string"
}
GET /v1/consolidation-runs/{consolidation_run}/exceptions
List the exceptions of a run
What the run could not do or the reader should know, blocking first: rate_missing,
unmapped_report_line, cta_unreconciled, ic_capitalised (blocking), ic_difference
(blocking above the group's tolerance, else a warning), period_open,
member_not_consolidated, cta_starts_at_zero and ic_exchange_difference (warnings), and
eliminations_pending (blocking while a subsidiary is in the group, else a warning).
| Required scope | read (admin implies every scope) |
| Operation id | get_exceptions_v1_consolidation_runs__consolidation_run__exceptions_get |
Parameters
| In | Name | Type | Required | Description |
|---|---|---|---|---|
| path | consolidation_run |
string (uuid) | yes | Id of the consolidation run (GET /v1/consolidation-groups/{group}/runs). |
Example request
curl "$ERP_URL/v1/consolidation-runs/3fa85f64-5717-4562-b3fc-2c963f66afa6/exceptions" \
-H "Authorization: Bearer $ERP_KEY"
Responses
| Status | Meaning | Body |
|---|---|---|
| 200 | OK | RunExceptions |
| 401 | Missing or invalid API key (unauthorized). |
ErrorEnvelope |
| 403 | The caller lacks the required scope (missing_right, with scope), the key belongs to no person where a person is needed (forbidden), or the approval policy denies the action (policy_denied, with action and rule_id). |
ErrorEnvelope |
| 404 | The resource does not exist, or belongs to another organization (not_found). |
ErrorEnvelope |
| 422 | Validation failed: the error envelope (validation_failed). For a malformed body or parameter its message is in sentences ("Line 2: the quantity must be above zero") and fields lists each error with pydantic's loc, type and msg beside its sentence (message) and its parts, to word it in another language: items (name and number from 1: line 2), field (its name as sent) and the rule it breaks with its limit, count and choices (none for a validator's own sentence); FastAPI's own detail list stays beside the envelope. |
HTTPValidationError |
Example response (shape)
{
"run": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"exceptions": [
{
"code": "string",
"severity": "blocking",
"entity": "string",
"detail": "string",
"details": {}
}
]
}
GET /v1/consolidation-runs/{consolidation_run}/profit-and-loss
Get the group profit and loss of a run
The group profit and loss of the group year (1 January to the run's date) by report line
from the snapshot: each month translated at that month's average rate, so it is not one rate
for the year. net_income equals the result of the year on the balance sheet. Intragroup income
and expense are eliminated (eliminations_applied).
| Required scope | read (admin implies every scope) |
| Operation id | get_profit_and_loss_v1_consolidation_runs__consolidation_run__profit_and_loss_get |
Parameters
| In | Name | Type | Required | Description |
|---|---|---|---|---|
| path | consolidation_run |
string (uuid) | yes | Id of the consolidation run (GET /v1/consolidation-groups/{group}/runs). |
Example request
curl "$ERP_URL/v1/consolidation-runs/3fa85f64-5717-4562-b3fc-2c963f66afa6/profit-and-loss" \
-H "Authorization: Bearer $ERP_KEY"
Responses
| Status | Meaning | Body |
|---|---|---|
| 200 | OK | GroupProfitAndLoss |
| 401 | Missing or invalid API key (unauthorized). |
ErrorEnvelope |
| 403 | The caller lacks the required scope (missing_right, with scope), the key belongs to no person where a person is needed (forbidden), or the approval policy denies the action (policy_denied, with action and rule_id). |
ErrorEnvelope |
| 404 | The resource does not exist, or belongs to another organization (not_found). |
ErrorEnvelope |
| 422 | Validation failed: the error envelope (validation_failed). For a malformed body or parameter its message is in sentences ("Line 2: the quantity must be above zero") and fields lists each error with pydantic's loc, type and msg beside its sentence (message) and its parts, to word it in another language: items (name and number from 1: line 2), field (its name as sent) and the rule it breaks with its limit, count and choices (none for a validator's own sentence); FastAPI's own detail list stays beside the envelope. |
HTTPValidationError |
Example response (shape)
{
"run": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"as_of": "2026-09-21",
"currency": "string",
"framework": "fer",
"complete": true,
"eliminations_applied": true,
"year_start": "2026-09-21",
"revenue": [
{
"report_line": "string",
"labels": {},
"amount": "string",
"unmapped": true
}
],
"expenses": [
{
"report_line": "string",
"labels": {},
"amount": "string",
"unmapped": true
}
],
"total_revenue": "string",
"total_expenses": "string",
"net_income": "string",
"attributable_to_nci": "0.00",
"attributable_to_owners": "0.00"
}
GET /v1/consolidation-runs/{consolidation_run}/rates
List the rates a run used
Every rate the run used: closing, average, historical and the rates of equity-movement dates, each with its source (the ECB reference rates), its fixing dates and the data-vNext dataset version, so the run can be checked later against the same pinned data. No rate is invented and no manual rate is accepted.
| Required scope | read (admin implies every scope) |
| Operation id | get_rates_v1_consolidation_runs__consolidation_run__rates_get |
Parameters
| In | Name | Type | Required | Description |
|---|---|---|---|---|
| path | consolidation_run |
string (uuid) | yes | Id of the consolidation run (GET /v1/consolidation-groups/{group}/runs). |
Example request
curl "$ERP_URL/v1/consolidation-runs/3fa85f64-5717-4562-b3fc-2c963f66afa6/rates" \
-H "Authorization: Bearer $ERP_KEY"
Responses
| Status | Meaning | Body |
|---|---|---|
| 200 | OK | RunRates |
| 401 | Missing or invalid API key (unauthorized). |
ErrorEnvelope |
| 403 | The caller lacks the required scope (missing_right, with scope), the key belongs to no person where a person is needed (forbidden), or the approval policy denies the action (policy_denied, with action and rule_id). |
ErrorEnvelope |
| 404 | The resource does not exist, or belongs to another organization (not_found). |
ErrorEnvelope |
| 422 | Validation failed: the error envelope (validation_failed). For a malformed body or parameter its message is in sentences ("Line 2: the quantity must be above zero") and fields lists each error with pydantic's loc, type and msg beside its sentence (message) and its parts, to word it in another language: items (name and number from 1: line 2), field (its name as sent) and the rule it breaks with its limit, count and choices (none for a validator's own sentence); FastAPI's own detail list stays beside the envelope. |
HTTPValidationError |
Example response (shape)
{
"run": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"pinned_version": "string",
"rates": [
{
"kind": "average",
"entity": "string",
"base": "string",
"quote": "string",
"period": "string",
"date": "2026-09-21",
"rate": "string",
"source": "string",
"first_fixing": "2026-09-21",
"last_fixing": "2026-09-21",
"fixings": 1,
"dataset_version": "string"
}
]
}
GET /v1/consolidation-runs/{consolidation_run}/trial-balance
Get an entity's translated trial balance
The translated trial balance of one entity of the run, by account: the amount that was translated in the entity's functional currency, the amount in the reporting currency and the rate. Assets and liabilities are at the closing rate, the group year's income and expenses at each month's average rate, equity at the historical rate, the results of earlier years are one line and the translation reserve is the balancing amount. The reporting-currency debits equal the credits. 404 when the entity is not part of the run.
| Required scope | read (admin implies every scope) |
| Operation id | get_trial_balance_v1_consolidation_runs__consolidation_run__trial_balance_get |
Parameters
| In | Name | Type | Required | Description |
|---|---|---|---|---|
| path | consolidation_run |
string (uuid) | yes | Id of the consolidation run (GET /v1/consolidation-groups/{group}/runs). |
| query | entity |
string | yes | Code of the entity of the run (GET /v1/consolidation-runs/{id} lists them). |
Example request
curl "$ERP_URL/v1/consolidation-runs/3fa85f64-5717-4562-b3fc-2c963f66afa6/trial-balance?entity=DE01" \
-H "Authorization: Bearer $ERP_KEY"
Responses
| Status | Meaning | Body |
|---|---|---|
| 200 | OK | TranslatedTrialBalance |
| 401 | Missing or invalid API key (unauthorized). |
ErrorEnvelope |
| 403 | The caller lacks the required scope (missing_right, with scope), the key belongs to no person where a person is needed (forbidden), or the approval policy denies the action (policy_denied, with action and rule_id). |
ErrorEnvelope |
| 404 | The resource does not exist, or belongs to another organization (not_found). |
ErrorEnvelope |
| 422 | Validation failed: the error envelope (validation_failed). For a malformed body or parameter its message is in sentences ("Line 2: the quantity must be above zero") and fields lists each error with pydantic's loc, type and msg beside its sentence (message) and its parts, to word it in another language: items (name and number from 1: line 2), field (its name as sent) and the rule it breaks with its limit, count and choices (none for a validator's own sentence); FastAPI's own detail list stays beside the envelope. |
HTTPValidationError |
Example response (shape)
{
"run": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"entity": "string",
"currency": "string",
"group_currency": "string",
"translated": true,
"lines": [
{
"account": "string",
"name": "string",
"report_line": "string",
"local_debit": "string",
"local_credit": "string",
"group_debit": "string",
"group_credit": "string",
"rate_kind": "string",
"rate": "string"
}
],
"local_debit": "string",
"local_credit": "string",
"group_debit": "string",
"group_credit": "string",
"balanced": true
}
Schemas
Acquisition
The basis of the capital consolidation of one subsidiary: every figure its lines rest on.
| Field | Type | Required | Description |
|---|---|---|---|
entity |
string | yes | The subsidiary. |
parent |
string | yes | The parent that holds the investment. |
currency |
string | yes | The subsidiary's functional currency. |
ownership_percent |
string | yes | The parent's share, in percent. |
nci_percent |
string | yes | The non-controlling share: 100 less it. |
nci_measurement |
"proportionate_share" |
yes | How the non-controlling interest is measured at acquisition: its proportionate share of the identifiable net assets (IFRS 3.19(b); section 307 HGB). |
fair_value_basis |
"book_value" |
yes | The identifiable net assets at acquisition are taken at the book value the member version states as their fair value (IFRS 3.18); no purchase price allocation. |
acquired_on |
string (date) | yes | The acquisition date. |
policy |
string | yes | The goodwill policy. |
goodwill_years |
integer or null | yes | The useful life of goodwill (for amortise, and for the theoretical capitalisation of offset_equity). |
investment_account |
string | yes | The parent's account eliminated. |
consideration |
string | yes | The consideration, in the reporting currency. |
net_assets_local |
string | yes | The subsidiary's net assets at acquisition in its currency. |
historical_rate |
string or null | yes | The rate of the acquisition date; null without translation. |
closing_rate |
string or null | yes | The closing rate; null without translation. |
equity_at_acquisition |
string | yes | The equity at acquisition in the reporting currency, at the historical rate. |
nci_at_acquisition |
string | yes | The non-controlling interest at acquisition. |
goodwill_at_acquisition |
string | yes | Consideration + non-controlling interest - net assets (IFRS 3.32); negative for a bargain purchase. |
goodwill_treatment |
"asset" | "bargain_purchase" | "negative_goodwill" | "none" | "offset_equity" |
yes | asset (kept in the subsidiary's currency at the closing rate, IAS 21.47, DRS 23.137), offset_equity (FER, a positive or negative difference), bargain_purchase (a gain, IFRS 3.34), negative_goodwill (a liability: released over five years under FER, kept after equity under HGB) or none. |
goodwill_local |
string or null | Goodwill in the subsidiary's currency. | |
goodwill_closing |
string or null | Goodwill at the closing rate (before amortisation). | |
goodwill_translation |
string or null | Goodwill at closing less at acquisition: to the owners' translation reserve. | |
bargain_purchase_gain |
string or null | The gain, if any. | |
amortisation |
Amortisation or null |
E7, for amortise. |
|
theoretical_capitalisation |
TheoreticalCapitalisation or null |
For goodwill offset against equity with a useful life (FER): what a capitalisation would have given. | |
negative_goodwill |
NegativeGoodwill or null |
A negative difference kept as a liability, if any. | |
net_assets_closing |
string | yes | The subsidiary's translated net assets at the group date. |
profit_of_year |
string | yes | Its translated profit of the group year. |
nci_profit |
string | yes | The non-controlling interests' share of it. |
owners_profit |
string | yes | The owners' share of it. |
reserve |
string | yes | Its translation reserve. |
nci_reserve |
string | yes | The non-controlling interests' share of it. |
other_equity |
string | yes | Its other equity movements since the acquisition (earlier years' results, capital, dividends), translated. |
nci_other |
string | yes | The non-controlling interests' share of them. |
nci_closing |
string | yes | The non-controlling interest at the group date: the sum of the four shares. |
nci_exact |
string | yes | The non-controlling share of the translated net assets, rounded once. |
nci_rounding |
string | yes | nci_closing less nci_exact: the rounding of the parts, a cent or two. |
sources |
map of string | yes | Per rule the paragraphs it is computed by. |
lines |
array of EliminationLine |
The lines of E4, E5 and E7 for this subsidiary. |
Amortisation
| Field | Type | Required | Description |
|---|---|---|---|
months |
integer | yes | Months amortised up to the group date. |
of_months |
integer | yes | Months of the useful life. |
accumulated_local |
string | yes | Accumulated amortisation in the subsidiary's currency. |
of_year_local |
string | yes | Of which in the group year. |
accumulated_closing |
string | yes | The accumulated amount at the closing rate, off the goodwill. |
ConsolidationRunSummary
| Field | Type | Required | Description |
|---|---|---|---|
id |
string (uuid) | yes | Id of the run. |
as_of |
string (date) | yes | The group date. |
version |
integer | yes | The run's number for this group and date. |
status |
"draft" | "final" | "superseded" |
yes | draft, final or superseded. |
complete |
boolean | yes | True when no blocking exception was found. |
blocking |
integer | yes | Blocking exceptions. |
warnings |
integer | yes | Warnings. |
created_by |
object | yes | Who made it, as an actor object. |
created_at |
string (date-time) | yes | When it was made (UTC). |
CtaRollForward
| Field | Type | Required | Description |
|---|---|---|---|
run |
string (uuid) | yes | Id of the run. |
currency |
string | yes | The reporting currency. |
entities |
array of EntityRollForward |
yes | One roll-forward per translated subsidiary (an entity in the reporting currency has none). |
closing_reserve |
string | yes | The group's translation reserve: the sum over the entities. |
reconciled |
boolean | yes | True when every entity reconciles. |
DocumentSides
| Field | Type | Required | Description |
|---|---|---|---|
currency |
string | yes | The document currency. |
a |
string | yes | What entity_a holds towards entity_b in it, signed debit less credit. |
b |
string | yes | What entity_b holds towards entity_a, signed the same way. |
EliminationLine
| Field | Type | Required | Description |
|---|---|---|---|
rule |
string | The rule of the line: E1 to E7. (default "") |
|
entity |
string | yes | The entity whose amount the line reverses (for E4, E5 and E7 the subsidiary, or the parent on the investment line). |
partner |
string | yes | Its group partner. |
account |
string or null | yes | The account reversed; null for the residual of the pair. |
name |
string | yes | The account's name, or what the residual is. |
report_line |
string | yes | The group report line it is added to. |
debit |
string | yes | Debit in the reporting currency. |
credit |
string | yes | Credit in the reporting currency. |
amount_local |
string or null | yes | The amount reversed in the entity's functional currency; null for the residual. |
rate_kind |
string or null | yes | closing (a balance), average (income or expense), historical (the equity a dividend debited, at the rate of its day), none (the reporting currency) or null (the residual). |
rate |
string or null | yes | The rate, or the effective rate over several months. |
EliminationPair
| Field | Type | Required | Description |
|---|---|---|---|
rule |
"E1" | "E2" | "E3" | "E6" |
yes | E1 intragroup balances (IFRS 10.B86(c), section 303 HGB), E2 intragroup loans, E3 intragroup income and expense (IFRS 10.B86(c), section 305 HGB) or E6 intragroup dividends. |
entity_a |
string | yes | One entity of the pair (the first by code). |
entity_b |
string | yes | The other. |
documents |
array of DocumentSides |
yes | Per document currency what each side holds: the two agree when they add to zero. |
agreed |
boolean | yes | True when the sides agree in every document currency. |
residual |
string | yes | What the reversal of both sides leaves in the reporting currency, signed debit less credit; zero when they cancel to the cent. |
treatment |
"cash_in_transit" | "none" | "profit_or_loss" | "translation_reserve" | "unreconciled" |
yes | Where the residual went: profit_or_loss (E1 or E2, agreed: the exchange difference on an intragroup monetary item stays in profit or loss, IAS 21.45), translation_reserve (E3 or E6, agreed: the two sides translated at different rates, IAS 21.41; E2 of a loan that is part of the net investment, IAS 21.32), cash_in_transit (E1: the sides disagree only by payments one side booked and the other not yet: the line cash in transit and the warning ic_cash_in_transit), unreconciled (the sides disagree: a line of its own and the exception ic_difference) or none. |
in_transit |
string | yes | The cash in transit of cash_in_transit in the reporting currency (each document currency at the closing rate), signed debit less credit; zero otherwise. |
lines |
array of EliminationLine |
yes | The lines of the pair's elimination. |
EntityRollForward
| Field | Type | Required | Description |
|---|---|---|---|
entity |
string | yes | Entity code. |
currency |
string | yes | Its functional currency. |
start |
string (date) or null | yes | The date it is consolidated from. |
opening_reserve |
string | yes | The reserve at the start: zero in this version. |
opening_net_assets |
string | yes | Net assets at the start, in the functional currency. |
opening_rate |
string | yes | The historical rate at the start. |
closing_rate |
string | yes | The closing rate of the month of the group date. |
opening_effect |
string | yes | Net assets at the start x (closing rate - historical rate). |
results |
array of RollForwardEffect |
yes | The effect of each month's profit. |
movements |
array of RollForwardEffect |
yes | The effect of each equity movement. |
rounding |
string | yes | The sum of the rounding residuals of the translated amounts (each rounded to the minor unit; rounded less exact, signed like the amount), exact: what rounding added to the balancing amount. Zero when every translated amount is exact. |
closing_reserve |
string | yes | The reserve at the group date by the roll-forward, rounded to the minor unit for display (credit positive; a debit reserve is negative). |
translated_reserve |
string | yes | The balancing amount of the translated trial balance, same sign. |
difference |
string | yes | translated_reserve less the roll-forward (unrounded) less rounding, computed exactly: zero, or the run has the blocking exception cta_unreconciled. |
reconciled |
boolean | yes | True when difference is exactly zero. There is no tolerance. |
GroupBalanceSheet
| Field | Type | Required | Description |
|---|---|---|---|
run |
string (uuid) | yes | Id of the run. |
as_of |
string (date) | yes | The group date. |
currency |
string | yes | The reporting currency. |
framework |
"fer" | "hgb" | "ifrs" |
yes | The framework of the run. |
complete |
boolean | yes | False while the run has a blocking exception. |
eliminations_applied |
boolean | yes | True when intragroup items are eliminated (eliminations names the rules); false for a run made before the eliminations existed, which is the aggregate of the entities. |
assets |
array of StatementLine |
yes | Asset lines. |
liabilities |
array of StatementLine |
yes | Liability lines. |
equity |
array of StatementLine |
yes | Equity lines: capital, retained earnings, the results of earlier years not yet appropriated, the translation reserve (the owners' share) and the non-controlling interests (bs.equity.nci, including their share of the year's result; IFRS 10.22). |
result_of_year |
string | yes | The profit (positive) or loss of the group year attributable to the owners of the parent: the profit and loss lines less the share of the non-controlling interests, which is inside bs.equity.nci. |
total_assets |
string | yes | Total assets. |
total_liabilities |
string | yes | Total liabilities. |
total_equity |
string | yes | Equity lines plus the result of the year. |
after_equity |
array of StatementLine |
Lines shown after equity, neither liabilities nor equity: under HGB the negative difference from capital consolidation (section 301 para. 3 HGB). | |
total_after_equity |
string | The sum of after_equity. (default "0.00") |
|
balanced |
boolean | yes | True when assets equal liabilities plus equity plus the lines after equity. |
GroupCashFlow
| Field | Type | Required | Description |
|---|---|---|---|
run |
string (uuid) | yes | Id of the consolidation run, the end of the statement. |
opening_run |
string (uuid) or null | yes | The run at the end of the previous year the statement starts from; null when no entity of the group had books before the year, so the group starts from nothing. |
start |
string (date) | yes | The first day of the group year (ISO 8601). |
as_of |
string (date) | yes | The run's date (ISO 8601). |
currency |
string | yes | The reporting currency; all amounts are in it. |
framework |
string | yes | The framework the group reports under. |
complete |
boolean | yes | False while either run has a blocking exception. |
eliminations_applied |
boolean | yes | True when the run eliminates the intragroup items (as its statements). |
opening_cash |
string | yes | The group's cash at the start (the opening run's). |
sections |
array of CashFlowSection |
yes | Operating, investing and financing activities from the change of each group report line, then the effect of exchange rates on cash held in other currencies. |
net_change |
string | yes | The sum of the sections. |
closing_cash |
string | yes | The group's cash at the run's date. |
balanced |
boolean | yes | True when the opening cash plus the net change is the closing cash. |
GroupCheck
| Field | Type | Required | Description |
|---|---|---|---|
id |
string | yes | Check id: run (a run exists at the date), periods_closed (no member period starting on or before the date is open), ic_reconciled (every relationship between two members agrees within its tolerance), rates_available, report_lines (every account maps to the group vocabulary), ic_eliminated (every elimination's sides agree within the group's tolerance), cta_reconciled, balanced (consolidated assets equal liabilities plus equity), opening_position (a member consolidated after its acquisition has a stated opening position), capital_consolidated (the investment in every subsidiary is eliminated against its equity at acquisition, with goodwill and non-controlling interests), nci_attributed (net income equals the owners' plus the non-controlling interests' share), adjustments_approved and final_run_current (later slices: n/a). |
title |
string | yes | What the check verifies. |
status |
"fail" | "n/a" | "pass" | "warn" |
yes | pass, fail (a final run could not be made), warn (to know) or n/a. |
detail |
string | yes | The result in English words. |
code |
string or null | The result by a stable code (erp.contracts.words.GROUP_CHECKS): the screens word it as consolidation.check.<code> in the person's language. |
|
details |
object or null | The values the words of code name, by name: amounts as decimal strings, days as ISO dates, lists, or reasons with their own words, code, details and text (such as the run's exceptions a check lists). |
GroupChecklist
| Field | Type | Required | Description |
|---|---|---|---|
group |
string | yes | Code of the group. |
as_of |
string (date) | yes | The group date. |
run |
string (uuid) or null | yes | The run the run-based checks read: the latest at the date (null if none). |
run_version |
integer or null | yes | Its version; null without a run. |
ready |
boolean | yes | True when no check has the status fail. |
checks |
array of GroupCheck |
yes | The checks in the order evaluated. |
GroupInput
| Field | Type | Required | Description |
|---|---|---|---|
code |
string or null | The group's own code, unique in the organization (letters, digits, ., _, -, at most 30 characters). Omitted: made from the name (Demo Group is DEMO-GROUP, with -2 when taken). (pattern ^[A-Za-z0-9][A-Za-z0-9._-]{0,29}$) |
|
name |
string | yes | The group's name. (min length 1; max length 200) |
parent_entity |
string | yes | Code of the parent entity: the entity that controls the others. It is in the group without being a member, and is not translated. |
reporting_currency |
string or null | The presentation currency (ISO 4217). In this version it is the parent's functional currency: the parent is carried over unchanged. Omitted: that currency. (pattern ^[A-Z]{3}$) |
|
framework |
"fer" | "hgb" | "ifrs" |
yes | The framework the group reports under: ifrs, fer (Swiss GAAP FER 30) or hgb (sections 290 to 315e HGB). A run under a framework whose rules have not been checked against its standard is refused (framework_unverified, framework_not_implemented); today all three run. |
goodwill_policy |
"amortise" | "impairment_only" | "offset_equity" or null |
How goodwill is treated: impairment_only (IFRS), offset_equity (FER) or amortise (FER, HGB); default: the framework's first. It must be one the framework allows. |
|
goodwill_years |
integer or null | The useful life of goodwill in years, for the policies that take one: amortise, and under fer also offset_equity (the notes show a theoretical capitalisation over it). Left empty, the framework's life for goodwill whose life cannot be determined: 5 years under fer, 10 under hgb. At most 20; null for impairment_only. (min 1; max 20) |
|
ic_tolerance_amount |
decimal string | The difference between two sides of an intragroup balance, or of intragroup income and expense, that is still accepted, in the reporting currency: a residual of an elimination whose sides do not agree is the blocking exception ic_difference above it and a warning within it. (min 0; default "1") |
GroupOut
| Field | Type | Required | Description |
|---|---|---|---|
id |
string (uuid) | yes | Id of the group. |
code |
string | yes | The group's code. |
name |
string | yes | The group's name. |
parent_entity |
string | yes | Code of the parent entity. |
reporting_currency |
string | yes | The presentation currency. |
framework |
"fer" | "hgb" | "ifrs" |
yes | The framework the group reports under. |
framework_verified |
boolean | yes | True when the framework's sources have been read and cited, so a run is allowed. |
framework_implemented |
boolean | yes | False for a framework that is documented only. |
goodwill_policy |
"amortise" | "impairment_only" | "offset_equity" |
yes | The goodwill policy. |
goodwill_years |
integer or null | yes | The useful life of goodwill in years (amortised, or under fer offset against equity for the theoretical capitalisation), if any. |
ic_tolerance_amount |
string | yes | The tolerance of intragroup differences. |
members |
array of MemberOut |
yes | The version in force today of every subsidiary, by entity code. |
pending |
array of PendingMember |
yes | Member versions that wait for a second person's approval. |
runs |
integer | yes | How many runs the group has (GET .../runs lists them). |
created_by |
object | yes | Who created the group, as an actor object. |
created_at |
string (date-time) | yes | When it was created (UTC). |
GroupProfitAndLoss
| Field | Type | Required | Description |
|---|---|---|---|
run |
string (uuid) | yes | Id of the run. |
as_of |
string (date) | yes | The group date. |
currency |
string | yes | The reporting currency. |
framework |
"fer" | "hgb" | "ifrs" |
yes | The framework of the run. |
complete |
boolean | yes | False while the run has a blocking exception. |
eliminations_applied |
boolean | yes | True when intragroup items are eliminated (eliminations names the rules); false for a run made before the eliminations existed, which is the aggregate of the entities. |
year_start |
string (date) | yes | The first day of the group year: 1 January. |
revenue |
array of StatementLine |
yes | Revenue lines. |
expenses |
array of StatementLine |
yes | Expense lines. |
total_revenue |
string | yes | Total revenue. |
total_expenses |
string | yes | Total expenses. |
net_income |
string | yes | Revenue less expenses: the group's profit or loss, before its attribution. |
attributable_to_nci |
string | The part of net_income attributable to non-controlling interests (rule E5; IFRS 10.B94, IAS 1.81B). It is not an expense. (default "0.00") |
|
attributable_to_owners |
string | The part attributable to the owners of the parent: net_income less attributable_to_nci; the balance sheet's result of the year. (default "0.00") |
MemberInput
| Field | Type | Required | Description |
|---|---|---|---|
entity |
string | yes | Code of the subsidiary entity (a direct subsidiary of the parent). |
ownership_percent |
decimal string | yes | The parent's share of the subsidiary, in percent. A percentage with up to four decimals (a decimal string). (max 100; greater than 0) |
control_basis |
string | yes | The control assessment (IFRS 10.5 to 10.7; Art. 963 para. 2 OR): why the parent controls the subsidiary. It is kept with the approval and is what a second person confirms. (min length 3; max length 2000) |
acquired_on |
string (date) | yes | The date the parent acquired control (ISO 8601). |
consolidated_from |
string (date) | yes | The date from which the subsidiary is consolidated and translated: its equity at this date is translated at the rate of the date. Not before acquired_on. |
effective_from |
string (date) or null | The group date from which this version applies; default: consolidated_from. A run takes the version in force at its date. |
|
acquisition_cost |
decimal string or null | What the parent paid for the shares; used by the acquisition entries. (min 0) | |
acquisition_cost_currency |
string or null | The currency of acquisition_cost; required with it. (pattern ^[A-Z]{3}$) |
|
net_assets_at_acquisition |
decimal string or null | The fair value of the subsidiary's identifiable net assets at acquired_on (IFRS 3.18), in its functional currency. This version takes the book value: it must equal the net assets the subsidiary's ledger holds at that date, else the run reports fair_value_adjustment_unsupported. Required, with the cost and the investment account, for the capital consolidation (E4, E5). |
|
investment_account |
string or null | Code of the account in the parent entity that holds the cost of the shares. |
MemberOut
| Field | Type | Required | Description |
|---|---|---|---|
id |
string (uuid) | yes | Id of this version. |
group |
string | yes | Code of the group. |
entity |
string | yes | Code of the subsidiary entity. |
entity_name |
string | yes | Its name. |
currency |
string | yes | Its functional currency. |
version |
integer | yes | The version number of this subsidiary in the group, from 1. |
ownership_percent |
string | yes | The parent's share, in percent. |
method |
"full" |
yes | The consolidation method: full. |
control_basis |
string | yes | The control assessment that was approved. |
goodwill_policy |
"amortise" | "impairment_only" | "offset_equity" |
yes | The group's goodwill policy when approved. |
acquired_on |
string (date) | yes | When control was acquired. |
consolidated_from |
string (date) | yes | From when it is consolidated. |
effective_from |
string (date) | yes | The group date this version applies from. |
corrects_version |
integer or null | yes | The version this one corrects, or null: a version on the same date as the one before replaces it, and one that keeps the share and the acquisition date but states other purchase data (cost, investment account, net assets) replaces that data from the acquisition on. The corrected version stays in the history. |
acquisition_cost |
string or null | yes | What was paid for the shares, if recorded. |
acquisition_cost_currency |
string or null | yes | The currency of the cost. |
net_assets_at_acquisition |
string or null | yes | Net assets at acquisition, if recorded. |
investment_account |
string or null | yes | The parent's account holding the cost. |
approval_id |
string (uuid) or null | yes | The approval request that was decided, or null when the policy let one person approve. |
requested_by |
object | yes | Who requested the version, as an actor object. |
approved_by |
object | yes | Who approved it, as an actor object. |
approved_at |
string (date-time) | yes | When it was approved (UTC). |
MemberResult
| Field | Type | Required | Description |
|---|---|---|---|
status |
"approved" | "pending_approval" |
yes | approved: the version is in force (the policy let this person approve it); pending_approval: a second person decides it. |
approval_id |
string (uuid) or null | yes | The approval request when it waits for a second person; else null. |
member |
MemberOut or null |
yes | The version once approved; null while it waits. |
NegativeGoodwill
A negative difference at acquisition kept as a liability (Swiss GAAP FER 30/17; under HGB the "Unterschiedsbetrag aus der Kapitalkonsolidierung", section 301 para. 3).
| Field | Type | Required | Description |
|---|---|---|---|
amount |
string | yes | The negative difference at acquisition. |
release_years |
integer or null | yes | The years it is released to profit or loss over (FER); null when the group releases it itself (HGB, section 309 para. 2). |
released_of_year |
string | yes | Released in the group year. |
released |
string | yes | Released up to the group date. |
closing |
string | yes | Still on the liability at the group date. |
PendingMember
| Field | Type | Required | Description |
|---|---|---|---|
approval_id |
string (uuid) | yes | The approval request: POST /v1/approvals/{approval_id}/approve, by a second person with the approve scope. |
entity |
string | yes | Code of the subsidiary entity. |
ownership_percent |
string | yes | The proposed share, in percent. |
consolidated_from |
string (date) | yes | The proposed date it is consolidated from. |
requested_by |
object | yes | Who requested it, as an actor object. |
requested_at |
string (date-time) | yes | When it was requested (UTC). |
RateUse
| Field | Type | Required | Description |
|---|---|---|---|
kind |
"average" | "closing" | "historical" | "transaction" |
yes | closing (the last fixing of the month of the date), average (the mean of the month's fixings), historical (the rate of the date a subsidiary is consolidated from) or transaction (the rate of the date of an equity movement). |
entity |
string | yes | The entity whose currency it translates. |
base |
string | yes | The functional currency. |
quote |
string | yes | The reporting currency: the rate is units of it per unit of base. |
period |
string or null | yes | The calendar month YYYY-MM of a closing or average rate. |
date |
string (date) or null | yes | The date of a historical or transaction rate. |
rate |
string | yes | The rate used. |
source |
string | yes | The rate source: the ECB euro foreign exchange reference rates. |
first_fixing |
string (date) or null | yes | The first fixing the rate rests on. |
last_fixing |
string (date) or null | yes | The last fixing the rate rests on. |
fixings |
integer or null | yes | How many fixings an average is the mean of. |
dataset_version |
string | yes | The data-vNext dataset version that served the rate, so the run can be checked against the same pinned data. |
RollForwardEffect
| Field | Type | Required | Description |
|---|---|---|---|
on |
string | yes | The month YYYY-MM of a profit, or the date of an equity movement. |
amount |
string | yes | The profit or the movement, in the functional currency. |
rate |
string | yes | The average rate of the month or the rate of the date. |
effect |
string | yes | amount x (closing rate - rate): what the move of the closing rate did to the reserve. |
RunEliminations
| Field | Type | Required | Description |
|---|---|---|---|
run |
string (uuid) | yes | Id of the run. |
currency |
string | yes | The reporting currency. |
rules |
array of string | yes | The rules the run applied. |
pending |
array of string | yes | The rules of the design not applied yet. |
acquisitions |
array of Acquisition |
Per subsidiary the capital consolidation (E4, E5, E7) with its basis. | |
pairs |
array of EliminationPair |
yes | One entry per rule and pair of entities that hold anything towards each other. |
debit |
string | yes | Total debit of the elimination layer, the capital rules included. |
credit |
string | yes | Total credit: equal to the debit, every pair balances. |
RunException
| Field | Type | Required | Description |
|---|---|---|---|
code |
string | yes | rate_missing (a rate the rate source does not publish), unmapped_report_line (an account on a line outside the group's vocabulary), cta_unreconciled (the reserve and its roll-forward differ by more than rounding), period_open (a period of the entity is still open), member_not_consolidated (a member starts after the date), opening_position_missing (a member is consolidated from a date after it was acquired: its investment cannot be eliminated, blocking), acquisition_basis_incomplete, ownership_change_unsupported, investment_differs_from_cost and fair_value_adjustment_unsupported (the capital consolidation cannot be computed as it should: blocking), bargain_purchase (a gain on a bargain purchase, to be reassessed, IFRS 3.36), goodwill_impairment_not_tested and negative_goodwill_not_released (HGB: a negative difference after equity that the group releases itself, section 309 para. 2 HGB) (warnings), ic_difference (two entities' intragroup balances, or income and expense, do not agree in the document currency: blocking above the group's tolerance), ic_capitalised (an intragroup cost sits in an asset: blocking), ic_exchange_difference (agreed balances differ in the reporting currency beyond the tolerance: a balance was probably not revalued), ic_cash_in_transit (two entities disagree only by a payment one booked and the other not yet: shown as cash in transit, a warning); a run made before the capital consolidation also has eliminations_pending and cta_starts_at_zero. |
severity |
"blocking" | "warning" |
yes | blocking: the statements are incomplete or wrong and a final run could not be made; warning: to know, not blocking. |
entity |
string or null | yes | Code of the entity concerned; null for the group. |
detail |
string | yes | What it is, in English words. |
details |
object or null | The values the words of the code name, by name (amounts as decimal strings, days as ISO dates, lists, or reasons with their own words, code, details and text): the screens word the exception as consolidation.exception.<code> in the person's language. Null for runs made before they were kept, and for eliminations_pending and cta_starts_at_zero. |
RunExceptions
| Field | Type | Required | Description |
|---|---|---|---|
run |
string (uuid) | yes | Id of the run. |
exceptions |
array of RunException |
yes | The exceptions of the run, blocking first. |
RunInput
| Field | Type | Required | Description |
|---|---|---|---|
as_of |
string (date) | yes | The group date: a month end (ISO 8601), because the rates are the calendar months of data-vNext. The ledger is read up to this date by entry date. |
comment |
string or null | A note kept on the run. (max length 1000) |
RunMember
| Field | Type | Required | Description |
|---|---|---|---|
entity |
string | yes | Entity code. |
role |
"parent" | "subsidiary" |
yes | The parent or a subsidiary. |
currency |
string | yes | Its functional currency. |
version |
integer or null | yes | The member version used; null for the parent. |
ownership_percent |
string or null | yes | The share used; null for the parent. |
consolidated_from |
string (date) or null | yes | From when it is consolidated; null for the parent. |
acquired_on |
string (date) or null | When control was acquired; null for the parent. | |
purchase_data_version |
integer or null | The member version whose purchase data (cost, investment account, net assets) the run used: version, or a later version that corrects them; null for the parent. |
|
acquisition_cost |
string or null | The consideration used by E4; null when not stated. | |
acquisition_cost_currency |
string or null | Its currency. | |
net_assets_at_acquisition |
string or null | The stated fair value of the net assets at acquisition. | |
investment_account |
string or null | The parent's account holding the investment. | |
translated |
boolean | yes | False when the entity could not be translated (a rate is missing): it is not in the consolidated lines and a blocking exception says why. |
RunOut
| Field | Type | Required | Description |
|---|---|---|---|
id |
string (uuid) | yes | Id of the run. |
group |
string | yes | Code of the group. |
as_of |
string (date) | yes | The group date. |
version |
integer | yes | The run's number for this group and date, from 1. |
status |
"draft" | "final" | "superseded" |
yes | draft (all that can be made in this version). |
comment |
string or null | yes | The note kept on the run. |
reporting_currency |
string | yes | The presentation currency, fixed when the run was made. |
framework |
"fer" | "hgb" | "ifrs" |
yes | The framework, fixed when the run was made. |
policy |
object | yes | The resolved switches of the framework (goodwill policy, how the translation reserve is presented, the statements) with the source of each: what the run was made under. |
members |
array of RunMember |
yes | The entities of the run and the versions used. |
complete |
boolean | yes | True when no blocking exception was found: every entity is translated, the intragroup items agree and the statements are whole for the rules applied. |
blocking |
integer | yes | The number of blocking exceptions. |
warnings |
integer | yes | The number of warnings. |
eliminations_applied |
boolean | yes | True when the run eliminated intragroup items (eliminations names the rules); false for a run made before the eliminations existed. |
eliminations |
array of string | yes | The elimination rules the run applied: E1 (intragroup balances), E2 (loans), E3 (intragroup income and expense), E4 (the investment against the equity at acquisition, goodwill), E5 (non-controlling interests), E6 (dividends) and, under amortise, E7 (goodwill amortisation); an earlier run names fewer. |
eliminations_pending |
array of string | yes | The rules of the design the run did not apply: empty for a current run; a run made before the capital consolidation names E4, E5 and E7. |
inputs_digest |
string | yes | SHA-256 of the canonical JSON of everything the run was computed from: the entity balances and monthly movements, the member versions and the rates. |
entity_heads |
object | yes | Per entity the position and hash of its ledger chain when the run was made. |
created_by |
object | yes | Who made the run, as an actor object. |
created_at |
string (date-time) | yes | When it was made (UTC). |
RunRates
| Field | Type | Required | Description |
|---|---|---|---|
run |
string (uuid) | yes | Id of the run. |
pinned_version |
string or null | yes | The dataset version the ERP was pinned to when the run was made, if any. |
rates |
array of RateUse |
yes | Every rate the run used. |
StatementLine
| Field | Type | Required | Description |
|---|---|---|---|
report_line |
string | yes | The group report line. |
labels |
map of string | yes | Its label in en, de, fr, it and sv. |
amount |
string | yes | The amount in the reporting currency, positive in the line's own direction (an asset or revenue as a debit or credit balance respectively). |
unmapped |
boolean | yes | True for a line outside the group's vocabulary (a blocking exception names it). |
TheoreticalCapitalisation
What goodwill offset against equity would have given if capitalised and amortised over the group's useful life (Swiss GAAP FER 30/43: shown in the notes).
| Field | Type | Required | Description |
|---|---|---|---|
goodwill |
string | yes | The goodwill at acquisition offset against equity. |
years |
integer | yes | The useful life it would be amortised over. |
amortisation_of_year |
string | yes | The amortisation of the group year: the effect on the year's result. |
amortisation_earlier |
string | yes | The amortisation of earlier years. |
translation_difference |
string | yes | The translation difference on it up to the group date (credit positive). |
carrying_amount |
string | yes | The theoretical carrying amount at the group date: the effect on equity. |
TranslatedTrialBalance
| Field | Type | Required | Description |
|---|---|---|---|
run |
string (uuid) | yes | Id of the run. |
entity |
string | yes | Entity code. |
currency |
string | yes | The entity's functional currency. |
group_currency |
string | yes | The reporting currency. |
translated |
boolean | yes | False when the entity could not be translated: no lines. |
lines |
array of TranslatedTrialBalanceLine |
yes | The translated trial balance, by account code. |
local_debit |
string | yes | Total debit in the functional currency. |
local_credit |
string | yes | Total credit in the functional currency. |
group_debit |
string | yes | Total debit in the reporting currency. |
group_credit |
string | yes | Total credit in the reporting currency. |
balanced |
boolean | yes | True when the reporting-currency debits equal the credits. |
TranslatedTrialBalanceLine
| Field | Type | Required | Description |
|---|---|---|---|
account |
string or null | yes | Account code; null for the lines translation adds: the result of earlier years and the translation reserve. |
name |
string | yes | Account name, or the name of the added line. |
report_line |
string | yes | The group report line it is aggregated on. |
local_debit |
string | yes | Debit in the entity's functional currency (what was translated). |
local_credit |
string | yes | Credit in the entity's functional currency. |
group_debit |
string | yes | Debit in the reporting currency. |
group_credit |
string | yes | Credit in the reporting currency. |
rate_kind |
string or null | yes | closing, average, historical, mixed (several rates) or none. |
rate |
string or null | yes | The rate, or the effective rate of a line at several rates. |