Inès Lambert
What the mock-up changes compared with production, as read in the repository on 10/09/2026 (d48f31c). 41 points.
Five underlined tabs (`tablist` with a 2 px line under the active one).
Segmented control on a grey track, the active one lifts onto white.
These are not filters but five views of one object: the segmented control says “one at a time, from a closed set”. The underline compared poorly with the action button sharing its row.
Full-width primary button at the top of the left column, under the badges.
Black button at the end of the tab row, on the right, with a door icon. Not the arrow leaving a frame: it already means sign out in the sidebar footer.
It is a destination that closes the stay, not a bedside action. In the column it dominated the screen though it only serves on the last day.
Nine flat blocks: identity, badges, discharge, call, progress, hospitalisation (protocol, trend, prognosis, 7 rows, adjust plan), observations, clinical follow-up.
Fixed head (identity, markers, Call, Note), then status, vital signs, progress, and “Stay details” folded into a card.
The column gave its best spot to admission admin, read once, while the vital signs, which change every two hours, lived below the fold.
The whole column scrolls; the sheet header (shown day, actions, day picker) scrolls with the tasks.
Identity and two bedside actions pinned at the top of the column. Shown day, picker and actions pinned at the top of the panel.
By the third hour block you no longer knew which day you were reading, and changing day meant scrolling back up.
Name visible only in the “Call {owner}” button and in the patient sheet.
Dedicated line under species, age and weight.
They are the contact for the stay: you look for them before calling, not after opening a sheet.
Trend and prognosis as stacked segmented controls (3 and 4 steps). Monitoring level as a read-only badge. Temperament as a dot on the avatar, not editable here.
Four chips on one line: trend, prognosis, monitoring, handling. Each opens its popover.
Two clinical decisions took two full rows permanently, two others could not be edited. Same nature, same treatment.
`surveillance` shows as a badge (TRE-857) but cannot be corrected in the record.
Three-step popover, like the trend.
A monitoring level is reassessed during the stay. Making it readable but not editable forces you out of the record.
Label, value, unit, timestamp (`D3 · 14:00`).
Change since the previous reading added (`+0.3`, `stable`, `better`), time only.
The timeline has just captured the value; the column need not repeat it. What it can add is the direction of change.
Two links: “Add (n/m)” (stay filter) and “Manage” (practice parameters).
One “Display” link opening the list of the practice’s eleven parameters, with “Manage practice parameters” in the footer.
The distinction is real but “Add” suggested you were creating a parameter. The footer says explicitly that it leaves the stay.
Nothing at the top of the sheet. The delay shows on the task card, further down the timeline, and on the kennel card.
“1 overdue” badge next to the title, in the pinned header.
You had to scroll down the timeline to know a task was waiting. The badge costs no height and stays visible while scrolling.
Full-width amber banner above the timeline, with “Extend the last day to discharge” (TRE-843).
The missing day appears in the picker, dotted amber with a dot. Clicking opens the extension proposal.
That is where the question arises, when you look for the day and cannot find it. The banner pushed the tasks down to say something the picker can carry.
Fixed hour blocks from 08:00 to 20:00. A task outside that range creates its own isolated block.
“Night” block at the end of the timeline, on a distinct background.
The product’s slots know the night (22:00 to 08:00, `slotKeyOfHour`) but the timeline stopped before. Unreadable precisely for the patient you check on at night.
The IV fluids banner scrolls with the sheet.
Sticky block at the top of the panel, with a background gradient below.
A bag runs while you scroll down the day. Losing sight of it means losing sight of what cannot be ticked and must be watched.
`SKIPPED`, `CANCELLED`, not done with a reason, and “remove as error”. The repository documents a bug where “Skip” called `cancel`.
“Not done” with its reason, “Removed from plan” with its own.
Four similar words for two intents: noting that a task did not happen, or removing a line from the plan.
The tick is sent without a value; the Core refuses it for a `MONITORING` and the error then opens the input.
Two distinct dialogs. A measurement opens “Record reading” with its field and normal range; a treatment opens “Record task” with dose, route and due time.
The server round trip to discover a value is missing shows on screen. The task type is known client-side.
Three header buttons: “Repeat D{n-1} care tasks”, “Ad-hoc task”, “Day summary”. “View removed tasks” as a link at the very bottom of the timeline.
“Ad-hoc task” alone visible. The other three in a menu.
What is done at the bedside stays visible, what is done once a day goes behind. The header is the most contested surface.
Completed tasks switch to a grey background.
White for all, the status reads on the pill.
Grey split the timeline into two blocks and made the day read as finished.
The expected discharge is corrected in the column (`SortiePrevueEditable`, date and time). Nothing links this to the day picker, and nothing offers to cover the added day.
A “+” after the last day opens “Extend stay”: new discharge date (+1/+2/+3 day shortcuts), whether to repeat the last covered day, and an offer to notify the owner.
Extending is TWO things that are conflated today: pushing back a date ANNOUNCED to the owner (`expectedDays`, which the repository explicitly separates from the protocol length), and covering the added days. The third, notifying, follows from the first: pushing back without saying so lets the owner turn up for nothing. NEEDS PRODUCT GROUNDWORK: changing the expected discharge must be able to pre-fill a message.
The “Do” button opens a centred dialog (`SoinConfirmDialog`) for a treatment; for a measurement, the tick is sent without a value and the Core error opens the input. Secondary actions live in a separate menu.
One popover anchored on the card, opened by “Do” as well as by the menu. It carries the value field for a measurement, the dose and route reminder for a treatment, the note, the Do button, and the secondary actions below.
A task is completed dozens of times a day: the central dialog forced a trip across the screen for a two-second action. The overview popover (`care-popover.tsx`) was right on this point; what it lacked was the dose check and the value input, which fit in 300 px.
Stacked fields: fluid, volume, rate, additives, days, time. The “In the bag” block falls below the fold as soon as you add an item.
A “Bag” card (fluid and volume on one row, rate, unit and time on the next), then “In the bag”.
You composed without seeing what you had already put in. The order of reasoning is kept: what you connect, how fast, then what you put in it, because a CRI depends on the rate.
Server-side calculation (`POST …/calcul`), guard rails and label returned.
Volume to draw from the vial, CRI milligrams, bag duration, end time and label recalculated on every change.
The mental calculation at the bedside is the one that goes wrong. To confirm with the Core: the mock-up shows the intent, not the reference formula.
To check on the product side: the original mock-up allowed only one item at a time in our tests.
Each addition builds its line; supplement and CRI coexist, and a protocol can set both with their values ready.
A bag commonly carries both. Replacing one with the other erases the work done.
Guard rails show (`GardeFou`, level `alerte`) without blocking the set-up.
While a guard rail speaks, a checkbox asks for confirmation and the button stays disabled.
Arthur’s request, matching the behaviour expected in production: an alert indicator discharges the software’s liability.
Popover with change rate, replace, pause, disconnect.
Each action has its screen: changing the rate recalculates the end time on the remaining volume, disconnecting says what was given, what is discarded and what becomes of the catheter.
Without an owner e-mail, sending is impossible and nothing says so. No way to add the address from this screen: you have to leave the record.
Empty state that names the person, says what is missing, and carries the input field. The address goes to the owner’s record.
The hardest blocker found on this screen: a dead end with no way out and no explanation.
The “Photos and files” gallery shows attached photos, but the form does not let you attach any.
“Attach a photo” button and list of attachments.
The screen showed a capability it did not offer.
A logged message stays logged; no way to send it afterwards.
Distinct status (“Logged” versus ticked “Sent”) and a “Send” button on logged ones.
You log a call that did not get through, then change your mind. That is the common case.
Two greyed-out chips “SMS” and “App notification” plus the note “SMS and notification: with the subscription”.
Card to the right of the form, styled as the paywall.
What is missing is an offer, not a greyed-out button.
Templates fill the field; managing them lives in settings.
A “Manage” link opens the list with a preview of subject, body and available variables.
Input field at the top, history stacked below.
Input on the left, history on the right as a timeline.
A note is written in response to the previous one. Scrolling up to check what was said was one step too many.
All notes follow the record, without distinction.
“Add to discharge summary” checkbox, and a badge on the notes concerned in the history.
A writing decision: “owner called back” has no place there, “abdomen still tender” does. Needs a field on the Core side.
The column’s “Observations” field actually writes a stay note, without saying so.
“Note” button next to “Call”, which opens the input and says where it goes.
The wiring is right; the word was lying.
Stacked cards, date in the corner.
Gutter with time, date and dot, identical to the care sheet.
They are dated events like the tasks: same reading from one tab to the next.
Daily tracking and the summary are accessible; only amounts are blurred (`blur-[5px]`, `aria-hidden`).
The tab opens, the preview reads at 55% behind a radial gradient, and the lock points to Treats Essential.
Arthur’s product decision. Treatment taken from “Organisation & sites” in mock-up v3 (`orgaPaneLocked`): without blur, you recognise the screen you would get, line by line.
“Care progress” in the column, unblurred.
Unchanged.
It counts tasks done, not money: it is ward-round information.
“Stay summary”, “Summary to copy out”, “Billing tracking”.
“Stay billing”, “Procedures, quantities and amounts”, “Daily tracking”.
“To copy out” described a workaround. Behind the offer, what is at stake is billing, and that is the practice’s word. The nuance “Hospit does not issue” lives in the lock’s pitch.
Prescription lines composed in the “Discharge prescription” card.
Name, dosage, duration, quantity and special note as free fields. Lines on the `.qrow` template from the documents file, two icons at the end of the line.
Treats Hospit has no drug catalogue: a search that would find nothing is worth less than a free field.
Preview of the produced documents in the second pane.
560 × 792 A4 page: branded header with registration number, parties, table or titled blocks, e-signature, legal notices, pagination. The report shows on two pages with a continuation banner.
A document is proofread as it will be handed over. Template taken from `atelier-navigation-documents-v1.html`.
Same icon for all three documents.
Capsule for the prescription, document for the report, receipt for billing. Aligned on the first line.
The module’s home screen, entry point for admission.
Removed from the board: it focuses on the patient profile. The “Back to kennels” button stays in the column, inert.
Off in production (`navigationVisible = false`): the four destinations live in the sidebar.
Reproduced as is.
Entered at admission. Corrections go to the patient record.
Patient
The owner
Friday 2 October · to copy out or hand over to the next shift
Care tasks
11 of 14 planned tasks done. One not done, one skipped, one cancelled. One buprénorphine dose 40 minutes overdue.
Vital signs
Temperature 38.9 to 39.2 °C, rising again late morning. Heart rate falling steadily, 196 to 168 bpm since D1.
IV fluids
NaCl 0.9% + KCl 20 mEq/L at 3 mL/kg/h. 184 mL left, bag empty around 22:10.
To flag
Abdomen still tender. Follow-up ultrasound pending. Food refused at midday.
Treats Hospit is a module. Treats Essential is the software around it: the whole practice in one tool, no double entry.
No commitment. Your Hospit module keeps running, with your data.
Buprénorphine · due 14:00
The reason shows on the task line and goes into the report.
Buprénorphine · upcoming doses of this task
The past stays intact: doses already given do not move.
Temperature · 38.9 °C read at 08:06 by TL
The task goes back to pending and the reading is removed from the chart. The undo is logged in the record.
Mimosa · day 3
Buprénorphine · due 14:00
Later doses do not move.
Mimosa · day 3
Mimosa · day 3, Friday 2 October
The plan ends on day 4, discharge is due on day 5
Extending copies the day 4 lines unchanged onto day 5.
Buprénorphine · Vetergesic · day 3
The past stays intact: only upcoming slots are regenerated.
Mimosa · discharge due 12/09/2026 at 11:00
A pre-filled message will open in Communications. The date given at admission was 12/09.
Acute gastroenteritis protocol · 4 days
Mimosa · 4.3 kg · kennel 5
What is actually running, and since when. The plan says what is planned, the bag says what is connected.
They fill the field; they do not send themselves.
NaCl 0.9% + KCl 20 mEq/L · 184 mL left
NaCl 0.9% + KCl 20 mEq/L · 184 mL left
The remaining volume is frozen. The bag stays connected and the end time is recalculated on resume.
NaCl 0.9% + KCl 20 mEq/L · hung 08/09 at 15:20
The volume given goes into the stay summary.