A write-off takes a recorded fee out of unbilled revenue, with an audit trail and the accounting entries to match. This article covers the Fees Write-Off global feature, the phase features that decide when the accounting happens, which fees are eligible, and how a write-off is raised, approved and undone.
Write off overview
A write-off takes a fee that has been recorded and approved but will not be billed, and removes it from unbilled revenue. The work has been done and the time or the fee exists, so the fee cannot be deleted. It has to be written off, which leaves an audit trail and posts the accounting entries that take it out of the firm's unbilled position.
Both fixed fee actuals and hourly fee actuals can be written off, and the route is the same for each. A fee earner raises one from the bulk action menu on the fee actual list views. A write-off can also be raised from a workflow, using the Create Fees Write Off toolbox item, or through the public API.
Writing fees off creates a work item of a core write-off work type, which is the design decision everything else follows from. How write-off is put together explains that structure, and it is worth reading before configuring any of it.
Nothing posts until the write-off is committed
A write-off has two stages. Creating it selects the fees and locks them. Committing it, which happens on approval, posts the transactions. Until then nothing has reached the chart of accounts, and the fees can be released by rejecting or deleting the write-off.

How write-off is put together
Write-off is configured like most of the finance features: a global feature for the accounting, and a work type for the process. Writing fees off creates a work item, so it has a work type, and that work type carries a phase plan.
The core write-off work type moves through Draft, then Approving, then one of Approved, Rejected or Deleted. A site can create its own work type, or its own phase plan, instead.
|
Work type hierarchy ![]() |
State flow
|
The work types
Three work types are involved.
- The abstract write-off parent carries the phase plan, so its children inherit it.
- Write-off-fees is the type a fee write-off actually creates, and the type both phase features are bound to.
The practical consequence is that a firm wanting its own model derives from Write-off-fees rather than building a work type from scratch, because the phase features will only bind to work types on the write-off path. See Configure the phases and approvals.
The work item
Raising a write-off creates one work item holding the fee actuals selected for it. Because it is a work item, it carries a reference, notes, a phase, and whatever fields the firm adds. It can be reported on, found in a list view, and routed through an approval.
Each fee it holds moves to a processing status while the write-off is open. That status is not unbilled, so nothing else can act on the fee: a second write-off cannot pick it up, and no other process will touch it. On commit the fee moves to written off. Where it is taken out of the write-off before commit, it returns to unbilled.
The phase plan
The plan runs Draft, then Approving, then one of Approved, Rejected or Deleted. Two of its transitions are driven by a user, Submit and Delete, and two are driven by the approval outcome rather than by anyone choosing them.
Because the plan sits on the abstract parent, changing it changes it for both child types. A firm wanting different phases for fees only derives a new type from Write-off-fees and gives that its own plan.
Phases (out of the box)
Our core write-off work type uses Draft, Approving, then Approved, Rejected or Deleted. Sites can create their own work type with different phases, but it must be parented by our core write-off type, for example derived from Write-off-fees, so the phase features below are available.
Phase features and chart of accounts posting
There are two phase features that can create chart of accounts entries.
- Commit creates the write-off entries directly at Posted. Unlike other postings, nothing is created before this point. That is because committing does not just create the write-off entry, it also takes the amount out of unbilled revenue, so the movement only happens once the write-off is committed.
- Undo reverses the entries created on commit. Where undo is set on a phase before commit happens, there is nothing to reverse, so no reversing entries are created. Instead it cancels the write-off and moves the fees from Processing write-off back to unbilled.
This is why a write-off can complete with no accounting behind it
Because the accounting is a binding rather than something built in, there are two ways for a write-off to progress all the way through its phases while nothing posts. The Fees Write-Off global feature can be disabled, in which case a commit returns without doing anything. Or the committing feature can be bound to a phase the work item never passes through, which happens when a firm adds its own phases. Both are configuration, and both look identical from the work item.
Approvals
No approval is supplied with write-off. A site can configure one on the write-off work type in the same way as on any other work type. The Approving phase gives the write-off somewhere to sit while an approval runs, and the Approved and Rejected transitions out of it are driven by the outcome. Firms configure their own routing, so what triggers an approval and who it goes to is a decision for the firm rather than anything set in fees.
The global feature
Fees Write-Off holds the account codes that write-off transactions post to, and whether revenue and costs are accounted for separately. It answers where the money goes, not when it moves, and it writes no fees off by itself.
It also depends on the Chart of Accounts global feature, which is enforced rather than advisory, so the chart of accounts is configured before any of this. See Before you start.
Before you start writing off fees
Write-off depends on the Chart of Accounts, so that is configured first. Beyond it, a fresh installation already carries most of what write-off needs. The account codes, the work types and the phase plan all arrive with the installation, so the work is checking them and settling the options.
Order of work
| Step | What to do |
|---|---|
| 1 | Decide which chart of accounts code the written-off amount posts to, and create it if it does not already exist. Fixed fees and hourly fees can post to different codes. See The account codes supplied below. |
| 2 | Decide whether to account for revenue and costs separately. Where the firm does, configure Time - Internal Costs first, because split accounting has nothing to separate without an internal cost figure. |
| 3 | Enable Fees Write-Off and complete its account code settings in the Fees write-off global feature. |
| 4 | Review the phase plan on the write-off work type, and which phases commit and reverse the accounting. |
| 5 | Add an approval to the write-off work type where the firm wants one. |
| 6 | Grant the write-off permissions. |
| 7 | On a fee actuals list you add yourself, turn on Allow bulk actions and pick the matching custom bulk menu context. See Configure the widget and list views. Without this no write-off action displays. |
Adding a segment later invalidates the configuration
Each write-off account code setting is a combination across the enabled segments. Enabling a new segment in the Chart of Accounts leaves every existing write-off account code path incomplete, so the feature reports as invalid until each path is revisited and the new segment populated. Worth knowing before a firm changes its segments.
The account codes supplied
Three account codes are delivered under Revenue, in the Services Revenue category. A firm can point the settings at these or at accounts of its own.
| Code | Name | Used for |
|---|---|---|
| FIXEDFEEWRITEOFF | Fixed Fee Write-off | Written-off fixed fees. This covers the tiered and hours-derived fixed fee types too, because all three are classified as fixed fees. |
| HOURLYWRITEOFF | Hourly Write-off | Written-off hourly fees. |
| HOURLYCOSTSWRITEOFF | Hourly Costs Write-off | The internal cost portion of a written-off hourly fee. Used only where revenue and costs are accounted for separately. |
Decisions to make first
| Decision | Why it matters |
|---|---|
| Whether to account for revenue and costs separately | Splitting posts the internal cost of a written-off hourly fee to its own account, and reduces the amount posted to the hourly write-off account by that cost. Without it, the full amount goes to the hourly write-off account. Only turn it on where the firm reports on internal cost recovery, because it needs a third account code kept up to date and an internal cost figure on the fee. |
| Whether internal cost rates are configured | Split accounting needs an internal cost amount on the fee before it can post anything to the costs account. That amount comes from the Time - Internal Costs global feature, which holds internal cost rates per currency. Without it there is nothing to separate. |
| Which work type a bulk write-off create | The Bulk write-off work type setting decides which work type is created when fees are written off from the bulk menu on the fee actuals list views. Leave it blank to use Write-off-fees, or point it at your own work type derived from Write-off-fees where the firm wants different fields, phases or approval rules. A write-off raised through a workflow can use a different work type. See Fees write-off global feature. |
| Which phase commits the accounting | Out of the box, the accounting commits when the write-off reaches Approved. Rejected stops the write-off before anything has posted, so no money moves and the fees return to unbilled. A firm with a longer approval chain may want to commit later. See Phase features. |
Permissions
Write-off uses the standard work type permissions, named after the write-off work types. They are listed with the other fees permissions.
Two things are specific to write-off. Create on Write Off Fees decides whether Write Off Fees and Undo Write-Off display on the fee actual list views, so a user without it sees neither item. And undo needs Sharedo - Update rather than create, because it posts reversing financial transactions against the write-off, so someone can raise a write-off and be unable to undo it.
Fees write-off global feature
Fees Write-Off
Navigate to Modeller > Global features > Finance > Fees Write-Off
Fees Write-Off holds the account codes that write-off transactions post to, set once for the solution.

