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

# Department-Level Capacity

> How Nextedy PLANNINGBOARD counts a team assignment that names a department instead of a person, so an organizational unit contributes to team capacity without every member existing as a Polarion user.

export const LastReviewed = ({date, state}) => {
  if (!date) return null;
  const formatted = new Date(`${date}T00:00:00Z`).toLocaleDateString("en-US", {
    year: "numeric",
    month: "long",
    day: "numeric",
    timeZone: "UTC"
  });
  const label = state === "reviewed" ? `Last reviewed and confirmed up to date on ${formatted}` : `Last updated on ${formatted}`;
  return <p className="mt-10 text-sm text-gray-400 dark:text-zinc-500 not-prose">
      {label}
    </p>;
};

This page explains what a department-level team assignment is, how the board turns one into capacity hours, and why a team total can be larger than the per-user rows beneath it. For the configuration steps, see [Track Department Capacity](/planningboard/guides/capacity/department-capacity).

## The Problem: Capacity That Belongs to No One

The [Teams Service](/planningboard/concepts/teams-service) models a team as a set of assignment work items, each naming a person and the period they belong to the team. Capacity is then the sum of what those people can deliver.

That model breaks down as soon as a team is partly staffed by an organizational unit rather than by named individuals. A validation department, a shared test lab, or an external supplier is often represented in Polarion as a single work item in a resource breakdown structure — not as a set of user accounts. An assignment pointing at such a work item names **no assignee at all**.

Planningboard used to charge every team assignment to its assignees. An assignment with no assignee therefore contributed nothing, and the board reported a smaller capacity than the Project Team Assignments Gantt reported for the same team over the same dates. The number a planner saw depended on which screen they opened.

## What Changed

Team capacity and per-user capacity are now computed by the Gantt plugin's teams service rather than by Planningboard itself, so the board and the Gantt report the same figure for the same team over the same date range — and a department-level assignment counts on both. Planningboard keeps its own assignee-only implementation as a fallback for the cases described in [When the delegation does not happen](#when-the-delegation-does-not-happen).

<Frame>
  <img src="https://mintcdn.com/none-17b4493f/fis_thNCHxTEUuEg/planningboard/assets/images/department-capacity-team-assignments.png?fit=max&auto=format&n=fis_thNCHxTEUuEg&q=85&s=b5508795e150d390c8737891425f7b1d" alt="The Project Team Assignments Gantt, showing team Alpha with three named members and a fourth row for a department resource assigned at 100%, and the same department listed in the allocation table beneath the chart" width="1280" height="844" data-path="planningboard/assets/images/department-capacity-team-assignments.png" />
</Frame>

## What Makes an Assignment "Department-Level"

An assignment is department-level when the teams service can resolve **no user members** from it. Two fields are read, in this order:

1. The assignment's **Resource** field — the work item field the Gantt is configured to read as the resource. In a default configuration that is the assignment's own `resource` field, named by `nextedy.gantt.workitems.default.resource_field`; a Gantt widget can also be pointed at a different resource field in its own parameters.
2. **Only if the resource field is empty**, the assignment's own **assignee** field.

The resource field is the source of truth and the assignee field is the fallback. An assignment that carries both is charged on the resource side, and the person named as its assignee contributes nothing.

A department work item is a work item, not a Polarion user. So an assignment whose resource field names a department resolves to an empty member list — whether or not it also names an assignee — and that is precisely the case the board previously discarded.

<Note>
  **Nothing about the assignment work item changes.** The same team assignment type, the same `from` and `to` dates, the same **% Assignment** value (the `capacity` field). Whether it behaves as a person or as a department depends only on whether a Polarion user can be resolved from it.
</Note>

## How the Hours Are Derived

An assignment with no resolvable members is placed on a **standing working calendar**: Monday to Friday count as working days, Saturday and Sunday contribute zero. No personal absences are subtracted from it, because there is no person whose absences could be read — a department is a standing pool of effort, not an individual.

How much the department contributes on each of those working days comes from an **absolute hours-per-working-day value held on the resource work item itself**, instead of from the working day a person's own calendar supplies. Two properties tell the Gantt which field carries that value and how to read it:

```properties theme={null}
nextedy.gantt.resourceCapacityField=capacityHoursPerDay
nextedy.gantt.resourceCapacityFieldUnit=perDay
```

In a project configured this way, a `department` work item carries a custom field rendered as **Capacity (hours per working day)**. A department whose value is `40`, contributes 40 hours on every working day inside the assignment's `from`–`to` range — five times what a person at **% Assignment** 100 contributes.

The two paths therefore read different fields for the same question:

