Skip to content

Revenue and WIP

Invoicing tells you what you billed. Recognition tells you what you earned, which is rarely the same month. Finance > Revenue and Finance > WIP and deferred are where the two are reconciled.

Reading these needs a finance capability and the prices lens. Running recognition, posting adjustments and exporting the journal need finance:manage_recognition.

The Revenue summary also checks project and client restrictions across its selected scope. Figures you cannot read are omitted, including from totals. This is different from a zero or a missing valuation. Date and line filters do not remove those restrictions. See Finance reports for filtering a report to an authorised project or budget.

Each budget line carries a recognition method, and Runnit computes what that line should have earned by a given date. A run is what actually posts it: it takes a cutoff, works out the cumulative target for every line, compares it with what has already been posted, and writes only the difference. The cutoff is interpreted in your organisation’s timezone and cannot extend past the period end or today. An older cutoff does not replace a newer applied target.

That difference is the important part. A run never rewrites history, so:

  • running again with unchanged inputs posts nothing more;
  • a nightly run and a run you start by hand produce one set of entries, not two;
  • a correction that belongs to a closed month posts into the earliest open month, tagged with the month it economically belongs to; and
  • a change order re-bases the target, and the difference appears in the next run rather than restating what was already posted.

When a run finishes, recognised totals for its budgets and lines are saved with the revenue entries. Refreshing or signing in again keeps those totals. An unchanged run can also bring older budget totals up to date without adding revenue. Missing reporting-currency values remain unavailable until the required valuation evidence exists. Your sold, usage, cost, invoiced and paid amounts are unchanged by this refresh. See Budgets.

MethodEarns
As deliveredThe approved time and expenses, at their frozen value
Percent complete by hoursSold multiplied by hours to date over estimated hours
Percent complete by costSold multiplied by cost to date over estimated cost
Straight lineAn equal amount each month, with a part month prorated by its days
On milestoneThe milestones achieved by the cutoff
On invoiceWhat has been invoiced
ManualA distribution you enter, which must add up to sold exactly

Recognition stops at what was sold, or at the line’s lower cap, unless a posted write-up raises the ceiling. This applies immediately to time approvals, unapprovals, historical catch-up, invoice issue, credits and voids. The history retains each source value and shows any adjustment needed to reach the allowed cumulative amount. Older runs preserve later approved work.

Moving or repricing approved time in Uninvoiced Work also corrects its recognised revenue. The old posting is reversed and the destination follows its own revenue method. The correction is recorded in the current open month and keeps the work month for reference. Reversing a previous correction still adjusts that original work month.

Moving time without repricing keeps its recorded currency values. Unapproving time or marking it non-billable reverses the original recognised value, including its currency conversion. Later exchange-rate changes do not leave a balance behind for work that has been reversed.

Successive partial credits reduce recognised revenue by the remaining credited share. Crediting a negative invoice adjustment restores the revenue it reduced on that budget line. Voiding an invoice reverses both its positive and negative amounts. A voided invoice stays excluded when recognition runs again.

Open the budget’s Options panel, or the visible side panel on a draft, and choose Revenue recognition to set its default. Expand Show line settings on a line to select an override or keep Budget default. You need budget edit permission and price access. Active line changes go through a change order.

With finance:manage_recognition, choose Edit recognition inputs on the expanded line. Apply any open change order first. Cost-based estimates also need a view that shows costs.

  1. Review the saved version and choose Effective from.
  2. Enter the inputs for the selected method: estimated hours or cost, a service period spread by days or months, milestones, or a monthly distribution.
  3. For milestones, use an amount for every milestone or a weight for every milestone. Give each a unique name and set Achieved on when complete.
  4. For a manual distribution, use each month once and make the amounts total the line’s sold amount exactly.
  5. Add a reason and choose Save recognition inputs. Correct any validation message without closing the form, then run recognition to apply the inputs.

As delivered and On invoice use approved work and issued invoices respectively; they do not need a schedule entered here. Saving inputs does not itself post a recognition run. If the method or saved inputs changed while you were editing, close and reopen the form before saving again.

  1. Open Finance > Revenue and choose the billing entity if you have several.
  2. Under Recognition runs, enter the month in Month to run as YYYY-MM.
  3. Select Run recognition. You need finance:manage_recognition.
  4. Review the posted entries and any lines that could not be computed. A run that changes nothing says Nothing to post.

Each selection of Run recognition checks the current inputs. If more work has been approved or a method input has changed since an earlier run that day, the new run posts the difference and refreshes any incomplete-input warnings. Repeating it without changes posts nothing more. The option to run recognition before closing a month works the same way; incomplete inputs still block closing.

The action message counts only entries posted by that action. An unchanged retry says Nothing to post; earlier entries remain in the run history. If some lines cannot be computed, the message still reports that warning. If the request fails, your selected month stays in place so you can correct the problem and retry.

Changing billing entity clears the previous selected run.

The table shows recognised, invoiced, WIP and deferred for the period, grouped by budget, month or service type, with the method badge on each line. Below it, the run history shows each run’s cutoff, status and coverage, and the entries it posted.

Explain this number on any figure opens the whole story: the rows behind it, the frozen rates and exchange rates, the runs that wrote it, the method inputs it was computed from, and what has changed since you last looked.

  • WIP is work you have earned but not yet billed.
  • Deferred is money you have billed but not yet earned.

The WIP page shows balances with ageing buckets, so you can see how long unbilled work has been sitting, along with the monthly movement: opening balance, additions, releases, adjustments and closing balance, which always reconcile. Write-ups, write-downs and write-offs appear as adjustments with their reasons, and drill-through takes you to the budget behind any figure.

A write-down or write-off normally cannot reduce WIP below zero when it is applied. Any excess is suppressed; it does not reduce work earned later. The reporting total and Finance reports use the applied amount. If currencies differ, that amount uses the adjustment’s recorded conversion rather than a current exchange rate. A missing recorded conversion is shown as not valued.

Build journal produces the period’s recognition journal. Validate and download CSV checks the account mappings and starts the CSV download. The journal exports as CSV. Rebuilding an exported journal returns the same journal. Correcting an export requires a separate compensating journal; rebuilding does not create another full posting. The Revenue page does not offer a correction-creation control. New correction journals reverse both account entries and movement summaries. The period’s recorded recognition and invoices remain unchanged, so review any reconciliation difference. Earlier exports remain as recorded. See journal API results. A reversed write-off remains in its recorded period alongside its reversal. Rebuilding an unexported journal retains both postings, so a reversal in the same period has no net adjustment. Its WIP movement includes signed adjustments. Reporting-currency adjustment totals use their recorded values and show missing valuation coverage. Previously exported files stay unchanged and need the normal reviewed correction process.

The journal leaves Runnit as a CSV, which you post in your ledger.

See what is coming: Forecast, or close the month at Month End.

Ask Ru to explain this workflow, inspect records you can access, or carry out supported steps when you authorise them. Your permissions and approval rules still apply. See Finance with Ru.

Reversing a write-off restores only the amount that reduced WIP. For example, if a write-off requested $150 but only $100 was available, reversing it restores $100. The restored work ages from when it was originally earned. Reporting totals use the same applied amounts.

Historical catch-up cannot post into a closed source month. Reopening requires your normal authority and approval. For a soft-closed month, provide a reason; the change is recorded with that reason. Ru can supply your reason for an authorised catch-up.

Invoice-based recognition counts issued invoices and issued credits. An invoice or credit awaiting approval, or approved but not issued, has no effect yet.