Skip to content

Functional Expenses

Open in Nocthink

Module: Accounting · URL: /accounting/functional-expenses · Responsible role: Accounting Staff · Also used by: F.A.T Manager (full; the only accounting role that can Run allocation), Owner/Director (full); Finance Staff / Finance Manager (read-only)

Functional Expenses — statement of functional expenses for Jan 1, 2026 to Oct 25, 2026 with an incomplete-statement warning, ten expense accounts split into Program ($71,774.80), Management & general ($204,578.00), Fundraising ($13,862.25) and Unclassified ($1,350.00 on office rent and utilities) for a $291,565.05 total, and the Allocate shared costs section below

Screenshot: Sarah Hall (Finance Manager, also holds the F.A.T Manager role), Nocthink Demo Institute demo data. The policies table and the Run allocation form are below the fold.

Why I use this page

Nonprofit reporting under ASC 958, the Form 990 Part IX and most donor audits need every expense shown both by natural account and by function: program services, management & general, and fundraising. I use this page to produce that statement. I also use it to write allocation policies for shared costs such as rent or executive salaries, so the statement can be completed. I check it at month end, and at year end the statement must have no Unclassified column balance before it goes to the auditors.

What's on the screen

Header and dates

  • The title is Functional expenses, with a short explanation underneath.
  • Export at the top right, with PDF, Excel, CSV and JSON: one row per account and a totals row, for the dates set below.
  • From and To dates default to 1 January of the current year and today (the date boxes use the browser's own date format, 01/01/2026 and 25/10/2026 in the screenshot).

Statement of functional expenses

  • Shows the period, for example "Jan 1, 2026 to Oct 25, 2026".
  • An amber warning appears when anything is unclassified: "Some expenses have no functional class, so this statement is not complete…".
  • The table has one row per Expense account (code and name). Its columns are Program, Management & general, Fundraising, Unclassified and Total.
  • A Total footer row sums each column.
  • In the demo, $1,350.00 of 52040 Office rent and utilities (September building maintenance booked "to allocate") is still unclassified; the rest of that account was already allocated.

Allocate shared costs

  • A + button (New policy version) creates a policy version.
  • The policies table has the columns Policy (name and version, e.g. "v2"), Shares (e.g. "Program 40% · Management & general 45% · …"), Basis, Effective from and Status (Current or Superseded).
  • Below the table is the Run allocation form (only for users with accounting.approve): Expense account, Policy, From, To and the Run allocation button.

How I …

Review the functional statement for a period

  1. Set From and To. Only Posted journals in that range are counted.
  2. Read the warning. If it is there, find rows with an amount in Unclassified.
  3. For an account that always belongs to one function (e.g. Travel → Program), I set its functional class on the account. That is easier than allocating. Ask the F.A.T Manager if the field is not on your account form.
  4. Shared costs (rent, IT, executive time) are allocated with a policy, as described in the next two sections.

Write or revise an allocation policy

  1. Click + (New policy version); see New allocation policy version below.
  2. Fill in:
    • Name, e.g. "Office rent". Using an existing name creates the next version of that policy.
    • Basis: the documentation behind the split, e.g. "Staff time survey, March".
    • Effective from: the date the split applies from.
  3. Enter Shares (%) for Program, Management & general and Fundraising. The running Total must read exactly 100%, otherwise it turns red with "(must be 100%)" and Save policy stays disabled.
  4. Click Save policy. The new version shows as Current and the earlier version becomes Superseded. Allocations already booked keep the version they used.

Allocate a shared cost (F.A.T Manager)

  1. In Run allocation, pick the Expense account (only active Expense accounts are listed).
  2. Pick the Policy. Only Current versions are listed.
  3. Set From and To. From must not be after To, and the policy's Effective from must be on or before From.
  4. Click Run allocation. The system books one journal, already Posted and dated on To (reference FUNCTIONAL-ALLOCATION, number JV-FA-…). For each fund, it moves the account's unclassified posted amount into the policy's functions. The natural account and fund do not change.
  5. The result shows: "Allocation booked as a reclassification journal with N lines." Reload the statement and the Unclassified amount for that account moves into the function columns.

Detail page, forms & dialogs

New allocation policy version

New allocation policy version — the New policy version dialog with name, basis, effective date and three empty shares totalling 0%

Screenshot: Sarah Hall (Finance Manager, also holds the F.A.T Manager role), Nocthink Demo Institute demo data.

The + in Allocate shared costs (New policy version) opens this dialog: "Use an existing policy name to replace it with a new version. The shares must add up to 100%."

Fields are Name (placeholder "Office rent"), Basis ("Staff time survey, March"), Effective from (today) and Shares (%) for Program, Management & general and Fundraising. Under the shares a live total reads, for example, "Total 0% (must be 100%)" in red; it turns grey at exactly 100%.

Save policy stays disabled until there is a name, an effective date and shares that add up to 100%. Saving under an existing name makes the new version Current and the old one Superseded. Cancel closes without saving.

Access & permissions

  • Viewing the statement and policies requires accounting.view plus accounting authority: the accounting-staff or fat-manager role, or accounting.approve.
  • Creating a policy version requires accounting.create. Accounting Staff and the F.A.T Manager both have it.
  • Run allocation requires accounting.approve, which only the F.A.T Manager (and Owner/Director) holds. The Run allocation form is shown only to users who hold it, so as Accounting Staff I prepare the policy and ask the F.A.T Manager to run it.
  • Finance Staff and Finance Manager are read-only here: their seeded roles include accounting.view, and the server lets finance authority with accounting.view read the books. They can't create, change or post anything on this page.

Caveats

  • An allocation is posted immediately and cannot be re-run. The same account and period can only be allocated once. A second attempt fails with "This account and period were already allocated; reverse that journal first." To correct it, reverse the allocation journal in Journal Entries, then run again.
  • The period must be open. If To falls in a closed period (see Period Close), the run is refused.
  • Only truly unclassified amounts move. If the account itself already has a functional class, the run fails with "This account already has a functional class; only unclassified shared costs are allocated."
  • A run with nothing to allocate is refused with "There is no unclassified posted expense on this account in the period." This happens, for example, when the expense is still in draft.
  • Rounding. The split is exact to the cent. Rounding remainders are spread so each fund's lines still sum to its pool.
  • Line class wins. A journal line's own functional class takes priority over the account's class. The Unclassified column only shows lines where neither is set.
  • The statement is organization-wide. There is no project filter.

Limitations

  • There is no project or fund filter.
  • Policies cannot be edited or deleted. A change always creates a new version. A policy cannot be retired without replacing it.
  • Run allocation handles one account at a time; there is no batch run across all shared-cost accounts.
  • There is no preview of the allocation lines before posting.