| The assignment resolves to | Contribution per working day |
| - | - |
| A person | the person's own calendar hours for that weekday × (**% Assignment** ÷ 100) |
| A department or other resource work item | the resource's **Capacity (hours per working day)** value |

The board shows the result in **working days**, at eight hours to a day — which is why a department at 40 hours per working day reads as five full-time equivalents. Set `nextedy.planningboard.durationUnit=hours` to show raw hours instead.

Over a ten-working-day range, a person at **% Assignment** 100 on a standard eight-hour calendar contributes ten full working days, and a department at 40 hours per working day at the same **% Assignment** contributes fifty.

<Warning>
  **A department's size belongs in its hours-per-working-day field, not in % Assignment.**  If the number on the board is not what you expect, check the **Capacity (hours per working day)** value on the resource work item first, then check that `nextedy.gantt.resourceCapacityField` names that field.
</Warning>

### Capacity Modifiers Still Apply

When `nextedy.gantt.useTeamCapacityModifiers` is enabled for the project, the team's two capacity modifier fields reduce a department-level assignment exactly as they reduce a member's:

```text theme={null}
capacity = capacity × (1 − (capModA + capModB) ÷ 100)
```

The two percentages combine **additively inside a single multiplicative factor** — they are not applied one after the other. The `capModB` term is skipped for dates that fall within `nextedy.gantt.capacityModifierBFieldDayLimit` days of today, so a near-term reduction does not distort the sprint currently being planned.

With modifiers of 10% and 10% over a ten-working-day range, a person at **% Assignment** 100 reports 10 × 1.00 × 0.8 = 8 days, and a department at 40 hours per working day reports 10 × 5 × 0.8 = 40.

## Membership Is Not Affected

Capacity and membership are separate questions, and only capacity changed.

A department-level resource still produces:

* **No swimlane.** It is not a user, so there is no row to drag cards into.
* **No line in the per-user capacity breakdown.** The tooltip lists people, and a department is not one.

The consequence is visible and expected: **a team's total capacity can exceed the sum of its per-user rows.** The difference is the department-level contribution.

Membership is resolved from the resource field *and* the assignee field together, while capacity is charged to one of them. A person named as the assignee of an assignment whose resource field points at a department therefore stays a team member — and keeps a swimlane row — while contributing nothing to capacity. **A swimlane row showing zero capacity is the expected reading of that combination,** not a fault.

<Frame>
  <img src="https://mintcdn.com/none-17b4493f/fis_thNCHxTEUuEg/planningboard/assets/images/department-capacity-board.png?fit=max&auto=format&n=fis_thNCHxTEUuEg&q=85&s=a56a3ce0a3ae145287e73c8e0543784f" alt="A Planningboard iteration board where each column header carries a team capacity bar reading 42, 32, 42 and 57, while the user swimlanes beneath show much smaller per-user capacities and the department has no row of its own" width="1280" height="844" data-path="planningboard/assets/images/department-capacity-board.png" />
</Frame>

If you need a department to appear as a planning row, model it as a Polarion user account instead — that is a different modelling decision with different trade-offs, and it re-introduces holidays and absences.

## When the Delegation Does Not Happen

Which engine computes capacity depends on one thing: whether the Nextedy GANTT plugin is installed on the same Polarion. With it, team and per-user capacity come from its teams service. Without it, the board logs that the Gantt teams service is unavailable and falls back to its own assignee-only arithmetic, in which a department-level assignment contributes nothing.

`nextedy.planningboard.useTeamsService` is a different question. It decides whether the board uses team assignments for capacity at all; with it set to `false` the board shows each plan's own capacity field instead — not assignee-only arithmetic, and not zero.

The fallback produces no error on the capacity bar: the board shows the assignee-only figure, so a team whose capacity is entirely department-level reads as **zero** rather than as a failure. That silent zero is the symptom to recognize when the Gantt plugin is missing.

<Note>
  **A team shared through a supporting project keeps working.** The identifier handed to the Gantt is the work item id the board already resolved, so remapped team ids from supporting projects stay resolvable on the Gantt side.
</Note>

## Refreshing the board

After editing a resource's **Capacity (hours per working day)** value or a team assignment, re-read the board's data with the **Refresh data** button in the board toolbar. The project administration pages for Nextedy PLANNINGBOARD offer no separate cache action.

## Related Concepts

* [Teams Service](/planningboard/concepts/teams-service) — the team and membership model this capacity is computed from
* [Capacity Tracking](/planningboard/concepts/capacity-tracking) — how the capacity bar reflects effort against available capacity
* [Track Department Capacity](/planningboard/guides/capacity/department-capacity) — the configuration steps
* [Teams Service Properties](/planningboard/reference/configuration-properties/teams-properties) — reference for the properties named on this page

<LastReviewed date="2026-09-24" />
