The single posting vehicle of the ledger: every value movement in the platform — document posting, manual entry, opening balance, depreciation, payroll, allocation, reversal and period close — is a journal, and its posted lines ARE the general ledger. Posting runs through one pipeline that validates the entry is balanced, resolves an Open fiscal period from the journal date, stamps the totals and the Posted status, and updates the GL and party balance caches in the same unit of work. Posted and Reversed journals are immutable and cannot be edited or deleted; corrections are made by posting a reversal that points back through ReversalOfJournalId. Journals raised by a source document also carry SourceEntityName, SourceRecordId and PostingPurpose so the document's accounting can be found and reversed independently.
Fields
| Field | Label | Type | Required | What it does |
|---|---|---|---|---|
BranchId | Branch | Lookup → Branch | Yes | Header-level branch that seeds each line's branch when the line leaves it empty; the line's own branch, once resolved, is what the balance cache is keyed on. Branch is also the hub from which business unit and GST registration are derived during posting. |
BusinessUnitId | Business Unit | Lookup → BusinessUnit | Header-level business unit used as the first fallback for lines that do not carry their own. When the resolved lines end up spanning more than one business unit, posting adds due-to/due-from clearing lines so each unit balances independently — but only if the company has an inter-business-unit control account configured. | |
CreatedById | Created By | Lookup → UserAccount | Yes | |
CreatedDateTime | Created Date | DateAndTime | Yes | |
FiscalPeriodId | Fiscal Period | Lookup → FiscalPeriod | Yes | Resolved by the posting engine from the journal date, not chosen by the user — posting looks up the Open period covering that date for the company and fails if there is none. Every balance-cache row the journal maintains is keyed on this period. |
Id | Id | Guid | Yes | |
JournalDate | Document Date | Date | The accounting date of the entry, defaulting to today when a journal is created. It determines which fiscal period posting resolves and it is mirrored down onto every line, so it — not the created timestamp — is what date-driven ledger reports filter on. | |
JournalTypeName | Journal Type Name | Text | Classifies where the entry came from — DocumentPosting, Manual, OpeningBalance, Reversal, Closing, Depreciation, Payroll or Allocation — and defaults to Manual when not supplied. A journal of type Reversal cannot itself be reversed. Note that recurring-journal runs are materialised as Manual, not as a distinct type; they are identified by their source document instead. | |
Label | Label | Text | ||
ModifiedById | Modified By | Lookup → UserAccount | Yes | |
Name | Name | Text, unique | Yes | |
Narration | Narration | Text | ||
OwnerId | Owner | Lookup → UserAccount | Yes | |
PartnerAccountId | Partner Account | Lookup → Account | Yes | The company (legal entity) the journal belongs to, following the finance convention that a partner account is the owning company — it is not the customer or supplier. Fiscal-period resolution, inter-business-unit clearing-account lookup and the balance rows the journal writes are all scoped by it; the customer or supplier lives on the line's party account instead. |
PostedById | Posted By | Lookup → UserAccount | ||
PostedDateTime | Posted Date Time | Date | Set by the posting engine to the moment of posting in UTC. It is the posting timestamp, not the accounting date — use the journal date for anything period- or statement-related. | |
PostingPurpose | Posting Purpose | Text | Distinguishes the several journals a single source document can produce — an invoice raises a main journal plus separate ones for cost of goods sold and for tax collected at source, for example — so each can be found and reversed independently. Values come from the document posting purposes (Invoice, InvoiceCOGS, InvoiceTcs, Bill, BilledInventory, CreditNote, DebitNote, SaleDebitNote, PaymentTaken, PaymentGiven, GoodsReceipt, DeliveryOrder, Return, BillReturn, ChequeClearing, InterestCharge) and it is meaningful only on document postings. | |
RecordTypeId | Record Type | Guid, hidden | ||
ReversalOfJournalId | Reversal Of Journal | Lookup → Journal | Present only on reversal journals, pointing back at the journal being corrected; the original is simultaneously flipped to Reversed. This is the audit trail for every correction, since nothing in the ledger is ever edited or deleted. | |
SourceEntityName | Source Entity Name | Text | Names the entity of the document that produced this journal, held as plain text with deliberately no foreign key so that any entity can post. Together with the source record id and the posting purpose it is the lookup key used to find an existing posted journal for a document and reverse it on edit, un-approval or delete. | |
SourceRecordId | Source Record | Lookup → @sourceEntityName | ||
Status | Status | Text | Takes one of Draft, PendingApproval, Posted or Reversed. Only Draft and PendingApproval can be posted; Posted and Reversed make the whole journal and its lines immutable and undeletable outside the posting service, and Reversed means a swapped-sides reversal journal has already been posted against it. | |
TotalCredit | Total Credit | Calculated (calculated) | Stamped by the posting engine as the sum of the line credits, rounded to two decimals, and always equal to the debit total — an entry whose sides differ is rejected before it can post. Note that inter-business-unit clearing lines added during posting are included, though they net to zero. | |
TotalDebit | Total Debit | Calculated (calculated) | Stamped by the posting engine as the sum of the line debits, rounded to two decimals, and is always exactly equal to the credit total because posting refuses an unbalanced entry. It is a posting artefact rather than something to fill in by hand. | |
UIProps | UI Props | Text | ||
UpdatedDateTime | Modified Date | DateAndTime | Yes |
Actions
| Action | Label | Type | What it does |
|---|---|---|---|
BulkDelete | Delete | Delete | Delete the selected records. |
Clone | Clone | ServerAction (Clone) | Create a copy of this record |
Delete | Delete | Delete | Only works while the journal is Draft or PendingApproval. A Posted or Reversed journal cannot be deleted — the ledger is append-only — and the attempt is rejected with a prompt to reverse it instead. |
DeleteInList | Delete | Delete | Delete in a list page |
Edit | Edit | Edit | Only meaningful while the journal is Draft or PendingApproval. Once the status is Posted or Reversed the record is immutable outside the posting service, and a status change is refused with a prompt to use the reversal action. |
EditInLine | Edit | EditInline | Edit |
EditListRow | Edit | Edit | EditListRow |
New | New | New | New |
PostJournal | Post | ServerAction (PostJournal) | Validates and commits the journal to the ledger in one atomic unit of work: it requires at least two lines, exactly one of Debit or Credit per line with no negative amounts, equal debit and credit totals, a GL account on every line, no inactive accounts, and a party on every control-account line. It then defaults each line's dimensions, adds inter-business-unit clearing lines when the entry spans more than one business unit and a clearing account is configured, resolves an Open fiscal period from the journal date, stamps the totals, Posted status, timestamp and posting user, and updates the GL and party balance caches. Only Draft or PendingApproval journals are accepted, and after this the journal is immutable. |
ReverseJournal | Reverse | ServerAction (ReverseJournal) | Creates a brand-new journal with every debit and credit swapped, posts it immediately, and marks the original Reversed — it does not delete or edit anything. The reversal is dated today unless a reversal date is passed, so it lands in an Open period even when the original period has been closed, and it copies the original's source document, posting purpose and dimensions. Only a Posted journal can be reversed, and a reversal journal cannot itself be reversed. |
Validations
| Validation | Applies to | Error message | Notes |
|---|---|---|---|
| Fiscal Period | FiscalPeriodId, Error | Fiscal Period cannot be null! | Fiscal Period cannot be null! |
| Journal Date Validation | JournalDate, Error | Document Date cannot be future date. | Document Date cannot be future date. |
Lookup filters
| Filter | Lookup field | Notes |
|---|---|---|
| Branch For Partner Account | BranchId | |
| Fiscal Period Active | FiscalPeriodId | |
| Partner Account Filter | PartnerAccountId |
Related entities
- Invoice — looks up via
SourceRecordId - ExpenseAdvance — looks up via
SourceRecordId - CompanyCard — looks up via
SourceRecordId - AssetDisposal — looks up via
SourceRecordId - PayrollStatutoryChallan — looks up via
SourceRecordId - BankTransfer — looks up via
SourceRecordId - RecurringDepreciation — looks up via
SourceRecordId - Payment — looks up via
SourceRecordId - RecurringJournal — looks up via
SourceRecordId - UserAccount — looks up via
PostedById - Branch — looks up via
BranchId - UserAccount — looks up via
CreatedById - DeliveryOrder — looks up via
SourceRecordId - GoodsReceipt — looks up via
SourceRecordId - ExpenseReimbursementBatch — looks up via
SourceRecordId - PayrollRun — looks up via
SourceRecordId - LandedCost — looks up via
SourceRecordId - Bill — looks up via
SourceRecordId - Account — looks up via
PartnerAccountId - InterestCharge — looks up via
SourceRecordId - UserAccount — looks up via
OwnerId - UserAccount — looks up via
ModifiedById - ExpenseClaim — looks up via
SourceRecordId - CreditNote — looks up via
SourceRecordId - ChequeTransaction — looks up via
SourceRecordId - FullAndFinalSettlement — looks up via
SourceRecordId - CompanyCardTransaction — looks up via
SourceRecordId - RevenueRecognitionSchedule — looks up via
SourceRecordId - PayrollPaymentBatch — looks up via
SourceRecordId - CurrencyRevaluation — looks up via
SourceRecordId - LoanAdvance — looks up via
SourceRecordId - ExpenseVoucher — looks up via
SourceRecordId - BusinessUnit — looks up via
BusinessUnitId - ExpenseAdvanceSettlement — looks up via
SourceRecordId - InventoryLedger — looks up via
SourceRecordId - Journal — looks up via
ReversalOfJournalId - FiscalPeriod — looks up via
FiscalPeriodId - DebitNote — looks up via
SourceRecordId - TdsChallan — looks up via
SourceRecordId - CompanyCardTransaction — referenced by via
GLId - ExpenseClaim — referenced by via
GLId - TdsTransaction — referenced by via
GLId - ExpenseReimbursementBatch — referenced by via
GLId - CurrencyRevaluation — referenced by via
GLId - LoanAdvance — referenced by via
GLId - AssetDisposal — referenced by via
GLId - JournalLine — referenced by via
JournalId - InventoryNrvAssessment — referenced by via
JournalId - SettlementAllocation — referenced by via
JournalId - ExpenseVoucher — referenced by via
JournalId - PayrollPaymentBatch — referenced by via
GLId - OpenTransaction — referenced by via
JournalId - PayrollRun — referenced by via
GLId - FullAndFinalSettlement — referenced by via
GLId - LandedCost — referenced by via
GLId - ExpenseAdvance — referenced by via
GLId - ExpenseAdvanceSettlement — referenced by via
JournalId - PayrollStatutoryChallan — referenced by via
GLId - BankTransfer — referenced by via
GLId - RevenueRecognitionScheduleLine — referenced by via
JournalId - Journal — referenced by via
ReversalOfJournalId - TdsChallan — referenced by via
GLId
