Coosae Swimlane & Overlap
Coosae · proses bisnis rinci

Siapa mengerjakan apa, dan di mana alurnya bertumpuk

Swimlane per role untuk satu siklus Pre-Order, siklus status PO, contoh satu PO yang dipenuhi dua petani, dan sembilan titik overlap yang ditemukan di kode dan database produksi per 29 September 2026.

1. Swimlane per role

Angka dalam lingkaran adalah urutan jalur utama satu PO. Kotak garis putus-putus adalah aktivitas yang berjalan terus di sepanjang siklus. Kolom berarsir adalah zona tempat beberapa role bekerja bersamaan pada PO yang sama. Label O1–O9 merujuk ke daftar overlap di bagian 4.

Tahap
1 · Onboardingakun & master data
2 · Budidayalahan, tanam, verifikasi
3 · Pengajuanbuyer membuat PO
4 · Persetujuankoperasi menilai PO
5 · Pemenuhanalokasi & serah terimazona overlap
6 · Pengirimangudang ke buyer
7 · PenutupanPO selesaizona overlap
Admin
1Setujui pendaftar, tetapkan rolestatus pending → active
Kelola komoditas & harga aktifHarga disalin ke PO saat PO dibuat. Perubahan harga hanya berlaku untuk PO baru.
Petani
Daftar akunmenunggu approval admin
2Lahan & data tanamweb atau bot WhatsApp
Tanam baru, laporan kondisi berkala (baik/sedang/buruk + foto)O1
7Terima notif alokasi, panen, antar ke gudangO4
Petugas Lapang
3Verifikasi tanamdiverifikasi / ditolakO8O9
Verifikasi tanam baru & visitasi lapangO1
Terima WA "PO baru"hanya role ini yang dinotifikasi
Buyer
Daftar akun
4Buat PO, simpan draft atau ajukannomor PO terbit saat diajukan
Boleh batalkan selama draft / diajukan
Terima WA disetujui, pantau pemenuhan
11Konfirmasi PO selesaiO6
Petugas koperasirole petugas mana pun
5Setujui atau tolak POtolak wajib alasanO8O9
Manager
6Alokasi petani + lahan + kgbisa berulang, dibatasi sisa PO & sisa estimasi panenO2O3O5
Petugas Gudang
8Serah terima per alokasikg, kondisi barang, nilaiO2O4
Petugas Distribusi
9Buat pengirimanarmada, pengemudi, total kg otomatisO7
10Update status: disiapkan → dalam perjalanan → tibaO6
Pengurus · Ketua · Pembina
Dashboard & laporan. Pembina membaca semua koperasi (read-only).
Status PO
–
–
draft→diajukan
disetujuiataudibatalkan
sebagian_terpenuhi→dalam_proses
dikirim
selesai
Langkah jalur utama Berjalan terus / opsional Zona overlap Ox sesuai desain Ox perlu dicek Ox celah

2. Siklus status PO

Transisi persis seperti di controller. Alokasi hanya diterima saat PO disetujui atau sebagian_terpenuhi.

stateDiagram-v2
  direction TB
  [*] --> draft: Buyer simpan
  [*] --> diajukan: Buyer ajukan langsung
  draft --> diajukan: Ajukan, nomor PO terbit
  draft --> dibatalkan: Buyer batalkan
  diajukan --> dibatalkan: Buyer batalkan atau petugas tolak
  diajukan --> disetujui: Petugas setujui
  disetujui --> sebagian_terpenuhi: Serah terima pertama, alokasi lain belum
  disetujui --> dalam_proses: Semua alokasi sudah diterima
  sebagian_terpenuhi --> dalam_proses: Alokasi terakhir diterima
  dalam_proses --> dikirim: Pengiriman dibuat
  dikirim --> selesai: Buyer konfirmasi
  selesai --> [*]
  dibatalkan --> [*]
  • Status dihitung dari jumlah alokasi yang selesai, bukan dari kg yang diterima. Lihat O3.
  • Tidak ada status lanjutan dari dikirim selain selesai. Status pengiriman berjalan sendiri. Lihat O6.

3. Satu PO, dua petani

Contoh PO 100 kg. Urutan kejadian di gudang dan di meja manager menentukan nasib PO.

sequenceDiagram
  autonumber
  participant B as Buyer
  participant K as Petugas
  participant M as Manager
  participant A as Petani A
  participant C as Petani B
  participant G as Gudang
  participant S as Status PO
  B->>K: Ajukan PO 100 kg
  K->>B: Disetujui, notif WA
  M->>A: Alokasi 60 kg, notif WA
  alt Manager lebih cepat
    M->>C: Alokasi 40 kg
    A->>G: Antar 60 kg
    G->>S: sebagian_terpenuhi
    C->>G: Antar 40 kg
    G->>S: dalam_proses, 100 kg
  else Gudang lebih cepat
    A->>G: Antar 60 kg
    G->>S: dalam_proses, 60 kg
    M--xC: Alokasi 40 kg ditolak
  end
  par Pengiriman berjalan
    S->>B: dikirim
  and Buyer bisa langsung menutup
    B->>S: selesai, barang belum tentu tiba
  end
  • Cabang kedua terjadi bila manager belum mengalokasikan seluruh 100 kg saat serah terima pertama dicatat.
  • Blok par terakhir sudah terjadi di produksi pada dua PO. Lihat O6.

