Skip to main content

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-accounting accounting 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-idempotent setCurrentPage writes in navigationSlice.
  • Fixes added one-shot/idempotent guards in useTabSessionNavigationInit and a no-op guard in navigationSlice.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-tier useEffect (unstable entities dependency + 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.ts now checks getOrgAccountingBasis() 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 for parentOrgOnly cards.
  • HubGrid visibility settings for pageId="fund-accounting" - Controls whether individual tool cards are shown/hidden.
  • Organization accounting basis filtering - Hides accrualOnly tools 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)

Individual Module Documentation


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

Ready to get started?Start Plus Trial