skilldrop-cli 1.5.0 → 1.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (133) hide show
  1. package/README.md +4 -1
  2. package/catalogue.json +25 -2
  3. package/model-routing.json +20 -0
  4. package/package.json +1 -1
  5. package/packs/civil-architect/pack.json +60 -0
  6. package/packs/civil-architect/skills/floor-plan-layout/SKILL.md +103 -0
  7. package/packs/civil-architect/skills/floor-plan-layout/evals/eval_queries.json +30 -0
  8. package/packs/civil-architect/skills/floor-plan-layout/evals/evals.json +57 -0
  9. package/packs/civil-architect/skills/floor-plan-layout/evals/files/4/adu-programme.md +12 -0
  10. package/packs/civil-architect/skills/floor-plan-layout/examples/ground-floor.md +65 -0
  11. package/packs/civil-architect/skills/floor-plan-layout/examples/ground-floor.svg +135 -0
  12. package/packs/civil-architect/skills/floor-plan-layout/manifest.json +34 -0
  13. package/packs/civil-architect/skills/floor-plan-layout/scripts/plan_check.py +449 -0
  14. package/packs/civil-architect/skills/floor-plan-layout/templates/plan.json +38 -0
  15. package/packs/event-planner/pack.json +61 -0
  16. package/packs/event-planner/skills/run-of-show/SKILL.md +141 -0
  17. package/packs/event-planner/skills/run-of-show/evals/eval_queries.json +30 -0
  18. package/packs/event-planner/skills/run-of-show/evals/evals.json +103 -0
  19. package/packs/event-planner/skills/run-of-show/evals/files/1/agenda.md +16 -0
  20. package/packs/event-planner/skills/run-of-show/evals/files/2/schedule.csv +8 -0
  21. package/packs/event-planner/skills/run-of-show/evals/files/3/notes.txt +3 -0
  22. package/packs/event-planner/skills/run-of-show/evals/files/4/sessions_export.csv +25 -0
  23. package/packs/event-planner/skills/run-of-show/evals/files/4/venue_and_crew.txt +27 -0
  24. package/packs/event-planner/skills/run-of-show/evals/files/5/runsheet_v4.csv +28 -0
  25. package/packs/event-planner/skills/run-of-show/evals/files/5/venue_and_suppliers.txt +22 -0
  26. package/packs/event-planner/skills/run-of-show/evals/files/6/acts_from_booker.csv +26 -0
  27. package/packs/event-planner/skills/run-of-show/evals/files/6/venue_rooms_and_crew.txt +14 -0
  28. package/packs/event-planner/skills/run-of-show/evals/files/7/runsheet_draft_v4.csv +25 -0
  29. package/packs/event-planner/skills/run-of-show/evals/files/7/venue_and_fixed_times.txt +24 -0
  30. package/packs/event-planner/skills/run-of-show/examples/product-launch.md +77 -0
  31. package/packs/event-planner/skills/run-of-show/examples/product-launch.svg +58 -0
  32. package/packs/event-planner/skills/run-of-show/manifest.json +44 -0
  33. package/packs/event-planner/skills/run-of-show/scripts/show_check.py +295 -0
  34. package/packs/event-planner/skills/run-of-show/templates/show.json +15 -0
  35. package/packs/event-planner/skills/seating-plan/SKILL.md +152 -0
  36. package/packs/event-planner/skills/seating-plan/evals/eval_queries.json +30 -0
  37. package/packs/event-planner/skills/seating-plan/evals/evals.json +134 -0
  38. package/packs/event-planner/skills/seating-plan/evals/files/1/guests.csv +31 -0
  39. package/packs/event-planner/skills/seating-plan/evals/files/2/table-plan.txt +8 -0
  40. package/packs/event-planner/skills/seating-plan/evals/files/3/brief.txt +4 -0
  41. package/packs/event-planner/skills/seating-plan/evals/files/3/guests.csv +49 -0
  42. package/packs/event-planner/skills/seating-plan/evals/files/4/rsvp_export.csv +127 -0
  43. package/packs/event-planner/skills/seating-plan/evals/files/4/seating_notes.txt +21 -0
  44. package/packs/event-planner/skills/seating-plan/evals/files/5/organiser_notes.txt +10 -0
  45. package/packs/event-planner/skills/seating-plan/evals/files/5/registrations.csv +93 -0
  46. package/packs/event-planner/skills/seating-plan/evals/files/5/table_plan_v3.csv +94 -0
  47. package/packs/event-planner/skills/seating-plan/evals/files/6/bridgets_notes.txt +30 -0
  48. package/packs/event-planner/skills/seating-plan/evals/files/6/ticket_export.csv +117 -0
  49. package/packs/event-planner/skills/seating-plan/evals/files/6/venue_floorplan_notes.txt +14 -0
  50. package/packs/event-planner/skills/seating-plan/evals/files/7/keep_apart_CONFIDENTIAL.txt +9 -0
  51. package/packs/event-planner/skills/seating-plan/evals/files/7/prom_seating_v3.csv +101 -0
  52. package/packs/event-planner/skills/seating-plan/evals/files/7/ticket_list.csv +101 -0
  53. package/packs/event-planner/skills/seating-plan/evals/files/7/venue_info.txt +16 -0
  54. package/packs/event-planner/skills/seating-plan/evals/files/8/registrations_export.csv +147 -0
  55. package/packs/event-planner/skills/seating-plan/evals/files/8/room_layout.md +22 -0
  56. package/packs/event-planner/skills/seating-plan/evals/files/8/seating_requests.txt +31 -0
  57. package/packs/event-planner/skills/seating-plan/evals/files/9/guest_list.csv +84 -0
  58. package/packs/event-planner/skills/seating-plan/evals/files/9/notes.txt +16 -0
  59. package/packs/event-planner/skills/seating-plan/evals/files/9/table_plan.csv +85 -0
  60. package/packs/event-planner/skills/seating-plan/examples/wedding-dinner.md +61 -0
  61. package/packs/event-planner/skills/seating-plan/examples/wedding-dinner.svg +39 -0
  62. package/packs/event-planner/skills/seating-plan/manifest.json +44 -0
  63. package/packs/event-planner/skills/seating-plan/scripts/seating_check.py +324 -0
  64. package/packs/event-planner/skills/seating-plan/templates/seating.json +28 -0
  65. package/packs/experience-design/pack.json +5 -0
  66. package/packs/experience-design/skills/locale-check/SKILL.md +139 -0
  67. package/packs/experience-design/skills/locale-check/evals/eval_queries.json +38 -0
  68. package/packs/experience-design/skills/locale-check/evals/evals.json +104 -0
  69. package/packs/experience-design/skills/locale-check/evals/files/1/budget.json +1 -0
  70. package/packs/experience-design/skills/locale-check/evals/files/1/locales/ar.json +16 -0
  71. package/packs/experience-design/skills/locale-check/evals/files/1/locales/de.json +12 -0
  72. package/packs/experience-design/skills/locale-check/evals/files/1/locales/en.json +12 -0
  73. package/packs/experience-design/skills/locale-check/evals/files/1/locales/pl.json +12 -0
  74. package/packs/experience-design/skills/locale-check/evals/files/2/app/src/main/res/values/strings.xml +12 -0
  75. package/packs/experience-design/skills/locale-check/evals/files/2/app/src/main/res/values-es/strings.xml +11 -0
  76. package/packs/experience-design/skills/locale-check/evals/files/2/app/src/main/res/values-fr/strings.xml +12 -0
  77. package/packs/experience-design/skills/locale-check/evals/files/3/po/ja.po +20 -0
  78. package/packs/experience-design/skills/locale-check/evals/files/3/po/messages.pot +23 -0
  79. package/packs/experience-design/skills/locale-check/evals/files/3/po/ru.po +22 -0
  80. package/packs/experience-design/skills/locale-check/evals/files/4/budgets.json +15 -0
  81. package/packs/experience-design/skills/locale-check/evals/files/4/locales/ar.json +265 -0
  82. package/packs/experience-design/skills/locale-check/evals/files/4/locales/de.json +265 -0
  83. package/packs/experience-design/skills/locale-check/evals/files/4/locales/en.json +265 -0
  84. package/packs/experience-design/skills/locale-check/evals/files/4/locales/fr.json +265 -0
  85. package/packs/experience-design/skills/locale-check/evals/files/4/locales/pl.json +265 -0
  86. package/packs/experience-design/skills/locale-check/evals/files/5/app/src/main/res/values/strings.xml +77 -0
  87. package/packs/experience-design/skills/locale-check/evals/files/5/app/src/main/res/values-es/strings.xml +63 -0
  88. package/packs/experience-design/skills/locale-check/evals/files/5/app/src/main/res/values-ja/strings.xml +61 -0
  89. package/packs/experience-design/skills/locale-check/evals/files/6/po/cs.po +605 -0
  90. package/packs/experience-design/skills/locale-check/evals/files/6/po/marlin.pot +602 -0
  91. package/packs/experience-design/skills/locale-check/evals/files/6/po/pt_BR.po +602 -0
  92. package/packs/experience-design/skills/locale-check/evals/files/6/po/ru.po +608 -0
  93. package/packs/experience-design/skills/locale-check/evals/files/7/Tidewatch/Resources/en.lproj/Localizable.strings +160 -0
  94. package/packs/experience-design/skills/locale-check/evals/files/7/Tidewatch/Resources/en.lproj/Localizable.stringsdict +70 -0
  95. package/packs/experience-design/skills/locale-check/evals/files/7/Tidewatch/Resources/he.lproj/Localizable.strings +157 -0
  96. package/packs/experience-design/skills/locale-check/evals/files/7/Tidewatch/Resources/he.lproj/Localizable.stringsdict +86 -0
  97. package/packs/experience-design/skills/locale-check/evals/files/7/Tidewatch/Resources/it.lproj/Localizable.strings +160 -0
  98. package/packs/experience-design/skills/locale-check/evals/files/7/Tidewatch/Resources/it.lproj/Localizable.stringsdict +68 -0
  99. package/packs/experience-design/skills/locale-check/evals/files/7/Tidewatch/Resources/ko.lproj/Localizable.strings +160 -0
  100. package/packs/experience-design/skills/locale-check/evals/files/7/Tidewatch/Resources/ko.lproj/Localizable.stringsdict +62 -0
  101. package/packs/experience-design/skills/locale-check/examples/settings-release.md +107 -0
  102. package/packs/experience-design/skills/locale-check/manifest.json +45 -0
  103. package/packs/experience-design/skills/locale-check/scripts/locale_check.py +1105 -0
  104. package/packs/operations-manager/pack.json +60 -0
  105. package/packs/operations-manager/skills/shift-roster/SKILL.md +166 -0
  106. package/packs/operations-manager/skills/shift-roster/evals/eval_queries.json +38 -0
  107. package/packs/operations-manager/skills/shift-roster/evals/evals.json +135 -0
  108. package/packs/operations-manager/skills/shift-roster/evals/files/1/shifts.csv +3 -0
  109. package/packs/operations-manager/skills/shift-roster/evals/files/1/staff.csv +8 -0
  110. package/packs/operations-manager/skills/shift-roster/evals/files/2/rota.csv +22 -0
  111. package/packs/operations-manager/skills/shift-roster/evals/files/2/staff.csv +6 -0
  112. package/packs/operations-manager/skills/shift-roster/evals/files/3/team.md +14 -0
  113. package/packs/operations-manager/skills/shift-roster/evals/files/4/availability_export_wk47.csv +23 -0
  114. package/packs/operations-manager/skills/shift-roster/evals/files/4/rota_notes.txt +20 -0
  115. package/packs/operations-manager/skills/shift-roster/evals/files/5/rota_draft_16-29nov.csv +107 -0
  116. package/packs/operations-manager/skills/shift-roster/evals/files/5/staff_list.csv +17 -0
  117. package/packs/operations-manager/skills/shift-roster/evals/files/6/availability_notes.txt +24 -0
  118. package/packs/operations-manager/skills/shift-roster/evals/files/6/peoplehub_staff_export.csv +14 -0
  119. package/packs/operations-manager/skills/shift-roster/evals/files/6/rota_template.csv +25 -0
  120. package/packs/operations-manager/skills/shift-roster/evals/files/7/leave_and_availability.txt +18 -0
  121. package/packs/operations-manager/skills/shift-roster/evals/files/7/rota_wc_30nov.csv +47 -0
  122. package/packs/operations-manager/skills/shift-roster/evals/files/7/staff_list.csv +15 -0
  123. package/packs/operations-manager/skills/shift-roster/evals/files/8/availability_form_responses.csv +22 -0
  124. package/packs/operations-manager/skills/shift-roster/evals/files/8/cover_requirements.csv +15 -0
  125. package/packs/operations-manager/skills/shift-roster/evals/files/8/staff_export.csv +29 -0
  126. package/packs/operations-manager/skills/shift-roster/evals/files/9/leave_and_restrictions.txt +16 -0
  127. package/packs/operations-manager/skills/shift-roster/evals/files/9/rota_export_07-13Dec.csv +85 -0
  128. package/packs/operations-manager/skills/shift-roster/evals/files/9/staff_list.csv +27 -0
  129. package/packs/operations-manager/skills/shift-roster/examples/cafe-week.md +72 -0
  130. package/packs/operations-manager/skills/shift-roster/examples/cafe-week.svg +123 -0
  131. package/packs/operations-manager/skills/shift-roster/manifest.json +34 -0
  132. package/packs/operations-manager/skills/shift-roster/scripts/roster_check.py +633 -0
  133. package/packs/operations-manager/skills/shift-roster/templates/roster.json +22 -0
