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
8.2 KiB
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 devterminals 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:5173and 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
/loginpage
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
hasPermissionfiltering 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 Entriesin 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 Centrein 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.