Each account code setting is a segment code picker: it presents one selection per enabled Chart of Accounts segment, and every one of them has to be completed.
| Write Off Account Code (Fixed Fees) | Mandatory. The account combination that written-off fixed fees post to. This covers the tiered and hours-derived fixed fee types as well as the plain one, because all three are classified as fixed fees. There is no way to send them to separate accounts. The supplied FIXEDFEEWRITEOFF account is the usual choice. |
| Write Off Account Code (Hourly Fees) | Mandatory. The account combination that written-off hourly fees post to. Separate from the fixed fee account so the two can be reported on independently. Where revenue and costs are accounted for separately, this account receives the margin only, and the cost goes to the hourly fee costs account. The supplied HOURLYWRITEOFF account is the usual choice. |
| Account for Write-Off of Revenue and Costs separately | Off by default. When on, a written-off hourly fee is divided into a margin element and an internal cost element, and a third account code becomes mandatory. The in-product guidance reads: If required, you can further break down the write-off of hourly fees by both the margin, and internal cost, so you can measure the actual internal cost write-off. It needs an internal cost figure on the fee, which comes from the Time - Internal Costs global feature. Turning this on without that configured leaves nothing to separate. |
| Write Off Account Code (Hourly Fee Costs) | Displays only when the toggle above is on, and is then mandatory. The account combination that the internal cost portion of a written-off hourly fee posts to. The supplied HOURLYCOSTSWRITEOFF account is the usual choice. Turning the toggle off again removes the requirement, so an incomplete path here can be resolved either by completing it or by turning the split off. |
| Bulk write-off work type | Optional. The work type used when fees are written off from the bulk menu on the fee actuals list views. Leave blank to use Write-off-fees. To use your own work type, it must be derived from Write-off-fees. Write-offs raised via workflow can use a different work type. |
How accounting separately changes the postings
Without the split, a written-off hourly fee posts its full amount to the hourly write-off account. With the split on, and an internal cost recorded against the fee, the amount divides. The internal cost posts to the hourly fee costs account, and the amount posted to the hourly write-off account is reduced by that cost.
Worked example
An hourly fee of £400 carries an internal cost of £150. Written off with the split off, the whole £400 posts to the hourly write-off account. Written off with the split on, £150 posts to the hourly fee costs account and £250 to the hourly write-off account, so the firm can report on the cost it absorbed rather than only the headline value given up.
Phase features
For details see Phase Features.
Configure phase features & approvals
Navigate to Modeller > Global features > Finance > Fees Write-Off > Phase Features
The Fees write-off global feature says where write-off transactions post. Two phase features say when. They bind to phases on the write-off work type, and decide which phase transitions create the financial transactions and which reverse them.
| Phase feature | What it does |
|---|---|
| Configure the phases for Committing Write-off |
Configure the phases which will create financial transactions for Write-off. Reaching a phase carrying this feature commits the write-off.
|
| Configure the phases for Undoing Write-off |
Configure the phases which will reverse financial transactions for Write-off. Reaching a phase carrying this feature undoes anything committed and discards anything that was not.
|
Both are phase level rather than work type level, and both restrict themselves to work types on the write-off path, so they cannot be bound anywhere else.
The write-off work types

