Files
CapaKraken/samples/Dispov2/plan-chargeability-report.md
T

12 KiB

Plan: Chargeability Report

Date: 2026-03-13 Status: Draft Depends on: Country/SAH, OrgUnit hierarchy, Utilization Categories, Client/WBS, Resource extensions

Problem

The bi-weekly chargeability report is currently produced in Excel. Planarchy needs a live reporting section in the app that updates in real-time as assignments, resources, and SAH change. The report is not a static file — it is an interactive page that can be exported as Excel or PDF on demand.

Core requirements:

  • Live FTE-weighted chargeability percentages grouped by org unit hierarchy
  • Historical actuals (SAP-imported or tracked) alongside forward forecasts
  • Region filtering (GER only vs ALL resource types)
  • Target vs actual comparison per management level and chapter
  • Business Development % as a separate metric
  • Change tracking (delta vs previous forecast snapshot)
  • Excel and PDF export of the current view

Report Structure (from Excel)

The report screenshot shows this layout:

Chg Report Content Prod. // - All
Status as of: {date}

| Region | Org Unit (L6) | Chapter (L7) | Ressource Type | FTE | Target ACN | tracked Chg % (SAP) | predicted Chg % (forecast months) |

Row Hierarchy

GER section (Production Studios only):

GER | Content Production | Content Production | Total        | FTE | Target | Jan | Feb | Mar | Apr | ...
GER | CGI Content       | Art Direction       |              | FTE | Target | ... |
GER | CGI Content       | Capability Dev      |              | FTE | Target | ... |
GER | CGI Content       | CGI Production      |              | FTE | Target | ... |
GER | CGI Content       | Product Data Mgmt   |              | FTE | Target | ... |
GER | CGI Content       | Program/Delivery    |              | FTE | Target | ... |
GER | CGI Content       | CGI Content         | Total        | FTE | Target | ... |  ← L6 subtotal
GER | CGI Technology    | CGI Development     |              | FTE | Target | ... |
GER | CGI Technology    | IT Development      |              | FTE | Target | ... |
GER | CGI Technology    | CGI Technology      | Total        | FTE | Target | ... |
... (Creative Content Production, VFX)
GER | Content Prod.     | Total               | Chg Germany  | FTE | Target | ... |  ← grand total
GER | Content Prod.     | Total               | BD Germany   |     |        | ... |  ← BD% row

PLUS row: additional CHG for Near&Offshore + ACN FTEs

ALL row: combined total

Change tracking: previous forecast date + delta rows

Column Structure

Column Group Type Source
FTE number Sum of resource FTE for the group
Target ACN % Official target per management level, FTE-weighted
Historical months (SAP) tracked Chg % Imported actual chargeability from SAP/period data
Forecast months predicted Chg % FTE-weighted average of individual resource forecasts

Key Formulas

FTE per chapter:

SUM(resource.fte) WHERE resource.orgUnit.level7 = chapter
                   AND resource.resourceType = filter

Chargeability per chapter (forecast):

SUM(resource.fte * resource.forecastChargeability[month])
/ SUM(resource.fte)

This is an FTE-weighted average.

Target per chapter:

SUM(resource.fte * resource.managementLevel.targetPercentage)
/ SUM(resource.fte)

Unassigned hours (implicit):

SAH - sum(all categorized hours)

BD% (Germany):

SUM(resource.fte * resource.bdPercentage[month])
/ SUM(resource.fte)

Data Requirements

What Planarchy needs to have (per resource, per month)

Data Point Source Notes
FTE Resource.fte May vary monthly
Org Unit (L5/L6/L7) Resource.orgUnit + tree Drives row grouping
Country / Metro City Resource.country Drives region filter (GER vs ALL)
Resource Type Derived or stored Production Studios / Near&Offshore / Accenture
Management Level Resource.managementLevel Drives target %
Target % ManagementLevel.targetPercentage Official chargeability target
Forecast Chargeability Derived from assignments Hours assigned to Chg projects / SAH
Forecast BD% Derived from assignments Hours assigned to BD projects / SAH
Tracked Chargeability Imported from SAP or tracked in-app Actual period data

Forecast Chargeability Derivation

This is the key insight: predicted chargeability can be derived from what Planarchy already knows:

forecastChg(resource, month) =
  sum(assignment.hoursPerDay * workingDays)
    WHERE assignment.project.utilizationCategory = 'Chg'
    AND assignment overlaps month
  / SAH(resource, month)

Similarly for BD, MD&I, etc. — each utilization category's hours divided by SAH.

This means the chargeability report is a query over existing assignments + SAH, not a separate data entry.

Tracked (Actual) Chargeability

For historical data, two options:

  1. Import from SAP: bulk import of period data (P-1, P-2, etc.) as snapshots
  2. Track in-app: if Planarchy becomes the system of record for time tracking

Recommendation: Start with SAP import. Add a ChargeabilitySnapshot model for imported actuals.

model ChargeabilitySnapshot {
  id            String   @id @default(cuid())
  periodDate    DateTime                     // e.g. 2026-02-28
  periodType    String                       // "PTD" or "MTD"
  orgUnitId     String                       // L7 chapter
  resourceType  String?                      // filter dimension
  fte           Float
  chargeability Float                        // 0.0 to 1.0
  bdPercentage  Float?
  mdiPercentage Float?
  moPercentage  Float?
  recoveryRate  Float?
  importedAt    DateTime @default(now())

  @@unique([periodDate, periodType, orgUnitId, resourceType])
}

API

Location: packages/api/src/router/chargeability-report.ts

