Support

Need help?

Most answers are already written down. For everything else, Oneop does not publish a response time — there is no SLA instrument behind one — so the fastest thing you can do is send a complete first message.

Search the help centreEmail support@oneop.ioOpen your workspace

Worth including

  • The email you log in with
  • The URL of the screen it happened on
  • What you expected, and what happened instead

Goes somewhere else

Finance

Reversals vs editing transactions: why auditability wins

By The Oneop team7 min read

TL;DR

A posted transaction is corrected by posting a new, linked, mirror-image entry that cancels it, never by editing or deleting the original. The reversal keeps both the mistake and the fix in the record, so the ledger can still explain how any reported figure was produced. Systems that allow edits in place cannot answer that question at all.

Every accounting system faces the same question on its first day: what happens when a user wants to change something that was already posted? There are two possible answers, and they produce two completely different products.

One updates the row. The other posts a new entry that cancels it. The second answer is slower, uses more storage, and is the only one that leaves you able to prove what your books said last quarter.

The rule: history is appended to, not changed

A posted transaction is a statement about the past. It says that on a given date, with a given reference, these accounts moved by these amounts. That statement was used: it fed a report, a tax return, a board pack, a covenant calculation, a commission.

Changing it does not make the past different. It makes the past unknowable. Once the row that supported March’s revenue figure has been edited, there is no longer any way to demonstrate what March’s revenue figure was when you published it, or that the difference between the old number and the new one was a legitimate correction rather than anything else.

So the rule is absolute rather than a preference: a posted entry is never mutated. Corrections are new entries that reference the old ones. The mistake stays visible, the fix stays visible, and the relationship between them stays visible.

How a reversal actually works

A reversal is a contra entry. It takes the original entry and posts the mirror image: every debit becomes a credit for the same amount, every credit becomes a debit.

An invoice for $1,000 plus $75 tax posts three lines: receivable debited $1,075, revenue credited $1,000, tax payable credited $75. Reversing it posts receivable credited $1,075, revenue debited $1,000, tax payable debited $75. The two entries sum to zero across every affected account, so the net effect of the pair is nothing, and both remain in the ledger permanently.

Three implementation details separate a real reversal from a cosmetic one.

The link runs both ways. The reversal names the entry it cancels, and the original records that it has been reversed. One-directional linking means you can start from the correction and find the original, but reading the original in a report gives no hint that it was cancelled.

The reversal is dated when you found the error, not when the error was made. Dating the reversal back to the original’s date puts the correction in a period that has probably been reported. Reversals post into the current open period, which is the same constraint that makes accounting period locks work.

An entry can be reversed once. A second reversal of an already-reversed entry posts the cancelling amount twice, leaving the accounts wrong by the exact value of the transaction, and it is the kind of error that hides well because both entries look individually correct.

After reversing, you post the corrected entry as a new transaction. The net result across three entries is the right numbers plus a complete explanation of how they were arrived at.

Void, reverse, delete

The three words are used interchangeably in software interfaces and mean very different things.

DeleteVoidReverse
What happens to the recordRemovedKept, marked cancelledKept, plus an offsetting entry
Ledger effectSilently disappearsNone, because there was none yetCancelled by a new entry
When it is appropriateA draft never postedA document with no ledger effect yet, such as an unissued invoiceAnything that has posted
Visible afterwardsNoYesYes, both sides
Safe in closed periodsNeverDepends on the documentYes, the reversal lands in an open period
Audit positionIndefensible for posted rowsAcceptable with a reason recordedThe standard

The decision rule is one question: has this affected the general ledger yet? If no, void it, keeping the document and the reason. If yes, reverse it. Delete belongs only to drafts, and a finance system that offers delete on a posted entry has told you what kind of system it is.

The restatement that could not be produced

A software company raises a funding round. Diligence asks a routine question: reconcile the monthly revenue in the management accounts against the statutory figures for the previous two years, and explain the differences.

The company’s accounting system permits editing posted invoices. Nobody abused this. Over two years, staff corrected amounts, changed dates, moved lines between accounts and fixed customer allocations, always for legitimate reasons, always by editing the original invoice and letting the ledger follow.

