Fund Accounting Hub
Fund Accounting Hub
Component File: src/features/accounting/components/AccountingHub.tsx Route / navigation: Base path `/fund-accounting` (PageView fund-accounting). Tool selection: Zustand `accountingTool` (AccountingTool), mirrored to `/fund-accounting/{accountingTool}` (and `/fund-accounting/{accountingTool}/{recordId}` for deep links); see navigationSlice.ts, navigationUrl.ts, and PageRouter.tsx. Access Level: Parent Org and Fund Users with Accounting access (position-based) Last Updated: April 9, 2026
Recent Updates
Date nudge shortcut standard (April 10, 2026)
- On Fund Accounting date fields that use the shared
DatePicker, users can focus the date box and press `+` to move forward one day or `-` to move back one day. - This applies across accounting filters and forms, including Journal Entries, General Ledger, Reconciliation, Bills, Expenses, Pledges, Grants Receivable, Audit Log, Memorized Transactions, and the Deposit sub-flows.
- Manual date typing still works; the shortcut only takes over when the current input already resolves to a valid date.
Calculator-style amount entry rollout (April 9, 2026)
- Calculator math inside amount boxes is now live on the current fund-accounting rollout surfaces only.
- Included screens: Regular Deposit, Check Deposit, Journal Entry Manager (debit/credit fields), Bills, Expenses, Sponsor Fee Allocation, Pledges, Grants Receivable, Reconciliation statement balance entry, and General Ledger Quick Entry.
- This rollout does include deposits because both deposit managers live under the
/fund-accountingaccounting workflow. - It does not extend to fundraising, donor CRM, events, or tools-only screens that also happen to use
CurrencyInput.
Global React #185 follow-up (March 26, 2026)
- A separate dashboard + hub crash path was traced to tab-session navigation bootstrap in
AppInitializer(useTabSessionNavigationInit) plus non-idempotentsetCurrentPagewrites innavigationSlice. - Fixes added one-shot/idempotent guards in
useTabSessionNavigationInitand a no-op guard innavigationSlice.setCurrentPage.
React #185 / hub crash (March 26, 2026)
- Production could hit maximum update depth (React error #185) on
/fund-accounting— the hub component is stateless; root causes were `useTierAccess` parent-tieruseEffect(unstableentitiesdependency + unkeyed parent cache) and redundant `setCurrentPage` in `App.tsx` when access was denied. See DEVELOPER-PLAYBOOK.md §20 bug-fix log.
Accounting Method Standardization (March 17, 2026)
- Account Defaults tab now filters visible mappings by basis: A/R hidden on cash + modified_accrual; A/P hidden on cash. Info banner explains hidden items.
- All 14 account mapping tooltips rewritten with basis-aware detail (which methods use each account, when JEs post).
- Method tag badges ("Full Accrual only", "Modified Accrual & Accrual") appear next to relevant mappings.
grants.tsnow checksgetOrgAccountingBasis()before creating A/R JEs — mirrors the pledges.ts pattern.- Select permission guard added (
disabled={!canWriteAccounting}).
Tool Grid Expansion (March 6, 2026)
- The live hub now exposes 14 accounting tools, not 11.
- Audit Log is available directly from the accounting hub and is restricted to parent-org users.
- Vendors and Revenue Reconciliation are also live hub cards and should be treated as first-class accounting surfaces in navigation docs.
Overview
The Fund Accounting Hub is a navigation landing page that provides access to all fund accounting-related tools. It displays a grid of tool cards, each linking to a specific accounting function. The hub supports visibility customization via:
- Accounting Basis (Cash/Accrual/Modified Accrual) - Org-level setting that controls which accounting tools and account mappings are visible
For system integration details, see: 02-ACCOUNTING-SYSTEM-INTEGRATION.md
Deposit batch workflow (documentation): Regular and check deposits share a batch → review → post pattern with reimbursement receipt intake. Regular Deposit uses Add to batch to jump into the review step; details are in 10-REGULAR-DEPOSIT-MANAGER.md and 08-CHECK-DEPOSIT-MANAGER.md.
UI Features
Tool Cards (15 hub tools + deposit sub-flows)
1. Journal Entries - Create manual journal entries and adjustments 2. General Ledger - Complete transaction history with debits and credits 3. Deposits - Record regular deposits or scan checks (sub-hub: check / regular / history) 4. Expenses - Submit and approve expense requests (parent org only) 5. Reconciliation - Match and categorize bank transactions 6. Sponsor Fee Allocation - Review and confirm monthly admin fees (optional cash settlement JEs clear Due to/from against checking in one step; see tools doc) 7. Bills (A/P) - Track vendor bills and accounts payable *(available for Accrual and Hybrid; hidden on Cash)* 8. Pledges (A/R) - Track donor pledges and promised donations *(available for Accrual and Hybrid; hidden on Cash)* 9. Grants Receivable - Track awarded grants not yet received *(available for Accrual and Hybrid; hidden on Cash)* 10. Memorized Transactions - Manage recurring journal entry templates 11. Payroll - Run payroll through Gusto *(parent org only)* 12. Vendors - Manage vendor records used across bills and expense flows 13. Audit Log - Review financial create/update/delete activity *(parent org only)* 14. Revenue Reconciliation - Analyze revenue posting and reconciliation differences 15. Fundraiser Ledger - Fundraiser fund tracking
Accounting Basis Filtering
Tools marked as accrualOnly are hidden when the organization's accounting basis is "Cash":
- Bills (A/P) - Only visible when basis is Accrual or Hybrid
- Pledges (A/R) - Only visible when basis is Accrual or Hybrid
- Grants Receivable - Only visible when basis is Accrual or Hybrid
Navigation Mapping
| Tool ID | Routes To | Component | Visibility |
|---------|-----------|-----------|------------|
| `journal-entries` | Fund Accounting → Journal Entry | JournalEntryManager | Always |
| `general-ledger` | Fund Accounting → General Ledger | GeneralLedger | Always |
| `deposits` | Fund Accounting → Deposit Hub | DepositHub (sub-hub) | Always |
| `expenses` | Fund Accounting → Expenses | ExpensesManager | Parent org only |
| `bank-reconciliation` | Fund Accounting → Reconciliation | ReconciliationManager | Always |
| `sponsor-fee-allocation` | Fund Accounting → Sponsor Fee | `AdminFeeAllocation` | Always |
| `bills-ap` | Fund Accounting → Bills | BillsManager | Accrual + Hybrid |
| `pledges-ar` | Fund Accounting → Pledges | PledgesManager | Accrual + Hybrid |
| `grants-receivable` | Fund Accounting → Grants Receivable | GrantsReceivableManager | Accrual + Hybrid |
| `memorized-transactions` | Fund Accounting → Memorized | MemorizedTransactions | Always |
| `payroll` | Fund Accounting → Payroll | PayrollManager | Parent org only |
| `vendors` | Fund Accounting → Vendors | VendorsCRM | Always |
| `audit-log` | Fund Accounting → Audit Log | AuditLog | Parent org only |
| `revenue-reconciliation` | Fund Accounting → Revenue Reconciliation | `RevenueReconciliationReport` | Always |
| `fundraiser-ledger` | Fund Accounting → Fundraiser Ledger | `FundraiserLedger` | Always |
| `check-deposit` / `regular-deposit` / `deposit-history` | Deposit sub-flows (from **Deposits** card) | `CheckDepositManager` / `RegularDepositManager` / `DepositHistory` | Always |
Deposit hub: Choosing `deposits` opens DepositHub, which sets accountingTool to check-deposit, regular-deposit, or deposit-history.
State Management
Local State
None - pure navigation component
Shared State / Hooks
usePermissions()- Determines whether the current user is treated as a parent-org user forparentOrgOnlycards.HubGridvisibility settings forpageId="fund-accounting"- Controls whether individual tool cards are shown/hidden.- Organization accounting basis filtering - Hides
accrualOnlytools when the selected organization's basis is cash.
Troubleshooting
| Symptom | Likely cause | Where to look |
|--------|----------------|---------------|
| React error **#185** (max update depth) on hub load | Effect loops from tier/entity resolution or redundant navigation `setState` | `useTierAccess.ts` (parent-tier fetch + `useShallow` on `entities`), `App.tsx` (hub access redirect), `useEntityEnforcement.ts` |
| React error **#185** on `/dashboard` and then hub routes | Tab-session bootstrap navigation loop (non-idempotent init + page setter) | `AppInitializer.tsx`, `useTabSessionNavigationInit.ts`, `navigationSlice.ts` |
| Hub grid empty / wrong tiles | Accounting basis, `parentOrgOnly`, or custom permissions | `HubGrid`, `usePermissions`, `useOrgAccountingBasis` |
Related Documentation
System Integration (Start Here)
- 02-ACCOUNTING-SYSTEM-INTEGRATION.md - How all modules work together
Individual Module Documentation
- 03-CHART-OF-ACCOUNTS.md - Account structure
- 04-GENERAL-LEDGER.md - Transaction history
- 05-JOURNAL-ENTRY-MANAGER.md - Manual entries (central hub)
- 06-EXPENSES-MANAGER.md - Expense tracking
- 07-REIMBURSEMENTS-MANAGER.md - Employee reimbursements
- 08-CHECK-DEPOSIT-MANAGER.md - Check deposits with OCR
- 09-RECONCILIATION-MANAGER.md - Bank reconciliation
- 10-REGULAR-DEPOSIT-MANAGER.md - Manual deposits
- 11-BILLS-MANAGER.md - Vendor bills (A/P)
- 12-PLEDGES-MANAGER.md - Donor pledges (A/R)
- 13-GRANTS-RECEIVABLE-MANAGER.md - Grants receivable (A/R)
- 14-FUNDRAISER-LEDGER.md - Fundraiser fund tracking
- 16-REVENUE-RECONCILIATION.md - Revenue vs donation reconciliation
- CONSOLE-LOG-FOLLOW-UP-2026-04.md - JE numbering fallback and revenue parity log triage
- Audit Log is currently documented at the hub level: parent-org-only, reads from
financial_audit_log, and supports table/action/date/user filters plus export.
Synced from IFMmvp-Frontend documentation: pages/accounting/00-ACCOUNTING-HUB.md
Ready to Get Started?
See how Alignmint can simplify your nonprofit's operations. Schedule a free demo with our team and we'll walk you through everything.
Questions? Email us at steven@getalignmint.org