Procedure Access Description
getReport manager Full chargeability report for a date range and region filter
getResourceForecast manager Per-resource monthly forecast data (for the ChgFC-equivalent)
importActuals admin Bulk import SAP period data
getSnapshots manager List imported actuals for a period
getChangeTracking manager Delta between current forecast and a previous snapshot date

getReport Response Shape

interface ChargeabilityReportRow {
  region: string;               // "GER" or "ALL"
  orgUnitL6: string;
  chapter: string;              // L7 name
  resourceType?: string;        // for ALL section sub-rows
  isSubtotal: boolean;
  fte: number;
  targetACN: number;            // FTE-weighted target %
  months: {
    month: string;              // "2026-03"
    dataType: 'SAP' | 'MTD';   // actual vs forecast
    fte: number;
    chargeabilityPercent: number;
  }[];
}

interface ChargeabilityReport {
  statusDate: string;
  gerRows: ChargeabilityReportRow[];
  bdGermany: { month: string; bdPercent: number }[];
  plusRow: { fte: number; months: { month: string; chargeabilityPercent: number }[] };
  allTotalRow: ChargeabilityReportRow;
  changeTracking?: {
    previousDate: string;
    gerDelta: { month: string; delta: number }[];
    allDelta: { month: string; delta: number }[];
  };
}

Engine: Chargeability Calculator

Location: packages/engine/src/chargeability/calculator.ts

Pure functions for:

// FTE-weighted chargeability for a group
function calculateGroupChargeability(
  resources: { fte: number; chargeability: number }[]
): number;

// Derive forecast chargeability from assignments + SAH
function deriveResourceForecast(
  assignments: { hoursPerDay: number; startDate: Date; endDate: Date; utilizationCategory: string }[],
  sah: SAHResult,
  month: { start: Date; end: Date }
): { chg: number; bd: number; mdi: number; mo: number; pdr: number; unassigned: number };

// FTE-weighted target for a group
function calculateGroupTarget(
  resources: { fte: number; targetPercentage: number }[]
): number;

UI

Live Reporting Section (/reports/chargeability)

This is an interactive, live-updating page — not a static export. Data refreshes whenever assignments, resource attributes, or SAH inputs change.

Layout:

  • Header: title, status date (auto = now), region toggle (GER / ALL)
  • Filter bar: resource type toggles (Production Studios / Accenture / Near&Offshore), date range (which months to display)
  • Main table: matching the Excel screenshot structure (see Row Hierarchy above)
  • Color coding: green background = actual months (SAP data), blue = current month, white = forecast months
  • Subtotal rows: bold, darker background
  • BD% row: bottom of GER section
  • Change tracking section: collapsible, shows delta vs a selectable previous snapshot date
  • Sticky first columns (Region, Org Unit, Chapter, Resource Type, FTE, Target) with horizontal scroll for months

Interactivity:

  • Click on a chapter row → drill down to individual resources in that chapter
  • Click on a resource → navigate to resource detail page
  • Click on a cell → tooltip showing the contributing assignments and their hours
  • Compare mode: select two snapshot dates and see a side-by-side delta view

Real-time updates:

  • SSE integration: report subscribes to assignment/resource change events
  • When an assignment is created/modified/deleted, affected rows recalculate
  • Debounced refresh (not per-keystroke, but within seconds of a change)

Export (on demand)

Export buttons in the page header:

Excel export:

  • Matches the current Excel report format for stakeholder familiarity
  • Includes all visible rows and columns based on current filter state
  • Separate sheets for GER and ALL views
  • Formulas preserved where possible (e.g. subtotals as SUM formulas)
  • Uses the existing PDF/Excel export infrastructure from Phase 6

PDF export:

  • Landscape layout matching the on-screen table
  • Includes header with status date and active filters
  • Page breaks per L6 section
  • Color coding preserved

Dependencies

All other plans must land first:

  1. Country/SAH — provides available hours denominator
  2. OrgUnit hierarchy — provides row grouping
  3. Utilization Categories — provides hour bucketing (Chg, BD, etc.)
  4. Client/WBS — provides project attribution
  5. Resource extensions — provides management level, resource type, client unit
  6. Management Level model — provides target percentages

Phased Delivery

Phase A: Live forecast report

  • Interactive page at /reports/chargeability
  • Derive chargeability from assignments + SAH (live query, no static file)
  • Show FTE and predicted Chg% per chapter per month
  • Region filter (GER/ALL) and resource type toggles
  • Subtotals and BD% row
  • SSE subscription for real-time updates

Phase B: Target comparison + drill-down

  • Add management level targets
  • Show Target ACN column with variance highlighting
  • Click-to-drill-down into individual resources per chapter
  • Cell tooltips showing contributing assignments

Phase C: Historical actuals + snapshots

  • SAP actuals import mechanism
  • Show tracked Chg% for past periods (green columns)
  • Mixed actual/forecast column display
  • Snapshot save/compare for change tracking

Phase D: Export + client views

  • Excel export matching stakeholder format (with formulas)
  • PDF export (landscape, color-coded)
  • Client-specific report views (e.g. BMW-only filter)
  • Compare mode (two snapshots side-by-side)

Acceptance Criteria

  • Chargeability report page with GER/ALL toggle
  • Rows grouped by L6 → L7 with subtotals
  • FTE-weighted chargeability percentages per chapter per month
  • Forecast derived from assignments + SAH (not manual entry)
  • Target column from management level target percentages
  • Resource type sub-rows in ALL section
  • BD% row for Germany
  • SAP actuals import mechanism
  • Change tracking (delta vs previous snapshot)
  • Excel export