# Dispatch a field service visit

> A process map exported from forks.world (https://forks.world). Author: Brian. Source: https://forks.world/p/cmv0ieaij003qjw06hwqkzohp
> It describes who does what, in what order, and with which technology. Read the plain-language sections first; the JSON at the end is the exact, complete data.

## Summary

- 24 steps across 2 layers
- Persona: Customer, Dispatcher, Field technician, Parts warehouse
- Technology / systems: Field service system

## Pain points

Where this process hurts, worst first:

- **Reschedule the visit around the parts** (Dispatch a field service visit; critical): Missing parts cause a second visit, an unhappy customer and a wasted day
- **Pick the best technician: skills, location, availability** (Dispatch a field service visit; annoying): Dispatchers juggle availability in a spreadsheet

## How to read this file

- A process is made of **layers**. The main layer is the top level; any step of kind `subprocess` opens a detail layer with its own lanes and steps.
- **Lanes** are either persona (people/roles) or technology (systems). Each step belongs to one lane; `using` lists tools a person uses for that step.
- Step kinds: `start`, `task`, `decision` (its arrows carry the answer as a label), `subprocess`, `end`.

## Dispatch a field service visit

Lanes:
- Customer: person / role (id `cust`)
- Dispatcher: person / role (id `disp`)
- Field technician: person / role (id `tech`)
- Field service system: technology / system (id `fsl`)
- Parts warehouse: person / role (id `wh`)

Steps, in the order they run:

1. **Reports a problem that needs a visit** [start; Customer; id `f1`]
   - then Create a work order with the issue and the address
2. **Create a work order with the issue and the address** [task; Dispatcher; id `f2`], using Field service system
   - then Pick the best technician: skills, location, availability
3. **Pick the best technician: skills, location, availability** [task; Dispatcher; id `f3`] ⚠ PAIN POINT (annoying): Dispatchers juggle availability in a spreadsheet
   - then Accepts the job?
4. **Accepts the job?** [decision; Field technician; id `f4`]
   - if "Yes" go to Book a time window with the customer; if "No" go to Reassign to the next technician
5. **Book a time window with the customer** [task; Dispatcher; id `f5`]
   - then Check which parts are needed
6. **Check which parts are needed** [task; Field technician; id `f6`]
   - then Are they all on the truck?
7. **Are they all on the truck?** [decision; Field technician; id `f7`]
   - if "Yes" go to Drive over and confirm arrival; if "No" go to Ship the parts to the technician or the customer
8. **Drive over and confirm arrival** [task; Field technician; id `f9`]
   - then Diagnose and repair
9. **Diagnose and repair** [subprocess; Field technician; id `f10`], opens the detail layer "On site: diagnose and repair"
   - then Fixed?
10. **Fixed?** [decision; Field technician; id `f11`]
   - if "Yes" go to Signs off on the work; if "No" go to Book a follow-up visit or call a specialist
11. **Signs off on the work** [task; Customer; id `f12`]
   - then Close the work order with notes, time and parts
12. **Close the work order with notes, time and parts** [task; Field technician; id `f13`], using Field service system
   - then Send the service report and the invoice
13. **Send the service report and the invoice** [end; Dispatcher; id `f14`]
14. **Book a follow-up visit or call a specialist** [task; Field technician; id `f10a`]
   - then Book a time window with the customer
15. **Ship the parts to the technician or the customer** [task; Parts warehouse; id `f8`]
   - then Reschedule the visit around the parts
16. **Reschedule the visit around the parts** [task; Dispatcher; id `f8b`] ⚠ PAIN POINT (critical): Missing parts cause a second visit, an unhappy customer and a wasted day
   - then Check which parts are needed
17. **Reassign to the next technician** [task; Dispatcher; id `f3a`]
   - then Accepts the job?

```mermaid
flowchart LR
  subgraph l_cust["Customer"]
    n_f1(["Reports a problem that needs a visit"])
    n_f12["Signs off on the work"]
  end
  subgraph l_disp["Dispatcher"]
    n_f2["Create a work order with the issue and the address"]
    n_f3["Pick the best technician: skills, location, availability"]
    n_f3a["Reassign to the next technician"]
    n_f5["Book a time window with the customer"]
    n_f8b["Reschedule the visit around the parts"]
    n_f14(["Send the service report and the invoice"])
  end
  subgraph l_tech["Field technician"]
    n_f4{"Accepts the job?"}
    n_f6["Check which parts are needed"]
    n_f7{"Are they all on the truck?"}
    n_f9["Drive over and confirm arrival"]
    n_f10[["Diagnose and repair"]]
    n_f11{"Fixed?"}
    n_f10a["Book a follow-up visit or call a specialist"]
    n_f13["Close the work order with notes, time and parts"]
  end
  subgraph l_wh["Parts warehouse"]
    n_f8["Ship the parts to the technician or the customer"]
  end
  n_f1 --> n_f2
  n_f2 --> n_f3
  n_f3 --> n_f4
  n_f4 -->|"Yes"| n_f5
  n_f4 -->|"No"| n_f3a
  n_f3a --> n_f4
  n_f5 --> n_f6
  n_f6 --> n_f7
  n_f7 -->|"Yes"| n_f9
  n_f7 -->|"No"| n_f8
  n_f8 --> n_f8b
  n_f8b --> n_f6
  n_f9 --> n_f10
  n_f10 --> n_f11
  n_f11 -->|"Yes"| n_f12
  n_f11 -->|"No"| n_f10a
  n_f10a --> n_f5
  n_f12 --> n_f13
  n_f13 --> n_f14
```

### On site: diagnose and repair (detail of step "Diagnose and repair")

Lanes:
- Field technician: person / role (id `tech`)

Steps, in the order they run:

1. **Safety check: power and hazards** [start; Field technician; id `r1`]
   - then Identify the fault
2. **Identify the fault** [task; Field technician; id `r2`]
   - then Is a quick fix possible?
3. **Is a quick fix possible?** [decision; Field technician; id `r3`]
   - if "Yes" go to Repair or replace the part; if "No" go to Order the right part and make the equipment safe meanwhile
4. **Repair or replace the part** [task; Field technician; id `r4`]
   - then Test under normal operation
5. **Test under normal operation** [task; Field technician; id `r6`]
   - then Photograph and document the work
6. **Photograph and document the work** [end; Field technician; id `r7`]
7. **Order the right part and make the equipment safe meanwhile** [task; Field technician; id `r5`]
   - then Photograph and document the work

```mermaid
flowchart LR
  subgraph l_tech["Field technician"]
    n_r1(["Safety check: power and hazards"])
    n_r2["Identify the fault"]
    n_r3{"Is a quick fix possible?"}
    n_r4["Repair or replace the part"]
    n_r5["Order the right part and make the equipment safe meanwhile"]
    n_r6["Test under normal operation"]
    n_r7(["Photograph and document the work"])
  end
  n_r1 --> n_r2
  n_r2 --> n_r3
  n_r3 -->|"Yes"| n_r4
  n_r3 -->|"No"| n_r5
  n_r4 --> n_r6
  n_r5 --> n_r7
  n_r6 --> n_r7
```

## Full data (JSON)

```json
{
  "title": "Dispatch a field service visit",
  "maps": {
    "m_root": {
      "id": "m_root",
      "lanes": [
        {
          "id": "cust",
          "name": "Customer",
          "type": "person"
        },
        {
          "id": "disp",
          "name": "Dispatcher",
          "type": "person"
        },
        {
          "id": "tech",
          "name": "Field technician",
          "type": "person"
        },
        {
          "id": "fsl",
          "name": "Field service system",
          "type": "system"
        },
        {
          "id": "wh",
          "name": "Parts warehouse",
          "type": "person"
        }
      ],
      "steps": [
        {
          "id": "f1",
          "kind": "start",
          "lane": "cust",
          "next": [
            {
              "to": "f2"
            }
          ],
          "uses": [],
          "label": "Reports a problem that needs a visit"
        },
        {
          "id": "f2",
          "kind": "task",
          "lane": "disp",
          "next": [
            {
              "to": "f3"
            }
          ],
          "uses": [
            "fsl"
          ],
          "label": "Create a work order with the issue and the address"
        },
        {
          "id": "f3",
          "kind": "task",
          "lane": "disp",
          "next": [
            {
              "to": "f4"
            }
          ],
          "pain": {
            "note": "Dispatchers juggle availability in a spreadsheet",
            "level": 1
          },
          "uses": [],
          "label": "Pick the best technician: skills, location, availability"
        },
        {
          "id": "f4",
          "kind": "decision",
          "lane": "tech",
          "next": [
            {
              "to": "f5",
              "label": "Yes"
            },
            {
              "to": "f3a",
              "label": "No"
            }
          ],
          "uses": [],
          "label": "Accepts the job?"
        },
        {
          "id": "f3a",
          "kind": "task",
          "lane": "disp",
          "next": [
            {
              "to": "f4"
            }
          ],
          "uses": [],
          "label": "Reassign to the next technician"
        },
        {
          "id": "f5",
          "kind": "task",
          "lane": "disp",
          "next": [
            {
              "to": "f6"
            }
          ],
          "uses": [],
          "label": "Book a time window with the customer"
        },
        {
          "id": "f6",
          "kind": "task",
          "lane": "tech",
          "next": [
            {
              "to": "f7"
            }
          ],
          "uses": [],
          "label": "Check which parts are needed"
        },
        {
          "id": "f7",
          "kind": "decision",
          "lane": "tech",
          "next": [
            {
              "to": "f9",
              "label": "Yes"
            },
            {
              "to": "f8",
              "label": "No"
            }
          ],
          "uses": [],
          "label": "Are they all on the truck?"
        },
        {
          "id": "f8",
          "kind": "task",
          "lane": "wh",
          "next": [
            {
              "to": "f8b"
            }
          ],
          "uses": [],
          "label": "Ship the parts to the technician or the customer"
        },
        {
          "id": "f8b",
          "kind": "task",
          "lane": "disp",
          "next": [
            {
              "to": "f6"
            }
          ],
          "pain": {
            "note": "Missing parts cause a second visit, an unhappy customer and a wasted day",
            "level": 3
          },
          "uses": [],
          "label": "Reschedule the visit around the parts"
        },
        {
          "id": "f9",
          "kind": "task",
          "lane": "tech",
          "next": [
            {
              "to": "f10"
            }
          ],
          "uses": [],
          "label": "Drive over and confirm arrival"
        },
        {
          "id": "f10",
          "kind": "subprocess",
          "lane": "tech",
          "next": [
            {
              "to": "f11"
            }
          ],
          "uses": [],
          "child": "m_repair",
          "label": "Diagnose and repair"
        },
        {
          "id": "f11",
          "kind": "decision",
          "lane": "tech",
          "next": [
            {
              "to": "f12",
              "label": "Yes"
            },
            {
              "to": "f10a",
              "label": "No"
            }
          ],
          "uses": [],
          "label": "Fixed?"
        },
        {
          "id": "f10a",
          "kind": "task",
          "lane": "tech",
          "next": [
            {
              "to": "f5"
            }
          ],
          "uses": [],
          "label": "Book a follow-up visit or call a specialist"
        },
        {
          "id": "f12",
          "kind": "task",
          "lane": "cust",
          "next": [
            {
              "to": "f13"
            }
          ],
          "uses": [],
          "label": "Signs off on the work"
        },
        {
          "id": "f13",
          "kind": "task",
          "lane": "tech",
          "next": [
            {
              "to": "f14"
            }
          ],
          "uses": [
            "fsl"
          ],
          "label": "Close the work order with notes, time and parts"
        },
        {
          "id": "f14",
          "kind": "end",
          "lane": "disp",
          "next": [],
          "uses": [],
          "label": "Send the service report and the invoice"
        }
      ],
      "title": "Dispatch a field service visit",
      "parent": null
    },
    "m_repair": {
      "id": "m_repair",
      "lanes": [
        {
          "id": "tech",
          "name": "Field technician",
          "type": "person"
        }
      ],
      "steps": [
        {
          "id": "r1",
          "kind": "start",
          "lane": "tech",
          "next": [
            {
              "to": "r2"
            }
          ],
          "uses": [],
          "label": "Safety check: power and hazards"
        },
        {
          "id": "r2",
          "kind": "task",
          "lane": "tech",
          "next": [
            {
              "to": "r3"
            }
          ],
          "uses": [],
          "label": "Identify the fault"
        },
        {
          "id": "r3",
          "kind": "decision",
          "lane": "tech",
          "next": [
            {
              "to": "r4",
              "label": "Yes"
            },
            {
              "to": "r5",
              "label": "No"
            }
          ],
          "uses": [],
          "label": "Is a quick fix possible?"
        },
        {
          "id": "r4",
          "kind": "task",
          "lane": "tech",
          "next": [
            {
              "to": "r6"
            }
          ],
          "uses": [],
          "label": "Repair or replace the part"
        },
        {
          "id": "r5",
          "kind": "task",
          "lane": "tech",
          "next": [
            {
              "to": "r7"
            }
          ],
          "uses": [],
          "label": "Order the right part and make the equipment safe meanwhile"
        },
        {
          "id": "r6",
          "kind": "task",
          "lane": "tech",
          "next": [
            {
              "to": "r7"
            }
          ],
          "uses": [],
          "label": "Test under normal operation"
        },
        {
          "id": "r7",
          "kind": "end",
          "lane": "tech",
          "next": [],
          "uses": [],
          "label": "Photograph and document the work"
        }
      ],
      "title": "On site: diagnose and repair",
      "parent": {
        "map": "m_root",
        "step": "f10"
      }
    }
  }
}
```
