Schedules & Calendars: A Guide to Managing User Working Patterns
Overview
Kompass uses two distinct but related concepts to define when and how employees work:
- Schedules define the day-to-day working pattern for a user: which days they work, their start and end times, break allowances, and how those hours count towards availability, billing, and pay.
- Calendars define public and bank holidays. A calendar is a named list of holiday dates that gets layered on top of a user's schedule to exclude non-working days from leave calculations, diary exports, and the resource schedule view.
Together, a user's schedule and calendar determine their effective working days, theoretical billable hours, and how hours recorded in their diary are counted.
Part 1: Schedules
What Is a Schedule?
A Schedule is a template that defines the working pattern across the days of the week. Each schedule contains one or more Schedule Days, each of which describes the working hours for a specific day type (Monday through Sunday, a Default fallback, or a special Holiday rule).
Schedules are managed via the Admin at Diary → Schedules.

Schedule Day Settings
Each row within a schedule represents a single day type. The columns you will see are:
| Field | What it does |
|---|---|
| Weekday | Which day this row applies to. Options: Default, Monday–Sunday, Holiday (see below). |
| Start time | The working day start time (e.g. 08:00). |
| End time | The working day end time (e.g. 17:00). |
| Breaks | Default break time in minutes, pre-filled when a user creates a diary entry on this day. |
| Travel | Default travel time in minutes, pre-filled when a user creates a diary entry on this day. |
| Schedule Available | ✅ If ticked, the user will appear on the Schedule (resource) view as available on this day. This controls visibility in the resource planner. |
| Diary Entry | ✅ If ticked, the user's diary will be pre-filled with an empty entry row for this day to prompt them to log their time. |
| Billable | ✅ If ticked, hours on this day count towards the user's theoretical billable hours shown on the dashboard. This is how Kompass knows how many hours a person should be billing. |
A typical Monday–Friday schedule will have Schedule Available , Diary Entry , and Billable all ticked for Monday through Friday, and no rows (or unticked rows) for Saturday and Sunday.
The "Default" Weekday
The Default row is a fallback. If a user records a diary entry on a day that does not have a specific row in their schedule (for example, they occasionally work on a Monday but the schedule only defines Tuesday–Thursday), Kompass uses the Default row's times and settings for that entry.
The "Holiday" Weekday (Weekday = 8)
The Holiday row is a special override. Normally, when a date falls on a bank holiday (from the user's assigned Calendar), it is excluded from leave day calculations. If you add a Holiday row to a schedule and tick Billable, you are explicitly saying: "Users on this schedule are expected to work bank holidays, and those hours count as billable." This overrides the holiday exclusion.
This is useful for deployments where some employees are contractually required to work on bank holidays (e.g. emergency services, 24/7 operations).
Schedules and Orgs
Each schedule must be associated with one or more Organisations (Orgs) via the Orgs inline at the bottom of the Schedule admin form. A user can only be assigned a schedule that belongs to their org. The org's Diary Config also holds a schedule_default; the fallback schedule used for any user who has not been explicitly assigned one.
Part 2: Assigning a Schedule to a User
There are two places where a schedule can be assigned to a user: the frontend User Detail page for everyday use, and the Django Admin for advanced date-range management.
Via the Frontend (Users → User Detail)
Navigate to Users → [select a user] in the Kompass frontend. In the Details section you will find a Schedule dropdown (visible only to users with the view_schedule permission).

This dropdown lists all schedules belonging to the user's org. Selecting one and saving sets the user's active schedule immediately. This is the quickest way to assign or change a schedule for a single user without needing admin access.
The frontend schedule field assigns a single schedule without a date range. It reflects the user's current working pattern. For historical or future-dated schedule changes (e.g. tracking a move from full-time to part-time), use the Admin approach below.
Via the Django Admin (Advanced — Date-Range Assignments)
For more complex scenarios — particularly where a user's working pattern has changed or will change over time — schedules are managed via the User Schedule inline section on the User admin page (Admin → Users → select a user → scroll to Schedules section).

Each assignment has:
| Field | Description |
|---|---|
| Schedule | Which schedule template to apply. Only schedules belonging to the user's org are shown. |
| Start | The date from which this schedule applies (nullable = "from the beginning of time"). |
| End | The date until which this schedule applies (nullable = "open-ended"). |
You can assign multiple schedules to a single user with different date ranges. This supports employees who change their working pattern over time (e.g. moving from full-time to part-time, or returning from a career break).
Important: Date ranges on a user's schedules must not overlap. The admin will reject overlapping entries.
Schedule Fallback Chain
When Kompass needs to know a user's working pattern (for leave calculations, diary pre-fill, or the schedule view), it resolves the schedule in this order:
- The
UserSchedulerecord whose date range covers today — if one exists. - If no
UserScheduleis active for the user, the org's default schedule (from Diary Config) is used.
This means every user always has an effective schedule, even if none has been explicitly set for them.
Part 3: Calendars and Holidays
What Is a Calendar?
A Calendar is a named collection of holiday dates (bank holidays). Calendars are managed via Admin → Calendars → Calendars and the associated Admin → Calendars → Holidays.
A calendar has:
| Field | Description |
|---|---|
| Name | A descriptive name (e.g. "England & Wales", "Germany – Bayern", "US Federal Holidays"). |
| Start / End | Optional date range for when the calendar is active (typically left blank). |
Each Holiday record within a calendar has:
| Field | Description |
|---|---|
| Calendar | Which calendar this holiday belongs to. |
| Day | The date of the holiday. |
| Name | A descriptive label (e.g. "Christmas Day", "Tag der Deutschen Einheit"). |
Calendar Resolution per User
Calendars can be applied at two levels:
- Org level: the org's default calendar applies to all users in that org (set on the Org record).

- User (Profile) level: an individual user's profile can have a specific calendar assigned, which overrides the org-level calendar for that user.

The active calendar for any given user is resolved as: profile calendar (if set) → otherwise, org calendar.
This is what makes it possible to support employees working under different national holiday regimes within the same deployment.
Part 4: Supporting Employees in Different Countries
This is one of the most important practical use cases for calendars. If your organisation has employees based in different countries, for example, some in the UK and some in Germany, they will observe different public holidays. Kompass handles this cleanly by assigning each group of employees their own calendar.
Step-by-step: Setting Up Multi-Country Holidays
Step 1: Create a calendar for each country or region
Go to Admin → Calendars → Calendars and click Add Calendar.
Create one calendar per distinct set of holidays:
- "England & Wales"
- "Germany"
- "US Federal"
Step 2: Add the holidays to each calendar
Go to Admin → Calendars → Holidays and click Add Holiday for each bank holiday, selecting the correct calendar and setting the date and name.
Step 3: Set the default calendar at org level (optional)
If the majority of your users follow a single country's holidays, set that calendar as the org default via Admin → Company → Orgs → [your org] → Calendar.
Step 4: Override the calendar at user level for employees in other countries
For employees who observe different holidays, go to Admin → Users → [select user] → Profile section → Calendar and select the appropriate country calendar.
That user will now have their leave working-day calculations, diary exports, and the schedule view's holiday markers driven by their individual calendar rather than the org default.
Part 5: How Calendars Affect the Rest of Kompass
Once assigned, a user's calendar has the following effects:
Leave Calculations
When Kompass calculates how many working days a period of leave spans, it excludes dates that fall on a bank holiday in the user's active calendar. For example, if an employee books leave over Christmas week, the bank holidays (Christmas Day, Boxing Day, etc.) are automatically excluded and do not count against their leave allowance.
The exception: if the user's schedule includes a Holiday row (weekday = 8), that overrides the exclusion. Those days are treated as working days even when they coincide with a calendar holiday.
Diary Exports
When exporting timesheet data, Kompass generates pseudo-diary entries for bank holidays. For each holiday in the user's calendar, the export includes a holiday entry showing the expected hours for that day (derived from the user's schedule). This allows payroll and reporting tools to account for paid public holidays without requiring employees to manually log them.
The Schedule (Resource) View
The schedule view, which shows task assignments, leave, and resource availability across the team, displays bank holidays inline on the calendar grid. These are drawn from each user's active calendar, so team members in different countries will show their respective national holidays.
Part 6: Quick Reference: Who Sets What
| Action | Where in Admin |
|---|---|
| Create / edit a Schedule | Admin → Diary → Schedules |
| Add Schedule Days to a Schedule | Inline on the Schedule record |
| Assign a Schedule to a User | Admin → Users → [user] → Schedules inline |
| Set the org default Schedule | Admin → Diary → Configs → [org config] → Schedule default |
| Create a Calendar | Admin → Calendars → Calendars |
| Add Holidays to a Calendar | Admin → Calendars → Holidays |
| Set the org default Calendar | Admin → Company → Orgs → [org] → Calendar |
| Override a user's Calendar | Admin → Users → [user] → Profile → Calendar |
Summary
| Concept | Purpose | Set on |
|---|---|---|
| Schedule | Defines working days, times, and how hours count (available / billable / diary pre-fill) | Admin → Diary → Schedules |
| User Schedule | Assigns a schedule to a specific user for a date range | Admin → Users → user record |
| Calendar | Names a set of bank holidays for a region or country | Admin → Calendars → Calendars |
| Holiday | A single bank holiday date within a calendar | Admin → Calendars → Holidays |
| Org calendar | Default holidays for all users in an org | Admin → Company → Orgs |
| Profile calendar | Per-user override for employees under different national holidays | Admin → Users → Profile |