The reconciliation cannot be produced. Board packs from eighteen months ago show figures the ledger no longer contains, and there is no record explaining any individual difference, because each edit replaced its predecessor without recording it. Every discrepancy has to be investigated by hand from emails and exported spreadsheets that people happened to keep.

The result is not an accusation of fraud. It is six weeks of accountants at the company’s expense, a quality-of-earnings report with language about the reliability of historical records, and a materially weaker negotiating position for a founder whose books were honest the entire time. The cost of editable history is paid at the exact moment you can least afford it, and you cannot retrofit the fix, because the evidence that would have proved the books correct is the evidence that was overwritten.

A reversal-only system produces the same reconciliation as a query. Every difference is an entry, with a date, a user, a reason and a link to what it corrected.

What Oneop does

Oneop’s finance module has no path that updates a posted entry’s lines. Corrections post as linked mirror-image reversals, marked as reversals and joined back to the original in both directions, and the same entry cannot be reversed twice. The reversal must land in an open period, so a closed month cannot be reopened by reversing into it.

The invariants underneath are checked twice. Every posting path asserts that debits equal credits in the application before writing, and the ledger’s own transition to posted is re-checked by a PostgreSQL trigger that re-sums the lines and aborts the transaction if they differ, without trusting the application. The tolerance is a ten-thousandth of a unit, which is a float epsilon rather than a rounding allowance, so a one-cent difference is a rejection.

The same principle runs outside the ledger. Shipping stock posts the cost of goods inside the same transaction that decrements the stock, so the cost is recorded against the sale that produced it rather than reconstructed later, which is part of why inventory and the books do not need a reconciliation between them. The general argument for keeping operations and accounting on one record instead of syncing copies is made at why Oneop.

The test to run before you trust a ledger

Post an entry. Then try to change it.

If the system lets you edit the amount, you are not looking at a ledger, whatever the marketing says. If it offers to delete it, the same conclusion applies with more force. If it insists on a reversal, dates that reversal today, links it in both directions and refuses a second one, the books it produces will still be explainable in two years.

That property costs nothing while everything is fine, which is why it is easy to trade away. It is worth exactly what a diligence process, a tax inspection or a bank review is worth, on the day one of them arrives. The balancing rules that make reversals mechanically sound are covered in double-entry accounting for founders, and the broader argument for one durable record that automated actors write into rather than around is in the AI agent system of record.

Frequently asked questions

What is a journal entry reversal?

A journal entry reversal is a new entry that mirrors an existing posted entry, with every debit posted as a credit and every credit as a debit for the same amounts. The two entries net to zero, cancelling the original's effect on the accounts, and both remain permanently in the ledger linked to each other. The original is never altered.

What is the difference between voiding and reversing a transaction?

Voiding marks a document as cancelled and is appropriate before it has any accounting effect, such as an invoice that was never issued. Reversing posts an offsetting entry and is the only correct option once the transaction has posted to the ledger. The practical test is whether the general ledger has already been affected; if it has, reverse.

Why should a posted transaction never be edited?

Editing a posted transaction destroys the evidence of what was previously reported. Any statement, tax return or bank submission derived from the earlier figures can no longer be reconciled to the ledger that produced them. Once edits in place are possible anywhere, every historical figure becomes unprovable, including the ones that were never touched.

Do I need a reversal for a simple typo in a description?

No. A reversal corrects amounts, accounts, dates and anything else that changes the financial effect of an entry. Non-financial metadata such as a memo or an attachment can usually be amended in place, provided the change itself is recorded in the audit trail. The distinction is whether the change alters what the entry does to the accounts.

Can the same entry be reversed twice?

It should not be possible. A second reversal of the same entry would post an offsetting amount for a transaction that was already cancelled, quietly duplicating the correction and leaving the accounts wrong by that amount. A correct implementation records that an entry has been reversed and refuses any further reversal of it.

Written by

The Oneop team

Writing from the team that builds Oneop — an AI customer platform with web chat and email on top of a real CRM, help desk, ledger and warehouse.

Related reading

Start on the free plan and see the real thing

No credit card. Free plan, 2 seats.

Free forever · 2 seats · No credit card