| Work type | Role |
|---|---|
| Write-off | An abstract parent, described as the type under which write-offs are managed. It carries the phase plan, so its children inherit it. |
| Write-off Fees | The type created when fees are written off, and the type both phase features are bound to. This is the one to extend, or to derive from, where a firm wants its own model. |
The phase plan supplied
A phase plan called write-off-phase-plan is installed against the write-off work type, so it serves both child types.
| Draft | The starting phase, and an open one. The write-off is being prepared. The fees are held but nothing has posted. |
| Approving | An open phase. The write-off is out for approval. |
| Approved | The write-off has been approved. This is where the commit feature is bound out of the box. |
| Rejected | The write-off has been rejected. It stops before anything has posted, so no money moves and the fees return to unbilled. |
| Deleted | The write-off has been deleted and is marked as removed. The fees return to unbilled. |
| Transition | From | To | Driven by |
|---|---|---|---|
| Submit | Draft | Approving | A user. This is the optimum path. |
| Delete | Draft | Deleted | A user. |
| Approved | Approving | Approved | The approval outcome, not a user. The optimum path. |
| Rejected | Approving | Rejected | The approval outcome, not a user. |
The bindings out of the box
All three bindings are against write-off-fees. Nothing is bound to Draft or Approving, and nothing is bound to write-off-disbursements.
| Phase | Phase feature bound | Effect on reaching it |
|---|---|---|
| Draft | None | The fees are held in a processing status. Nothing has posted. |
| Approving | None | Awaiting approval. Still nothing posted. |
| Approved | Committing Write-off | The write-off commits. Transactions are created and the fee actuals move to written off. |
| Rejected | Undoing Write-off | Anything committed is reversed, and items never committed are discarded. The fees return to unbilled. |
| Deleted | Undoing Write-off | As Rejected. |
Changing the bindings
A firm can add phases and transitions to the plan in the Modeller as usual, then bind the two features to whichever phases suit its approval process. Two things are worth knowing before doing so.
- Moving the commit binding later delays the accounting. The fees stay in their processing status until the write-off reaches the committing phase, so a long approval chain leaves them held for longer.
- Binding commit to more than one phase is unnecessary. A commit only ever acts on items it has not already committed, so a second binding has nothing to do.
A phase the work item never reaches does no accounting
Where a firm adds phases and binds commit to one the write-off does not pass through, the write-off completes with nothing posted. This is the second reason a write-off can reach an approved state with no accounting behind it, the first being the feature itself being disabled.
What else can be configured on the work type
A write-off is a work item of an ordinary work type, so everything a firm already knows about modelling work types applies. Open it in the Modeller and it behaves like any other.
| What can be configured | Detail |
|---|---|
| Phase model | The write-off's own phases, rather than a fixed set built into Fees. |
| Fields | Add whatever the firm needs to capture, for example a client-facing reason, or a category for reporting. |
| Reference and notes | Standard work item behaviour, including whether notes are mandatory. |
| The blade | Extendable, so a firm can add its own data capture alongside the fee summary. |
| Approvals | Configured on the work type. |
An approval model
A write-off does not have to be approved. Where the firm wants one, configure an approval on the write-off work type in the same way as on any other work type, and the write-off routes through it on submit.
Eligibility
These conditions decide whether a fee actual can be written off. All have to hold.
| Condition | Why |
|---|---|
| The lifecycle state is Approved | A write-off reverses a fee the firm has committed to, so the fee has to have been approved first. A fee still in Draft, Submitted or Revising cannot be written off, whatever its billing status. |
| The billing status is unbilled | A billed fee is handled through billing rather than through a write-off. A fee already written off, or sitting in a processing status, is not unbilled either. |
| The fee has not been invoiced | A separate check from the billing status, reading whether the fee carries an invoiced date. The two can disagree, so both are tested. |
| The fee is not being revalued | A fee going through time revaluation has an amount in flux, so writing it off would post an amount that is about to change. |
| The fee is not in another write-off | A fee already selected into a write-off that has not yet committed cannot be picked up by a second one. This is what the processing status enforces. |
| Write-off covers fixed fees and hourly fees | A conditional tiered success fee cannot be written off through the interface in this release. |
Approved, not posted
Eligibility depends on the state the fee actual has reached, not on whether it has reached the chart of accounts. A fee is posted because its state has moved on, so posting describes what follows rather than what is tested. Where a fee is refused, check its state.
Selecting an ineligible fee does not block the write-off
A bulk selection can easily include fees that do not qualify, so the write-off blade does not refuse the whole selection. It lists every fee selected, marks which are valid, and displays a message explaining that some do not meet the criteria.
Only the valid fees are carried into the write-off work item. The rest are left alone, still eligible for whatever they were eligible for before.
The API behaves differently on purpose
Where a write-off is created through the public API, a request containing an ineligible fee is rejected outright rather than partially fulfilled, as is a request naming a fee that is neither a fixed fee nor an hourly fee. An integration gets a clear failure instead of a silent partial result.
Raise a write-off
Raise a write-off
- Open the Fixed Fee Actuals or Hourly Rate Fee Actuals list view on the work item: Finance > Fee Structure.
- Tick the fees to write off.
- From the bulk action menu, select Write Off Fees.
- The write-off blade opens.
- Maximise the screen to see all the columns.
- Review the fees listed, the total, and any marked as not eligible.
- Remove any fee that should not be included. The totals update as you do.
- Enter the reason and any notes.
- Save. Clio Operate creates the write-off work item and locks the selected fees.
- Submit the write-off. Where an approval applies, it routes for approval. Where it auto-approves, the transactions post at this point.

