Skip to main content
JournalEntryPostingAttempt is an append-only audit ledger that records every attempt to post a double-entry journal entry from a source document (invoice, invoice_transaction, or bank transaction). One row is written per attempt — persisted or halted — so that human-driven retries never overwrite prior halt reasons and the full posting history is preserved. It is workspace-scoped and carries actor metadata (system vs user) together with a nullable reference to the People who triggered a manual retry. The table is the authority for why a journal entry was or was not created for a given source document.
Internal object. Not currently exposed on the public REST API. The operations below describe the intended contract.

API operations

Data model

Attributes

Relationships

System-computed

  • journal_entry_posting_attempt_id — generated by gen_random_uuid() on insert; never user-supplied
  • created_at — set by MikroORM onCreate hook (new Date()); immutable after creation
  • updated_at — set by MikroORM onUpdate hook on every flush
  • deleted_at — soft-delete; set by repository-layer soft-delete helpers; not set by the application layer on normal posting flows
  • attempted_by_kind defaults to JournalEntryPostingAttemptActorKindEnum.SYSTEM (‘system’) when not explicitly provided
  • source_kind native enum extended via Migration20260526030000 to include ‘transaction’ for D9.1 payment-settlement attempts; ‘invoice_transaction’ retained for backward compat with pre-D9.1 rows

Example

Source: apps/api/src/database/entities/JournalEntryPostingAttempt.ts · domain: financial-graph · tier: Infrastructure