Short-term on-the-fly rotas, for day-by-day management
Long-term rota planning, to achieve balanced and fair duties
Detailed statistics with a rota generator
Multiple open rotas
Cost comparisons rapidly switch between open rotas to compare costs and other differences
Dynamic - change anything, anytime, even when people have been assigned to duties. You can rename people, groups and tasks, delete people, tasks and groups, change the number required to be be on duty etc.
Command-line - What?!? Sounds a bit old fashioned, but the pseudo-natural language command-line (console style) input is very powerful, and is sometimes more convenient than clicking buttons (which is also available, of course). At a busy workstation, it might be quicker to just type in Mary can’t do 25th Aug and return later to manage the rota with the new information
Not bound by a 7-day week pattern Usually, rotas logically span 7 days. RotaMagic allows any number - up to 31 - to be viewed e.g. a repeating 10 day rota, for 5-on 5-off pattern (or whatever).
Powerful rules rules to allow and prevent people (and groups) doing certain tasks, dates and days (like Sue can’t do Tuesdays). Rules apply from date to date. So you can have men can’t do washing from 26th Jan to 18th Mar and Sue can’t do Tuesdays from 26th Jan to 4th Aug
A (probably) unique feature automatically change the structure of the rota, depending on who is on duty. Maybe you have a well-structured rota, but there is a member of staff who cannot do the whole of a particular duty type (e.g. a morning one), and therefore someone else always has to step in, whenever he has been assigned a duty. The “wrinkle-in-the-rota” is managed coherently.
Any number of staff; no start or end time (just like a calendar) - you can put someone on duty 5 years from now;
RotaMagic is a web app - a powerful, flexible Staff Rota program. There’s nothing to install. Use it for planning and managing both short term (managed frequently) and also planning long term rotas.
For small rotas or large ones; simple or complex.
For tablets, PCs (and even smart ‘phones - I wouldn’t recommend it though!). Note - Click “Front stuff” on the left to show more items.
There is no start or end time: duties are set in a calendar. You will work in a “period of interest” (POI), which can be changed on-the-fly.
You set up the tasks to be done each day: this can be a regular pattern, such as 10 people on duty on weekdays, and 2 on weekends, but closed on 25th and 26th December. Regular patterns need not cover 7 days.
Or you can have no pattern at all, with every day being different - 1st April needs 5 gardeners, 8 chefs and 9 waiters; 2nd April closed; 3rd April needs 3 judges and 2 gardeners. (Note the setup for this is by task, not by group. But more on that in the manual.)
Of course, you can keep it simple by not specifying any detail, and just have (say) 10 people “on duty” every day, or 5 during lunch, and 8 in the evenings.
Tasks (“on duty”, “wash up”, “surgery”) have start and end times, so tasks may overlap. RotaMagic prevents people being assigned to overlapping shifts.
You can have groups (such as “doctor”, “nurse”, “manager”). You will create these names. Staff can belong to more than one group, and can start/ on chosen dates.
You can have rules, which can be entered by clicking/tapping in the calendar, or by entering a command (“console” commands), such as Sue can’t work fridays from 17/6/2016, and Managers can’t wash dishes, Sue can’t do thursday mornings from 4/5/17 to 19/08/17 etc.
There is an engine that will (if you wish), fill in the rota (piecemeal too), assigning staff to duties as set by the rules (but you can allow it to break rules too). And of course there is manual editing. You can copy duty patterns, and “rotate” staff through those patterns.
Charge rates can be set for each person (and can change over time), and overall costs for particular rota “designs” (different work loads, different staff, full-time part-time and stand-bys). Several rotas can be open simultaneously, and rota costs can be instantly compared. And of course, sick leave, vacation etc. are catered for.
It shows detailed statistics e.g. how many nights people have been assigned, how many of each shift type have been assigned, and also percentages (so you can make a fair rota). It shows the count, and percentage count of duties assigned, hours and percentage of hours, and cost with percentage cost for each person. A breakdown by day and by task is presented also.
RotaMagic is free to use, but donations are somewhat vital! There is no licence, and there are no limitations, other than technical ones - like the power of your computer or tablet.
This Manual - being updated. There have been many changes since the previous update - not in the database/engine, but in the interface (so it can be used on touch screen, and on different browsers)
The App - Beta Version 0.4 uploaded (Feedback most welcome)
Cloud storage is NOT yet implemented, so rotas cannot be viewed across different devices (rotas are stored locally on your device)
Dates are now in the form 20/6, 20/6/16, 20/6/2016, 20/06 etc. This replaces the previous form “20th June”.
A new “motorcycle” icon is available in the CALENDAR page that controls the engine. It allows creation of shift patterns, copying of patterns, deletion of duties etc.
Command to change the structure of the tasks to be done. For example, you may have a super-chef who can do the work of two chefs. Normally you want 4 chefs on duty, but if the superchef is on duty, change the requirement to 3 chefs. When the super-chef is on duty, the daydef is changed. The command is
if fred newbusy
or if fred newbusy from 25/6
which will find all the dates when fred is on duty (any duty), and then sets the daydef to “newbusy”.
Existing assignments (=duties) will not be changed, but may now (most probably!) break rules.
replace busy apple
will replace all dates that are set to daydef “busy” to daydef “apple”. The replacement daydef must already exist (i.e in this example, it would not crate daydef “apple”).
if fred busy
and see that some “busy” daydefs have been set that you didn’t want, you will be able to
replace busy xyz
with xyz being the original daydef - if it is that simple of course. It is not likely to be that simple, so currently, the only UNDO command if for DTDs - and you can UNDO the
if fred busy
command, by typing “undo” in the command line.
Beta testers welcome!
RotaMagic display shifts that have been assigned to staff in a calendar. Shifts are colour-coded either by person or by task, so when ‘zoomed out’ a good overview of people’s shifts can be seen.
There is no start or end time to the rota: you can place people on duty five years from now. There is a Period of Interest (POI) (just the period between two dates that you’re interested in) which can be quickly changed.
First you enter a list of people. You can paste these into RotaMagic if you have an existing list (say in Excel).
Then you create tasks, and each task has a start time and end-time (of the day). Examples are on duty, wash dishes, fix a bike, morning-shift’, afternoon-shift, evening-makebeds-upstairs’.
Then you will create “daydefs”. They define the number of people to do each task. There is a built-in daydef called closed, in which all tasks are set to zero people: no-one does anything i.e. your workplace is closed. DayDefs let you define different work requirements throughout the calendar. For example, you might want typical work requirement of 5 people doing morning-duty and 7 afternoon-duty, except every other Monday where you need different numbers. Or even just for one date (e.g if you’re a restaurant, and you know you have a big party coming in).
Following on from defining a set of DayDefs (but maybe you only have closed and one other), you then set the daydefs throughout the calendar and you need.
You can define rules for staff - like steve can’t do Tuesdays. Several examples are shown elsewhere in these pages. You can put staff on holiday (meetings, sick, maternity leave etc).
You can also define groups. Like senior, old men, manager. Staff can belong to 0, 1 or more groups simultaneously. They will be set between dates - so someone can be an senior temporarily. Groups also have rules, so you can set (e.g.) managers can’t do morning-shift.
Staff can be given charge rates; again, these apply between dates, so people’s charge rates can change throughout the calendar.
There is an engine to automatically fill in the rota, by assigning staff to each task, tasking into account the rules and holidays. You can also do this piecemeal, building up the rota bit by bit.
In some cases it is desirable to see the percentage of duties assigned to staff. You might want to check that the number of Friday evening or weekend shifts is evenly (or otherwise) assigned. The Statistics page shows tables of numbers, percentages, costs, percentage costs etc can be views. Furthermore, the table can be used to “drive” the engine, by increasing or decreasing shifts (by type, by day etc.) for each person. Rotamagic will make adjustments to the rota, and you will see the statistics change on-the-fly. You will have to go back to the rota to see what it has changed though!
The input to RotaMagic can be in English (by line commands via the console), or by tapping buttons and menus.
You can export the rota setup (people, tasks, DayDefs). You can export the duties/assignments into CSV files (read by Excel, for example). You can adjust the format of the export.
You can change people’s names, even when there is an exsisting rota. In fact, you can change any name apart from the day names “monday” “tuesday”!!
You can also redefine task start and end times, and daydef definitions. RotaMagic will not mind, and it will show where adjustments need to be made if the assignments are no longer appropriate.
You can turn off rules on the tap of a button, allowing you to give a person a duty, even if he normally could not do it. Also, you can lock duties so that RotaMagic does not (nor you) delete it. So if you issue a repair command, locked duties (that might break rules) will not be deleted.
It certainly won’t do airline crewing nor school timetables.
It’s new (May 2016) - it may suit you. If it doesn’t work out for you, please contact me - I’d like to discover why.
Care homes (it allows many part-time workers, with lots of rules), GP rotas (it provides detailed statistics), police, staffing agencies, libraries, pubs, restaurants.
You will first create or import a list of people who are to be on the rota.
You will create at least one task for them to do. Each task will have a name, a brief code (that will be displayed in the calendar), and start and end times (e.g. from 9am to 5pm). The times are used to check that people aren’t given overlapping tasks, as well as calculating how many hours you have given them to work. However, if you have a simple rota, you might not need to set duty times.
Tasks can have any name : “morning”, “afternoon”, “surgery”, “abc”, “morning_surgery”, “abc_surgery_upstairs”. The underscore allows the amalgation of duties for statatistics and staff rules.
Then you will say how many tasks are done on each day. You might want 4 people washing, 2 drying and 1 cooking. You set this information in a Day Definition - DayDef. And on Saturdays you want 8 people washing, or whatever, and Mondays no-one, because you’re closed (“closed” here is a DayDef). If your rota is simple, just create a task called onduty.
Next, you can add staff rules, such as Steve can’t do Thursdays between 19/4/2016 and 22/6, and Steve can’t do Thursday afternoons between 19/4 to 22/11.If it proves useful for your case, put people into named teams/groups, and then say chefs can cook or chefs can’t do washing.
You can disable rules, because there may be times that they have to be broken, in order to fulfil the rota requirements.
You can set people’s “aways” – vacations, unpaid, sick, maternity leave or simply unavailable e.g. Steve is unavailable from 16/5 to 18/6 and Steve is on holiday from 16/5 to 18/6.
You can then either generate the rota by using the fill command, or by clicking on the calendar to assign/unassign people. You can also create shift patterns (behaving line templates).
In the STATISTICS page, you can adjust assigned duties by clicking on buttons. You might see that Sue Smith has been assigned 10 washing duties on Mondays, whereas Kevin only has 2 on Mondays. You can click Sue’s number “10” in the table to remove a random Monday duty in the POI (see below), and click on Kevin’s “2” to increase his Monday washing duties.
You can export the rota assignments to CSV files (e.g. for Excel).
You can export the rota setup (people’s names, tasks, DayDefs, rules etc.) into a CSV file of commands, that itself can be used directly to set up a rota. This is useful for backups, and to send as an email attachment to colleagues and for support.
People can be given a duty on any date, even 5 years from now: RotaMagic works like a calendar. However, some rotas are prepared for a period of time (rather than just day-to-day, short-term management, which RotaMagic can also do). This longer period is called the POI. The POI simply defines a start date (which must be the start of a week) and an end date (the last day of a week). You can set the POI using the commands:
POI starts today,
POI starts on 26/5 (it will adjust to the start of that week),
POI 16 weeks (calculates and set the end date)
POI ends on 17/1
Alternatively, it can be set in the STATISTICS page by clicking on buttons. In the CALENDAR pages, the dates that are in the POI have a blue bar over them, so that you can see you are working in the POI. If you run the engine, duties will be generated (assigned to staff) for the POI: this allows you to build up a rota peacemeal if you wish. And also delete assignments between weeks.
RotaMagic is a staff rota program that works in most browsers (Chrome is advised), on both PCs and tablets. It is a Web App, with nothing to install, and it will probably “do” your rota. Please blog, tweet or email if you require new features - such as a useful command/sentence (see below ‘command line’)
RotaMagic is very flexible and dynamic, but it won’t do school timetables, nor airline crewing rosters.
It will let you design rotas that are very specific, with lots of structure, or you can create ‘amorphous’ rotas, where you simply have a list of people, with their rules and preferences, when they’re on holiday etc., and put them on duty on an empty calendar - hardly any learning required for that.
You can use it as a management tool, changing things day by day to plan for the immediate future, to organise who is coming in to work. Or, it can be used for long-term rotas, where you need to plan who is doing what task, on which days, and balancing statistics (e.g. so people don’t complain they’re doing more ‘unsocial’ duties than someone else).
Staff can have rules (Joe can’t do nights; Sue can’t do Mondays); and people can belong to groups (Joe is a chef, and then (e.g.) a rule chef can’t wash up). There are many rules and restrictions that can be placed in a rota.
There is no start on end time, so you can put someone ‘on duty’ 5 years from “now”. Instead, there is a POI - Period Of Interest - which you can change as you wish: it will not affect any assignments, but the statistics are based on the POI date range.
RotaMagic can also do cost calculations. Each person can have his own hourly charge rate or salary, that can change from date to date. It is therefore possible to see breakdowns of costs. Also, duties in unsocial hours (that you define) can be charged at a different rate.
Several rotas may be open simultaneously, and you can flick between them.
Results (the input setup, assignments, statistics) can be exported to Excel.
This manual will use CONSOLE LINE COMMANDS by way of example, since line commands:
Line commands are pseudo natural [English] language.
A task is something to be done, at a certain time of the day. So a task could be wash dishes, done from 11am to 1pm. Task names are highlit like this in this manual.
You will define at least one task (e.g. onduty). Otherwise there will be nothing to do!
When a task is set on a date (wash dishes is done on 29th October), it is then referred to as a shift - for the purposes of this document anyway. You will add tasks to DayDefs (see below); DayDefs are set on dates.
When a person is assigned to a shift, that person has a duty, or an assignment. But we don’t want to be too pedantic about it!
You probably will make task names appropriate to the rota you wish to manage.
For example, you might want to define washMorning and dry task names (a full task definition needs a start time and end time too). You can call tasks what you like (late morning, redeye, morningblue, moonShift). So, you can make task names have time associated (for you) with them, but RotaMagic does not care what the names are. You can also change the names (and time definitions) at any time – even when a rota with assignments exists.
You can do some powerful things with task names.
If the task name has a hyphen in it, the task is then made up of sub-tasks, which can be referred to directly. This is used to define sub-task names such as morning and night.
Say you have morning-wash and afternoon-wash, you will be able to define a rule fred can’t do morning, and also “morning starts at 0800”. This will make all tasks with sub-task morning start at 0800, with the one command. You can do them individually, because you may want morning-wash to start at 8am, and morning-dry to start at 9am, and also have a different duration.
Sub-tasks are also used to breakdown statistics. You will see the sum of the number of mornings Fred will work (i.e. the sum of morning-wash, morning-dry, morning-walk etc)., as well as how many washes, drys, walkss, and how many of the actual task morning-washes he is assigned (over a POI).
Overlapping Tasks: You need to set the start and end times for each task. If two tasks overlap, and both are in one DayDef, it will break a rule to assign someone to both shifts (on the particular date of course). BUT, if tasks do not overlap, you will be able to assign people to do both i.e. have more than 1 duty in a day. (But there is a limit rule (in the OPTIONS page) that let you specify the maximum number of shifts people can do per day.) It is worth noting that you can have morning-wash and morning-dry, even though they both have sub-task morning, start and end at different times. And, even so, when the statistic count for sub-task morning, they are still summed.
If your rota is simple, where you just want people “to be on duty”, just make a task named onduty or inToday - anything you like.
So, you will give a task a name and also a brief task code, which is there:
to be displayed in the rota, a bit like a person’s initials: rather than showing (e.g.) morning-duty, the code would be MD.
to be used in rules (such as Fred can’t do MD ).
You will be able to change the task name and code in an existing rota even when there are assignments (i.e. people have been assigned to tasks). You can also change the name of subtasks.
This section is important. And hoping to keep it simple.
A DayDef specifies the tasks that are to be done on the dates that have that DayDef applied
A DayDef is set on a date, and it applies to the following dates until the next DayDef is applied.
Any date can only have one DayDef.
This is best by example. In the “old days”, shops would be open on weekdays and Saturday mornings, and closed on Sundays. Let’s say that on weekdays, you only needed 7 shop assistants. On Saturday mornings the shop gets busy, and you needed 12 assistants. And on Sunday, none.
To model this, you would define 3 DayDefs - one for the 3 day “types”. Or 3 Day Definitions. Let’s call one weekdaydef, which is set on the Monday, and will apply through the week to and including Friday. On Saturday morning you saturdaydef. weekdaydef specifies 7 tasks (not people or groups) called assisting.
You will define at least one DayDef - but probably more. There is a default DayDef that you cannot delete, called Closed. Closed has the number of people set to zero for every task. But you can edit that so that people will be working. But it would be a little perverse, but it’s up to you.
You will give names to your DayDefs (like usualday) so that you can recognise them and use them.
Again, you can rename DayDefs at any time - doing that will not affect the rota.
In the DayDef page, you will see all tasks listed. Next to them, you will see the number of people required for each task, for the DayDef you have selected (by clicking on the DayDef on the left). You increase or decrease the number of staff working for the particular tasks, for the selected DayDef, by clicking on the + and - buttons.
Any task can be made a stand-by, just by checking the box in the staff table. Stand-bys are not charged. That’s the only difference. However, if you would like Stand-bys to work in a different way, please email or blog me.
It is probably a good idea to give the name of each stand-by task a recognisable name. Like stand-by-night. With a code such as SBN. Otherwise, they are treated just like any other task. You can have more than one stand-by task: they might apply at different times of the day.
Your rotas can be stored locally (on your device) or in the cloud (Google Drive – available soon).
Local storage is in your specific browser’s database. If you use Chrome to develop your rota, that rota will not be visible/available in Internet Explorer, Edge, Firefox etc. on the same machine: they each have their own storage.
No cookies are used (although cookies might be used in the future to remember authentication if you wish to store your rota on Google Drive).
Firebase is under consideration, but this is not a free service.
As a first step you will need to add staff to the database before you can do anything sensible.
ext is to *define the tasks** - things that need to be done. You’ll need to create at least one.
Then define the DayDefs - again at least one, in addition to the built-in closed DayDef, that define the tasks to be done on those days, and how many people are to do them.
Then set the daydefs on the dates in the calendar.
Finally assign people to do those tasks.
You can change almost anything even when you have generated a rota. You can add more staff, delete staff, change rules, change groups, change tasks - rename them, change their times, delete them. RotaMagic will not complain.
Also, you should give each task a short “code name” that you can use (and recognise) as a shorthand.
So make lunch could be just the letter(s) “L” or “ML”.
Then in the DayDefs, you might define “10 ML” to have 10 people to do the lunch shift (whatever it is).
You can change the task code at any time:
lunch code abc
The DayDefs are listed on the left of the screen as buttons.
Click on one to edit/delete. The page shows a list of all tasks, and the number of people to do those tasks for the selected DayDef.
A newly-created DayDef contains no tasks to be done. It will be “empty”, (as is the “closed” DayDef showing the number of people to do each task as zero. So you need to add an already-defined task, and also say how many people are going to do it.
Or, in the command line:
For example busyday needs 4 wash
Apply DayDefs as far forward as you need. You can change them at will, but affected assignments will not be deleted. Click on a date in the DayDef row (it will have closed in it to start with. Or use commands. Say you have a DayDef called busy. Enter commands such as:
busy from 25th Apr
closed on saturdays from 18th
This needs a whole section itself - next.
There a are several ways to assign staff to shifts (and thereby create “duties”!). You can
There are several ways to unassign people from duties (=delete duties or clear duties):
In the CALENDAR page, there is a motorcyle icon, which exposes (toggles) additional buttons that run the engine (duty generator), delete duties, and copy and paste duty patterns, and “rotate” patterns between staff.
First to note, the tables shown in the CALENDAR do not have to be whole weeks, starting on Mondays. When copying duty patterns, the copy is for one table to another, although you could change the start day before doing a paste. However, it will be noticibly quicker if tables cover whole weeks that start on an Monday.
Clicking a”bin” icon will clear duties day-by-day, or for a whole table.
On a day/table that has no duties assigned, clicking this icon will randomly assign duties as required by the staff rules and days off (meetings, vacation etc).
When there are duties already assigned, clicking the icon will shuffle (rotate) the staff through the shifts that are required, maintaining staff rules, locked duties and staff away days. This is quite a heavy duty calculation, and response times can be a few seconds.
Here are some related line commands. Note that the word “clear” is used to delete/unassign duties. The word “delete” is used to delete people, DayDefs and tasks.
When a “clear” command is given, locked duties will not be deleted. Locked duties will have to be unlocked. Holidays/unavailability dates are not affected.
clear duties from 30/5 (to the end of the POI)
clear duties (for the POI - so you can adjust the POI for that need)
clear duties for steve
clear history (clears duties that are 2 weeks before (older) than the current date. This will stop the rota becoming infinitely large!
You can also lock duties (in the CALENDAR) page, to prevent their modification.
At the command line, enter the command:
This will randomly fill the rota for the POI. You can change the POI (in the STATISTICS page) before you do a fill.
There are two menu “hamburger” buttons on the page, on at the top which is for the whole rota, and one on the left of each table, to apply to the table. It is probable you will display whole weeks in each table, but you can display 1 to 31 days. When you use the table menu, the commands will apply to the displayed table, NOT just 7 days.
Then you can use the “switch” command to switch people around in the target week (YET TO BE FULLY IMPLEMENTED 7/2/16)
Press F12 to open the command line dialog (=console).
The intention here is to be able to do things that can’t be done graphically (i.e. extra buttons would make clutter, menus would get large and unwieldy), by using the old DOS-days’ “command line” or “console”. Also, some things can be done more quickly and conveniently with a command line. Such as Sue can’t do Tuesdays
The console (=command line) can be used :
The text file (using Notepad for example) would be used to either:
prepare a whole rota
If you want to prepare a whole rota, you would create a new rota [file] and paste in the commands from your prepared file, and, if it’s not quite correct, delete the rota, tweak the text file, and repeat.
prepare a list of commands to modify an existing rota
To modify a rota, paste in the text file, and if the results aren’t quite correct, forget the rota, and repeat with a modified text file.
You will be able to paste in such a text file that is received as support, via the support blog or email.
The “export” command will export the rota structure as line commands that can be edited/used to paste into a new rota rota.
Note: in the Options page, you can control the format of the exported assignments. Y
Note - these commands will probably be removed. They were introduced for experimenting with school timetables.
fred can’t do friday mornings from 18/6 to 4/8
fred is a manager from 18/8
delete all daydefsclosed cannot be deleted
You can use the words [is on] HOLIDAY, SICK, [is on] SICK LEAVE, [is on] MATERNITY, UNPAID LEAVE, [has] MEETINGS
(it’s easier to click on the calendar cells than use commands for unsocial duties)
don’t use autogen turn off continuous automatic assignment generation
If you rename sue fred bloggs , the name sue must be unique and it is case INsensitive. You can use her last name too, again if it’s unique. If her name is Sue Smith, she will be renamed Fred Bloggs, and the initials will also change to FB. You must use only one word to identify Sue. If “Sue” is not unique and “Smith” is not unique, you can use her initials (these are unique) e.g. rename SS fred harry bloggs
Note - all Sue’s rules and assignments/duties will be ‘transferred’ to Fred Bloggs
For an existing rota, that has duties assigned, it is possible to change the structure depending on who is assigned on each date.
Say you have a morning_duty and afternoon_duty in DayDef “busy”, and Fred is assigned to the morning_duty, and Sue has the afternoon_duty. It might be that Sue can never do the whole of the afternoon_duty on Tuesdays e.g. she must leave at 3pm on Tuesdays. You don’t want her to not to do the first part of the duty, and you want someone else to cover for the last part.
1 - create 2 new tasks:
aft1_duty (from 1pm to 3pm, say) and
aft2_duty (from 3pm to 5pm).
2 - create a new daydef “busysue”. In it, you have the morning_duty task as before, but replace the old afternoon_duty with the two new ones, effectively splitting the duty into two.
3 - use the command:
if sue busysue
which changes the DayDef for dates where a sue is on duty on the </span> e.g. apply ? ?
Develop and Manage Staff Rotas -Beta!