---
title: "Attendance"
description: "See a whole month at a glance and mark the days nobody turned up, so the pay takes its absences from what actually happened."
---

> Documentation Index
> Fetch the complete documentation index at: https://docs.beelocity.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Attendance

A month of attendance is a grid on paper in most businesses: names down the side, days across the
top, a mark where somebody was missing. Beelocity draws the same grid and fills in everything it
already knows — the rest days, the public holidays, the leave you approved and the extra hours
somebody put in — so the only thing left for you is the one thing the app cannot know: who did not
turn up.

This page is for whoever keeps the register. What the month's pay then does with a marked day is
[Monthly payroll](../payroll/payroll-run.html).

<a id="read-the-month"></a>
## Read the month

Open **Human Resources › Attendance**, which opens on its **Attendance sheet** tab. Pick the
**Year** and the **Month**, and the sheet draws itself: one row per person the month covers, one
column per day. The page's other tab, **Overtime**, is where extra hours are recorded.

Each cell says one thing, and the legend under the sheet names them:

- **At work** — nothing to report. The person was there as far as anything recorded says.
- **Absent** — a day they did not turn up for, with nothing approved behind it.
- **Leave** — a day of leave you approved, named by its type.
- **Overtime** — extra hours they put in that day.
- **Public holiday** — a day on your holiday calendar, by name.
- **Rest day** — a day of the week the business does not work.

A person's row starts on the day they were hired and stops on the day they left, so the days before
and after are blank rather than claiming anything.

Where two of these land on one day, the sheet shows the one you would want to read. Extra hours
come first, because somebody who came in has come in. A public holiday comes before a rest day,
because it has a name.

<a id="mark-a-day"></a>
## Mark a day somebody was away

Click a day on somebody's row to mark it, and click it again to take the mark back. Only two kinds
of square take a mark: an ordinary working day, and a day you marked yourself. A day the calendar
or the leave register has already spoken for — a rest day, a public holiday, approved leave —
cannot be marked, and hovering it tells you what it is.

Press **Save** when the month reads the way it should. **Cancel** puts back what was there before.

Each unbroken run of marked days becomes **one** unjustified absence on the person's own record,
numbered like any other leave: mark the 5th, 6th and 7th and you get one absence of three days, not
three of one. Take the 6th back out and it becomes two. They show on the person's **Leave** tab,
and the month's pay takes them off as unpaid days.

If any one of the marks cannot be recorded, **none of the month is saved** — the sheet is left
exactly as you found it and the message names the person it stopped on. Half a marked month would
be worse than none, because you could not see which half had landed.

Marking a month needs the authority to approve leave, not only to record it: what you are writing
is a decision, not a request. Somebody who may read the register but not decide on it sees the
month and no **Save**.

<a id="bring-a-month-in-from-a-file"></a>
## Bring a month in from a file

A business whose attendance already lives in a spreadsheet does not have to mark it twice.

Press **Export** and the month comes down as a spreadsheet file: one row per person, one column per
day, with what each square says already in it. That file is also the template — fill in the days
and bring the same file back.

Press **Import**, pick the file, and the month on screen fills in from it. **Nothing is written
yet**: the sheet is the preview, so you read the month the way you always do and press **Save**
when it is right.

What the reader accepts, so a file from anywhere stands a chance:

- **Rows are matched on the employee number**, not on a name — two people share a name, and the
  number is what the business knows them by. A row naming somebody the month does not hold is
  listed and left out, and the rest still comes in.
- **The day columns are numbered** — `1`, `2`, `3` — so they read the same in any language. The
  other columns are matched against their heading in English, French or Arabic, which means a file
  passed between two people who read different languages still opens.
- **A day is marked by anything you put in its square** — a cross, a letter, a word. Empty means
  the person was at work.
- **Only a day you could have clicked is read at all.** A rest day, a public holiday and a day of
  approved leave keep what the calendar says whatever the file puts there, which is also why the
  file the app wrote goes back in unchanged.
