Exclusive Gateway (XOR)
Exclusive Gateway adalah gateway yang paling sering digunakan dalam BPMN. Ia merepresentasikan titik keputusan di mana tepat satu jalur yang akan diambil dari beberapa kemungkinan — berdasarkan kondisi yang dievaluasi pada saat proses berjalan.
Simbol: Belah ketupat dengan tanda X di tengah, atau belah ketupat kosong (tanpa simbol)
Dibaca sebagai: "Salah satu dari..." / "Hanya jika..."
Nama lain: XOR Gateway, Data-Based Exclusive Gateway
Cara Kerja
Exclusive Split (Diverging / Percabangan)
Ketika proses mencapai Exclusive Split, engine mengevaluasi kondisi pada setiap jalur keluar secara berurutan. Jalur pertama yang kondisinya bernilai true adalah jalur yang diaktifkan. Jalur lain diabaikan.
[Setujui Kredit]
↗ (jika skor ≥ 700)
[Evaluasi Skor] ──◇─→ [Review Manual]
↘ (jika skor 500–699)
[Tolak Kredit]
(jika skor < 500) [default]
Prinsip "tepat satu": Meskipun beberapa kondisi secara teoritis bisa bernilai true sekaligus, Exclusive Gateway hanya mengambil jalur pertama yang true. Urutkan kondisi dari yang paling spesifik ke paling umum.
Exclusive Join (Converging / Penggabungan)
Ketika proses mencapai Exclusive Join, ia langsung melanjutkan begitu satu token tiba — tanpa menunggu jalur lain. Setiap token yang masuk menghasilkan satu token baru yang keluar.
[Jalur A: Disetujui] ──┐
◇──→ [Arsip Dokumen]
[Jalur B: Ditolak] ──┘
Baik dari jalur A maupun B, proses akan langsung melanjutkan ke "Arsip Dokumen" begitu salah satu selesai.
Kondisi (Condition Expression)
Setiap Sequence Flow keluar dari Exclusive Split harus memiliki kondisi, kecuali jalur default.
Format Kondisi
Kondisi ditulis sebagai ekspresi yang menghasilkan true atau false. Bergantung pada BPMS:
| BPMS | Bahasa Kondisi | Contoh |
|---|---|---|
| Camunda 7 | JUEL / FEEL | ${skorKredit >= 700} |
| Camunda 8 | FEEL | = skorKredit >= 700 |
| Flowable | JUEL | ${status == 'DISETUJUI'} |
| Activiti | JUEL | ${jumlah > 10000000} |
Contoh Kondisi yang Baik
Jalur "Disetujui Otomatis": ${skorKredit >= 700 && rasioDBR < 0.3}
Jalur "Review Manual": ${skorKredit >= 500 && skorKredit < 700}
Jalur "Ditolak": default
Default Flow
Selalu definisikan default flow. Default flow adalah jalur yang diambil jika tidak ada kondisi lain yang true. Ditandai dengan garis kecil miring (slash) di pangkal Sequence Flow.
Tanpa default flow, proses akan berhenti (stuck) jika tidak ada kondisi yang terpenuhi — ini adalah bug yang sulit dideteksi.
Aturan Penamaan Exclusive Gateway
Label Gateway
Format yang direkomendasikan: pertanyaan yang jawabannya menentukan jalur.
| Baik ✅ | Kurang Baik ❌ |
|---|---|
Skor kredit memenuhi syarat? | Gateway 1 |
Status verifikasi? | Cek status |
Nilai pengajuan melebihi batas? | Exclusive Gateway |
Dokumen lengkap? | Kondisi |
Label Sequence Flow Keluar
Setiap jalur keluar harus memiliki label yang merupakan jawaban dari pertanyaan gateway:
Gateway: "Dokumen lengkap?"
→ "Ya" → [Proses Pengajuan]
→ "Tidak" → [Minta Kelengkapan]
→ "Tidak dapat diverifikasi" (default) → [Eskalasi Manual]
Gateway: "Status persetujuan?"
→ "Disetujui" → [Proses Pencairan]
→ "Ditolak" → [Kirim Surat Penolakan]
→ "Perlu Revisi" → [Kembalikan ke Pemohon]
Kapan Menggunakan Exclusive Gateway
Gunakan Exclusive Gateway ketika:
✅ Ada dua atau lebih jalur yang mungkin, tapi hanya satu yang akan diambil
✅ Keputusan dibuat berdasarkan data/variabel yang tersedia di proses
✅ Kondisi bersifat mutually exclusive (tidak tumpang tindih)
✅ Menggabungkan jalur-jalur yang berasal dari Exclusive Split
Jangan gunakan ketika:
❌ Beberapa jalur bisa aktif sekaligus → pakai Inclusive Gateway
❌ Semua jalur harus aktif → pakai Parallel Gateway
❌ Keputusan bergantung pada event yang terjadi → pakai Event-Based Gateway
❌ Hanya ada satu jalur keluar → tidak perlu gateway
Kesalahan Paling Umum
Kesalahan 1: XOR Join setelah Parallel Split
❌ SALAH:
[Start] → [AND Split: ◇+] → [Task A]
→ [Task B]
[Task A] ──┐
◇X──→ [Task C] ← XOR Join tidak tepat di sini!
[Task B] ──┘
Jika Task A dan Task B berjalan paralel, maka ada dua token yang akan tiba di XOR Join. XOR Join tidak menunggu — ia akan langsung melanjutkan dua kali, sehingga "Task C" dieksekusi dua kali.
Solusi: Gunakan Parallel Join untuk menggabungkan jalur yang berasal dari Parallel Split.
✅ BENAR:
[Start] → [AND Split: ◇+] → [Task A]
→ [Task B]
[Task A] ──┐
◇+──→ [Task C] ← Parallel Join yang benar
[Task B] ──┘
Kesalahan 2: Kondisi yang Tumpang Tindih
❌ SALAH:
Gateway: "Nilai pinjaman?"
→ "Di atas 100 juta": ${nilaiPinjaman > 100000000}
→ "Di atas 50 juta": ${nilaiPinjaman > 50000000} ← Tumpang tindih!
Pinjaman Rp 150 juta memenuhi keduanya. Karena XOR mengambil jalur pertama yang true, "Di atas 50 juta" tidak pernah akan diambil jika "Di atas 100 juta" lebih dulu dievaluasi.
Solusi: Pastikan kondisi saling eksklusif:
✅ BENAR:
→ "Di atas 100 juta": ${nilaiPinjaman > 100000000}
→ "50–100 juta": ${nilaiPinjaman > 50000000 && nilaiPinjaman <= 100000000}
→ "Di bawah 50 juta": default
Kesalahan 3: Tidak Ada Default Flow
Jika kondisi berdasarkan data eksternal atau input pengguna, selalu ada kemungkinan tidak ada kondisi yang true. Tanpa default, proses akan dead end.
Kesalahan 4: Gateway Tanpa Label
Gateway tanpa label memaksa pembaca menebak logika keputusan. Selalu beri label berupa pertanyaan yang jelas.
Perbedaan Gateway Kosong vs Gateway X
Kedua simbol berikut adalah Exclusive Gateway yang sama secara semantik:
| Simbol | Keterangan |
|---|---|
| Belah ketupat kosong ◇ | Exclusive Gateway (notasi ringkas) |
| Belah ketupat dengan X ◇X | Exclusive Gateway (notasi eksplisit) |
Beberapa tool (Camunda, Signavio) menggunakan tanda X secara default. Tool lain menggunakan diamond kosong. Keduanya valid menurut standar BPMN 2.0.
Rekomendasi: Pilih satu gaya dan konsisten dalam satu diagram/organisasi.
Contoh Lengkap: Proses Persetujuan Pinjaman
[Start: Terima Permohonan]
↓
[Service Task: Hitung Skor Kredit]
↓
◇ "Kategori skor?"
├─ "Prime (≥700)" → [Service Task: Approve Otomatis] → [End: Disetujui]
├─ "Standard (500–699)" → [User Task: Review Analis]
│ ↓
│ ◇ "Keputusan analis?"
│ ├─ "Setuju" → [End: Disetujui]
│ └─ "Tolak" → [End: Ditolak]
└─ "Subprime (<500)" [default] → [Send Task: Kirim Surat Penolakan]
↓
[End: Ditolak]
Selanjutnya: Inclusive Gateway →