A bookkeeping system built around the quarter you have to report on, not around a spending dashboard.
Postings that balance, a trial balance you can pull at any point, and a drill-through from every total to the individual entries behind it. The ledger is the record; the reports are just views onto it.
Import a CSV statement and the matching engine pairs it against the ledger, with duplicate detection on the way in. You are left reviewing the handful it could not settle rather than the whole file.
Income and expenses totalled into HMRC's published categories for self-employment and UK property. Figures are cumulative year to date, because that is what a quarterly update reports.
Run a trade and a rental property and they stay apart, each with its own totals against its own HMRC field set, rather than being flattened into one pot you have to unpick later.
Lock a quarter once reviewed so the figures behind it stop moving. Control checks flag uncategorised transactions and categories with no HMRC mapping, and each one comes with the action that clears it.
Adapters for Sage and Xero write the layout each package expects, plus plain CSV for anything else. Your accountant imports the quarter instead of rekeying it.
Compare one period against another, ranked by the size of the movement, with the transactions driving each swing one click below. Useful for spotting a miscoding before it reaches a return.
Write rules that categorise transactions as they arrive and map each category to its HMRC field once. After the first quarter, most of a statement files itself.
No bank connection: you import statements yourself, so you choose what reaches us and when. Everything exports back out, and nothing about your books is sold or shared.