Quick Reference

Group Models
Master Data Company · Currency · FiscalPeriod · GLAccount · CostCentre · ProfitCentre · TaxCode · DocumentNumberSequence
Business Partners Supplier · Customer
Journals JournalBatch · JournalEntry · JournalLine
Accounting Documents AccountingDocument · AccountingDocumentLine
Message Processing InboundMessage · PostingAttempt · PostingError · Acknowledgement
Failure Simulation SimulationRule · SimulationRuleHit
Events & Webhooks WebhookSubscription · OutboundEvent

23 models in total.

Key status vocabularies (enums)

  • JournalBatch.status: DRAFT · RECEIVED · VALIDATING · VALIDATED · POSTING · POSTED · REJECTED
  • InboundMessage.status: RECEIVED · DUPLICATE · VALIDATING · VALIDATED · POSTING · POSTED · REJECTED · TEMPORARY_FAILURE
  • InboundMessage.message_type: JOURNAL_VALIDATE · JOURNAL_POST · JOURNAL_STATUS
  • PostingAttempt.operation / status: VALIDATE·POST / STARTED · SUCCEEDED · REJECTED · TEMPORARY_FAILURE
  • Acknowledgement.type: VALIDATED · POSTED · REJECTED · DUPLICATE · TEMPORARY_FAILURE
  • AccountingDocument.status: POSTED · REVERSED
  • GLAccount.account_type: ASSET · LIABILITY · EQUITY · REVENUE · EXPENSE (normal_balance DEBIT/CREDIT)
  • FiscalPeriod.status: OPEN · CLOSED · LOCKED
  • TaxCode.input_output: INPUT · OUTPUT · NONE
  • SimulationRule.rule_type: MATCH · PROBABILITY · LATENCY · FORCED_RESPONSE (response_status REJECTED / TEMPORARY_FAILURE / DELAY_ONLY)
  • OutboundEvent.delivery_status: PENDING · DELIVERED · FAILED

The posting flow, in the demo codes

Success: message CPM-WO-28441-001 (JOURNAL_POST, corr CORR-WO-28441) → batch JB-2027-51000001 (POSTED, 4,850 Dr = 4,850 Cr) → entry + 4 lines → accounting document 5100000001 + 4 lines → 2 posting attempts (VALIDATE ✓, POST ✓) → POSTED ack → finance.document.posted event.

Rejection: message CPM-WO-28442-001 → batch JB-2027-51000002 (REJECTED) → validate attempt 422 COST_CENTRE_INVALID → posting error (field cost_centre_code, value BAD-MINE, not retryable) → REJECTED ack. Simulation rule SIM-TEMPFAIL-CPM (force TEMPORARY_FAILURE on CORR-WO-28442) + its hit.

The demo data set

Company 1000 (DSLCore Demo Resources Pty Ltd, AUD): 11 GL accounts, 3 cost centres, 3 profit centres, 3 GST tax codes, 1 supplier, 1 customer, 3 fiscal periods (P02 CLOSED, P03/P04 OPEN), a GL_JOURNAL number sequence — plus the two posting flows above. 56 rows across all 23 models.

Modelling notes

  • The pack ships its .dsl already in the native dbdiagram dialect, so it was used essentially verbatim (no translation/converter). Decimal → Numeric(10,2), Date → Date are handled natively by codegen.
  • Denormalisation is intentional and pervasive (per the DSLCore denorm philosophy): most child rows carry company_code, gl_account_code, cost_centre_code, etc. alongside the FK — mirroring how a real ERP interface message carries codes, not surrogate keys. Post-seed denorm scan: zero Text leaks.
  • No EventOutbox/ExternalReference in this pack — OutboundEvent is the app's own outbox, and InboundMessage its inbox. This app is a first-class integration endpoint, not a domain app.
  • Validation, posting, idempotency, simulation-rule evaluation and event delivery are Phase 2 (page 03) — Phase 1 models the outcomes statically.