{"serverInfo":{"name":"ifrCoworker","version":"2.0.0"},"name":"com.spocont/ifrCoworker","title":"IFR Coworker","description":"MCP-native IFRS engine — 31 IAS/IFRS standards, 200+ transaction types. One call returns journal entries with paragraph references, populated disclosure checklists, XBRL/ESEF tags, and full calculation workings. Batch your entire period-end in one request. Audit trail built in. Pay as you ride.","homepage":"https://ifrcoworker.com","icon":"https://storage.googleapis.com/reservoprix/stat/ifr-logo.png","version":"2.0.0","tools":[{"name":"ifr_schema","description":"If you know the economic object type but not the standard, pass `elementType` (e.g. 'lease', 'asset', 'financial-instrument') instead of `standard`. For multi-standard types (asset, equity-method-investment), also pass `assetClass` or `investmentType` to get the specific standard's schema. The recurring IFRS 10 group close is elementType 'group'; the IFRS 3 day-1 acquisition is 'business-combination'. This tool returns the input schema for a specific standard: field definitions, IAS/IFRS paragraph references, and a copy-paste-ready `exampleRequests.default` template. Use ifr_route_event if unsure which standard applies. CHOOSING THE RIGHT FIELD-DISCOVERY TOOL: (A) ifr_input_schema — lightweight, fast, free; returns a typed JSON Schema (required fields, types, enum values, defaults) with no prose; use when you need to validate your input programmatically or see which fields are required. (B) ifr_schema (this tool) — full documentation; returns field descriptions, IAS paragraph references, copy-paste `exampleRequests`, `exampleIndex`, and chaining guidance; use when you need to understand WHAT each field means, pick the right example variant, or onboard to a new standard. Both tools are safe to call in parallel. EXAMPLE SELECTION — after calling ifr_schema: (A) If the response contains `exampleIndex`: scan every key and pick the one whose description best matches your scenario — copy `exampleRequests[thatKey]` verbatim, do NOT default to `exampleRequests.default` when a more specific key exists. (B) If only `exampleRequests` is present: copy `exampleRequests.default`. In both cases revise every field to real business values. Field meanings are in `fields[fieldName].description` in the same response. SCHEMA VERSION CONTROL HASH: if reusing a cached input, compare the returned `schemaVersionControlHash` (12-char hex) against your previously recorded value — a changed hash means FIELD_DEFINITIONS were updated, discard the cached input and rebuild from the current schema. ","inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"standard":{"type":"string","enum":["ias2","ias7","ias10","ias12","ias16","ias19","ias20","ias21","ias23","ias27","ias28","ias29","ias33","ias36","ias37","ias38","ias40","ias41","ifrs1","ifrs2","ifrs3","ifrs5","ifrs6","ifrs8","ifrs9","ifrs10","ifrs11","ifrs13","ifrs15","ifrs16","ifrs20","general-journal"]},"elementType":{"type":"string","enum":["lease","financial-instrument","provision","revenue-contract","employee-obligation","share-payment","inventory","government-grant","general-journal","asset","equity-method-investment","business-combination","group","tax-position","fx-exposure","borrowing-costs","impairment-test","disposal-group","eps","fair-value-measurement","cash-flow-statement","separate-financials","segments","first-time-adoption","regulatory-balance","post-period-events","hyperinflation"]},"assetClass":{"description":"Required when elementType is \"asset\" and you want a specific standard schema. Values: PPE, INTANGIBLE_ASSET, INVESTMENT_PROPERTY, BIOLOGICAL_ASSET, EXPLORATION","type":"string"},"investmentType":{"description":"Required when elementType is \"equity-method-investment\" and you want a specific standard schema. Values: ASSOCIATE, JOINT_VENTURE. Subsidiaries/consolidation: use elementType \"group\"; day-1 acquisitions: elementType \"business-combination\".","type":"string"},"includeAllBranches":{"description":"Set true to receive every field regardless of `perspective`. Use it when you need the complete reference — comparing branches, building documentation, or checking whether a field exists at all — while still passing a perspective so the right exampleRequest comes back. Default false: when a perspective is declared, the other branches' fields are filtered out.","type":"boolean"},"perspective":{"description":"OPTIONAL branch filter. A standard's schema serves every branch at once — IFRS 16 carries LESSEE, LESSOR and SELLER_LESSEE fields together. Declaring your perspective removes the fields that provably belong to the other branches, cutting the payload substantially (IFRS 16 LESSEE: 26 of 198 fields drop out). Values are standard-specific: IFRS 16 accepts LESSEE, LESSOR, SELLER_LESSEE. Nothing is hidden on a guess — only fields whose own notApplicableWhen condition is decidably true for your perspective are removed, and every removal is listed in filteredFields with the schema's stated reason. Omit it to receive the complete schema.","type":"string"}}},"outputSchema":{"type":"object","description":"IFRS standard input schema with field definitions, paragraph references, and a strict-mode-passing exampleRequests.default template.","properties":{"success":{"type":"boolean"},"data":{"type":"object","properties":{"fields":{"type":"object","additionalProperties":true,"description":"Field definitions: type, required, description, iasReference"},"exampleIndex":{"type":"object","additionalProperties":true,"description":"Present when multiple named examples exist. Maps key → \"when to use\" description. Read this FIRST: pick the key matching your scenario, then copy exampleRequests[thatKey] as your base input."},"exampleRequests":{"type":"object","additionalProperties":true,"description":"Pre-filled, strict-mode-passing input templates keyed by scenario name. If exampleIndex is present, use it to select the right key. Otherwise use exampleRequests.default."}}},"warnings":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["message"]}}},"required":["success"]},"annotations":{"readOnlyHint":true,"idempotentHint":true,"destructiveHint":false,"openWorldHint":false}},{"name":"ifr_validate","description":"If you know the economic object type but not the standard, pass `elementType` instead of `standard`. The discriminator field (`assetClass` for 'asset', `investmentType` for 'equity-method-investment') must be included in the `input` object. OPTIONAL pre-flight validator — only use when you need to surface errors to the user before attempting ifr_calculate. REQUIRED INPUT FIELD: `id` — include in the `input` object, same value as used in ifr_calculate. ifr_calculate validates internally and returns the same structured errors; calling ifr_validate first adds a round-trip without new information. Use when: user explicitly asks to check data, or when unsure about a complex array structure before committing. Returns errors, warnings, and missingFields with paragraph references. No silent defaults in MCP mode — all fields must be explicit. MANDATORY CONSIDERATIONS: validation rejects requests that leave a tier-1 cascade consideration unaddressed (UNADDRESSED errors) — e.g. no impairment-indicator assessment, no deferred-tax position, no dismantling decision at initial recognition. The error text names both cures: supply the data fields, or record the explicit judgment (0 / false / enum). These judgment values must come from the USER — never invent them. ","inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"standard":{"type":"string","enum":["ias2","ias7","ias10","ias12","ias16","ias19","ias20","ias21","ias23","ias27","ias28","ias29","ias33","ias36","ias37","ias38","ias40","ias41","ifrs1","ifrs2","ifrs3","ifrs5","ifrs6","ifrs8","ifrs9","ifrs10","ifrs11","ifrs13","ifrs15","ifrs16","ifrs20","general-journal"]},"elementType":{"type":"string","enum":["lease","financial-instrument","provision","revenue-contract","employee-obligation","share-payment","inventory","government-grant","general-journal","asset","equity-method-investment","business-combination","group","tax-position","fx-exposure","borrowing-costs","impairment-test","disposal-group","eps","fair-value-measurement","cash-flow-statement","separate-financials","segments","first-time-adoption","regulatory-balance","post-period-events","hyperinflation"]},"input":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{},"description":"The input object to validate"}},"required":["input"]},"outputSchema":{"type":"object","properties":{"success":{"type":"boolean"},"isValid":{"type":"boolean"},"errors":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"message":{"type":"string"},"iasReference":{"type":"string"}}}},"warnings":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["message"]}},"missingFields":{"type":"array","items":{"type":"string"},"description":"Required fields absent from input"},"allValidationIssues":{"type":"array","items":{"type":"object"},"description":"Single authoritative list merging missingFields and errors; each item carries kind: \"missing\" (absent required field) or \"error\" (present-but-invalid). Parse this instead of reconciling missingFields + errors separately."}},"required":["success","isValid"]},"annotations":{"readOnlyHint":true,"idempotentHint":true,"destructiveHint":false,"openWorldHint":false}},{"name":"ifr_calculate","description":"If you know the economic object type but not the standard, pass `elementType` instead of `standard`. The discriminator field (`assetClass` for 'asset', `investmentType` for 'equity-method-investment') must be included in the `input` object. Run a full IFRS/IAS calculation. Returns journal entries, disclosures, measurements, and compliance notes. REQUIRED INPUT FIELD: `id` — include in the `input` object (e.g. input.id:\"MACHINE-A\"). Stamped as Reference on every journal entry and CSV row. Before calling this tool, call ifr_input_schema (fast, free, typed JSON Schema) or ifr_schema (full documentation with copy-paste examples). Boolean recognition gates require explicit true — absent = gate closed. Measurement inputs (discountRatePreTax, expectedSettlementDate, usefulLifeEndDate) have no engine defaults. Cross-standard redirects fire automatically when relevant fields are provided. CASCADE TRACE: every response includes `context.cascadeTrace` — an array of every standard chain evaluated: { child, mode:\"PRE_CALCULATION\"|\"POST_CALCULATION\", status:\"fired\"|\"skipped\", skipReason?, result? }. PRE_CALCULATION = satellite inputs resolved before the primary calc (e.g. IAS 23 borrowing costs → capitalised into IAS 16 cost). POST_CALCULATION = consequential standards applied to the primary result (e.g. IAS 12 deferred tax on the asset temporary difference). status:\"skipped\" entries carry a machine-readable skipReason — the chain was considered, not merely omitted. This is audit-grade completeness evidence. CONSIDERATION TIERS (three-state conditionality): schema.cascades entries carry considerationTier MANDATORY or CONDITIONAL. A MANDATORY consideration (IAS 36.9 indicator assessment; IAS 12 temporary differences; IAS 23 borrowing costs and IAS 37 dismantling/restoration at initial recognition; IFRS 16.9 embedded-lease assessment on IFRS 15 contracts) must be addressed on every applicable call: supply the data evidence fields OR explicit denial evidence (dismantlingEstimate: 0, impairmentIndicatorsPresent: false, leaseInContract: false, deferredTaxAssessment: \"HANDLED_CENTRALLY\"|\"NOT_APPLICABLE\"|\"NO_TEMPORARY_DIFFERENCE\") — omitting both FAILS validation. Denial evidence is human judgment: ASK THE USER for it, never fabricate it. Explicit denials appear in cascadeTrace as skipReason JUDGED_NOT_APPLICABLE with the evidence quoted; CONDITIONAL chains stay presence-based (TRIGGER_FIELDS_ABSENT / CONDITION_NOT_MET). Response includes correlationId — pass it to ifr_flag_result if the output looks incorrect. DOWNLOAD: context.calculationSheetsUrl contains a direct download link for an 8-sheet Excel workbook (Journal Entries, Movements Balance, Movements in SoFP, Financial Performance, OCI, Movements in Equity, Cashflow, Disclosure Checklist) valid for 24 hours. It is fetched with the IFRS token (Authorization: Bearer <token>) and each download costs 15 credits; opened in a browser without the token it answers 401 — so do not hand it to the user as a link to click: fetch it yourself if you can send the header, or tell the user the workbook is waiting under 'Downloadable workbooks' at https://ifrcoworker.com/#downloads (signed in). INPUT COVERAGE: data.ignoredInputs lists every submitted field the taken calculation path did not use (CF 2.13 completeness). When non-empty, the engine AUTOMATICALLY flags the answer for quality check server-side (context.ignoredInputsAlert carries the flagId) — review the listed fields and, if a different branch was intended, adjust the activating fields and recalculate. COMPANION EVENTS — after every standard call, check whether any of these signals are present in the scenario. Standard controllers compute measurements (depreciation, fair value, interest) but do NOT produce journal entries for: (1) CASH TRANSACTION — \"paid cash\", \"cash consideration\", \"cash purchase\", \"cash settled\": add ASSET_PURCHASE_CASH via general-journal, OR set acquisitionPaymentMode:CASH + acquisitionPaymentDate on IAS 16 / IAS 38 / IAS 40 / IFRS 6 and the companion JE is auto-generated. (2) EQUITY / SHARE TRANSACTION — \"share issuance\", \"rights issue\", \"bonus shares\", \"warrant exercise\": use general-journal with eventType SHARE_ISSUANCE_WITH_PREMIUM / BONUS_ISSUE / RIGHTS_ISSUE / WARRANT_EXERCISE. (3) REALISED FX SETTLEMENT — \"FX settled\", \"realised exchange gain/loss\", \"foreign currency transaction settled\": set settlementMode:CASH + settlementDate on IAS 21 for auto-generated companion JE, or use general-journal FX_GAIN_REALISED / FX_LOSS_REALISED. (4) ACCRUALS / PREPAYMENTS — \"accrued expense\", \"period-end accrual\", \"prepayment paid\", \"advance payment\": use general-journal ACCRUAL_RECOGNISED / ACCRUAL_REVERSED / PREPAYMENT_PAID. (5) BAD DEBT — \"write off receivable\", \"bad debt written off\", \"recover bad debt\": use general-journal BAD_DEBT_WRITE_OFF / BAD_DEBT_RECOVERY. (6) PROVISION UTILISED — \"provision paid\", \"utilised against provision\", \"provision settled in cash\": use general-journal PROVISION_UTILISED. (7) INTERCOMPANY — \"loan to subsidiary\", \"intragroup loan\", \"management fee recharge\": use general-journal INTERCOMPANY_LOAN_ADVANCED / INTERCOMPANY_LOAN_REPAID / INTERCOMPANY_RECHARGE. (8) WITHHOLDING TAX / PAYE / DEDUCTIBLE VAT — \"WHT on dividend\", \"PAYE remittance\", \"income tax withheld from salary\", \"input VAT reclaimable\", \"deductible VAT on purchase\": these are cash-settled government remittances not produced by the measurement controllers — use general-journal WITHHOLDING_TAX or EXPLICIT entries (DR WHT Payable / CR Cash; DR Input VAT / CR Cash). NOTE: \"deferred tax\" does NOT require a companion event — IAS 12 auto-fires from the main input. \"Current/non-current reclassification\" is a presentation change only — no JE. Call ifr_schema({ standard: \"general-journal\" }) to discover all available general-journal event types.","inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"standard":{"type":"string","enum":["ias2","ias7","ias10","ias12","ias16","ias19","ias20","ias21","ias23","ias27","ias28","ias29","ias33","ias36","ias37","ias38","ias40","ias41","ifrs1","ifrs2","ifrs3","ifrs5","ifrs6","ifrs8","ifrs9","ifrs10","ifrs11","ifrs13","ifrs15","ifrs16","ifrs20","general-journal"]},"elementType":{"type":"string","enum":["lease","financial-instrument","provision","revenue-contract","employee-obligation","share-payment","inventory","government-grant","general-journal","asset","equity-method-investment","business-combination","group","tax-position","fx-exposure","borrowing-costs","impairment-test","disposal-group","eps","fair-value-measurement","cash-flow-statement","separate-financials","segments","first-time-adoption","regulatory-balance","post-period-events","hyperinflation"]},"input":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{},"description":"The calculation input object"},"exportJournalCsv":{"description":"When true, the response also includes a journalCsvFile object (write its `content` to `filename` to save the .csv) alongside the JSON journalEntries. Opt-in: omitted by default (JSON only).","type":"boolean"},"csvFilename":{"description":"Filename for the CSV export, e.g. \"machine_a_journal.csv\". Used as journalCsvFile.filename; defaults to journal_entries_<reportingDate>.csv.","type":"string","maxLength":200}},"required":["input"]},"outputSchema":{"type":"object","properties":{"success":{"type":"boolean"},"data":{"type":"object","description":"Calculation results","properties":{"journalEntries":{"type":"array","items":{"type":"object","properties":{"description":{"type":"string"},"reference":{"type":"string"},"entries":{"type":"array","items":{"type":"object","properties":{"account":{"type":"string"},"debit":{"type":"number"},"credit":{"type":"number"},"xbrl":{"type":"object","additionalProperties":true}}}}}},"description":"IFRS DR/CR journal entries with paragraph references"},"journalCsvFile":{"type":"object","description":"Present when exportJournalCsv:true. Self-describing CSV file: write `content` verbatim to a UTF-8 file named `filename` to save it as a spreadsheet-ready CSV, or render `content` inline.","properties":{"filename":{"type":"string"},"format":{"type":"string"},"mimeType":{"type":"string"},"encoding":{"type":"string"},"rowCount":{"type":"number"},"byteLength":{"type":"number"},"content":{"type":"string"},"saveInstruction":{"type":"string"}}},"disclosures":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["reference","requirement"],"properties":{"reference":{"type":"string","description":"The paragraph this line answers. The line's identity — ifr_disclosure_checklist reconciles on it, not on the text."},"requirement":{"type":"string","description":"What must be disclosed."},"value":{"description":"The figure or narrative. null means the engine produced none — `needsInput` or `note` then says why."},"required":{"type":"boolean","description":"Present where the engine judged, for THIS input, whether the paragraph bites. Absent means no judgement was published — not that the disclosure is optional."},"description":{"type":"string","description":"The engine's own explanation of what it did for this line."},"needsInput":{"type":"boolean","description":"true when there is no route to this figure from the input — entity narrative or data the caller must supply."},"note":{"type":"string","description":"Why the requirement does not reach this case, where it does not."},"detail":{"type":"object","additionalProperties":true,"description":"Structured extras belonging to this one line — components of the figure, the indicators behind it, the expedients elected."}}},"description":"IFRS disclosure notes — one line per paragraph, keyed by `reference`"},"workings":{"type":"object","additionalProperties":true,"description":"Period movements, opening/closing reconciliation — for the standard you named"},"chainWorkings":{"type":"array","items":{"type":"object","additionalProperties":true},"description":"Present where the request fired a cascade: the SAME reconciliation for every standard that measured this item, one block each (openingCarryingAmount, periodMovements[], closingCarryingAmount, formula, reference), stamped with the same chainSequence and sourceStandard as chainJournalEntries so the two line up. workingsRefs lists the workingsRef of the entries a block explains; chainSequence is null for a member that published workings but posted no entry. Present this, not `workings` alone — `workings` is only the standard you named. Neither key is IFRS 10 consolidation."},"financialStatements":{"type":"object","additionalProperties":true,"description":"P&L, OCI, balance sheet for the period"},"summary":{"type":"object","additionalProperties":true,"description":"Key figures: carrying amounts, P&L and OCI impact"}}},"warnings":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["message"]}},"correlationId":{"type":"string","description":"Pass to ifr_flag_result or ifr_explain_result within 10 minutes (in-memory result cache); the workbook of the same id is downloadable for 24 h (ifr_calculation_sheets)"},"audit":{"type":"object","description":"Stateless audit envelope — the response alone is sufficient to re-derive and verify the numbers at any later time via ifr_replay (no expiry, nothing stored server-side).","properties":{"standard":{"type":"string"},"engineVersion":{"type":"string"},"schemaVersionControlHash":{"type":"string"},"inputSha256":{"type":"string","description":"SHA-256 of the canonical (key-sorted) input"},"outputSha256":{"type":"string","description":"SHA-256 of the canonical calculation data — pass to ifr_replay as expectedOutputSha256"},"inputEcho":{"type":"object","additionalProperties":true,"description":"Canonical echo of the calculation input — pass to ifr_replay as input. Omitted on batch items (the batch request already holds every item input)."},"xbrlCurrency":{"type":"string","description":"Batch items only — pass to ifr_replay for hash parity"},"replay":{"type":"string"}}},"context":{"type":"object","description":"Enrichment metadata — always present on successful calculations","properties":{"correlationId":{"type":"string","description":"Same as top-level correlationId"},"calculationSheetsUrl":{"type":"string","description":"8-sheet Excel workbook (24 h). Needs the Bearer token, 15 credits per download; a browser without the token gets 401 — point the user to https://ifrcoworker.com/#downloads"},"calculationSheetsNotice":{"type":"string","description":"Human-readable instruction to offer the workbook link to the user"},"nextSteps":{"type":"array","items":{"type":"string"}},"relatedStandards":{"type":"array","items":{"type":"object","additionalProperties":true}}}}},"required":["success"]},"annotations":{"readOnlyHint":true,"idempotentHint":true,"destructiveHint":false,"openWorldHint":false}},{"name":"ifr_apply_ias10","description":"Apply IAS 10 (Events After Reporting Period) overlay to a prior calculation output. Classifies events as adjusting/non-adjusting, assesses going concern, generates adjusted journal entries. Most standards auto-trigger IAS 10 when subsequentEventDate + subsequentEventKind are provided — use this tool only for manual overlay or multi-standard combinations. ","inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"input":{"type":"object","properties":{"sourceCalculation":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{},"description":"Output from another ifr_calculate call"},"events":{"type":"array","items":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"description":"Array of post-reporting-period events"},"reportingDate":{"type":"string","description":"Reporting date (YYYY-MM-DD)"},"authorisationDate":{"type":"string","description":"Date financial statements authorised for issue (YYYY-MM-DD)"}},"required":["sourceCalculation","events","reportingDate","authorisationDate"]}},"required":["input"]},"outputSchema":{"type":"object","description":"IAS 10 overlay: events classified adjusting/non-adjusting, adjusted journal entries, going-concern flag.","properties":{"success":{"type":"boolean"},"data":{"type":"object","properties":{"events":{"type":"array","items":{"type":"object","additionalProperties":true},"description":"Each event with classification and rationale"},"adjustedJournalEntries":{"type":"array","items":{"type":"object","properties":{"description":{"type":"string"},"reference":{"type":"string"},"entries":{"type":"array","items":{"type":"object","properties":{"account":{"type":"string"},"debit":{"type":"number"},"credit":{"type":"number"},"xbrl":{"type":"object","additionalProperties":true}}}}}}},"goingConcern":{"type":"object","properties":{"impacted":{"type":"boolean"},"notes":{"type":"string"}}}}},"correlationId":{"type":"string"},"warnings":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["message"]}}},"required":["success"]},"annotations":{"readOnlyHint":true,"idempotentHint":true,"destructiveHint":false,"openWorldHint":false}},{"name":"ifr_route_event","description":"ROUTER — the entry point for every business event. Describe what happened in plain language (\"bought a machine\", \"signed an office lease\", \"customer went bankrupt\") and get back the exact call to make. FREE — no usage charge. Each match carries an `endpoint` block with the EXACT next call: the ifr_calculate arguments (economic elementType + discriminator where a cascade-element route exists, otherwise the standard slug), the REST cascade endpoint, and `autoCascades` — the child standards that fire automatically inside that one ifr_calculate call. CRITICAL: never call autoCascade standards separately — they execute inside the primary call and their results appear in `context.cascadeTrace`. Calling them again would duplicate journal entries. Copy `endpoint.mcpCall` instead of deriving routing yourself. The matched standards (top 3, with rationale and copy-paste-ready minimal examples) are supporting detail — the endpoint block is the answer. UTILITY SLUG (use ifr_schema + ifr_calculate with this when no IFRS standard applies): \"general-journal\" — universal \"else\" controller for ALL journal entries not covered by a dedicated IFRS/IAS standard. Four input modes: (1) EVENT-LABEL: expenseCategory (PERSONNEL, DIVIDEND_DECLARED, VAT_OUTPUT, WITHHOLDING_TAX, DISCONTINUED_OPERATIONS, etc.) + amount — auto-fills accounts and XBRL; (2) EXPLICIT: entries[] with DR/CR lines — per-line XBRL enrichment, statementPlacement, xbrlFacts[]; (3) PATTERN: pattern keyword string — matches one of 18 named JE_PATTERNS (associate dividend, salary+PAYE, VAT settlement, period close, etc.); (4) LINE-ITEMS: lineItems[] array for multiple independent event-label items. BEFORE calling ifr_calculate with standard \"general-journal\": read the MCP resource ifrs://reference/direct-je-patterns — it lists all 18 named scenarios with keywords and DR/CR account pairs.","inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"query":{"type":"string","maxLength":500,"description":"Plain-language description of the accounting scenario"}},"required":["query"]},"outputSchema":{"type":"object","description":"Top 3 matching IFRS standards with rationale and minimal example inputs.","properties":{"success":{"type":"boolean"},"data":{"type":"object","properties":{"matches":{"type":"array","maxItems":3,"items":{"type":"object","properties":{"standard":{"type":"string"},"title":{"type":"string"},"confidence":{"type":"number"},"rationale":{"type":"string"},"exampleRequest":{"type":"object","additionalProperties":true},"endpoint":{"type":"object","description":"The exact next call for this match — copy it, do not derive routing yourself.","properties":{"mcpTool":{"type":"string"},"mcpCall":{"type":"object","additionalProperties":true,"description":"Arguments form: { standard } OR { elementType, discriminator } for cascade-element routing"},"restCascadeEndpoint":{"type":"string","description":"POST /api/ifrcoworker/cascade/<elementType>/calculate — null when no element route exists"},"restDirectEndpoint":{"type":"string"},"autoCascades":{"type":"array","items":{"type":"string"},"description":"Child standards that fire automatically inside this one call — never call them separately (duplicate journal entries)"},"cascadeNote":{"type":"string"}}}}}}}}},"required":["success"]},"annotations":{"readOnlyHint":true,"idempotentHint":true,"destructiveHint":false,"openWorldHint":false}},{"name":"ifr_period_checklist","description":"Planning tool for a full period-end close. Pass an entityProfile of fact flags (hasInventory, hasPPE, hasLeases, hasFinancialInstruments, isGroup, isListed, incomeTaxApplicable, etc.) and get back the exact ordered list of IFRS/IAS standards to run for this entity — each with its requiredInputFields and its opening* carry-forward fields. Run the standards in executionOrder, or submit them together as an ifr_period_end_batch (which sorts internally). For each standard, carry the prior period's closing* outputs into the matching opening* inputs — the engine is stateless and holds no entity config or prior balances. FREE — no usage charge. Call this BEFORE ifr_batch_validate / ifr_period_end_batch to know what to assemble.","inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"entityProfile":{"type":"object","properties":{"hasInventory":{"type":"boolean"},"hasPPE":{"type":"boolean"},"hasIntangibles":{"type":"boolean"},"hasInvestmentProperty":{"type":"boolean"},"hasBiologicalAssets":{"type":"boolean"},"hasExplorationAssets":{"type":"boolean"},"hasBorrowingCosts":{"type":"boolean"},"hasGovernmentGrants":{"type":"boolean"},"hasProvisions":{"type":"boolean"},"hasDefinedBenefitPlan":{"type":"boolean"},"hasLeases":{"type":"boolean"},"hasShareBasedPayments":{"type":"boolean"},"hasFinancialInstruments":{"type":"boolean"},"hasRevenueContracts":{"type":"boolean"},"hasAssociates":{"type":"boolean"},"hasJointArrangements":{"type":"boolean"},"hasBusinessCombination":{"type":"boolean"},"hasHeldForSale":{"type":"boolean"},"hasForeignCurrency":{"type":"boolean"},"isHyperinflationary":{"type":"boolean"},"isGroup":{"type":"boolean"},"isListed":{"type":"boolean"},"isFirstTimeAdopter":{"type":"boolean"},"incomeTaxApplicable":{"type":"boolean"}},"additionalProperties":{},"description":"Entity fact flags — set true for each that applies to this entity"},"reportingDate":{"description":"ISO reporting date, e.g. \"2025-12-31\"","type":"string"},"previousReportingDate":{"description":"ISO prior period-end date, e.g. \"2024-12-31\"","type":"string"}},"required":["entityProfile"]},"outputSchema":{"type":"object","description":"Ordered list of standards to run for the period, with required inputs and opening* carry-forward fields per standard.","properties":{"success":{"type":"boolean"},"reportingDate":{"type":"string"},"previousReportingDate":{"type":"string"},"executionOrder":{"type":"array","items":{"type":"string"},"description":"Standard slugs in dependency-execution order"},"totalEstimatedCredits":{"type":"number"},"checklist":{"type":"array","items":{"type":"object","properties":{"standard":{"type":"string"},"executionTier":{"type":"number"},"reason":{"type":"string"},"requiredInputFields":{"type":"array","items":{"type":"string"}},"openingBalanceFields":{"type":"array","items":{"type":"string"},"description":"Carry the prior period closing* outputs into these opening* inputs"},"estimatedCredits":{"type":"number"}}}},"note":{"type":"string"}},"required":["success"]},"annotations":{"readOnlyHint":true,"idempotentHint":true,"destructiveHint":false,"openWorldHint":false}},{"name":"ifr_check_quota","description":"Check your remaining ifrCoworker credits without consuming any. Returns creditsRemaining, creditsUsedToday, fullAccess flag, and a cost estimate for batch calls. FREE — does not decrement quota. Call before a large batch to verify you have enough credits. batchCostEstimate.perItem = credits per successfully computed batch item; batchCostEstimate.preflightFree = true (validation phase never charges). ","inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{}},"outputSchema":{"type":"object","properties":{"success":{"type":"boolean"},"creditsRemaining":{"type":"number","description":"Credits remaining on the current payment pack"},"creditsUsedToday":{"type":"number","description":"Credits consumed in the current billing window"},"fullAccess":{"type":"boolean","description":"Whether this token has unrestricted access"},"batchCostEstimate":{"type":"object","properties":{"perItem":{"type":"number"},"preflightFree":{"type":"boolean"}}},"hint":{"type":"string"}},"required":["success"]},"annotations":{"readOnlyHint":true,"idempotentHint":true,"destructiveHint":false,"openWorldHint":false}},{"name":"ifr_period_end_batch","description":"THE period-end execution tool — process multiple IFRS calculations for a reporting period in one call (year-end, quarter-end, or month-end). One tool, three modes: (1) PLAIN BATCH (default): items + accountingPolicy → per-item results, every item's journal entries in one list, trial balance, and all financial statements. (2) SUMMARY: leave includeWorkings false (the default) for the compact ~200KB response; set includeWorkings:true only when step-by-step workings are needed (~600KB). (3) CLOSE: additionally pass entityProfile (fact flags) for a one-call period-end close — the response gains the applicability checklist, recommendedOrder, and a coverage analysis flagging any standard the profile implies but no item was supplied for (the checklist/coverage portion is free). REQUIRED: each item's `input` object must include an `id` field (e.g. { type:\"ias37\", input:{ id:\"PROV-LEGAL-001\", ...otherFields } }) — validated by the controller schema; stamped as Reference on every journal entry for that item. GROUP vs BATCH (G-1700): items of ONE entity → its separate statements; items of TWO OR MORE entities (input.entityId) + the group block (parent, entities[] with the control facts, intragroup rows) + previousPeriodBalances with row.entity → each entity's separate statements AND the consolidated set in one call (the IFRS 10 group cascade fed with the statements derived from the entities' own items). An ifrs10 item in a one-entity batch is refused. With the entities' statements already in hand, call the group cascade directly (ifr_calculate, elementType \"group\"). CASCADE TRACE: each item result carries `context.cascadeTrace` — every cross-standard chain evaluated (PRE satellite inputs + POST consequential standards), each with status \"fired\" or \"skipped\" and a skipReason when skipped. This is the per-item completeness record. MANDATORY CONSIDERATIONS: every item must address its tier-1 cascade considerations (data OR explicit denial evidence — impairmentIndicatorsPresent: false, deferredTaxAssessment enum, dismantlingEstimate: 0...); preflight validation rejects silent omissions and these judgment fields are EXCLUDED from auto-fill — collect the answers from the user (ifr_period_checklist lists them per standard under mandatoryConsiderations). INPUT COVERAGE: each item's data.ignoredInputs lists submitted fields the taken path did not use; affected items are rolled up in the batch-level ignoredInputsAlerts and each was AUTOMATICALLY flagged for quality check server-side. UNDECLARED FIELDS (G-1795): a field on an item that its standard does not declare is REFUSED before anything is calculated (FIELD_UNRECOGNISED, naming the field and the item) — the same answer ifr_batch_validate gives; nothing is silently ignored. input.entityId is the batch's entity dimension and is never refused. ACCOUNTING POLICY — build the accountingPolicy block BEFORE calling this tool. Always include at top level: functionalCurrency, presentationCurrency, reportingDate, previousReportingDate. Each standard that appears in items[] may also need its own policy block (measurement model, cost formula, presentation method...). Do NOT guess these: the ifr_schema response for a standard carries `batchAccountingPolicySchema` with that standard's required policy fields and their allowed values, generated from the engine itself. For the whole table in one place, read ifrs://reference/accounting-policy-choices. RATE GOVERNANCE: discount/interest rates are explicit inputs — preflight rejects (free, no credits) any item whose required rate is missing. Supply rates per item, or once for the whole batch via accountingPolicy.reportingInterestRates { corporateBondYield (IAS 19.83), riskFreePreTax (IAS 37.47 — provisions, dismantling/restoration), governmentBondYield, riskFreePostTax }. Lease rates (IFRS 16.26 implicit rate / IBR) and instrument EIRs are lease/instrument-specific — always per item, never a policy default. Which rate type applies where: read ifrs://reference/discounting-and-interest-rate-guide; each schema response lists its rateRequirements. ASSEMBLY WORKFLOW: (1) IDENTIFY — for each item whose standard is not explicitly named, call ifr_route_event in parallel to resolve the slug. (2) FREE VALIDATE LOOP — assemble all items[] plus accountingPolicy, then call ifr_batch_validate (free). Fix all reported errors and repeat until allValid: true. Never call ifr_period_end_batch until allValid is true — the validate loop costs zero credits. (3) CALCULATE — once allValid: true, submit to ifr_period_end_batch in the DEFAULT mode (do NOT pass mode). The default mode is the one that assembles and returns the consolidated output; only it returns the trial balance, the financial statements and the workbook link. It returns every item's journal entries in one list (batchJournalEntries), trial balance grouped by XBRL section (Assets, Liabilities, Equity, PL, OCI), financial statements, cash flow statement and disclosure notes. DOWNLOAD (default mode only): the response includes calculationSheetsUrl — a direct link to an 8-sheet Excel workbook (Movements in SoFP, Financial Performance, OCI, Movements in Equity, Cashflow, Disclosure Checklist, Journal Entries, Movements Balance) valid for 24 hours. It is fetched with the IFRS token (Authorization: Bearer <token>) and each download costs 15 credits; opened in a browser without the token it answers 401 — so do not hand it to the user as a link to click: fetch it yourself if you can send the header, or tell the user the workbook is waiting under 'Downloadable workbooks' at https://ifrcoworker.com/#downloads (signed in). RESILIENCE FALLBACK — mode: \"partial\": pass this ONLY to stop one bad item rejecting the whole batch. It validates-then-calculates each item independently and returns per-item results in results[i].result.data (status \"ok\" | \"validation_error\" | \"calculation_error\"); it does NOT assemble or return batchJournalEntries, trialBalance, financialStatements, cashFlowStatement, disclosureNotes, crossChecks/selfCheck or calculationSheetsUrl, and it persists no workbook. Use it to isolate the failing item, fix that item, then re-run the whole batch in the default mode to obtain the consolidated statements and the download link. SIZE CONTROL: the response defaults to compact. includeWorkings, includeXbrlEnrichment and exportXbrl each enlarge it — read their field descriptions in this tool's input schema before setting any of them. The trial balance always carries xbrlElement, xbrlSection and xbrlLabel regardless of those flags. DELIVERY TO A GOOGLE SHEET — BEFORE you call this tool, ask the user explicitly whether they want the output (the .csv journal entries AND the financial statements) delivered back into a Google table (Google Sheet), or just returned inline. If the user says yes: FIRST verify that you (the calling agent) have a working Google Sheets / Drive connector and can actually write to it — perform a real write test (create or append a throwaway cell), not just a capability assumption. If no Google Sheets connector is connected or the write test fails, tell the user and DO NOT run the batch — this call is billable and the result could not be delivered where requested; resolve the connection first. Only once the export path is confirmed: call this tool with exportJournalCsv: true, then write the returned journalCsvFile content and the financialStatements into the Google Sheet. BATCH SIZE GUIDANCE: aim for ≤50 economic events (line items) per call to stay within context window limits and receive full workings. Above 50 items the response grows rapidly; above 200 items you will very likely receive a compact response (workings and disclosures stripped, journal entries + statements + trial balance remain intact). If the user has more than 50 economic events, split into multiple calls of ≤50 items each, then merge the trial balances and journal entry lists in your context — do not attempt a single call with 200+ items unless the user explicitly accepts compact output. ","inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"mode":{"description":"Default: \"all-or-nothing\" — if any item fails preflight validation the whole batch is rejected (no credits charged). Set to \"partial\" to skip the all-or-nothing gate: each item is validated-then-calculated independently; failed items return {status:\"validation_error\"|\"calculation_error\", error} while successful items return {status:\"ok\", result}; credits are only charged for items with status \"ok\". Partial mode returns per-item results ONLY — it does not assemble batchJournalEntries, trialBalance, financialStatements, cashFlowStatement, disclosureNotes or calculationSheetsUrl, and persists no workbook. For the consolidated statements and the download link, use the default mode.","type":"string","enum":["all-or-nothing","partial"]},"accountingPolicy":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{},"description":"REQUIRED entity-wide accounting policy declaration. Must include at top level: entityId, entityIdentifiers, functionalCurrency, presentationCurrency, reportingDate. entityIdentifiers = { lei?, taxNumber?, nationalCompanyId? } — the reporting entity's identifiers (IAS 1.51(a)); at least one must be a non-empty string, none is format-checked. They are written to the workbook's XBRL Report Info, and the XBRL instance identifies the entity by the LEI, else the tax number, else the national company id (only an LEI is ESEF-fileable). Batch level only — not carried into items. entityId (G-1699) names the reporting entity whose books this batch closes — one batch is one entity: every journal and trial-balance line carries it as `entity`, an item stating a different entityId is refused (never merged) unless the batch is a GROUP batch (see `group`, G-1700): there accountingPolicy.entityId names the parent, every entity's items carry their own input.entityId, and the consolidation adjustments carry the group entity they relate to (counterpartyEntity on intragroup rows). An IFRS 10 item in a one-entity batch is refused. isInvestmentEntity (G-1752) — boolean: is the reporting entity an investment entity as defined in IFRS 10 (10.27)? REQUIRED only in a one-entity batch whose bank lines state PROCEEDS_FROM_ / PAYMENTS_FOR_CHANGES_IN_OWNERSHIP_WITHOUT_LOSS_OF_CONTROL (IAS 7.42A); true refuses those values — an investment entity's subsidiary at fair value through profit or loss is an investment, so the flow is investing: use PROCEEDS_FROM_SALE_ / PURCHASE_OF_EQUITY_OR_DEBT_INSTRUMENTS_OF_OTHER_ENTITIES (7.16(c)/(d)). normalOperatingCycle (G-1863 D3) — { clearlyIdentifiable: true, lengthDays } or { clearlyIdentifiable: false }: the entity's normal operating cycle, ONE fact about the entity (IAS 1.68, 1.70; not clearly identifiable → IAS 1.68 assumes twelve months). Filled into every IAS 41 and IFRS 15 item that does not state it; read only where an item is realised or settled more than twelve months after the reporting date (IAS 1.66(a), 1.69(a)); not stated, twelve months are assumed (IAS 1.68) and the item's basis says so. Standard-specific policy choices are required per standard block when that standard appears in items (IFRS requires same-class/same-category consistency — IAS 16.36, IAS 2.25). Format: { entityId, entityIdentifiers: { lei }, functionalCurrency, presentationCurrency, reportingDate, ias2: { costFormula }, ias16: { measurementModel, byClass?: {BUILDINGS: \"REVALUATION\"} }, ias38: { measurementModel }, ias40: { measurementModel }, ifrs6: { explorationCostPolicy }, reportingInterestRates?: { corporateBondYield: 0.049, governmentBondYield: 0.038, riskFreePreTax: 0.042, riskFreePostTax: 0.034 } }. reportingInterestRates is optional — declare entity-level rate defaults once; engine injects: corporateBondYield → IAS 19 discountRateCorporateBond, riskFreePreTax → IAS 37 discountRatePreTax AND the IAS 37.47 rate of the dismantling / restoration provisions the asset standards cascade to IAS 37 (IAS 16 / IAS 40 dismantlingDiscountRate, IFRS 6 / IFRS 16 restorationDiscountRate — differs from the lease IBR). Item-level values always override. Resolution order (most specific wins): 1) item.input value, 2) policy[standard].byClass/byCategory/byType[classValue], 3) policy[standard].default, 4) reportingInterestRates defaults."},"items":{"type":"array","items":{"type":"object","properties":{"type":{"description":"Standard slug (e.g. \"ias16\")","type":"string"},"keyword":{"description":"Plain-language keyword for auto-matching","type":"string"},"input":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{},"description":"Calculation input for this item — must include `id` alongside standard-specific fields."},"finrepDimensions":{"description":"OPTIONAL COMMONFINREP analytics dimensions for an ifrs9 item (the FINREP bridge workbook). Never read by the calculation.","type":"object","properties":{"counterpartySector":{"description":"EBA FINREP Annex V counterparty sector of the instrument's counterparty — F 04 portfolio × sector pivot. Omitted items sit in \"Unallocated\".","type":"string","enum":["CENTRAL_BANK","GENERAL_GOVERNMENT","CREDIT_INSTITUTION","OTHER_FINANCIAL_CORP","NON_FINANCIAL_CORP","HOUSEHOLD"]},"productType":{"description":"EBA FINREP F 05 product breakdown — F 05 loans by product pivot. Omitted items sit in \"Unallocated\".","type":"string","enum":["ON_DEMAND","CREDIT_CARD","TRADE_RECEIVABLES","FINANCE_LEASES","REVERSE_REPO","OTHER_TERM_LOANS"]}}}},"required":["input"]},"description":"Array of items to calculate"},"group":{"description":"G-1700 — the GROUP batch. The route is chosen by the number of distinct entityIds on the items (items[i].input.entityId; an item without one belongs to accountingPolicy.entityId): ONE → that entity's separate statements; TWO OR MORE → consolidation, which REQUIRES this block (refused without it: several entities are consolidated only through a stated control relationship, IFRS 10.7). It is the IFRS 10 item's group facts in their own shapes (one element, one name): { parent: { entityId (= accountingPolicy.entityId), name, cashFlowFacts? }, entities: [{ entityId, name, heldBy (PARENT or an entityId), functionalCurrency, reportingDate (IFRS 10.B92 — equal to the parent's), acquisitionDate, ownershipInterest, controlFacts (IFRS 10.7, B14-B72), statementOfFinancialPositionAtAcquisitionDate or openingGoodwill + openingNonControllingInterest, investmentCarryingAmountInHolderStatements, ifrs3AcquisitionFacts, translation, … }], intragroupBalances, intragroupTransactions (entity ids on both sides) }. Each entity's statements (statementOfFinancialPositionAtReportingDate, comparativeStatementOfFinancialPosition, profitOrLoss, otherComprehensiveIncome, dividendsDeclared, equityTransactions) are DERIVED from its own items and its previousPeriodBalances rows (row.entity) — stating them is refused. Returns separateStatements[entityId] (each entity's own books, never holding a consolidation adjustment) and consolidated (the IFRS 10 statements and the consolidation journal entries, ledger CONSOLIDATION). DATED events (G-1720 / G-1721): every item is posted at its own input.reportingDate. A subsidiary acquired inside the period (acquisitionDate after previousReportingDate) enters the group from that date only (IFRS 10.20, B88): its statement at the acquisition date and its post-acquisition profit or loss, OCI and dividends are derived from its items dated up to / after it (an item dated ON the acquisition date is pre-acquisition); goodwill and the NCI come from ifrs3AcquisitionFacts. entities[].ownershipChanges[] (changeDate, ownershipInterestAfter, controlFactsAfter, consideration, considerationKind, gainRecognisedByHolder, investmentCarryingAmountInHolderStatementsAfter, retained-interest facts) — control retained → an equity transaction (IFRS 10.23; group.goodwillReallocationOnChangesInOwnershipInterest required), control lost → derecognition, the retained interest at fair value, the gain (IFRS 10.25, B98); the subsidiary's books on the change date (retainedEarningsAtChangeDate, otherComprehensiveIncomeBeforeChange, statementOfFinancialPositionAtDisposalDate) are derived — stating them is refused, as is statementOfFinancialPositionAtAcquisitionDate for an in-period acquisition. A subsidiary item other than a general-journal entry whose own period spans such a date is refused: split it there (never apportioned). Not built yet (refused, field named): a subsidiary's share issue, a different subsidiary reporting date (B92-B93), associates / joint ventures derived from their own items (state their IAS 28 / IFRS 11 facts on the row as today, with no items). An IFRS 10 item in a one-entity batch is refused — use this block.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"includeDisclosureNotes":{"description":"Default true. Set false to suppress the disclosureNotes key in the batch response (IFRS 18 aggregated disclosure notes).","type":"boolean"},"exportJournalCsv":{"description":"When true, the response includes a journalCsvFile object { filename, mimeType, encoding, rowCount, byteLength, content, saveInstruction } with XBRL-enriched journal entries. Write `content` to `filename` to save the .csv. Costs 25 extra credits.","type":"boolean"},"csvFilename":{"description":"Filename for the CSV export, e.g. \"journal_entries_2025.csv\". Used as journalCsvFile.filename; defaults to journal_entries_<reportingDate>.csv.","type":"string","maxLength":200},"exportXbrl":{"description":"When true, adds an xbrlFacts array to the response — a flat list of all monetary facts with full XBRL context: element (ifrs-full:...), periodType (instant|duration), balance (debit|credit), value, currency, decimals (0), namespace, taxonomyYear. The context block includes period dates from reportingDate and a {ENTITY_ID} placeholder the user replaces with their LEI or registry identifier before submitting to a filing tool.","type":"boolean"},"includeWorkings":{"description":"Default: false. When true, includes full per-item workings, disclosures, and journal entries (~3–10× larger response). When false (default), strips per-item workings, disclosures, step-by-step sections, and journal entries — every item's rows remain in the top-level batchJournalEntries array. Use false (default) for trial-balance and P&L analysis; use true only when you need step-by-step calculations per item.","type":"boolean"},"includeXbrlEnrichment":{"description":"Default: false. When true, includes the full xbrl metadata object on each journal entry debit/credit line (parentElement, label.hu, namespace, taxonomyYear, dimension, decimals — needed for iXBRL filing). When false (default), strips the nested xbrl object from DR/CR lines. The trial balance XBRL tags (xbrlElement, xbrlSection, xbrlLabel) are always preserved regardless of this setting.","type":"boolean"},"entityProfile":{"description":"OPTIONAL close mode — entity fact flags (hasInventory, hasPPE, hasLeases, hasFinancialInstruments, hasDefinedBenefitPlan, isGroup, isListed, incomeTaxApplicable, ...; same shape as ifr_period_checklist). When provided, the response additionally includes the applicability checklist, recommendedOrder, and a coverage analysis (missingApplicableStandards = standards the profile implies but no item supplied; unexpectedStandards = supplied but not implied). Use this for a one-call period-end close with a completeness gate. Omit for a plain batch run.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"boolean"}},"previousPeriodBalances":{"description":"The trial balance at previousReportingDate (G-1723: debit − credit; one entity's rows sum to 0, else refused before anything is calculated). When provided, the batch computes the closing statement of financial position: closing per account = opening + the period's net movement (debit − credit), and the period's profit or loss and OCI are closed to equity. crossChecks.closingSOFP gives closingAssets / closingLiabilities / closingEquity (presented, positive), profitForPeriod, otherComprehensiveIncome, equationGap (= assets − liabilities − equity, 0 on a balanced opening) and byAccount (opening / periodNet / closing, debit − credit); crossChecks.sofpIsFullyBalanced = true when the equation holds. The same rows make each XBRL instant fact a closing balance. They are not needed for financialStatements.statementOfFinancialPosition, which is the PERIOD DELTA of each line derived from the batch's own postings (G-1871, owner 2026-10-05).","type":"array","items":{"type":"object","properties":{"account":{"type":"string","description":"Account name — must match the xbrlLabel / account key used in journal entries"},"xbrlSection":{"type":"string","enum":["Assets","Liabilities","Equity","PL","OCI","CashFlow"],"description":"XBRL section of the account: Assets | Liabilities | Equity. An opening balance is a statement-of-financial-position balance — PL, OCI and CashFlow rows are refused (the previous period's profit or loss and OCI are already in retained earnings and the reserves, IAS 1.106(d)). `BalanceSheet` and `IncomeStatement` are STATEMENT names, not sections, and are rejected (G-192)."},"balance":{"type":"number","description":"G-1723 — the balance at previousReportingDate in the LEDGER's sign convention: debit − credit. An asset is positive; a liability or an equity balance is NEGATIVE (a contra-asset such as accumulated depreciation is negative too). The rows of one entity sum to 0 — a balanced trial balance is a fact you state; an unbalanced set is refused naming the difference, nothing is plugged."},"entity":{"description":"G-1700 — the entityId whose balance this is. REQUIRED on every row of a group batch (items of two or more entities): each entity's run receives its own rows, and its rows sum to 0 on their own.","type":"string"}},"required":["account","xbrlSection","balance"]}},"cashBalances":{"description":"G-1744 — REQUIRED in every batch (refused when absent; an entity holding no bank account and no cash box states []): one row per bank account and cash box, its opening and closing balance. Balances are stated in the account's OWN currency, as the bank statement shows them (G-1759); a foreign-currency row is translated into the functional currency at the rates of the batch's IAS 21 item retranslating that cash (rateAtPreviousReportingDate, closingRateAtReportingDate — IAS 21.23(a)), and both figures are published with the rate and its source. The batch foots each row in the functional currency — opening + Σ the general journal's lines on it (debit − credit) + IAS 21's retranslation of a foreign-currency balance (IAS 21.23(a), 21.28) = closing — and refuses a row that does not, by account, with each figure and the difference. A general-journal cash line, or an IAS 21 item retranslating cash held (monetaryItemType CASH, on the account its cashAccount names — G-1786), whose account has no row is refused before anything is calculated; so is a foreign-currency row with no IAS 21 item for that cash. Where two rows share entity, account and currency, the IAS 21 item states its cashAccountId too (G-1760). G-1785: a general-journal entry in a foreign transactionCurrency is posted translated at its spotRateAtTransactionDate on its transactionDate (IAS 21.21-22). G-1787 (RECOMMENDED, owner to confirm): a foreign-currency row foots first in its own currency (opening + the general journal's foreign amounts on it = closing, inAccountCurrency); its IAS 21 retranslation is DERIVED — foreignCurrencyAmount from the row's openingBalance, the receipts and payments from the general journal's lines on it, each at its own rate — so the item states neither cashMovements nor a different foreignCurrencyAmount (refused). The response publishes cashReconciliation (group: separateStatements[entityId].cashReconciliation): the footing per account, and the IAS 7.45 reconciliation of the cash flow statement (direct method, from the bank lines' cashFlowLineItem) to the balances. With it, settlementMatching (G-1745): per IAS 7 line item, the bank lines against the standards' settlements due — settled, outstanding or over-settled within the period.","type":"array","items":{"type":"object","properties":{"account":{"type":"string","enum":["Bank","Cash","Cash Equivalent Deposits","Cash and Cash Equivalents","Petty Cash","Restricted Cash — cash and cash equivalents"],"description":"The cash account — one of the general journal's cash and cash-equivalent accounts (isCashEquivalent in the tag map)."},"cashAccountId":{"description":"Short code of the bank account or cash box. REQUIRED where two rows of one entity share the account and currency; every general-journal cash line on them then states the same code (entries[i].cashAccountId).","type":"string","pattern":"^[A-Za-z0-9][A-Za-z0-9._-]{0,39}$"},"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 code of the currency the account is held in. An IAS 21 retranslation of cash held is matched by its cashAccount (G-1786), its foreignCurrency (and its cashAccountId, G-1760); a foreign-currency general-journal line by its transactionCurrency (G-1785)."},"openingBalance":{"type":"number","description":"Balance at previousReportingDate as the bank statement / cash-box count shows it — in the ACCOUNT'S OWN currency (`currency`), G-1759. For a foreign-currency account the engine derives the functional amount at the previous closing rate of the batch's IAS 21 item retranslating that cash (its rateAtPreviousReportingDate, IAS 21.23(a)); a foreign-currency row without such an item is refused. 0 is an answer; absence is refused."},"closingBalance":{"type":"number","description":"Balance at reportingDate, in the account's own currency (G-1759); a foreign-currency balance is translated at the IAS 21 item's closingRateAtReportingDate (its estimatedSpotRate where the currency is not exchangeable, IAS 21.19A). In the functional currency it must equal opening + the general journal's entries on the account + the IAS 21.28 retranslation, or the batch is refused naming the account, both figures, the rates and the difference."},"entity":{"description":"The entityId whose account this is. REQUIRED on every row of a group batch; in a one-entity batch, stated, it must be accountingPolicy.entityId.","type":"string"}},"required":["account","currency","openingBalance","closingBalance"],"additionalProperties":false}}},"required":["accountingPolicy","items"]},"outputSchema":{"type":"object","description":"Period-end batch. Four envelopes keyed by mode and preflight outcome — every one of them carries `success`, and nothing else is guaranteed. The calculated envelope (plain batch / close mode) carries batchJournalEntries, the XBRL-tagged trial balance and SINGLE-ENTITY financial statements, all at top level; there is no `data` wrapper anywhere in this tool.","properties":{"success":{"type":"boolean","description":"The one key present in every envelope. false = preflight rejected the batch (see phase / itemsNeedingInput) or every item failed; true = items were calculated."},"itemCount":{"type":"number","description":"Items submitted"},"successCount":{"type":"number","description":"Items calculated without error"},"errorCount":{"type":"number","description":"Items that failed validation or calculation"},"results":{"type":"array","items":{"type":"object","additionalProperties":true},"description":"Per-item results — results[i].result.data is the same shape as an ifr_calculate data block, and results[i].result.data.chainJournalEntries is THAT item's chain (present only when includeWorkings:true; summary mode strips it)"},"executionOrder":{"type":"array","items":{"type":"string"},"description":"The order the standards actually ran in — dependency-tier order, not submission order"},"batchJournalEntries":{"type":"array","items":{"type":"object","properties":{"description":{"type":"string"},"reference":{"type":"string"},"entries":{"type":"array","items":{"type":"object","properties":{"account":{"type":"string"},"debit":{"type":"number"},"credit":{"type":"number"},"xbrl":{"type":"object","additionalProperties":true}}}}}},"description":"EVERY item's journal rows in one flat list, in batchIndex order. Each row carries batchIndex + reference + itemId (which item it belongs to) and sourceStandard + chainSequence (where it sits in THAT item's chain — chainSequence repeats across items, so it never orders this array on its own). Not a group consolidation. Always present in the calculated envelope, regardless of includeWorkings."},"trialBalance":{"type":"object","additionalProperties":true,"description":"Dr/Cr totals summed from batchJournalEntries, grouped by XBRL section: Assets, Liabilities, Equity, PL, OCI. Also byAccount, byStandard and byEventType. A profit-or-loss row of `accounts` carries byIfrs18Category [{ category, basis, net }] when the standards that posted it stated an IFRS 18 category (EARLY ADOPTER: IFRS 18 effective 2027-01-01)."},"financialStatements":{"type":"object","additionalProperties":true,"description":"SINGLE-ENTITY P&L, OCI, balance sheet, equity statement — never a group consolidation; for that call the group cascade. Replaced by { error: \"UNTAGGED_ACCOUNTS\" | \"STATEMENT_MISMATCH\", message } when the statements cannot be relied on. `sopl` is the IFRS 18 statement (EARLY ADOPTER: effective 2027-01-01): each line carries classifiedAt — SOURCE (the posting standard stated the category, with ifrs18Basis), ELEMENT_TABLE (fallback) or UNCLASSIFIED (presented in operating, the residual category, flagged toBeReclassified and listed in sopl.unclassifiedLines with sopl.unclassifiedWarning)."},"cashFlowStatement":{"type":"object","additionalProperties":true,"description":"IAS 7 statement (direct method from the bank lines' cashFlowLineItem), or the same error marker as financialStatements when suppressed. G-1761: flows whose IAS 7.31 election is not stated are held in data.awaitingElection (totals.awaitingElection) with data.actionsRequired naming the election. G-1751: the OBTAINING_CONTROL line is net of the cash and cash equivalents acquired (IFRS 3's debit to cash, IAS 7.42) — the line carries cashAndCashEquivalentsAcquired and considerationPaidInCash, and data.obtainingAndLosingControl the IAS 7.40(b)-(c) figures."},"cashReconciliation":{"type":"object","additionalProperties":true,"description":"G-1744 — the cashBalances footing per bank account / cash box (opening + general journal + IAS 21.28 retranslation = closing, each figure with its basis; G-1759: in the functional currency — a foreign-currency row's opening and closing carry statedInAccountCurrency, rate and rateSource) and the IAS 7.45 reconciliation of the cash flow statement to the balances. On a CASH_BALANCES refusal it carries the footing that failed. Group batch: per entity under separateStatements[entityId].cashReconciliation."},"actionsRequired":{"type":"array","items":{"type":"object","additionalProperties":true},"description":"G-1761 — things the caller must do: each { field (e.g. accountingPolicy.interestPaidClassification), amount, lines, allowedValues, reason, reference: \"IAS 7.31-7.34\", entity? (group batch) }. A cash line carrying INTEREST_PAID / INTEREST_RECEIVED / DIVIDENDS_RECEIVED / DIVIDENDS_PAID (or a payment with an interest leg) without its election is NOT refused: the cash flow statement holds it in awaitingElection (in no activity, inside the IAS 7.45 reconciliation, which still closes) and the same item appears in cashFlowStatement.data.actionsRequired. Absent when nothing is required."},"settlementMatching":{"type":"object","additionalProperties":true,"description":"G-1745 (PROVISIONAL class-level rule, review G-1746) — the general journal's bank lines matched against the standards' settlement legs due, per IAS 7 line item: lineItems[] { cashFlowLineItem, activity, due { amount, legs[], basis }, settled { amount, lines[], basis }, difference = settled − due, status SETTLED | OUTSTANDING | OVER_SETTLED, basis }; bankWithNothingBehind[]; dueNotSettled[]; unclassified[] (legs the table cannot classify — never guessed); nonCashReductions[]; remeasurements[] (IAS 21.28); excluded.internalTransfers. Sign: cash direction (+ in, − out); the same sign as due → OVER_SETTLED, the opposite → OUTSTANDING. Scope: within the period only — opening receivables / payables are not part of it. Group batch: per entity under separateStatements[entityId].settlementMatching."},"crossChecks":{"type":"object","additionalProperties":true,"description":"Statement reconciliation checks — allConsistent gates whether the statements above are real or an error marker"},"statementsValid":{"type":"boolean","description":"true when crossChecks reconciled AND every journal account is XBRL-tagged. false means financialStatements/cashFlowStatement carry an error marker instead of statements."},"selfCheck":{"type":"object","additionalProperties":true,"description":"Per-category arithmetic self-check; hasDeviation true means a deviation was auto-flagged server-side"},"disclosureNotes":{"type":"array","items":{"type":"object","additionalProperties":true},"description":"IFRS 18 aggregated disclosure notes — present unless includeDisclosureNotes:false"},"errors":{"type":"array","items":{"type":"object","additionalProperties":true},"description":"Per-item failures — present only when errorCount > 0"},"route":{"type":"string","description":"G-1700 — present on the group path only: \"GROUP\" (items of two or more entities, consolidated through the group block)."},"reportingEntity":{"type":"string","description":"G-1700 — group path: the parent's entityId (the consolidated statements are the parent's, IAS 1.51(a))."},"separateStatements":{"type":"object","additionalProperties":true,"description":"G-1700 — group path: per entityId, that entity's OWN books from its own items (trialBalance, financialStatements, cashFlowStatement, crossChecks, statementsValid, calculationSheetsUrl), the statements derived for the consolidation (derivedStatements: closing and comparative statement of financial position, profit or loss, OCI, dividends) and the basis of every derived line (derivationBasis). Never holds a consolidation adjustment."},"consolidated":{"type":"object","additionalProperties":true,"description":"G-1700 — group path: the IFRS 10 consolidated set (financialStatements: statement of financial position, profit or loss and OCI, changes in equity, cash flows where its facts are stated), the consolidation journal entries (ledger CONSOLIDATION, each with its entity), their trial balance, the control assessments and the IFRS 10 input built from the derived statements."},"groupGuidance":{"type":"string","description":"Legacy — no longer returned: an ifrs10 item in a one-entity batch is refused (G-1700); a group is submitted as one group batch."},"ignoredInputsAlerts":{"type":"array","items":{"type":"object","additionalProperties":true},"description":"Present only when an item submitted fields the taken branch did not use — each was auto-flagged for quality check"},"ignoredInputsNote":{"type":"string"},"accountingPolicyNotApplied":{"type":"array","items":{"type":"object","additionalProperties":true},"description":"Present only when part of the envelope accountingPolicy reached no item: { field, message } per entry — an entity-level fact no item reads, a standard block with no item of that standard, or a block field the standard does not declare (G-1571, G-1584)"},"ifrs16ClassWarnings":{"type":"array","items":{"type":"string"},"description":"Present only when an IFRS 16.B3 exemption was applied inconsistently across one underlyingAssetClass"},"crossStandardFeeds":{"type":"array","items":{"type":"object","additionalProperties":true},"description":"Present only when one item's output fed another's input (e.g. the IFRS 9 ECL → IAS 12 feed)"},"compactMode":{"type":"boolean","description":"Present only when the batch exceeded the auto-compact threshold — workings and disclosures were stripped per item"},"compactNote":{"type":"string"},"xbrlFacts":{"type":"array","items":{"type":"object","additionalProperties":true},"description":"Present only when exportXbrl:true — flat XBRL fact list built from batchJournalEntries"},"journalCsvFile":{"type":"object","description":"Present when exportJournalCsv:true. Self-describing CSV file: write `content` verbatim to a UTF-8 file named `filename` to save it as a spreadsheet-ready CSV, or render `content` inline.","properties":{"filename":{"type":"string"},"format":{"type":"string"},"mimeType":{"type":"string"},"encoding":{"type":"string"},"rowCount":{"type":"number"},"byteLength":{"type":"number"},"content":{"type":"string"},"saveInstruction":{"type":"string"}}},"recommendedOrder":{"type":"array","items":{"type":"string"},"description":"CLOSE MODE only (entityProfile supplied) — standards the profile implies, in execution order"},"checklist":{"type":"array","items":{"type":"object","additionalProperties":true},"description":"CLOSE MODE only — per-standard required + opening* fields (same as ifr_period_checklist)"},"coverage":{"type":"object","description":"CLOSE MODE only — completeness gate","properties":{"applicableCount":{"type":"number"},"suppliedCount":{"type":"number"},"complete":{"type":"boolean"},"missingApplicableStandards":{"type":"array","items":{"type":"string"},"description":"Implied by the profile but no item supplied — fill these gaps"},"unexpectedStandards":{"type":"array","items":{"type":"string"},"description":"Supplied but not implied by the profile"}}},"note":{"type":"string","description":"CLOSE MODE only — plain-language reading of the coverage gap, or confirmation there is none"},"mode":{"type":"string","description":"PARTIAL MODE only — the literal \"partial\". Its presence is how a client tells envelope (d) from (b): there is no batchJournalEntries, trialBalance, financialStatements or calculationSheetsUrl in it, and each results[i] carries status \"ok\" | \"validation_error\" | \"calculation_error\"."},"summary":{"type":"object","additionalProperties":true,"description":"PARTIAL MODE only — { ok, errors, totalCharged }"},"phase":{"type":"string","description":"REJECTION only — \"PREFLIGHT_VALIDATE\" (no calculations ran), or \"CASH_BALANCES\" (G-1744: cashBalances missing, malformed or not footing — refused by account, results empty), or \"SETTLEMENT_FACTS\" (G-1769f: a fact the settlement classification requires is not stated — e.g. accountingPolicy.ifrs18SpecifiedMainBusinessActivities where an IFRS 16.76 finance-lessor instalment is split into finance income and the recovery of the net investment; operating (IAS 7.14-7.15; the interest on its own line INTEREST_RECEIVED_FROM_PROVIDING_FINANCE_TO_CUSTOMERS, fixed operating) when providing finance to customers is a main business, otherwise investing (IAS 7.16(f)) with interest by the election; errors[0].details names the field and the items). No credits were charged."},"rateScaleWarnings":{"type":"array","items":{"type":"object","additionalProperties":true},"description":"G-1787 (owner 2026-10-05) — present only when a foreign-currency general-journal rate lies outside a tenth to ten times the band of the batch's IAS 21 item rates in that currency: { field, code RATE_SCALE_IMPLAUSIBLE, severity WARNING, statedRate, comparedWith { item, rateAtPreviousReportingDate, closingRateAtReportingDate | estimatedSpotRate, band, comparedRange }, message }. A WARNING, never a refusal: the entry posts at its stated rate (IAS 21.21 sets no bound) — it may be a scale error or a genuine move (e.g. hyperinflation)."},"itemsNeedingInputCount":{"type":"number","description":"PREFLIGHT REJECTION only"},"itemsNeedingInput":{"type":"array","items":{"type":"object","additionalProperties":true},"description":"PREFLIGHT REJECTION only — per item { index, itemId, standard, missingFields[], errors[] }. Collect every value in ONE question block, then resubmit the whole batch."},"message":{"type":"string"},"hint":{"type":"string"},"calculationSheetsUrl":{"type":"string","description":"Excel workbook (24 h). Needs the Bearer token, 15 credits per download; a browser without the token gets 401 — point the user to https://ifrcoworker.com/#downloads. Calculated envelope only; partial mode does not persist a workbook."},"calculationSheetsNotice":{"type":"string","description":"Human-readable instruction to offer the workbook link to the user"},"correlationId":{"type":"string"},"warnings":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["message"]}}},"required":["success"]},"annotations":{"readOnlyHint":true,"idempotentHint":true,"destructiveHint":false,"openWorldHint":false}},{"name":"ifr_batch_validate","description":"FREE pre-flight validator for ifr_period_end_batch. Validates every item in one call and returns all missing required fields across the batch. A field an item's standard does not declare is refused here exactly as ifr_period_end_batch refuses it (FIELD_UNRECOGNISED, naming the field and the item — G-1795). A fact the settlement classification requires is refused here as the batch refuses it (SETTLEMENT_FACTS — G-1841): an IFRS 16 finance lessor's instalments need accountingPolicy.ifrs18SpecifiedMainBusinessActivities (groupErrors: MISSING_REQUIRED, naming the items). STRICT GATE: do not call ifr_period_end_batch if allValid is false. Relay agentMessage to the user, collect missing data, re-run ifr_batch_validate, and only proceed once allValid is true. Zero credits — validation is credited inside the subsequent batch call.","inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"accountingPolicy":{"description":"Optional batch-level accounting policy — same structure as ifr_period_end_batch accountingPolicy. When provided, the universal fields (functionalCurrency, presentationCurrency, reportingDate, previousReportingDate) are merged into each item input before validation wherever that item's standard declares the field (G-1726: never into a standard that does not declare it — e.g. presentationCurrency only reaches IAS 21), eliminating false \"missing field\" errors for fields provided at the batch level.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"items":{"type":"array","items":{"type":"object","properties":{"type":{"description":"Standard slug, e.g. \"ias16\". Provide type OR standard.","type":"string"},"standard":{"description":"Alias for type — either field is accepted.","type":"string"},"input":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{},"description":"Proposed input object. Include all fields provided so far; missing required fields will be listed."}},"required":["input"]},"description":"Array of items to validate — same structure as ifr_period_end_batch items"},"group":{"description":"G-1700 — the group block, as on ifr_period_end_batch: items of two or more entities are checked as a group batch against it (the same refusals, field by field, before anything is calculated).","type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"previousPeriodBalances":{"description":"G-1700 — as on ifr_period_end_batch; a group batch needs each entity's rows (row.entity).","type":"array","items":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"cashBalances":{"description":"G-1744 — REQUIRED in every batch (refused when absent; an entity holding no bank account and no cash box states []): one row per bank account and cash box, its opening and closing balance. Balances are stated in the account's OWN currency, as the bank statement shows them (G-1759); a foreign-currency row is translated into the functional currency at the rates of the batch's IAS 21 item retranslating that cash (rateAtPreviousReportingDate, closingRateAtReportingDate — IAS 21.23(a)), and both figures are published with the rate and its source. The batch foots each row in the functional currency — opening + Σ the general journal's lines on it (debit − credit) + IAS 21's retranslation of a foreign-currency balance (IAS 21.23(a), 21.28) = closing — and refuses a row that does not, by account, with each figure and the difference. A general-journal cash line, or an IAS 21 item retranslating cash held (monetaryItemType CASH, on the account its cashAccount names — G-1786), whose account has no row is refused before anything is calculated; so is a foreign-currency row with no IAS 21 item for that cash. Where two rows share entity, account and currency, the IAS 21 item states its cashAccountId too (G-1760). G-1785: a general-journal entry in a foreign transactionCurrency is posted translated at its spotRateAtTransactionDate on its transactionDate (IAS 21.21-22). G-1787 (RECOMMENDED, owner to confirm): a foreign-currency row foots first in its own currency (opening + the general journal's foreign amounts on it = closing, inAccountCurrency); its IAS 21 retranslation is DERIVED — foreignCurrencyAmount from the row's openingBalance, the receipts and payments from the general journal's lines on it, each at its own rate — so the item states neither cashMovements nor a different foreignCurrencyAmount (refused). The response publishes cashReconciliation (group: separateStatements[entityId].cashReconciliation): the footing per account, and the IAS 7.45 reconciliation of the cash flow statement (direct method, from the bank lines' cashFlowLineItem) to the balances. With it, settlementMatching (G-1745): per IAS 7 line item, the bank lines against the standards' settlements due — settled, outstanding or over-settled within the period.","type":"array","items":{"type":"object","properties":{"account":{"type":"string","enum":["Bank","Cash","Cash Equivalent Deposits","Cash and Cash Equivalents","Petty Cash","Restricted Cash — cash and cash equivalents"],"description":"The cash account — one of the general journal's cash and cash-equivalent accounts (isCashEquivalent in the tag map)."},"cashAccountId":{"description":"Short code of the bank account or cash box. REQUIRED where two rows of one entity share the account and currency; every general-journal cash line on them then states the same code (entries[i].cashAccountId).","type":"string","pattern":"^[A-Za-z0-9][A-Za-z0-9._-]{0,39}$"},"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 code of the currency the account is held in. An IAS 21 retranslation of cash held is matched by its cashAccount (G-1786), its foreignCurrency (and its cashAccountId, G-1760); a foreign-currency general-journal line by its transactionCurrency (G-1785)."},"openingBalance":{"type":"number","description":"Balance at previousReportingDate as the bank statement / cash-box count shows it — in the ACCOUNT'S OWN currency (`currency`), G-1759. For a foreign-currency account the engine derives the functional amount at the previous closing rate of the batch's IAS 21 item retranslating that cash (its rateAtPreviousReportingDate, IAS 21.23(a)); a foreign-currency row without such an item is refused. 0 is an answer; absence is refused."},"closingBalance":{"type":"number","description":"Balance at reportingDate, in the account's own currency (G-1759); a foreign-currency balance is translated at the IAS 21 item's closingRateAtReportingDate (its estimatedSpotRate where the currency is not exchangeable, IAS 21.19A). In the functional currency it must equal opening + the general journal's entries on the account + the IAS 21.28 retranslation, or the batch is refused naming the account, both figures, the rates and the difference."},"entity":{"description":"The entityId whose account this is. REQUIRED on every row of a group batch; in a one-entity batch, stated, it must be accountingPolicy.entityId.","type":"string"}},"required":["account","currency","openingBalance","closingBalance"],"additionalProperties":false}}},"required":["items"]},"outputSchema":{"type":"object","description":"Batch pre-flight validation. Returns per-item errors and a single allValid gate. Relay agentMessage when allValid is false.","properties":{"success":{"type":"boolean"},"allValid":{"type":"boolean"},"agentMessage":{"type":"string","description":"Relay to user when allValid is false"},"rateScaleWarnings":{"type":"array","items":{"type":"object","additionalProperties":true},"description":"G-1787 (owner 2026-10-05) — as ifr_period_end_batch: a foreign-currency general-journal rate outside the tenfold band of the IAS 21 item's rates is WARNED (never refused); the entry is accepted and posts at its stated rate."},"validationResults":{"type":"array","items":{"type":"object","properties":{"itemIndex":{"type":"number"},"standard":{"type":"string"},"isValid":{"type":"boolean"},"errors":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"message":{"type":"string"},"iasReference":{"type":"string"}}}},"warnings":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["message"]}},"missingFields":{"type":"array","items":{"type":"string"}}}}}},"required":["success","allValid"]},"annotations":{"readOnlyHint":true,"idempotentHint":true,"destructiveHint":false,"openWorldHint":false}},{"name":"ifr_ingest_document","description":"Extract structured data from a PDF (contract, invoice, lease, bond indenture) using Google Document AI. Requires docuScanAccess on the token — returns 403 otherwise; do NOT retry or offer document scanning again this session if access is denied. PROTOCOL: (1) offer PDF processing to the user, (2) receive pdf as base64, (3) call this tool with pdf_base64 + the label of the value to extract, (4) call ifr_propose_mapping, (5) review the mapping WITH THE USER before calling ifr_calculate — OCR is never 100% accurate. ","inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"pdf_base64":{"type":"string","maxLength":10000000,"description":"Base64-encoded PDF file contents (max ~7.5 MB raw PDF)"},"findTheValueWithThisLabel":{"type":"string","maxLength":200,"description":"Entity type to extract (e.g. \"invoice total\", \"lease payment\", \"coupon rate\")"},"val_type":{"description":"Expected value type","type":"string","enum":["numeric","string"]},"doc_id":{"description":"Optional document id","type":"string","maxLength":100},"start_anchor":{"description":"Keep text after this substring","type":"string","maxLength":500},"end_anchor":{"description":"Keep text before this substring","type":"string","maxLength":500},"autoMap":{"description":"When true, automatically calls ifr_propose_mapping after extraction and returns both ocrData and proposedMapping in one response. Requires standard to be provided. Costs 2 credits instead of 1. Review proposedMapping with the user before calling ifr_calculate — OCR is never 100% accurate.","type":"boolean"},"standard":{"description":"Standard slug for autoMap (e.g. \"ias16\") — required when autoMap is true","type":"string"}},"required":["pdf_base64","findTheValueWithThisLabel"]},"outputSchema":{"type":"object","description":"Extracted value from PDF with confidence score and OCR context. Pass ocrData to ifr_propose_mapping.","properties":{"success":{"type":"boolean"},"value":{"description":"Extracted value — number if val_type=numeric, string otherwise"},"confidence":{"type":"number","description":"0–1 extraction confidence"},"rawText":{"type":"string","description":"Surrounding OCR text for manual verification"},"ocrData":{"type":"object","additionalProperties":true,"description":"Full structured OCR output — pass to ifr_propose_mapping"},"pageIndex":{"type":"number"}},"required":["success"]},"annotations":{"readOnlyHint":true,"idempotentHint":false,"destructiveHint":false,"openWorldHint":true}},{"name":"ifr_propose_mapping","description":"Map OCR data from ifr_ingest_document into an IFRS standard's input schema and validate it. Returns proposedInput, unmappedFields, missingRequiredFields, validation errors/warnings, needsUserInput[], and a confidence score. CRITICAL: proposedInput is a suggestion — every entry in needsUserInput[] must be confirmed by the user before calling ifr_calculate. Never auto-calculate from unverified OCR data. FREE — no usage charge.","inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"standard":{"type":"string","enum":["ias2","ias7","ias10","ias12","ias16","ias19","ias20","ias21","ias23","ias27","ias28","ias29","ias33","ias36","ias37","ias38","ias40","ias41","ifrs1","ifrs2","ifrs3","ifrs5","ifrs6","ifrs8","ifrs9","ifrs10","ifrs11","ifrs13","ifrs15","ifrs16","ifrs20","general-journal"]},"ocrData":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{},"description":"The ocrData object returned by ifr_ingest_document"}},"required":["standard","ocrData"]},"outputSchema":{"type":"object","description":"Proposed IFRS input mapping from OCR data. Confirm every needsUserInput entry before calling ifr_calculate.","properties":{"success":{"type":"boolean"},"proposedInput":{"type":"object","additionalProperties":true,"description":"Draft ifr_calculate input — not yet user-confirmed"},"unmappedFields":{"type":"array","items":{"type":"string"}},"missingRequiredFields":{"type":"array","items":{"type":"string"}},"needsUserInput":{"type":"array","items":{"type":"object","additionalProperties":true},"description":"Fields the user must confirm"},"confidence":{"type":"number"},"validationResult":{"type":"object","properties":{"success":{"type":"boolean"},"isValid":{"type":"boolean"},"errors":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"message":{"type":"string"},"iasReference":{"type":"string"}}}},"warnings":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["message"]}},"missingFields":{"type":"array","items":{"type":"string"},"description":"Required fields absent from input"},"allValidationIssues":{"type":"array","items":{"type":"object"},"description":"Single authoritative list merging missingFields and errors; each item carries kind: \"missing\" (absent required field) or \"error\" (present-but-invalid). Parse this instead of reconciling missingFields + errors separately."}},"required":["success","isValid"]}},"required":["success"]},"annotations":{"readOnlyHint":true,"idempotentHint":true,"destructiveHint":false,"openWorldHint":false}},{"name":"ifr_flag_result","description":"Flag a calculation result you believe is incorrect for expert review. Call immediately when the server output appears to contradict IFRS — wrong amount, missing journal entry, incorrect OCI/P&L routing, wrong paragraph, or missing disclosure. FREE — no credit charged. MINIMUM REQUIRED: standard + severity + aiReasoning (where it is wrong and why, citing the IFRS paragraph) + correlationId. The correlationId is sufficient — the server auto-attaches the full calculation from its cache. Do NOT copy the entire server response into serverOutput. RECOMMENDED: schemaVersionControlHash — pass the 12-char hex from the ifr_schema response you used when building the input. This lets the review team reproduce the exact schema version that generated the error. Severity: CALCULATION_ERROR | MISSING_DISCLOSURE | WRONG_JE | WRONG_PARAGRAPH | WRONG_OCI_PL_ROUTING | OTHER.","inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"standard":{"type":"string","maxLength":20,"description":"IFRS/IAS standard slug, e.g. \"ias37\""},"severity":{"type":"string","enum":["CALCULATION_ERROR","MISSING_DISCLOSURE","WRONG_JE","WRONG_PARAGRAPH","WRONG_OCI_PL_ROUTING","OTHER"]},"aiReasoning":{"type":"string","maxLength":2000,"description":"Where and why you believe the result is wrong — cite the specific IFRS paragraph and the value you expected vs what the server returned"},"correlationId":{"description":"correlationId from the ifr_calculate response. PREFERRED: pass this and the server will auto-attach the full calculation from cache — no need to copy serverOutput manually","type":"string","maxLength":50},"schemaVersionControlHash":{"description":"12-char hex hash from the ifr_schema response used when building this input — enables the review team to reproduce the exact schema version that produced the suspected error","type":"string","maxLength":20},"input":{"description":"The input sent to ifr_calculate — only needed if correlationId is unavailable or has expired (10min)","type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"serverOutput":{"description":"Only needed if correlationId is unavailable. If provided, send only { journalEntries, workings } — omit financialStatements, disclosures, xbrl","type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"aiProposedAnswer":{"description":"Your proposed correct journal entries or amounts","type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["standard","severity","aiReasoning"]},"outputSchema":{"type":"object","description":"Acknowledgement that the flag was received for expert review.","properties":{"success":{"type":"boolean"},"flagId":{"type":"string"},"status":{"type":"string","enum":["received","under_review","resolved"]},"message":{"type":"string"}},"required":["success","status"]},"annotations":{"readOnlyHint":false,"idempotentHint":false,"destructiveHint":false,"openWorldHint":false}},{"name":"ifr_explain_result","description":"Return a human-readable explanation of a previously computed calculation. Pass the correlationId from any ifr_calculate or ifr_period_end_batch response (this tool reads a 10-minute result cache; the workbook of the same id stays downloadable for 24 h), OR pass the full prior response object as `calculation` — the stateless path, works at any time with no expiry. Returns a plain-language summary of the journal entries, IFRS paragraph references, and suggested next steps. FREE — no credit charged.","inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"correlationId":{"description":"The correlationId field from a previous ifr_calculate or ifr_period_end_batch response — used to look up the cached calculation (10-min TTL). Either this or `calculation` is required.","type":"string"},"calculation":{"description":"Stateless alternative with NO expiry: the full prior ifr_calculate response object (must contain `data`; `audit` and `context` improve the explanation). Use when the 10-min correlationId window has passed.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}}},"outputSchema":{"type":"object","description":"Plain-language explanation of a prior calculation: journal entry narrative, paragraph references, suggested next steps.","properties":{"success":{"type":"boolean"},"explanation":{"type":"string","description":"Human-readable narrative of the calculation and IFRS rules applied"},"summary":{"type":"object","properties":{"standard":{"type":"string"},"reportingDate":{"type":"string"},"keyFigures":{"type":"object","additionalProperties":true},"paragraphs":{"type":"array","items":{"type":"string"}}}}},"required":["success"]},"annotations":{"readOnlyHint":true,"idempotentHint":true,"destructiveHint":false,"openWorldHint":false}},{"name":"ifr_generate_workpaper","description":"Generate a structured audit working paper JSON from one or more prior ifr_calculate results. Aggregates across standards: accounting policies (IAS 1.117), key estimation uncertainties (IAS 1.125), calculation workings, journal entries, and a disclosure completeness checklist. Reference prior results EITHER by correlationIds (server-side cache, 10-minute TTL from calculation time) OR by `calculations` (inline prior ifr_calculate response objects — stateless, no expiry; mix freely with correlationIds). If any correlationId has expired, the call fails with CORRELATION_EXPIRED — pass those results inline via `calculations` instead. Token required; costs 5 credits per included calculation on success (e.g. 3 standards = 15 credits). Failed calls (CORRELATION_EXPIRED, INVALID_INPUT) are not charged.","inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"correlationIds":{"description":"correlationIds from previous ifr_calculate calls. All must be in cache (10-min TTL) — if any has expired, the call fails with CORRELATION_EXPIRED. Either this or `calculations` (or both) is required.","type":"array","items":{"type":"string"}},"calculations":{"description":"Stateless alternative with NO expiry: array of prior ifr_calculate response objects (each must contain `data`; standard + input are recovered from the `audit` envelope, or supply { standard, input, result } explicitly). Mix freely with correlationIds.","type":"array","items":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"entityName":{"description":"Entity name for the workpaper header, e.g. \"Acme Kft.\"","type":"string","maxLength":200},"reportingPeriod":{"description":"Reporting period end date (YYYY-MM-DD) for the workpaper header","type":"string","maxLength":20}}},"outputSchema":{"type":"object","description":"Structured audit working paper aggregating multiple ifr_calculate results.","properties":{"success":{"type":"boolean"},"data":{"type":"object","properties":{"meta":{"type":"object","description":"generatedAt, entityName, reportingPeriod, standards[]"},"accountingPolicies":{"type":"array","description":"IAS 1.117 policy choices per standard"},"keyEstimates":{"type":"array","description":"IAS 1.125 estimation uncertainties per standard"},"sections":{"type":"array","description":"Per-standard: labeledInputs, workings, journalEntries"},"disclosureChecklist":{"type":"array","description":"Per-disclosure status: complete / incomplete"},"chainJournalEntries":{"type":"array","description":"Every item's chain entries in one list — each row stamped with source, sourceStandard and chainSequence. Not IFRS 10 consolidation."}}},"error":{"type":"string","description":"CORRELATION_EXPIRED | INVALID_INPUT | INLINE_CALCULATION_INVALID"},"missing":{"type":"array","items":{"type":"string"},"description":"correlationIds not found in cache (CORRELATION_EXPIRED only) — re-submit those via the calculations array instead"}},"required":["success"]},"annotations":{"readOnlyHint":true,"idempotentHint":false,"destructiveHint":false,"openWorldHint":false}},{"name":"ifr_disclosure_checklist","description":"Generate a disclosure-needs checklist for the period-end. FREE — no credit charged. Input: entityProfile fact flags (same shape as ifr_period_checklist) → returns the core MANDATORY disclosure requirements per applicable standard, each with its IAS/IFRS paragraph reference and category (policy / reconciliation / judgement / amount / risk). Optionally pass prior results inline via `calculations` (full ifr_calculate responses or a whole ifr_period_end_batch result) and each requirement is reconciled against the disclosures the engine actually produced: status per item = complete (value computed) | needs-entity-data (emitted but value null — narrative needed) | incomplete (calculated but requirement not addressed — investigate) | pending-calculation (standard applies, nothing supplied yet) | not-applicable. Use at period-end sign-off: run the batch, pass the batch result here, and work the non-complete items. Catalogue covers effective standards only.","inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"entityProfile":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"boolean"},"description":"Entity fact flags — same shape as ifr_period_checklist (hasInventory, hasPPE, hasLeases, hasFinancialInstruments, isGroup, isListed, incomeTaxApplicable, ...). Drives which standards' disclosure requirements apply."},"calculations":{"description":"OPTIONAL inline prior results — full ifr_calculate responses, { standard, result } pairs, or an entire ifr_period_end_batch result. When supplied, each requirement is reconciled against the actually-computed disclosures (complete / incomplete / needs-entity-data). Stateless: nothing is read from server-side caches.","type":"array","items":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"includeNotApplicable":{"description":"When true, also lists standards the profile does NOT imply, each item marked not-applicable. Default false.","type":"boolean"}},"required":["entityProfile"]},"outputSchema":{"type":"object","description":"Per-standard disclosure requirements with reconciliation status against supplied calculations.","properties":{"success":{"type":"boolean"},"applicableStandards":{"type":"array","items":{"type":"string"}},"summary":{"type":"object","description":"Counts per status: complete, incomplete, needsEntityData, pendingCalculation, notApplicable"},"checklist":{"type":"object","additionalProperties":true,"description":"slug → [{ reference, requirement, category, status, value? }]"},"statusLegend":{"type":"object","additionalProperties":true}},"required":["success"]},"annotations":{"readOnlyHint":true,"idempotentHint":true,"destructiveHint":false,"openWorldHint":false}},{"name":"ifr_replay","description":"Deterministic audit replay — recompute a prior calculation from its input and verify it reproduces the stored output. FREE — no credit charged. The engine is stateless and pure: identical input + identical engine/schema version always produces identical output. Every ifr_calculate response carries an `audit` envelope { inputEcho, inputSha256, outputSha256, engineVersion, schemaVersionControlHash } — pass audit.inputEcho as `input` and audit.outputSha256 as `expectedOutputSha256` at ANY later time (no expiry, nothing stored server-side). match:true = cryptographic-grade evidence the stored numbers re-derive from the stored inputs. match:false = engine or schema evolved since the original calculation (compare engineVersion / schemaVersionControlHash), or the stored output was altered — pass the original response `data` as expectedOutput to get a field-level diff of every changed value. Use cases: external audit evidence, period-end sign-off re-verification, regression checking stored results after engine upgrades.","inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"standard":{"type":"string","maxLength":20,"description":"IFRS/IAS standard slug of the original calculation, e.g. \"ias16\" (= audit.standard)"},"input":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{},"description":"The original calculation input — use audit.inputEcho from the original response, or your stored request input. Replayed verbatim through the same calculation path as ifr_calculate."},"expectedOutputSha256":{"description":"audit.outputSha256 from the original response. When provided, the response includes match: true|false — true is deterministic proof the stored numbers re-derive from the stored input.","type":"string","maxLength":80},"expectedOutput":{"description":"The original response `data` object. When provided, a MISMATCH returns a field-level diff [{path, expected, actual}] showing exactly which values changed.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"xbrlCurrency":{"description":"audit.xbrlCurrency from the original response — only present on batch-item audits; required there for hash parity. Omit for single ifr_calculate replays.","type":"string","maxLength":8},"accountingPolicy":{"description":"BATCH-ITEM REPLAY: the batch-level accountingPolicy used in the original ifr_period_end_batch call. The server re-applies the same merge pipeline (policy hoisting, rate injection, normalisation) to the RAW item input — no client-side reconstruction needed. Pass your original item input as `input` plus this policy, with audit.outputSha256 and audit.xbrlCurrency from that item.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["standard","input"]},"outputSchema":{"type":"object","description":"Deterministic recomputation verdict — proof (or refutation) that a stored result re-derives from its stored input.","properties":{"success":{"type":"boolean"},"standard":{"type":"string"},"engineVersion":{"type":"string"},"schemaVersionControlHash":{"type":"string"},"inputSha256":{"type":"string"},"outputSha256":{"type":"string","description":"Hash of the freshly recomputed output"},"expectedOutputSha256":{"type":"string"},"match":{"type":"boolean","description":"true = output reproduces identically; false = engine/schema evolved or stored output altered; null = no expectation supplied"},"verdict":{"type":"string","description":"MATCH | MISMATCH | NO_EXPECTATION with plain-language interpretation"},"diff":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"expected":{},"actual":{}}},"description":"Field-level differences (only when expectedOutput supplied), capped at 100 entries"},"diffTruncated":{"type":"boolean"},"error":{"type":"string","description":"UNKNOWN_STANDARD | INVALID_INPUT | REPLAY_CALCULATION_FAILED"}},"required":["success"]},"annotations":{"readOnlyHint":true,"idempotentHint":true,"destructiveHint":false,"openWorldHint":false}},{"name":"ifr_ecl_provision_matrix","description":"IFRS 9 Simplified Approach — ECL provision matrix for trade receivables, IFRS 15 contract assets, and IFRS 16 lease receivables. Ages each receivable into buckets (current / 1-30 / 31-60 / 61-90 / 91-180 / 180+ days past due). Applies entity-supplied historical loss rates per bucket. Returns per-invoice ECL, portfolio summary, movement schedule (opening→closing provision, P&L charge), and IFRS 7.35H disclosure stub. NOT for the general 3-stage approach (loans, bonds) — use ifr_calculate with standard \"ifrs9\" for those. Token required; costs 10 credits.","inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"reportingDate":{"type":"string","description":"ISO date, e.g. \"2025-12-31\""},"bucketRates":{"type":"object","properties":{"current":{"type":"number","description":"Loss rate for not-yet-due receivables, e.g. 0.005"},"1_30":{"type":"number","description":"Loss rate for 1-30 days past due"},"31_60":{"type":"number","description":"Loss rate for 31-60 days past due"},"61_90":{"type":"number","description":"Loss rate for 61-90 days past due"},"91_180":{"type":"number","description":"Loss rate for 91-180 days past due"},"over180":{"type":"number","description":"Loss rate for 180+ days past due, e.g. 0.50"}},"required":["current","1_30","31_60","61_90","91_180","over180"],"description":"Entity-supplied historical loss rates per aging bucket"},"receivables":{"type":"array","items":{"type":"object","properties":{"invoiceId":{"type":"string","description":"Unique invoice identifier"},"outstandingBalance":{"type":"number","description":"Amount outstanding"},"invoiceDate":{"type":"string","description":"ISO date"},"dueDate":{"description":"ISO date — if absent, classified as current","type":"string"}},"required":["invoiceId","outstandingBalance","invoiceDate"]},"description":"Portfolio of trade receivables to age and provision"},"previousECL":{"description":"Opening ECL provision balance for movement schedule","type":"number"}},"required":["reportingDate","bucketRates","receivables"]},"outputSchema":{"type":"object","description":"IFRS 9 ECL provision matrix: per-invoice ECL, bucket totals, movement schedule, IFRS 7 disclosure stub.","properties":{"success":{"type":"boolean"},"data":{"type":"object","properties":{"invoiceSchedule":{"type":"array","items":{"type":"object","properties":{"invoiceId":{"type":"string"},"bucket":{"type":"string"},"balance":{"type":"number"},"lossRate":{"type":"number"},"ecl":{"type":"number"}}}},"bucketTotals":{"type":"object","additionalProperties":true},"movement":{"type":"object","properties":{"openingECL":{"type":"number"},"closingECL":{"type":"number"},"charge":{"type":"number"}}},"disclosureStub":{"type":"object","additionalProperties":true},"journalEntries":{"type":"array","items":{"type":"object","properties":{"description":{"type":"string"},"reference":{"type":"string"},"entries":{"type":"array","items":{"type":"object","properties":{"account":{"type":"string"},"debit":{"type":"number"},"credit":{"type":"number"},"xbrl":{"type":"object","additionalProperties":true}}}}}}}}},"warnings":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["message"]}}},"required":["success"]},"annotations":{"readOnlyHint":true,"idempotentHint":true,"destructiveHint":false,"openWorldHint":false}},{"name":"ifr_input_schema","description":"Returns the JSON Schema for the input to ifr_calculate for a given standard. Use this to discover required fields, enum values, and defaults without calling ifr_schema. Returns a standard JSON Schema object suitable for programmatic validation. Derived from the controller FIELD_DEFINITIONS — always reflects the current engine version. FREE — no usage charge.","inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"standard":{"type":"string","enum":["ias2","ias7","ias10","ias12","ias16","ias19","ias20","ias21","ias23","ias27","ias28","ias29","ias33","ias36","ias37","ias38","ias40","ias41","ifrs1","ifrs2","ifrs3","ifrs5","ifrs6","ifrs8","ifrs9","ifrs10","ifrs11","ifrs13","ifrs15","ifrs16","ifrs20","general-journal"]},"elementType":{"type":"string","enum":["lease","financial-instrument","provision","revenue-contract","employee-obligation","share-payment","inventory","government-grant","general-journal","asset","equity-method-investment","business-combination","group","tax-position","fx-exposure","borrowing-costs","impairment-test","disposal-group","eps","fair-value-measurement","cash-flow-statement","separate-financials","segments","first-time-adoption","regulatory-balance","post-period-events","hyperinflation"]},"assetClass":{"description":"Discriminator when elementType is \"asset\" — e.g. PPE, INTANGIBLE_ASSET, INVESTMENT_PROPERTY, BIOLOGICAL_ASSET, EXPLORATION (IAS 16 subclass values also route).","type":"string"},"investmentType":{"description":"Discriminator when elementType is \"equity-method-investment\" — ASSOCIATE or JOINT_VENTURE.","type":"string"}}},"outputSchema":{"type":"object","description":"JSON Schema for the input to ifr_calculate for the requested standard.","properties":{"type":{"type":"string","enum":["object"]},"properties":{"type":"object","additionalProperties":true,"description":"Field-by-field JSON Schema definitions"},"required":{"type":"array","items":{"type":"string"},"description":"Required field names"}}},"annotations":{"readOnlyHint":true,"idempotentHint":true,"destructiveHint":false,"openWorldHint":false}},{"name":"ifr_amortisation_schedule","description":"Compute a multi-period amortisation / depreciation / EIR amortisation schedule by rolling reportingDate forward one period at a time. Supported standards: ias16 (PPE depreciation), ias38 (intangible amortisation), ias40 (investment property — cost model), ias23 (borrowing cost capitalisation), ifrs9 (EIR amortisation), ifrs16 (lessee ROU + lease liability). Each period uses the closing carrying amount of the previous period as the opening balance — no manual carry-forward required. Returns a schedule array: [{period, reportingDate, carryingAmount, journalEntries, charges:{depreciation, interest, pnlImpact}}]. Cost: 1 credit per successfully computed period. Cap: 60 periods. ","inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"standard":{"type":"string","enum":["ias16","ias23","ias38","ias40","ifrs9","ifrs16"],"description":"Standard for the rolling schedule — must be one that has a depreciating or amortising asset/liability"},"input":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{},"description":"Initial period input — same shape as ifr_calculate input for this standard. reportingDate is period-1 end date; previousReportingDate is period-0 end date."},"periods":{"type":"integer","minimum":1,"maximum":60,"description":"Number of periods to compute (each period = periodicityMonths). Cap: 60. Each computed period costs 1 credit."},"periodicityMonths":{"description":"Length of each period in months. Default: 12 (annual). Other values: 1 (monthly), 3 (quarterly), 6 (semi-annual).","anyOf":[{"type":"number","const":1},{"type":"number","const":3},{"type":"number","const":6},{"type":"number","const":12}]}},"required":["standard","input","periods"]},"outputSchema":{"type":"object","properties":{"success":{"type":"boolean"},"standard":{"type":"string"},"periodicityMonths":{"type":"number"},"baseReportingDate":{"type":"string"},"periodsRequested":{"type":"number"},"periodsComputed":{"type":"number"},"totalCreditsCharged":{"type":"number"},"schedule":{"type":"array","items":{"type":"object","properties":{"period":{"type":"number"},"id":{"type":"string"},"reportingDate":{"type":"string"},"carryingAmount":{"type":"number"},"journalEntries":{"type":"array","items":{"type":"object","properties":{"description":{"type":"string"},"reference":{"type":"string"},"entries":{"type":"array","items":{"type":"object","properties":{"account":{"type":"string"},"debit":{"type":"number"},"credit":{"type":"number"},"xbrl":{"type":"object","additionalProperties":true}}}}}}},"charges":{"type":"object","properties":{"depreciation":{"type":"number"},"interest":{"type":"number"},"pnlImpact":{"type":"number"}}},"creditsCharged":{"type":"number"}}}}},"required":["success"]},"annotations":{"readOnlyHint":true,"idempotentHint":true,"destructiveHint":false,"openWorldHint":false}},{"name":"ifr_calculation_sheets","description":"Retrieve the calculation-sheets workbook for a prior ifr_calculate or ifr_period_end_batch call. Returns a downloadUrl for the XLSX workbook (GET /api/ifrcoworker/calculation-sheets/{correlationId} with Bearer token) and a structured JSON summary of each sheet's data (journalEntries count, trialBalance accounts, financialStatements sections, disclosureNotes). The workbook also includes an editable valuation pack (analytical, not IFRS-required): a DCF model sheet with pre-filled assumptions (3% growth, 12% discount rate — amber editable cells), a standard-tagged net-debt bridge (IFRS 16 leases, IAS 19 pension, IAS 37 provisions, IFRS 3 consideration) and a multiples/EV-bridge sheet. Records are persisted in MongoDB for 24 hours — no re-calculation needed. This tool is free; downloading the workbook from downloadUrl costs 15 credits. Token required.","inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"correlationId":{"type":"string","description":"correlationId from a prior ifr_calculate or ifr_period_end_batch response. Records are stored for 24 hours."}},"required":["correlationId"]},"outputSchema":{"type":"object","properties":{"success":{"type":"boolean"},"correlationId":{"type":"string"},"downloadUrl":{"type":"string","description":"GET this URL with a Bearer token to download the .xlsx workbook"},"sheets":{"type":"object","properties":{"journalEntries":{"type":"object","properties":{"count":{"type":"number"}},"required":["count"]},"trialBalance":{"type":"object","properties":{"accountCount":{"type":"number"},"balanced":{"type":"boolean"}}},"financialStatements":{"type":"object","properties":{"available":{"type":"boolean"}}},"cashFlowStatement":{"type":"object","properties":{"available":{"type":"boolean"}}},"disclosureNotes":{"type":"object","properties":{"available":{"type":"boolean"}}}}},"reportingDate":{"type":"string"},"standard":{"type":"string"}},"required":["success"]},"annotations":{"readOnlyHint":true,"idempotentHint":true,"destructiveHint":false,"openWorldHint":false}}],"resources":[],"prompts":[],"configSchema":{"type":"object","properties":{"bearerToken":{"type":"string","title":"IFRS Access Token","description":"Your ifrCoworker access token from https://ifrcoworker.com/access — purchase a subscription to get your token."}}}}