Expense report
What the numbers say
Written from this period's figures. Every line is a figure you can click through to.
Needs an explanation
Expense by period
Each period on its own, by category. The line is the four-period moving average. Click a bar to open that period.
Where the change came from
Comparison to this period, by sub-category. Click a bar to drill in.
Where the money goes, year to date
Area is the year-to-date amount. Click a block to open it.
Concentration: the ledgers that matter
Largest ledgers year to date, with the cumulative share. These are the ones to upload ledgers for first.
Cost structure against revenue
Year to date at each period end, as a percentage of revenue to date.
Against budget
Variance analysis
Red is expense above the comparison, blue is below it. Click a name to drill down. Click ▸ to open a group.
Movement by period
From the trial balances. The line is the four-period moving average.
Inside this
Click a line to go one level deeper.
Inside the ledger
Period grid
Every period side by side. Shading shows how large each period is against that line's own biggest period: orange for debits, blue for credits (reversals). Click a line to drill down.
Upload expense ledgers
Odoo → Accounting → Reporting → General Ledger (or Journal Items). Pick the expense accounts, set the dates from 1 January, and copy or export. The vendor, month, material, project and entry views are built from these lines. Staff only.
Paste the rows instead
Ledger coverage against the trial balance
Account codes for the ledgers still to upload (paste into Odoo's account filter)
Financial statements
Eraf Industrial Company Limited
Behind this line
| Code | Account | TB category | Balance |
|---|
Profit and loss
Year to date, with the period's own movement beside it.
| This period | Year to date | Comparative |
|---|
How revenue becomes profit
Year to date.
Balance sheet
Position at the selected period.
| Amount | Comparative |
|---|
Where the money sits
Assets against how they are funded.
Where the expense goes
Largest expense lines, year to date.
What the company owns
Assets by line, at the period end.
Reporting package freeze this period exactly as issued
Printable reporting documents
The statements as one paper document you can read, adjust the heading of, and print or save as PDF.
Review centre
Every control, every period, and what stands between this period and an issued set of statements.
Gates to issue
Each gate is measured from the data. None is ticked by hand.
Packages for this period
Frozen sets of statements, newest first.
Controls across all periods
Green passes, red is an error, amber is a warning. Select a cell to open that period's Verification.
Ratios & trends
How the business is doing, period by period, worked out from the statements.
Margins
Profit as a share of revenue.
Liquidity
Can the company meet what it owes within the year?
Working capital cycle
Days to collect, hold stock and pay suppliers.
Funding
How much is owed for each riyal of equity.
Trend
Points to look at
Plain tests on the latest period. They point; they do not conclude.
All ratios by period
Profit measures are cumulative from 1 January. Days measures use the days elapsed in the year to that date.
Invoice inbox
Supplier invoices are added here, read into fields, checked against the rules, and approved by a person. The portal records and checks; it does not post or pay.
Daily entry control
Each day's entries are loaded from Odoo, checked automatically, reviewed here, and issues are assigned to an owner and followed to resolution.
Receivables
Load the ledgers
Upload the transaction-wise ledger of the receivable, payable and advance accounts, all dates up to the as-at date. In Odoo use Journal Items, filter the accounts, show up to the full number of rows, and copy the table (or export it if you can). Two layouts are read: the Odoo General Ledger report exported to Excel (Date, Communication, Partner, Analytic Account, Debit, Credit), and the Journal Items list (Date, Journal Entry, Account, Partner, Label, Debit, Credit, and Matching if shown). Select several files together to cover several years. The system finds the open items itself. Nothing needs preparing by hand.
As at (blank = latest date in the file)
Paste the rows instead
Which accounts belong to which schedule
One per line: account code (or the start of it), schedule. The longest match wins. Schedules: Receivables, Payables, Supplier advances, Customer advances, Land purchase advance.
Netting and unusual balances
Balances on the wrong side, and partners that appear in more than one schedule so that debits and credits can be set off. Built from the latest saved upload of Receivables, Payables and Advances.
Related parties
Balances with related parties, worked out from the trial balance: opening, debits, credits and closing.
Matrix
Debit balances are positive, credit balances negative. “Adjustments” are those posted in the portal; “Final” is what the statements use.
Points to look at
Ledger analysis
Upload the related-party ledgers (Odoo export, posted entries, CSV). The file is read in your browser and is not stored. Columns used: Date, Account code, Partner, Label, Reference, Debit, Credit, and if present Journal, Entry, Created on, Created by.
Zakat computation
Follows the structure of the zakat working for 2025. Change the white boxes; everything else is calculated.
Computation
Inputs
Adjustments to net profit
The 19 standard adjustments. Enter the amount added back; leave blank where there is none.
Lender covenants
No covenants are set for ERAF at present. Add one when the lender terms are known; each is tested against every period.
Covenants
Compliance by period
Budget and forecast
A general template. Enter the annual budget for each line; actuals are compared pro rata by days.
Budget against actual
Enter the full-year budget as the line appears in the statement of profit or loss (revenue positive, costs positive). The forecast is the actual so far, projected at the same daily rate to 31 December.
Bank reconciliation
Every bank account, proved against the bank's own statement.
Prepare a reconciliation
Drop in the bank's statement and the ledger for the same account and period. The portal works out each bank's layout for itself, including the row order and which way round the debits and credits run, then matches the two sides and shows you what is left.
1. Bank statement — as the bank exports it, Excel or CSV.
or drag it onto this box
2. General ledger — the Odoo export for this bank account.
or drag it onto this box
Reconciliations
Choose a row to see the reconciliation statement, how every line was matched, and what is still outstanding.
| Account | Period | Status | Per ledger | Per bank | Unexplained | Open | Explained |
|---|
Reconciliation
| Reconciliation statement | SAR |
|---|
How many lines each side carried, and how they were accounted for.
| Matched | Ledger | Bank |
|---|
Differences already explained
The same money, recorded differently by the bank and by the ledger. These are not exceptions, but the ones with a residual are worth an eye.
| Kind | What it is | Ledger | Bank | Residual | Lines |
|---|
Outstanding items
Everything neither side can explain, oldest first. These are what to chase, and each one can be assigned and noted.
| Date | Age | Side | Description | Amount | Status | Assigned to |
|---|
Carried forward
Still open on the most recent reconciliation for each account. Start next month's work here.
| Account | Date | Age | Description | Amount | Status |
|---|
Journal entries
Every posting behind every figure.
Not switched on yet needs the general ledger
This is the report that ends the "where did that number come from" conversation. Click any expense figure and land on the postings that make it up, each with its voucher, date, vendor, project tag and who posted it.
To switch it on: a general ledger export from Odoo for the same period, with account code, date, voucher number, description, debit, credit and the analytic tag. Send one and this becomes real in the same way the expense report did.
Cash flow & changes in equity
Closing checklist
Every balance sheet ledger, the schedule behind it, and what is still needed before it can be called closed.
Supporting schedules
Fixed asset register
Notes to the accounts
Verification
What ApexOne checked, what it found, and what is still open.
Statement review controls
Loading…
| Check | Severity | Found | Status |
|---|
Check pack
Run automatically against every trial balance as it is loaded. Every line must pass before a period is published to the client.
| Check | Result | Status |
|---|
Click any line to see exactly what is behind it and fix it from there.
Movements awaiting an explanation
Variances past the threshold at the selected period. These are the questions ApexOne puts to the client each period.
| Ledger | Category | Change | % |
|---|
Case management being built
The workflow around those findings.
This needs two more tables and an email service wired in. The checks and findings above are already live - this adds the ownership and chasing around them.
Payroll
Cost, headcount and movement, month by month.
Not switched on yet needs the payroll sheet
Payroll is the largest controllable cost in most businesses and the one a CFO is asked about most. Because salaries all sit under one analytic tag in Odoo, this report is built from the monthly payroll sheet rather than the ledger, with the ledger used to prove the total agrees.
To switch it on: a monthly payroll sheet with employee number, name, department, join and leave dates, basic, allowances, overtime and employer costs - plus the salary ledger for the same month. Two months is enough to prove the comparison works.
From trial balance to statements
The steps, measured from your data. Each one opens the screen that finishes it.
Upload
ApexOne staff only. The client never sees this.
Backup of all portal data
Saves every table (trial balances, mappings, closing checklist, sign-offs, expense uploads, notes) into one file on this computer. Admin only. Take one before any big change, and at least once a week. Keep the file somewhere safe: it holds the client's figures.
Load a trial balance
Export from Odoo for 1 January to the new closing date, then drop the file here. Excel or CSV, exactly as Odoo gives it.
- In Odoo open Accounting → Reporting → Trial Balance. Set the dates from 1 January to the closing date and include draft entries if you want them counted.
- Export to XLSX. Do not edit the file: the portal reads the account code from the start of the account name.
- Drop the file below, check the columns it found, name the period and press Load.
Shows the columns and layout the portal expects.
or drag it onto this box
Columns found in the file. Check each one and change any that were matched wrongly. Leave a column as not in this file if the export does not have it.
Name the period and give its dates.
New accounts to place
Accounts this portal has not seen before. Each one is proposed a statement line with the reason, and you can put it anywhere in the chart of accounts. Their figures are kept out of every total until you place them, so nothing is reported wrongly in the meantime.
| Code | Account | Balance | What it looks like | Place it on |
|---|
Periods loaded
Everything the portal is reporting on, newest first.
| Period | Covers | Closing date | Expense |
|---|
Removes every loaded period and what hangs on it: trial balance lines, adjustments, cash-flow items, fixed-asset transfers, packages and reconciliation entries. A copy of all of it is first saved in a protected archive so it can be restored. Your account mapping, settings and audited comparatives are kept.
Users
Admin only. Who can sign in, and what each person may do.
Adjustments
Audit and management entries posted on top of the Odoo trial balance, such as reclassifications between accounts. Every entry must balance. Once posted, every statement, note and total includes it from that period onward. The uploaded Odoo figures are never changed, and a wrong entry is voided rather than deleted.
Allocate payroll between general and administrative and cost of sales
Payroll accounts stay on General and administrative as mapped. Choose the accounts and the share that belongs to cost of sales; the portal posts a balanced entry you can review and void below. Percentages apply to the period's year-to-date balance when you post, so re-post after a new trial balance.
| Account | Year to date | Moves to cost of sales |
|---|
New entry
| Account | Debit | Credit |
|---|
Posted entries
Notes & policies
The wording that goes with the numbers: the accounting framework, the accounting policies and the narrative notes. Edit them here like a document. Every save is kept, and each text carries a status so a draft is never mistaken for an approved one.
Choose a text on the left, or add a new one.
Earlier versions
Account mapping
Account roles
A role says what an account is for the supporting schedules: accumulated depreciation, the end of service provision, accrued interest, and so on. Schedules find their accounts by role, never by position, so inserting or renaming an account cannot break them. The figures are the period's gross debit and credit movement for the accounts holding each role, which is what the schedules are built from. Roles change no statement total.
Where each account sits
Change any mapping here. Choosing a line shows you what it would do and anything that looks wrong about it; nothing is saved until you confirm. Once confirmed, every statement, chart and total follows immediately.
The note component is the part of that line the account belongs to, and it is what the note prints. It changes no total — the components of a line always add up to the line — so it saves as soon as you choose it. Components are built from the trial balance sub-categories and you can add your own.
| Account | Statement line (chart of accounts) | Note component | Primary | Adjustment | Final | Prior period |
|---|
Where ERAF’s 2025 grouping disagrees with the portal
Each of these is an accounting judgement, so nothing is changed automatically. The balance is shown as the trial balance carries it: a debit is positive, a credit is negative.
| Code | Account | Balance | On now | 2025 grouping says |
|---|

