HORUS-lite: a leave-management prototype

A lightweight clone of ANU’s real HORUS leave-management workflow (the PeopleSoft HCM Absence Management skin every staff member and manager actually deals with), covering the full loop: an employee applies for leave, a manager approves or denies it, the employee can cancel before or after approval (with different rules for each), the manager actions that cancellation, and the manager can pull up an employee’s full absence history. Leave balances are real, not decorative — they decrement on approval and restore on an approved cancellation — and a new request that overlaps leave the employee already has booked gets detected and worked out in hours, not just accepted or rejected outright.

What good looks like here

Good means the state machine actually holds: a status can’t drift into an invalid transition, a balance can’t be double-spent, and an overlap can’t quietly corrupt an existing booking. Some of that is enforced mechanically, some of it was a judgement call.

Enforced by the repo, not just asserted in this file:

Judgement calls:

Deliberate scope cuts, so a marker who knows the real ANU system reads these as decisions, not bugs:

CLAUDE.md holds the rules that keep the above true and the checks that enforce them; docs/plan-leave-management.md is the design record they came from; PROCESS.md is how the build actually went.