Files
cross-financial-management/PHASE_1.5_TEST_PLAN.md
T
Joshua OosthuizenandClaude Sonnet 5 4acbc03b35 Initial commit: multi-company financial management system
Root company app (src/, client/) — GL foundation, AR, and AP:
- Segmented Chart of Accounts (Sage 300-style), double-entry PostingService with
  three-layer balance enforcement (app validation, CHECK constraints, deferred
  DB trigger), gap-free document numbering, RBAC with branch restrictions.
- Accounts Receivable: Customers, Invoices, Credit Notes, Receipts with
  allocation, all posting through PostingService.
- Accounts Payable: Suppliers, Supplier Invoices, Debit Notes, Payments with
  allocation, mirroring AR's posting pattern.
- Tax Codes shared between AR and AP.
- Company-app login is a token handoff from the Account Manager (RS256,
  single-use, company-scoped) rather than a local password.
- Frontend reskinned to the approved mockup: navy sidebar, dashboard, tree-view
  Chart of Accounts, Customer/Supplier 360 pages.

Account Manager (manager/, manager/client/) — central login gateway:
- Password + TOTP 2FA + Google/Microsoft OAuth, company picker, and the RS256
  handoff token issuance that the company app verifies.

Covered by unit + integration tests against a real Postgres database (GL
balance invariants, AR/AP posting correctness and allocation limits, the full
handoff exchange including replay/cross-company/expiry/forgery rejection).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Tq2DbEvzHzs13jDFhLaX44
2026-09-03 13:27:19 +02:00

154 lines
8.2 KiB
Markdown

