What It Tells You
For every line, the review screen shows the date, description, amount, counterparty, reference and tag from the file, the field it resolved to (or unassigned), a guessed cost category, and any existing costs it might duplicate, each with a score, a confidence and the reasons in plain words. The import summary reports how many lines were imported, how many were skipped as re-uploads, how many have no field, each unreadable row with its line number and reason, and each column header the import didn’t recognise.How It’s Calculated
Reading the file. The header row is matched against the column names listed below. A file needs a date column and either an amount column or a debit and credit pair. Without those the import stops and says so. Amounts. Currency symbols, thousands separators and spaces are stripped. A value in brackets, such as(123.45), is negative. Money out is positive and a credit arrives negative. When there is no amount column, the amount is debit minus credit. A row with no readable amount, or a zero amount, is skipped and listed.
Dates. 2026-03-12 is read as ISO. 12/03/2026 and 12-03-26 are read day first. A two-digit year below 70 is 20xx, otherwise 19xx. An unreadable date skips the row.
Duplicates across uploads. Each line is hashed from its date, its amount to two decimal places, and its description and reference in lower case. A line whose hash already exists for the farm is counted as a duplicate and not created again. Re-uploading the same export is safe.
Field. The tag column (a Xero tracking category, a QuickBooks class, a Sage department, or a column named field or enterprise) is compared, case-insensitively, with the tags you have mapped to fields. A mapped tag assigns the field. An unmapped or missing tag leaves the line unassigned. The field is never guessed from the description. When you map a tag later, every waiting line with that tag and no field picks up the field.
Category. A first guess from keywords in the description and counterparty: fertiliser, spray, seed, fuel, labour, machinery or irrigation, and other when nothing matches. You can change it when you import.
Match suggestions. Each waiting line is scored against costs already in the profit and loss for the same farm, dated within 60 days either side, and on the same field when the line has one. Points:
- Amount: exact 50, within 1% 30, within 5% 15. Further apart, the pair is dropped.
- Date: 3 days or fewer 30, 14 days or fewer 20, 45 days or fewer 10. Further apart, dropped.
- Description: 5 per shared word, up to 10. Words of three letters or more, ignoring common ledger words such as ltd, invoice and farm.
- The existing cost was mirrored from the applications log or an earlier ledger line: 10.
derived_ledger, carrying the counterparty and reference as its note. A decided line can’t be decided again.
Worked example. A ledger line for £1,240.00 dated 12 March, described “Fertiliser Yara 34.5N”, scored against an application cost of £1,240.00 dated 10 March, described “Application cost (fertiliser, kg)”.
Where The Numbers Come From
Column headers the import recognises, in any order and any case:
The candidates a line is scored against are the existing cost lines on the farm, from whichever source: typed in, mirrored from the applications log, or imported earlier. A match suggestion is a score with reasons and is never applied on its own. A line’s status is one of unmatched, imported, duplicate or ignored, and the line records who decided it and when.
Limits
- Lines arrive by CSV upload only.
- One currency is assumed. Amounts are taken as written and set against the farm’s currency.
- The field mapping is the only thing the import trusts. Category and match suggestions are guesses for you to confirm or change.
- A line with no field can’t be imported. It waits until a tag mapping or your decision gives it one.
- Revenue isn’t imported. A credit line can be imported, but it lands as a negative cost, not as a revenue line.
Ledger lines from an accounts export flow onto the field map; an unassigned line waits.