# Buy something: purchase order approval

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

- 18 steps across 2 layers
- Persona: Requester, Manager, Procurement, Finance, Vendor
- Technology / systems: ERP

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

## Buy something: purchase order approval

Lanes:
- Requester: person / role (id `req`)
- Manager: person / role (id `mgr`)
- Procurement: person / role (id `proc`)
- Finance: person / role (id `fin`)
- Vendor: person / role (id `vend`)
- ERP: technology / system (id `erp`)

Steps, in the order they run:

1. **Needs something** [start; Requester; id `p1`]
   - then Create a purchase request with quotes
2. **Create a purchase request with quotes** [task; Requester; id `p2`], using ERP
   - then Approve?
3. **Approve?** [decision; Manager; id `p3`]
   - if "Yes" go to Is it over $10,000?; if "No" go to Revise it or cancel
4. **Is it over $10,000?** [decision; Procurement; id `p4`]
   - if "Yes" go to Run competitive bids; if "No" go to Is budget available?
5. **Run competitive bids** [subprocess; Procurement; id `p5`], opens the detail layer "Competitive bidding"
   - then Is budget available?
6. **Is budget available?** [decision; Finance; id `p6`]
   - if "Yes" go to Issue the purchase order to the vendor; if "No" go to Reject, or ask for a budget transfer
7. **Issue the purchase order to the vendor** [task; Procurement; id `p7`]
   - then Confirms and delivers
8. **Confirms and delivers** [end; Vendor; id `p8`]
9. **Reject, or ask for a budget transfer** [task; Finance; id `p6a`]
   - then Transfer budget?
10. **Transfer budget?** [decision; Manager; id `p6b`]
   - if "Yes" go to Issue the purchase order to the vendor; if "No" go to Cancel the request
11. **Cancel the request** [end; Requester; id `p6c`]
12. **Revise it or cancel** [end; Requester; id `p3a`]

```mermaid
flowchart LR
  subgraph l_req["Requester"]
    n_p1(["Needs something"])
    n_p2["Create a purchase request with quotes"]
    n_p3a(["Revise it or cancel"])
    n_p6c(["Cancel the request"])
  end
  subgraph l_mgr["Manager"]
    n_p3{"Approve?"}
    n_p6b{"Transfer budget?"}
  end
  subgraph l_proc["Procurement"]
    n_p4{"Is it over $10,000?"}
    n_p5[["Run competitive bids"]]
    n_p7["Issue the purchase order to the vendor"]
  end
  subgraph l_fin["Finance"]
    n_p6{"Is budget available?"}
    n_p6a["Reject, or ask for a budget transfer"]
  end
  subgraph l_vend["Vendor"]
    n_p8(["Confirms and delivers"])
  end
  n_p1 --> n_p2
  n_p2 --> n_p3
  n_p3 -->|"Yes"| n_p4
  n_p3 -->|"No"| n_p3a
  n_p4 -->|"Yes"| n_p5
  n_p4 -->|"No"| n_p6
  n_p5 --> n_p6
  n_p6 -->|"Yes"| n_p7
  n_p6 -->|"No"| n_p6a
  n_p6a --> n_p6b
  n_p6b -->|"Yes"| n_p7
  n_p6b -->|"No"| n_p6c
  n_p7 --> n_p8
```

### Competitive bidding (detail of step "Run competitive bids")

Lanes:
- Procurement: person / role (id `proc`)
- Vendor: person / role (id `vend`)

Steps, in the order they run:

1. **Write the requirements** [start; Procurement; id `b1`]
   - then Vendors submit bids
2. **Vendors submit bids** [task; Vendor; id `b2`]
   - then At least 3 bids?
3. **At least 3 bids?** [decision; Procurement; id `b3`]
   - if "Yes" go to Score on price, quality and risk; if "No" go to Invite more vendors
4. **Score on price, quality and risk** [task; Procurement; id `b4`]
   - then Pick the winner and record why
5. **Pick the winner and record why** [end; Procurement; id `b5`]
6. **Invite more vendors** [task; Procurement; id `b3a`]
   - then Vendors submit bids

```mermaid
flowchart LR
  subgraph l_proc["Procurement"]
    n_b1(["Write the requirements"])
    n_b3{"At least 3 bids?"}
    n_b3a["Invite more vendors"]
    n_b4["Score on price, quality and risk"]
    n_b5(["Pick the winner and record why"])
  end
  subgraph l_vend["Vendor"]
    n_b2["Vendors submit bids"]
  end
  n_b1 --> n_b2
  n_b2 --> n_b3
  n_b3 -->|"Yes"| n_b4
  n_b3 -->|"No"| n_b3a
  n_b3a --> n_b2
  n_b4 --> n_b5
```

## Full data (JSON)

