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 pt47.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 pt3.0%
104,623 overtime hours
WF8Sickness / absence %
Up0.6 pt6.7%
246,008 sick hours
WF9Turnover (annualised)
Up0.4 pt23.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
| Division | Variance | Status |
|---|---|---|
| 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)
| Division | Sickness % | Previous |
|---|---|---|
| Eurest | 5.8% | 5.4% |
| InnoClean | 7.7% | 7.1% |
| Camille | 7.2% | 6.6% |
| Vending | 6.0% | 5.5% |
Source: SuccessFactors · EmployeeTime · quantityInDays, timeType [?]; duration split derived (demo)
WF18Headcount movements
Hires, leavers and net change per month (closed months)
| Month | Hires | Leavers | Net |
|---|---|---|---|
| Sep 2026 | 123 | 59 | +64 |
| Aug 2026 | 3 | 59 | -56 |
| Jul 2026 | 38 | 53 | -15 |
| Jun 2026 | 104 | 46 | +58 |
| May 2026 | 4 | 44 | -40 |
| Apr 2026 | 26 | 46 | -20 |
| Mar 2026 | 52 | 44 | +8 |
| Feb 2026 | 48 | 41 | +7 |
| Jan 2026 | 66 | 44 | +22 |
| Dec 2025 | 15 | 39 | -24 |
| Nov 2025 | 24 | 41 | -17 |
| Oct 2025 | 56 | 41 | +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%
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
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)
| Site | Labour % | Gap | Status |
|---|---|---|---|
| Executive Dining Kirchberg | 38.5% | +1.0 pt | Above target |
| Micro markets campuses | 19.4% | +1.0 pt | Above target |
| Restaurant Contern | 40.2% | +0.8 pt | Slightly above |
| Offices Bertrange | 54.0% | +0.8 pt | Slightly above |
| Kantine Grevenmacher | 46.1% | +0.1 pt | Slightly above |
| Cantine Ettelbruck | 48.0% | +0.1 pt | Slightly above |
| Cantine Wiltz | 49.2% | +0.1 pt | Slightly above |
| Canteen Walferdange | 45.9% | +0.1 pt | Slightly above |
| Offices and data centre Leudelange | 57.1% | +0.0 pt | Slightly above |
| Campus Belval | 56.3% | +0.0 pt | Slightly above |
| Cantine Esch | 46.4% | +0.0 pt | Slightly above |
| Offices Luxembourg HQ | 56.5% | +0.0 pt | Slightly above |
| Restaurant Alpenhof | 41.0% | +0.0 pt | Slightly above |
| Medical centre Esch | 57.7% | +0.0 pt | Slightly above |
| Cantine Mamer | 46.0% | +0.0 pt | Slightly 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.