| The selected fees | Every fee from the selection, each marked valid or not eligible, so it is clear what will and will not be written off. |
| Total | The value to be written off, across the valid fees only. It updates immediately when a fee is removed from the list. |
| Time and Units | Displayed for an hourly selection, and totalled across the valid fees. Hidden for a fixed fee selection, because a fixed fee has no hours behind it and the whole fee amount is written off. Where a selection holds both types, the blade renders a mixed layout that carries both. |
| Reason and notes | Carried onto the write-off work item, and summarised on the approval card so an approver can see why without opening the work item. |
What happens on save
- A write-off work item is created, with its own reference.
- Each valid fee moves to the processing write-off billing status, and is flagged as being in that write-off.
- No accounting entries are posted. That waits for the approval.
Approval
The summary sits on the write-off blade, which an approver reaches through Refers To on the approval task, so approving with the detail in view means opening the write-off rather than deciding from the card.

Where the work type is configured to approve automatically, submitting the write-off approves it and only then creates the posted transactions. The order matters: nothing posts speculatively.
Rejecting or deleting before commit
| Action | What happens to the fees |
|---|---|
| The approval is rejected | The fees return to unbilled, and no transactions are created. They are eligible for write-off again. |
| A draft write-off is deleted | The same: the fees are released back to unbilled. |
A rejected write-off releases the fees cleanly
Because nothing posts before the commit, a rejection leaves no accounting to unwind. This is the reason for the two-stage design.
The write-off list view
A list view reports on write offs, displaying the value written off, the hours and units where applicable, and the approver.