@@ -0,0 +1,17 @@
1
+ Name,FLT licence,First aider,Contracted max hrs/wk,Leave / availability
2
+ Wojciech Nowak,Yes,No,40,Hol 23/11 - 29/11
3
+ Abena Mensah,Yes,Yes,40,No Sundays (contract)
4
+ Callum Reid,Yes,No,40,Hol Fri 27 - Sun 29
5
+ Delphine Moreau,Yes,No,32,Off Sun 29/11 - family wedding
6
+ Harpreet Gill,No,Yes,40,Training course Thu 26/11
7
+ Owen Price,No,Yes,40,
8
+ Lucia Romano,No,Yes,32,Earlies only (childcare)
9
+ Tariq Haddad,No,No,40,
10
+ Megan Doyle,No,No,40,Hol 16-18 Nov
11
+ Stefan Ilic,No,No,40,
12
+ Yasmin Khoury,No,No,24,
13
+ Ben Ashworth,No,No,40,
14
+ Nadia Petrova,No,Yes,24,
15
+ Kwame Asante,No,No,32,"Dentist Fri 20th, off all day"
16
+ Rhian Morgan,No,No,16,Student - not Sundays
17
+ Jonah Feld,No,No,40,
@@ -0,0 +1,24 @@
1
+ Availability - claims line rota 16-29 Nov (copied out of emails / Teams / the sticky notes on my desk)
2
+ ------------------------------------------------------------------------------------------------------
3
+
4
+ Jade - "can only do earlies at the mo, need to be gone by half 4 for the childminder. Sundays fine cos my mum has her"
5
+
6
+ Catrin: college Tuesdays and Thursdays all day, both weeks. any other day ok
7
+
8
+ Lewis (Teams msg): hi! uni timetable again so its just friday lates and weekends for me pls. not a fri early, i've got a lecture
9
+
10
+ Megan - annual leave Wed 25th, Thu 26th, Fri 27th (approved in PeopleHub)
11
+
12
+ Kwame - no Sundays (as always)
13
+
14
+ Priya - can't do a late on a Monday, she's got her dad Monday evenings. any other shift fine
15
+
16
+ Rhys: dentist 9am Weds 18th so not the early that day. "happy to do the late"
17
+
18
+ Sofia - off Fri 20th, sister's wedding. booked ages ago
19
+
20
+ Amara - Weds are her other job, never a Wednesday
21
+
22
+ Dariusz - evening class Wednesdays, so no late on a Weds. earlies fine
23
+
24
+ Bethan / Tom - nothing this time
@@ -0,0 +1,14 @@
1
+ Employee ID,Surname,Forename,Job Title,Contracted Hrs/Wk,Skills / Endorsements,Start Date,Status,Leaving Date,Work Email
2
+ QM1171,ASHDOWN,Tom,Claims Handler,32.0,,30/10/2023,Active,,tom.ashdown@quillmoor.example
3
+ QM1240,DOYLE,Megan,Claims Handler,32.0,,07/07/2022,Active,,megan.doyle@quillmoor.example
4
+ QM1231,GRANT,Lewis,Claims Handler (student),16.0,,15/09/2025,Active,,lewis.grant@quillmoor.example
5
+ QM1150,HUGHES,Catrin,Claims Handler,24.0,Welsh (fluent),05/09/2025,Active,,catrin.hughes@quillmoor.example
6
+ QM1077,KOWAL,Dariusz,Team Leader,40.0,Team Leader cover,14/06/2021,Active,,dariusz.kowal@quillmoor.example
7
+ QM1118,LLEWELLYN,Rhys,Claims Handler,32.0,Welsh (fluent),22/01/2020,Active,,rhys.llewellyn@quillmoor.example
8
+ QM1205,MARCHETTI,Sofia,Claims Handler,24.0,,02/06/2025,Active,,sofia.marchetti@quillmoor.example
9
+ QM1192,MENSAH,Kwame,Claims Handler,32.0,,18/03/2024,Active,,kwame.mensah@quillmoor.example
10
+ QM1042,MORGAN,Bethan,Team Leader,40.0,Team Leader cover; Welsh (fluent),03/02/2019,Active,,bethan.morgan@quillmoor.example
11
+ QM1164,NAIR,Priya,Claims Handler,32.0,,11/04/2022,Active,,priya.nair@quillmoor.example
12
+ QM1103,OSEI,Amara,Team Leader,24.0,Team Leader cover,01/09/2023,Active,,amara.osei@quillmoor.example
13
+ QM1012,PENRY,Gareth,Team Leader,40.0,Team Leader cover; Welsh (fluent),12/05/2016,Leaver,31/10/2026,gareth.penry@quillmoor.example
14
+ QM1189,WHITLOCK,Jade,Claims Handler,24.0,,06/01/2025,Active,,jade.whitlock@quillmoor.example
@@ -0,0 +1,25 @@
1
+ Date,Day,Shift,Start,Finish,Staff needed,Must include,Staff 1,Staff 2,Staff 3
2
+ 16/11/2026,Mon,Early,07:30,15:30,3,1 x team leader,,,
3
+ 16/11/2026,Mon,Late,13:30,21:30,3,1 x team leader + 1 x Welsh speaker,,,
4
+ 17/11/2026,Tue,Early,07:30,15:30,3,1 x team leader,,,
5
+ 17/11/2026,Tue,Late,13:30,21:30,3,1 x team leader + 1 x Welsh speaker,,,
6
+ 18/11/2026,Wed,Early,07:30,15:30,3,1 x team leader,,,
7
+ 18/11/2026,Wed,Late,13:30,21:30,3,1 x team leader + 1 x Welsh speaker,,,
8
+ 19/11/2026,Thu,Early,07:30,15:30,3,1 x team leader,,,
9
+ 19/11/2026,Thu,Late,13:30,21:30,3,1 x team leader + 1 x Welsh speaker,,,
10
+ 20/11/2026,Fri,Early,07:30,15:30,3,1 x team leader,,,
11
+ 20/11/2026,Fri,Late,13:30,21:30,3,1 x team leader + 1 x Welsh speaker,,,
12
+ 21/11/2026,Sat,Sat Day,09:00,17:00,2,1 x team leader + 1 x Welsh speaker,,,n/a
13
+ 22/11/2026,Sun,Sun Day,10:00,16:00,2,1 x team leader,,,n/a
14
+ 23/11/2026,Mon,Early,07:30,15:30,3,1 x team leader,,,
15
+ 23/11/2026,Mon,Late,13:30,21:30,3,1 x team leader + 1 x Welsh speaker,,,
16
+ 24/11/2026,Tue,Early,07:30,15:30,3,1 x team leader,,,
17
+ 24/11/2026,Tue,Late,13:30,21:30,3,1 x team leader + 1 x Welsh speaker,,,
18
+ 25/11/2026,Wed,Early,07:30,15:30,3,1 x team leader,,,
19
+ 25/11/2026,Wed,Late,13:30,21:30,3,1 x team leader + 1 x Welsh speaker,,,
20
+ 26/11/2026,Thu,Early,07:30,15:30,3,1 x team leader,,,
21
+ 26/11/2026,Thu,Late,13:30,21:30,3,1 x team leader + 1 x Welsh speaker,,,
22
+ 27/11/2026,Fri,Early,07:30,15:30,3,1 x team leader,,,
23
+ 27/11/2026,Fri,Late,13:30,21:30,3,1 x team leader + 1 x Welsh speaker,,,
24
+ 28/11/2026,Sat,Sat Day,09:00,17:00,2,1 x team leader + 1 x Welsh speaker,,,n/a
25
+ 29/11/2026,Sun,Sun Day,10:00,16:00,2,1 x team leader,,,n/a
@@ -0,0 +1,18 @@
1
+ Harbourside clinic - leave / availability w/c 30 Nov (from the leave calendar + my notebook)
2
+
3
+ LEAVE
4
+ - Lena Varga: annual leave Fri 4 Dec - Sun 6 Dec (approved)
5
+
6
+ STANDING PATTERNS
7
+ - Joel Ambrose - contract is Mon-Fri only, doesn't do Saturdays
8
+ - Fran Teale - never Mondays
9
+ - Rosa Lindqvist - doesn't work Fridays
10
+ - Hannah Brook - earlies only (school pick-up)
11
+ - Sam Okoro - Thu/Fri lates + Saturdays only (student)
12
+ - Nadia Fern - bank phlebotomist, does the phlebotomy clinic only (Mon/Wed/Fri mornings), up to her 12 hrs
13
+
14
+ SESSIONS (Sunday closed)
15
+ - Early 07:30-15:30: 2 nurses, 1 HCA, 1 reception
16
+ - Late 13:00-21:00: 2 nurses, 1 HCA, 1 reception
17
+ - Phlebotomy clinic Mon/Wed/Fri 08:00-12:00: 1 person with phlebotomy
18
+ - Sat Minor Injuries 09:00-13:00: 1 prescriber (must be - they see walk-ins and prescribe), 1 nurse, 1 reception
@@ -0,0 +1,47 @@
1
+ Date,Day,Session,Time,Role,Staff member
2
+ 30/11/2026,Mon,Early,07:30-15:30,Nurse,Gwen Pryce
3
+ 30/11/2026,Mon,Early,07:30-15:30,Nurse,Marek Novak
4
+ 30/11/2026,Mon,Early,07:30-15:30,HCA,Ben Carrow
5
+ 30/11/2026,Mon,Early,07:30-15:30,Reception,Hannah Brook
6
+ 30/11/2026,Mon,Phlebotomy clinic,08:00-12:00,Phlebotomist,Nadia Fern
7
+ 30/11/2026,Mon,Late,13:00-21:00,Nurse,Joel Ambrose
8
+ 30/11/2026,Mon,Late,13:00-21:00,Nurse,Aisha Rahman
9
+ 30/11/2026,Mon,Late,13:00-21:00,HCA,Rosa Lindqvist
10
+ 30/11/2026,Mon,Late,13:00-21:00,Reception,Callum Reid
11
+ 01/12/2026,Tue,Early,07:30-15:30,Nurse,Gwen Pryce
12
+ 01/12/2026,Tue,Early,07:30-15:30,Nurse,Lena Varga
13
+ 01/12/2026,Tue,Early,07:30-15:30,HCA,Ben Carrow
14
+ 01/12/2026,Tue,Early,07:30-15:30,Reception,Hannah Brook
15
+ 01/12/2026,Tue,Late,13:00-21:00,Nurse,Fran Teale
16
+ 01/12/2026,Tue,Late,13:00-21:00,Nurse,Joel Ambrose
17
+ 01/12/2026,Tue,Late,13:00-21:00,HCA,Rosa Lindqvist
18
+ 01/12/2026,Tue,Late,13:00-21:00,Reception,Callum Reid
19
+ 02/12/2026,Wed,Early,07:30-15:30,Nurse,Gwen Pryce
20
+ 02/12/2026,Wed,Early,07:30-15:30,Nurse,Aisha Rahman
21
+ 02/12/2026,Wed,Early,07:30-15:30,HCA,Ola Adebayo
22
+ 02/12/2026,Wed,Early,07:30-15:30,Reception,Hannah Brook
23
+ 02/12/2026,Wed,Phlebotomy clinic,08:00-12:00,Phlebotomist,Ola Adebayo
24
+ 02/12/2026,Wed,Late,13:00-21:00,Nurse,Lena Varga
25
+ 02/12/2026,Wed,Late,13:00-21:00,Nurse,Joel Ambrose
26
+ 02/12/2026,Wed,Late,13:00-21:00,HCA,Ben Carrow
27
+ 02/12/2026,Wed,Late,13:00-21:00,Reception,Priti Desai
28
+ 03/12/2026,Thu,Early,07:30-15:30,Nurse,Fran Teale
29
+ 03/12/2026,Thu,Early,07:30-15:30,Nurse,Marek Novak
30
+ 03/12/2026,Thu,Early,07:30-15:30,HCA,Rosa Lindqvist
31
+ 03/12/2026,Thu,Early,07:30-15:30,Reception,Hannah Brook
32
+ 03/12/2026,Thu,Late,13:00-21:00,Nurse,Gwen Pryce
33
+ 03/12/2026,Thu,Late,13:00-21:00,Nurse,Aisha Rahman
34
+ 03/12/2026,Thu,Late,13:00-21:00,HCA,Ola Adebayo
35
+ 03/12/2026,Thu,Late,13:00-21:00,Reception,Sam Okoro
36
+ 04/12/2026,Fri,Early,07:30-15:30,Nurse,Gwen Pryce
37
+ 04/12/2026,Fri,Early,07:30-15:30,Nurse,Fran Teale
38
+ 04/12/2026,Fri,Early,07:30-15:30,HCA,Ben Carrow
39
+ 04/12/2026,Fri,Early,07:30-15:30,Reception,Priti Desai
40
+ 04/12/2026,Fri,Phlebotomy clinic,08:00-12:00,Phlebotomist,Aisha Rahman
41
+ 04/12/2026,Fri,Late,13:00-21:00,Nurse,Marek Novak
42
+ 04/12/2026,Fri,Late,13:00-21:00,Nurse,Joel Ambrose
43
+ 04/12/2026,Fri,Late,13:00-21:00,HCA,Ola Adebayo
44
+ 04/12/2026,Fri,Late,13:00-21:00,Reception,Callum Reid
45
+ 05/12/2026,Sat,Minor Injuries (Sat),09:00-13:00,Prescriber,Fran Teale
46
+ 05/12/2026,Sat,Minor Injuries (Sat),09:00-13:00,Nurse,Marek Novak
47
+ 05/12/2026,Sat,Minor Injuries (Sat),09:00-13:00,Reception,Sam Okoro
@@ -0,0 +1,15 @@
1
+ Name,Job title,Contracted hours/week,Can cover,Email
2
+ Gwen Pryce,Practice Nurse,40,Nurse,gwen.pryce@harbourside-clinic.example
3
+ Fran Teale,Practice Nurse,32,Nurse,fran.teale@harbourside-clinic.example
4
+ Marek Novak,Practice Nurse,40,Nurse,marek.novak@harbourside-clinic.example
5
+ Aisha Rahman,Practice Nurse,32,Nurse / Phlebotomy,aisha.rahman@harbourside-clinic.example
6
+ Joel Ambrose,Nurse Prescriber,40,Nurse / Prescriber,joel.ambrose@harbourside-clinic.example
7
+ Lena Varga,Advanced Nurse Practitioner,32,Nurse / Prescriber,lena.varga@harbourside-clinic.example
8
+ Ola Adebayo,Healthcare Assistant,32,HCA / Phlebotomy,ola.adebayo@harbourside-clinic.example
9
+ Rosa Lindqvist,Healthcare Assistant,24,HCA,rosa.lindqvist@harbourside-clinic.example
10
+ Ben Carrow,Healthcare Assistant,40,HCA / Phlebotomy,ben.carrow@harbourside-clinic.example
11
+ Nadia Fern,Phlebotomist,12,Phlebotomy,nadia.fern@harbourside-clinic.example
12
+ Hannah Brook,Receptionist,24,Reception,hannah.brook@harbourside-clinic.example
13
+ Priti Desai,Senior Receptionist,40,Reception,priti.desai@harbourside-clinic.example
14
+ Callum Reid,Receptionist,32,Reception,callum.reid@harbourside-clinic.example
15
+ Sam Okoro,Receptionist (Sat),16,Reception,sam.okoro@harbourside-clinic.example
@@ -0,0 +1,22 @@
1
+ Timestamp,Your name,Any dates/times you CAN'T work 23 Nov - 6 Dec?
2
+ 09/11/2026 09:35:00,Rhiannon Tull,Annual leave Mon 30 Nov - Wed 2 Dec (approved)
3
+ 09/11/2026 11:36:00,Fenella Orchard,Can't do Sundays
4
+ 09/11/2026 14:43:00,Tadeusz Wren,Fully available
5
+ 09/11/2026 19:02:00,Marisol Penhale,Weekdays lates only please (earlies clash with school run)
6
+ 10/11/2026 01:26:00,Arjun Mistry-Hale,Off Thu 26 and Fri 27 Nov (hospital appointment + recovery)
7
+ 10/11/2026 05:37:00,Siobhan Daley,No Sundays
8
+ 10/11/2026 11:09:00,Oluwaseun Hartley,Fully available
9
+ 10/11/2026 14:56:00,Callum Feeney,Away Fri 4 - Sun 6 Dec (brother's stag do)
10
+ 10/11/2026 21:28:00,Priya Somerton,Fully available
11
+ 11/11/2026 01:29:00,Benedict Ogunleye,Fully available
12
+ 11/11/2026 06:56:00,Saskia Vermeulen,Earlies/AM only - I do evenings at my other job
13
+ 11/11/2026 13:26:00,Jaden Okafor,College till 3 weekdays - after 3 and weekends fine
14
+ 11/11/2026 18:10:00,Maisie Thorne,"Uni - weekday afternoons/evenings only (after 3pm), weekends ok"
15
+ 11/11/2026 18:38:00,Rory Venn,"after 3pm weekdays, any weekend"
16
+ 11/11/2026 21:08:00,Amira Haddad,"Sixth form, after 3 weekdays. weekends any"
17
+ 11/11/2026 21:57:00,Theo Blackwood,after 3pm on weekdays. NOT Sat 28 Nov (exam)
18
+ 12/11/2026 02:24:00,Lucia Ferrante,Weekday evenings + weekends
19
+ 12/11/2026 04:35:00,Owen Garside,after 3 weekdays / weekends
20
+ 12/11/2026 05:32:00,Bethan Lloyd-Pryce,Fully available
21
+ 12/11/2026 07:11:00,Nikhil Rao,"Tuesdays, Thursdays and Saturdays only"
22
+ 12/11/2026 09:28:00,Ifeoma Barrett,Not Mon 23 Nov
@@ -0,0 +1,15 @@
1
+ Days,Area,Shift,Start,Finish,Staff needed,Must hold
2
+ Mon-Fri,Duty manager,Early,06:00,14:00,1,Duty Manager
3
+ Mon-Fri,Duty manager,Late,14:00,22:00,1,Duty Manager
4
+ Mon-Fri,Pool lifeguard,Early,06:15,14:15,3,NPLQ
5
+ Mon-Fri,Pool lifeguard,Late,14:00,22:15,3,NPLQ
6
+ Mon-Fri,Reception,Early,06:00,14:00,1,Reception
7
+ Mon-Fri,Reception,Late,14:00,22:00,1,Reception
8
+ Mon-Thu,Swim lessons,Evening,16:00,19:30,2,Swim Teacher L2
9
+ Sat-Sun,Duty manager,AM,07:30,14:00,1,Duty Manager
10
+ Sat-Sun,Duty manager,PM,13:30,20:30,1,Duty Manager
11
+ Sat-Sun,Pool lifeguard,AM,07:45,14:00,4,NPLQ
12
+ Sat-Sun,Pool lifeguard,PM,13:45,20:15,4,NPLQ
13
+ Sat-Sun,Reception,AM,07:30,14:00,1,Reception
14
+ Sat-Sun,Reception,PM,13:30,20:30,1,Reception
15
+ Sat,Swim lessons,Morning,09:00,13:00,3,Swim Teacher L2
@@ -0,0 +1,29 @@
1
+ Employee No,First Name,Surname,Job Title,Contracted Hrs/Wk,Qualifications (current),Email
2
+ BL1001,Rhiannon,Tull,Duty Manager,37.5,Duty Manager; NPLQ; Reception; First Aid,rhiannon.tull@brackenmoor-leisure.example
3
+ BL1002,Kwame,Asante-Byrne,Duty Manager,37.5,Duty Manager; NPLQ; First Aid,kwame.asantebyrne@brackenmoor-leisure.example
4
+ BL1003,Fenella,Orchard,Duty Manager,37.5,Duty Manager; NPLQ; Reception; First Aid,fenella.orchard@brackenmoor-leisure.example
5
+ BL1004,Tadeusz,Wren,Assistant Duty Manager,30,Duty Manager; NPLQ; First Aid,tadeusz.wren@brackenmoor-leisure.example
6
+ BL1005,Marisol,Penhale,Assistant Duty Manager,24,Duty Manager; NPLQ; First Aid,marisol.penhale@brackenmoor-leisure.example
7
+ BL1101,Joanna,Kettleby,Receptionist,37.5,Reception; First Aid,joanna.kettleby@brackenmoor-leisure.example
8
+ BL1102,Arjun,Mistry-Hale,Receptionist,30,Reception,arjun.mistryhale@brackenmoor-leisure.example
9
+ BL1103,Siobhan,Daley,Receptionist,22.5,Reception,siobhan.daley@brackenmoor-leisure.example
10
+ BL1104,Ewan,Brackley,Receptionist (relief),16,Reception,ewan.brackley@brackenmoor-leisure.example
11
+ BL1201,Oluwaseun,Hartley,Lifeguard,37.5,NPLQ; First Aid,oluwaseun.hartley@brackenmoor-leisure.example
12
+ BL1202,Greta,Lindqvist,Lifeguard,37.5,NPLQ; Swim Teacher L2; First Aid,greta.lindqvist@brackenmoor-leisure.example
13
+ BL1203,Callum,Feeney,Lifeguard,37.5,NPLQ; First Aid,callum.feeney@brackenmoor-leisure.example
14
+ BL1204,Priya,Somerton,Lifeguard,37.5,NPLQ; First Aid,priya.somerton@brackenmoor-leisure.example
15
+ BL1205,Dmitri,Coles,Lifeguard,37.5,NPLQ,dmitri.coles@brackenmoor-leisure.example
16
+ BL1206,Hollie,Ashworth,Lifeguard,30,NPLQ; First Aid,hollie.ashworth@brackenmoor-leisure.example
17
+ BL1207,Benedict,Ogunleye,Lifeguard,37.5,NPLQ; First Aid,benedict.ogunleye@brackenmoor-leisure.example
18
+ BL1208,Saskia,Vermeulen,Lifeguard,24,NPLQ,saskia.vermeulen@brackenmoor-leisure.example
19
+ BL1301,Jaden,Okafor,Casual Lifeguard,20,NPLQ,jaden.okafor@brackenmoor-leisure.example
20
+ BL1302,Maisie,Thorne,Casual Lifeguard,20,NPLQ; Swim Teacher L2,maisie.thorne@brackenmoor-leisure.example
21
+ BL1303,Rory,Venn,Casual Lifeguard,16,NPLQ,rory.venn@brackenmoor-leisure.example
22
+ BL1304,Amira,Haddad,Casual Lifeguard,20,NPLQ,amira.haddad@brackenmoor-leisure.example
23
+ BL1305,Theo,Blackwood,Casual Lifeguard,16,NPLQ,theo.blackwood@brackenmoor-leisure.example
24
+ BL1306,Lucia,Ferrante,Casual Lifeguard,20,NPLQ,lucia.ferrante@brackenmoor-leisure.example
25
+ BL1307,Owen,Garside,Casual Lifeguard,16,NPLQ,owen.garside@brackenmoor-leisure.example
26
+ BL1401,Bethan,Lloyd-Pryce,Swim Teacher,16,Swim Teacher L2,bethan.lloydpryce@brackenmoor-leisure.example
27
+ BL1402,Nikhil,Rao,Swim Teacher,12,Swim Teacher L2,nikhil.rao@brackenmoor-leisure.example
28
+ BL1403,Cerys,Mallory,Swim Teacher,12,Swim Teacher L2,cerys.mallory@brackenmoor-leisure.example
29
+ BL1404,Ifeoma,Barrett,Swim Teacher,10,Swim Teacher L2,ifeoma.barrett@brackenmoor-leisure.example
@@ -0,0 +1,16 @@
1
+ QUILLMERE HOUSE - leave / restrictions as at 4 Dec
2
+
3
+ - Adaeze Moorcroft: Annual leave Sun 13 Dec - Tue 15 Dec (approved 2 Dec)
4
+ - Philippa Strand: Days only - OH restriction, no nights
5
+ - Godfrey Achterberg: Days only (contract)
6
+ - Rosalind Ebo: Cannot do Sunday nights (no childcare) - agreed
7
+ - Declan Furness: Annual leave Sun 13 Dec
8
+ - Yasmin Okonedo-Hart: Bank - can't do Sundays (other job)
9
+ - Imogen Saddler: Annual leave Thu 10 Dec
10
+ - Florence Adebayo: Nights only
11
+ - Niamh Corrigan: No lates on Wednesdays (college)
12
+ - Stanislav Petrov: Nights only
13
+ - Kofi Mensah-Lowe: Nights only
14
+
15
+ Reminder: every shift needs 1 Senior Carer who is medication trained (meds rounds 08:00, 12:00, 17:00, 22:00).
16
+ Cover: Early 1 senior + 4 CAs, Late 1 senior + 3 CAs, Night 1 senior + 2 CAs.
@@ -0,0 +1,85 @@
1
+ Date,Day,Shift,Start,End,Role,Staff ID,Staff Name
2
+ 07/12/2026,Mon,Early,07:00,14:30,Senior Carer,QH-202,Philippa Strand
3
+ 07/12/2026,Mon,Early,07:00,14:30,Care Assistant,QH-301,Bronwen Tilsley
4
+ 07/12/2026,Mon,Early,07:00,14:30,Care Assistant,QH-315,Agnieszka Wolak
5
+ 07/12/2026,Mon,Early,07:00,14:30,Care Assistant,QH-320,Gwen Tarrant
6
+ 07/12/2026,Mon,Early,07:00,14:30,Care Assistant,QH-309,Ravi Chaudhry
7
+ 07/12/2026,Mon,Late,14:00,21:30,Senior Carer,QH-204,Rosalind Ebo
8
+ 07/12/2026,Mon,Late,14:00,21:30,Care Assistant,QH-306,Shona McAllister
9
+ 07/12/2026,Mon,Late,14:00,21:30,Care Assistant,QH-318,Bilal Qureshi
10
+ 07/12/2026,Mon,Late,14:00,21:30,Care Assistant,QH-302,Mehmet Arslan
11
+ 07/12/2026,Mon,Night,21:00,07:30,Senior Carer,QH-206,Yasmin Okonedo-Hart
12
+ 07/12/2026,Mon,Night,21:00,07:30,Care Assistant,QH-316,Kofi Mensah-Lowe
13
+ 07/12/2026,Mon,Night,21:00,07:30,Care Assistant,QH-307,Patrice Delacroix
14
+ 08/12/2026,Tue,Early,07:00,14:30,Senior Carer,QH-203,Godfrey Achterberg
15
+ 08/12/2026,Tue,Early,07:00,14:30,Care Assistant,QH-313,Harriet Quinlan
16
+ 08/12/2026,Tue,Early,07:00,14:30,Care Assistant,QH-319,Eamon Fairlie
17
+ 08/12/2026,Tue,Early,07:00,14:30,Care Assistant,QH-303,Corinne Vance
18
+ 08/12/2026,Tue,Early,07:00,14:30,Care Assistant,QH-301,Bronwen Tilsley
19
+ 08/12/2026,Tue,Late,14:00,21:30,Senior Carer,QH-202,Philippa Strand
20
+ 08/12/2026,Tue,Late,14:00,21:30,Care Assistant,QH-301,Bronwen Tilsley
21
+ 08/12/2026,Tue,Late,14:00,21:30,Care Assistant,QH-317,Tamsin Raeburn
22
+ 08/12/2026,Tue,Late,14:00,21:30,Care Assistant,QH-311,Niamh Corrigan
23
+ 08/12/2026,Tue,Night,21:00,07:30,Senior Carer,QH-205,Declan Furness
24
+ 08/12/2026,Tue,Night,21:00,07:30,Care Assistant,QH-304,Lukas Brennan
25
+ 08/12/2026,Tue,Night,21:00,07:30,Care Assistant,QH-308,Imogen Saddler
26
+ 09/12/2026,Wed,Early,07:00,14:30,Senior Carer,QH-203,Godfrey Achterberg
27
+ 09/12/2026,Wed,Early,07:00,14:30,Care Assistant,QH-307,Patrice Delacroix
28
+ 09/12/2026,Wed,Early,07:00,14:30,Care Assistant,QH-306,Shona McAllister
29
+ 09/12/2026,Wed,Early,07:00,14:30,Care Assistant,QH-313,Harriet Quinlan
30
+ 09/12/2026,Wed,Early,07:00,14:30,Care Assistant,QH-315,Agnieszka Wolak
31
+ 09/12/2026,Wed,Late,14:00,21:30,Senior Carer,QH-201,Adaeze Moorcroft
32
+ 09/12/2026,Wed,Late,14:00,21:30,Care Assistant,QH-309,Ravi Chaudhry
33
+ 09/12/2026,Wed,Late,14:00,21:30,Care Assistant,QH-318,Bilal Qureshi
34
+ 09/12/2026,Wed,Late,14:00,21:30,Care Assistant,QH-303,Corinne Vance
35
+ 09/12/2026,Wed,Night,21:00,07:30,Senior Carer,QH-204,Rosalind Ebo
36
+ 09/12/2026,Wed,Night,21:00,07:30,Care Assistant,QH-314,Joel Ambrose
37
+ 09/12/2026,Wed,Night,21:00,07:30,Care Assistant,QH-312,Stanislav Petrov
38
+ 10/12/2026,Thu,Early,07:00,14:30,Senior Carer,QH-202,Philippa Strand
39
+ 10/12/2026,Thu,Early,07:00,14:30,Care Assistant,QH-315,Agnieszka Wolak
40
+ 10/12/2026,Thu,Early,07:00,14:30,Care Assistant,QH-319,Eamon Fairlie
41
+ 10/12/2026,Thu,Early,07:00,14:30,Care Assistant,QH-306,Shona McAllister
42
+ 10/12/2026,Thu,Early,07:00,14:30,Care Assistant,QH-311,Niamh Corrigan
43
+ 10/12/2026,Thu,Late,14:00,21:30,Senior Carer,QH-318,Bilal Qureshi
44
+ 10/12/2026,Thu,Late,14:00,21:30,Care Assistant,QH-309,Ravi Chaudhry
45
+ 10/12/2026,Thu,Late,14:00,21:30,Care Assistant,QH-317,Tamsin Raeburn
46
+ 10/12/2026,Thu,Late,14:00,21:30,Care Assistant,QH-305,Tendai Moyo
47
+ 10/12/2026,Thu,Night,21:00,07:30,Senior Carer,QH-201,Adaeze Moorcroft
48
+ 10/12/2026,Thu,Night,21:00,07:30,Care Assistant,QH-302,Mehmet Arslan
49
+ 10/12/2026,Thu,Night,21:00,07:30,Care Assistant,QH-320,Gwen Tarrant
50
+ 11/12/2026,Fri,Early,07:00,14:30,Senior Carer,QH-204,Rosalind Ebo
51
+ 11/12/2026,Fri,Early,07:00,14:30,Care Assistant,QH-313,Harriet Quinlan
52
+ 11/12/2026,Fri,Early,07:00,14:30,Care Assistant,QH-304,Lukas Brennan
53
+ 11/12/2026,Fri,Early,07:00,14:30,Care Assistant,QH-314,Joel Ambrose
54
+ 11/12/2026,Fri,Early,07:00,14:30,Care Assistant,QH-301,Bronwen Tilsley
55
+ 11/12/2026,Fri,Late,14:00,21:30,Senior Carer,QH-203,Godfrey Achterberg
56
+ 11/12/2026,Fri,Late,14:00,21:30,Care Assistant,QH-309,Ravi Chaudhry
57
+ 11/12/2026,Fri,Late,14:00,21:30,Care Assistant,QH-308,Imogen Saddler
58
+ 11/12/2026,Fri,Late,14:00,21:30,Care Assistant,QH-307,Patrice Delacroix
59
+ 11/12/2026,Fri,Night,21:00,07:30,Senior Carer,QH-206,Yasmin Okonedo-Hart
60
+ 11/12/2026,Fri,Night,21:00,07:30,Care Assistant,QH-303,Corinne Vance
61
+ 11/12/2026,Fri,Night,21:00,07:30,Care Assistant,QH-310,Florence Adebayo
62
+ 12/12/2026,Sat,Early,07:00,14:30,Senior Carer,QH-201,Adaeze Moorcroft
63
+ 12/12/2026,Sat,Early,07:00,14:30,Care Assistant,QH-309,Ravi Chaudhry
64
+ 12/12/2026,Sat,Early,07:00,14:30,Care Assistant,QH-317,Tamsin Raeburn
65
+ 12/12/2026,Sat,Early,07:00,14:30,Care Assistant,QH-314,Joel Ambrose
66
+ 12/12/2026,Sat,Early,07:00,14:30,Care Assistant,QH-311,Niamh Corrigan
67
+ 12/12/2026,Sat,Late,14:00,21:30,Senior Carer,QH-205,Declan Furness
68
+ 12/12/2026,Sat,Late,14:00,21:30,Care Assistant,QH-319,Eamon Fairlie
69
+ 12/12/2026,Sat,Late,14:00,21:30,Care Assistant,QH-306,Shona McAllister
70
+ 12/12/2026,Sat,Late,14:00,21:30,Care Assistant,QH-320,Gwen Tarrant
71
+ 12/12/2026,Sat,Night,21:00,07:30,Senior Carer,QH-204,Rosalind Ebo
72
+ 12/12/2026,Sat,Night,21:00,07:30,Care Assistant,QH-305,Tendai Moyo
73
+ 12/12/2026,Sat,Night,21:00,07:30,Care Assistant,QH-310,Florence Adebayo
74
+ 13/12/2026,Sun,Early,07:00,14:30,Senior Carer,QH-202,Philippa Strand
75
+ 13/12/2026,Sun,Early,07:00,14:30,Care Assistant,QH-308,Imogen Saddler
76
+ 13/12/2026,Sun,Early,07:00,14:30,Care Assistant,QH-318,Bilal Qureshi
77
+ 13/12/2026,Sun,Early,07:00,14:30,Care Assistant,QH-315,Agnieszka Wolak
78
+ 13/12/2026,Sun,Early,07:00,14:30,Care Assistant,QH-302,Mehmet Arslan
79
+ 13/12/2026,Sun,Late,14:00,21:30,Senior Carer,QH-203,Godfrey Achterberg
80
+ 13/12/2026,Sun,Late,14:00,21:30,Care Assistant,QH-303,Corinne Vance
81
+ 13/12/2026,Sun,Late,14:00,21:30,Care Assistant,QH-313,Harriet Quinlan
82
+ 13/12/2026,Sun,Late,14:00,21:30,Care Assistant,QH-314,Joel Ambrose
83
+ 13/12/2026,Sun,Night,21:00,07:30,Senior Carer,QH-201,Adaeze Moorcroft
84
+ 13/12/2026,Sun,Night,21:00,07:30,Care Assistant,QH-304,Lukas Brennan
85
+ 13/12/2026,Sun,Night,21:00,07:30,Care Assistant,QH-316,Kofi Mensah-Lowe
@@ -0,0 +1,27 @@
1
+ Staff ID,Name,Grade,Contracted hours,Medication trained,Email
2
+ QH-201,Adaeze Moorcroft,Senior Carer,37.5,Yes,adaeze.moorcroft@quillmerehouse.example
3
+ QH-202,Philippa Strand,Senior Carer,37.5,Yes,philippa.strand@quillmerehouse.example
4
+ QH-203,Godfrey Achterberg,Senior Carer,30,Yes,godfrey.achterberg@quillmerehouse.example
5
+ QH-204,Rosalind Ebo,Senior Carer,37.5,Yes,rosalind.ebo@quillmerehouse.example
6
+ QH-205,Declan Furness,Senior Carer,30,Yes,declan.furness@quillmerehouse.example
7
+ QH-206,Yasmin Okonedo-Hart,Senior Carer (bank),22.5,Yes,yasmin.okonedo-hart@quillmerehouse.example
8
+ QH-301,Bronwen Tilsley,Care Assistant,37.5,No,bronwen.tilsley@quillmerehouse.example
9
+ QH-302,Mehmet Arslan,Care Assistant,37.5,No,mehmet.arslan@quillmerehouse.example
10
+ QH-303,Corinne Vance,Care Assistant,37.5,No,corinne.vance@quillmerehouse.example
11
+ QH-304,Lukas Brennan,Care Assistant,30,No,lukas.brennan@quillmerehouse.example
12
+ QH-305,Tendai Moyo,Care Assistant,30,No,tendai.moyo@quillmerehouse.example
13
+ QH-306,Shona McAllister,Care Assistant,37.5,No,shona.mcallister@quillmerehouse.example
14
+ QH-307,Patrice Delacroix,Care Assistant,22.5,No,patrice.delacroix@quillmerehouse.example
15
+ QH-308,Imogen Saddler,Care Assistant,30,No,imogen.saddler@quillmerehouse.example
16
+ QH-309,Ravi Chaudhry,Care Assistant,37.5,No,ravi.chaudhry@quillmerehouse.example
17
+ QH-310,Florence Adebayo,Care Assistant,31.5,No,florence.adebayo@quillmerehouse.example
18
+ QH-311,Niamh Corrigan,Care Assistant,22.5,No,niamh.corrigan@quillmerehouse.example
19
+ QH-312,Stanislav Petrov,Care Assistant,31.5,No,stanislav.petrov@quillmerehouse.example
20
+ QH-313,Harriet Quinlan,Care Assistant,30,No,harriet.quinlan@quillmerehouse.example
21
+ QH-314,Joel Ambrose,Care Assistant,37.5,No,joel.ambrose@quillmerehouse.example
22
+ QH-315,Agnieszka Wolak,Care Assistant,37.5,No,agnieszka.wolak@quillmerehouse.example
23
+ QH-316,Kofi Mensah-Lowe,Care Assistant,31.5,No,kofi.mensah-lowe@quillmerehouse.example
24
+ QH-317,Tamsin Raeburn,Care Assistant,22.5,No,tamsin.raeburn@quillmerehouse.example
25
+ QH-318,Bilal Qureshi,Care Assistant,30,No,bilal.qureshi@quillmerehouse.example
26
+ QH-319,Eamon Fairlie,Care Assistant,37.5,No,eamon.fairlie@quillmerehouse.example
27
+ QH-320,Gwen Tarrant,Care Assistant,30,No,gwen.tarrant@quillmerehouse.example
@@ -0,0 +1,72 @@
1
+ # Worked example: a café week, and the turnaround the first draft hid
2
+
3
+ Input → output oracle for `shift-roster`. It shows a first draft that looks covered and puts a
4
+ closer back on the next morning's opening shift, and the rota that passes every rule.
5
+
6
+ ## Input
7
+
8
+ > Make next week's rota for the café, Monday to Saturday. Every day there's an opening shift
9
+ > 06:30–14:30 and a closing shift 14:00–21:00, and each needs one keyholder and one barista.
10
+ > Staff:
11
+ > - Amira: keyholder, barista, max 40 h, contracted 37.5
12
+ > - Ben: barista, max 24 h, contracted 24, can't do Wednesdays (college)
13
+ > - Chloe: keyholder, barista, max 32 h, contracted 30
14
+ > - Dev: keyholder, barista, max 40 h, contracted 37.5
15
+ > - Ema: barista, max 24 h, contracted 20, not Mondays or Tuesdays
16
+ > - Fay: barista, max 32 h, contracted 30
17
+ >
18
+ > At least 11 hours between shifts, nobody more than 5 days in a row.
19
+
20
+ ## The first draft, and what the check found
21
+
22
+ The draft filled every shift, two people each, with the keyholders on the keyholder needs.
23
+ It put Ben on Thursday's close and Friday's open. The check failed it:
24
+
25
+ ```
26
+ FAIL Ben gets 9.5 h rest between Thu close (ends Thu 21:00) and Fri open, under the 11 h minimum
27
+ FAIL Ben works 30 h in week 1, over their 24 h maximum
28
+ WARN Ema works 14 h against 20 h contracted
29
+ ```
30
+
31
+ Thursday's close went to Ema instead, who is free that evening and under her hours. That
32
+ fixed all three. The reply never shows the draft: the manager sees the rota that passed.
33
+
34
+ ## Output
35
+
36
+ **Rota, week of 9 November**
37
+
38
+ | | Mon | Tue | Wed | Thu | Fri | Sat |
39
+ |---|---|---|---|---|---|---|
40
+ | Amira | open 06:30–14:30 (keys) | open (keys) | open (keys) | open (keys) | open (keys) | |
41
+ | Ben | close 14:00–21:00 | | | | open | open |
42
+ | Chloe | close (keys) | close (keys) | close (keys) | | | open (keys) |
43
+ | Dev | | close | close | close (keys) | close (keys) | close (keys) |
44
+ | Ema | | | | close | close | close |
45
+ | Fay | open | open | open | open | | |
46
+
47
+ Checked: every shift has a keyholder and a barista, and nobody is under 11 hours' rest, over
48
+ their hours, on a day they can't work or more than 5 days in a row.
49
+
50
+ **Hours:** Amira 40 (contracted 37.5), Ben 23 (24), Chloe 29 (30), Dev 35 (37.5), Ema 21 (20),
51
+ Fay 32 (30). Amira is at her 40-hour maximum, 2.5 over contract, because only three people hold
52
+ keys and twelve shifts need one. A fourth keyholder would let her drop a shift.
53
+
54
+ **Rules used, as you gave them:** 11 hours between shifts, 5 days in a row. **Assumed:** at most
55
+ 12 hours in a day.
56
+
57
+ The week grid is saved as `rota-week-of-2026-11-09.svg`, and the rota as `roster.json`, both in
58
+ the working folder.
59
+
60
+ ## Why this is the oracle
61
+
62
+ - **The check passes before the rota is shown.** The draft was covered, and still broke rest and
63
+ a maximum. A glance at a grid doesn't show a 21:00 close followed by a 06:30 open.
64
+ - **Skills are matched, not heads counted.** Every shift's keyholder is one of the three
65
+ keyholders. Two baristas on an opening shift would look covered and be short.
66
+ - **The fix is the smallest change,** one shift moved to the person with room in their week,
67
+ and the reply explains the one hours figure over contract.
68
+
69
+ A cheaper pass fills the grid evenly, says it "looks balanced", and publishes the draft:
70
+ Ben opens nine and a half hours after closing, and works six hours over his maximum.
71
+
72
+ ![The checked week](cafe-week.svg)
@@ -0,0 +1,123 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 954 458" width="954" height="458" font-family="Helvetica, Arial, sans-serif" font-size="11">
2
+ <rect width="954" height="458" fill="#ffffff"/>
3
+ <text x="10" y="22" font-size="15" font-weight="bold">Rota</text>
4
+ <text x="10" y="40" fill="#555">0 failure(s), 0 warning(s). Red marks a shift or a person the check failed.</text>
5
+ <rect x="150" y="60" width="112" height="358" fill="#ffffff" stroke="#ddd"/>
6
+ <text x="206.0" y="72" text-anchor="middle" font-weight="bold">Mon</text>
7
+ <rect x="262" y="60" width="112" height="358" fill="#ffffff" stroke="#ddd"/>
8
+ <text x="318.0" y="72" text-anchor="middle" font-weight="bold">Tue</text>
9
+ <rect x="374" y="60" width="112" height="358" fill="#ffffff" stroke="#ddd"/>
10
+ <text x="430.0" y="72" text-anchor="middle" font-weight="bold">Wed</text>
11
+ <rect x="486" y="60" width="112" height="358" fill="#ffffff" stroke="#ddd"/>
12
+ <text x="542.0" y="72" text-anchor="middle" font-weight="bold">Thu</text>
13
+ <rect x="598" y="60" width="112" height="358" fill="#ffffff" stroke="#ddd"/>
14
+ <text x="654.0" y="72" text-anchor="middle" font-weight="bold">Fri</text>
15
+ <rect x="710" y="60" width="112" height="358" fill="#f4f4f6" stroke="#ddd"/>
16
+ <text x="766.0" y="72" text-anchor="middle" font-weight="bold">Sat</text>
17
+ <rect x="822" y="60" width="112" height="358" fill="#f4f4f6" stroke="#ddd"/>
18
+ <text x="878.0" y="72" text-anchor="middle" font-weight="bold">Sun</text>
19
+ <line x1="0" y1="76" x2="954" y2="76" stroke="#ccc"/>
20
+ <text x="10" y="94" font-weight="bold">Amira</text>
21
+ <text x="10" y="108" fill="#555">40 h / 37.5 contracted</text>
22
+ <rect x="154" y="82" width="104" height="30" rx="4" fill="#e6f0fb" stroke="#4a7fc1" stroke-width="1"/>
23
+ <text x="159" y="94">06:30–14:30</text>
24
+ <text x="159" y="107" fill="#555">keyholder</text>
25
+ <rect x="266" y="82" width="104" height="30" rx="4" fill="#e6f0fb" stroke="#4a7fc1" stroke-width="1"/>
26
+ <text x="271" y="94">06:30–14:30</text>
27
+ <text x="271" y="107" fill="#555">keyholder</text>
28
+ <rect x="378" y="82" width="104" height="30" rx="4" fill="#e6f0fb" stroke="#4a7fc1" stroke-width="1"/>
29
+ <text x="383" y="94">06:30–14:30</text>
30
+ <text x="383" y="107" fill="#555">keyholder</text>
31
+ <rect x="490" y="82" width="104" height="30" rx="4" fill="#e6f0fb" stroke="#4a7fc1" stroke-width="1"/>
32
+ <text x="495" y="94">06:30–14:30</text>
33
+ <text x="495" y="107" fill="#555">keyholder</text>
34
+ <rect x="602" y="82" width="104" height="30" rx="4" fill="#e6f0fb" stroke="#4a7fc1" stroke-width="1"/>
35
+ <text x="607" y="94">06:30–14:30</text>
36
+ <text x="607" y="107" fill="#555">keyholder</text>
37
+ <line x1="0" y1="122" x2="954" y2="122" stroke="#ccc"/>
38
+ <text x="10" y="140" font-weight="bold">Ben</text>
39
+ <text x="10" y="154" fill="#555">23 h / 24 contracted</text>
40
+ <rect x="154" y="128" width="104" height="30" rx="4" fill="#e6f0fb" stroke="#4a7fc1" stroke-width="1"/>
41
+ <text x="159" y="140">14:00–21:00</text>
42
+ <text x="159" y="153" fill="#555">barista</text>
43
+ <rect x="602" y="128" width="104" height="30" rx="4" fill="#e6f0fb" stroke="#4a7fc1" stroke-width="1"/>
44
+ <text x="607" y="140">06:30–14:30</text>
45
+ <text x="607" y="153" fill="#555">barista</text>
46
+ <rect x="714" y="128" width="104" height="30" rx="4" fill="#e6f0fb" stroke="#4a7fc1" stroke-width="1"/>
47
+ <text x="719" y="140">06:30–14:30</text>
48
+ <text x="719" y="153" fill="#555">barista</text>
49
+ <line x1="0" y1="168" x2="954" y2="168" stroke="#ccc"/>
50
+ <text x="10" y="186" font-weight="bold">Chloe</text>
51
+ <text x="10" y="200" fill="#555">29 h / 30 contracted</text>
52
+ <rect x="154" y="174" width="104" height="30" rx="4" fill="#e6f0fb" stroke="#4a7fc1" stroke-width="1"/>
53
+ <text x="159" y="186">14:00–21:00</text>
54
+ <text x="159" y="199" fill="#555">keyholder</text>
55
+ <rect x="266" y="174" width="104" height="30" rx="4" fill="#e6f0fb" stroke="#4a7fc1" stroke-width="1"/>
56
+ <text x="271" y="186">14:00–21:00</text>
57
+ <text x="271" y="199" fill="#555">keyholder</text>
58
+ <rect x="378" y="174" width="104" height="30" rx="4" fill="#e6f0fb" stroke="#4a7fc1" stroke-width="1"/>
59
+ <text x="383" y="186">14:00–21:00</text>
60
+ <text x="383" y="199" fill="#555">keyholder</text>
61
+ <rect x="714" y="174" width="104" height="30" rx="4" fill="#e6f0fb" stroke="#4a7fc1" stroke-width="1"/>
62
+ <text x="719" y="186">06:30–14:30</text>
63
+ <text x="719" y="199" fill="#555">keyholder</text>
64
+ <line x1="0" y1="214" x2="954" y2="214" stroke="#ccc"/>
65
+ <text x="10" y="232" font-weight="bold">Dev</text>
66
+ <text x="10" y="246" fill="#555">35 h / 37.5 contracted</text>
67
+ <rect x="266" y="220" width="104" height="30" rx="4" fill="#e6f0fb" stroke="#4a7fc1" stroke-width="1"/>
68
+ <text x="271" y="232">14:00–21:00</text>
69
+ <text x="271" y="245" fill="#555">barista</text>
70
+ <rect x="378" y="220" width="104" height="30" rx="4" fill="#e6f0fb" stroke="#4a7fc1" stroke-width="1"/>
71
+ <text x="383" y="232">14:00–21:00</text>
72
+ <text x="383" y="245" fill="#555">barista</text>
73
+ <rect x="490" y="220" width="104" height="30" rx="4" fill="#e6f0fb" stroke="#4a7fc1" stroke-width="1"/>
74
+ <text x="495" y="232">14:00–21:00</text>
75
+ <text x="495" y="245" fill="#555">keyholder</text>
76
+ <rect x="602" y="220" width="104" height="30" rx="4" fill="#e6f0fb" stroke="#4a7fc1" stroke-width="1"/>
77
+ <text x="607" y="232">14:00–21:00</text>
78
+ <text x="607" y="245" fill="#555">keyholder</text>
79
+ <rect x="714" y="220" width="104" height="30" rx="4" fill="#e6f0fb" stroke="#4a7fc1" stroke-width="1"/>
80
+ <text x="719" y="232">14:00–21:00</text>
81
+ <text x="719" y="245" fill="#555">keyholder</text>
82
+ <line x1="0" y1="260" x2="954" y2="260" stroke="#ccc"/>
83
+ <text x="10" y="278" font-weight="bold">Ema</text>
84
+ <text x="10" y="292" fill="#555">21 h / 20 contracted</text>
85
+ <rect x="490" y="266" width="104" height="30" rx="4" fill="#e6f0fb" stroke="#4a7fc1" stroke-width="1"/>
86
+ <text x="495" y="278">14:00–21:00</text>
87
+ <text x="495" y="291" fill="#555">barista</text>
88
+ <rect x="602" y="266" width="104" height="30" rx="4" fill="#e6f0fb" stroke="#4a7fc1" stroke-width="1"/>
89
+ <text x="607" y="278">14:00–21:00</text>
90
+ <text x="607" y="291" fill="#555">barista</text>
91
+ <rect x="714" y="266" width="104" height="30" rx="4" fill="#e6f0fb" stroke="#4a7fc1" stroke-width="1"/>
92
+ <text x="719" y="278">14:00–21:00</text>
93
+ <text x="719" y="291" fill="#555">barista</text>
94
+ <line x1="0" y1="306" x2="954" y2="306" stroke="#ccc"/>
95
+ <text x="10" y="324" font-weight="bold">Fay</text>
96
+ <text x="10" y="338" fill="#555">32 h / 30 contracted</text>
97
+ <rect x="154" y="312" width="104" height="30" rx="4" fill="#e6f0fb" stroke="#4a7fc1" stroke-width="1"/>
98
+ <text x="159" y="324">06:30–14:30</text>
99
+ <text x="159" y="337" fill="#555">barista</text>
100
+ <rect x="266" y="312" width="104" height="30" rx="4" fill="#e6f0fb" stroke="#4a7fc1" stroke-width="1"/>
101
+ <text x="271" y="324">06:30–14:30</text>
102
+ <text x="271" y="337" fill="#555">barista</text>
103
+ <rect x="378" y="312" width="104" height="30" rx="4" fill="#e6f0fb" stroke="#4a7fc1" stroke-width="1"/>
104
+ <text x="383" y="324">06:30–14:30</text>
105
+ <text x="383" y="337" fill="#555">barista</text>
106
+ <rect x="490" y="312" width="104" height="30" rx="4" fill="#e6f0fb" stroke="#4a7fc1" stroke-width="1"/>
107
+ <text x="495" y="324">06:30–14:30</text>
108
+ <text x="495" y="337" fill="#555">barista</text>
109
+ <line x1="0" y1="352" x2="954" y2="352" stroke="#999"/>
110
+ <text x="10" y="370" font-weight="bold">Coverage</text>
111
+ <text x="156" y="370" fill="#2e7d32" font-weight="normal">Mon open 2/2</text>
112
+ <text x="156" y="388" fill="#2e7d32" font-weight="normal">Mon close 2/2</text>
113
+ <text x="268" y="370" fill="#2e7d32" font-weight="normal">Tue open 2/2</text>
114
+ <text x="268" y="388" fill="#2e7d32" font-weight="normal">Tue close 2/2</text>
115
+ <text x="380" y="370" fill="#2e7d32" font-weight="normal">Wed open 2/2</text>
116
+ <text x="380" y="388" fill="#2e7d32" font-weight="normal">Wed close 2/2</text>
117
+ <text x="492" y="370" fill="#2e7d32" font-weight="normal">Thu open 2/2</text>
118
+ <text x="492" y="388" fill="#2e7d32" font-weight="normal">Thu close 2/2</text>
119
+ <text x="604" y="370" fill="#2e7d32" font-weight="normal">Fri open 2/2</text>
120
+ <text x="604" y="388" fill="#2e7d32" font-weight="normal">Fri close 2/2</text>
121
+ <text x="716" y="370" fill="#2e7d32" font-weight="normal">Sat open 2/2</text>
122
+ <text x="716" y="388" fill="#2e7d32" font-weight="normal">Sat close 2/2</text>
123
+ </svg>
@@ -0,0 +1,34 @@
1
+ {
2
+ "name": "shift-roster",
3
+ "version": "0.2.0",
4
+ "description": "Build a staff rota for a week or a fortnight from who is available, what each shift needs and the working-time rules, and check it with a script before anyone sees it — every shift covered with the right skills, nobody double-booked, over their hours, short of rest between shifts or past the consecutive-day limit — drawn as a week grid. Use when a manager asks to \"make the rota\", \"build next week's schedule\", \"who should work which shift\", \"check this rota\", \"fill these shifts\", or has staff availability and shift needs for a shop, restaurant, clinic, warehouse or call centre.",
5
+ "entrypoint": "SKILL.md",
6
+ "deps": {
7
+ "npm": [],
8
+ "pip": []
9
+ },
10
+ "env": {
11
+ "required": [],
12
+ "optional": []
13
+ },
14
+ "related": [],
15
+ "tags": [
16
+ "rota",
17
+ "roster",
18
+ "scheduling",
19
+ "shifts",
20
+ "staffing",
21
+ "working-time",
22
+ "coverage"
23
+ ],
24
+ "permissions": {
25
+ "network": [],
26
+ "commands": [],
27
+ "files": "named-paths",
28
+ "notes": "Reads the roster.json it is given and writes the SVG to the path passed with --svg."
29
+ },
30
+ "model": {
31
+ "tier": "standard",
32
+ "rationale": "Assigning people to shifts is constraint-heavy but bounded: the script checks every rule, so the model's job is a good first assignment and fixing what the check reports."
33
+ }
34
+ }