Overview

What this is

Finance Integration Simulator (fins) is a finance integration test-double: a stand-in for a SAP-style ERP finance boundary that a domain application (via the DSLCore Orchestrator) can post to. It holds the GL and master data a real ERP would, validates and "posts" journals into accounting documents, tracks the inbound messages and their attempts, returns acknowledgements, enforces idempotency, and can be told to simulate failures — all so integrations can be exercised end-to-end without a production ERP.

The domain, in one paragraph

A company (with its currencies, fiscal periods, GL accounts, cost/profit centres, tax codes, suppliers/customers and document number sequences) is the master-data backbone. A domain app sends an inbound message (validate or post); it maps to a journal batch with entries and lines coded to GL accounts, cost/profit centres and tax codes. Validation checks the master data and fiscal period; a valid post creates an accounting document with lines and a document number from the sequence. Each attempt is a posting attempt; failures record posting errors; every message gets an acknowledgement (POSTED / REJECTED / DUPLICATE / TEMPORARY_FAILURE). Simulation rules can force rejections, delays or temporary failures (recorded as simulation rule hits), and webhook subscriptions receive outbound events as documents post.

The 23 models by area

🗂️ Master data

Company · Currency · FiscalPeriod · GLAccount · CostCentre · ProfitCentre · TaxCode · DocumentNumberSequence — the chart of accounts, org structure and numbering a real ERP validates against.

🤝 Business partners

Supplier · Customer — AP/AR partners with default accounts and currencies.

📒 Journals

JournalBatch · JournalEntry · JournalLine — the posting request as received/mapped, down to the coded line.

📑 Accounting documents

AccountingDocument · AccountingDocumentLine — the posted result (the ERP's document of record) with its own numbering.

📨 Message processing

InboundMessage · PostingAttempt · PostingError · Acknowledgement — the integration ledger: what arrived, each validate/post attempt, the errors, and the reply.

🎛️ Failure simulation

SimulationRule · SimulationRuleHit — deterministic/probabilistic forced rejections, delays and temporary failures for testing error handling.

🔔 Events & webhooks

WebhookSubscription · OutboundEvent — consumers and the events emitted as documents post.

The demo scenario

DSLCore Demo Resources Pty Ltd (company 1000, AUD, fiscal year starting July) with a mining chart of accounts (bank, AR/AP, GST, revenue, maintenance labour/parts/external), cost centres (Mine Operations, Central Workshop, Port), profit centres (Mobile/Fixed/Infra) and GST tax codes.

  • Successful posting: CPM work order WO-28441 sends a maintenance cost-transfer journal (labour 2,100 + parts 2,450 + external 300 = 4,850 to Maintenance Clearing). The inbound message is validated then posted, creating accounting document 5100000001 with four lines, two successful posting attempts (VALIDATE + POST), a POSTED acknowledgement and a finance.document.posted outbound event to the Orchestrator webhook.
  • Rejected posting: work order WO-28442 codes a line to cost centre BAD-MINE → validation rejects it (COST_CENTRE_INVALID), recording a posting error and a REJECTED acknowledgement. A simulation rule (force temporary failure on a flagged correlation) and its hit are included.

56 rows across all 23 models.