Self reporting is cumbersome and error prone.
Not if well designed. When the RUC is in effect and an EV driver goes to Service NSW to pay their rego online, they already know whether you own a vehicle that is subject to the RUC, and whether a rego inspection is required or not.
Some simple software says (if vehicle is subject to RUC) and (vehicle is less than 5 years old) then (ask owner to submit odometer reading). Simple data validation would check whether the number entered is greater than the number from the previous year. If not, the entry would be rejected and you would be asked to enter it again.
Also if the odometer reading looks suspiciously low a popup could ask for positive affirmation that the value entered is true and correct, with a warning that entering false data is fraudulent and punishable by a fine of $X or whatever.
And if someone is setting out to break the law and deliberately circumvent the system, it will all catch up with them at year 5 when an independent party enters the odometer reading, or at the time of sale if registration is transferred in less than 5 years, since the buyer would insist on seeing the odometer reading and not sign a transfer with an understated reading on it. Otherwise, they end up paying the RUC at next rego.
Tolls can be targeted and has zero operational cost and no errors.
I don’t think using existing tolling as a proxy is suitable. It’s not sufficiently representative (e.g. there are no toll roads in NSW outside of metro Sydney) and would simply encourage further toll avoidance behaviour.