Flow Information

Purpose: Purchase the goods based on Order record

User Roles: Outlet Manager, Purchasing, Finance, Auditor

Actors: Outlet Manager, Purchasing Staff, Finance, Outlet Auditor

Purchasing goals :
  • Assign order Delivery status to : ordered / cancelled
  • Assign Payment Status to : PAID
  • Sets payment type : CBD / COD / Contrabon
  • Direct PO Creation (Buffer, Promo, Asset) supported without RO

  • Konteks: Vendor menginformasikan bahwa stok tidak tersedia (Urgent Matter) setelah PO disetujui.
  • Aktor: Staff Pembelian (Purchase Staff)
  • Tindakan:
    • Staff mencari item dari vendor lain.
    • Staff membuat Direct PO baru (Node 1b) tanpa melalui proses RO ulang.
    • Pada sistem, Staff memilih opsi "Assign to Head Section" (Node 1c) agar Head Outlet mengetahui perubahan sumber barang.
flowchart TD A(("1 Outlet Manager
RO Approved")) --> B(["2 Purchase Staff
Reviews RO Set Status:
'On Review'"]) B --> C(["3 System
Automatically Group Items
by Vendor"]) C --> C_CONTACT(["3a Purchase Staff
Contact Vendor &
Obtain Invoice"]) DP_START(("1b Fin/Pur Staff
Create Direct PO
(No RO Source)")) --> DP_ACT(["1c System
Input Vendor & Items
Set PO Type:
Buffer/Promo/Asset
Assign to Head Section"]) DP_ACT --> C_CONTACT C_CONTACT --> C_CHECK{"3b Purchase Staff
Price Matches System?"} C_CHECK -- Yes --> G{"4 Purchase Staff
Payment Type per PO?"} C_CHECK -- No --> C_NO_MATCH(["3c Purchase Staff
Set PO Status:
'Need Approval'"]) C_NO_MATCH --> C_ALERT(["3d System
Alert Finance"]) C_ALERT --> C_FIN(["3e Finance
Update Master Price
& Approve PO"]) C_FIN --> G G -- 'Contrabon' --> J(["5 Purchase Staff
Upload Invoice from Vendor"]) J --> J1(["6 Purchase Staff
Update quantity and amount"]) J1 --> I(["7 Purchase Staff
Set Contrabon Period"]) I --> F G -- CBD --> H1(["8 Purchase Staff
Receive invoice from vendor"]) H1 --> H2(["9 Purchase Staff
Open Purchase Order Detail"]) H2 --> H3(["10 Purchase Staff
Add quantity and total amount"]) H3 --> H4(["11 Purchase Staff
Upload invoice,
set delivery date"]) H4 --> H5(["12 Finance
Upload payment receipt,
set PAID"]) H5 --> F G -- COD --> COD_1(["13 Purchase Staff
Upload Invoice &
Set payment to COD"]) COD_1 --> F G -- Deposit --> DEP_1(["31 Purchase Staff
Select Available Deposit
(From Returns)"]) DEP_1 --> DEP_CHECK{"32 System
Deposit >= Invoice?"} DEP_CHECK -- Yes --> DEP_FULL(["33 System
Deduct Deposit
Set PO: PAID"]) DEP_FULL --> F DEP_CHECK -- No --> DEP_PARTIAL(["34 System
Deduct Full Deposit
Calculate Remaining
Balance"]) DEP_PARTIAL --> DEP_PAY(["35 Finance
Pay Remaining Balance"]) DEP_PAY --> DEP_MIXED(["36 System
Record Split Payment
Set PO: PAID"]) DEP_MIXED --> F F(["14 System
Set PO Delivery Status to 'Ordered'
Display Delivery Date"]) --> COD_2(["15 Outlet Auditor
Quality Check"]) subgraph Contrabon ["Contrabon Payment"] direction TB I -.-> L{"16 System
Due Date Approaches
H-1 from End of Period"} L --> M(["17 System
Alert Finance"]) M --> N(["18 Finance
Open PO Detail"]) N --> P(["19 Finance
Upload invoice and receipt"]) P --> Q[["20 System
Payment Status Updated to 'PAID'"]] end subgraph COD_Payment_Group ["

COD Payment

"] direction TB COD_2 --> COD_QC{"21 Outlet Auditor
QC Result?"} COD_QC -- Yes --> K(["22 System
Auditor Alerted: QC Approved"]) K --> COD_3(["23 Finance
Make Payment"]) COD_QC -- Partial --> COD_P1(["24 Outlet Auditor
Adjust Quantity"]) COD_P1 --> COD_P2(["25 System
Purchase Staff alerted to request New Invoice"]) COD_P2 --> COD_3 COD_QC -- Rejected --> COD_R_Notes(["26 Outlet Auditor
Adds Notes to PO"]) COD_R_Notes --> COD_R1[["27 System
Delivery status set to Cancelled
all department alerted."]] COD_3 --> COD_4(["28 Finance
Open PO Detail"]) COD_4 --> COD_5(["29 Finance
Upload Invoice & Receipt"]) COD_5 --> COD_6[["30 System
Payment Status Updated to 'PAID'"]] end classDef styleStart fill:#E3F2FD,stroke:#1976D2,stroke-width:1px,color:#1976D2 classDef styleSubmit fill:#FFFFFF,stroke:#808080,stroke-width:1px,color:#6a6a6a classDef styleDecision fill:#FFF3E0,stroke:#FF8C00,stroke-width:1px,color:#FF8C00 classDef stylePayment fill:#E8F5E8,stroke:#4CAF50,stroke-width:1px,color:#4CAF50 classDef styleError fill:#FFEBEE,stroke:#F44336,stroke-width:1px,color:#F44336 classDef styleEnd fill:#c1fabd,stroke:#35c454,stroke-width:1px,color:#0c6d12 classDef styleSystem fill:#e9ecef,stroke:#495057,stroke-width:1px,color:#495057 class A styleStart class Q,COD_6 styleEnd class B,C,F,I,J,J1,H1,H2,H3,H4,H5,M,N,P,COD_1,COD_2,K,COD_P1,COD_P2,COD_3,COD_4,COD_5,COD_R_Notes,DEP_1,DEP_FULL,DEP_PARTIAL,DEP_PAY,DEP_MIXED,C_CONTACT,C_NO_MATCH,C_ALERT,C_FIN,DP_ACT styleSubmit class G,L,COD_QC,DEP_CHECK,C_CHECK styleDecision class DP_START styleStart class COD_R1 styleError class B,C interactive-node click B call showPurchaseReviewModal() click C call toggleVendorPopover()
Color Legend
Start Process Submit Actions Decision Points Payment Types Cancel/Error End Process Link to other flow

Use Case: Permintaan Bagian Bakery

Skenario: Head Section (Bakery) perlu mengisi ulang stok 8 bahan spesifik.
Item: Tepung (10kg), Keju (12pcs), Matcha (4kg), Apel Fuji (5kg), Telur (10kg), Cleo (10gal), Madu Murni (3btl), Garam (7pck).

  • Konteks Awal: Outlet Manager telah menyetujui RO dari bagian Bakery untuk 8 item 1.
  • Aktor: Staff Pembelian (Purchase Staff)
  • Tindakan:
    • Staff melihat status RO berubah menjadi "Approved".
    • Staff mengklik "Review" untuk memverifikasi kelengkapan permintaan 2.
    • Status RO diperbarui menjadi 'On Review'.

  • Aktor: Staff Pembelian (Purchase Staff)
  • Tindakan:
    • Sistem mengelompokkan 8 item tersebut ke dalam 5 PO berbeda berdasarkan vendor 3.
    • Staff menghubungi vendor untuk mendapatkan invoice 3a dan memverifikasi kesesuaian harga sistem dengan invoice 3b.
    • Jika harga sesuai, Staff lanjut menentukan Tipe Pembayaran 4.
    • Jika harga tidak sesuai, Staff set status 'Need Approval' 3c, sistem menotifikasi Finance 3d, dan Finance mengupdate harga master serta menyetujui PO 3e.
  • Logika: Satu RO dipecah menjadi beberapa PO (Satu PO per Vendor).
  • PO yang Dihasilkan:
    No. PO Vendor Item Tipe Pembayaran (Keputusan)
    PO-001 Muliaraya Tepung (10 kg) Contrabon (Tagihan Bulanan)
    PO-002 PT Sentralsari Keju (12 pcs), Cleo (10 gal) COD (Bayar saat terima)
    PO-003 PT Trisna Pangan Matcha (4 kg), Apel Fuji (5 kg) CBD (Transfer sebelum kirim)
    PO-004 CV Rumah Pitiku Telur (10 kg) COD
    PO-005 PT Aroma Jaya Madu Murni, Garam Deposit (Potong Deposit Retur)
  • Alur Selanjutnya: Setiap tipe pembayaran akan memicu alur persetujuan keuangan yang berbeda 4.

Konteks: Pembelian barang khusus yang tidak melalui permintaan outlet (RO), seperti stok Bag Pembungkus makanan, Piring Deli, atau bahan baku untuk cadangan (buffer)

Skenario A: Buffer Stock
  • Aktor: Staff Pembelian
  • Tujuan: Mengamankan stok gula untuk antisipasi kenaikan harga.
  • Alur:
    1. Staff membuat "Direct PO" baru 1b.
    2. Memilih Vendor: PT Manis Sekali.
    3. Input Item: Gula Pasir (500kg).
    4. Set Tipe PO: Buffer Stock 1c.
    5. Lanjut ke verifikasi harga 3b.
Skenario B: Pembelian Aset/Promo
  • Aktor: Staff Finance / Purchasing
  • Tujuan: Membeli Laptop Admin atau Banner Promo Natal.
  • Alur:
    1. Staff membuat "Direct PO" baru 1b.
    2. Memilih Vendor: Toko Elektronik Maju.
    3. Input Item: Laptop ASUS (1 unit).
    4. Set Tipe PO: Asset 1c.
    5. Lanjut ke verifikasi harga & pembayaran.

Skenario QC: Barang tiba dan diperiksa oleh Auditor.

Kasus COD (PO-002: PT Sentralsari)
  • Masalah: Cleo kurang 1 galon (Parsial).
  • Dampak Pembayaran:
    • Auditor input hasil QC "Parsial" 21 24.
    • Sistem meminta Invoice Baru kepada vendor sesuai jumlah yang diterima 25.
    • Finance hanya membayar untuk 9 galon + 12 keju.
Kasus Contrabon (PO-001: Muliaraya)
  • Kondisi: Barang diterima lengkap (Good).
  • Dampak Pembayaran:
    • Auditor input hasil QC "Good" 15.
    • Sistem otomatis mencatat sebagai hutang (hutang dagang / Account payable) 7.
    • Pembayaran dijadwalkan sesuai jatuh tempo (misal: 7 hari) 16.
Kasus Deposit (PO-005: PT Aroma Jaya)
  • Kondisi: Memiliki saldo deposit dari retur sebelumnya.
  • Dampak Pembayaran:
    • Staff Pembelian memilih opsi "Deposit" 31.
    • Skenario A (Saldo Cukup): Jika deposit >= total tagihan, sistem langsung melunasi PO 33.
    • Skenario B (Saldo Kurang):
      • Sistem memotong seluruh saldo deposit 34.
      • Finance membayar sisa tagihan (Deposit + Transfer) 35.
      • PO tercatat lunas dengan metode pembayaran campuran 36.