Skip to content
العربية

How Project Cost Is Built

Knowing what a project is worth is easy: the contract says 230,000, term by term, and nobody argues about it. Knowing what the project has cost so far is much harder, because cost does not arrive in one place. It arrives as blocks leaving the site store, as a foreman's daily wage sheet, as a subcontractor's certified extract, as a share of the site engineer's salary, as the monthly depreciation of the tower crane, as a fencing invoice from a supplier nobody remembers hiring.

The contracting module's answer is to make every one of those documents deposit its own cost against a term of the project contract at the moment it is committed. The cost figures you read on a contract are therefore not a report that queries the whole database when you open it — they are running totals that each cost document wrote down as it went past. Understanding that one sentence explains almost every question people ask about contracting cost.

Cost is written down, never worked out later

When a cost document is processed, it writes its cost in two places at once, and it is worth knowing what each is for because they answer different questions.

  1. Straight onto the term line. The cost lands immediately in the Actual Cost and Actual Quantity columns of the matching term line — on the project contract, and also on the estimated budget, the executive budget and the term analysis card if the line names those. This is the "how are we doing?" number, and it needs no intermediate document at all. Commit a material issue at 11:00 and the contract's term line is higher at 11:01.
  2. Into a pool of cost still waiting to be absorbed. The same cost is also deposited as a consumable slice tagged with its term, its origin and its value date. Nothing has been "used" yet. Later, a Cost Execution draws slices out of that pool, attributes them to the quantities actually executed, and turns them into a cost per unit. That is the "what did a cubic metre really cost us?" number.

Both are stored tables, rewritten whenever their source document is re-processed. Nothing in this area is calculated live at display time. The practical consequence is worth stating plainly: if you change a cost document after the fact, the figures downstream do not move until that document is processed again. For a Cost Execution that has already been committed, you re-commit the Cost Execution.

Which documents put cost on a project

This is the list people most often get wrong, so here it is in full. Everything below deposits cost against a project contract term; the "Shows up as" column is the name of the origin used throughout the module, and the column it lands in on a Cost Execution.

DocumentWhere it lives in the menuShows up as
Contracting Material Issue, Contracting Material ReturnContracting > CostsMaterials (a return is negative)
Misc Contracting InvoiceContracting > CostsInvoices
Subcontractor ExtractContracting > Contractor ContractingSubcontractors
Daily Labor BookContracting > Contractor ContractingWorkers
Project Contract Fine, Subcontractor FineContracting > project and contractor menusFines
Employee And Equipment Project Cost DistributionContracting > Master FilesSalaries for a person, Depreciations for a machine
Contracting Purchase Request, Contracting Purchase OrderContracting > Costsquantity only — they raise the ordered quantity on the term line and add no money

And from outside the module, against the same term codes:

DocumentModuleShows up as
Journal Entry, Receipt and Payment Vouchers, Credit and Debit NotesAccountingInvoices
Asset DepreciationFixed AssetsDepreciations
Salary DocumentPayrollSalaries
Dues liquidation, provisions recalculation and the vehicle-insurance documentsPayrollstaff cost — salary cost, or insurance cost which the module tracks without a separate breakdown column

That last row is the reason a general ledger entry typed by an accountant can legitimately appear in a project's cost: any of those documents can carry a project contract term code on its lines, and when it does, the contracting cost machinery picks it up exactly like a material issue.

And which documents do not