From here you can view the details of the write off, this opens the Write-off fees blade, where if you have permission and it's not automatic, you can approve/reject.

Other routes
A write-off does not have to be raised by hand. Two other routes exist, and both produce the same work item.
The public API
A write-off work item can be created from a valid request through the public API. Use it where write-off decisions are made in another system, or to handle volume that would be impractical through the list view.
The API validates more strictly than the blade does. A request containing a fee that is not eligible is rejected, rather than the eligible fees being written off and the rest skipped. So is a request naming a fee that is neither a fixed fee nor an hourly fee.
A write-off created through the API with both hourly and fixed fees in it renders the mixed layout on the blade, in the same way as one created by hand.
The workflow block
A CreateFeesWriteOff block is available in the workflow designer, and creates a write-off from a collection of fee elements.
Use it to automate a write-off that follows from something else happening, for example writing off the remaining unbilled fees when a matter closes as abortive, or when a client-level agreement caps what can be billed.
Accounting and undo
A write-off posts on commit, and what it posts depends on the fee type and on whether revenue has already been recognised.
| What is written off | What posts |
|---|---|
| An hourly fee | Credits the hourly write-off account, and de-recognises the fee's work in progress. |
| A fixed fee with recognised revenue | Credits the fixed fee write-off account, and reverses the recognised work in progress. |
| A fixed fee with no recognised revenue | Posts the write-off entry only. There is no recognised revenue to reverse, so nothing is. |
| Any of the above, with split accounting on | The internal cost element posts to the costs account, and the remainder to the fees write-off account, rather than the whole amount going to the write-off account. |
Writing a fee off clears it from unbilled revenue
Fee actuals post to an unbilled revenue account when they are recorded. A write-off takes the fee out of that account, so the balance continues to match the fees the firm can still bill. That is the point of writing off rather than deleting.
What a commit records
A commit acts only on write-off items that have never been committed and never been undone. For each fee it takes, it:
- Records a negative revenue transaction, so the amount is no longer recognised as revenue.
- Records the write-off transactions against the configured account codes, separating the internal cost where revenue and costs are accounted for separately.
- Sets the fee actual's billing status to written off.
- Stamps the write-off item with a date written off.
- Writes an audit record and a chronology entry, and displays a Fees Written Off confirmation.
A commit does not remove the fees from the write-off work item. They stay on it, marked as written off, which is what makes an undo possible later. And because the chronology entry is written on the work item, a write-off is traceable from the matter as well as from the accounts, which is not true of every change to an hourly fee.
Undoing a committed write-off
A committed write-off can be undone. Undo reverses the accounting rather than deleting the record, so the decision and its reversal both survive.
Who can undo
Undo posts reversing financial transactions against the write-off, so it needs the same permission as editing the write-off: Sharedo - Update. This is the generic work item update permission rather than a write-off-specific one, and it is already granted to the primary owner and contributor roles on write-off-fees.
On the write-off list view, the Undo Write-off row action is offered only where that write-off has something to reverse and the user may update it. Undo is refused outright to a user without the update right, whichever route they take.
Undo from the fee actual list views
- Open the fixed fee or hourly fee actual list view.
- Select the written-off fees to reverse.
- From the bulk action menu, select Undo Write-Off.
What undo does
Undo acts only on write-off items that carry a date written off and no date undone. For each of those it reverses the revenue and write-off transactions, returns the fee actual to unbilled, and stamps a date undone. It also raises an undone event and writes an audit record and a chronology entry, in the same way as the commit did.
Undoing does not delete the write-off work item. Where every fee in a write-off is undone, the work item stays in place with its items marked as undone, which is what an auditor would expect.
Fees that were never committed are left alone
In a mixed selection, undo touches only the fees that were actually committed. Fees never committed, and fees already undone, are left completely untouched. A fee that is mid-write-off is still held by a live write-off, so releasing it would leave a fee reading as billable to one query and as written off to another.
Undoing compared with withdrawing
Undoing a write-off and taking it out of play are different operations, even though the same phase change runs both. Where a write-off moves into a phase carrying the undo phase feature, two things happen:
- Committed items are undone, as above.
- Items never committed are discarded. Their rows are removed, their work in progress postings are reversed, and their fee actuals return to unbilled.
The second step belongs to the phase change alone, and an undo request cannot trigger it. So a write-off that should be abandoned is deleted or rejected rather than undone, because only the phase change clears the uncommitted items away.
Troubleshooting
Write Off Fees is not in the bulk menu
| Cause | What to check |
|---|---|
| The list view has no bulk menu configured | The most common cause. Each fee actual list view has to name the bulk action menu to use when it is added to a portal page. Without it, no bulk actions appear at all. |
| The Fees Write-Off feature is off | The action is not offered while the feature is disabled. |
| The user lacks the write-off permission | Sharedo - Create - Write Off Fees. The action is hidden rather than displayed and refused, so it looks the same as a missing feature. |
A fee is marked as not eligible
Check the five conditions in Eligibility. In practice the usual causes are a fee that has not reached Approved yet, and a fee already sitting in another write-off that nobody has committed or deleted.



