# Epic SPAR-22 - Progress reporting for work package hierarchies

Project: Stream Planning and Reporting
Status: closed
URL: https://community.openproject.org/work_packages/SPAR-22

## Detailed specification

### Motivation and background information

### Acceptance criteria

### Out of scope

| Attribute | Value |
| --- | --- |
| Mockups |  |

## Planning

| Attribute | Value |
| --- | --- |
| Roadmap |  |
| Date |  |
| Votes | 2 |
| List |  |
| Target versions | 14.0.0 |
| Relevance |  |

## Subitems

| ID | Type | Subject | Status | Assignee | Target versions | Project | Priority | Spent time |
| --- | --- | --- | --- | --- | --- | --- | --- | --- |
| SPAR-32 | Feature | Change calculation and name of Work and Remaining work | closed |  | 13.2.0 | Stream Planning and Reporting | Medium |  |
| SPAR-50 | Feature | "% Complete" field split to own value and total value | closed |  | 13.3.0 | Stream Planning and Reporting | Medium |  |
| SPAR-58 | Feature | Add link from work / estimated work sum to detailed query view | closed |  | 13.3.0 | Stream Planning and Reporting | Medium |  |
| SPAR-60 | Feature | Make renamed attributes searchable with old names ("% complete", "work" and "remaining work") | closed |  | 13.3.0 | Stream Planning and Reporting | Medium |  |
| SPAR-64 | Feature | Remove Derived remaining work from Work package form configuration | closed |  | 13.3.0 | Stream Planning and Reporting | Medium |  |
| SPAR-21 | Feature | Consistent calculation of progress (% Complete) in work package hierarchies | closed |  | 14.0.0 | Stream Planning and Reporting | Medium |  |
| SPAR-44 | Feature | Fix seeding of status to include % Complete values | closed |  | 14.0.0 | Stream Planning and Reporting | Medium |  |
| SPAR-69 | Feature | Add % Complete to section "Estimates and time" | closed |  | 14.0.0 | Stream Planning and Reporting | Medium |  |
| SPAR-72 | Feature | Live Preview value changes in Progress Modal | closed |  | 14.0.0 | Stream Planning and Reporting | Medium |  |
| SPAR-73 | Feature | Snappier progress popover | closed |  | 14.0.1 | Stream Planning and Reporting | Medium |  |
| SPAR-31 | Feature | Exclude by status some work packages from the calculation of totals for % Complete and work estimates | closed |  | 14.2.0 | Stream Planning and Reporting | Medium |  |
| SPAR-33 | Feature | Record and display work and remaining work in hours and days | closed |  | 14.2.0 | Stream Planning and Reporting | Medium |  |

## Bugs and other work packages

| ID | Type | Subject | Status | Assignee | Target versions | Module |
| --- | --- | --- | --- | --- | --- | --- |
| SPAR-71 | Bug | Migration help text notice in modal should not be present in status-based mode | closed |  | 14.0.0 |  |
| SPAR-68 | Bug | PDF export does not show parent ticket %Complete value | closed |  | 14.0.0 |  |
| SPAR-74 | Task | Backport "Snappier progress popover" to release/14.0 | closed |  | 14.0.1 |  |
| SPAR-78 | Bug | Focus ripped from work/remaining work preemptively disrupting input | rejected |  |  |  |
| SPAR-70 | Code maintenance | Remove some technical debt about new % Complete calculation | rejected |  |  |  |

## Details

| Attribute | Value |
| --- | --- |
| Module |  |
| Enterprise plan |  |
| Labels |  |

## People

| Attribute | Value |
| --- | --- |
| Assignee |  |
| Accountable | Christophe Bliard |
| Product manager |  |
| Designer | Marc Alcobé |
| Developers | Christophe Bliard, Aaron Contreras |
| Requested by |  |
| Interest by |  |

## Estimates and progress

| Attribute | Value |
| --- | --- |
| Work |  |

## Description

# Goal

OpenProject contains extensive project controlling functions (effort estimation, progress calculation, time recording and reporting). These existing functions are to be extended for use in hybrid large-scale projects in which a combination of agile and classic process models is used. In particular, it should be possible to record or calculate the following values of a work breakdown structure both top-down and bottom-up via a hierarchy.

# Context

## Relevant work package attributes

The following work package attributes are focused on

