Appearance
Journal Entry field guide
The journal entry is OSERP’s controlled bridge between an operational event and the general ledger. A good entry explains who created it, why it exists, which period and company it belongs to, what source document caused it, and how every debit and credit balances. Use Demo Retail Group LLC and fiscal period 2026-09 while practising.
Header fields
Open Finance → Journal Entry → New. Complete the header before entering lines.
| Field | Example | Purpose and impact |
|---|---|---|
| Journal number | JE-2026-009841 | Unique audit and API key |
| Company | Demo Retail Group LLC | Legal ledger boundary |
| Branch | DXB-MAIN | Responsibility and reporting |
| Posting date | 2026-09-30 | Ledger and tax period |
| Document date | 2026-09-29 | Source-event date |
| Journal type | Accrual / adjustment | Workflow and report classification |
| Source module | Inventory receipt | Operational drill-down |
| Source ID | GRN-0041 | Link to originating document |
| Currency | AED | Transaction currency |
| Exchange rate | 3.6725 | Functional-currency conversion |
| Reference | September landed cost | Search and reconciliation |
| Reversal date | 2026-10-01 | Automatic reversal scheduling |
| Status | Draft / approved / posted | Posting gate |
Posting date determines the period and lock rules. Document date explains when the business event occurred. A backdated posting after close needs controlled reopen or an adjustment period, never a silent date edit.
Line fields
Each debit or credit line requires account, amount, currency, description, dimensions, tax where relevant, and source allocation.
| Field | Example | Impact |
|---|---|---|
| Account | 131100 Medicines inventory | Ledger classification |
| Debit | 7,200.00 | Increase asset/expense or reduce liability/revenue |
| Credit | 0.00 | Opposite balance effect |
| Foreign amount | 1,960.84 USD | Transaction-currency evidence |
| Rate | 3.6725 | Functional conversion |
| Description | GRN-0041 landed cost | Audit explanation |
| Cost centre | DXB-COLD | Department responsibility |
| Project/WBS | PRK-2026 | Project margin and budget |
| Warehouse | DXB-FC-01 | Inventory reconciliation |
| Tax code | STANDARD | Tax reporting |
| Partner | NovaBio GmbH | Subledger control |
| Due date | 2026-10-31 | Payable/receivable ageing |
Debit and credit amounts must not both be populated on one line unless the API contract explicitly supports signed amounts. The entry total must balance in functional currency and, where required, in transaction currency.
Dimensions and subledgers
Dimensions add management meaning without creating an account for every branch or product. Common dimensions are company, branch, department, cost centre, project, WBS, warehouse, item, batch, partner, salesperson, fund, grant, and channel. Required dimensions are configured by account and source module.
An inventory receipt may require company, warehouse, item category, and batch. A project invoice may require project, WBS, customer, and tax jurisdiction. A general overhead line may require department but not warehouse. Missing dimensions should create a validation message naming the field and policy.
Partner, inventory, tax, fixed-asset, and payroll subledgers must reconcile to their control accounts. Do not post directly to a control account to hide an unresolved subledger difference unless an approved reconciliation adjustment explains it.
Balancing and validation
Before approval OSERP validates debits equal credits, account active status, period open, company scope, currency rate, tax code, required dimensions, partner role, source status, duplicate reference, and permission. A journal with one debit AED 10,000 and credits AED 6,000 and AED 4,000 balances; one with AED 9,999.99 does not.
Use a suspense account only under documented policy with owner, ageing, reason, and clearing deadline. A balanced journal can still be wrong if the account, company, period, tax, or dimension is wrong.
Accruals and reversals
An accrual header records estimate, source, period, owner, basis, amount, and reversal date. For AED 50,000 unbilled freight, debit landed cost or inventory and credit accrued liability on 30 September; reverse on 1 October. When the supplier invoice arrives, match and clear the accrual rather than creating duplicate expense.
Reversal entries reference original journal, reversal reason, date, and approver. A user must not delete a posted accrual. If the estimate changes, post a delta adjustment with evidence.
Allocations and recurring journals
An allocation rule stores source amount, basis, target dimensions, effective dates, rounding, owner, and approval. Allocate AED 120,000 rent by floor area: DXB 60%, AUH 25%, and AIN 15%. The generated lines total exactly AED 120,000; any rounding difference goes to a configured account with explanation.
Recurring journals record template, frequency, start/end, account lines, dimensions, currency, approval, and next run. Generated entries remain individually reviewable. A failed recurring run creates an exception; it does not silently skip a period.
Tax and withholding
Tax fields include tax code, taxable base, rate, tax amount, jurisdiction, exemption, withholding class, and certificate. Tax on a journal is allowed only where policy supports manual tax postings. Source invoices and returns remain authoritative for most transactional tax.
Withholding entries record partner, base, rate, authority, certificate, and payment reference. A manual tax override requires permission, reason, and audit event. Tax reports reconcile journal tax lines to source documents and statutory returns.
Foreign currency
For a USD invoice of 1,000 at rate 3.6725, functional value is AED 3,672.50. Store transaction amount, functional amount, rate source, rate date, and currency. Settlement at another rate posts realised FX; month-end revaluation posts unrealised FX for open balances. Never edit the original rate to make a later payment agree.
Approval and posting
Approval policy may depend on amount, journal type, account, source, fund, or user. The approval event records reviewer, timestamp, decision, comment, and version. Posting assigns immutable number, updates ledger, writes audit event, and triggers downstream reports or webhooks.
A rejected journal returns to draft with reason. A posted journal is corrected by reversal and replacement or an approved adjustment, not by editing history. Period locks prevent posting into a closed period.
API and audit mapping
API creation should include company, posting date, currency, source type/ID, idempotency key, and explicit lines. Use decimal strings for money when required. The response should return journal ID, number, status, totals, and correlation ID. A timeout is retried with the same idempotency key.
json
{"companyId":"company_uae","postingDate":"2026-09-30","currency":"AED",
"source":{"type":"LANDED_COST","id":"LC-0041"},
"lines":[
{"accountId":"131100","debit":"7200.00","costCentre":"DXB-COLD"},
{"accountId":"211400","credit":"7200.00","partnerId":"supplier_novabio"}
]}Audit evidence includes creator, approver, poster, old/new values, source, request ID, correlation ID, IP or session reference where available, and reversal relationship. Redact credentials and sensitive partner data in support logs.
Practice checklist
Create a balanced landed-cost journal, add required dimensions, schedule an accrual reversal, allocate rent, post a USD supplier entry, revalue an open payable, reject a missing-dimension journal, and correct a posted error through reversal. Explain every field’s owner, format or precision, status, permission, source, tax, currency, and report impact.
Related: Accounting, Advanced GL Mapping, Inventory field guide, API cookbook, and Month-end close.
Journal-entry implementation worksheet
| Area | Field | Example | Acceptance evidence |
|---|---|---|---|
| Scope | Company/book/branch | DGV UAE / IFRS / Dubai | Correct legal and reporting boundary |
| Dates | Posting/document/reversal | 30 Sep / 29 Sep / 1 Oct | Period and source dates differ correctly |
| Source | Module and source ID | Landed cost / LC-0041 | Drill-down reaches originating event |
| Header | Type/reference | Accrual / September freight | Search and reporting classification |
| Lines | Account/side/amount | Dr inventory AED 7,200 | Debit-credit and precision pass |
| Dimensions | Cost centre/project/warehouse | DXB-COLD / PRK-2026 | Ownership is complete |
| Tax | Code/base/rate | Import / policy basis | Return and source reconcile |
| Approval | Reviewer/version/comment | Finance Manager / V3 | Maker-checker evidence |
| Posting | Number/status/correlation | JE-009841 / posted | Immutable ledger result |
Journal test pack
Run a balanced entry, an unbalanced entry, an inactive-account entry, a missing-dimension entry, a closed-period entry, a duplicate source reference, a foreign-currency entry without a rate, a tax override without evidence, and a posted-entry correction. The expected refusal must occur before any ledger line or downstream webhook is created. Save request ID, response, user, timestamp, and audit event for each case.
For a landed-cost accrual of AED 50,000, post Dr inventory or freight-in AED 50,000 and Cr accrued liability AED 50,000 on 30 September. Schedule a reversal on 1 October. When the supplier invoice arrives, match it to the accrual and clear the liability. If the invoice is AED 51,200, post the AED 1,200 delta with source and approval rather than creating a second AED 51,200 expense.
Reconciliation by dimension
Reconcile the journal ledger to each subledger by company, branch, account, currency, period, and source. Inventory control must agree to item/warehouse/batch value; AR and AP controls must agree to open partner balances; tax accounts must agree to source documents and returns; fixed assets must agree to the asset register; payroll must agree to approved payroll batches. A control-account adjustment without a subledger explanation is an exception, not a reconciliation.
API safeguards
Use an idempotency key per intended journal, not per HTTP retry. Require tenant/company scope server-side and reject client attempts to post to another company. Validate decimal strings, currency precision, account status, period, dimensions, source ownership, and balanced totals before persistence. Return a correlation ID that links API request, journal, audit event, and webhook. A duplicate request returns the original journal; a changed payload with the same key returns a conflict.