# Invoice the customer: get paid without the drama

> A process map exported from forks.world (https://forks.world). Author: Brian. Source: https://forks.world/p/cmv0ie8nd0036jw06z0tkx45t
> 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

- 25 steps across 3 layers
- Persona: Billing team, Customer accounts payable, Sales rep
- Technology / systems: ERP and billing system

## Pain points

Where this process hurts, worst first:

- **Correct the invoice** (Invoice the customer: get paid without the drama; painful): Wrong tax or a missing PO is the #1 reason payment is late
- **Get the PO from the customer** (Invoice the customer: get paid without the drama; annoying): Chasing the customer for a PO number

## 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`.

## Invoice the customer: get paid without the drama

Lanes:
- Billing team: person / role (id `fin`)
- ERP and billing system: technology / system (id `erp`)
- Customer accounts payable: person / role (id `cust`)
- Sales rep: person / role (id `rep`)

Steps, in the order they run:

1. **Trigger: product shipped or milestone reached** [start; ERP and billing system; id `i1`]
   - then Pull the order, the contract and the proof of delivery
2. **Pull the order, the contract and the proof of delivery** [task; Billing team; id `i2`]
   - then Does the customer require a PO number?
3. **Does the customer require a PO number?** [decision; Billing team; id `i3`]
   - if "Yes" go to Get the PO from the customer; if "No" go to Generate the invoice with correct taxes and terms
4. **Get the PO from the customer** [task; Sales rep; id `i4`] ⚠ PAIN POINT (annoying): Chasing the customer for a PO number
   - then Generate the invoice with correct taxes and terms
5. **Generate the invoice with correct taxes and terms** [subprocess; ERP and billing system; id `i5`], using Billing team, opens the detail layer "Build the invoice"
   - then Is it accurate?
6. **Is it accurate?** [decision; Billing team; id `i6`]
   - if "Yes" go to Send by email and the customer portal; if "No" go to Correct the invoice
7. **Send by email and the customer portal** [task; ERP and billing system; id `i7`]
   - then Receives and logs it
8. **Receives and logs it** [task; Customer accounts payable; id `i8`]
   - then Disputes anything?
9. **Disputes anything?** [decision; Customer accounts payable; id `i9`]
   - if "Yes" go to Resolve the dispute; if "No" go to Payment due date tracked
10. **Resolve the dispute** [subprocess; Billing team; id `i10`], opens the detail layer "Resolve an invoice dispute"
   - then Payment due date tracked
11. **Payment due date tracked** [end; ERP and billing system; id `i11`]
12. **Correct the invoice** [task; Billing team; id `i5a`] ⚠ PAIN POINT (painful): Wrong tax or a missing PO is the #1 reason payment is late
   - then Generate the invoice with correct taxes and terms

```mermaid
flowchart LR
  subgraph l_fin["Billing team"]
    n_i2["Pull the order, the contract and the proof of delivery"]
    n_i3{"Does the customer require a PO number?"}
    n_i6{"Is it accurate?"}
    n_i5a["Correct the invoice"]
    n_i10[["Resolve the dispute"]]
  end
  subgraph l_erp["ERP and billing system"]
    n_i1(["Trigger: product shipped or milestone reached"])
    n_i5[["Generate the invoice with correct taxes and terms"]]
    n_i7["Send by email and the customer portal"]
    n_i11(["Payment due date tracked"])
  end
  subgraph l_cust["Customer accounts payable"]
    n_i8["Receives and logs it"]
    n_i9{"Disputes anything?"}
  end
  subgraph l_rep["Sales rep"]
    n_i4["Get the PO from the customer"]
  end
  n_i1 --> n_i2
  n_i2 --> n_i3
  n_i3 -->|"Yes"| n_i4
  n_i3 -->|"No"| n_i5
  n_i4 --> n_i5
  n_i5 --> n_i6
  n_i6 -->|"Yes"| n_i7
  n_i6 -->|"No"| n_i5a
  n_i5a --> n_i5
  n_i7 --> n_i8
  n_i8 --> n_i9
  n_i9 -->|"Yes"| n_i10
  n_i9 -->|"No"| n_i11
  n_i10 --> n_i11
```

### Build the invoice (detail of step "Generate the invoice with correct taxes and terms")

Lanes:
- Billing team: person / role (id `fin`)
- ERP and billing system: technology / system (id `erp`)

Steps, in the order they run:

1. **Pull the billable lines** [start; ERP and billing system; id `b1`]
   - then Apply price, discount and tax rules
2. **Apply price, discount and tax rules** [task; ERP and billing system; id `b2`]
   - then Currency and region right?
3. **Currency and region right?** [decision; ERP and billing system; id `b3`]
   - if "Yes" go to Add payment terms and bank details; if "No" go to Correct the master data
4. **Add payment terms and bank details** [end; ERP and billing system; id `b4`]
5. **Correct the master data** [task; Billing team; id `b2a`]
   - then Apply price, discount and tax rules

```mermaid
flowchart LR
  subgraph l_fin["Billing team"]
    n_b2a["Correct the master data"]
  end
  subgraph l_erp["ERP and billing system"]
    n_b1(["Pull the billable lines"])
    n_b2["Apply price, discount and tax rules"]
    n_b3{"Currency and region right?"}
    n_b4(["Add payment terms and bank details"])
  end
  n_b1 --> n_b2
  n_b2 --> n_b3
  n_b3 -->|"Yes"| n_b4
  n_b3 -->|"No"| n_b2a
  n_b2a --> n_b2
```

### Resolve an invoice dispute (detail of step "Resolve the dispute")

Lanes:
- Billing team: person / role (id `fin`)
- Customer accounts payable: person / role (id `cust`)
- Sales rep: person / role (id `rep`)

Steps, in the order they run:

1. **Says what is wrong** [start; Customer accounts payable; id `d1`]
   - then Check the order, proof of delivery and contract
2. **Check the order, proof of delivery and contract** [task; Billing team; id `d2`]
   - then Is the customer right?
3. **Is the customer right?** [decision; Billing team; id `d3`]
   - if "Yes" go to Issue a credit note and a corrected invoice; if "No" go to Send the evidence and explain politely
4. **Issue a credit note and a corrected invoice** [task; Billing team; id `d4`]
   - then Accepts?
5. **Accepts?** [decision; Customer accounts payable; id `d6`]
   - if "Yes" go to Dispute closed; if "No" go to Escalate: the sales rep calls the buyer
6. **Dispute closed** [end; Billing team; id `d7`]
7. **Escalate: the sales rep calls the buyer** [task; Sales rep; id `d8`]
   - then Check the order, proof of delivery and contract
8. **Send the evidence and explain politely** [task; Billing team; id `d5`]
   - then Accepts?

```mermaid
flowchart LR
  subgraph l_fin["Billing team"]
    n_d2["Check the order, proof of delivery and contract"]
    n_d3{"Is the customer right?"}
    n_d4["Issue a credit note and a corrected invoice"]
    n_d5["Send the evidence and explain politely"]
    n_d7(["Dispute closed"])
  end
  subgraph l_cust["Customer accounts payable"]
    n_d1(["Says what is wrong"])
    n_d6{"Accepts?"}
  end
  subgraph l_rep["Sales rep"]
    n_d8["Escalate: the sales rep calls the buyer"]
  end
  n_d1 --> n_d2
  n_d2 --> n_d3
  n_d3 -->|"Yes"| n_d4
  n_d3 -->|"No"| n_d5
  n_d4 --> n_d6
  n_d5 --> n_d6
  n_d6 -->|"Yes"| n_d7
  n_d6 -->|"No"| n_d8
  n_d8 --> n_d2
```

## Full data (JSON)

```json
{
  "title": "Invoice the customer: get paid without the drama",
  "maps": {
    "m_root": {
      "id": "m_root",
      "lanes": [
        {
          "id": "fin",
          "name": "Billing team",
          "type": "person"
        },
        {
          "id": "erp",
          "name": "ERP and billing system",
          "type": "system"
        },
        {
          "id": "cust",
          "name": "Customer accounts payable",
          "type": "person"
        },
        {
          "id": "rep",
          "name": "Sales rep",
          "type": "person"
        }
      ],
      "steps": [
        {
          "id": "i1",
          "kind": "start",
          "lane": "erp",
          "next": [
            {
              "to": "i2"
            }
          ],
          "uses": [],
          "label": "Trigger: product shipped or milestone reached"
        },
        {
          "id": "i2",
          "kind": "task",
          "lane": "fin",
          "next": [
            {
              "to": "i3"
            }
          ],
          "uses": [],
          "label": "Pull the order, the contract and the proof of delivery"
        },
        {
          "id": "i3",
          "kind": "decision",
          "lane": "fin",
          "next": [
            {
              "to": "i4",
              "label": "Yes"
            },
            {
              "to": "i5",
              "label": "No"
            }
          ],
          "uses": [],
          "label": "Does the customer require a PO number?"
        },
        {
          "id": "i4",
          "kind": "task",
          "lane": "rep",
          "next": [
            {
              "to": "i5"
            }
          ],
          "pain": {
            "note": "Chasing the customer for a PO number",
            "level": 1
          },
          "uses": [],
          "label": "Get the PO from the customer"
        },
        {
          "id": "i5",
          "kind": "subprocess",
          "lane": "erp",
          "next": [
            {
              "to": "i6"
            }
          ],
          "uses": [
            "fin"
          ],
          "child": "m_build",
          "label": "Generate the invoice with correct taxes and terms"
        },
        {
          "id": "i6",
          "kind": "decision",
          "lane": "fin",
          "next": [
            {
              "to": "i7",
              "label": "Yes"
            },
            {
              "to": "i5a",
              "label": "No"
            }
          ],
          "uses": [],
          "label": "Is it accurate?"
        },
        {
          "id": "i5a",
          "kind": "task",
          "lane": "fin",
          "next": [
            {
              "to": "i5"
            }
          ],
          "pain": {
            "note": "Wrong tax or a missing PO is the #1 reason payment is late",
            "level": 2
          },
          "uses": [],
          "label": "Correct the invoice"
        },
        {
          "id": "i7",
          "kind": "task",
          "lane": "erp",
          "next": [
            {
              "to": "i8"
            }
          ],
          "uses": [],
          "label": "Send by email and the customer portal"
        },
        {
          "id": "i8",
          "kind": "task",
          "lane": "cust",
          "next": [
            {
              "to": "i9"
            }
          ],
          "uses": [],
          "label": "Receives and logs it"
        },
        {
          "id": "i9",
          "kind": "decision",
          "lane": "cust",
          "next": [
            {
              "to": "i10",
              "label": "Yes"
            },
            {
              "to": "i11",
              "label": "No"
            }
          ],
          "uses": [],
          "label": "Disputes anything?"
        },
        {
          "id": "i10",
          "kind": "subprocess",
          "lane": "fin",
          "next": [
            {
              "to": "i11"
            }
          ],
          "uses": [],
          "child": "m_dispute",
          "label": "Resolve the dispute"
        },
        {
          "id": "i11",
          "kind": "end",
          "lane": "erp",
          "next": [],
          "uses": [],
          "label": "Payment due date tracked"
        }
      ],
      "title": "Invoice the customer: get paid without the drama",
      "parent": null
    },
    "m_build": {
      "id": "m_build",
      "lanes": [
        {
          "id": "fin",
          "name": "Billing team",
          "type": "person"
        },
        {
          "id": "erp",
          "name": "ERP and billing system",
          "type": "system"
        }
      ],
      "steps": [
        {
          "id": "b1",
          "kind": "start",
          "lane": "erp",
          "next": [
            {
              "to": "b2"
            }
          ],
          "uses": [],
          "label": "Pull the billable lines"
        },
        {
          "id": "b2",
          "kind": "task",
          "lane": "erp",
          "next": [
            {
              "to": "b3"
            }
          ],
          "uses": [],
          "label": "Apply price, discount and tax rules"
        },
        {
          "id": "b3",
          "kind": "decision",
          "lane": "erp",
          "next": [
            {
              "to": "b4",
              "label": "Yes"
            },
            {
              "to": "b2a",
              "label": "No"
            }
          ],
          "uses": [],
          "label": "Currency and region right?"
        },
        {
          "id": "b2a",
          "kind": "task",
          "lane": "fin",
          "next": [
            {
              "to": "b2"
            }
          ],
          "uses": [],
          "label": "Correct the master data"
        },
        {
          "id": "b4",
          "kind": "end",
          "lane": "erp",
          "next": [],
          "uses": [],
          "label": "Add payment terms and bank details"
        }
      ],
      "title": "Build the invoice",
      "parent": {
        "map": "m_root",
        "step": "i5"
      }
    },
    "m_dispute": {
      "id": "m_dispute",
      "lanes": [
        {
          "id": "fin",
          "name": "Billing team",
          "type": "person"
        },
        {
          "id": "cust",
          "name": "Customer accounts payable",
          "type": "person"
        },
        {
          "id": "rep",
          "name": "Sales rep",
          "type": "person"
        }
      ],
      "steps": [
        {
          "id": "d1",
          "kind": "start",
          "lane": "cust",
          "next": [
            {
              "to": "d2"
            }
          ],
          "uses": [],
          "label": "Says what is wrong"
        },
        {
          "id": "d2",
          "kind": "task",
          "lane": "fin",
          "next": [
            {
              "to": "d3"
            }
          ],
          "uses": [],
          "label": "Check the order, proof of delivery and contract"
        },
        {
          "id": "d3",
          "kind": "decision",
          "lane": "fin",
          "next": [
            {
              "to": "d4",
              "label": "Yes"
            },
            {
              "to": "d5",
              "label": "No"
            }
          ],
          "uses": [],
          "label": "Is the customer right?"
        },
        {
          "id": "d4",
          "kind": "task",
          "lane": "fin",
          "next": [
            {
              "to": "d6"
            }
          ],
          "uses": [],
          "label": "Issue a credit note and a corrected invoice"
        },
        {
          "id": "d5",
          "kind": "task",
          "lane": "fin",
          "next": [
            {
              "to": "d6"
            }
          ],
          "uses": [],
          "label": "Send the evidence and explain politely"
        },
        {
          "id": "d6",
          "kind": "decision",
          "lane": "cust",
          "next": [
            {
              "to": "d7",
              "label": "Yes"
            },
            {
              "to": "d8",
              "label": "No"
            }
          ],
          "uses": [],
          "label": "Accepts?"
        },
        {
          "id": "d8",
          "kind": "task",
          "lane": "rep",
          "next": [
            {
              "to": "d2"
            }
          ],
          "uses": [],
          "label": "Escalate: the sales rep calls the buyer"
        },
        {
          "id": "d7",
          "kind": "end",
          "lane": "fin",
          "next": [],
          "uses": [],
          "label": "Dispute closed"
        }
      ],
      "title": "Resolve an invoice dispute",
      "parent": {
        "map": "m_root",
        "step": "i10"
      }
    }
  }
}
```
