5. How the planner decides
This section explains the ideas behind the steps. You do not need it to follow them. Read it once, perhaps while a solve runs.
On this page
The idea: ink and pencil
Think of the year's table as the spreadsheet you know: residents down the side, Block 1 to Block 12 across. The boxes you place are in ink. The solver is a tireless colleague with a pencil. It pencils in the empty boxes, never breaking a Must, and judges each complete table on one scorecard. When it is done, it hands you up to five tables, the top one first.
The ink stays where you put it, even where it breaks a rule. Use this solution inks in the pencil of the result you chose, so the next solve keeps those boxes too. Clear rubs a box out and hands it back to the pencil.
That is why a box you place is kept even when it breaks a rule. It is also why a breach can only come from boxes already in the table. A box you place can also stop a solve. If it leaves a resident no way to fit what they owe this year, the solve refuses and names the box.
Musts and Prefers
- A Must is never broken. The manpower bands, most built-in rules and what an R3 still owes are Musts.
- A Prefer is scored: a Penalty when it is missed, a Reward when it is met.
- When the Musts cannot all hold together, the solve stops and lists the rules that clash, with the residents they bind.
The score
The solver gives every table that keeps every Must one score, and picks the highest. The score is:
- Wishes times all the wish points paid,
- minus Fairness times how unevenly wish points fall within each year group,
- plus Preferences times each Prefer rule's Reward when it is met, minus its Penalty when it is missed.
Fairness counts each resident's points from earlier years as well. A resident who did well last year gets less priority this year.
Only the ratio of the three numbers matters: 5, 5, 5 and 1, 1, 1 give the same table.
The screen's own example, under How the scoring works, with Wishes at 5:
| Table | Wish points paid | Unevenness | Score at Fairness 2 | Score at Fairness 5 |
|---|---|---|---|---|
| Table A | 3,000 | 400 | 14,200 | 13,000 |
| Table B | 2,800 | 20 | 13,960 | 13,900 |
At Fairness 2 the solver picks A, the greedier table. At Fairness 5 it picks B, the fairer one, giving up 200 wish points for it.
Preferences multiplies every Prefer rule's Penalty or Reward. With Preferences at 5, a Penalty 50 breach costs 250, the same as losing 50 wish points at Wishes 5.
The two built-in rewards
No posting is a must in R1 or R2. Instead, two built-in rewards lean the solver toward the postings best done in those years. Each has its own number under Scoring, and Preferences multiplies it.
- R1 core postings in R1 pays for each core posting a resident ending the year in R1 does whole that year: Cardiology, Respiratory Medicine, Neurology and DIM, 3 blocks each from AY 2025.
- R2 compulsory postings in R2 pays for each compulsory posting a resident ending the year in R2 does whole that year: what is left of the R1 and R2 columns (Critical Care 3, DIM 1 at home and 1 cross-cluster, and any core posting still to do), and the Any year rows (Gastroenterology 2, Renal Medicine 2, Haematology or Medical Oncology 2, Geriatric Medicine 1).
- Each is paid once for each posting, whatever its length, and only when the year holds the whole posting.
- A resident who moves up from R1 to R2 during the year is paid under the R2 reward.
- An R3 has no reward: what an R3 still owes is a Must, as far as the year holds it.
The sums, with Wishes and Preferences at 5:
- A granted first wish is 100 wish points, a lower wish 100 divided by its rank. A first wish adds 500 to the score, a third wish about 167.
- The R1 reward at 200 adds 1,000 for each core posting: as much as two first wishes.
- The R2 reward at 25 adds 125 for each compulsory posting: less than a third wish.
How a wish earns points
- Each resident has one ranked list a year. A granted first wish earns 100 points. A lower wish earns 100 divided by its rank: 100, 50, 33, 25, 20, 17, 14, and so on.
- It is all or nothing. A wish pays only when the posting matches every part it names: the specialty, and the hospital, length and period when given. A request's period matches any posting that touches it.
- One posting pays at most one wish, and a wish pays at most once. The planner pairs them so they pay the most overall.
- A request for a posting the resident must do anyway pays only when it names the hospital as well as the specialty. Such a posting is one that gives them no elective block. The planner does not warn about this when the wish is made.
- An avoid of a specialty pays only when it is real. The resident must do that specialty that year, and the named period, at the named hospital if any, must stay clear. An avoid that cannot pay shows kept, pays nothing.
- An avoid of a hospital is paid by the block. A third-ranked hospital avoid with 11 of 12 blocks clear pays 100 times 11, divided by 36: 31 points. It shows as granted only when every counted block is clear, and otherwise as, for example, 11 of 12 clear, 92% of the points. Leave and Left blocks are not counted.
- Three checks run whenever a wish is made, whoever types it. A request needs room left under the specialty's Most allowed. Its length must be one the department takes, and must fit that room. An avoid must leave a way to do what is owed that year. Each avoid is checked alone; if several cannot all hold, the solver keeps the higher-ranked one.
- A year's wishes are graded from that year's boxes in the Database, so only once the year is filed or entered. Its points are expected until its block 12 has passed, then they join the resident's total. Filing again, a Database Save or a Delete grades them again at once.
- Each resident's page shows their points under Who, such as Wish points: 183 so far, 50 expected for AY 26/27. The points so far are those of every year that has ended; the expected ones are this year's, counted once it ends. With nothing still expected this year, it reads Wish points: 183 so far. The resident sees the same line on their own page. Points also move in the File, Save and Delete sheets, per wish under Earlier years, and per year group in a result's Fairness fold.
What a result card tells you
- The score: higher is better, within one solve.
- wishes granted 11 of 45: how many of all the wishes held this result grants.
- breaches 0: how many Musts this result breaks. More than 0 shows in red, and the breaches come from boxes already in the table.
- The manpower line: manpower met in every block, or in how many blocks a department falls under its least (in red) or over its most (in orange).
- the top result on Result 1. On the others, differs by 298 boxes says how many boxes differ from Result 1.
- Details, in the result's The score fold, gives the score as a share of the best possible.
- Two presses on the same table need not give exactly the same results. Once you like one, press Use this solution and Save, and a later solve cannot take it away.
- A draft keeps only its newest solve's cards. Press Duplicate before solving again to keep them.
What a draft remembers
- When a draft is made, it takes a photo of the programme. The photo holds who is in it, with their year groups as they then stood. It also holds the departments with their bands and lengths, the hospitals and their clusters, and the Curriculum. It never changes by itself.
- If the programme changes afterwards, the draft shows the line Residents / Curriculum / Department data changed since this draft was made. A resident added or removed lights it, as does a changed admission cohort or a year group set by hand. So does a change to a past year in the Database, a department, a hospital or the Curriculum. Pressing the line explains it and offers Duplicate: a new draft with a fresh photo.
- A renamed resident or a changed email lights nothing. Names and wish lists are read fresh each time.
- When the year before the draft's year is missing from the Database, the draft shows a line such as AY 26/27 is not filed yet, so this table's figures stop at AY 25/26. File it, then Duplicate., with File it to open that year's draft. When only some residents lack a row, the line ends Enter it, then Duplicate., and Enter it opens that Database year in Edit, with a blank row ready for each of them. A row left blank writes nothing at Save.
- The box sheet, the palette and the rule pickers offer the photo's departments, the same ones a solve uses. A department added later appears only on a duplicate. A Database year is not a draft: its box sheet and Paint offer today's departments.
How year groups are worked out
- A year group is never typed, except by hand as Manual. The planner works it out from the Database each time a page shows it.
- Moving up, R1 to R2 or R2 to R3, needs 12 blocks of postings served in the current year group, and nothing else. The new year group starts the next block.
- No posting has to be done to move up. Some are best done in a given year, such as the four core postings in R1; the planner rewards them instead (see The score).
- What a resident still has to do from the columns up to their year group is shown as information only. The pages say, for example, stays R1: served 9 of 12 blocks, with still to do: Cardiology 3 on a quiet line under it.
- Graduating needs every required posting of the resident's Curriculum version done, Any year included, the electives done, and 36 blocks of postings in all.
- Leave counts for nothing. An R2 with 3 blocks of leave stays R2 into the next year, and becomes R3 from its block 4.
- A posting marked Failed counts for nothing too: not toward the 12, not toward the Curriculum, not as an elective, and not toward the 36. The posting is owed again (see Mark a posting Failed).
- The planner reads a resident's years in order from their R1 year, and stops at the first year with no row for them. A missing past year therefore holds them back, and Existing residents flags them.
- A Left box ends the reading from that block.
- A year group set by hand wins from its block, until Automatic is chosen again.
- A fix to a Curriculum number or a hospital's cluster counts from today's block, so nobody moves back down.
- Within a draft's year, a resident may start the year short of their 12 blocks. They show on one row until the year's boxes serve the rest, then on two, the new year group from the block after the 12th. Leave in the year moves the change later.
- An R3 who completes everything during the year is Graduated from the next block, and their later boxes are grey.
- Residents who have graduated or left are out of later drafts, wish rounds and counts. Their record stays.
Today's block, fact and expected
- The academic year begins on 1 July, Singapore time.
- Today's block comes from this year's block dates as the Database holds them. A day between two blocks belongs to the block before. Without dates, the calendar month is used, with July as block 1.
- Until this year begins by its dates, today's block is block 12 of the year before.
- Anything at or before today's block is fact. Anything after it shows as expected, and becomes fact on the day.
- A year's dates reach the Database only through a filing with all twelve dates set.
What filing changes
- Filing writes the draft's rows into the Database as that year. From then on, every page reads that year from the Database, not from the draft.
- Year groups move by the rule as the filed blocks pass.
- The year's wishes are graded from the filed boxes: as expected until its block 12 has passed, then counted.
- Today's department bands are kept with the year.
- That year's wish lists are fixed for residents.
Who sees residents' details
- Residents' names and work emails are kept in one place. The Database, drafts, wishes, rounds and activity hold a code for each resident, and the name is put in only when a page is shown.
- No email carries a resident's name, and no wish email carries a link.
- Coordinators on the planner see residents' names and emails. A resident sees only their own page.