Opening Balance Entry
Opening Balance Entry — Complete User Guide
Comprehensive guide for opening balances system in Two Accounts Web
Table of Contents
- What Is an Opening Balance Entry?
- When To Use Opening Balance Entries
- When NOT To Use Opening Balance Entries
- Complete Field-by-Field Guide
- How Opening Balances Post to the General Ledger
- Balance Sheet Accounts — Double-Entry Posting
- Profit & Loss Accounts — Why They Are Excluded
- Foreign Currency Handling
- Sample Data & Output
- Edge Cases & Null Handling
- Lock Date Enforcement
- Viewing Opening Balances in Reports
§. Accounting Regulation Validation
1. What Is an Opening Balance Entry?
An Opening Balance Entry is used to seed the General Ledger with beginning balances when:
- Migrating from another accounting system to this system
- Starting a new fiscal year with balances carried forward
- Setting up initial account balances for a new business
Each entry represents one account's opening balance on a specific financial year start date.
2. When To Use Opening Balance Entries
You should use this form for:
| Scenario | Example |
|---|---|
| Accounts Receivable — customer balances outstanding | Customer A owes BDT 5,00,000 |
| Accounts Payable — supplier balances unpaid | You owe Supplier B BDT 3,00,000 |
| Cash & Bank Accounts — cash in hand and at bank | Bank ABC balance BDT 10,00,000 |
| Loans Payable/Receivable — outstanding loans | Bank loan balance BDT 50,00,000 |
| Capital Accounts — owner's equity | Owner's capital BDT 20,00,000 |
| Special Accounts — special purpose balances | Special deposit BDT 1,00,000 |
| Investments — investment holdings | 500 shares of XYZ Ltd at BDT 1,000/share |
| Intangible Assets — patents, trademarks, goodwill | Patent valued at BDT 2,00,000 |
| Employee Clearing — employee advance balances | Employee advance BDT 50,000 |
| Expense Claims — outstanding claims | Unpaid claim BDT 25,000 |
| Any Balance Sheet account — assets, liabilities, equity | Any opening balance needed |
3. When NOT To Use Opening Balance Entries
The system has dedicated forms for certain asset types. Do NOT use Opening Balance Entry for these:
| Asset Type | Use This Instead | Why |
|---|---|---|
| Fixed Assets (machinery, vehicles, buildings) | Fixed Asset form — set OpeningBalanceCost and OpeningBalanceAccumulatedDepreciation on each asset record | The Fixed Asset form tracks individual assets with depreciation schedules, disposal tracking, and asset register reporting. An Opening Balance Entry posts to the GL account but creates NO asset-level tracking. |
| Inventory Items (stock on hand) | Inventory Item form — set OpeningInventoryQuantity and OpeningInventoryCost on each item | The Inventory Item form creates inventory cost layers that integrate with the costing engine (FIFO/LIFO/Moving Average). An Opening Balance Entry posts to the GL account but creates NO item-level tracking or cost layers. |
| Import Letter of Credit Payable | Letter of Credit module — create LC with DocumentsPresented status | The LC module auto-creates the complete LC liability, cost capitalization, and tax entries. An OB Entry would miss all the cost line splits, VAT calculations, and margin/financing allocations. |
| Export Letter of Credit Receivable | Export Letter of Credit module — create with DocumentsShipped status | The Export LC module auto-creates the receivable, clearing account, and fee handling. |
| LC Accrual Interest Payable | LC Accrue Interest form on the LC View | The accrual form calculates interest correctly based on days, rate, and financed portion. |
If you must set an LC-related opening balance manually, use a Journal Entry with the
IsLCAdjustmentorIsExportLCAdjustmentflag set, and link to the specific LC. Do NOT use the Opening Balance Entry form for LC-related accounts.
4. Complete Field-by-Field Guide
The Form Fields
| Field | Required? | What To Enter | If Left Blank |
|---|---|---|---|
| Account | ✅ Yes | Select the GL account from the Chart of Accounts. Only Balance Sheet accounts are available (Assets, Liabilities, Equity). Profit & Loss accounts are not shown because they are temporary accounts that start each period at zero (per IAS 1 Section 35). | Entry is skipped entirely — no GL posting |
| Customer | ❌ Only if Account = AR | Select the customer with outstanding balance | AR entry has no customer link — treated as generic AR |
| Supplier | ❌ Only if Account = AP | Select the supplier with outstanding balance | AP entry has no supplier link — treated as generic AP |
| Bank Account | ❌ Only if Account = Cash/Bank | Select the bank account | Cash entry has no bank link — treated as generic cash |
| Employee | ❌ Only if Account = Employee Clearing | Select the employee | Entry has no employee link |
| Capital Account | ❌ Only if Account = Capital Accounts | Select the capital account | Entry has no capital account link |
| Special Account | ❌ Only if Account = Special Accounts | Select the special account | Entry has no special account link |
| Investment | ❌ Only if Account = Investments | Select the investment | Entry has no investment link |
| Intangible Asset | ❌ Only if Account = Intangible Assets | Select the intangible asset | Entry has no asset link |
| Expense Claims Payer | ❌ Only if Account = Expense Claims | Select the expense claims payer | Entry has no payer link |
| Quantity | ❌ Only for Investments | Number of shares/units | Quantity not recorded in GL |
| Financial Year Start | ✅ Yes | The fiscal year date this balance belongs to (e.g., 7/1/2026) | Entry may post to wrong period |
| Debit or Credit | ✅ Yes | Select Debit or Credit | Entry amount sign is wrong |
| Amount | ✅ Yes (or AmountInCurrency if foreign) | Amount in base currency | Entry skipped (0 amount) |
| Description | ❌ | Optional notes about this entry | No description displayed |
| Entry Date | ✅ Yes | When this entry was created/effective | Informational — not used in GL posting |
| Created At | ❌ | Immutable audit trail — records when the opening balance record was first created. | Not used in any business logic or reporting |
| Reference | ❌ | Optional reference number | No reference displayed |
| Division | ❌ | Operational division | Reported without division filter |
| Currency | ❌ Only if foreign currency | Select the foreign currency | Treated as base currency |
| Amount In Currency | ❌ Only if Currency is set | Amount in foreign currency | Base amount used directly |
| Exchange Rate | ❌ Only if Currency is set | Rate from foreign to base currency | If 0, no conversion occurs |
| Exchange Rate Is Inverse | ❌ Only if Currency is set | Check if rate is inverse format | Standard direct rate used |
Entity Field Visibility
The Customer, Supplier, Bank Account, Employee, Capital Account, Special Account, Investment, Intangible Asset, and Expense Claims Payer fields are conditionally visible — they only appear when the selected Account matches the expected type:
| Account Selected | Entity Field That Appears |
|---|---|
| Accounts Receivable (AR) / ControlAccountForCustomers | Customer |
| Accounts Payable (AP) / ControlAccountForSuppliers | Supplier |
| Cash at Bank / ControlAccountForBankAccounts | Bank Account |
| Employee Clearing / ControlAccountForEmployees | Employee |
| Capital Accounts / ControlAccountForCapitalAccounts | Capital Account |
| Special Accounts / ControlAccountForSpecialAccounts | Special Account |
| Investments / ControlAccountForInvestments | Investment + Quantity |
| Intangible Assets / Accumulated Amortization | Intangible Asset |
| Expense Claims | Expense Claims Payer |
If the field does not appear: Double-check that you have selected the correct Account type from the Chart of Accounts.
5. How Opening Balances Post to the General Ledger
The Opening Balance Entry form only allows selecting Balance Sheet accounts (Assets, Liabilities, Equity). Profit & Loss accounts are excluded because they are temporary accounts that start each period at zero.
When you save an Opening Balance Entry, every entry creates 2 General Ledger transactions with a built-in balancing entry — guaranteeing DR = CR.
The Posting Rule
| Account Type | Available in Form? | Entries Created | Why |
|---|---|---|---|
| Balance Sheet (Asset, Liability, Equity) | ✅ Available | 2 entries — Dr/Cr target account + opposite Dr/Cr RetainedEarnings | The balance sheet must stay balanced. The offset to RetainedEarnings ensures Assets = Liabilities + Equity. |
| Profit & Loss (Income, Expense) | ❌ Not available | N/A | P&L accounts are temporary — they start each period at zero per IAS 1 Section 35. To seed a P&L account, use a Journal Entry instead. |
Why P&L Accounts Are Excluded
Per IAS 1 Section 35 and ASC 220-10-45, Profit & Loss accounts cannot have carried-forward opening balances — they are temporary accounts that are closed to Retained Earnings at each period end. If P&L opening balances were allowed:
- They would need to post a balancing entry to Retained Earnings (to maintain DR = CR)
- Then at period-end, the P&L close would also post to Retained Earnings
- The result: double-counting in Retained Earnings
If P&L opening balance were possible (it is not):
Dr SalaryExpense 5,00,000 (opening balance entry)
Cr RetainedEarnings 5,00,000 (balancing entry to RE)
At period end:
Cr SalaryExpense 5,00,000 (close to P&L summary)
Dr RetainedEarnings 5,00,000 (close to RE — second hit)
Result: RetainedEarnings = 5,00,000 - 5,00,000 = 0 ❌
But it should be -5,00,000 (expense reduces equity)
To seed a P&L account with an opening balance, use a Journal Entry instead — posting directly to the P&L account with an offset to whatever Balance Sheet account is appropriate.
6. Balance Sheet Accounts — Double-Entry Posting
Each Opening Balance Entry creates 2 General Ledger transactions:
Entry 1: Post to the Target Account
Dr AccountsReceivable (or your selected account) Amount (if Debit selected)
OR
Cr AccountsReceivable (or your selected account) Amount (if Credit selected)
Entry 2: Post Opposite to Retained Earnings
Cr RetainedEarnings Amount (opposite of Entry 1)
OR
Dr RetainedEarnings Amount (opposite of Entry 1)
Why This Is Correct
The double-entry ensures that the accounting equation stays in balance:
Before: Assets(0) - Liabilities(0) = Equity(0)
After: Assets(5,00,000) - Liabilities(0) = Equity(5,00,000)
↑
RetainedEarnings increased
Example — Customer AR Opening Balance
Scenario: Customer ABC has an outstanding balance of BDT 5,00,000 at the start of the fiscal year.
Entry in the form:
Account: Accounts Receivable (AR)
Customer: ABC Trading
Financial Year Start: 7/1/2026
Debit or Credit: Debit
Amount: 5,00,000
GL entries created:
Entry 1: Dr AccountsReceivable (ABC Trading) 5,00,000
Entry 2: Cr RetainedEarnings 5,00,000
Total Dr = 5,00,000
Total Cr = 5,00,000 ✅ DR = CR
Example — Supplier AP Opening Balance
Scenario: You owe Supplier XYZ BDT 3,00,000 at the start of the fiscal year.
Entry in the form:
Account: Accounts Payable (AP)
Supplier: XYZ Suppliers
Financial Year Start: 7/1/2026
Debit or Credit: Credit
Amount: 3,00,000
GL entries created:
Entry 1: Cr AccountsPayable (XYZ Suppliers) 3,00,000
Entry 2: Dr RetainedEarnings 3,00,000
Total Dr = 3,00,000
Total Cr = 3,00,000 ✅ DR = CR
Example — Bank Account Opening Balance
Scenario: Bank ABC has a balance of BDT 10,00,000 at the start of the fiscal year.
Entry in the form:
Account: Cash at Bank (Bank ABC)
Bank Account: Bank ABC
Financial Year Start: 7/1/2026
Debit or Credit: Debit
Amount: 10,00,000
GL entries created:
Entry 1: Dr CashAtBank (Bank ABC) 10,00,000
Entry 2: Cr RetainedEarnings 10,00,000
Total Dr = 10,00,000
Total Cr = 10,00,000 ✅ DR = CR
Example — Loan Payable Opening Balance
Scenario: You have an outstanding bank loan of BDT 50,00,000.
Entry in the form:
Account: Loan Payable (or your liability account)
Financial Year Start: 7/1/2026
Debit or Credit: Credit
Amount: 50,00,000
GL entries created:
Entry 1: Cr LoanPayable 50,00,000
Entry 2: Dr RetainedEarnings 50,00,000
Total Dr = 50,00,000
Total Cr = 50,00,000 ✅ DR = CR
Example — Capital Account Opening Balance
Scenario: Owner's capital is BDT 20,00,000.
Entry in the form:
Account: Capital Accounts
Capital Account: Owner's Equity
Financial Year Start: 7/1/2026
Debit or Credit: Credit
Amount: 20,00,000
GL entries created:
Entry 1: Cr CapitalAccount (Owner's Equity) 20,00,000
Entry 2: Dr RetainedEarnings 20,00,000
Total Dr = 20,00,000
Total Cr = 20,00,000 ✅ DR = CR
7. Profit & Loss Accounts — Why They Are Excluded
The Opening Balance Entry form only allows Balance Sheet accounts (Assets, Liabilities, Equity). The Account field is filtered to show only accounts that implement Balance Sheet Account. Profit & Loss accounts do not appear in the autocomplete list.
Why This Restriction Exists
Per IAS 1 Section 35, Profit & Loss accounts are temporary accounts — they start each period at zero and are closed to Retained Earnings at period end. Allowing opening balances on P&L accounts would create an accounting paradox:
If a P&L opening balance were allowed:
Option A — No balancing entry:
Dr RentExpense 1,00,000
→ Dr ≠ Cr ❌ (violates double-entry)
Option B — With RetainedEarnings offset:
Dr RentExpense 1,00,000
Cr RetainedEarnings 1,00,000
→ At period end: RentExpense closed to RE
→ RE affected TWICE (once from OB, once from close) ❌
There is no way to post a P&L opening balance while maintaining both double-entry integrity AND correct Retained Earnings. The only correct solution is to exclude P&L accounts from the Opening Balance Entry form.
How to Seed P&L Accounts If Needed
If you need to seed a P&L account (e.g., to enter a prior-period expense or deferred revenue carried from a migration), use a Journal Entry instead:
| Step | Action |
|---|---|
| 1 | Navigate to Journal Entries > New Journal Entry |
| 2 | Create a line for the P&L account (Dr or Cr) |
| 3 | Create a balancing line for the offset account (usually Retained Earnings) |
| 4 | Set the date to the first day of the fiscal year |
| 5 | Include a clear description like "Opening balance — Rent Expense" |
Example Journal Entry for seeding a P&L account:
Date: 7/1/2026
Narration: Opening balance — Prepaid Rent from migration
Line 1: Dr Rent Expense 1,00,000
Line 2: Cr RetainedEarnings 1,00,000
Total Dr = 1,00,000
Total Cr = 1,00,000 ✅ DR = CR
8. Foreign Currency Handling
When Currency Applies
The Currency field becomes visible when: - The entity (Customer, Supplier, or Bank Account) has a default currency set - Or you manually select a Foreign Currency
Auto-Population
When you select an entity that has a default currency, the system automatically populates the Currency field:
| Account Type | Source of Auto-Populated Currency |
|---|---|
| Accounts Receivable | Customer's default currency |
| Accounts Payable | Supplier's default currency |
| Cash at Bank | Bank Account's default currency |
| Employee Clearing | Employee's default currency |
| Special Accounts | Special Account's default currency |
| Capital Accounts | Capital Account's default currency |
How the Base Amount Is Computed
When Currency and AmountInCurrency are set, the system:
- Takes the AmountInCurrency
- Multiplies by the Exchange Rate (or divides if inverse)
- Rounds to the base currency's decimal places
- Rounds to the foreign currency's decimal places
If Debit is selected:
obAmount = +AmountInCurrency (positive)
If Credit is selected:
obAmount = -AmountInCurrency (negative)
Base Amount = |obAmount| × (ExchangeRate or 1/ExchangeRate if inverse)
Example — Foreign Currency AR
Scenario: Customer ABC (USD-based) owes USD 5,000. Exchange rate is 110 (1 USD = 110 BDT).
Entry in the form:
Account: Accounts Receivable
Customer: ABC Trading (USD)
Financial Year Start: 7/1/2026
Debit or Credit: Debit
Amount: 5,50,000 ← computed: 5,000 × 110
Amount In Currency: 5,000 ← in USD
Currency: USD
Exchange Rate: 110
Exchange Rate Is Inverse: No
GL entries created:
Entry 1: Dr AccountsReceivable (ABC Trading) USD 5,000 (BDT 5,50,000)
Entry 2: Cr RetainedEarnings BDT 5,50,000
Total Dr = 5,50,000
Total Cr = 5,50,000 ✅ DR = CR
Example — Inverse Exchange Rate
If the exchange rate is entered as inverse (1 BDT = 0.0091 USD):
Entry in the form:
Amount In Currency: 5,000 ← in USD
Exchange Rate: 0.0091
Exchange Rate Is Inverse: Yes ← Checked
Base Amount computed:
Base Amount = 5,000 / 0.0091 = 5,49,450.55 (rounded to currency decimals)
What Happens If Exchange Rate Is 0
If Exchange Rate = 0 when a Currency is set, the system treats the amount as base currency — no conversion occurs. The Amount in Currency is used directly. This can materially misstate the GL.
Always verify the Exchange Rate is > 0 when using a foreign currency.
9. Sample Data & Output
Complete Sample — Migrating from Another System
Scenario: Your previous accounting system has the following balances as of July 1, 2026:
| Account | Type | Entity | Debit/Credit | Amount (BDT) |
|---|---|---|---|---|
| Cash at Bank | Asset | Bank ABC | Debit | 10,00,000 |
| Accounts Receivable | Asset | Customer ABC | Debit | 5,00,000 |
| Accounts Receivable | Asset | Customer DEF | Debit | 3,00,000 |
| Inventory (via Item form) | Asset | Widget-X | — | 15,00,000 |
| Fixed Assets (via FA form) | Asset | Machine-Z | — | 25,00,000 |
| Accounts Payable | Liability | Supplier XYZ | Credit | 4,00,000 |
| Bank Loan | Liability | Bank Loan | Credit | 20,00,000 |
| Capital Account | Equity | Owner's Capital | Credit | 30,00,000 |
| Retained Earnings | Equity | (auto-computed) | Credit | 4,00,000 (balancing) |
Entries to create using Opening Balance Entry form:
Entry 1 — Cash at Bank:
Account: Cash at Bank
Bank Account: Bank ABC
Debit: ✅
Amount: 10,00,000
Financial Year Start: 7/1/2026
Entry 2 — Accounts Receivable (Customer ABC):
Account: Accounts Receivable
Customer: ABC Trading
Debit: ✅
Amount: 5,00,000
Financial Year Start: 7/1/2026
Entry 3 — Accounts Receivable (Customer DEF):
Account: Accounts Receivable
Customer: DEF Corporation
Debit: ✅
Amount: 3,00,000
Financial Year Start: 7/1/2026
Entry 4 — Accounts Payable (Supplier XYZ):
Account: Accounts Payable
Supplier: XYZ Suppliers
Credit: ✅
Amount: 4,00,000
Financial Year Start: 7/1/2026
Entry 5 — Bank Loan:
Account: Bank Loan Payable (your liability account)
Credit: ✅
Amount: 20,00,000
Financial Year Start: 7/1/2026
Entry 6 — Capital Account:
Account: Capital Accounts
Capital Account: Owner's Capital
Credit: ✅
Amount: 30,00,000
Financial Year Start: 7/1/2026
Separately (not via OB Entry form):
- Inventory: Go to Inventory Item form for Widget-X → set OpeningInventoryQty = 1,000, OpeningInventoryCost = 15,00,000, OpeningInventoryDate = 7/1/2026
- Fixed Asset: Go to Fixed Asset form for Machine-Z → set OpeningBalanceCost = 25,00,000, OpeningBalanceDate = 7/1/2026
What the General Ledger Shows After Posting
Account Dr Cr
--------------------------------- ---------- ----------
Cash at Bank (Bank ABC) 10,00,000
Accounts Receivable (ABC) 5,00,000
Accounts Receivable (DEF) 3,00,000
Accounts Payable (XYZ) 4,00,000
Bank Loan Payable 20,00,000
Capital Account (Owner's Capital) 30,00,000
Retained Earnings 4,00,000 ← auto-computed
Inventory (Widget-X) 15,00,000
Fixed Assets at Cost (Machine-Z) 25,00,000
Fixed Assets Accum Depreciation 0
---------- ----------
Total 58,00,000 58,00,000 ✅ DR = CR
Balance Sheet After Posting
Assets:
Cash at Bank (Bank ABC) 10,00,000
Accounts Receivable (ABC) 5,00,000
Accounts Receivable (DEF) 3,00,000
Inventory (Widget-X) 15,00,000
Fixed Assets at Cost (Machine-Z) 25,00,000
Less: Accum. Depreciation 0
Total Assets 58,00,000
Liabilities:
Accounts Payable (XYZ) 4,00,000
Bank Loan Payable 20,00,000
Total Liabilities 24,00,000
Equity:
Capital Account (Owner's Capital) 30,00,000
Retained Earnings 4,00,000
Total Equity 34,00,000
Total Liabilities + Equity 58,00,000 ✅ A = L + E
Trial Balance After Posting
Account Debits Credits
Cash at Bank 10,00,000
Accounts Receivable 8,00,000
Inventory 15,00,000
Fixed Assets at Cost 25,00,000
Accounts Payable 4,00,000
Bank Loan Payable 20,00,000
Capital Account 30,00,000
Retained Earnings 4,00,000
---------- ----------
Total 58,00,000 58,00,000 ✅ DR = CR
10. Edge Cases & Null Handling
What Happens When Fields Are Blank
| Condition | Behavior |
|---|---|
| Account is blank | Entry is skipped entirely — no GL entry created |
| Account is set but entity does not exist in DB | Entry skipped — account resolves to null, continue |
| Amount is 0 | Entry skipped — if (obAmount == 0m) continue; |
| Debit/Credit not set | Amount defaults to positive (Dr) |
| FinancialYearStart is MinValue | Entry posts at year 0001 — breaks date-range reports |
| Customer blank (AR account) | AR entry has no customer link |
| Supplier blank (AP account) | AP entry has no supplier link |
| BankAccount blank (Cash account) | Cash entry has no bank link |
| Currency set but ExchangeRate = 0 | No conversion — raw Amount used as base |
| Currency not set | Base currency assumed, no conversion |
| Qty = 0 | Qty field is null on GL entry (not tracked) |
| Division blank | No division tracking on GL entries |
| Reference blank | No reference displayed |
| Description blank | View shows "-" |
| Lock date set and FinancialYearStart <= lock date | Entry rejected — 400 error with lock date message |
| P&L account selected | Not possible — the Account field only shows Balance Sheet accounts. P&L accounts are excluded from the autocomplete list per IAS 1 Section 35. |
| BS account selected | 2 entries created (with RE offset) |
| Cache miss on account type | System attempts reflection-based Singleton lookup; if that fails, entry skipped |
EntryDate vs FinancialYearStart
| Field | Used For | Not Used For |
|---|---|---|
| FinancialYearStart | ALL GL posting — date on the GL transaction | Display sorting |
| EntryDate | Display sorting in the list view | GL posting (completely ignored) |
This means the FinancialYearStart is the only date that matters for accounting. EntryDate is purely informational.
11. Lock Date Enforcement
If a Lock Date has been configured in Settings, the system prevents creating or editing Opening Balance Entries with a FinancialYearStart on or before the lock date:
Error: "No opening balance entry dated before lock date (6/30/2026) can be created or updated."
This ensures that locked accounting periods cannot be modified through opening balance entries.
12. Viewing Opening Balances in Reports
Opening Balances List View
Navigation: Settings > Opening Balance Entries
Columns displayed:
| Column | Source | Description |
|---|---|---|
| Account | Account field | The GL account name with code |
| Customer/Supplier/Bank | Entity field | Linked entity name |
| Quantity | Qty field | Quantity (for investments) |
| Financial Year Start | FinancialYearStart | The fiscal year date |
| Currency | Currency field | Foreign currency code (or "-") |
| Amount | Amount (or AmountInCurrency) | Shows foreign amount if set, else base |
| Type | DebitOrCredit | "Debit" or "Credit" |
| Description | Description | Optional notes |
Each row is clickable — opens the Opening Balance View showing full details.
Opening Balance View
Click any entry from the list to see the detail view showing: - Account name - Linked entity (Customer/Supplier/Bank/etc.) - Quantity (if any) - Financial Year Start date - Currency details (if foreign) - Debit or Credit amount - Exchange Rate (if foreign) - Entry Date - Description
How Opening Balances Appear in Financial Reports
| Report | How Opening Balances Appear |
|---|---|
| Balance Sheet | BS account opening balances appear as part of each account's cumulative balance. They are not separately identifiable — they merge with other transactions. |
| Trial Balance | Same as Balance Sheet — the OB amounts are included in each account's total DR/CR. |
| Profit & Loss | P&L opening balances cannot be entered via this form — only Balance Sheet accounts are available. To seed a P&L account, use a Journal Entry instead (see Section 7). |
| General Ledger Transactions | OB entries have a special "Opening Balance Entry" flag. They can be filtered by this flag if needed. |
| Inventory Reports | Inventory opening balances come from the Inventory Item form, not from Opening Balance Entries. |
| Fixed Asset Register | FA opening balances come from the Fixed Asset form, not from Opening Balance Entries. |
§. Accounting Regulation Validation
Compliance Matrix
| Standard | Requirement | How the System Satisfies It |
|---|---|---|
| IAS 1 Section 35 | P&L accounts cannot have carried-forward opening balances — they start at zero each period | ✅ The Account field is restricted to BalanceSheetAccount — P&L accounts are excluded from the form, preventing users from accidentally creating unbalanced or double-counted entries. |
| ASC 220-10-45 | Comprehensive income cannot include prior-period P&L balances | ✅ P&L accounts excluded from the form. Users who need to seed a P&L account must use a Journal Entry with a clear offset to Retained Earnings (see Section 7). |
| Double-Entry Bookkeeping | Every debit must have a corresponding credit | ✅ Balance Sheet accounts get 2 entries (target + RE). The system's balancing entry guarantees DR = CR for all BS accounts. |
| Accounting Equation | Assets = Liabilities + Equity | ✅ The RE offset ensures the BS stays balanced. All sample data verifies A = L + E. |
| IAS 21 | Foreign currency transactions translated at spot rate | ✅ Currency conversion using ExchangeRate with direct/inverse support. Dual rounding (FC then base currency). |
| IFRS 9 | Financial assets/liabilities recognized at fair value | ✅ Opening balances are recorded at historical cost (the amount entered by the user). |
| Materiality | Minor differences are acceptable | ✅ All entries are double-entry for Balance Sheet accounts. P&L accounts are excluded from the form to prevent accounting errors. |
| Lock Date / Period Close | Locked periods cannot be modified | ✅ FinancialYearStart is checked against LockDate. Entries in locked periods are rejected. |
| Audit Trail | Changes must be trackable | ✅ Each Opening Balance Entry has a CreatedAt timestamp (immutable), plus the system's standard Change tracking for all objects. |
| Cut-off / Period Allocation | Transactions must be recorded in the correct period | ✅ FinancialYearStart determines the period. Only this date is used for GL posting. |
Why DR = CR Is Guaranteed for Balance Sheet Accounts
For every Balance Sheet account opening balance:
Step 1: Dr/Cr TargetAccount Amount (user's entry)
Step 2: Cr/Dr RetainedEarnings Amount × -1 (automatic offset)
Result: Total Dr = Total Cr ✅ every time
The offset entry always uses the exact same amount (opposite sign), so DR = CR is guaranteed by construction.
Why P&L Accounts Are Excluded from the Form
The Opening Balance Entry form restricts the Account field to Balance Sheet accounts only. This is a deliberate design decision based on:
- IAS 1 Section 35: P&L accounts cannot have carried-forward opening balances — they start each period at zero
- ASC 220-10-45: Comprehensive income cannot include prior-period P&L balances