---
title: Classifying engineering time as capex or opex
description: How SquadBear tags projects and work items so finance can turn logged hours into evidence
order: 5
---

How SquadBear tags projects and work items so finance can turn logged hours into
per-person, per-project evidence for R&D capitalization and tax relief (e.g. IAS 38,
Poland's *ulga B+R* / IP Box, UK R&D relief, US §174).

> [!WARN]
> Nothing on this page is tax or accounting advice.

## How SquadBear models it

Classification runs on a single, tenant-defined axis of **time categories**. A new
workspace starts with none; the **Time categories** card on **Workspace settings → Time
tracking** adds your own, or seeds a ready-made pair with one click - **CAPEX / OPEX** is
one preset (Billable / Non-billable and R&D / Routine are the others). Everything below
uses the CAPEX/OPEX preset as its running example, but the mechanism is identical whatever
categories you define.

A category applies in two places: a **project-level default** (a category, or unset) and
an optional **work-item-level override** that can also be left unset, in which case it
inherits the project's default. Set the project default on **Workspace settings →
Projects** when you create or edit a project (field "Default time category"); set a work
item's override on that project's **Work items** tab, one select per row. Both are
admin-only surfaces.

Categories are never deleted, only archived - an archived category stops appearing for
new assignment but keeps labeling the hours already logged against it, so historical
reports stay intact.

Every project is created with a **General time** work item. Time logged against a project
without naming a work item lands in that project's General time bucket; time logged with
neither lands in the workspace default project's. General time inherits its project's
default like any other work item and can carry a category of its own; otherwise its hours
report as Unclassified.

Classification never blocks logging - hours record against whatever project and work item
is open, classified or not, and tagging is a separate step. Classification is resolved when
the report runs, not stamped on the time entry: reclassify a work item and every hour ever
logged against it, past and future, reports under the new category.

At review time, **Reports → Time** groups by Category as well as Person, Project and Work
item. Reports is a top-level nav entry, open to managers and admins.

## Month-end workflow

1. Open **Reports → Time**.
2. Set **Group by** to **Category** and **Bucket** to **Month**. The window spans twelve
   months, one column per month; Previous/Next and **Today** move it.
3. Apply the **Team**, **Project** or **Category** filter if finance wants one slice - the
   Category filter offers every active category plus **Unclassified**.
4. **Export CSV** - the link appears once the report has rows, and the file carries the same
   grouping, filters and window as the table.
5. Hand the file to finance.

## Worked example

In July, Northlake's engineers logged 1,000 hours combined: 700 on "Platform v2" (of
which 90 were on the "Bug triage" work item, overridden to OPEX - the rest, 610 hours,
inherits Platform v2's CAPEX default) and 300 on "Maintenance & support" (OPEX, the
project's default). Grouping the July report by category gives 610 CAPEX hours and 390
OPEX hours - **61% of July's engineering hours under the CAPEX default.**

## Scope

SquadBear classifies and exports hours. Rates, capitalization policy and tax filings sit
outside its scope - a time report carries hours only, never money.

> [!AGENT]
> Pull July hours for the Platform team grouped by time category and show me the split as a table, including the unclassified bucket.

## Related

- [Log your first week of time](/docs/time/quickstart/)
- [Group and export time as reports](/docs/time/reports/)
- [Connect Claude to SquadBear](/docs/getting-started/connect-an-agent/)
