Modules / Hire
Equipment hire
Know what is out, what is due back, what it has earned so far, and who has not paid — for a business that hires equipment out by the day or the week.
People ask for it as: “what's out and what's coming back”, “who hasn't paid”, “we run it off a whiteboard”, “hire out our kit”, “the yard”
Who uses it
| Role | Does | Sees |
|---|---|---|
| The owner | everything — books, returns, bills, records payments, writes off, sets rates and terms | everything |
| Yard staff | books equipment out, extends, takes returns, adds a builder who turns up | the board, hires, fleet and customers — never money |
| The system | works out days out, charge so far, what is unbilled, what is overdue, who owes what | everything, through its own service account |
What it has to do
Reference user stories. Each has a test written into it — the given / when / then — which becomes an automated check once it is built. Expect to keep some, change some and drop some.
Things people do
HIRE-01As the yard, I want to book equipment out to a builder, so that the whiteboard has a replacement.
Given a builder, a start date, a due-back date, and items — a digger by fleet number, 40 scaffold boards by quantity · when I save the hire · then the items show as out; a serialised item already out is refused, naming the hire it is on; bulk stock is refused beyond what we own minus what is out; each line copies the day and week rate from the rate card at booking
Yard staff · screen: New hire · reference: not built
HIRE-02As the yard, I want to see what is out right now, so that I know where the fleet is.
Given open hires · when I open the board · then every open hire shows the builder, the site, the items, the date out, the date due and days out so far, ordered by due date
Yard staff · screen: Board · reference: not built
HIRE-03As the owner, I want to see what is coming back this week and what is late, so that I can chase and plan the next booking.
Given one hire due Tuesday and another that was due last Friday and is still out · when I open the board · then Tuesday's is under "due this week" and Friday's under "overdue" with days late — worked out from today's date, never stored
The owner · screen: Board · reference: not built
HIRE-04As the yard, I want to record a return, so that the item can go out again and the hire can be billed.
Given an open hire with a digger and 40 boards · when I record the return, with the quantity back and any missing or damaged count · then those items are available again from that date, a partial return leaves the rest out, and the hire closes when every line is back
Yard staff · screen: Hire · reference: not built
HIRE-05As the yard, I want to extend a hire when the builder rings to keep it longer, so that the board shows the real date.
Given a hire due Friday · when I set the due date to next Wednesday · then the board updates and the change is recorded with who made it and when
Yard staff · screen: Hire · reference: not built
HIRE-06As the owner, I want to raise a bill for a hire, so that short jobs are billed on return and long ones are billed monthly.
Given a hire with days not yet billed · when I raise a bill · then it covers each line from the day after its last bill (or its start) to today or its return date, both ends counted; the amount is fixed on the bill; the due date follows the terms; a hire with nothing unbilled is refused
The owner · screen: Hire · reference: not built
HIRE-07As the owner, I want a message I can send the builder with the bill, so that billing stays a text and a bank transfer.
Given a raised bill · when I copy the text · then I get the builder's name, what was on hire and for how long, the amount, the bank details and the due date, ready to paste — and the send is recorded
The owner · screen: Hire · reference: not built
Usually different per customer: some businesses want a real invoice here instead — that is the invoicing module, not this one
HIRE-08As the owner, I want to see who owes me money and for how long, so that I know who to ring this morning.
Given bills with unpaid balances · when I open the unpaid list · then each builder shows their total outstanding, their oldest unpaid bill and days past due; a bill that is settled drops off
The owner · screen: Unpaid · reference: not built
HIRE-09As the owner, I want to record a payment, so that a builder who settles three bills with one transfer is handled properly.
Given a transfer of 1,200 against three unpaid bills · when I record it and spread it, oldest first · then each bill's balance falls by its share, any leftover stays as credit on the builder, and paying more than a bill's balance is refused
The owner · screen: Unpaid · reference: not built
HIRE-10As the owner, I want a list of my equipment, so that every hire is booked against something real.
Given the fleet · when I add a machine by fleet number, or a bulk line with the quantity owned · then it becomes available to book, and taking it out of service hides it from booking without losing its history
The owner · screen: Fleet · reference: not built
HIRE-11As the yard, I want a list of the builders we deal with, so that every hire and payment hangs off the same one.
Given a new builder on the phone · when I add them with a name and a mobile · then they exist once — adding the same mobile again reuses the record, through the shared customer list
Yard staff · screen: Customers · reference: not built
HIRE-12As the owner, I want rates and terms where I can edit them, so that a price change never needs a developer.
Given the rate card · when I change the day rate for a machine type · then new hires take the new rate and hires already out keep the rate they were booked at
The owner · screen: Settings · reference: not built
HIRE-13As the owner, I want to write off a balance that will never be paid, so that it stops showing on the unpaid list.
Given a bill with a small leftover balance · when I write it off with a reason · then the balance clears, the write-off is recorded with who and when, and the bill drops off the list
The owner · screen: Unpaid · reference: not built
HIRE-14As the owner, I want to see which long hires are due a bill, so that scaffolding out for months never goes unbilled.
Given a hire out 35 days with no bill, and one billed 10 days ago · when I open the to-bill list · then the first is listed with its unbilled days and charge so far, the second is not, and anything returned but not fully billed is always listed
The owner · screen: Unpaid · reference: not built
Things that happen on their own
HIRE-20on read (derived)The system works out days out, the charge so far, what is unbilled, what is overdue and who owes what whenever anyone looks, so that nothing is stale and no overnight job can be missed.
Given a hire out since the 1st at 80 a day and 400 a week, not yet returned · when it is opened on the 10th · then it shows 10 days out (both ends counted) and 480 — one week plus three days, because three days at 80 is less than another week — and opening it twice gives the same answer
· reference: not built
Things that cross into other modules
HIRE-30when a builder is addedThe builder is created or reused in the shared customer list, so that invoicing later means the same builder.
Given business-partner is installed · when the yard adds a builder · then a partner exists, created or reused on the mobile number, and hire never writes the partner table itself
· owned by business-partner · reference: not built
How things move
hire
out → returned
- none → out by owner or yard · when a builder, at least one line, a start and due date, and the items available · items unavailable from the start date; rates copied onto the lines
- out → out by owner or yard · when the new due date is not before the start · extension recorded with who and when
- out → returned by owner or yard · when the return date is not before the start; bulk quantity back is not more than the quantity out · items free again; the hire closes when every line is back
bill
raised → paid
- none → raised by owner · when at least one unbilled day on the hire · period, amount and due date fixed; the text can be copied
- raised → paid by system · when balance reaches zero · drops off the unpaid list
What it keeps
| Thing | Meaning | Identified by | Shared? |
|---|---|---|---|
| equipment | one machine, or a stock line of identical items | equipment_code (the fleet number, "D-03", or the stock code, "BOARD-2.4") | module-owned |
| rate | what a type of equipment costs per day and per week | equipment_type | module-owned (configuration) |
| hire | one booking, to one builder, from one date | hire_no (H-<year>-<n>, from a high-water-mark row — there are no sequences here) | module-owned |
| hire line | one item, or a quantity of stock, on a hire | hire_noequipment_code | module-owned |
| bill | a charge for a period of a hire | hire_nobill_no | module-owned |
| payment | money received from a builder | payment_id (derived from the date, the builder and the bank reference, so a re-entry is not a second payment) | module-owned |
| allocation | how much of a payment or write-off settles which bill | source_kindsource_idhire_nobill_no | module-owned |
| settings | terms, bank details, the monthly-billing threshold and the message wording | key | module-owned (configuration) |
A hire business that later wants proper invoices, statements or tax needs the same builder in both places. Reference the shared partner from the first booking.
Questions that shape your version
Read these out and let the customer correct one — people rarely recall a policy on demand and can always react to one. Standard is a named authority you can look up and hold us to. Commonly seen is exactly that: arrangements we have met, with no survey behind them. A customer doing none of them is not doing it wrong.
- Do you hire by the day, the week, or both — and do both ends count as days?
- tool and plant hire
- day rate with a cheaper weekly rate, and both collection and return days charged
- event hire
- a flat rate per booking rather than per day
- warning
- whether the return day is charged is the single most argued line on a hire bill
- Is anything hired in bulk, where you count what comes back?
- Do you bill when it comes back, or along the way for long hires?
- Do you need proper invoices with tax, or is a message with the amount enough?
- Does anyone but you handle money?
- Do you take deposits or charge for damage?
- consumer hire
- a card deposit taken up front and released on return
- trade hire
- no deposit for account customers; damage billed after inspection
What you can change yourself
These are settings, not code: someone in your team changes them on a screen, without a developer and without a release.
- day and week rates per type of equipment
- the fleet, and what is in or out of service
- payment terms, bank details for the message, how many unbilled days make a long hire due a bill, and the wording of the message
Where the platform limits what we can promise
Hire numbers come from a high-water-mark row, and concurrent inserts of the same key are currently all acknowledged with one row surviving. one writer issues hire and bill numbers, and the number is re-read after saving
For builders
- Module spec — this page, for agents
- The lifecycle and the design template
Known gaps in the reference
- no package yet — this spec is the vocabulary a build starts from
- no tax, statements or numbered invoices: that is the invoicing module
- no deposits or damage waivers
- no transport or delivery scheduling, which a larger hire business will ask for
- no maintenance or inspection records against a machine (LOLER, PUWER) — a legal requirement in some markets