4. Titik overlap

Tempat dua aktivitas, dua role, atau dua PO menyentuh data yang sama pada waktu yang sama. Sebagian memang dirancang begitu. Sebagian lain bisa menghasilkan data yang tidak konsisten.

4 sesuai desain 4 perlu dicek 1 celah
O1

Budidaya tidak berhenti saat PO berjalan

Sesuai desain
PetaniPetugas Lapang

Petani terus menambah data tanam dan laporan kondisi, lewat web maupun bot WhatsApp (n8n). Data tanam baru masuk berstatus menunggu dan baru bisa dialokasikan setelah diverifikasi. Kapasitas yang bisa dialokasikan ke PO berubah selama PO berjalan.

Api/TanamController.php:57 · Petani/TanamController.php:57
O2

Alokasi dan serah terima berjalan bergantian

Sesuai desain
ManagerPetugas Gudang

Manager boleh menambah alokasi selama PO disetujui atau sebagian_terpenuhi. Gudang bisa sudah menerima panen petani A saat manager baru mengalokasikan petani B.

Petugas/PreOrderController.php:110 (alokasi)
O3

PO terkunci di dalam_proses sebelum kuantitas terpenuhi

Perlu dicek
ManagerPetugas Gudang

Status dihitung dari jumlah alokasi, bukan kuantitas PO. Jika semua alokasi yang ada sudah diserahterimakan, PO langsung dalam_proses walaupun total alokasi masih di bawah pesanan. Setelah itu alokasi baru ditolak dan PO dikirim kurang.

Services/StokService.php:42–56
O4

Satu serah terima per alokasi, kekurangan hilang

Perlu dicek
PetaniPetugas Gudang

Setiap alokasi hanya bisa diserahterimakan sekali dan langsung ditandai selesai berapa pun kg yang diterima. Petani yang dialokasikan 60 kg lalu menyerahkan 40 kg tidak bisa menyusulkan sisanya. Sisa 20 kg juga tidak kembali ke kebutuhan PO, karena sisa kebutuhan dihitung dari kg alokasi.

SerahTerimaController.php:28, :81 · StokService::sisaKebutuhanPO
O5

Beberapa PO berebut estimasi panen yang sama

Sesuai desain
ManagerBuyer lain

Sisa estimasi panen per lahan dihitung dari semua alokasi komoditas yang sama, lintas PO. PO yang dialokasikan lebih dulu mengambil kapasitas, tanpa antrian atau prioritas. Catatan: jika lahan tidak punya data tanam terverifikasi, pengecekan kapasitas dilewati di server. Pembatasnya hanya dropdown di form.

Petugas/PreOrderController.php:133–149
O6

PO ditutup saat barang masih di gudang

Perlu dicek
BuyerPetugas Distribusi

Status PO dan status pengiriman tidak saling mengunci. Buyer bisa menandai selesai begitu PO dikirim, walaupun pengiriman masih disiapkan.

Di database produksi: PO-BUY-202604-00002 dan -00003 sudah selesai dengan pengiriman masih disiapkan. PO-BUY-202604-00001 selesai tanpa data pengiriman sama sekali.
Buyer/PreOrderController.php:129–133
O7

Hanya satu pengiriman per PO

Sesuai desain
Petugas Distribusi

Pengiriman hanya bisa dibuat saat PO dalam_proses dan belum punya pengiriman. Pengiriman bertahap (dua truk atau dua jadwal) belum didukung. Total kg diambil otomatis dari semua serah terima.

PengirimanController.php:20–21
O8

Wewenang persetujuan tumpang tindih

Perlu dicek
LapangGudangDistribusiManager

Setujui/tolak PO dan verifikasi tanam terbuka untuk semua role petugas dan manager, termasuk gudang dan distribusi. Notifikasi PO baru hanya dikirim ke petugas lapang. Sistem tidak menentukan siapa yang seharusnya menyetujui.

routes/web.php:117 · Petugas/PreOrderController.php:71, :88
O9

Batas koperasi tidak ditegakkan di aksi petugas

Celah
Petugas koperasi AData koperasi B

Middleware koperasi.scope hanya memastikan user punya koperasi_id dan tidak memfilter data. Daftar PO sudah difilter, tapi halaman detail, setujui, tolak, dan alokasi menerima PO koperasi mana pun jika ID-nya diketahui. Daftar verifikasi tanam juga menampilkan tanam semua koperasi.

EnsureKoperasiScope.php:24 · Petugas/PreOrderController.php:40–110 · TanamVerifikasiController.php:12