- Semicolons, commas or tabs between the fields, and either kind of line ending. Accented and
  Arabic names survive the round trip.

<a id="people-on-a-rota"></a>
## People on a rota

For somebody on a crew, the row follows the crew's rota rather than your business's week
([Shifts and rotas](shifts-and-rotas.html#put-people-on-a-crew)). A day their rota gives them a
shift shows the shift's mark — **N** for a night, **M** for a morning — and can be marked absent if
they did not come, even on a Friday. A day their rota rests reads **Rest day**, even on a weekday
the office works, and cannot be marked: there was no shift to miss. A public holiday still reads as
the holiday, whether or not the rota works it.

A file brought in follows the same rule: a mark on a person's shift is kept, and one on their rota's
rest day is ignored. Everybody on no crew keeps your working week, exactly as before.

**A day whose plan was changed reads as the change says** ([Change the plan](changing-the-plan.html)).
A day off reads **Rest day** and cannot be marked. Another shift shows that shift's mark. A rest day
moved to another day leaves the old one a day to be at work, which can be marked. A **call-in**
shows the shift's mark in the rest day's shading: the person came in on their rest day, so there is
nothing to mark, and once its overtime is recorded the day reads as overtime.

<a id="what-the-sheet-is-not"></a>
## What the sheet does not record

The sheet is a picture of what your records already say, and it keeps nothing of its own:

- **Leave** comes from the requests you approved, on
  [Holidays and leave](holidays-and-leave.html). Change one there and the sheet follows.
- **Extra hours** come from the [Overtime](overtime.html) register. The sheet shows them; you
  record and correct them where they live.
- **Rest days and public holidays** come from your working calendar, which you set once under
  **Human Resources › Setup › Rest days and leave** and add feast days to as they are announced.

So there is nothing to save on a day you have not touched, and nothing on the sheet can disagree
with the pages it is drawn from.

<a id="hours-are-not-recorded"></a>
## Hours worked are not recorded

Beelocity records the hours somebody worked **beyond** their week, not the hours of an ordinary
day. A working day nobody reported anything about is taken as the week the contract states, spread
over the days the business works.

If your business needs the hours of every day as they were clocked, that is not what this sheet is,
and nothing here will produce it. The hours somebody on a crew is due are their shifts', planned on
the rota ([Shifts and rotas](shifts-and-rotas.html)), and the sheet records only what went
otherwise.

<a id="a-long-day"></a>
## A day that ran too long

The law puts a ceiling on a single day: twelve hours, counting the whole span from arriving to
leaving. Once the sheet says which days were worked, Beelocity can add one up — the ordinary hours
of the contract plus whatever extra was recorded on that day — and it tells you on the payslip when
some day of the month went past it.

It is a warning, not a refusal, and the month still closes. What the app counts is hours **worked**,
where the law counts the whole day including breaks, so the figure it reaches is the smallest the
real day could have been. Refusing on a figure that low would stop an honest record and still miss
a real breach.

**An ordinary day is the contract's week spread over the days you work.** Forty hours with only
Friday off is a six-day week and 6 hours 40 a day; the same forty with Friday and Saturday off is
eight-hour days. So the same overtime crosses the line in one business and not in another, which
is what the law intends. For somebody on a crew, a day their rota gives them a shift is that
shift's own hours instead: four extra hours after an eleven-and-a-half-hour shift go past twelve.

<a id="a-closed-month"></a>
## A month the pay has been closed for

Closing a month freezes its pay: the payslips keep the figures they were worked out from, and
nothing reopens them. You can still read a closed month's sheet, and a day you mark in one is still
recorded — the register has to be able to say somebody was away, even when you find out in
November about a day in September.

What it will not do is change that month's pay. The correction belongs on the next month you have
not closed yet, as a day of absence on its variables. [Monthly payroll](../payroll/payroll-run.html) says how.

Source: https://docs.beelocity.com/en/hr/attendance/index.mdx