Four cases surprise people regularly. None of them is a mistake on your part.

  • Contracting Employee And Equipment Issue Invoice (فاتورة صرف عمالة ومعدات) is the invoice you raise for hired-in labour and plant. It books the money — a payable to whoever supplied them — and it contributes nothing to project cost. The document that puts hired staff and machine cost on a project is the Employee And Equipment Project Cost Distribution, described in Employees, Equipment and Their Costs.
  • Equipment Statement Document (مستند بيان معدات) is an accounting document. It produces a journal entry for the machine usage you record on it, and it writes no cost entries at all — nothing reaches the contract's term lines and no Cost Execution can see it. Treat it as the way you book a plant-hire charge to the ledger, not as a way to load cost onto a project.
  • The material issue request moves nothing and costs nothing; only the issue does. Same for the Misc Contracting Request and Misc Contracting Order — in that trio only the invoice books anything.
  • Signing contracts and recording execution book nothing either. A project contract, a subcontract, a quantity execution and a cost execution are all free of ledger effects. On the owner side money reaches the ledger through the extract; on the cost side through the documents listed above.

Cost hangs on a term code

Every cost line carries a Term Code — the code of a line in the project contract's Terms grid. That code is the hook, and it is the single most important field on any cost document.

  • A cost line with no project term code is skipped silently. The document still saves, still produces its journal entry, and still looks perfectly correct; its cost simply never reaches the project. If someone reports that "the cost has disappeared", this is nearly always why. The material and purchasing documents can make the term code mandatory through their document term (توجيه), and on most implementations it should be.
  • Cost lines also carry an Analysis Term Code and a reference to the term analysis card the cost belongs to. That is the finer axis: it lets the cost that actually happened be compared with the cost that was analysed when the term was priced. See Term Analysis Cards for where that code comes from and how the analysed unit cost is built.
  • Many cost documents can additionally carry an executive budget term code and an estimated budget term code, so the same cost also lands against the budget lines.
  • The value date used for a cost slice is the document's value date, not the line's. That matters because a Cost Execution sweeps by value date.
  • There is no phase-level cost. Phases carry quantities, not money. If you need cost per phase, you get it by producing one Cost Execution line per phase, which the Collect Terms button does automatically for terms that have phases.

The catalogue behind ad-hoc cost: Contracting Direct Cost

The Contracting Direct Cost master file, showing type, unit, default purchase price, account and credit side

Most site cost is not a stocked item. A mason's day, an excavator hour, site electricity, a load of ready-mix — these have a price and an account but no warehouse. Contracting Direct Cost (بند تكلفة مقاولات, under Contracting > Master Files) is the catalogue for exactly those things. It is a master file, not a document: it books nothing on its own, it is simply the item you point at when you are spending money on something that has no inventory item.

A direct cost record carries a code, an Arabic and an English name, a group, a default purchase price, a unit, a tax plan and — importantly — its Credit Side, which decides where the other half of the entry goes when this item is invoiced: the supplier's account, a specific account, a specific subsidiary, the current user's subsidiary, or a miscellaneous purchase item. It can optionally point at a stocked item, for the cases where the same thing is sometimes bought and sometimes drawn from stores.

Its Type is the field that gives it meaning, and it has four values that will look familiar from the analysis card:

TypeWhat it is for
Material / مواد خامconsumables and supplied materials
Worker / عمالةlabour, priced per day or per hour
Contractor / مقاول باطنwork bought from someone else
Other / أخريeverything else — plant hire, utilities, permits, transport

Those four are the same four families a term analysis card uses to build up a term's planned cost, which is what makes the catalogue useful in both directions: you analyse a term into direct cost items to arrive at a planned unit cost, then you spend against the very same items and compare.

Where the catalogue is actually consumed:

  • as the Contracting Item column on the misc contracting request, order and invoice and on the employee and equipment invoice;
  • as the item on the four cost grids of a term analysis card, a contracting offer and a contract template;
  • as the source of the default accounting wiring for a misc contracting invoice line.

Three examples, priced the way a real catalogue would be:

CodeArabic nameEnglish nameTypeUnitDefault purchase price
CDC-LAB-01يومية عامل بناءMason day rateWorkerDAY120
CDC-EQP-07ساعة حفارExcavator hourOtherHR300
CDC-MAT-22خرسانة جاهزة C30Ready-mix concrete C30MaterialM3260