<figure class="table op-uc-figure_align-center op-uc-figure"><table class="op-uc-table"><thead class="op-uc-table--head"><tr class="op-uc-table--row"><th class="op-uc-table--cell op-uc-table--cell_head"><p class="op-uc-p">Name 13.1</p></th><th class="op-uc-table--cell op-uc-table--cell_head"><p class="op-uc-p">Name 13.2</p></th><th class="op-uc-table--cell op-uc-table--cell_head"><p class="op-uc-p">Editable for parent work packages</p></th></tr></thead><tbody><tr class="op-uc-table--row"><td class="op-uc-table--cell"><p class="op-uc-p">Estimated time</p></td><td class="op-uc-table--cell"><p class="op-uc-p">Work</p></td><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" checked="checked" disabled="disabled"><span class="todo-list__label__description  op-uc-p"></span></label></li></ul></td></tr><tr class="op-uc-table--row"><td class="op-uc-table--cell"><p class="op-uc-p">Remaining hours</p></td><td class="op-uc-table--cell"><p class="op-uc-p">Remaining work</p></td><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" checked="checked" disabled="disabled"><span class="todo-list__label__description  op-uc-p"></span></label></li></ul></td></tr><tr class="op-uc-table--row"><td class="op-uc-table--cell"><p class="op-uc-p">Progress (%)</p></td><td class="op-uc-table--cell"><p class="op-uc-p">% Complete</p></td><td class="op-uc-table--cell"><ul class="todo-list op-uc-list_task-list op-uc-list"><li class="op-uc-list--item"><label class="todo-list__label"><input type="checkbox" checked="checked" disabled="disabled"><span class="todo-list__label__description  op-uc-p"></span></label></li></ul></td></tr><tr class="op-uc-table--row"><td class="op-uc-table--cell"><p class="op-uc-p"></p></td><td class="op-uc-table--cell"><p class="op-uc-p"></p></td><td class="op-uc-table--cell"><p class="op-uc-p">Currently values can not be edited for parent work packages</p></td></tr></tbody></table></figure>

## Names and translations

<figure class="table op-uc-figure_align-center op-uc-figure"><table class="op-uc-table"><thead class="op-uc-table--head"><tr class="op-uc-table--row"><th class="op-uc-table--cell op-uc-table--cell_head" style="width:150px;"><p class="op-uc-p"><strong>Source string</strong></p></th><th class="op-uc-table--cell op-uc-table--cell_head"><p class="op-uc-p">Remarks</p></th><th class="op-uc-table--cell op-uc-table--cell_head" style="width:150px;"><p class="op-uc-p"><strong>FR</strong></p></th><th class="op-uc-table--cell op-uc-table--cell_head" style="width:150px;"><p class="op-uc-p"><strong>DE</strong></p></th><th class="op-uc-table--cell op-uc-table--cell_head" style="width:150px;"><p class="op-uc-p"><strong>ES</strong></p></th></tr></thead><tbody><tr class="op-uc-table--row"><th class="op-uc-table--cell op-uc-table--cell_head" style="width:150px;"><p class="op-uc-p">Work estimates and progress&nbsp;</p></th><td class="op-uc-table--cell"><p class="op-uc-p">Context: Title of the pop-over that appears when you click on any of these fields: Work, Remaining work, % complete.&nbsp;</p></td><td class="op-uc-table--cell" style="width:150px;"><p class="op-uc-p"><i>(awaiting finalisation of source string)</i></p></td><td class="op-uc-table--cell" style="width:150px;"><p class="op-uc-p"></p></td><td class="op-uc-table--cell" style="width:150px;"><p class="op-uc-p"></p></td></tr><tr class="op-uc-table--row"><th class="op-uc-table--cell op-uc-table--cell_head" style="width:150px;"><p class="op-uc-p">Work</p></th><td class="op-uc-table--cell"><p class="op-uc-p"></p></td><td class="op-uc-table--cell" style="width:150px;"><p class="op-uc-p">Travail</p></td><td class="op-uc-table--cell" style="width:150px;"><p class="op-uc-p"></p></td><td class="op-uc-table--cell" style="width:150px;"><p class="op-uc-p"></p></td></tr><tr class="op-uc-table--row"><th class="op-uc-table--cell op-uc-table--cell_head" style="width:150px;"><p class="op-uc-p">Remaining work</p></th><td class="op-uc-table--cell"><p class="op-uc-p"></p></td><td class="op-uc-table--cell" style="width:150px;"><p class="op-uc-p">Travail restant</p></td><td class="op-uc-table--cell" style="width:150px;"><p class="op-uc-p"></p></td><td class="op-uc-table--cell" style="width:150px;"><p class="op-uc-p"></p></td></tr><tr class="op-uc-table--row"><th class="op-uc-table--cell op-uc-table--cell_head"><p class="op-uc-p">% Complete</p></th><td class="op-uc-table--cell"><p class="op-uc-p"></p></td><td class="op-uc-table--cell"><p class="op-uc-p">% réalisé</p></td><td class="op-uc-table--cell"><p class="op-uc-p"></p></td><td class="op-uc-table--cell"><p class="op-uc-p"></p></td></tr></tbody></table></figure>

## 

