> ## 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.

# Capacity Properties

> Configuration properties that control how Nextedy PLANNINGBOARD calculates, displays, and tracks capacity for swimlanes and team members.

<Warning title="Whitespace sensitivity">
  Capacity configuration property values are whitespace-sensitive. Trailing spaces, leading spaces, or unexpected line breaks in property values will silently break capacity calculations. Validate each value carefully before saving.
</Warning>

***

## Overview

<Frame>
  <img src="https://mintcdn.com/none-17b4493f/vfRg9jxXRntLqZFW/planningboard/diagrams/reference/configuration-properties/capacity-properties/diagram-1.svg?fit=max&auto=format&n=vfRg9jxXRntLqZFW&q=85&s=b06e3738f8fc2742eafc512e3c34afa9" alt="Widget parameters mapped to their configuration properties, feeding into the Teams Service, which combines team work items, user calendars, off days, and capacity percentage into totalCapacity, allocatedCapacity, and availableCapacity" width="760" height="460" data-path="planningboard/diagrams/reference/configuration-properties/capacity-properties/diagram-1.svg" />
</Frame>

The capacity system has two layers:

1. **Widget-level** — whether capacity tracking is active for a board instance (controlled by widget parameters such as `capacityLoad` and `useTeamsService`).
2. **Administration-level** — how capacity is calculated globally, including calendar fallback behaviour and capacity modifier fields (controlled by the properties documented on this page).

***

## Capacity Calculation Properties

These properties affect how Planningboard computes user and team capacity from calendars and team work items.

| Property                                 | Type      | Default   | Description                                                                                                                                                                                                 |
| ---------------------------------------- | --------- | --------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `nextedy.gantt.calendarHolder`           | `string`  | *(none)*  | User ID of a base user whose calendar is used as a fallback when a team member has no personal calendar defined. Optional. When absent, the system default calendar applies.                                |
| `nextedy.gantt.useTeamCapacityModifiers` | `boolean` | `false`   | Enables capacity modifier fields (`capModA`, `capModB`) on team work items, allowing team capacity to be reduced by a configurable percentage. When `false`, modifier fields are ignored.                   |
| `nextedy.gantt.capacityModifierAField`   | `string`  | `capModA` | Field name (on team work items) used as the primary capacity modifier. An integer field representing the percentage reduction (0–100). Only read when `nextedy.gantt.useTeamCapacityModifiers` is `true`.   |
| `nextedy.gantt.capacityModifierBField`   | `string`  | `capModB` | Field name (on team work items) used as the secondary capacity modifier. An integer field representing the percentage reduction (0–100). Only read when `nextedy.gantt.useTeamCapacityModifiers` is `true`. |

<Note title="Where to set these properties">
  These properties are set in your Polarion administration area under **Administration > Nextedy PLANNINGBOARD** (or in the relevant `context.properties` file, depending on your setup). They are shared with the Nextedy GANTT product — the `nextedy.gantt.*` prefix does not restrict them to GANTT only.
</Note>

***

## Calendar Fallback Property

| Property                       | Type     | Default  | Description                                                                                                                                                                                                                    |
| ------------------------------ | -------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `nextedy.gantt.calendarHolder` | `string` | *(none)* | Base user ID. If a team member has no personal calendar in Polarion, the working hours and off days from this user's calendar are used to calculate `totalCapacity`. When not set, Polarion's system default calendar applies. |

**Effect on capacity calculation:**

* `totalCapacity` for a user = working hours derived from their calendar (or the fallback calendar) × their capacity percentage, summed over the Plan's date range.
* Users with no calendar and no `calendarHolder` configured default to `totalCapacity = 0.0`.

<Warning title="Zero-capacity fallback">
  Team members without a personal calendar and without `nextedy.gantt.calendarHolder` configured will show `totalCapacity = 0.0`. This is a known behaviour (see NPT-1211). Always configure `calendarHolder` or ensure every team member has a Polarion calendar.
</Warning>

**Configuration example:**

```properties theme={null}
nextedy.gantt.calendarHolder=jsmith
```

Replace `jsmith` with the Polarion user ID of the user whose calendar should serve as the shared fallback.

***

## Capacity Modifier Properties

Capacity modifiers allow administrators to reduce a team's calculated capacity by a percentage — for example, to account for planned overhead, meetings, or non-project work.

| Property                                 | Type      | Default   | Description                                                                                                                                      |
| ---------------------------------------- | --------- | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
| `nextedy.gantt.useTeamCapacityModifiers` | `boolean` | `false`   | Master switch. Set to `true` to enable reading of modifier fields from team work items.                                                          |
| `nextedy.gantt.capacityModifierAField`   | `string`  | `capModA` | Field name for the primary modifier. Must be an integer custom field on the team work item type, holding a percentage value between 0 and 100.   |
| `nextedy.gantt.capacityModifierBField`   | `string`  | `capModB` | Field name for the secondary modifier. Must be an integer custom field on the team work item type, holding a percentage value between 0 and 100. |

**How modifiers reduce capacity:**

When `nextedy.gantt.useTeamCapacityModifiers = true`, Planningboard reads the value of the field named by `nextedy.gantt.capacityModifierAField` from each team work item. The modifier percentage reduces the team's computed capacity for that team.

<Info title="Verify in application">
  The exact formula applying the modifier percentage to computed capacity (e.g., `totalCapacity × (1 - modifierA/100)`) should be verified against the live product. {/* TODO: verify against the live product */}
</Info>

**Configuration example — enabling capacity modifiers:**

