Rules that act, the clocks, and the tray
IF this moment THEN do that — with approval where the hotel wants it; every open thing has an SLA and a chain; notifications in one tray.
Rules, version 2. Under *Housekeeping setup → Rules* a rule now fires on a moment — a visit created, a clean finished, an inspection failed, a room ready, a guest's request, DND past the threshold, something nearly late, something late, a minibar count that disagrees — with conditions on the room (occupied, type, floor, flags, nights, the rate plan, the source) and on the moment (the kind of request, the kind of visit, the score, the hour) — and does something: move the room up the queue, give the visit to someone (or the best fit), tell a role, escalate, make a visit, flag the room, open an investigation. A rule that needs approval does not act: it writes an approval with what it wants to do and tells a manager; approved on the desk's *Automation* tab, it acts then in the approver's name; rejected, it says so on the story. Every rule is versioned like the morning's rules; the story says which rule did what.
The clocks. *Automation → SLA* holds the hotel's times: a request's own minutes per kind (or the kind's default), warn at 70 %, escalate every 15 minutes past due to supervisor → executive → manager; a visit warns at its target and is late at target × 1.5; a room given and not taken in 45 minutes; a fix waiting more than an hour for its recheck; a guest waiting more than 20 minutes at the desk. The sweep runs every minute on the server and at the night audit; everything it writes it writes once — *nearly late*, *LATE*, *escalated* — on the story, and in the tray.
The tray. Every notification — for a role (supervisor, front office, manager, engineer, security) or one person — is a row with a title, a severity and a link to the room; the phone shows a bell with the unread count for the person holding it, the desk shows the hotel's. The same thing is not said twice in an hour.