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

# Track Vacation and Availability

> Set up Nextedy PLANNINGBOARD to reflect each team member's actual available capacity, accounting for vacation days, part-time assignments, and calendar-based off days — so capacity bars show realistic sprint totals.

## Prerequisites

Before configuring vacation and availability tracking:

* The Teams Service must be enabled and configured. See [Set Up Teams Service](/planningboard/guides/capacity/teams-service-setup).
* Swimlanes must use the **Users (Assignee)** assignment type. See [User and Assignee Swimlanes](/planningboard/guides/swimlanes/user-swimlanes).
* Capacity tracking (`capacityLoad`) must be enabled on the board. See [Configure Capacity Tracking](/planningboard/guides/configuration/capacity-configuration).

## How availability is calculated

Planningboard calculates per-user capacity from the Teams Service, using each user's Polarion working calendar for the Plan's date range. The formula is:

```text theme={null}
totalCapacity  = working hours in date range × assignment percentage
allocatedCapacity = sum of remainingEstimate for all tasks assigned to the user in the Plan
availableCapacity = totalCapacity − allocatedCapacity
```

A negative `availableCapacity` value indicates the user is overallocated.

<Note>
  Users who have no calendar defined and no team assignment entry default to a `totalCapacity` of `0.0`. They will always appear fully allocated regardless of actual workload.
</Note>

The capacity values vary per Plan column because each Plan spans different dates — a user on vacation during one sprint has lower `totalCapacity` for that column automatically, without any manual adjustment.

<Steps>
  <Step title="Verify user calendar entries in Polarion">
    Planningboard reads capacity from each user's Polarion working calendar. If a user has no calendar defined, the system falls back to the base calendar configured in `nextedy.gantt.calendarHolder`.

    1. In Polarion, go to **Administration > Calendars**.
    2. Confirm each team member has a calendar assigned.
    3. Mark vacation or unavailability as off days on the user's calendar for the relevant date ranges.

    <Tip>
      If most team members share the same calendar, configure `nextedy.gantt.calendarHolder` with the ID of a base user whose calendar serves as the default fallback. This reduces per-user calendar setup overhead.
    </Tip>
  </Step>

  <Step title="Set the assignment percentage on team membership work items">
    The Teams Service reads capacity percentage from team assignment work items. Each assignment work item must have:

    * A `from` date field — when the team membership starts
    * A `to` date field — when the team membership ends
    * A capacity percentage (the field name depends on your team work item type setup)

    Assignments outside the Plan's date range are excluded automatically from capacity calculations. This means a user who joins or leaves mid-sprint will have their capacity prorated to the actual overlap.

    ```text theme={null}
    Team assignment work item
      from: 2025-10-01
      to:   2025-10-31
      capacity: 80%        ← user is 80% allocated to this team
    ```
  </Step>

  <Step title="Enable capacity modifiers (optional)">
    If your team work items include capacity modifier fields to account for ceremonies, overhead, or other availability reductions, enable this in your Polarion system configuration:

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

    When enabled, the modifier percentage is read from the `capModA` field on the team work item and applied as a reduction to the calculated capacity. The default value of `nextedy.gantt.useTeamCapacityModifiers` is `false`.

    <Warning>
      Configuration properties are whitespace-sensitive. Ensure there are no leading or trailing spaces around property names or values, or the setting will be silently ignored.
    </Warning>
  </Step>

  <Step title="Enable per-user capacity display on the board">
    To show per-user capacity bars in swimlane summary cells, the board must use `useTeamsService` together with per-user capacity load:

    1. Open the widget parameters for your Planningboard.
    2. Under **Capacity**, confirm that the Teams Service integration is active.
    3. For per-user capacity bars, ensure `multiCapacityLoad` is configured — this shows each user swimlane's own capacity progress rather than an aggregate column total.

    See [Track User Capacity](/planningboard/guides/capacity/user-capacity) for the full widget parameter configuration steps.
  </Step>
</Steps>

## How vacation days appear on the board

<Frame>
  <img src="https://mintcdn.com/none-17b4493f/zUlmOSLBIQ0HyaAX/planningboard/diagrams/guides/capacity/vacation-tracking/diagram-1.svg?fit=max&auto=format&n=zUlmOSLBIQ0HyaAX&q=85&s=37e596b31b29529926ba679417cc24fe" alt="Sprint 3 and Sprint 4 swimlane summary cells for Alice and Bob, showing Alice's Sprint 4 capacity bar reduced and marked on vacation with a 2-day cap at 100%, while Bob's bars stay consistent across both sprints" width="660" height="190" data-path="planningboard/diagrams/guides/capacity/vacation-tracking/diagram-1.svg" />
</Frame>

When Alice has vacation days marked in Sprint 4, her `totalCapacity` for that column is reduced proportionally. The capacity bar automatically reflects the shorter available window — no manual column adjustments are needed.

## Verification

After completing the steps above, open your Planningboard. In each Plan column, expand a user swimlane and check its summary cell. You should now see:

* A capacity bar showing load relative to the user's **actual** available hours for that sprint
* Overallocated users showing a full or overflowing bar (negative `availableCapacity`)
* Users on vacation in a given sprint showing a reduced total capacity for that column compared to adjacent sprints

<Tip>
  If a user's capacity bar shows `0%` even though they have work assigned, check that their team assignment work item has both a `from` and `to` date, and that those dates overlap with the Plan's date range. Assignments without date boundaries are filtered out of capacity calculations.
</Tip>

## Known limitations

<Warning title="Multiple assignees not supported">
  Planningboard capacity load does not support work items with multiple assignees. If a work item has more than one assignee, capacity is not distributed across them — only a single primary assignee is used for capacity calculation. For multi-assignee planning, refer to [Nextedy GANTT](/planningboard/index).
</Warning>

<Warning title="Sub-item effort not distributed">
  Capacity calculation uses `remainingEstimate` from the work items directly on the board. Effort tracked on child tasks nested below the board's query scope is not rolled up into the parent's allocated capacity. This is a known gap compared to GANTT's capacity model.
</Warning>

## See also

* [Set Up Teams Service](/planningboard/guides/capacity/teams-service-setup)
* [Track User Capacity](/planningboard/guides/capacity/user-capacity)
* [Track Team Capacity](/planningboard/guides/capacity/team-capacity)
* [Visualize Capacity Load](/planningboard/guides/capacity/capacity-visualization)
* [Capacity Calculation Issues](/planningboard/guides/troubleshooting/capacity-issues)
* [Configure Capacity Tracking](/planningboard/guides/configuration/capacity-configuration)

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

  * Swimlane Assignment Types
  * Introduction to Planningboard
  * What is 'Normalization'

  **Support Tickets**

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

  **Source Code**

  * `PlanningBoardDataService.java`
  * `PlanningBoardWidget.java`
  * `planningboard.js`
  * `capacityHelperData.cy.ts`
  * `UserCapacityInfo.java`
</Accordion>