Pick CDC-EQP-07 on a misc contracting invoice for 40 hours at 300, and 12,000 of Invoices cost lands on whichever project term the line names.

Where you compare cost with contract value

The contract's Terms grid — the everyday answer

The Project Contract Terms page, where contract value, planned cost and actual cost sit on the same row

Open the project contract, go to its Terms page, and read three columns off one row:

What you wantColumn on the term line
what we sold this term forTotal Price
what we planned it to costTotal Cost (built from the term's cost analysis)
what it has cost so farActual Cost, next to Actual Quantity

Because Actual Cost is maintained by every cost document as it commits, this row is current without anyone producing anything. Alongside it sit the quantity columns that tell you how much of the term each stream has recognised — quantity from execution, from extract, from cost execution, and the quantity already covered by purchase orders.

The same three-way comparison is available on the estimated budget, the executive budget and the term analysis card, so you can measure actual cost against the estimate, against the approved plan, or against the original analysis.

Cost Execution — cost by origin, and a unit cost

A Cost Execution is the closest thing to a cost report: per term it splits the actual cost into materials, invoices, subcontractors, workers, fines, salaries and depreciation, and divides by the quantity executed to give a cost per unit. It shows cost only — there is no revenue column on it.

The final extract — the one screen with both sides

On a project extract marked as Final, the header fills in a small block of cost totals: the actual cost recognised by this extract's quantities, the actual cost recognised across all final extracts on the contract, the total cost ever booked by cost documents, and the difference between the last two — cost that has been incurred but not yet matched to billed work. Those sit next to the extract's own revenue totals, so a final extract is the one place project cost and project revenue appear together on the same screen.

There is no packaged cost-versus-value report

The screens above are the answer. If a customer needs a printed cost report, it is built on their side from the same stored figures — do not go looking for a delivered one.

For a developer building units for sale

If the project's output is sellable real estate, the same cost slices are pushed down onto the individual units. See Pushing Cost onto Real Estate Units.

Worked example: the tower's cost from four sources

Project contract PC-2026-001, Tower A for Al-Fanar Development, 230,000 across four priced terms:

Term codeTermUnitQuantityUnit priceTotal price
1.01Excavation1,00050.0050,000
2.01Reinforced concrete60900.0054,000
3.01Blockwork2,00046.0092,000
3.02Plastering1,00034.0034,000

The blockwork is subcontracted for 80,000 — 2,000 m² at 40 — and our own engineer and crane serve the whole site. By the end of March, 800 m² of blockwork are up, and the cost on term 3.01 has arrived from four completely different directions:

What happenedDocumentShows up asCost
Blocks, sand and consumables drawn from the site store during MarchContracting Material IssueMaterials900
A gang hired for a week to help clear and stackDaily Labor BookWorkers380
The subcontractor's first extract certifying 800 m² at 40Subcontractor ExtractSubcontractors32,000
March share of the site engineer's salaryEmployee And Equipment Project Cost DistributionSalaries900
March share of the tower crane's depreciationEmployee And Equipment Project Cost DistributionDepreciations620
Actual cost on 3.0134,800

Nobody assembled that figure. Each of the four documents wrote its own slice against term 3.01 as it was processed, and the contract's term line simply shows 34,800 in Actual Cost against a Total Price of 92,000 and a planned Total Cost of 82,000 (41.00 per m²).

Two-fifths of the blockwork is done, so the honest reading is 34,800 spent for 800 m² — 43.50 per m² against a planned 41.00. That comparison, and the arithmetic that produces it, is what a Cost Execution exists to make explicit.

Note what is not in the 34,800. The cement we sold to the blockwork subcontractor is not there, because selling material to a subcontractor is a sale, not a cost. Nor is the plant-hire charge we recorded on an equipment statement, because that document only reaches the ledger. And if the site engineer's March salary had been distributed onto a line whose term code was left blank, his 900 would be missing too — with no error to tell you.