CS030 activity codes: why your accounting team keeps fighting your site team
Every euro spent on a building belongs to a slab, a column, a beam — or a labour hour. Activity codes are how finance and the site agree on which one. Skip them, and reconciliation becomes archaeology.
What an activity code actually is
An activity code identifies a physical work item on a project: CS030.04.12 might be "Concrete foundations, level B2, axis 4–8". The numbers vary by client, country and standard (CS030 in Cyprus, COBie in the UK, custom WBS for the rest). The principle doesn't.
Every PO, every GRN, every invoice line carries an activity code. That's how you go from "how much did we spend on this project?" (any ERP can do that) to "how much did we spend on foundations on level B2?" (only construction-aware software can).
L / M / S / P — the second discipline
On top of the activity code, every line gets an expense type:
L— Labour · crews, operators, sub-contractor hoursM— Material · rebar, concrete, finishesS— Supplies · PPE, fasteners, consumablesP— Plant · cranes, formwork, equipment hire
This lets a CFO answer the question every construction CFO asks: "Are we labour-heavy or material-heavy this month vs forecast?" In an ERP without L/M/S/P, the answer is "let me ask the project manager and get back to you on Friday".
Where it usually breaks
Activity codes are mandatory in the accounting system. They are optional on every other system that feeds the accounting system — including the spreadsheet the foreman maintains and the supplier's invoice. That gap is where the fight starts.
- Foreman raises a request without a code. Office assigns one later. They pick wrong. Cost lands in the wrong activity.
- Supplier invoices without itemisation. Office allocates the total to one code. Reality was three.
- Variation orders get a new code mid-month. Half the team uses the old one for two weeks.
By month-end the variance report is full of "miscellaneous" — the most expensive word in construction accounting.
The fix: bake the code into the requisition
If the activity code is mandatory at requisition time — chosen from a dropdown on a phone, not assigned later by an office clerk — every downstream document inherits it for free.
This is how Operis enforces it:
- Foreman opens a requisition. Site is pre-filled. Activity code is required, picked from the project's WBS.
- Expense type (L/M/S/P) is mandatory, also a dropdown.
- The PO inherits both. The GRN inherits both. The invoice match inherits both.
- Reports drill from spend by site → spend by activity → actual POs in two clicks.
"Our finance team went from 4 days of month-end reconciliation to 4 hours. Not because they got faster — because the data was already coded when it landed."
What to ask any procurement tool before you buy
- Can the activity code be made mandatory at requisition time, not after?
- Are L/M/S/P expense types first-class, or are they "tags" that don't roll up cleanly?
- Can I import my project's WBS, not just a flat code list?
- Does a variation order get a code that propagates to in-flight POs?
If the answer to any of those is "we'll add that on the roadmap", you've found generic spend software wearing a construction label.
Book a demo and bring your project's activity code list — we'll import it live and run a requisition end-to-end.