---
title: "Timesheets"
slug: workspace/timesheets
url: https://projectri.com/docs/workspace/timesheets
section: workspace
audience: workspace
app_route: "/[slug]/[user]/timesheets"
permissions: [time.view, time.compliance.view, time.compliance.view.all, finance.time.approve]
mobile: "/timesheets"
updated: 2026-09-08
source: Projectri documentation
---

# Timesheets

Who has filled their timesheet in for this period and who has not, plus the queue where submitted time is released for billing.

![Timesheets](https://projectri.com/docs-shots/workspace-timesheets.png)

## What it is

Timesheets answers one question — has everyone written down their hours for
this period. Each row is a person and a period, with the hours they were
expected to log, the hours they actually logged, and a state. A second tab, for
people who can approve time, is the queue that turns logged hours into billable
ones.

## How to get there

Timesheets is in the main navigation. The row needs `time.view`, the key every
person who logs hours holds, and it is hidden entirely in a workspace that has
never configured a timesheet policy — the compliance pass only visits tenants
that hold one, so the screen would be permanently empty. Somebody with
`finance.time.approve` still sees the row, because the approval queue lives here
and nowhere else.

How much you see is decided by the server, not by a control on the page. The
badge next to the title says which of the three you have:

- **Just you** — one row, your own. Nobody needs a permission to see how they
  are doing.
- **Your team** — you plus your direct reports, with `time.compliance.view`.
- **Whole firm** — every member, with `time.compliance.view.all`.

The **Approvals** tab appears only with `finance.time.approve`. Seeing your
reports' compliance and releasing their time to billing are deliberately
different keys.

There is no plan gate on this screen.

## How to use it

### Read your own completeness

1. Open Timesheets. Your own bar is at the top, found by who you are rather
   than by position in the list.
2. It reads *logged of expected*, with the deadline beside it when the policy
   sets one, and a percentage on the right.
3. Expected hours are capacity **net of** public holidays and approved leave, so
   somebody on leave Monday to Wednesday owes 16 hours and not 40. The deducted
   hours are printed on the row so the number can be argued with.

### Change the period

1. The stride buttons pick **Weekly**, **Biweekly** or **Monthly**. Until you
   pick one, the page uses the period your own policy sets.
2. The carets step one period at a time, in the stride shown — a monthly
   back-office team steps by a month, not by seven days.
3. The date field jumps to the period *containing* a chosen day, not to the day.
   A compliance row is stored against a period start, so "the fortnight ending
   the 14th" exists and "the 3rd to the 19th" does not.
4. **This period** returns to today.

### Narrow the list

1. Press **Filters**.
2. Search by name, filter by state, by team, or by department, and tick the
   owing-only box to keep just the people who still owe hours.
3. The counts in the state and team menus are computed over the *unfiltered*
   period, so picking Approved does not rewrite the Incomplete count to zero.
4. Filtering happens on the server, so the rows, the percentage under them and
   the exported file always describe the same people. The **Filters** button is
   tinted while anything is on, so a filtered list cannot be mistaken for an
   empty period.

### Chase the people who are behind

1. Tick the people you want to remind. Only rows in **Incomplete** or **Open**
   can be ticked — the server refuses the rest, so the others are greyed out
   rather than silently doing nothing.
2. A bar appears at the bottom with the count. Press **Remind**.
3. The reminder goes to the people you picked for the period on screen.

### Export

1. **Export** is available on the team and firm-wide scopes.
2. The file is the same query the list was built from, plus two columns the
   screen cannot show — leave hours and holiday hours split apart, which is what
   the argument about an expected figure is always about.

### Approve submitted time

1. Switch to the **Approvals** tab.
2. The queue is aggregated by person and week, not by individual entry, and
   sorted by how long each week has been waiting.
3. Weeks that nobody has submitted appear in a separate group that cannot be
   selected. There is nothing an approver can do about them; the way to act is
   to go back to the compliance tab and chase.
4. The confirmation counts what the server actually approved. Your own entries
   and anything a billing run has locked are dropped by the write, so a
   selection of twelve can legitimately approve nine.

## What it affects

- **Utilisation.** The compliance percentage is the confidence figure printed
  beside the firm's utilisation number. 78% utilisation computed over 82%
  compliance is not the same claim as 78% over 100%, and
  [Utilization](/docs/workspace/utilization) says which one you have.
- **Billing.** Approving a week is what makes those hours available to a billing
  run. Unapproved time is revenue standing still.
- **Freshness.** Reading the page recomputes any stale or missing period inside
  the scope you can see, then says when the numbers were worked out. A period
  too large to refresh on a page load says so instead of presenting an old
  figure as a current one.
- **Reminders.** Chasing sends a notification to each person picked; it does not
  change their row until they log the hours.

## On mobile

The Expo app has the same screen at **Timesheets**. Most timesheets are filled
in on the way home and so is most of the chasing, so the phone carries the
period stride, your own row, the team list and the reminder action. The scope
badge is printed there too, for the same reason.

## Limits and gotchas

- The screen is a **reading** of hours, not a place to log them. Hours are
  recorded on the task, in the tracking section of the task detail panel on the
  web and the timer sheet on the phone.
- A workspace with no timesheet policy has no rows here and no way to get any.
  An administrator configures one under **Admin → Finance → Timesheets**, which
  needs `time.compliance.configure`.
- Expected hours divide the contracted week across the workspace's **working
  days**, which come from the country the workspace was created with. If that is
  wrong, every expected figure on this page is wrong with it.
- **Recompute** is offered only on the firm-wide scope.
- Export is not offered on the self scope — there is one row, and it is on
  screen.

## Related

- [Utilization](/docs/workspace/utilization) — the number this page qualifies.
- [Capacity](/docs/workspace/capacity) — the same people looking forward instead of back.
- [Roles and permissions](/docs/start/roles-and-permissions) — what the three compliance keys each open.

## Related

- [Utilization](https://projectri.com/docs/workspace/utilization.md): Logged hours as a percentage of capacity, measured against the target for each person's role, with twelve periods of history behind every name.
- [Capacity](https://projectri.com/docs/workspace/capacity.md): Committed hours against contracted hours week by week, built from the estimates on dated tasks, so an overloaded week is visible before it arrives.
- [How permissions work](https://projectri.com/docs/features/permissions-model.md): The three tiers Projectri decides "may this person do this" with, how a role default becomes one person's answer, and the two traps that catch every new key.
