Your people
Employees and staff meals
Menu: Setup → Employees · Who: owner and HR (a branch manager reads their own outlet)
An employee is not a user
A cook who never logs in still eats; a cashier who does has both rows. Minting a login for every dishwasher just so the canteen could count their lunch is not a system, it is a chore.
An employee belongs to a company and to at most one branch. Head office is a real answer, not a gap.
The book
| Field | Notes |
|---|---|
| Code | What the cashier types at the till. Unique per company |
| Name, CNIC, photo, designation | |
| Branch | Or Head office |
| Rider | See Riders and delivery |
| Meal allowance | Per calendar month |
| Salary | Read only by HR, the owner, and anybody the owner grants it to |
| Joined / left | Somebody who has left keeps their history |
Allowance and salary are dated rows, not fields
Nothing is ever edited in place. A correction is another row, and the row in force on a date is the latest one dated on or before it. So a report for March keeps reading March's figure, and a raise entered today for next month moves nothing today.
The figure on the record is a cache of the row in force right now, rebuilt nightly — which is what brings a dated raise into force with nobody touching anything.
Who reads a salary
- HR reads it by definition — that is the job.
- The owner grants it to anybody else (Setup → Users, Can view salary) — an accountant sees the payroll without being made HR.
Withheld salary is absent from the screen, never blank, so nobody reads "you may not see this" as "nobody set one".
HR is not an owner: no settings, no billing, no catalog, no stock, no day close, no till. HR reads the Staff reports and nothing else.
Sellify's AI assistant is never asked about staff pay. Salary and what the canteen costs are out of its reach entirely — a scope decision, not a budget one.
A staff meal at the till
The cashier rings the food, attaches the employee by code, and is told the name, the allowance and what is left.
The entitlement outranks every offer. A campaign, a promo code and a customer's standing discount all step aside (the code is reported as not applied, never silently dropped), and a typed manual discount is refused in a sentence — the cashier chose one or the other and has to be told which.
What is covered
The lesser of what is left and the goods. Allocated across the lines before tax, so a fully covered meal comes to zero with the tax as well. The delivery charge is never covered. The till shows covered and to pay and computes neither.
Two rules that do not apply here
- The company discount cap does not trim it. A fully covered meal is the normal case, and this is not a cashier's decision.
- No manager PIN. The allowance is the authority.
(
approvals.staff_meal_requires_pinexists for a shop that disagrees.)
Nothing left is not a refusal
The meal is rung, the entitlement covers nothing, and the employee pays for all of it. Refusing a hungry cook at the counter because the month ran out is not the till's job. It is still a staff meal — the kitchen slip says so, and the month's report shows that they paid for the whole thing themselves.
What is refused, each in a sentence the cashier can read out: an unknown code, somebody
who has left (by name and date), the wrong outlet when staff_meal.own_branch_only is on,
and somebody with no allowance ever set.
The month
The calendar month, the 1st to the last day, whether that is the 28th, the 30th or the 31st — measured in business dates, so a meal rung at 1am on the 1st is spent out of the month that just ended.
What is left at the end of the month is lost. No carry forward, ever — an allowance that accumulates is a liability nobody budgeted for.
staff_meal.period_start_day makes it a payroll month instead.
What is left is counted, never held in a counter
So it cannot drift, and there is no figure to put back. Paying a recalled held order moves the figure instead of spending the allowance twice; voiding gives it back; a correction that discounts or writes the bill off gives it back, exactly as it gives a promo code back.
Two tills ringing the last of an allowance at the same instant is settled by the database: the second one waits, re-reads what is really left, and covers that.
The reports
Reporting → Reports, under Staff. Everybody with an allowance is a row, whether or not they ate — a row reading zero is an answer, a missing row is a question. Somebody who has left keeps their line, because the month they left is the month somebody has to settle.
A range is widened out to whole months rather than cut in half: "what was this person allowed for 5–12 March" is not a question with an answer.
Staff meals need the internet
There is none offline. What is left is counted from rows another till changes while this one is dark, and the alternative would be carrying the whole staff book on every tablet.