# Work Order Gross Profit

NexWave can calculate Gross Profit (GP) on Work Orders by comparing the sale value from the linked Sales Order against actual manufacturing costs (materials and labour). This gives you visibility into manufacturing margins as production progresses, without waiting for final accounting.

## How It Works

When a Work Order linked to a Sales Order is submitted, NexWave calculates:

**Gross Profit = Sale Amount - Material Cost - Labour Cost**

The GP starts with planned costs from the BOM and updates progressively as manufacturing transactions are completed:


1. **Work Order submitted** - GP calculated using planned material costs (from BOM) and planned labour costs (from operations)
2. **Stock Entries submitted** - Material cost updates to actual values from stock movements
3. **Job Cards submitted** - Labour cost updates to actual values based on time logged and workstation rates

The GP also flows up to the linked Sales Order, giving you a consolidated manufacturing margin view across all Work Orders for that order.

## Enabling the Feature

The feature is off by default. To enable it:


1. Go to **Manufacturing Settings**
2. Expand the **Work Order Gross Profit** section
3. Tick **Enable Work Order Gross Profit Calculation**
4. Save

 ![](https://docs.nexwaveapp.com/api/files.get?sig=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJrZXkiOiJ1cGxvYWRzL2YxMTg5ZTEzLTdlMTQtNDA1ZC04MDI1LWMxZmI0Y2Y2MTg0ZC85ZDU4ZjhmOS01MWEzLTQ3YjEtOTgwYS04ODdlMWE3Njc5ZWUvU2NyZWVuc2hvdCAyMDI2LTAzLTI3IGF0IDEwLjU2LjM0LnBuZyIsInR5cGUiOiJhdHRhY2htZW50IiwiaWF0IjoxNzkyNjIxODAwLCJleHAiOjE3OTI3MDgyMDB9.A0Z9wNiK-gGCn2-4Gd7EBligMNDyGLVMEqD_2JEM7rY " =2291x853")

Once enabled, GP will be calculated automatically on all new Work Order submissions. Existing submitted Work Orders are not affected until they are recalculated manually.

## Work Order GP Fields

When a Work Order is submitted with GP enabled, a **Gross Profit** section appears showing:

| Field | Description |
|-------|-------------|
| **Sale Amount** | Total sale value from the linked Sales Order item, in company currency |
| **Raw Material Cost** | Cost of materials consumed (or planned if no stock movements yet) |
| **Labour Cost** | Blended labour cost from operations (actual where Job Cards exist, planned where they don't) |
| **Gross Profit** | Sale Amount minus total costs |
| **Gross Profit %** | GP as a percentage of Sale Amount |
| **Cost Basis** | Indicates the source of cost data (see below) |


 ![](https://docs.nexwaveapp.com/api/files.get?sig=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJrZXkiOiJ1cGxvYWRzL2YxMTg5ZTEzLTdlMTQtNDA1ZC04MDI1LWMxZmI0Y2Y2MTg0ZC8xMjY4YjdlYi03ODRiLTQxMDEtYjllNS03ODQxNmJiNDliNTQvU2NyZWVuc2hvdCAyMDI2LTAzLTI3IGF0IDEwLjU4LjM1LnBuZyIsInR5cGUiOiJhdHRhY2htZW50IiwiaWF0IjoxNzkyNjIxODAwLCJleHAiOjE3OTI3MDgyMDB9.eVjv9Vi0DB0uBzE5b6zsQle86HP7bTLjxL5RMIH7MR4 " =2291x967")

### Cost Basis

The **Cost Basis** field tells you how reliable the GP figure is:

* **Planned** - All costs come from the BOM and planned operation costs. No actual manufacturing data yet.
* **Partial** - Some costs are actual (e.g., materials have been transferred to WIP but not yet consumed, or some Job Cards are complete but not all).
* **Actual** - All material and labour costs come from actual stock movements and completed Job Cards.

### How Material Costs Progress

Material costs use a tiered approach based on available Stock Entry data:


1. **Actual** (highest priority) - From "Manufacture" or "Material Consumption for Manufacture" Stock Entries. These represent materials actually consumed in production.
2. **Partial** - From "Material Transfer for Manufacture" Stock Entries. Materials have been moved to WIP but not yet consumed.
3. **Planned** - No Stock Entry data available. Uses the BOM required items and their rates.

### How Labour Costs are Calculated

Labour cost is calculated per operation on the Work Order:

* **Operations with Job Cards** (actual time logged): Cost = Workstation hourly rate x actual time. The system uses the workstation's current hourly rate, not the rate frozen on the Work Order, so rate updates are reflected immediately.
* **Operations without Job Cards**: Uses the planned operating cost from the BOM.
* **Additional and corrective operation costs** are always included.

## Sales Order GP Fields

When Work Orders linked to a Sales Order have GP calculated, the Sales Order shows a **Manufacturing Gross Profit** section with aggregated figures:

| Field | Description |
|-------|-------------|
| **Material Cost** | Total material costs across all linked Work Orders |
| **Labour Cost** | Total labour costs across all linked Work Orders |
| **Gross Profit** | Total manufacturing GP |
| **GP %** | Overall GP percentage |


 ![](https://docs.nexwaveapp.com/api/files.get?sig=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJrZXkiOiJ1cGxvYWRzL2YxMTg5ZTEzLTdlMTQtNDA1ZC04MDI1LWMxZmI0Y2Y2MTg0ZC9iYzEzY2FkNi1lMWE0LTRkZWUtYWU4Ni0yNmM1MmRiOGUwYjQvU2NyZWVuc2hvdCAyMDI2LTAzLTI3IGF0IDEwLjU5LjMxLnBuZyIsInR5cGUiOiJhdHRhY2htZW50IiwiaWF0IjoxNzkyNjIxODAwLCJleHAiOjE3OTI3MDgyMDB9.SrwaumINYoeWzfatof1KNsDm3-KmSVRjz6CaURtCSgM " =1484x819")

Each Sales Order Item also shows per-line manufacturing GP fields (Manufacturing Material Cost, Manufacturing Labour Cost, Manufacturing GP, Manufacturing GP%).

The Sales Order GP updates automatically whenever a linked Work Order's GP changes (on WO submit, cancel, or when Stock Entries/Job Cards trigger a recalculation).

## Recalculating GP Manually

For submitted Work Orders, a **Recalculate GP** button is available on the form. Use this when:

* Workstation hourly rates have been updated after the Work Order was created
* You want to refresh the GP after manual adjustments
* Stock Entry or Job Card events were processed while the feature was temporarily disabled

 ![](https://docs.nexwaveapp.com/api/files.get?sig=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJrZXkiOiJ1cGxvYWRzL2YxMTg5ZTEzLTdlMTQtNDA1ZC04MDI1LWMxZmI0Y2Y2MTg0ZC9iMTJiMDcxOC1hY2JlLTQ1OGQtYjg1Ny1iZGU1MzhhYjQ5M2UvU2NyZWVuc2hvdCAyMDI2LTAzLTI3IGF0IDExLjAwLjE5LnBuZyIsInR5cGUiOiJhdHRhY2htZW50IiwiaWF0IjoxNzkyNjIxODAwLCJleHAiOjE3OTI3MDgyMDB9.KA15uYnRctZaXSrGL3ylxIFeTEOXalZbCgId_l3_TD4 " =2282x819")

## Cancellation Behaviour

When a Work Order is cancelled, all GP fields are cleared to zero and the linked Sales Order GP is recalculated. This cleanup runs regardless of whether the feature toggle is currently enabled, preventing stale data from remaining on documents.

## Prerequisites

For GP to be calculated on a Work Order, the following must be true:

* The feature toggle is enabled in Manufacturing Settings
* The Work Order is linked to a Sales Order (has a `sales_order` and `sales_order_item`)
* The linked Sales Order Item has a non-zero `stock_qty` (needed for UOM-safe rate calculation)

Work Orders without a linked Sales Order (e.g., make-to-stock production) will not have GP calculated.

## Limitations

* **No retrospective calculation**: Enabling the feature does not calculate GP on Work Orders that were already submitted. Use the Recalculate GP button on individual Work Orders, or resubmit them.
* **Sub-assembly Work Orders are excluded**: Work Orders created for sub-assemblies (via Production Plan) are not included in the Sales Order GP aggregation to avoid double-counting material costs.
* **Single Sales Order link**: GP calculation uses the Work Order's `sales_order_item` field. If a Work Order is not linked to a specific SO item (e.g., created manually without the link), GP cannot be determined.
* **Company currency only**: All GP amounts are calculated and displayed in the company's default currency using `base_amount` from the Sales Order.
* **No partial Stock Entry attribution**: The material cost tier is determined by the type of Stock Entry that exists, not by the quantity transferred. If only half the materials have been transferred, the system uses the actual cost of what was transferred (not a blend of actual and planned).
* **Workstation rate changes are not versioned**: The labour cost calculation always uses the workstation's current hourly rate. If rates change, recalculating GP will produce different results from the original calculation. Historical rates are not preserved.
* **Sales Order GP does not account for non-manufacturing costs**: The Manufacturing Gross Profit on the Sales Order only considers costs from Work Orders (materials and labour). It does not include delivery, overhead, or other costs.