## Displaying two values

  - Some work package attributes have two values:
    
      - One value for the the parent work package itself.
    
      - One value aggregating the work package and its children values, regardless of the children visibility in the current view.

  - Both values are displayed together for the attribute. The aggregated value is prefixed with a "Σ". For instance "7 h · Σ 23 h".

  - About the sums row displayed in work package table view, it sums the filtered work packages. As such, the sum does not include the values from filtered out children. The sum from the sum row can thus be different from the sum in the parent aggregated value.

# Features breakdown

## 13.2

### ☑️ Rename Estimated time, Remaining hours, and Progress (%) attributes

The attributes described above have been renamed in <mention class="mention" data-id="50953" data-type="work_package" data-text="###50953">###50953</mention>.  
It has been shipped in 13.2.0.

### ☑️ Change calculation and display of Work and Remaining work attributes

  - Work and Remaining work are displayed as dual value: one for self and one aggregated as described above.

  - The aggregation sums the values of the work package and its descendants.

This is described in <mention class="mention" data-id="50953" data-type="work_package" data-text="###50953">###50953</mention>.  
It has been shipped in 13.2.0.

## 13.3

### ☑️ Make renamed attributes searchable with old names

  - Make the new attribute names more discoverable by supporting the old names in search fields (like when adding a column to a work package view).

This is described in <mention class="mention" data-id="52119" data-type="work_package" data-text="###52119">###52119</mention>.  
It will be shipped in 13.3.0.

### ☑️ Link to aggregation details

  - To help understanding how the aggregate value is computed, it link to a query view showing the work package and its children.

  - The linked view shows the work and estimated work columns.

  - Once % Complete displays two values, the % Complete column will be added to the query.

This is described in <mention class="mention" data-id="52076" data-type="work_package" data-text="###52076">###52076</mention>.  
It will be shipped in 13.3.0.

### ☑️ Change display of % Complete attribute

  - Like "Work" and "Remaining work" attributes, "% Complete" attribute evolves and displays two values: one for the work package and one aggregating values from children

This is described in <mention class="mention" data-id="51188" data-type="work_package" data-text="###51188">###51188</mention>.  
It will be shipped in 13.3.0.

### ☑️ Remove Derived remaining work from work package form configuration

  - The attribute Derived remaining work is internal. It is the aggregated value displayed after the Σ sign. It was added by accident when introducing it.

  - It should not be visible outside of the Remaining work field and should be removed.

This is described in <mention class="mention" data-id="52252" data-type="work_package" data-text="###52252">###52252</mention>.  
It will be shipped in 13.3.0.

## 13.4

Nothing released

## 14.0

### ☑️ Consistent calculation of % Complete attribute

  - "% Complete" is set automatically from other fields
    
      - Either from Work and Remaining work values
    
      - or from the statuses, in which case Remaining work is set automatically too

  - Total "% Complete" is set from the work package's Total work and Total remaining work.

  - Work, Remaining work, and % Complete values are *always* consistent with each other.
    
      - A popover allows to change the values: it displays them all and they get updated when one changes.

This is described in <mention class="mention" data-id="40749" data-type="work_package" data-text="###40749">###40749</mention>.  
It has been shipped in 14.0.0.

### ☑️ Seed a % Complete value for default statuses

  - Each seeded status has a default % Complete value, saving the user from tediously entering one and making the "% Complete by status" mode immediately available.

This is described in <mention class="mention" data-id="50965" data-type="work_package" data-text="###50965">###50965</mention>.  
It has been shipped in 14.0.0.

## 14.1

Nothing released

## 14.2

### ☑️ Exclude by status some work package from aggregation

  - Work package statuses can be marked as excluded from work estimates aggregation.
    
      - This is useful for statuses like "rejected" where the work, remaining work and % complete values should not be taken into account in the parent values

This is described in <mention class="mention" data-id="49409" data-type="work_package" data-text="###49409">###49409</mention>.  
It has been shipped in 14.2.0.

### ☑️ Support multiple units

  - Recording and display duration in different units (hours, days, weeks, months)

This is described in <mention class="mention" data-id="50954" data-type="work_package" data-text="###50954">###50954</mention>.  
It has been shipped in 14.2.0.

# Out of Scope

  - Display of historical values using the baseline comparison feature.

  - Enhancements to time recording

  - Extension of the work packages filter

# Visuals

<https://www.figma.com/file/znrocQvFNLb5jXRXNo7oeD/Progress-estimation?node-id=52-9257>

<figure class="image op-uc-figure"><div class="op-uc-figure--content"><img class="op-uc-image" src="/api/v3/attachments/78899/content"></div><figcaption class="op-uc-figure--description">Full hierarchy</figcaption></figure>

<figure class="image op-uc-figure"><div class="op-uc-figure--content"><img class="op-uc-image" src="/api/v3/attachments/78898/content"></div><figcaption class="op-uc-figure--description">Child work packages filtered out</figcaption></figure>

# Other

The fields need to be renamed in the code for consistency

  - See <mention class="mention" data-id="51194" data-type="work_package" data-text="###51194">###51194</mention>