```json
{
  "title": "Buy something: purchase order approval",
  "maps": {
    "m_bids": {
      "id": "m_bids",
      "lanes": [
        {
          "id": "proc",
          "name": "Procurement",
          "type": "person"
        },
        {
          "id": "vend",
          "name": "Vendor",
          "type": "person"
        }
      ],
      "steps": [
        {
          "id": "b1",
          "kind": "start",
          "lane": "proc",
          "next": [
            {
              "to": "b2"
            }
          ],
          "uses": [],
          "label": "Write the requirements"
        },
        {
          "id": "b2",
          "kind": "task",
          "lane": "vend",
          "next": [
            {
              "to": "b3"
            }
          ],
          "uses": [],
          "label": "Vendors submit bids"
        },
        {
          "id": "b3",
          "kind": "decision",
          "lane": "proc",
          "next": [
            {
              "to": "b4",
              "label": "Yes"
            },
            {
              "to": "b3a",
              "label": "No"
            }
          ],
          "uses": [],
          "label": "At least 3 bids?"
        },
        {
          "id": "b3a",
          "kind": "task",
          "lane": "proc",
          "next": [
            {
              "to": "b2"
            }
          ],
          "uses": [],
          "label": "Invite more vendors"
        },
        {
          "id": "b4",
          "kind": "task",
          "lane": "proc",
          "next": [
            {
              "to": "b5"
            }
          ],
          "uses": [],
          "label": "Score on price, quality and risk"
        },
        {
          "id": "b5",
          "kind": "end",
          "lane": "proc",
          "next": [],
          "uses": [],
          "label": "Pick the winner and record why"
        }
      ],
      "title": "Competitive bidding",
      "parent": {
        "map": "m_root",
        "step": "p5"
      }
    },
    "m_root": {
      "id": "m_root",
      "lanes": [
        {
          "id": "req",
          "name": "Requester",
          "type": "person"
        },
        {
          "id": "mgr",
          "name": "Manager",
          "type": "person"
        },
        {
          "id": "proc",
          "name": "Procurement",
          "type": "person"
        },
        {
          "id": "fin",
          "name": "Finance",
          "type": "person"
        },
        {
          "id": "vend",
          "name": "Vendor",
          "type": "person"
        },
        {
          "id": "erp",
          "name": "ERP",
          "type": "system"
        }
      ],
      "steps": [
        {
          "id": "p1",
          "kind": "start",
          "lane": "req",
          "next": [
            {
              "to": "p2"
            }
          ],
          "uses": [],
          "label": "Needs something"
        },
        {
          "id": "p2",
          "kind": "task",
          "lane": "req",
          "next": [
            {
              "to": "p3"
            }
          ],
          "uses": [
            "erp"
          ],
          "label": "Create a purchase request with quotes"
        },
        {
          "id": "p3",
          "kind": "decision",
          "lane": "mgr",
          "next": [
            {
              "to": "p4",
              "label": "Yes"
            },
            {
              "to": "p3a",
              "label": "No"
            }
          ],
          "uses": [],
          "label": "Approve?"
        },
        {
          "id": "p3a",
          "kind": "end",
          "lane": "req",
          "next": [],
          "uses": [],
          "label": "Revise it or cancel"
        },
        {
          "id": "p4",
          "kind": "decision",
          "lane": "proc",
          "next": [
            {
              "to": "p5",
              "label": "Yes"
            },
            {
              "to": "p6",
              "label": "No"
            }
          ],
          "uses": [],
          "label": "Is it over $10,000?"
        },
        {
          "id": "p5",
          "kind": "subprocess",
          "lane": "proc",
          "next": [
            {
              "to": "p6"
            }
          ],
          "uses": [],
          "child": "m_bids",
          "label": "Run competitive bids"
        },
        {
          "id": "p6",
          "kind": "decision",
          "lane": "fin",
          "next": [
            {
              "to": "p7",
              "label": "Yes"
            },
            {
              "to": "p6a",
              "label": "No"
            }
          ],
          "uses": [],
          "label": "Is budget available?"
        },
        {
          "id": "p6a",
          "kind": "task",
          "lane": "fin",
          "next": [
            {
              "to": "p6b"
            }
          ],
          "uses": [],
          "label": "Reject, or ask for a budget transfer"
        },
        {
          "id": "p6b",
          "kind": "decision",
          "lane": "mgr",
          "next": [
            {
              "to": "p7",
              "label": "Yes"
            },
            {
              "to": "p6c",
              "label": "No"
            }
          ],
          "uses": [],
          "label": "Transfer budget?"
        },
        {
          "id": "p6c",
          "kind": "end",
          "lane": "req",
          "next": [],
          "uses": [],
          "label": "Cancel the request"
        },
        {
          "id": "p7",
          "kind": "task",
          "lane": "proc",
          "next": [
            {
              "to": "p8"
            }
          ],
          "uses": [],
          "label": "Issue the purchase order to the vendor"
        },
        {
          "id": "p8",
          "kind": "end",
          "lane": "vend",
          "next": [],
          "uses": [],
          "label": "Confirms and delivers"
        }
      ],
      "title": "Buy something: purchase order approval",
      "parent": null
    }
  }
}
```
