Surface 2 of 9

The record pane

One design that holds a visit, a customer, a resource, an order, a shift and a stock item. If it cannot hold a new entity without a redesign, it is not a surface type — it is a page written twice. It is proved below on the two extremes: a visit, which is almost entirely live and almost entirely money, and a stock item, which is neither.

The problem, and the shape that solves it

No scrolling says a long record must be tabbed. Law 2 says nothing important is collapsed, and money in particular is never behind a disclosure. A tab is a disclosure. Those two cannot both be satisfied by one tabbed pane.

So the pane is a permanent column plus a tabbed area. Identity, status, every money figure and every action live in the column, where no tab can hide them. Facts and related sets live in the tabs, where hiding them costs nothing. Reading the money never requires being on the right tab — which is also how two surfaces stop disagreeing about a total.

A visit

Live, and almost entirely money. Three seats, a party of three, one bill.

VISIT · V-2418
Nour Selim
Open since 19:46 · Premium member
Open No debt 3 in party
Receivable ledger · as of 21:04:07
Cafe table 3 · 41 min0.00
PC-03 · 1 h 12 m · 40.00/h48.00
PC-07 · 1 h 04 m · 60.00/h64.00
Bar · 4 items42.00
Member discount · 10%−22.00
Owed now 132EGP

Receivable, not cash. Nothing has entered the till and the cash ledger has no row for this visit yet.

The counter may ask; the owner approves, and you ruled that everything blocks overnight. Asking at 21:04 means this waits until morning.

Browse/Visits/V-2418press / to jump anywhere
CustomerMariam Salah · 0100 000 0000
Opened byKareem Hassan · at the desk
BookingNone — walked in
Rate at startStamped per seat, never recomputed
Guest nameNot applicable — member visit
NoteLeft empty by Kareem at 19:17
DiscountMember 10% — automatic, no reason needed

Every field is traversed, even when it is empty. Not applicable and left empty by Kareem are two different facts, and both are different from a blank. A field nobody saw is not the same as a field somebody decided about.

The same pane, a stock item

Not live, and its money is capital rather than a debt. The pane simply has no clock — no empty slot where one used to be.

STOCK · BEAN-1KG
Beans 1 kg
Raw ingredient · used in 4 recipes
Low Counted 2 days ago
Stock ledger at cost · as of 18:40
On hand3.40 kg
Weighted unit cost290.00 / kg
Shrinkage this month4.1 %
Capital at cost 986EGP

Capital, not revenue. This is money the business owns sitting on a shelf.

A write-off destroys capital and is the owner's. The gate will state the exact figure leaving the ledger before anything is sent.

Browse/Stock/Beans 1 kgpress / to jump anywhere
TimeEventWhat changedWhoWhere
18:40 Counted 4.10 kg → 3.40 kg "sack split on the shelf, swept up" Mostafa back room
14:02 Unit cost changed 274.00 → 290.00 "new supplier price, weighted in" Omar office
11:20 Write-off refused Nothing changed requested 0.60 kg · "no reason given" · not sent Kareem counter 1

A refused request is history too. An action somebody attempted and did not get is exactly what gets asked about the next morning, and a log that only records successes cannot answer it.

The history tab, on every record

The cheapest credibility available. The audit data exists before the viewer does; rendering it is the whole cost.

#RuleWhy
H1Old value struck through, new value plain.A diff shows both sides. Money changes are the reason the tab exists — an operator who can see who changed a price trusts the system that shows them.
H2Why, not only what — in the quietest tone on the page.A count with no reason and a count with "sack split on the shelf" are the same event to a database and completely different events to a shift handover.
H3Where, not only who.On a floor with two terminals and three roles, the station is half the answer, and it is free.
H4A refused or blocked request is a history row.It is what someone asks about the next morning.
H5Everyone sees the tab; costs obey the scope rule.A counter sees that a total moved and who moved it, not what anything cost.

The pane, filled seven ways

Nothing below needs a new column, a new tab strip, or a second design.

EntityThe money blockTabsPrimary action
VisitTime and items → owed now · receivableFacts · Seats · Orders · Party · HistorySettle & free the seat
CustomerBalance, debt, cashback · receivableFacts · Visits · Subscription · Payments · HistoryStart a visit
ResourceHours and revenue today · receivableFacts · Seatings · Installed titles · HistorySeat someone here
OrderLines → total, and cost for the ownerFacts · Lines · The visit it belongs to · HistoryMark served
ShiftOpening, taken, paid out, counted · cashFacts · Movements · The count · HistoryClose the shift
Stock itemOn hand × unit cost → capital · stockFacts · Movements · Recipes · HistoryReceive stock
ExpenseAmount · cashFacts · History only — the thin caseAttach a receipt

An expense has no related set and no live state, which is the thinnest case the pane has to hold — and it still fits, because an empty tab is a state rather than a hole. That is the test this surface had to pass.