A contractor is paid on a certificate, not on an invoice. The claim goes in at one figure and comes back certified at another, and the difference is argued, carried forward or quietly written off. Most site offices track the claim they sent and the money that arrived, and nothing in between.
Software for a contractor here means a claim ledger held against the contract: every progress claim recorded with the amount claimed, the amount certified and the amount actually invoiced, with variations, retention and subcontractor payments hanging off the same contract record.
Every piece of work on a contract exists as three different figures and they are rarely equal. There is what you claimed, what the consultant certified, and what you have actually invoiced. A site office keeps the first properly because it typed it, and the third because the accounting package holds it. The middle one arrives as a signed certificate, gets filed, and is never reconciled against either. Certified-but-unbilled is the purest money in the business: nobody is disputing it, it has been agreed in writing, and there is no row anywhere saying it is outstanding.
Variations are the second leak and the slower one. Work gets instructed on site, sometimes in writing, often in a message or across the bonnet of a truck. It gets built. It gets priced weeks later if anyone remembers, and it surfaces at the final account as an argument between a quantity surveyor holding a file and a project manager holding a memory. A variation that was not logged in the week it was instructed stops being a variation and becomes a claim you will discount to settle.
Then retention, which goes missing quietly rather than dramatically. A percentage is held on every certificate up to a cap and released in two events years apart: part at practical completion, the rest when the defects liability period expires. Both are dates. Neither is a date anybody diaries, because the contract that set them is in a lever-arch file and the person who negotiated it has moved on. Carrying a five-figure retention balance across three finished jobs and discovering it only when the bank asks what the debtors figure is made of is an ordinary event in this trade.
The payment side has its own arithmetic and it does not line up with the first. You are paid by certificate; you pay subcontractors against their own claims, less back-charges, less retention held on them. Making the sub wait until the employer pays is the obvious response and it is also void — section 35 of CIPAA 2012 makes a conditional payment provision of no effect, whether it makes payment contingent on having been paid by a third party or on funds being available. So the position has to be managed with a real view of what is certified, what is due out and when, rather than with a clause that will not hold.
Generic accounting software models a customer and an invoice. A contract is neither. It is a long-running agreement with its own retention terms, its own certification cycle and its own end dates, and a contractor running eleven jobs has eleven sets of terms rather than one company policy.
One contract in progress, with its last three claims, the certificates that came back, the VO list as it stands and the subs' current claims. We are looking for where the certified figure lives today and who is the only person who knows it. That person is usually the system.
Retention percentage and cap, defects liability period, payment period, certifying party, contract sum. Before any transaction screen exists, because every claim, release and reminder derives from them and retrofitting terms under a running ledger is the expensive kind of rework.
A claim is entered at what you claimed and updated with what was certified, keeping both. Only certified work becomes eligible for an invoice, which puts the reconciliation before the tax document rather than after it.
A one-screen record created the day work is instructed, with the price added whenever it is agreed. The register is the deliverable here: at any moment, what has been instructed, what is priced, what is agreed and what is still open.
The balance accrues per certificate and the release events are dated from the contract terms. A retention release becomes a task with a date on it instead of a discovery.
Sub claims, back-charges and retention on subs, with what is certified in and what is due out visible side by side. This is the screen a contractor actually opens on a Friday.
Your GitHub, your Supabase project, your Vercel account. Contract records outlive the contractor's relationship with any software vendor, and they should not need our cooperation to reach.
Most sectors on this site have a fallback. A shop or a workshop serving walk-in customers who do not ask for a document can report those takings through LHDN's consolidated route as a periodic summary. Construction is named among the activities that cannot use it: the guideline's list of transactions excluded from consolidation covers construction contracts, alongside wholesalers and retailers of construction materials by reference to the CIDB Act. The practical bite is at the small end. A contractor doing renovation work directly for homeowners has to issue an individual e-invoice to each of them, and that is precisely the work most likely to be running off a quotation pad today.
The second thing to get right is when you submit. A validated e-invoice has a short window in which it can be cancelled or rejected, which LHDN's guideline sets at 72 hours; after that, an amount only changes through a credit or debit note against the original. Progress billing collides with this head on, because the figure you claim is not the figure you will be paid. Submit on the claim and you will issue a credit note on nearly every job. Submit on the certificate and you will not. That is a sequencing decision, not a software feature, and it is why certification is modelled as a state the claim has to reach.
Retention deserves an explicit decision rather than whatever the software does by default. Whether the document carries the gross certified amount with the retention shown as a deduction, or the net figure only, changes what your employer's accounts payable reconciles against and what the release document has to look like two years later. That is a filing position and it belongs to your tax agent. What belongs to us is that the system can produce either, and can link a release back to the certificates the money was held on.
On the buying side, small subcontractors and individual tradesmen will not be issuing you e-invoices. LHDN's self-billed mechanism covers a defined set of situations, and acquisition from an individual taxpayer who is not conducting a business is one of the named ones. Whether a particular sub falls inside it is your tax agent's call. Whether your system can produce a self-billed document at all is ours, and most contractor accounting packages cannot. The last mandate band came into force on 1 January 2026 for turnover up to RM5 million, with those under RM1 million exempt.
Published tiers, seen from a site office. Fixed price quoted from scope, hosted on your own accounts, with no per-project or per-seat licence as the contract count grows.
Contracts with their own retention terms, progress claims with certified kept apart from claimed, the variation register, invoicing from certified work, roles and audit trail.
Enterprise tier. The above plus subcontract claims and back-charges, the retention ledger with both release events, cost to contract and margin per job, MyInvois submission, migration and training.
Starter tier. Five pages built to survive a prequalification check: registration grade and category, completed projects with real values and dates, a short enquiry form.