 1. UC-01 Log in (main flow)
    as cashier Fitri, Wiyung
    POST /api/login -> 200 ok
    Fitri Handayani, cashier, outlet O03
 2. UC-02 Search customers by phone (main flow)
    as cashier Fitri, Wiyung
    GET /api/customers?q=0896%200000%201482 -> 200 ok
    1 match: C0151 Syaiful Wijaya, 35 bills so far
 3. UC-05 Create a bill, rack A01 (alternative 5a: rack in use)
    as cashier Fitri, Wiyung
    POST /api/bills -> 422 ok
    Rack A01 is in use at O03, choose another rack.
 4. UC-05 Create a bill, rack A03, down payment (main flow + 6a)
    as cashier Fitri, Wiyung
    POST /api/bills -> 201 ok
    B2954 queued: 5 x 8000 = 40000, paid 20000,
      balance 20000
    rack A03, arrived 2026-09-30 21:00:00, promised 2026-10-02 21:00:00
 5. UC-07 Hand over too early (alternative 1a)
    as cashier Fitri, Wiyung
    POST /api/bills/B2954/status -> 409 ok
    B2954 is not finished yet (promised 2 Oct 2026 21:00).
 6. UC-01 Log out
    as cashier Fitri, Wiyung
    POST /api/logout -> 204 ok
 7. UC-01 Log in
    as washer Slamet, Wiyung
    POST /api/login -> 200 ok
    Slamet Riyadi, washer, outlet O03
 8. UC-06 Mark the bill finished (main flow)
    as washer Slamet, Wiyung
    POST /api/bills/B2954/status -> 200 ok
    B2954 finished at 2026-09-30 21:00:00, history has 2 rows
 9. UC-06 Mark it finished again (alternative 3a)
    as washer Slamet, Wiyung
    POST /api/bills/B2954/status -> 409 ok
    B2954 is already finished.
10. UC-09 A washer tries to take money (role check)
    as washer Slamet, Wiyung
    POST /api/bills/B2954/payments -> 403 ok
    forbidden: Your role (washer) cannot open this page.
11. UC-01 Log out
    as washer Slamet, Wiyung
    POST /api/logout -> 204 ok
12. UC-13 Check the status with bill id and phone (main flow)
    as customer Syaiful, on his phone, no login
    GET /api/status?bill=B2954&phone=0896%200000%201482 -> 200 ok
    B2954: Ready for pickup since 2026-09-30 21:00:00; Wash, dry & fold (per kg), 5
      units
    total 40000, still to pay 20000; Profitina Laundry Wiyung 031-0000-2103
13. UC-13 The same bill with another phone (alternative 3a)
    as a stranger, no login
    GET /api/status?bill=B2954&phone=0812-0000-4710 -> 404 ok
    No bill found for this number and phone.
14. UC-01 Log in
    as cashier Fitri, Wiyung
    POST /api/login -> 200 ok
    Fitri Handayani, cashier, outlet O03
15. UC-07 Hand over with an open balance (alternative 3b)
    as cashier Fitri, Wiyung
    POST /api/bills/B2954/status -> 409 ok
    Balance Rp 20.000 open. Record the payment or tick 'customer pays later'.
16. UC-09 Pay by QRIS without a reference (alternative 3b)
    as cashier Fitri, Wiyung
    POST /api/bills/B2954/payments -> 422 ok
    Enter the payment reference (QRIS number or bank + transfer number).
17. UC-09 Pay the balance by QRIS (main flow)
    as cashier Fitri, Wiyung
    POST /api/bills/B2954/payments -> 201 ok
    payment 3321: qris 20000 (QRIS 512300774412); balance now 0
18. UC-07 Hand over (main flow)
    as cashier Fitri, Wiyung
    POST /api/bills/B2954/status -> 200 ok
    B2954 departed at 2026-09-30 21:00:00, rack A03 is free again
19. UC-14 Read the whole bill back
    as cashier Fitri, Wiyung
    GET /api/bills/B2954 -> 200 ok
    B2954: 2 payments, paid 40000 of 40000, balance 0
    history: queued (Fitri Handayani),
      finished (Slamet Riyadi),
      departed (Fitri Handayani)
20. UC-08 A cashier may not cancel (role check)
    as cashier Fitri, Wiyung
    POST /api/bills/B2944/cancel -> 403 ok
    forbidden: Your role (cashier) cannot open this page.
21. UC-01 Log out
    as cashier Fitri, Wiyung
    POST /api/logout -> 204 ok
22. UC-01 Log in
    as supervisor Bambang, Wiyung
    POST /api/login -> 200 ok
    Bambang Sutrisno, supervisor, outlet O03
23. UC-08 Cancel a bill that has a down payment (alternative 1a)
    as supervisor Bambang, Wiyung
    POST /api/bills/B2952/cancel -> 409 ok
    B2952 has payments and cannot be cancelled. Refunds are handled outside the
      system; ask the owner.
24. UC-08 Cancel a queued bill without payments (main flow)
    as supervisor Bambang, Wiyung
    POST /api/bills/B2944/cancel -> 200 ok
    B2944 departed, cancelled=true, payment 0,
      last event cancelled
25. UC-15 Record a complaint on the collected bill (main flow)
    as supervisor Bambang, Wiyung
    POST /api/bills/B2954/complaint -> 201 ok
    complaint at 2026-09-30 21:00:00 by Bambang Sutrisno
26. UC-01 Log out
    as supervisor Bambang, Wiyung
    POST /api/logout -> 204 ok
26 steps, 0 unexpected
