NextFSM

Services

Configure your billable service catalog for work orders and invoices

The Services module defines the billable services your organization offers. When a work order is completed, the billing system automatically calculates invoice lines based on these services.

How Billing Works

When a work order is finished, the system automatically calculates charges based on:

  1. Time tracking - When technician arrived and left
  2. Parts used - Materials consumed during the job
  3. Work order properties - Priority, source, events
  4. Contract settings - Custom pricing, included services, and enabled/disabled services

Labor Services

Labor is calculated from on_site_at to work_complete_at timestamps. Time is classified into four types based on billing hours and holidays:

Regular Hours (LABOR_REGULAR)

Work performed during billing hours on effective days.

Example: Billing hours 09:00-18:00, Mon-Fri

  • Technician works 10:00-12:00 on Tuesday
  • Result: 2 hours @ €75/hour = €150

Overtime (LABOR_OVERTIME)

Work performed outside billing hours on effective days.

Example: Billing hours 09:00-18:00

  • Technician works 18:00-20:00 on Wednesday
  • Result: 2 hours @ €110/hour = €220

Weekend (LABOR_WEEKEND)

Work performed on days outside effective days (typically weekends).

Example: Effective days Mon-Fri

  • Technician works 10:00-14:00 on Saturday
  • Result: 4 hours @ €150/hour = €600

Holiday Overtime (LABOR_HOLIDAY_OVERTIME)

Work performed on public holidays outside billing hours.

Example: Christmas Day, outside 09:00-18:00

  • Technician works 20:00-22:00
  • Result: 2 hours @ €250/hour = €500

Time rounding: All labor is rounded UP to 15-minute increments. Even 1 minute of work = 0.25 hours.

Travel Services

Travel Time (TRAVEL_TIME)

Calculated from travel_start_at to on_site_at timestamps.

Example:

  • Technician starts driving at 09:00, arrives at 09:45
  • Travel time: 45 minutes = 0.75 hours
  • Result: 0.75 hours @ €40/hour = €30

Parts Services

Parts used during a work order are billed with a markup percentage.

Standard Markup (PARTS_STANDARD)

Applied to parts on regular work orders.

Example: 20% markup configured

  • Part cost: €100
  • Markup: €100 × 1.20 = €120
  • Result: €120 per unit

Emergency Markup (PARTS_EMERGENCY)

Applied to parts on P1 (emergency) priority work orders.

Example: 50% markup configured

  • Part cost: €100
  • Markup: €100 × 1.50 = €150
  • Result: €150 per unit

Note: If contract has parts_included = true, parts are not billed.

Fee Services

Fees are flat charges triggered by specific conditions:

Call-Out Fee (FEE_CALLOUT)

Charged on every work order visit.

Example: €50 per visit

Emergency Fee (FEE_EMERGENCY)

Additional charge for P1 priority work orders.

Trigger: Work order priority = P1 Example: €200 surcharge

After-Hours Fee (FEE_AFTER_HOURS)

Charged when work order is created outside business hours.

Trigger: Work order created before/after billing hours Example: €100 per visit

Diagnostic Fee (FEE_DIAGNOSTIC)

Charged for work orders submitted via customer portal.

Trigger: Work order source = 'portal' Example: €80 per visit

Cancellation Fee (FEE_CANCELLATION)

Charged when customer cancels after technician is dispatched.

Trigger: Work order cancelled with fault_party = 'customer' Example: €150

No Access Fee (FEE_NO_ACCESS)

Charged when technician cannot access the location.

Trigger: Work order rescheduled due to 'customer_not_available' or 'site_not_accessible' Example: €75 per occurrence (can be multiple if rescheduled multiple times)

Monthly Flat Fee (FEE_MONTHLY_FLAT)

Fixed monthly charge for all-inclusive contracts.

Example: €500/month regardless of work orders

Device Services

Device Management Fee (DEVICE_MONTHLY)

Monthly recurring fee per active device under contract.

Trigger: Counted monthly for devices with active status linked to contract Example: 10 active devices × €10/device = €100/month

Service Availability

Services can be controlled at two levels:

Organization Level

Toggle services on/off in Settings > Services. Disabled services:

  • Are never billed
  • Do not appear in contract service lists
  • Cannot be added to any contract

Enable a service at org level first before you can use it in contracts.

Contract Level

Add or remove services from individual contracts. Only services enabled at org level appear in the list. This allows you to:

  • Exclude certain fees for specific customers
  • Include/exclude parts billing per contract
  • Customize which labor types apply

Price Resolution

When calculating charges, the system uses this hierarchy:

  1. Contract price - If work order has a contract AND service is added to that contract with a custom price
  2. Catalog default - Organization's default price from service catalog

This allows different pricing per customer while maintaining standard defaults.

Custom Services via Products

For one-off or specialized services not in the standard catalog, create products with the Service type:

  1. Go to Inventory > Products
  2. Click Add Product
  3. Set the product type to Service
  4. Enter name, description, and price
  5. Save the product

Service-type products can be manually added to work orders. They appear on invoices but don't affect inventory counts.

Use this for:

  • Custom quotes or special pricing
  • One-time services not worth adding to the catalog
  • Customer-specific service packages
  • Ad-hoc charges that vary per job

Editing Services

Click any service to edit:

  • Name - Display name shown on invoices
  • Default Price - Standard rate (can be overridden per contract)
  • Integration Mapping - Link to external systems (e.g., Odoo products)

Category and measurement type are fixed after creation.

Contract Services

Link services to contracts with custom pricing:

  1. Open a contract
  2. Go to the Services tab
  3. Toggle services on/off for this contract
  4. Click the price to edit and set contract-specific rates
  5. Contract prices override the default catalog price

Example: Customer has negotiated rates

  • LABOR_REGULAR: Catalog €75/hour → Contract €65/hour
  • FEE_CALLOUT: Catalog €50 → Disabled for this contract (toggle off)
  • PARTS_STANDARD: Catalog 20% markup → Contract 15% markup

Best Practices

  1. Set realistic defaults - Most customers will use catalog prices
  2. Disable unused services - Simplifies billing
  3. Use contract pricing - For customers with negotiated rates
  4. Review fee triggers - Ensure fees match your business rules
  5. Monitor parts markup - Balance profit vs. competitiveness