A workshop sells a job in two halves it runs completely differently. Parts have a purchase price, a markup, a supplier and a shelf. Labour has an hourly rate, a technician and a bay. Most shops know the total they charged and cannot separate the two afterwards, which means whichever half is losing money is the half nobody can see.
Workshop software here means a job card that carries its own money: the vehicle and its history, the complaint, parts issued at cost and at price, labour hours booked to a technician, and who is actually paying — the owner, an insurer, or a principal under warranty.
A job invoiced at fourteen hundred ringgit might be eleven hundred of parts at a thin markup with three hours of labour on top, or the reverse, and those are two entirely different businesses wearing the same total. Parts margin is set by what you paid the supplier and what you charge off the shelf, and it moves every time a supplier reprices. Labour margin is set by the hours you sold against the hours you paid for. A shop that records one number per job can improve neither, and the usual response — putting a few per cent on everything — is the response that loses the price-sensitive customer and keeps the unprofitable job.
The second problem is that a workshop has three kinds of customer wearing the same overalls. A retail owner approves the quote and pays at handover. An insurance job needs an adjuster's figure before work starts, is billed to the insurer at their agreed rate, and pays weeks later, sometimes short. A warranty job is billed to a principal or distributor against a claim that has its own format, its own deadline and its own rejection reasons, and it comes back rejected on a technicality months after the car has gone. Same bay, same technician, three completely different money cycles, and in most shops all three go into the same book.
Third is utilisation, which is the number that decides whether being busy is worth anything. Hours sold against hours the technicians were actually present is the whole question, and a shop that cannot answer it cannot tell whether the fix is another technician, another bay, or fewer discounts. A workshop full of cars waiting on parts looks identical from the road to a workshop full of cars being worked on.
Then history. The same car comes back and nobody can find what was done last time, so the diagnosis starts again and the customer pays for it twice or you absorb it. A comeback — the job you redo at your own cost — is the most expensive event in a workshop and the least recorded, because writing it down means writing down that it happened. And the car that should have come back and did not is the quietest loss of all: a service interval that passed with no reminder sent.
The instinct is to build the customer first and hang cars off them. That loses the history at the first resale, and used cars change hands constantly here. The record is built the other way round.
The pad, the whiteboard, a handful of insurance and warranty files, and a supplier invoice. We are looking for the states the shop already uses and the fields the front desk fills without being asked, because those are the ones that will still be filled in month three.
Cars first, with whatever history exists imported and keyed on registration and chassis. Duplicate cars from misheard plates get a merge path that carries the jobs across, because the register degrades every month without one.
One screen, keyboard-first, states matching the board. If opening a job takes longer than writing it on the pad, the pad comes back inside a fortnight and everything after this step is wasted.
Supplier, cost, charged price and stock movement on the same line. Reorder levels and a goods-received screen, so the stock figure is maintained by the work rather than by a monthly count.
Hours booked to a named technician at the rate in force. Hours sold against hours attended, per technician and per week, which is the report that changes hiring decisions.
Retail, insurance and warranty each with their rate, their approval gate and their document. Claim states tracked to submitted, paid, short-paid and rejected, so the receivable on the panel side is a figure rather than a folder.
Service-interval reminders on the channel your customers actually read, and the whole system in your own GitHub, Supabase and Vercel accounts.
It is worth knowing exactly where the consolidated route stops for a workshop. LHDN's list of activities that cannot use a consolidated e-invoice names the automotive sector, but the activity it names is the sale of a motor vehicle. Repair and servicing are not on that list. So a shop doing service work can report walk-in retail customers who do not ask for a document through the consolidated summary, and on the day it takes a car in on trade and sells it, that transaction needs an individual e-invoice regardless. A workshop with a used-car corner is running both routes at once, and that is the position to confirm with your tax agent before anything is wired.
The exception that breaks a consolidated batch is the customer who asks. Company cars, salesmen claiming from an employer, anyone running the vehicle through a business — they will want an individual e-invoice with their own TIN on it, and that job then has to come out of the summary. If the system cannot promote a single job card out of the consolidation, the front desk either turns the request down or the same money gets reported twice.
Insurance and warranty work is the opposite case and it is never consolidated: the buyer is a company with a TIN and it wants a proper document against the claim. The TIN, registration and address belong on the payer record at booking rather than being chased at month end from a list of company names, which is a customer-creation problem rather than a submission one. Insurers also have their own self-billed situation for claim and compensation payouts, so who issues which document in your panel arrangement is worth settling in writing with each insurer and with your tax agent before the first submission.
On the buying side, a shop that takes a car or used parts from a private individual is acquiring from a person not conducting a business, which is one of LHDN's named self-billed situations. That means the workshop may be the party that has to issue the document. 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 workshop. Fixed price from scope, on your own accounts, with no per-bay or per-technician licence.
Vehicle register with history, job cards with your own states, parts at cost and price with stock at issue, labour by technician, invoicing, roles and audit trail.
Enterprise tier. The above plus insurance and warranty payers with approval gates and claim states, technician utilisation, parts purchasing, MyInvois with both submission routes, migration and training.
Published add-on rate. Booking confirmations and service-interval reminders on the number your customers already message you on, driven off the vehicle register rather than a separate contact list.