← Easy Accounts today, plus daily
UNCTAD · Easy Accounts Uganda · lean specification · 01 of 03

Easy Accounts today (Uganda, legacy): what a person sees and does

GOOD signed by the product owner and the auditor · 25-09-2026

Field Value
What this is Functional spec of the Easy Accounts site Uganda's users have today, easyaccounts.go.ug: the monthly-only system.
Perspectives Owner (a business owner with an account) and Administrator (configures the instance).
Sources Legacy code rules (migration/06, v2.19.2 at b39af29, rules R1–R22), the main source; B audit (spec-audit/B-docs-vs-legacy.md, cited as B-W/S/C/N); PO facts about the dump (migration/09 Part 0, F1–F15); migration mapping (migration-work/mapping.md); captures of the live site, 24-09-2026 (design/compare/*-legacy.png, ~/Desktop/easyaccounts/). The legacy dump of 22-07-2026 was read for configuration only (the active questionnaire's labels, keys and formulas), through B, 06, mapping.md and read-only queries. The counts quoted are aggregates. No person-level record was read.
Date 25-09-2026
State GOOD — signed by zelda-producto-2 (product) and argos-auditor-2 (truth vs legacy), 25-09-2026
Examples Invented: "Ada Example Bakery", January 2026, cash sales 941,000, credit sales 628,400.

Conclusion. Easy Accounts is a monthly questionnaire that turns into financial statements. Once a month, an owner types about 50 figures for their business into one form: sales, purchases, expenses, cash, debts and assets. The site then shows them an income statement, a balance sheet, a break-even figure, a one-line cash flow and ten ratios, all computed from that month's figures. A second tab shows a presumptive-tax estimate and a guide to registering a business. There is no daily bookkeeping, no ledger, no sharing with an institution and no multi-person business in use (B-W2, B-C20, B-S7). In practice, one person = one set of books: figures are kept per login. The code has businesses and advisers, but no one in Uganda ever created one (B-W2, B-W17). The administrator configures everything through editors: the questionnaire, the statement lines, the formulas, the tax bands, the texts and translations, and who sees which tab. Several calculations carry known defects, marked legacy defect below.

1 · The public page and signing in (owner)

What it is for. It explains the tool and lets a person register or sign in.

What the person sees (capture landing-legacy.png):

Signing in and signing up happen on Keycloak, not in Easy Accounts (B-C31, B-S3):

What it produces. A signed-in session. (Which page opens first was not walked.)

Numbers today. 430 accounts exist. 333 people ever opened the app, and 169 typed a non-zero figure (B-W1).

2 · The frame every signed-in page shares (owner)

3 · Dashboard (owner)

What it is for. A picture of the business over time.

What the person sees. Four charts, titled "Cash in hand and bank (Cashflow)", "Operating expenses", "Your monthly profit (Net income)" and "What customers owe you". A year and month picker (B-C16). No capture of the legacy dashboard exists (B-U3), so its layout is not described here.

Rules.

4 · Transactions: the monthly questionnaire (owner)

What it is for. The one place the owner types figures. Everything else is computed from it.

What the person does, step by step (capture transactions-legacy.png):

  1. Opens Transactions.
  2. Picks a month and a year at the top left. The questionnaire "Micro and Small Enterprises accounting" is already chosen at the top right. It is the only one offered to Uganda's owners (B-C2, 09 F8).
  3. Types figures line by line, one amount per line, in UGX:
    • Totals in bold recompute as they type.
    • A lightbulb beside a total shows its formula.
    • An (i) mark opens help.
  4. Leaves. There is no Save or Submit button: each figure is stored as it is typed (06 R7).
  5. Comes back next month and repeats with the next month selected.

Beside the questionnaire name are three buttons: a blue settings button (not walked), print and CSV (captures).

The form, section by section (live site, 24-09-2026):

Section Lines the owner types Computed lines
SALES Cash sales · Credit sales Sales of the month
COST OF GOODS SOLD (PURCHASES) Opening Inventory (stock) · Cash purchases · Credit purchases Closing Inventory (stock) · Cost of goods sold
OPERATING EXPENSES Salaries · Travel costs · Rent · Insurance · Repairs and maintenance · Office supplies · Advertising and marketing · Electricity · Water · Phone and Internet · Fuel · Municipal fees · Depreciation · Staff Welfare · Bad debt written off · Professional fees · Subscription fees · Other Operating Expenses Total Operating Expenses
FINANCIAL EXPENSES Interest expense —
CASH AND BANKS Cash at hand · Cash at banks Total Cash
RECEIVABLES Payment from debtors · Other Receivables Credit Sales from Customers · Total Accounts Receivable
INVENTORY Inventory of goods —
LIABILITIES Bank Loans < 12 months · With interest · Interest free (e.g., loans from friends and family) · Payments to Suppliers · Commissions due · Taxes and fees due · Pension Funds due · Accrued Expenses · Bank Loans > 12 months · Non-Bank Loans > 12 months Non-Bank Loans < 12 months · Total Loans Payable < 12 months · Credit Purchases from Suppliers · Total Trade Payables · Total Current Payables · Total Loans > 12 months
FIXED ASSETS Furniture · Machinery · Equipment · Vehicles · Land · Building · Intangible Assets Total Fixed Assets
TAXES Tax expenses —

The live site differs from the export of 22-07-2026. The export has 13 operating expenses and 6 fixed assets. The live site has five more expense lines and "Intangible Assets", and relabels "Interest Paid" and "Total Accounts Payable" (B-S1). Closing Inventory (stock) was a typed line in the export but is computed on the live site, and its live formula is not in the export. Any carry-over needs a fresh export.

Rules, with the invented January example. Ada Example Bakery types cash sales 941,000 and credit sales 628,400.

What it produces. The month's typed figures. Every screen below reads them.

Sharing. Each month has an on/off "share" flag for an institution. No one ever switched it on, and no institution is configured (B-S7, B-C23).

5 · Financial statements (owner)

What it is for. Reading the month's result and position without accounting knowledge.

What the person does. Opens Financial statements, picks the month and year, and reads. Every line has a lightbulb (its formula) and an (i) (help). Nothing is typed here (capture financial-statements-legacy.png).

What they see, top to bottom (active set, 74 lines; B-C6):

Block Lines How it is computed
Income Statement – summary Revenue1 · (−) Expenses · (=) Net income Revenue1 = sales of the month. Expenses = cost of goods sold + the export's 13 operating expense lines, named one by one + interest + tax expenses (export formula; whether it picks up the 5 lines added live is not in the export). Net income = Revenue1 − Expenses (after tax).
Balance Sheet – summary Current Assets · Fixed Assets · Total Assets · Current Liability · Long Term Liability · Equity · Total Liability and Equity Current assets = cash + banks + credit sales + other receivables + inventory − payment from debtors. Equity is the balancing figure (total assets − liabilities), so this summary always balances. Its Current Liability leaves out trade payables and accrued expenses (D1).
Break-even Break-Even Operating expenses ÷ (1 − cost of goods sold ÷ sales). Financial expenses are left out (B-W11). A non-finite result shows 0.
Cash flow Cash Flow (one line) Net income + interest + Paymenttoproviders (always 0) − receivables. Legacy defect: this is not a cash movement and reads no cash line (B-W9).
Income Statement – detailed (+) Sales · (−) Cost of goods sold · (=) Gross Profit · (−) Operating expenses and Financial Expenses · (=) Profit before tax · (−) Tax Expenses · Net Income Top to bottom, as labelled.
Balance Sheet – detailed Current assets (cash, receivables, inventory) · Fixed term assets ("Furniture, Machinery and Equipment"; vehicles; "Land and Building"; total) · Current liabilities (loans < 12 months, commissions, trade payables, taxes and fees, accrued expenses, pension funds) · Non-current liabilities · Equity (owner's equity, net income) · Totals Owner's equity = total assets − total liabilities − net income after tax. Total equity = owner's equity + a pre-tax net income. (D12) "Furniture, Machinery and Equipment" shows the furniture line only, and "Land and Building" the land line only; machinery, equipment and building count only in the total, so the lines do not add up to it.
Financial Analysis – ratios (10, in 5 groups) Activity: inventory turnover, receivables turnover · Liquidity: current ratio, acid test · Debt: debt on assets, debt-equity · Profitability: ROA %, ROE % · Others: working capital, net profit margin % Each is a formula on the lines above (B-C7). With no liabilities, the current ratio shows 0 (B-C10).

Legacy defects on this page:

What it produces. A read-only set of statements for the month. The same three buttons as on Transactions sit beside the questionnaire name: settings, print (PDF, with page breaks set per line by the administrator; 06 §1.2) and CSV. Getting data out: print and CSV; what the CSV holds was not walked.

6 · Formalisation & Access to finance (owner)

What it is for. Estimating the presumptive income tax, and learning how to formalise and where to find finance. The page is at /taxes, and one page shows all five entries (B-W24).

What the person sees and does.

  1. Two presumptive-tax rules, computed, per year (B-C11, 09 F7). They read the year's sales ("Revenue1" summed over the months typed) and show:
    • Without records: a fixed amount by band. Up to 10,000,000 → 0 · up to 30,000,000 → 80,000 · up to 50,000,000 → 200,000 · up to 80,000,000 → 400,000 · up to 150,000,000 → 900,000.
    • With records: the same bands with a rate on the part above the band floor, plus a fixed amount. 0.4 % above 10M · 0.5 % above 30M + 80,000 · 0.6 % above 50M + 180,000 · 0.7 % above 80M + 360,000.
    • Nothing is filed or sent; it is an estimate. No band fits → 0 (06 R12 step 6). Legacy defect (D11): above 150,000,000 the estimate shows 0, which reads as "you owe nothing", instead of saying the standard income tax applies.
  2. "Step by step guide to formalizing a business in Uganda": Step 1, registration with URSB · Step 2, registration with URA (TIN) · Step 3, trading licence with the local authority, for example KCCA (B-C12). Legacy defect (D9, text): "URBS" for URSB, and "Uganda Revenue Agency" (B-C13).
  3. Access to finance and a schedule of six financing programmes in one table, with requirements and contacts (B-C14). English only.

Rules.

What it produces. Two tax estimates per year and reference content. Nothing is stored.

7 · Profile (owner)

There is no profile page in Uganda's configuration (B-C30; the captured /profile/ answered "not found", B-U1). The name and email come from Keycloak. The name menu's contents were not walked; signing out ends the Keycloak session. The language choice lives in the browser, not on the person (B-C33).

8 · The administrator's side

The administrator is a Keycloak account with the admin role (06 R3). Today there are 10 admins in the app, 5 with the Keycloak sysadmin role, 11 people in all (B-N4). They see the same tabs as an owner, plus the admin menus. Every change they make is journaled with its before and after (B-C28).

Area What the administrator does Rules
Questionnaire and statements editor (the template editor, capture template-editor-legacy.png) Sees the questionnaire (left) and the statement lines (right) as trees of sections and lines, with their order numbers. Adds, edits, reorders or removes a line. Edits one line in a dialog (capture edit-question-modal-legacy.png): title per language (Luganda / English tabs), type (input, formula, percentage, group; statement lines: linked, formula, group), math prefix ((+), (−), (=), display only), bold style, total period type (sum / last / average), print page break, key, show decimals, format as percentage, and a formula built by searching lines and operators. Each term can read another month through a "Period(s)" offset (capture; 06 R9); the active questionnaire uses none (B-W7). Can copy a whole questionnaire (B-C25). Legacy defect (D10): the key joins a line to its stored figures and to every formula. Renaming a key breaks formulas silently (06 R11); keys are generated from the name and are not checked by the server. Formulas are checked only by a trial run that must not be "not a number" (06 R9). Several live keys are Spanish (sueldos, alquileres…) and hold most of the data (B-N23).
Chart of accounts One instance-wide chart, admin-only, of 71 accounts in four levels (B-C29). Owners never see it (B-C36). Only 16 accounts are linked to the questionnaire, 4 of them deleted; 34 of 59 lines have no account (B-C29). The chart plays no part in the statements.
Taxes Defines each tax: its base formula, its bands (lower and upper limit, both inclusive) and one formula per band, and its period (annual, quarterly, monthly). The three content pages of §6 are also "taxes", with text and no formula (09 F6). The engine takes the first band that matches (06 R12). The "without records" rule stores duplicate band rows (B-C11).
Site texts Homepage (title, sentence, list, buttons, tiles, top notice), footer (disclaimer, email, phone, show/hide), footer logos, instance name and logo, Google Analytics tag (B-C15, B-C17, B-N18, B-N21). Every text is a translation row per language (06 R16). A top notice exists and is switched off (B-N18).
Languages and translations Turns languages on and off. Edits any label in any language. English is the default. Luganda is on, with 10 non-empty strings (B-W5). French, Spanish and an unnamed "Arabic" row are off (B-C18).
Help Edits the two tutorial sets and binds a tutorial to a screen or line (B-C19). —
Dashboard charts Picks which charts show and which figure each plots (B-C16, B-N16). —
Who sees what (/manage/user-permissions) Turns feature switches on or off per person: 16 switches, such as taxes, accounting and registrations (B-W15). Switches narrow screens; they are not evidence of use (B-N20).

Not used in Uganda, although the code has them (B-C20, B-W13): daily accounting ("writings"), contacts, registrations held, benefits, the wallet, businesses with several people, and advisers. All hold 0 rows.

9 · Legacy defects, in one list

# Defect Where Source
D1 A key named in a formula but defined nowhere counts as 0, silently. "Total Accounts Payable" and the summary balance sheet's "Current Liability" leave out trade payables and accrued expenses; the detailed balance sheet includes both, so the two current-liability figures differ §4, §5 B-N7; export formulas
D2 The detailed balance sheet balances only when tax expenses are 0 §5 B-N12, N13
D3 The one-line cash flow is not a cash movement; the "Cash in hand and bank" chart plots it §3, §5 B-W9, W10
D4 Opening a month pre-fills 0 everywhere; a 0 cannot be told from "not answered" §4 B-W16, N9
D5 Year totals sum month-end balances §4 B-W6
D6 Receivables and payables do not carry over from month to month §4, §5 B-C4, N14
D7 Four key-less input lines sit in the definition with no section; they never show and never hold a value §4 B-N6
D8 Any formula error shows 0, never a warning §4, §5 B-C37
D9 Text typos: "URBS", "Uganda Revenue Agency" §6 B-C13
D10 Renaming a key breaks every formula that uses it, silently §8 06 R11
D11 Above 150,000,000 of annual sales, the presumptive estimate shows 0 instead of saying the standard income tax applies §6 06 R12
D12 Detailed balance sheet: "Furniture, Machinery and Equipment" = furniture only; "Land and Building" = land only; the lines do not add up to Total Fixed Assets §5 export formulas

Not walked for this document: the dashboard (no capture), the PDF and CSV output, the blue settings button, which admin menu (Settings or System) holds each editor, and the [ ] switch.

Nelson Pérez · nelson.perez@unctad.orgWorking draft · 25 Sep 2026 · rendered from spec-lean/01-easy-accounts-today.md