# Phase 1.5 — Visual Redesign: Manual Test Checklist
Reskinned the company-app frontend to match `temp/mockups/Cross Financial Manage Mockup.png`
(navy sidebar, blue accent, card-based content) and added three new screens (Dashboard,
Chart of Accounts tree view, Reports Centre shell, GL account drill-down). No backend or
schema changes in this phase — everything below should work against data you already have.
Tick each box as you go. If something fails, note what you saw under it — that's what I'll fix.
## 0. Start everything
```
# Terminal 1 — company API
cd D:\Webstorm\cross-financial-management
npm run dev # http://localhost:5000
# Terminal 2 — company frontend
cd D:\Webstorm\cross-financial-management\client
npm run dev # http://localhost:5173
# Terminal 3 — Manager API
cd D:\Webstorm\cross-financial-management\manager
npm run dev # http://localhost:5100
# Terminal 4 — Manager frontend
cd D:\Webstorm\cross-financial-management\manager\client
npm run dev # http://localhost:5174
```
Manager login: `joosth2002@icloud.com` / `ChangeMe123!` (change this password once you're
through testing — see `manager/SETUP.md`).
- [ ] All four `npm run dev` terminals started with no errors
## 1. Sign-in / handoff flow (regression — not new, but the entry point to everything below)
- [ ] Open `http://localhost:5174`, sign in with the Manager credentials above
- [ ] Company picker shows "Demo Company"
- [ ] Clicking it redirects to `http://localhost:5173` and you land **already signed in** —
no login form appears in the company app
- [ ] Refreshing the company app keeps you signed in (session persists)
- [ ] Signing out (avatar menu, top-right, in the company app) redirects you back to the
Manager rather than a dead `/login` page
## 2. Sidebar & top bar (new look)
- [ ] Left sidebar renders navy with the "Cross Financial / MANAGER" logo mark at the top
- [ ] Nav items are grouped under **General Ledger**, **Reports**, **Administration** with a
standalone **Dashboard** link above them
- [ ] Each nav item has an icon; the currently active page is highlighted (lighter navy pill,
blue icon, white text)
- [ ] Clicking every visible nav item navigates correctly and updates the highlight
- [ ] Top bar (white, right-aligned) shows the Branch switcher and your avatar with initials
- [ ] Avatar menu shows your name + email and a working **Sign out**
- [ ] Nav items you don't have permission for are hidden (test with a restricted user if you
have one, or trust that `hasPermission` filtering is unchanged from before)
## 3. Dashboard (new — this is now the `/` landing page)
- [ ] Landing on `http://localhost:5173/` after sign-in shows the new Dashboard, not the
journal entry list
- [ ] Four KPI tiles render: **Posted Entries**, **Draft Entries**, **Total Posted Movement**,
**Total Entries** — numbers should match what you'd expect from your seeded/test data
- [ ] "Posted Movement by Account Type" bar list appears once you have at least one posted
entry, with one bar per account type that has activity (ASSET/LIABILITY/etc.), and the
relative bar widths look proportionate to the amounts shown
- [ ] With **zero** posted entries (fresh DB), the panel shows "No posted entries yet." instead
of breaking
- [ ] "Quick Actions" only shows actions you have permission for, and each one navigates to the
right page (New Manual Entry / Chart of Accounts / Journals / Users & Roles)
- [ ] "Recent Activity" lists your most recent journal entries (any status) with date, entry
number, description, amount, and a status pill; clicking a row opens that entry's detail
page
- [ ] Switching the Branch switcher between "Main" and a specific branch updates the dashboard
figures to that branch's data
## 4. Chart of Accounts (rebuilt as a grouped/collapsible tree)
- [ ] Accounts are grouped under collapsible headers: ASSET, LIABILITY, EQUITY, INCOME, EXPENSE
- [ ] Clicking a group header collapses/expands its accounts, and the chevron icon flips
accordingly
- [ ] Each group header shows an account count chip (e.g. "12 accounts")
- [ ] Each account row shows: account code (monospace), account name, normal balance
(DEBIT/CREDIT), a control-account pill when applicable, and an Active/Closed status pill
- [ ] The search box filters accounts by code or name across all groups as you type
- [ ] "New Account" still opens the existing account-creation dialog and newly created accounts
appear in the correct group after saving
- [ ] Groups with zero matching accounts (e.g. after a narrow search) don't render or show
cleanly rather than looking broken
## 5. General Ledger — "All Entries" tab (regression)
- [ ] `Journal Entries` in the sidebar opens a page titled **General Ledger** with two tabs:
"All Entries" and "By Account"
- [ ] "All Entries" behaves exactly as before: same grid, same columns, sortable by date,
clicking a row opens the entry detail page
- [ ] "New Manual Entry" button still only shows if you have `gl.journal.post`
## 6. General Ledger — "By Account" tab (new — account-centric drill-down)
- [ ] Selecting an account from the dropdown loads its posted transaction history
- [ ] A running balance column updates correctly line by line (increases/decreases match the
account's normal balance direction — e.g. a debit-normal account's balance goes up on
debits, down on credits)
- [ ] Restricting the From/To date fields narrows the rows and the running balance still looks
correct for the restricted range
- [ ] An account with no posted activity shows "No posted transactions for this account in the
selected range." instead of an empty broken table
- [ ] Before selecting an account, you see a prompt to pick one rather than an empty table
- [ ] Switching the Branch switcher changes which entries are considered
## 7. Journal Entry form (visual alignment + new static footer)
- [ ] Form still works exactly as before: adding/removing lines, debit/credit mutual exclusion
per line, the live "Balanced ✓ / Not balanced" indicator, and Post Entry / Cancel
- [ ] Two new footer cards appear below the line table: **Attachments** ("+ Add Attachment") and
**Notes** ("+ Add Note") — these are intentionally disabled/inert placeholders for now,
just confirm they render without errors and don't block submission
- [ ] Posting a valid balanced entry still redirects to its detail page as before
## 8. Reports Centre (new shell — no live reports yet)
- [ ] `Reports Centre` in the sidebar opens a page with four categories: Financial,
Receivables, Payables, Management
- [ ] Each category shows report cards (e.g. Trial Balance, Profit & Loss, Aged Receivables)
with a name, short description, and a "Coming soon" chip
- [ ] Cards are visually disabled (dimmed, non-interactive) — this is expected; no report is
wired up to real data yet
## 9. Other admin screens — style regression only (Segments, Journals, Fiscal Years, Users)
These pages weren't rebuilt, but they now render on the new theme (cards instead of flat
panels, rounded corners, updated table header style). Confirm nothing looks broken:
- [ ] Segments & Branches — page renders, "New Segment"/"Add Value" dialogs still work
- [ ] Journals — grid renders, "New Journal" dialog still works
- [ ] Fiscal Years — year buttons + period grid still work, "Create Year" still works
- [ ] Users & Roles — both tabs (Users / Role Permissions) still work, toggling a user's Active
switch still works
## 10. General polish
- [ ] Page titles, card borders, and table headers look consistent across every screen you
visited (uppercase gray table headers, light card borders, no harsh drop-shadows)
- [ ] No console errors in the browser dev tools on any page you visited
- [ ] Resizing the browser window narrower doesn't visibly break the layout (some horizontal
scroll on wide tables/grids is fine — full mobile responsiveness isn't a goal yet)
---
Once everything above is ticked (or you've told me what's broken), the plan's next phase is
Accounts Receivable — customers, invoices, credit notes, receipts — built directly in this
visual language.