Ledgr/Documentation/Job cards
Job cards
Watch the lesson: Run a job card from parts to invoice (2:07).
For work done for a customer rather than sold off a shelf — a repair, an installation, a callout. Parts and labour go onto the job as they happen, and the invoice is the job.
Job cards is included from Business upwards, beside inventory. See pricing. It sits there on purpose: a plumber, panel shop or IT support firm is exactly the customer this is for, and pricing it higher would put it out of reach of the trades it was built for.
On Starter it is available on its own as the Job cards & field service add-on at R199/mo.
The five tabs
| Tab | What it is for |
|---|---|
| Jobs | The list, searched and filtered on the server. Where you open one |
| Board | Jobs by state, dragged between columns |
| Dispatch | Who is doing what, and when — the week by technician |
| Contracts | Service contracts that raise their own jobs when a visit falls due |
| Reports | Job profitability, work in progress and time against quote |
Raise a job
- Job Cards → New Job
- Pick the customer and describe the work
What was reported, and what you have been asked to do. This is what the customer reads on the invoice later, so write it once and write it properly.
- Assign it
Who is doing it, and when it is scheduled for.
A job can also be raised from an accepted quote, which carries the quoted amount across with it. That is the figure the "over quote by…" column is measured against, and it is the first half of a chain that runs quote → job → invoice with all three links joined.
Raising a job card works with no connection — it queues and sends itself later, because raising the card is exactly what happens on somebody's driveway. So do the hours you log on it. What happens to the job — issuing a part, converting it — does not, and that split is deliberate.
The board
One column per status, in the order a job moves through them: Draft, Scheduled, In progress, On hold, Awaiting parts, Completed, Invoiced and Cancelled. Drag a card to move it; the columns it may go to light up, and one it may not is refused with both statuses named. Awaiting parts earns its own column because it is the state jobs get stuck in silently: the technician is waiting, the customer thinks you are working, and nobody is looking at it. Completed is the one to keep empty — it is finished work not yet invoiced, and the reason margin leaks when it is not.
Invoicing and cancelling are never a drag, because both do something besides move the card: Convert to invoice raises the invoice, and cancelling returns the parts. Use the buttons on the job. An invoiced or cancelled card is finished and does not move.
The Jobs list is searched and filtered on the server, so a job from last year is as findable as one from this morning.
Parts, labour and other costs
- Parts are issued from stock against the job. The stock movement happens at the point of issue, so what is in the van is out of the storeroom in the figures as well as in fact. This one needs a connection — see why.
- Labour goes on as hours at a rate, and the rate comes from the person's technician defaults (Reports → Technician defaults) rather than being typed each time. If you already log hours in time tracking, they can come from there — approved hours only.
- Travel is priced at the SARS rate for the year of the trip — R4.95 per kilometre for 2026/27 — so a job card and the same trip captured in expenses agree.
- Other costs — subcontractors, consumables, a callout fee.
Putting a real purchase on a job
The subcontractor's invoice and the parts you bought in for the job are already in Ledgr as an expense or a bill. Allocate them to the job rather than retyping them, and the job's cost becomes what the business actually spent instead of a re-keyed subset of it.
An allocated cost cannot be edited from the job side — what a job cost is a fact about the purchase, and Ledgr points you at the bill to correct it there. What the customer is charged is a decision about the job, so the markup and the billable flag stay editable here.
Each line carries what it cost you and what you are charging, which is where the job's margin comes from. A job that ran at a loss should be visible while you can still do something about the next one.
Dispatch — who is doing what, and when
The Jobs list answers "what is outstanding". Dispatch answers the different question a supervisor asks first thing in the morning: is the week actually possible? It lays the scheduled jobs out per technician per day and, above all, counts the double-bookings — the same person promised to two customers in the same slot, which is the failure a list view cannot show you and a customer finds out about by waiting.
Jobs with no date yet are held in their own group at the bottom rather than left out, because an unscheduled job is the one most likely to be forgotten.
Assigning somebody to a job emails them, if that switch is on — see notifications. Re-saving the same team emails nobody, and assigning yourself emails nobody.
Photographs — before and after
Photographs are what a disputed invoice actually rests on, so a job holds up to 24 of them, each tagged Before, After or General. Before and after are printed as their own strips on the customer's job report, which is what makes the tag worth setting rather than a filing detail.
- An after photo is refused while the job is still a draft or merely scheduled, because it is almost always a mis-tagged before.
- General is the default — a serial plate, a meter reading, the model number on the back of the unit — so a quick shot is never mis-filed as evidence of finished work.
- A caption can be added, and it appears both in the app and on the report.
- Photographs are evidence, not lines: they carry no price and gate no billing.
Service contracts
A monthly generator service, a quarterly inspection, an annual fire check. Set the cadence and the start date once, and each visit becomes an ordinary job card when it falls due — which is what keeps the costing, the invoice, the job report and the WIP balance working exactly as they do for any other job.
- Job Cards → Contracts → New contract
- Pick the customer, How often and First visit due
The first visit's date is the one every later visit is counted from, and it is tracked rather than drifting: a monthly contract whose first visit falls on the 31st gives 31 January, 28 February, then 31 March — the short month does not quietly move every later visit to the 28th. Ends on is optional; leave it blank for a contract with no end date.
- Let it raise the visits
Each falls due on its own date and appears on the board as a scheduled job. A contract that has fallen behind owes every visit it missed, not just the most recent one.
What a visit costs is a fact about the job card raised for it — labour at the technician's rate, parts at the product's — priced the same way every other job is. A figure on the contract would be a second version of the same number, and the two would come to disagree.
Sign-off on the customer's screen
Finishing a job captures the customer's signature on the device — an actual drawing surface, not a tick box — along with who signed and when. It appears on the job report and on the invoice raised from the job: the copy you download, the one emailed to the customer and the one they open from their link all carry it, with the signer's name, the date and the job card's number.
The signature is deliberately not required to complete a job. A signature pad that blocks completion is one people work around, which leaves the business with a false proof of work instead of an honest one. Ledgr would rather record that nobody signed.
Invoice the job
Converting a finished job raises a real invoice through the invoicing engine, with parts as product lines and labour as service lines. The invoice is linked back to the job, so a query three months later is answered from the job card rather than from memory.
Not a flat 15% on everything. A business with no VAT number is not treated as a registered vendor and its job invoices carry no VAT — issuing one that shows VAT you may not charge creates a liability to pay it over. Part lines bill at the rate on the product they are selling, so a zero-rated item stays zero-rated.
Raising the invoice creates a receivable, so Convert to invoice needs Approve on Job cards and Create on Invoices. A role that can run jobs but not raise invoices is refused, and so is one that can raise invoices but not approve jobs. Sign off on site needs the same Approve on Job cards, because it is the act that makes the job billable. Both are set in Roles & users.
Reports
Open jobs, work in progress, average margin and what is waiting to be invoiced. Work in progress is the number worth watching: it is cost you have already incurred and not yet billed, and on a bad month it is most of your cash.
Margin is only as honest as the cost rates behind it. Each person's charge rate and cost rate are set under Job Cards → Reports → Technician defaults, and new labour lines fill in from there. A person with no cost rate set is reported as not set rather than as zero, because an unset rate would otherwise show every job at 100% margin.
Common problems
| What you see | What to do |
|---|---|
| A job card will not move to the status you want | Ledgr names both statuses in the refusal. An invoiced or cancelled card is finished and cannot be moved at all — its figures are in the books. Raise a new card rather than reopening a closed one. |
| "These hours have not been approved yet" | A job card imports only approved time. Approve the entries in Time tracking first — this is the same rule that applies when you bill hours onto an invoice, and it exists so a business running timesheet approvals cannot have them bypassed by whichever billing route somebody used. |
| "These hours are already on job card JC-…" / "already been invoiced" | Exactly what it says: those hours are accounted for. Ledgr names the card so you can open it. Importing them again would bill the customer twice. |
| "That slot overlaps work already booked for this technician" | Someone is already scheduled then. Move one of the two, or assign a second technician. |
| A part will not issue | Either there is not enough on the shelf — Ledgr names the location and both numbers — or no stock location is set up for the company yet. Issuing a part moves real stock at its batch cost and posts to the ledger, so it cannot proceed on a figure nobody holds. |
| Every job reports a 100% margin | Labour cost rates are not set. Set each person's rate under Job Cards → Reports → Technician defaults; new labour lines fill in from there. A rate that is not set reads as "not set" on the reports rather than as zero — but a line already captured with no rate does cost nothing. |
| A signature or photograph will not attach | A finished card refuses new photographs, and an after photo is refused while the card is still a draft or only scheduled — almost always a mis-tagged before. A card holds up to 24. |
| "Sign off on site" or "Convert to invoice" is not on the job, or converting is refused | Your role is missing a permission. Both buttons need Approve on Job cards, so without it neither is shown; converting also needs Create on Invoices, and without that the conversion is refused. An owner or admin can add them in Roles & users. |
| A service contract raised no job card | Contracts generate on a daily schedule, not on save. Each visit becomes an ordinary job card dated for the day it is due; a contract several visits behind raises all of them. If nothing appears at all, check the contract's next-due date has actually passed. |