Workflow: Equipment Service — From Request to Invoice
Modules involved: Assets · Tickets · Tasks · Timesheets · Warehouse · Expenses · Invoices · Contracts · Appointly · Knowledge Base
Who uses it: Service Dispatcher, Technician, Service Manager, Finance, Client (portal)
Typical duration: Hours – days (single intervention); weeks (complex service / parts order)
Overview
The equipment service workflow covers the full cycle of a technical intervention: from the client reporting a malfunction to issuing the invoice with labor, parts, and travel expenses. It is used by companies that sell and service equipment (IT, medical, HVAC, industrial, home appliances, telecommunications). CRMConnect centralizes requests through the helpdesk (Tickets), schedules interventions (Appointly or Tasks), tracks parts consumption from stock (Warehouse — Goods Issue), logs technician hours (Timesheets), and generates the final invoice with all cost components.
Key difference from standard service: The equipment record in Assets serves as the central pivot of the workflow — warranty verification, history of previous interventions, and the SLA contract are all anchored to the equipment record, not just the client record.
Flow diagram
[CLIENT REPORTS MALFUNCTION]
│ channel: email (auto pipe) / client portal / phone / WhatsApp
│ → Ticket created automatically (email pipe) or manually (dispatcher)
│ → Ticket status: Open
│
↓
[EQUIPMENT IDENTIFICATION AND CONTRACT CHECK]
│ Ticket → linked to Asset (faulty equipment)
│ Asset → fields: serial, model, manufacturer, purchase date,
│ warranty expiry, installation location
│ SLA Contract → checked: type, response terms, resolution terms
│
├── Under warranty → free intervention
│ │ Ticket marked "Warranty" (tag or custom field)
│
├── Active maintenance contract → reduced rate or included in subscription
│ │ Ticket marked "SLA — [Contract type]"
│
└── No warranty, no contract → standard rate
│ Client notified of estimated cost before intervention
│
↓
[SCHEDULE INTERVENTION]
│
├── Appointly: schedule with date + time, assigned technician,
│ client location, estimated duration
│ → automatic notification to client + technician
│
└── Task: created on Ticket or directly, assigned to technician,
with due date = planned intervention date
│
↓
[INTERVENTION — COST COMPONENTS]
│
├── [LABOR]
│ │ Timesheet: start / stop time or manual duration
│ │ linked to Ticket + Task
│ │ Staff = technician, Billable = Yes
│ │ Note: describes work performed (appears on invoice)
│
├── [PARTS CONSUMED]
│ │ Warehouse → Goods Issue (Stock outflow)
│ │ parts from stock automatically decremented
│ │ linked to Ticket or Client
│ │ document: Consumption note / Internal delivery note
│
└── [TRAVEL / CONSUMABLES EXPENSES]
│ Expense: amount, category (travel, consumables),
│ attached to Ticket or Client, Billable = Yes
│
↓
[DIAGNOSIS AND RESOLUTION]
│
├── Resolved at first intervention → continue to Documentation
│
├── Parts required → Ticket status: "Awaiting Parts"
│ │ Parts purchase order (Purchase → RFQ → PO)
│ │ Task: "Track parts delivery" with deadline
│ │ Upon parts receipt → reschedule intervention (Appointly/Task)
│
└── Escalation required → Ticket transferred to level 2 / manufacturer
│ Internal task: "Escalation to manufacturer — [Case number]"
│
↓
[DOCUMENT RESOLUTION]
│ Ticket → status: Resolved
│ Final ticket reply: solution applied, parts replaced,
│ client recommendations (e.g., equipment replacement, periodic service)
│ If frequent issue → article created in Knowledge Base
│ Asset → "Intervention history" field updated (custom field or note)
│
↓
[CLIENT APPROVAL (optional)]
│ Client confirms resolution via portal or email
│ Ticket → status: Closed
│ Satisfaction rating (if feedback module is active)
│
↓
[INVOICING]
│ Invoice created:
│ ├── Labor line: hours × rate/h
│ ├── Parts lines: each part consumed (from Goods Issue)
│ └── Travel line: amount from Expense
│ eFactura if B2B client with VAT number
│
[SERVICE COMPLETE ✓ · CLIENT SATISFIED ✓]
Step by step
1. Reporting the malfunction — Creating a Ticket
Where: /admin/tickets → Add Ticket (manual) or automatically via email pipe
Input channels and what happens:
| Channel | Mechanism | Dispatcher action |
|---|---|---|
| Client email | Email pipe → ticket created automatically with email subject and body | Verify data, fill in missing fields |
| Client portal | Client fills in the form from the CRMConnect portal | Ticket appears directly in queue |
| Phone | Dispatcher creates ticket manually | Fill in all fields; send email confirmation to client |
| Manual or via integration | Ticket created manually; copy description from WhatsApp |
Key service ticket fields:
| Field | Value / Notes |
|---|---|
| Subject | Short and descriptive: "Printer Malfunction — SN: X123" |
| Client | Link to client record |
| Priority | Low / Medium / High / Urgent (based on SLA and impact) |
| Department / Category | "Hardware Service", "Software Service", "Preventive Maintenance" |
| Assigned to | Dispatcher or directly assigned technician |
| Custom field: Equipment serial number | Unique equipment identifier |
| Custom field: Equipment model | Auto-populated if linked to Asset |
| Custom field: Warranty type | "Commercial Warranty" / "SLA Contract" / "No coverage" |
| Custom field: Intervention location | Client address where equipment is installed |
Ticket statuses:
| Status | Description | Set by |
|---|---|---|
| Open | New, unassigned | Automatic at creation |
| In Progress | Assigned to technician, in progress | Dispatcher / Technician |
| Awaiting Parts | Waiting for spare parts | Dispatcher |
| Escalated | Transferred to higher level / manufacturer | Dispatcher |
| Resolved | Intervention performed, solution applied | Technician |
| Closed | Confirmed by client or closed after 48h without response | Automatic / Dispatcher |
2. Equipment identification — Assets module
Where: /admin/assets — equipment record
What must be pre-configured on each sold equipment item:
| Asset field | Description |
|---|---|
| Name / Title | Equipment type (e.g., "HP M428 Laser Printer") |
| Serial number | Manufacturer's unique identifier |
| Client | The client where it is installed |
| Location | Client's address or department |
| Purchase date | When it was bought (from our company) |
| Warranty expiry | Date until which it is under warranty |
| Purchase value | Sale price (for calculating service vs. replacement value) |
| Status | Active / Faulty / Returned / Written off |
| Custom field: Periodic service | Date of next scheduled service |
| Custom field: SLA Contract | Maintenance contract ID |
Ticket → Asset link:
From the ticket, the "Asset" field links the request to the specific equipment. All previous interventions on that equipment are visible in the ticket history filtered by asset. This allows the technician to see:
- Which parts were previously replaced
- How many interventions the equipment has had recently
- Whether the equipment is a "repeater" (recurring issues → replacement recommendation)
3. Warranty and SLA contract verification
Warranty check:
| Situation | Decision | Action in CRM |
|---|---|---|
| Active warranty (expiry date > today) | Free intervention | "Warranty" tag on ticket; 0 rate on invoice |
| Warranty expired < 30 days | Case-by-case review (goodwill) | Manager decision; "Post-warranty" tag |
| Warranty expired | Standard rate | Client informed before intervention |
SLA contract check:
A maintenance contract may include:
| Typical SLA term | Description |
|---|---|
| Response time | E.g., 4h from report (on business days) |
| Resolution time | E.g., 24h or 48h (depending on priority) |
| Included interventions | E.g., 2 interventions/month included in subscription |
| Included parts | E.g., consumables included / parts excluded |
| Geographic coverage | E.g., counties X, Y, Z only |
Practical tip: Configure SLA contracts as "Contracts" in the CRM with an expiry date. Set up an automatic task or reminder 60 days before expiry to contact the client with a renewal offer.
4. Scheduling the intervention
Option A — Appointly (structured scheduling):
Where: /admin/appointly
| Field | Value |
|---|---|
| Service | "Service intervention" / "Preventive maintenance" |
| Staff (technician) | Technician available in the client's area |
| Client | Link to client record |
| Date and time | Chosen slot (also visible to client in portal) |
| Estimated duration | E.g., 2h |
| Note | Problem description from ticket |
Appointly advantages: the client can choose from available slots themselves (self-scheduling), automatic confirmation notifications and reminders.
Option B — Task with due date:
| Field | Value |
|---|---|
| Task title | "Service intervention — [Client] — [Equipment]" |
| Assigned to | Allocated technician |
| Due date | Date and time of intervention |
| Priority | Per SLA (Urgent / High / Normal) |
| Linked to | Service ticket |
| Note | Client address, contact phone number, problem description |
Practical tip: If you have a large team of technicians, use Resource Workload (
/admin/resource_workload) to check availability before allocation. Avoid over-allocating technicians on the same day.
5. Intervention — Logging labor (Timesheets)
Where: Timesheets tab in Ticket or Task, or /admin/staff/timesheets
Technician workflow during intervention:
Timer variant (recommended for on-site work):
- Technician opens the intervention task on phone/laptop
- Starts the timer ▶ — start timestamp recorded
- Performs the intervention
- Upon completion: stops the timer ■ — timesheet created automatically with exact duration
- Adds a descriptive note (what was done, what was replaced)
Manual variant (if no CRM access in the field):
- Technician records hours in the field
- Back at the office, fills in manually: date, start time, stop time, task, note
- Dispatcher or manager reviews and approves
Service timesheet fields:
| Field | Notes |
|---|---|
| Staff | The technician who worked |
| Ticket / Task | The intervention it refers to |
| Date | Day of intervention |
| Hours | Actual duration (calculated automatically if timer) |
| Billable | Yes — labor is invoiced (exception: warranty / included SLA) |
| Note | Describes the work: e.g. "Motherboard replacement, system check, testing" |
Labor rates:
| Rate type | Configuration |
|---|---|
| Standard rate | Set on Staff or on service type |
| Emergency rate (outside business hours) | Configurable % increase |
| SLA included rate | 0 RON (if contract includes labor) |
6. Parts consumed — Warehouse (Goods Issue)
Where: /admin/warehouse → Goods Issue (Stock outflow)
Parts consumption process:
- Technician identifies required parts (from diagnosis)
- If parts are in stock → Goods Issue is created
- Goods Issue: select items, quantities, linked to client/ticket
- Stock decreases automatically upon Goods Issue approval
- Consumed parts are visible on the outflow document
Goods Issue fields:
| Field | Value |
|---|---|
| Items | Parts selected from stock (with code and description) |
| Quantity | Number of units consumed |
| Source warehouse | Spare parts stock |
| Client | The client where the intervention takes place |
| Reference | Service ticket number |
| Date | Day of consumption |
What happens if the part is not in stock:
- Insufficient stock identified (current_stock < required_quantity)
- Dispatcher or technician creates a Purchase Request or directly an RFQ (Request for Quotation)
- Supplier contacted → Quote → Purchase Order → Parts receipt
- Upon receipt → stock updated
- Ticket updated to "Awaiting Parts" during the procurement period
- Upon parts receipt → reschedule intervention
Practical tip: Maintain a minimum stock for frequently used spare parts (consumables, filters, batteries, memory cards, etc.). Configure the minimum level in Warehouse — when stock falls below minimum, an alert appears for replenishment.
7. Travel and consumables expenses
Where: /admin/expenses or directly from ticket
Types of expenses during intervention:
| Expense type | Details |
|---|---|
| Travel (km) | Km driven × rate/km; or lump sum |
| Accommodation | If intervention is in another city |
| Per diem | If technician is traveling for more than 8h |
| Consumables | Materials not tracked as stock (lubricants, cables, connectors) |
| Parking / highway fees | Ancillary travel costs |
Expense fields:
| Field | Notes |
|---|---|
| Amount | Expense value |
| Category | Selected from configured list |
| Date | Day of expense |
| Description | E.g., "Travel to Cluj-Napoca — intervention at [Client]" |
| Attachment | Fiscal receipt, invoice, ticket |
| Billable | Yes (if contract does not include free travel) |
| Linked to Client / Ticket | For grouping on service invoice |
8. Documenting the resolution and Knowledge Base
Where: Replies tab in Ticket + /admin/knowledge_base
Upon resolving the intervention:
- Add final reply to ticket (visible to client in portal):
- What was diagnosed
- What was repaired / replaced
- Post-intervention recommendations
- Change ticket status → Resolved
- If the problem has also occurred on other similar equipment → create article in Knowledge Base
Knowledge Base article — recommended structure:
| Field | Example |
|---|---|
| Title | "HP M428 — Error E3 — Paper pickup roller replacement" |
| Category | "Hardware Service — Printers" |
| Symptom | Description of error message or behavior |
| Cause | Faulty component or incorrect setting |
| Solution | Resolution steps (with images if possible) |
| Required parts | List of parts to replace with code |
| Average resolution time | E.g., 45 minutes |
Practical tip: A well-maintained Knowledge Base reduces resolution time for repetitive interventions and allows junior technicians to resolve frequent issues without escalation.
9. Invoicing the service
Where: /admin/invoices → Add Invoice
Service invoice structure:
Line 1: Technician labor — Intervention [date]
2.5h × 120 RON/h = 300 RON
Line 2: Part: HP LaserJet M428 Motherboard (P/N: RM2-6447)
1 unit × 450 RON = 450 RON
Line 3: Part: Paper pickup roller kit
1 unit × 85 RON = 85 RON
Line 4: Travel — Cluj-Napoca
1 × 80 RON = 80 RON
─────────────────────────────────────────────────────
Subtotal: 915 RON
VAT 19%: 173.85 RON
TOTAL: 1,088.85 RON
Special invoicing situations:
| Situation | Treatment on invoice |
|---|---|
| Equipment under warranty | 0 RON invoice or no invoice; internal invoice for cost tracking |
| SLA — labor included | Labor line with 0 RON; parts invoiced separately |
| SLA — all-inclusive | No invoice per intervention; monthly subscription invoiced |
| Unsuccessful intervention (irreparable equipment) | Diagnosis + travel invoiced; parts returned to stock |
eFactura for B2B clients:
- Mandatory for all B2B invoices issued from 2024
- Automatically transmitted to ANAF if integration is configured
- Client receives invoice through SPV and by email
What is created automatically
| Event | Created automatically |
|---|---|
| Client email received on pipe address | Ticket created with email subject and body; client identified by email |
| Appointly booking confirmed | Email notification to client + technician; event in calendar |
| Timer started on service task | Active Timesheet record, linked to task and ticket |
| Timer stopped | Timesheet with exact duration, task and client filled in automatically |
| Goods Issue approved | Item stock decreases automatically from warehouse |
| Ticket marked Resolved | Email notification to client with documented solution |
| Invoice sent (eFactura active) | XML automatically transmitted to ANAF via SPV |
Points where the workflow can block
| Problem | Probable cause | Solution |
|---|---|---|
| Client cannot be identified when creating ticket | Sender's email not in database | Add alternative email in client record; or create new contact |
| Equipment does not appear in Assets | Not registered at time of sale | Create Asset record retroactively from client record using data from sales invoice |
| SLA not linked to ticket | Contract not associated with client or asset | Verify that the SLA contract ID is filled in the custom field on the Asset |
| Technician forgets to stop the timer | Distractions at end of intervention | Internal rule: dispatcher checks active timers daily; or use manual entry |
| Goods Issue does not reduce stock | Goods Issue is in Draft status (not approved) | Approve the outflow document; check approval workflow in Warehouse Settings |
| Parts not in stock at intervention | Lack of minimum stock system | Configure minimum stock per item; create weekly replenishment report |
| Invoice does not include all lines | Expenses or timesheets not marked Billable | Check the Billable checkbox on each component before generating the invoice |
| Client disputes parts cost | Sale price differs from what was communicated by phone | Send service quote (Sales Order) for approval before ordering parts |
Relevant reports
- Tickets per technician — how many interventions each technician had, average resolution time
- Service timesheets — billable labor hours per period, per client, per equipment
- Assets with frequent interventions — equipment with most tickets → replacement candidates
- Spare parts stock — Warehouse → items below minimum stock, movements in the last month
- SLA contracts expiry — Contracts filtered by expiry date in the next 60 days
- Service revenue — Invoices filtered by "Service" category → monthly trend
- Knowledge Base usage — most accessed articles → documented frequent issues
Modules involved — detailed documentation
- Assets
- Tickets
- Tasks
- Timesheets
- Warehouse
- Expenses
- Invoices
- Contracts
- Appointly
- Knowledge Base
- Clients
Register all equipment as assets linked to the client record — when a service ticket is opened on that equipment, the technician sees full asset history (previous service events, parts replaced, warranty status) without asking the client.
Planned maintenance records (calendar-based) and Work Orders (ad-hoc repairs) are distinct in the system. Maintenance records track scheduled service intervals; work orders track unplanned repairs. Both contribute to total cost-per-asset reports.