ShiftledgerDemo

How it works

Last changed 2026-10-20. What each figure means and the rule behind it — so the screens can say less, and say it once.

The short version

You type when you worked. Everything else is worked out from that, using rules you set up once: what an hour is worth, and which hours attract which rate.

Nothing is stored as a total. Every figure on every screen is calculated again from the shifts and the rules, so correcting a shift you typed wrongly in March corrects that week, that month and every average it was part of.

And every figure is an estimate from your own rules — not payroll, not tax, and not what your payslip will say. What it is good for is telling you what your rules come to, and showing the arithmetic.

Entering a shift

A shift is a start, a finish and the breaks inside it. A finish at or before the start ran past midnight: 16:00 to 03:00 is an eleven-hour night shift, not a mistake.

A shift belongs to the day it started on. A night that starts on Sunday and ends on Monday morning is Sunday's work, in the week, on the calendar and in every total.

Breaks are real times, not a number of minutes, because a break is cut out of the worked time before it is priced. Half an hour at 21:45–22:15 takes a quarter of an hour off one rate and a quarter off the next; the same half hour at 18:00 comes off a different rate entirely.

Saving a week saves all of it at once — every line is written or none is. A line you clear is deleted. If the week was changed somewhere else after you opened the page, on your phone or in another tab, the save is refused and nothing is written: saving would otherwise delete what that page never saw.

Rates: one per hour

A rate is a percentage and the conditions it applies under: a window of the day, particular weekdays, a threshold of time already worked — or none of those, for a rate that applies to everything.

Every hour gets exactly one rate. Where two rates both claim an hour, the higher percentage wins, whatever kind of condition each has. Rates never stack.

An hour no rate covers is unpriced: counted in the hours, absent from the money, and said so on the screen. Nothing is guessed. A rate with no conditions covers everything the others do not claim — there is no built-in base rate, only one you add.

A weekday condition looks at the calendar day of each hour, unless the rate says to read the day the shift started. By the first, a Sunday-night shift that runs past midnight is priced at Sunday's rate until midnight and at Monday's after it; by the second, it is Sunday's throughout. Which one is right is whatever your contract says.

A rate can also apply only on public holidays — the days you keep under Pay rates → Holidays, added from your country's list or typed in by hand. A holiday changes nothing by itself: only a rate set to apply on holidays reads them.

Overtime

Overtime is a rate with a threshold of hours worked: it applies once so much has been worked that day or that week.

The threshold counts either from zero — after 8:00 that day — or from your contract's standard time: the first two hours beyond the contract day, then another rate after that. With 38 hours over 5 days, the contract day is 7:36.

Unpaid breaks do not count towards a threshold; worked time does. And an overtime rate is settled against an evening or night rate like any two rates: the higher percentage takes the hour.

Wages, and why last month never changes

A wage, a rate and your contract terms are each in force for a range of dates. Work is always priced with what was in force on the day it was worked.

So a pay rise is a new wage from a date, not an edit to the old one. Last month's total stays what last month's payslip said, and a rate changed from January prices December as it did before.

A guaranteed wage is a floor. Where your contract terms say so and it is higher than the contract wage, it is what an hour is priced at.

More than one job

If you work for two employers — a main job and a bar on Fridays — add the second under Employment, in Jobs. Each job has its own wage, contract terms, rates and payslips, chosen at the top of those screens, and the week asks which job each shift was for.

A shift is priced by its own job's rules alone. The bar's night rate never touches the main job's hours, and a threshold of hours counts that job's hours only: overtime after eight hours at one employer is not reached by the hours worked for the other.

A new job starts with nothing, so its hours are unpriced until it has a wage and a rate of its own — never priced at the main job's. What stays yours rather than a job's is time itself: one person cannot work two shifts at once, whichever job each is for, and the holidays and default shifts are the account's.

Rounding

Money is exact arithmetic in whole cents. An amount is rounded once per line — one work date at one rate and one hourly wage — and never again.

That is why the lines on a screen always add up to its total, to the cent, and why an average is worked out from the totals rather than by averaging rates.

The average hour is gross divided by hours across every rate: what your mix of ordinary, evening and night work actually comes to.

Worked, and entered ahead

You can type a week before it happens. A shift counts from the moment it starts, and not before: on a Monday morning, Friday's shift is entered ahead, not worked.

The overview, the calendar, the year and the comparison count only what has started, and show what is typed for later beside those figures as Entered ahead. The week you are typing into counts every line, and says how much of its total has been worked so far.

A shift that is under way counts in full, with the finish you typed. It is not cut off at the present minute — that would give it a finish nobody entered.

What is deliberately not here

No hours expected of you, and no balance. That could only come from a roster, which this application does not hold. Bars compare your days and months with each other and never with a target.

No tax, no deductions, no net pay. Gross is as far as hours, a wage and a percentage go. A payslip you type in is compared gross against gross, and its net figure is recorded and compared with nothing.

No timer. Times are typed, because that is what happens after a shift, and a shift typed the next morning is as good as one clocked.

Savings: actual and projected

A balance is the opening balance plus every entry in the ledger up to today. It is never a stored figure, so correcting an entry corrects every balance that came from it.

A projection is an estimate and always labelled as one: today's balance, plus the planned contributions still to come, plus interest at the rate you assumed. Interest is only ever projected — interest that really arrives is an entry you record.

An entry dated after today is in the ledger and not in the balance until its date arrives.

When a figure looks wrong

Open the day. Every day has a page that draws the shift from start to finish, marks which rate claimed which stretch, shows where the breaks came out, and writes each line as the multiplication it is.

Needs attention, under Week, lists every entry with no finish time and every day with unpriced time, across everything you have recorded — so a problem from three months ago does not wait for you to page back to it.

And if you type in what a payslip said, the Pay screen sets it beside what your rules estimated for the same dates — rate by rate, if you type its lines too, so a difference names the rate it sits in. A difference that keeps the same sign month after month is a rule to look at.