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

# R&D Capitalization

> Understand R&D capitalization and how Weave classifies engineering work to support your R&D tax and accounting workflows

The R\&D Capitalization report classifies your merged PRs as R\&D or non-R\&D under the tax
jurisdiction you choose, and turns those classifications into an estimated R\&D wage schedule your
finance team can hand to a tax preparer.

## What is R\&D capitalization?

Capitalization means recording a cost as an asset on the balance sheet and deducting (amortizing)
it over several years, instead of expensing the full amount in the year it was incurred. For
software companies, the question of whether engineering work must be capitalized or can be
expensed shows up in two separate rulebooks — tax law and accounting standards (GAAP) — and the
answer in both cases depends on *what kind of work* your engineers actually did.

### Why classification is the hard part

Whether for the R\&D credit, Section 174 tracking, or GAAP capitalization, the common bottleneck
is evidence: auditors consistently reject flat "magic percentages" (for example, capitalizing 70%
of all engineering payroll with no support). Defensible approaches tie the determination to the
actual work items — tickets, PRs, and commits — classified by what the work really was. That
artifact-level audit trail is what this report produces automatically.

## How Weave classifies your work

Weave uses an AI agent to classify every merged PR as **R\&D** or **Non-R\&D** against the
qualifying criteria of your configured tax jurisdiction:

| Jurisdiction | Program |
| - | - |
| United States | IRC Section 41 (four-part test) |
| Canada | SR\&ED (Scientific Research and Experimental Development) |
| Netherlands | WBSO |
| United Kingdom | CTA 2009 s.1308 |
| Australia | R\&DTI (Div 355 ITAA 1997) |

Each classification records a confidence score and a written reasoning, giving you a PR-level
audit trail. Work involving technological uncertainty and experimentation tends to qualify;
routine bug fixes, UI polish, documentation, and standard CRUD work tends not to. When in doubt,
the classifier is deliberately conservative. You can sharpen results for your organization by
adding custom qualifying and non-qualifying criteria in settings.

## What the report shows

The report lives at **Reports → R\&D Capitalization** and supports month, quarter (default), and
year granularities. Data is shown for completed periods only.

### PR classification tab

* **Executive summary** — your **Organization R\&D percentage** (weighted by [code
  output](/metrics/code-output)) and **Estimated R\&D wages** for the period, plus a per-employee
  table: **Total PRs**, **R\&D PRs**, **R\&D %**, **Period salary**, and **Est. R\&D wages**. Authors
  who aren't paid in the jurisdiction's currency are listed separately under **Excluded from R\&D
  analysis** with the reason.
* **PR classifications** — the audit trail: every PR with its **R\&D** / **Non-R\&D** badge,
  confidence, code output, and the classifier's reasoning.

Both views export to CSV (**Export R\&D wage summary CSV** and **Export PR classifications CSV**).

### Project breakdown tabs

If you configure project breakdown fields, each one gets its own tab showing code output and PR
count by category — as an overview pie chart and table, and for Jira custom fields, over-time and
by-team charts. PRs without a category appear as **Uncategorized**, and you can drill down from
any chart to the underlying PRs. The open tab is saved in the page URL, so you can share a link
that opens a specific breakdown directly.

### How Jira custom field categories are assigned

A Jira custom field breakdown (for example, a work type field) assigns each PR a
category in three steps:

1. **PR to issue.** Weave links the PR to Jira issues by issue key, as described in [linking tasks
   to PRs](/project-management/jira#linking-tasks-to-prs). PRs that aren't linked to a Jira issue
   aren't included in the breakdown.
2. **Issue to epic.** Weave finds the issue's epic. A sub-task without its own epic uses its
   parent issue's epic.
3. **Category lookup.** Weave reads your configured custom field in this order and uses the first
   value it finds:
   * The epic's value
   * The value on the epic's parent, then on that parent's parent (for example, an initiative)
   * Your fallback rules, if configured (labels first, then issue types)
   * The issue's own value

A PR linked to several issues counts toward each category its issues resolve to. It appears as
**Uncategorized** only when none of its linked issues resolves to a category.

The epic's value takes precedence over the issue's own value, so every issue under an epic inherits
the epic's category. To recategorize that work, change the field on the epic rather than on
individual issues. If you clear the field on an epic, its issues stop using the old value after
the next sync.

<Note>
  Weave syncs Jira data roughly every 3 hours, and each sync only picks up issues and epics that
  changed in Jira since the last sync. Renaming an option in the Jira field's configuration doesn't
  mark issues as changed, so Weave checks for renamed options separately about once a day. After a
  rename, the old option name can show for up to a day.
</Note>

## How estimated R\&D wages are calculated

For each included author in a period:

* **R\&D %** = the author's code output on R\&D-classified PRs ÷ their total code output. Weights
  by output rather than PR count, so large qualifying projects count for more than one-line fixes.
* **Period salary** comes from your [HR data](/data-sources/hr) when available; otherwise it falls
  back to your organization's hourly rate.
* **Est. R\&D wages** = period salary × R\&D %.

The organization-level percentage and wage total aggregate across included authors.

## Setting it up

<Steps>
  <Step title="Enable the add-on">
    R\&D capitalization is a paid add-on. If you don't have it yet, you can subscribe directly from
    the report page — it shows pricing and a checkout flow, whether or not you already have a base
    Weave subscription.
  </Step>

  <Step title="Choose your tax jurisdiction">
    Go to **Organization settings → R\&D capitalization** and pick your jurisdiction under
    **Classification settings**. Optionally add custom qualifying or non-qualifying criteria.
  </Step>

  <Step title="Connect salary data">
    Connect [HR data](/data-sources/hr) for per-person salaries, or set an organization hourly
    rate as a fallback.
  </Step>

  <Step title="Add project breakdowns (optional)">
    Under **Project breakdown fields**, add a **Project name** breakdown or a **Jira custom
    field** breakdown, with optional fallback rules based on labels or issue types.
  </Step>
</Steps>

## Who can see it?

Anyone with the **Manager** or **Admin** role can view the report. Only organization admins can
change the R\&D configuration or export CSVs.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.