DDI AL Ballot 2027 Complete Registration Walkthrough
Register your leave preferences for the 2027 Annual Leave Ballot β from verifying your NUH email to submitting your selections and checking the live dashboard.
The DDI AL Ballot 2027 lets you choose the weeks you would like to take annual leave next year. The registration form is quick and straightforward: you verify your NUH email, pick your preferred months and weeks for two P1 ballots and two P2 ballots, decide whether to opt into the bonus week, and submit your declaration.
This guide walks through every step with visual references so you know exactly what to expect. Read the Ballot Mechanics guide first if you want to understand how P1/P2 priorities and weekly capacity work behind the scenes.
Prerequisites
Before you start, make sure you have the following ready:
Your NUH staff email address β the form will verify it, so you must be able to receive email at that address.
Access to your email inbox β you will need it for the one-time password (OTP).
A stable internet connection β any desktop or mobile browser works fine.
Your planned leave weeks in mind β check the Ballot Mechanics guide for capacity and public/school holiday weeks before choosing. You can also check the Live Dashboard to gauge demand for the individual weeks.
π‘ Before you begin
Do the whole form in one sitting. The email verification step is time-sensitive, and FormSG sessions expire after a period of inactivity.
Step-by-Step Instructions
Follow the steps in order. Steps that belong to the same priority group are colour-coded: P1 (higher priority, orange) and P2 (lower priority, blue).
1
Email Verification
Start here
Open the ballot registration link. The first section asks you to verify your email address.
Where to enter: type your full NUH email address into the Email field.
What to click: press the Verify button.
Expected behaviour: the form advances to the OTP step. If the address is rejected, double-check for typos β the system only accepts recognised NUH email addresses.
verify-email.png
2
OTP Verification
Security check
A one-time password (OTP) is sent to the email address you entered. Complete this step promptly.
Where to find the OTP: open your email inbox and look for the verification email from FormSG.
How to enter it: type the 6-character alphanumeric code into the OTP field on the form (the code appears in bold in the email).
Time sensitivity: the OTP expires after 30 minutes. If it expires, you will need to request a new code before you can submit the form.
fill-otp.png
formsg-otp.jpg
β° Time limit
OTPs expire after 30 minutes. If your code no longer works, click Resend Code and use the code from the latest email.
3
Verification Confirmation
Verified
Once the OTP is accepted, the form confirms that your email has been verified.
Confirmation: you will see a green border around the email field and a green tick inside it, and the Verify button now reads Verified.
What happens next: the ballot selection sections unlock automatically β continue straight to Step 4. You will not need the OTP again in this session.
email-verified.png
4
Select P1 Ballot 1 (Month)
P1Priority 1
In the P1 Ballot 1 section, choose the month you most want leave in. P1 is your highest-priority request.
Navigation: scroll to the P1 Ballot 1 (Month) dropdown.
Selection options: pick one month from the list.
Confirmation: the month you pick is highlighted in the field β the week dropdown in the next step updates to match it.
select-month.png
5
Select P1 Ballot 1 (Week)
P1Priority 1
Choose the specific week within the month you selected in Step 4.
How to choose: open the P1 Ballot 1 (Week) dropdown and pick the week you want.
Relationship to the month: the week options depend on the month you chose β only weeks within that month are listed. If you change the month, re-select your week.
Tip: weeks with public holidays or school holidays tend to be oversubscribed β see the Ballot Mechanics guide for the full list.
select-week.png
6
Additional Ballot Selections
P1P2Repeat pattern
Repeat the same month-then-week pattern from Steps 4β5 for your remaining ballot entries:
P1 Ballot 2 β a second month/week at priority 1.
P2 Ballot 1 β a first month/week at priority 2 (lower priority than P1).
P2 Ballot 2 β a second month/week at priority 2.
Each section works exactly like Steps 4β5: pick the Month, then pick the Week within it. You may choose the same month in different ballots, but avoid selecting the exact same week twice β the declaration in Step 8 requires no duplicates.
βΉοΈ No screenshots available
These sections follow the identical dropdown pattern shown in Steps 4β5. Simply repeat the same actions for P1 Ballot 2, P2 Ballot 1, and P2 Ballot 2.
7
Bonus Week Selection
Bonus
Decide whether you want to be included in the bonus week (the extra 2028-W01 ballot).
Opt in: your name enters the bonus-week draw for an additional chance to secure leave that week.
Opt out: you are not included in the bonus-week draw; your regular P1/P2 selections are unaffected.
Choose the option that matches your preference β there is no penalty for either choice.
select-bonus.png
8
Declaration & Submission
Final check
Before submitting, the form asks you to declare that your selections are correct.
Declaration text: read the statement confirming that your ballot entries are correct and contain no duplicate weeks.
Checkbox actions: tick the declaration checkbox(es) β submission stays disabled until they are checked.
Submit button: click the Submit button at the bottom of the form once everything is verified.
β οΈ After submitting
Once submitted, the only way to change your selected weeks is to submit a new form with all your choices.
declarations.png
9
Confirmation & Dashboard
Done
After submitting, you land on the confirmation page β you're all set.
Confirmation page: a success screen shows that your response was submitted.
Email copy: you will receive an email containing a copy of your responses β it can take a few minutes to arrive (check Spam if needed).
Dashboard access: click the View Live Dashboard button on the confirmation page to see the week-by-week overview with your entries (not accessible on NUH intranet).
confirmation.png
dashboard.png
Troubleshooting Tips
π§
OTP email not arriving
Wait 1β2 minutes, then check your Spam/Junk folder. Make sure you entered the exact NUH address. If it still doesn't arrive, request a new code.
β°
OTP expired / no longer valid
OTPs are time-limited. Click Resend Code to get a fresh one and complete the verification promptly.
π«
Email address not accepted
Check for typos and ensure it is your NUH staff address.
π
Form flags a duplicate week
You may have selected the same week in two ballots. Change one of the selections so each week appears only once before submitting.
πΈοΈ
Page timed out or froze
FormSG sessions expire after inactivity. Refresh the page and restart β you may need to verify your email again. Keep the form open and complete it in one sitting.
Next Steps
βCheck the live dashboard β open the dashboard from the confirmation page and confirm your initials appear under the weeks you selected.
βWait for the draw β after the closing date, the ballot draw runs and allocations are decided by priority (P1 first), capacity and modality caps.
βWatch your email β draw results and any follow-up instructions will be sent to your verified NUH address.
βReview the Draw Log β once the draw is done, the dashboard's Draw Log shows the allocation decisions for every week.
βοΈ Modify your selections
The dashboard updates with new entries from other staff in real time. If you see a week getting overcrowded and want to ballot for another week, resubmit the form again with your new choices.
π You're all set
That's the entire registration flow. If anything looks wrong on the dashboard, contact BYT/CEM before the ballot closes.
How It Works
Ballot Mechanics How Leave is Allocated
A clear explanation of how the 2027 Leave Ballot system decides who gets which weeks. The actual code is also provided below for full transparency.
The Leave Ballot system allocates annual leave weeks fairly. Here's the simple version:
You submit your preferred weeks (P1 = high priority, P2 = standard priority, and optionally the Bonus Week).
The system checks how many slots are available each week (15 base slots).
The draw runs with a random seed. It allocates P1 requests first, then P2 requests.
You get your weeks if there's space and your modality hasn't reached its cap.
If you have fewer than 4 weeks, you can submit a reballot for additional weeks.
π― Fair and Transparent: Every draw uses a seed value, so results are reproducible and auditable. The actual code is shown below so you can verify the logic yourself.
2. Weekly Capacity: 15 Slots
Each week has 15 slots available for ballot leave.
π Important: Protected leaves (ML, MRL, PL, SPL, RL, HL, TL, ICL, CCL, FCL, AL) do not reduce the 15 slots. They are counted separately.
What Counts Toward the 15 Slots?
P1 and P2 ballot entries β these compete for the 15 slots.
Bonus Week entries β these also compete for slots (15 slots for the bonus week).
What Does NOT Count?
Protected leaves β ML, MRL, PL, SPL, RL, HL, TL, ICL, CCL, FCL, AL are tracked separately and do not consume ballot slots.
Exempted staff β their entries do not consume slots; they add to capacity (see Section 4).
π Example: Week 10 has 3 staff on ML. The week still has 15 slots available for ballot. The 3 ML staff are on leave in addition to the 15 ballot staff.
3. Modality Caps & Leave Conflicts
Two important rules control who can be on leave at the same time: Modality Caps and Leave Conflicts.
3a. Modality Caps
Each modality (department/role) has a maximum number of staff that can be on leave in a single week. This ensures no single department is understaffed.
Modality
Cap
Cap (if β₯1 on protected leave)
IR
3
4
PACS
2
3
CT
5
6
MRI
5
6
NM
3
4
BIC
2
3
US
4
5
GEN
β
β
How caps work: If your modality has a cap of 3, only 3 staff from your modality can be on leave in that week (including both ballot and protected leave).
Dynamic +1 cap: If there is at least 1 staff from a modality on protected leave (ML, MRL, PL, SPL, RL, HL, TL, ICL, CCL, FCL, AL) in a week, that modality's capacity increases by 1.
π Example: IR Modality
Base cap: 3
Protected leaves in Week 10: 1 IR staff on ML
Relaxed total capacity: 3 + 1 = 4
Ballot slots available: 4 - 1 = 3
π Result: 1 IR staff is already on ML. The remaining 3 slots can be allocated through the ballot (4 total capacity - 1 protected leave).
3b. Leave Conflicts β Department IC & 2IC
To ensure department operations continue smoothly, Department ICs (In-Charge) and 2ICs (Second In-Charge) cannot be on leave at the same time.
β Rule: If an IC and their 2IC both request the same week, one of them will be skipped during the draw. The decision is based solely on randomisation β whoever gets processed first keeps the slot.
How it works in the draw:
When the draw processes entries, it checks if the staff member conflicts with anyone already allocated.
If the IC is already allocated for a week, the 2IC will be skipped for that week.
If the 2IC is allocated first, the IC will be skipped instead.
The order is determined by the random shuffle β no one has priority over the other.
Example: IR Department
Staff
Role
Week Requested
Priority
Result
CXQ
IR IC
2027-W10
P1
β Allocated
PTY
IR 2IC
2027-W10
P1
β Skipped (conflict with IC)
Common Conflict Pairs
IR IC β IR 2IC β Cannot be on leave together
CT IC β CT 2IC β Cannot be on leave together
MRI IC β MRI 2IC β Cannot be on leave together
And other department-specific pairs
4. Exempted Staff
Some staff may be designated as Exempted β mainly those on PACS & AHA.
What This Means:
Exempted staff entries do not count toward modality caps.
Exempted staff are always allocated their requested weeks.
Exempted staff increase weekly capacity β each exempted staff member adds 1 extra slot to the week.
π Example: Week 10 has 15 slots. 2 exempted staff ballot for this week. Effective capacity becomes 17 slots.
Exempted staff appear with a light brown background on the dashboard.
5. The Draw Process (Step by Step)
1.Submit β You submit your P1, P2, and Bonus Week preferences.β
2.Check β The system checks duplicate entries and flags them.β
3.Shuffle β Entries are shuffled randomly using a seed.β
4.Allocate P1 β P1 (high priority) entries are allocated first.β
5.Allocate P2 β P2 (standard priority) entries are allocated next, using remaining slots.β
6.Results β You can see who got which weeks on the dashboard.
Allocation Rules (In Order)
Conflict Check β If you conflict with an already-allocated staff member (like an IC/2IC pair), you are skipped.
Exempted Status β Exempted staff are always allocated.
Slot Availability β There must be a slot remaining in the week.
Modality Cap β Your modality must not have exceeded its cap.
Randomisation β Within the same priority, allocation order is random (using the seed).
π² Reproducible Results: The same seed always produces the same allocation, ensuring transparency.
6. The Actual Code
Below is the actual Python code that runs the draw. You can review it to verify the logic is fair and transparent.
# ============================================
# DRAW ALGORITHM
# ============================================async defrun_draw(seed: str):
random.seed(seed)
async with AsyncSessionLocal() as session:
# Clear previous draw results
await session.execute(delete(DrawResult))
ballots = (await session.execute(select(BallotEntry))).scalars().all()
protected_leaves = (await session.execute(select(ProtectedLeave))).scalars().all()
# Group protected leaves by week
other_by_week = {}
for ol in protected_leaves:
other_by_week.setdefault(ol.week_label, []).append(ol)
# Skip duplicate entries
valid_ballots = []
for b in ballots:
if b.duplicate_flag:
continue# Skip duplicates
valid_ballots.append(b)
# Group ballots by week
ballot_by_week = {}
for b in valid_ballots:
ballot_by_week.setdefault(b.week_label, {"high": [], "low": [], "bonus": []})
ballot_by_week[b.week_label][b.priority].append(b)
# Load exempted staff
exempted_ids = get_exempted_ids()
# Load leave conflicts (IC/2IC pairs)
conflicts = get_conflicts()
conflict_set = build_conflict_set(conflicts)
# Count protected leaves by modality per week
protected_leave_counts_by_week = {}
for ol in protected_leaves:
if ol.modality:
protected_leave_counts_by_week.setdefault(ol.week_label, {})
protected_leave_counts_by_week[ol.week_label].setdefault(ol.modality, 0)
protected_leave_counts_by_week[ol.week_label][ol.modality] += 1
for week in REGULAR_WEEKS:
# 1. Calculate available slots
base_slots = get_week_slots(week) # Default: 15# Count exempted staff for this week
week_ballots = ballot_by_week.get(week, {"high": [], "low": [], "bonus": []})
all_entries = week_ballots["high"] + week_ballots["low"] + week_ballots["bonus"]
exempted_count = sum(1 for b in all_entries if b.employee_id in exempted_ids)
# Effective slots = base + exempted
effective_slots = base_slots + exempted_count
# 2. Calculate modality caps (with relaxation)
effective_caps = {}
for mod, base_cap in MODALITY_CAPS.items():
protected_count = protected_leave_counts_by_week.get(week, {}).get(mod, 0)
if protected_count > 0:
# Relax: total capacity = base_cap + 1
total_cap = base_cap + 1
# Ballot slots = total_cap - protected_leaves
ballot_cap = max(0, total_cap - protected_count)
else:
ballot_cap = base_cap
effective_caps[mod] = ballot_cap
# 3. Process P1 entries (high priority)
p1_entries = ballot_by_week.get(week, {}).get("high", [])
random.shuffle(p1_entries)
slots_remaining = effective_slots
modality_counts = {m: 0 for m in effective_caps}
winners = []
for entry in p1_entries:
mod = get_modality(entry.employee_id)
cap = effective_caps.get(mod, 0)
is_exempted = entry.employee_id in exempted_ids
# Check for conflicts (IC/2IC cannot be on leave together)ifhas_conflict(entry, winners, conflict_set):
continue# Conflict with already-allocated staffif is_exempted:
winners.append(entry) # Always allocate exemptedelif slots_remaining > 0 and modality_counts[mod] < cap:
winners.append(entry)
modality_counts[mod] += 1
slots_remaining -= 1
else:
pass# Skipped# 4. Process P2 entries (standard priority)
p2_entries = ballot_by_week.get(week, {}).get("low", [])
random.shuffle(p2_entries)
for entry in p2_entries:
mod = get_modality(entry.employee_id)
cap = effective_caps.get(mod, 0)
is_exempted = entry.employee_id in exempted_ids
# Check for conflicts (IC/2IC cannot be on leave together)ifhas_conflict(entry, winners, conflict_set):
continue# Conflict with already-allocated staffif is_exempted:
winners.append(entry) # Always allocate exemptedelif slots_remaining > 0 and modality_counts[mod] < cap:
winners.append(entry)
modality_counts[mod] += 1
slots_remaining -= 1
else:
pass# Skipped# 5. Save winners to databasefor w in winners:
session.add(DrawResult(employee_id=w.employee_id, week_label=week))
# Bonus week processing (same logic)
bonus_entries = ballot_by_week.get(BONUS_WEEK, {}).get("bonus", [])
random.shuffle(bonus_entries)
slots_remaining = bonus_slots
modality_counts = {m: 0 for m in effective_caps}
bonus_winners = []
for entry in bonus_entries:
mod = get_modality(entry.employee_id)
cap = effective_caps.get(mod, 0)
is_exempted = entry.employee_id in exempted_ids
# Check for conflicts (IC/2IC cannot be on leave together)ifhas_conflict(entry, bonus_winners, conflict_set):
continue# Conflict with already-allocated staffif is_exempted:
bonus_winners.append(entry) # Always allocate exemptedelif slots_remaining > 0 and modality_counts[mod] < cap:
bonus_winners.append(entry)
modality_counts[mod] += 1
slots_remaining -= 1
else:
pass# Skipped# Save bonus winnersfor w in bonus_winners:
session.add(DrawResult(employee_id=w.employee_id, week_label=BONUS_WEEK))
await session.commit()
π Key Things to Note in the Code:
Only ignored duplicates are skipped β cross-duplicate P2 entries; P1/P2 duplicates are deduped and still enter the draw.
Exempted staff are always allocated β they bypass caps and add capacity.
Conflicts are checked β IC and 2IC cannot be on leave together.
Randomisation uses a seed β results are reproducible.
P1 entries are processed before P2 β higher priority requests go first.
Modality caps are checked β no single department gets overloaded.
Protected leaves relax caps by +1 β but they also consume modality capacity.
7. Reballot
If you receive fewer than 4 weeks of leave in the first draw, you can submit a reballot.
1.Identify β The system finds staff with <4 weeks allocated.β
2.Generate Links β You receive a unique, secure link via email.β
3.Submit β You select your preferred additional weeks.β
4.Second Draw β A second draw runs to allocate remaining slots.
π Secure Links: Each reballot link is unique and secure, verifying your identity and the number of weeks you're owed.
8. Duplicate Entries
The system detects and handles duplicate entries:
β οΈ Duplicate Types
P1 Duplicate
You selected the same week multiple times in P1. The dashboard shows each entry you submitted β the duplicate occurrence is marked VOID β. Only one entry enters the draw.
P2 Duplicate
You selected the same week multiple times in P2. The dashboard shows each entry you submitted β the duplicate occurrence is marked VOID β. Only one entry enters the draw.
Cross Duplicate
You selected the same week in both P1 and P2. The dashboard shows both entries: the P1 entry is valid (no tag) and enters the draw; the P2 entry is markedVOID β and is excluded.
β οΈ Important: Every submitted entry is captured on the dashboard β duplicates are not hidden. The entry that actually counts is the one without the VOID β badge; the flagged duplicate is excluded from the draw. For a cross duplicate, the P1 entry wins the week and the P2 entry is shown as VOID β.
User Guide
Dashboard Guide Using the Leave Ballot Dashboard
Everything you need to know to understand your leave ballot dashboard.
The dashboard shows all weeks of the year, organized by month. Each week is displayed as a card that shows who has submitted, who has been allocated, and how many slots remain.
π What You'll See β Scroll to explore
February 2027
1β7 Feb 2027-W05
π§§ Chinese New Year
π Protected Leaves (2)
BYT (IR)RL
TJH (MRI)TL
π Submitted (9)
GMT (CT)P1
EAG (US)P1
CSE (MRI)P2
DRD (NM)P2
CCC (GEN)P2
ZYC (IR)P2
YHY (IR)P1
FZS (MRI)P1
GQY (CT)P1
Ballot entries: 9
IR
PACS
CT
MRI
NM
BIC
US
3/4
0/2
2/5
3/6
1/3
0/2
1/4
π Pre-Draw: Entries show as "Submitted". BYT is exempted (always allocated, adds a slot). Baby blue marks future-modality staff (GEN β a future modality in 2027): EAG (US), CSE (MRI), TJH (MRI).
1β7 Feb 2027-W05(9 slots)
π§§ Chinese New Year
π Protected Leaves (2)
BYT (IR)RL
TJH (MRI)TL
β Allocated (8)
GMT (CT)P1
EAG (US)P1
YHY (IR)P1
FZS (MRI)P1
GQY (CT)P1
CSE (MRI)P2
DRD (NM)P2
CCC (GEN)P2
β Unallocated (1)
ZYC (IR)P2
π Reballot (1)
CKM (MRI)Rebid
Remaining slots: 1 / 9
IR
PACS
CT
MRI
NM
BIC
US
3/2
0/0
2/3
3/4
1/1
0/0
1/2
π Post-Draw (oversubscribed): With the base cap cut to 9 and each modality cap reduced by 2, 8 of 9 requests were allocated. ZYC missed out because the IR cap was reached, and CKM reballoted for the 1 remaining slot.
3β9 Jan 2028 2028-W01
β BONUS
π Protected Leaves (2)
BYT (IR)RL
TJH (MRI)TL
π Bonus Opt-ins (9)
GMT (CT)Bonus
EAG (US)Bonus
CSE (MRI)Bonus
DRD (NM)Bonus
CCC (GEN)Bonus
ZYC (IR)Bonus
YHY (IR)Bonus
FZS (MRI)Bonus
GQY (CT)Bonus
Ballot entries: 9
IR
PACS
CT
MRI
NM
BIC
US
3/2
0/0
2/3
3/4
1/1
0/0
1/2
π Bonus Week: An extra 2028-W01 week with reduced caps. There are no P1/P2 priorities β every opt-in is treated equally as a "Bonus" entry.
β Scroll left/right to see all examples β
Key Things to Know
A quick legend for reading the mock cards above:
π Key things to know:
Month headers β weeks are grouped by month for easy navigation.
Week cards β each card shows one week's complete data.
Holiday badges β public holidays and school holidays are clearly marked.
Clickable week titles β click any week's title to jump straight to that week in the Draw Log.
Future modalities β GEN staff moving into a modality in 2027 are highlighted baby blue and shown with their future modality (e.g. EAG (US)). During the draw they take up the future modality's cap.
Capacity not shown β each week has a set capacity for ballot leave, but the exact number is intentionally hidden as it may be adjusted before the draw. Only the number of entries is shown.
Colored sections β each box is colour-coded: green Allocated, orange Submitted/Unallocated, yellow Reballot, grey Protected Leaves.
Name highlights β a staff name's background marks their status: light brown = exempted staff, baby blue = future-modality staff.
"Submitted" vs "Allocated" β before the draw, entries show as Submitted. After the draw, successful entries become Allocated, and unsuccessful ones become Unallocated.
Oversubscribed weeks β when more staff request a week than there is capacity, the draw randomly selects who gets the slots. The entry counter turns red to alert you.
How the Slot Counter Works
Each card shows a slot counter β Ballot entries: X before the draw and Remaining slots: X / Y after it. The weekly capacity is intentionally not shown before the draw, as it may be adjusted then β once the draw has run, the final capacity is shown.
π The counter states:
Pre-draw β "Ballot entries: X" shows how many staff have submitted for that week (e.g. "Ballot entries: 9").
Post-draw β "Remaining slots: X / Y" shows slots left after allocations (the capacity is final once the draw has run).
Oversubscribed β when more staff request a week than there is capacity, the counter turns red.
Exempted staff β exempted staff are included in the entry count but not called out separately.
How the Modality Counter Works
Each week card includes a modality counter β a small grid showing, for every modality, how many staff are using it versus that modality's capacity for the week:
π Modality Counter Example β 1β7 Jan (2027-W01)
IR
PACS
CT
MRI
NM
BIC
US
0/3
0/2
2/5
4/6
0/3
0/2
0/4
How to read it:
Number on the left β how many staff are using that modality for this week (ballot requests + protected leaves).
Number on the right β that modality's capacity for the week.
Dynamic relaxation: When a staff member is on protected leave in a modality that week, that modality's capacity increases by 1 β e.g., MRI shows 4/6 because 4 MRI staff requested and an MRI protected leave raised the cap from 5 to 6.
Oversubscribed: When usage reaches or exceeds capacity, the counter turns orange.
The modality counter appears both before and after the draw β it always reflects demand (who requested) versus capacity.
π Tip: Use the search bar above the dashboard to filter weeks by staff initials, and the filter chips (All weeks Β· π Public Holidays Β· π School Holidays Β· β οΈ Oversubscribed) to narrow the week view. This is useful for checking specific staff members' allocations.
2. Exempted Staff
Some staff may appear with a light brown background around their name. These are exempted staff.
What This Means for You:
Exempted staff are always allocated their requested weeks.
They do not count toward modality caps.
They increase weekly capacity β each exempted staff member adds 1 extra slot to the week.
π Example: A week has 15 slots. If 2 exempted staff request that week, effective capacity becomes 17 slots.
3. Analytics
The Analytics section shows key metrics about submissions and draw results:
Submission Rate β how many staff have submitted their ballot.
P1 / P2 Requests β how many P1 and P2 requests were made, and how many were allocated (with allocation rates).
Bonus Opt-ins β how many staff chose the bonus week.
Top 5 Popular Weeks β the most requested weeks, shown by date range (hover the range to see the week code, e.g. "2027-W05").
π Allocation Stats (after the draw) β how many staff ended up with 0, 1, 2, 3, 4 (or more) balloted weeks, as a count and as a percentage of non-exempted staff.
Oversubscribed Weeks β weeks where more staff requested than slots available.
π Reading Allocation Stats: A row like "4 weeks β 3 staff β 30%" means 3 of the non-exempted staff (30%) received exactly 4 balloted weeks. The bonus week and protected leaves are excluded from the calculation, and exempted staff are not counted at all.
4. Draw Log
The Draw Log shows exactly how the algorithm processed each week. You can see the original entries, the shuffled order, and the decision for each entry.
π Example Draw Log Entry β 2027-W05 (from the mock cards above)
1β7 Feb 2027 (2027-W05) β 9 allocated, 0 remainingβΌ
Original list β entries as submitted, before any processing.
Shuffled list β the random order used for allocation (using the seed).
Decision for each entry β ALLOCATED or SKIPPED with the reason.
Reason for skipping β cap reached, slots full, or conflict with another staff member.
Modality counters β shows how many staff from each modality have been allocated (e.g., "CT 1/4").
Bonus entries β shown if there are any bonus week opt-ins.
π Search: Use the search bar in the Draw Log section to find specific staff members across all weeks, and the Expand all / Collapse all buttons to reveal or hide every decision at once. Type initials to filter to only the weeks containing that staff member.
π What to look for:
ALLOCATED β this staff member got the week.
SKIPPED β this staff member did not get the week. The reason is shown in brackets.
Modality counters β e.g., "CT 1/4" means 1 of 4 CT slots used.
Conflict skips β "conflict with IC" means the staff member was skipped because they conflict with an already-allocated staff member.
Collapsed by default β each week starts collapsed; click a header (βΆ/βΌ) to expand it, or use the Expand all / Collapse all buttons.
5. Missing Leaves
This section shows staff who have fewer than 4 weeks of allocated leave. The department target is 4 weeks.
The Weeks Not Allocated column lists the weeks each person missed as date ranges (e.g., 6β12 Feb) rather than week codes β hover a range to see its week code. A range with an asterisk (*) means that week's submission was flagged as a duplicate and excluded from the draw.
π Note: If you're on this list, you'll be eligible for the reballot process to request additional weeks.
6. FAQ
How often does the dashboard refresh?
The dashboard checks for updates every 15 seconds while the tab is visible and focused β it pauses when you switch away, to save resources. The "Updated" time in the top bar shows when data was last refreshed.
What does the β° button do?
The floating β° button opens a menu with quick links to the Dashboard, Analytics, Draw Log and Missing Leaves sections, plus this guide.