```properties theme={null}
nextedy.gantt.useTeamCapacityModifiers=true
nextedy.gantt.capacityModifierAField=capModA
```

In this configuration, Planningboard reads the `capModA` integer field from each team work item and applies it as a percentage reduction to that team's capacity.

**Custom field name example:**

```properties theme={null}
nextedy.gantt.useTeamCapacityModifiers=true
nextedy.gantt.capacityModifierAField=overheadPct
```

Use this when your team work items use a differently named field (e.g., `overheadPct` instead of `capModA`).

***

## Capacity Calculation Model

Understanding how Planningboard derives capacity values helps you configure the above properties correctly.

### Per-User Capacity Metrics

For each user assigned to tasks within a Plan, Planningboard computes:

| Metric              | Calculation                                                                                               | Notes                                                                             |
| ------------------- | --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- |
| `totalCapacity`     | Working hours from user calendar (or fallback) × capacity assignment percentage, over the Plan date range | Defaults to `0.0` if no calendar is found and no `calendarHolder` is set          |
| `allocatedCapacity` | Sum of remaining estimates for all tasks assigned to this user within the Plan                            | Rounded to 1 decimal place                                                        |
| `availableCapacity` | `totalCapacity − allocatedCapacity`                                                                       | Negative values indicate overallocation; displayed in red in the capacity tooltip |

### Overallocation

When `availableCapacity` is negative, the user is overallocated for that Plan period. Planningboard displays this visually in the capacity tooltip.

<Frame>
  <img src="https://mintcdn.com/none-17b4493f/vfRg9jxXRntLqZFW/planningboard/diagrams/reference/configuration-properties/capacity-properties/diagram-2.svg?fit=max&auto=format&n=vfRg9jxXRntLqZFW&q=85&s=1e71c4678bfc5e23f42fbd79580e071f" alt="Capacity tooltip showing per-user Available, Allocated, and Total hours, with a negative Available value shown in red for an overallocated user" width="400" height="290" data-path="planningboard/diagrams/reference/configuration-properties/capacity-properties/diagram-2.svg" />
</Frame>

The default tooltip (when no custom `columnTooltipTemplate` is configured) shows aggregate values: Capacity, Done, Todo, and Available.

### Plan-Level Metrics

| Metric                   | Description                                                                                                                                              |
| ------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `childRemainingEstimate` | Sum of remaining estimates across all child tasks within the Plan. Should approximate the sum of `allocatedCapacity` values when all tasks are assigned. |
| `allChildTasksCount`     | Total number of child task work items in the Plan, regardless of assignment status.                                                                      |
| `assigneeCount`          | Number of unique users assigned to tasks in the Plan. Equals the number of entries in the per-user capacity breakdown.                                   |

***

## Known Limitations

The following capacity limitations are confirmed from ticket analysis. Do not rely on features that are listed here as absent.

<Warning title="Multi-assignee not supported">
  Planningboard capacity load does not support multiple assignees on a single work item. If a work item has multiple assignees, capacity is not correctly distributed across them. This is a known gap compared to Nextedy GANTT.
</Warning>

<Warning title="Sub-item effort not distributed">
  Planningboard does not calculate capacity from sub-item efforts. Only direct remaining estimates on assigned tasks are used for `allocatedCapacity`. Hierarchical effort roll-up (as supported in GANTT) is not available.
</Warning>

<Info title="Teams service is a prerequisite">
  Per-user capacity tracking (showing `totalCapacity`, `allocatedCapacity`, and `availableCapacity` per user per sprint) requires the Teams service to be configured. Without it, only aggregate effort totals are available. See [Teams Service Properties](/planningboard/reference/configuration-properties/teams-properties) for the Teams service setup.
</Info>

***

## Configuration Example

The following is a complete example configuration combining all capacity properties:

```properties theme={null}
# Calendar fallback for users without a personal Polarion calendar
nextedy.gantt.calendarHolder=admin

# Enable capacity modifier fields on team work items
nextedy.gantt.useTeamCapacityModifiers=true

# Field name on team work items holding the modifier percentage (0-100)
nextedy.gantt.capacityModifierAField=capModA
```

With this configuration:

* Users without personal calendars inherit working hours and off days from the `admin` user's calendar.
* Team work items are checked for the `capModA` integer field, and its value reduces the team's computed capacity proportionally.
* Users with no resolved calendar and no `calendarHolder` still fall back to `totalCapacity = 0.0`.

***

## Related Pages

* [Capacity Parameters](/planningboard/reference/widget-parameters/capacity-parameters) — per-widget parameters controlling whether capacity tracking is active on a board instance.
* [Teams Service Properties](/planningboard/reference/configuration-properties/teams-properties) — configuration properties for the Teams service, required for per-user capacity breakdown.
* [Configuration Properties](/planningboard/reference/configuration-properties/index) — all administration configuration properties for Planningboard.
* [Reference](/planningboard/reference/index) — full reference index.

<Accordion title="Sources">
  **KB Articles**

  * Planningboard: Customizable Statistics and Capacity Indicators
  * Planningboard Widget Parameters
  * Swimlane Assignment Types

  **Support Tickets**

  * [#6174](https://support.nextedy.com/helpdesk/tickets/6174)
  * [#4714](https://support.nextedy.com/helpdesk/tickets/4714)
  * [#6605](https://support.nextedy.com/helpdesk/tickets/6605)

  **Source Code**

  * `capacityHelperData.cy.ts`
  * `UserCapacityInfo.java`
  * `capacityTooltipRendering.cy.ts`
  * `PlanningBoardTeamsService.java`
  * `IPlanningBoardTeamsService.java`
</Accordion>
