Each report is served off the existing posted-ledger data (no schema changes) and respects the existing Main/branch scope selector, same as every other module. Balance Sheet computes a live "Current Year Earnings" equity line from unclosed P&L, since there's no year-end close step yet. Backed by a new integration test suite that verifies the trial balance and balance sheet stay in balance under real posted AR/AP activity, that P&L correctly scopes income to its period, and that aging buckets customers/suppliers by days overdue. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JWqiUSojMLUoN7mrJqdEbN
54 lines
2.7 KiB
Markdown
54 lines
2.7 KiB
Markdown
# Phase 6 — Reporting Suite: Manual Test Checklist
|
||
|
||
Five reports are now live under **Reports Centre**, each reachable directly from its card
|
||
(the "Coming soon" reports remain placeholders). Every report respects the branch switcher in
|
||
the top bar — Main gives a consolidated view, a single branch scopes to just that branch's
|
||
posted activity.
|
||
|
||
## 1. Trial Balance (`/reports/trial-balance`)
|
||
|
||
- [ ] Pick an "As at" date after some posted activity — accounts with posted movement appear,
|
||
sorted by account code
|
||
- [ ] The "Balanced" / "Out of balance" chip in the header reads **Balanced** (it always should
|
||
— this is a structural invariant of double-entry posting, not something that can drift)
|
||
- [ ] Total Debit column sum equals Total Credit column sum in the footer row
|
||
- [ ] Switching the branch selector to a single branch narrows the accounts/amounts shown to
|
||
that branch's postings only
|
||
|
||
## 2. Profit & Loss Statement (`/reports/profit-and-loss`)
|
||
|
||
- [ ] Defaults to year-to-date on load
|
||
- [ ] Narrowing the date range changes which invoices/postings are included (an invoice dated
|
||
outside the range should disappear from its account's line)
|
||
- [ ] Net Profit = Total Income − Total Expense, shown in green when positive / red when
|
||
negative
|
||
- [ ] Income/Expense accounts with zero movement in the period are omitted, not shown as zero
|
||
|
||
## 3. Balance Sheet (`/reports/balance-sheet`)
|
||
|
||
- [ ] Assets, Liabilities, and Equity sections all populate
|
||
- [ ] "Current Year Earnings" appears as a computed equity line (no account code) equal to
|
||
this fiscal year's Profit & Loss net profit up to the As-at date — this app has no
|
||
year-end close step, so this is how the balance sheet stays real-time-balanced
|
||
- [ ] Header chip reads **Balanced** (Total Assets = Total Liabilities + Total Equity)
|
||
|
||
## 4. Aged Receivables (`/reports/aged-receivables`)
|
||
|
||
- [ ] Only customers with an outstanding (unpaid/partially paid) posted invoice appear
|
||
- [ ] An overdue invoice lands in the correct bucket (Current / 1–30 / 31–60 / 61–90 / 90+)
|
||
based on days between its due date and the As-at date
|
||
- [ ] Clicking a customer name navigates to that customer's detail page
|
||
- [ ] Footer row sums match the column totals
|
||
|
||
## 5. Aged Payables (`/reports/aged-payables`)
|
||
|
||
- [ ] Same checks as Aged Receivables, mirrored for suppliers — clicking a supplier name
|
||
navigates to the supplier's detail page
|
||
|
||
## Regression
|
||
|
||
- [ ] General Ledger card in Reports Centre still links to the existing Journal Entries page
|
||
(its "By Account" tab is the account drill-down report)
|
||
- [ ] Reports Centre's still-unbuilt cards (Customer Statement, Payment Run, Budget vs Actual,
|
||
Branch Performance) remain visibly disabled ("Coming soon")
|