Time Tracking & Costs
Time Tracking & Costs
NexusRMS provides comprehensive cost tracking for every repair, broken down into labour, parts, and external vendor charges. The time tracking system lets technicians log hours directly from the repair detail page, while the cost summary card gives managers a clear view of total repair expenses.
Cost structure
Every repair's total cost is calculated from three components:
| Field | Source | Description |
|---|---|---|
| labor_cost | Manual entry or hours × rate | Cost of internal technician time |
| parts_cost | Auto-sum of RepairPart entries | Total cost of all parts used (read-only, managed by PartsService) |
| external_cost | Manual entry | Charges from external repair vendors for outsourced work |
The formula is: total_cost = labor_cost + parts_cost + external_cost. This recalculation runs automatically whenever parts are added or removed, and can be triggered manually when updating labour or external costs.
Labour tracking fields
The Repair model includes the following labour-related fields:
- estimated_hours — the projected hours for the repair, set during diagnosis or approval
- actual_hours — running total of hours worked, updated as time logs accumulate
- labor_cost — total labour expense, either entered manually or calculated from actual_hours × hourly rate
The edit page displays estimated versus actual hours side by side, making it easy to spot repairs running over budget.
Time tracking with the useRepair composable
The Vue composable useRepair provides two methods for live time tracking:
- startTimeTracking(activityType, notes) — begins a new time log entry with the specified activity type and optional notes. The timer runs until explicitly stopped.
- stopTimeTracking(logId, notes) — ends the active time log, records the duration, and reloads the repair to reflect updated hours and costs.
Activity types categorise the work being performed (for example, diagnosis, repair, testing, or cleaning), giving you a breakdown of where technician time is spent.
Time logs display
Time entries appear in a timeline format on the repair detail page. Each entry shows:
- User name — the technician who logged the time
- Activity type — the category of work performed
- Duration — time recorded in minutes
- Billable chip — a visual indicator of whether the time is billable to the client
- Notes — any context the technician added when starting or stopping the timer
Below the timeline, a summary row shows Total Hours and Labour Cost for the repair.
Overtime detection
The RepairService::detectOvertime method monitors labour hours against estimates. It accepts a repair and a threshold percentage (defaulting to 20%). When actual_hours exceeds the estimated_hours by more than the threshold, the method returns true and an alert is triggered. For example, with a 10-hour estimate and a 20% threshold, an alert fires when actual hours surpass 12 hours.
Cost summary card
The cost summary card appears on both the repair detail and edit pages. It displays:
- Labour Cost — editable on the edit page; shows the current value on the detail page
- Parts Cost — read-only, automatically calculated from RepairPart entries
- External Cost — editable field for vendor charges
- A visual divider separating individual costs from the total
- Total Cost — displayed in bold with the primary colour, summing all three components
Charged amount
When a repair is billable to a client, you can set the charged_amount field to override the total cost for invoicing purposes. This allows you to apply margins, discounts, or flat-rate charges that differ from the internal cost. If left empty, the total_cost is used as the default billing amount. The chargeback_invoice_id field tracks the generated invoice for audit purposes.
Edit page cost fields
The repair edit page includes the following cost-related inputs:
- Labour Hours — numeric field for total hours worked
- Hourly Rate — rate used to calculate labour cost from hours
- Estimated vs Actual — a comparison display showing estimated_hours alongside actual_hours with a variance indicator
- External Cost — numeric field for vendor charges
Maintenance log cost tracking
For routine maintenance (as opposed to full repair tickets), the MaintenanceLog model tracks costs similarly. It records labor_hours, labor_cost, parts_cost, and auto-calculates total_cost as labor_cost + parts_cost on every save. The getLaborRatePerHour() method returns the effective hourly rate by dividing labor_cost by labor_hours.
Tips and best practices
- Always set estimated hours during diagnosis — this enables overtime detection and helps managers identify repairs that are taking longer than expected.
- Use the live timer for accurate tracking — starting and stopping the timer via useRepair captures exact durations rather than relying on manual estimates after the fact.
- Review the estimated vs actual comparison — consistent overruns on a particular equipment type or repair category may indicate a need to revise estimates or address underlying equipment issues.
- Set charged amounts before invoicing — ensure the charged_amount reflects any agreed pricing with the client, especially for warranty or contract repairs where internal costs differ from billing.
- Track maintenance costs alongside repairs — combining MaintenanceLog and Repair cost data gives a complete picture of the total cost of ownership for each equipment item.
Next steps
Continue to the next article to learn about External Vendors & Warranty, where you can manage outsourced repairs, RMA documents, and warranty claim tracking.
Was this article helpful?