Workforce & labour

Compass Group Luxembourg: labour is the largest cost line (47.2% of revenue in the selected period).

WF1Headcount

Down0.5%

2,352

88 open positions

WF2FTE

Up4.0%

1,806

Part-time ratio 52%

WF3Labour cost

Up6.4%

EUR 89.4M

vs previous period

WF4Labour % of revenue

Up0.4 pt

47.2%

Last year 46.8%

WF5Labour cost per hour

Up2.2%

EUR 24.31

incl. social charges

WF6Revenue per FTE

Up1.4%

EUR 104.9K

annualised

WF7Overtime %

Up0.1 pt

3.0%

104,623 overtime hours

WF8Sickness / absence %

Up0.6 pt

6.7%

246,008 sick hours

WF9Turnover (annualised)

Up0.4 pt

23.7%

~557 leavers in period

WF10Open positions

88

Time to hire ~31 days (indicative)

WF11Temp / agency share

7.0%

241,084 agency hours, cost in Subcontracting

WF12Labour cost trend

Actual vs budget, per week

Source: SAP S/4HANA · Journal entry items · GLAccount (payroll GLs, mapping with Compass [?]), PostingDate, AmountInTransactionCurrency; budget = plan version

WF13Labour % of revenue trend

Actual vs budget, labour cost / revenue

Source: SAP S/4HANA · GLAccount (payroll and revenue GLs, mapping with Compass [?]), PostingDate · formula labour / revenue

WF14Scheduled vs actual hours

Total variance +1.2%: Hours slightly above roster

DivisionVarianceStatus
Eurest+1.2%Slightly over
InnoClean+1.0%Slightly over
Camille+1.2%Slightly over
Vending+3.3%Over schedule

Source: Quinyx · TimePunch · hours, scheduleId, restId, shiftCategoryName · Shift beginDateTime/endDateTime [?]; variance = (actual - scheduled) / scheduled; scheduled hours are a demo model

WF15Overtime per site (top 15)

Overtime % of hours worked

Offices Diekirch

Patient and staff catering Ettelbruck

Restaurant Kirchberg Nord

Machine park public sites

Cantine Ettelbruck

Canteen Walferdange

Care home Grevenmacher

Offices Strassen

Restaurant Cloche d'Or

Kantine Grevenmacher

Campus Belval

Offices and data centre Leudelange

Restaurant Leudelange

Maison relais Differdange

Medical centre Esch

4.9%

4.8%

4.7%

4.7%

4.7%

4.3%

4.3%

4.3%

4.2%

4.1%

4.1%

4.1%

4.1%

4.1%

4.0%

Source: Quinyx · TimePunch · hours, shiftCategoryName Overtime [?], restId; site split is a demo model, total ties to anchor

WF16Absence

Sickness % of hours paid, seasonal pattern (school holidays, winter flu)

Source: SuccessFactors · EmployeeTime · userId, startDate, endDate, timeType [?], quantityInDays · sick timeType code is customer specific [?]

WF17Absence duration and divisions

Causes are not available in the source fields, so sick hours are split by duration (demo split)

DivisionSickness %Previous
Eurest5.8%5.4%
InnoClean7.7%7.1%
Camille7.2%6.6%
Vending6.0%5.5%

Source: SuccessFactors · EmployeeTime · quantityInDays, timeType [?]; duration split derived (demo)

WF18Headcount movements

Hires, leavers and net change per month (closed months)

MonthHiresLeaversNet
Sep 202612359+64
Aug 2026359-56
Jul 20263853-15
Jun 202610446+58
May 2026444-40
Apr 20262646-20
Mar 20265244+8
Feb 20264841+7
Jan 20266644+22
Dec 20251539-24
Nov 20252441-17
Oct 20255641+15

Source: SuccessFactors · EmpJob · event [?], eventReason [?] (HIRE, TERM), startDate · EmpEmployment endDate; net from anchor headcount, split is a demo model

WF19Contract type mix and part-time ratio

Part-time ratio 52% (derived from FTE / headcount)

  • CDI (permanent)86.1%
  • CDD (fixed term)8.9%
  • Student5.1%
Eurest part-time 44%InnoClean part-time 48%Camille part-time 50%Vending part-time 44%

Source: SuccessFactors · EmpJob · employmentType / contractType [?], fte, standardHours; own staff only (agency not in EmpJob [?]); mix is a demo assumption

WF20Productivity

Meals from Eurest covers; m2 uses a demo assumption of EUR 0.62 revenue per m2 cleaned

Eurest: meals per labour hour (covers)

7.1 now, target 7.5

InnoClean: m2 per hour (demo)

66 now, target 70

Source: Eurest covers (Simphony [?]) / Quinyx TimePunch hours; meals per hour = covers / hours worked; m2 per hour = revenue / EUR 0.62 / hours worked (demo)

WF21Luxembourg wage indexation

Automatic index tranche, applied to all wages

Index tranche of 2.5% (1 Oct 2025, sample): about EUR 2.2M per year labour cost

On EUR 89.4M labour cost over the last 12 months this is 1.2% of revenue and 21% of EBITDA for Group. Each further 1% of indexation adds roughly EUR 872.6K per year (assumption). Contracts with an indexation clause recover this only with a lag, so margin dips between the tranche and the next price adjustment. The timing of the next tranche follows the STATEC consumer price index and is not forecast here [?].

Source: SuccessFactors · EmpJob · fte, standardHours / SAP S/4HANA GLAccount (payroll GLs, mapping with Compass [?]); index tranche from the sample anchor (finance.ts WAGE_STEP)

WF22Sites with highest labour % vs target

Target labour % is the level that delivers the contract margin target (labour % + margin target - actual margin)

SiteLabour %GapStatus
Executive Dining Kirchberg38.5%+1.0 ptAbove target
Micro markets campuses19.4%+1.0 ptAbove target
Restaurant Contern40.2%+0.8 ptSlightly above
Offices Bertrange54.0%+0.8 ptSlightly above
Kantine Grevenmacher46.1%+0.1 ptSlightly above
Cantine Ettelbruck48.0%+0.1 ptSlightly above
Cantine Wiltz49.2%+0.1 ptSlightly above
Canteen Walferdange45.9%+0.1 ptSlightly above
Offices and data centre Leudelange57.1%+0.0 ptSlightly above
Campus Belval56.3%+0.0 ptSlightly above
Cantine Esch46.4%+0.0 ptSlightly above
Offices Luxembourg HQ56.5%+0.0 ptSlightly above
Restaurant Alpenhof41.0%+0.0 ptSlightly above
Medical centre Esch57.7%+0.0 ptSlightly above
Cantine Mamer46.0%+0.0 ptSlightly above

Source: SAP S/4HANA · CostCenter, GLAccount (payroll GLs, mapping with Compass [?]) · Quinyx TimePunch costCentre; marginTarget from contract master [?]

Demo with sample data. Not company figures.