📋 View active rules · 🎟 View points system · 🔍 Preview solver input (admin)
| Loading data… |
Initials, postal code and unit only: no name, no NRIC, no diagnosis.
One call per visit, 1 to 5 working days before the doctor goes out. What you record is shown on the roster and in the patient’s comms log.
Every change has a reason, is checked against what the clinical team has set as safe for this patient, and is recorded.
Every patient goes to the same doctor’s session on the day you pick. Each is checked against their own limits, and the reason is recorded for each.
One short entry goes into the patient’s log. No limit applies: no day moves.
Pending admissions captured from the mobile app — assign each to an available MO. Per-ward load and who's clerking, for the chosen day. Anyone can edit; the last change is logged.
| # | MO | Peak admissions | Achieved |
|---|---|---|---|
| — | |||
end_date, which would pull them out of the solver. A welcome needs no booking: it plays on its own 7–13 days after a doctor’s effective start date.Rich text + emojis; paste image/GIF/video URLs (e.g. Giphy, YouTube). Doctors see targeted messages on their Home (desktop + mobile). DEV — admin-only. "Until acknowledged" persists until each doctor clicks Acknowledge; "For X days" auto-expires.
Off-In-Lieu is ad-hoc and uncapped — award when directed by leadership. Enter negative days to record a correction. The balance shows in the Leave Planner (under Birthday Leave). DEV simulation: balances seeded 0–5; in production OIL is held/fed by the HR/Payroll system.
.json backup — the DR path when prod is unavailable. A cross-environment import re-links logins by email.
Snapshots are stored in the database (versioned) and can be downloaded as a JSON file for off-site safekeeping.
Data only — not a full disaster-recovery backup (database schema, login accounts & the rules engine are not included; pair with a periodic pg_dump for that).
The downloaded file contains real names, emails & leave details — handle as confidential. Restore replaces the snapshot's tables (replace-all) after showing a dry-run preview & auto-saving a safety snapshot of the current state, so it's reversible.
Routine: download a Full backup regularly (e.g. weekly + before any risky change) and keep the .json file off this machine (cloud drive / email it to yourself). The DR plan only works if you have a recent file when prod dies.
slh-backup-prod-full-*.json (your off-device copy).jqfoaquboarywqhmoceu · PROD sqosocfrfbeqdnkrizhfNot covered: database schema, login accounts & the rules engine aren’t inside a snapshot — for full disaster recovery also keep a periodic pg_dump. This restores data into an already-deployed app.
| Query | Outcome | Count | Distinct staff | Last seen |
|---|---|---|---|---|
| — | ||||
| When | Who | Query | Outcome | Parsed | Suggestions | Picked |
|---|---|---|---|---|---|---|
| — | ||||||
solver/start-solver-worker.command.is_ward_cover or is_weekend_cover are considered. Doctors without those flags are excluded from this run — that’s deliberate so the optimizer doesn’t hand leave to people who can’t cover anything in return. Fix their capability flags in Admin → Coverage Eligibility before running this if they should be included.
pending_review leave-requests — visible in the queue at the top of this page. If a run stays pending for more than a minute, the solver process isn’t running — ask engineering to start it (or run uv run python solver/leave_optimizer.py --watch).