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.

Plan.

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

TabWhat it is for
JobsThe list, searched and filtered on the server. Where you open one
BoardJobs by state, dragged between columns
DispatchWho is doing what, and when — the week by technician
ContractsService contracts that raise their own jobs when a visit falls due
ReportsJob profitability, work in progress and time against quote

Raise a job

  1. Job Cards → New Job
  2. 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.

  3. 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 does the rest of the work done there: the hours, issuing a part off the van and bringing one back, moving the job along, the customer's signature and the photographs. Each is saved on the device and sent once when there is signal, and the card shows it straight away. Converting the job to an invoice does not queue, 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 — except that voiding a job's invoice hands the job back: it returns to Completed (the history says which invoice was voided), its parts, labour and hours are back on the job to bill, and converting it again bills only work no live invoice already holds.

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. With no signal the issue is saved on the device and the movement happens when it syncs, once.
  • 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.

Work counted in units — bays, points, metres

Not all labour is paid by the hour. In Add labour, set Measured in to Units of work and record the count and what a unit is: Thabo, 3 bays is one line, with a charge-out rate and a cost rate per bay. The job costs 3 × the cost rate and charges 3 × the charge-out rate; on the invoice it is its own line — "Bay — Thabo" at a quantity of 3. A person's hourly default rates are not used on a units line, because they are per hour. A line brought in from a timesheet stays in hours. If payroll pays the work per unit, choose Paid through payroll as — for example Bay installed — and Payroll's Pull from Job Cards pays the count at that person's own rate once the job is completed.

Bays per installer this month

In Reports → Job profitability, choose Per technician and This month (or Last month). Each person's work is counted by the date it was done, not the date the job was opened, so a job opened at the end of one month and worked in the next shows in the month the work happened. Where anyone counted work in units, the table adds their units — "5 bay" — with the cost per unit and revenue per unit.

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.

The amount is the document's; the markup is yours.

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.

Telling the customer you are on the way

Tap On my way on the job when you set off. The customer is sent one message by email and, where WhatsApp is set up, one by WhatsApp, saying who is coming from your business for which job. It goes once for each visit: tapping it again for the same visit tells you they were already told, and sends nothing.

  • A visit is the day the job is booked for, or today for a job nobody scheduled.
  • Turn either message off in Settings → Notifications (Technician on the way). A customer who asked not to be sent updates is never sent one.
  • If nobody could be told — the switch is off, or the customer has no email address or phone number — the button says so.
  • Each WhatsApp message counts towards your plan's WhatsApp allowance, like every other one Ledgr sends.

The customer's unit and its service history

A job can be on one of the customer's units — a boiler, a generator, an air-conditioner — recorded in Inventory's serial register. Give a service contract the unit too, and every visit it raises is on that unit. Look the serial up in Inventory and its Service history lists every job it has been on, newest first, with the contract that raised it.

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.

Checklists and certificates

A checklist is the set of checks a kind of job needs — a gas installation, an electrical certificate of compliance, a pre-delivery inspection. Write it once as a template (Add checklist → New template on any job), then add it to each job of that kind.

  • Each item is a tick, text (a serial, a remark), a number (a pressure, a resistance) or a photo — one of the job's photographs chosen as the evidence for it.
  • An item is required unless you untick Required. While a required item is open the job cannot be completed, from the status menu or from the customer's sign-off, and the message names every item still open.
  • The items are copied onto the job when you add the checklist, so changing the template later never rewrites a job that is already done.
  • The answers, and who gave them, print on the job report. A template with a certificate title also prints a certificate of its own once nothing required is open.
  • Answers can be given with no signal; they are kept on the phone and sent when it reconnects. Adding a checklist to a job needs a connection, because the template comes from Ledgr.

Your own vehicles' services

When one of your vehicles goes past its service interval — its kilometres or its months, set on the vehicle's service plan in Logistics → Servicing — Ledgr puts a scheduled Service job card for it on the board, against your company's own contact (“your company (own vehicles)”). Nobody has to read the odometer. There is only ever one open service card per vehicle. Record the service in Logistics and the card is completed, and the vehicle's next service is counted from that one. If you complete or cancel the card on the board instead, Ledgr takes that as your answer for this service and raises no new card until a service is recorded in Logistics — which is also the only way the vehicle's next service date moves on. This needs Job Cards on your plan.

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.

  1. Job Cards → Contracts → New contract
  2. 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.

  3. 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.

A contract carries no price.

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.

Service targets — response and resolution times

A service contract can promise how fast each priority of job is answered and fixed — for an IT support business, "an urgent job answered in one hour and fixed in eight". Set the targets per priority on the contract.

  • A job logged for a customer with one such contract takes its targets when it is created; a contract's own visits take them too. The targets are copied onto the job, so changing the contract later never moves a deadline a job is already running against.
  • The clock counts only business hours: set them on the Service contracts tab, or give one contract its own. South African public holidays are closed unless you say otherwise.
  • The response clock stops when the job is first moved to In progress; the resolution clock when it is completed. While the job is On hold — waiting on the customer — neither runs.
  • At three quarters of either target the job's technicians get one push notification (Service targets in Settings → Notifications), or whoever approves job cards when nobody is assigned.
  • The job shows each target as met, breached or open, and Reports → SLA met totals them by customer or by technician.

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.

It charges the VAT you may actually charge.

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.

Converting needs two permissions.

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.

Deposits and progress invoices

A long job can be billed as it goes. In Convert to invoice, choose what to bill:

  • Deposit or Progress % — a percentage of the job's billable value, as one line.
  • Chosen lines — the labour, parts or costs you tick, billed as they are.
  • Everything left — the final invoice. It bills every line not already on a live invoice and deducts each deposit and progress percentage at the amount it was raised for.

So the invoices add up to the job's value exactly once. A deposit or progress invoice leaves the job open, and the parts' cost moves from work in progress to cost of sales only when the final invoice is sent — in the month of its date, the month its sales are counted in — so a draft that is never sent leaves it in work in progress. Stages may not add up to 100% or more — the final invoice always bills the rest — and a deposit the final invoice has deducted cannot be voided until the final invoice is voided first.

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 seeWhat 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.