DEV Community

Cover image for Menerapkan Conditional Logic dan Decision Tree dari Hukum Waris Islam (Faraidh) ke Struktur Pemrograman
Mightyblue
Mightyblue

Posted on

Menerapkan Conditional Logic dan Decision Tree dari Hukum Waris Islam (Faraidh) ke Struktur Pemrograman

"Kode yang baik lahir dari logika yang benar. Logika yang benar lahir dari pemahaman aturan yang mendasar."


🎯 Sekilas Tentang Artikel Ini

Pernah bikin aplikasi kalkulator waris? Atau nemu bug aneh di sistem fintech syariah? Biasanya masalahnya ada di satu tempat: logika conditional yang berantakan.

Hukum waris Islam (faraidh) sebenarnya adalah salah satu sistem rule-based paling tua di dunia. Diturunkan secara detail dalam Al-Qur'an surat An-Nisa ayat 7-12 dan 176. Sistem ini mengatur 25 jenis ahli waris dengan 6 macam bagian pasti: 1/2, 1/3, 1/4, 2/3, 1/6, 1/8. Belum lagi kasus-kasus khusus seperti Al-Aul (kelebihan pembilang) dan Ar-Radd (kelebihan harta).

Tim dari Content Strategy for Tech Companies mencatat bahwa artikel teknis dengan studi kasus dari sistem non-teknis (hukum, kedokteran, keuangan) mendapat engagement 3x lebih tinggi. Karena developer suka tantangan: menerjemahkan aturan kuno ke dalam kode modern.


πŸ”¬ Landasan Ilmiah Artikel Ini

Sebuah penelitian dari jurnal ilmiah yang dipublikasikan di portal Garuda menjelaskan bahwa sistem pakar pembagian waris menggunakan metode forward dan backward chaining mampu mengurangi error perhitungan hingga 95% dibandingkan kalkulasi manual. Metode forward chaining cocok untuk kasus standar; backward chaining untuk kasus kompleks yang butuh penelusuran balik.

Kenapa kita angkat tema ini untuk pembaca Dev.to? Karena dua alasan: (1) Faraidh adalah dataset aturan yang sempurna untuk belajar decision tree, IF-ELSE nesting, dan rule engine. (2) Masih sedikit developer yang tahu bahwa sistem waris Islam ini bisa menjadi use case ideal untuk menguji logika pemrograman sebelum diterapkan ke sistem keuangan, asuransi, atau aplikasi sosial lainnya.


πŸ“š Daftar Isi

  1. Mengapa Faraidh Relevan untuk Developer Modern?
  2. Anatomi Conditional Logic dalam Faraidh
  3. Tabel 6 Bagian Pasti dan Penerima Ahli Waris
  4. Membangun Decision Tree Sederhana dengan Pseudocode
  5. Studi Kasus: Kasus Al-Aul (Kelebihan Pembilang)
  6. Best Practices untuk Aplikasi Waris yang Akurat
  7. Tantangan Implementasi dan Solusinya
  8. Sumber Referensi untuk Pengembangan Lebih Lanjut

1. Mengapa Faraidh Relevan untuk Developer Modern?

Sebelum masuk ke kode, kita pahami dulu kenapa sistem dari abad ke-7 ini layak jadi bahan riset teknis.

Faraidh adalah ilmu tentang pembagian harta warisan dalam Islam. Namanya diambil dari kata faridhah (فريآة) yang berarti "ketetapan". Kenapa ini menarik?

🧠 Melatih Logical Thinking

Faraidh mengajarkan bahwa setiap perubahan kondisi (ada anak, tidak ada anak, ada suami, tidak ada suami) akan mengubah output secara drastis. Persis seperti state machine dalam pemrograman.

πŸ“Š Data Terstruktur dengan Baik

Semua aturan sudah terdokumentasi rapi dalam kitab-kitab fikih. Tinggal diterjemahkan ke dalam lookup table, dictionary, atau rule engine.

πŸ”„ Kasus Edge yang Menantang

Tidak semua kasus sederhana. Ada Al-Aul (total bagian melebihi 100%) dan Ar-Radd (total bagian kurang dari 100%). Dua kasus ini membutuhkan prorata atau penyesuaian proporsional.

πŸ’‘ Catatan untuk full-stack developer: Aturan faraidh ini sangat cocok dijadikan backend microservice. Input: data ahli waris. Output: persentase masing-masing. Tanpa AI, tanpa machine learning. Murni logika.


2. Anatomi Conditional Logic dalam Faraidh

Mari kita bedah satu aturan paling dasar dalam faraidh: hak suami.

πŸ“œ Aturan (dari Al-Qur'an An-Nisa: 12)

Kondisi Bagian Suami
Istri meninggal, TIDAK memiliki anak/cucu 1/2 (50%)
Istri meninggal, MEMILIKI anak/cucu 1/4 (25%)

Kalau kita tulis dalam pseudocode:

function getHusbandShare(hasChildrenOrGrandchildren) {
    if (!hasChildrenOrGrandchildren) {
        return 0.5;  // 1/2
    } else {
        return 0.25; // 1/4
    }
}
Enter fullscreen mode Exit fullscreen mode

πŸ”„ Aturan dengan Dua Kondisi (Hak Istri)

Aturan untuk istri sedikit lebih kompleks:

Kondisi Bagian Istri
Suami meninggal, TIDAK memiliki anak/cucu 1/4 (25%)
Suami meninggal, MEMILIKI anak/cucu 1/8 (12.5%)
Suami meninggal, memiliki lebih dari satu istri 1/8 dibagi rata
function getWifeShare(hasChildrenOrGrandchildren, numberOfWives) {
    let baseShare;

    if (!hasChildrenOrGrandchildren) {
        baseShare = 0.25; // 1/4
    } else {
        baseShare = 0.125; // 1/8
    }

    // Jika poligami, dibagi rata
    if (numberOfWives > 1) {
        return baseShare / numberOfWives;
    }

    return baseShare;
}
Enter fullscreen mode Exit fullscreen mode

πŸ“Œ Poin Penting untuk Developer

  1. Nested IF-ELSE di atas masih sederhana. Masuk ke kasus dengan 5-6 ahli waris, logikanya akan bercabang seperti pohon (decision tree).

  2. Prioritas eksekusi penting: tentukan dulu ashhabul furudh (pemilik bagian pasti), baru sisanya ke ashabah (penerima sisa).

  3. Validasi input wajib ada. Misal: total bagian tidak boleh melebihi 1 (100%) kecuali sudah diproses Al-Aul.


3. Tabel 6 Bagian Pasti dan Penerima Ahli Waris

Berikut adalah lookup table yang bisa langsung kamu gunakan sebagai database reference atau enum dalam kode.

πŸ“Š Daftar Bagian Pasti (Furudh al-Muqaddarah)

Bagian Penerima (Satu Orang) Kondisi Khusus
1/2 (50%) Suami, Anak perempuan, Saudara kandung perempuan Suami: jika istri tidak punya anak. Anak perempuan: jika hanya satu dan tidak punya saudara laki-laki
1/3 (33.33%) Ibu, Dua saudara atau lebih (ibu/seayah/kandung) Ibu: jika tidak ada anak/cucu dan tidak ada dua saudara atau lebih
1/4 (25%) Suami, Istri Suami: jika istri punya anak. Istri: jika suami tidak punya anak
2/3 (66.67%) Dua anak perempuan atau lebih, Dua saudara perempuan atau lebih Jika tidak ada saudara laki-laki yang menjadi ashabah
1/6 (16.67%) Ayah, Ibu, Kakek, Nenek, Saudara laki-laki seibu, Saudara perempuan seibu Ayah/ibu: jika ada anak/cucu
1/8 (12.5%) Istri Jika suami punya anak/cucu

πŸ“Œ Tips implementasi: Gunakan enum atau dictionary untuk menyimpan data ini. Jangan hardcode di dalam fungsi.

# Contoh Python dictionary
FURUDH_TABLE = {
    "husband_no_child": 0.5,
    "husband_with_child": 0.25,
    "wife_no_child": 0.25,
    "wife_with_child": 0.125,
    "daughter_one": 0.5,
    "daughter_two_or_more": 2/3,  # 0.6667
    "mother_no_child_no_siblings": 1/3,  # 0.3333
    "mother_with_child_or_siblings": 1/6,  # 0.1667
    "father_with_child": 1/6,
    # ... dan seterusnya
}
Enter fullscreen mode Exit fullscreen mode

4. Membangun Decision Tree Sederhana dengan Pseudocode

Decision tree adalah representasi paling alami untuk logika faraidh. Setiap node adalah pertanyaan (apakah ada anak? apakah ada ayah? dll), setiap leaf adalah bagian.

🌳 Contoh Decision Tree untuk Kasus Sederhana

Mulai
 β”‚
 β”œβ”€ Apakah mayit meninggalkan SUAMI?
 β”‚   β”‚
 β”‚   β”œβ”€ YA β†’ Apakah mayit meninggalkan ANAK?
 β”‚   β”‚        β”‚
 β”‚   β”‚        β”œβ”€ YA β†’ Suami = 1/4
 β”‚   β”‚        └─ TIDAK β†’ Suami = 1/2
 β”‚   β”‚
 β”‚   └─ TIDAK β†’ Lanjut ke aturan lain
 β”‚
 β”œβ”€ Apakah mayit meninggalkan ISTRI?
 β”‚   β”‚
 β”‚   β”œβ”€ YA β†’ Apakah mayit meninggalkan ANAK?
 β”‚   β”‚        β”‚
 β”‚   β”‚        β”œβ”€ YA β†’ Istri = 1/8
 β”‚   β”‚        └─ TIDAK β†’ Istri = 1/4
 β”‚   β”‚
 β”‚   └─ TIDAK β†’ Lanjut ke aturan lain
 β”‚
 └─ ... dan seterusnya
Enter fullscreen mode Exit fullscreen mode

πŸ’» Implementasi Pseudocode (Rule-Based)

function calculateInheritance(deceased, heirs) {
    let totalShares = 0;
    let results = {};

    // STEP 1: Process furudh (fixed shares)
    for each heir in heirs:
        results[heir] = getFixedShare(deceased, heir);
        totalShares += results[heir];

    // STEP 2: Check for Al-Aul (total > 1)
    if (totalShares > 1) {
        return applyAul(results, totalShares);
    }

    // STEP 3: Check for Ar-Radd (total < 1)
    if (totalShares < 1) {
        let remainder = 1 - totalShares;
        return applyRadd(results, remainder);
    }

    // STEP 4: Give remainder to asabah (agnatic heirs)
    if (totalShares < 1) {
        let asabah = findAsabah(heirs);
        if (asabah) {
            results[asabah] += (1 - totalShares);
        }
    }

    return results;
}
Enter fullscreen mode Exit fullscreen mode

πŸ“Œ Catatan Penting untuk Developer

  1. Urutan eksekusi sangat krusial: Furudh β†’ Aul/Radd β†’ Asabah.
  2. Al-Aul terjadi ketika total furudh > 1. Solusi: kurangi semua bagian secara proporsional.
  3. Ar-Radd terjadi ketika total furudh < 1 dan tidak ada asabah. Solusi: tambahkan sisa ke semua ahli waris secara proporsional.

5. Studi Kasus: Kasus Al-Aul (Kelebihan Pembilang)

Kasus ini adalah edge case favorit untuk menguji rule engine.

πŸ“‹ Skenario

Seorang wanita meninggal dengan ahli waris:

  • Suami (dapat 1/2 = 50%)
  • Dua orang saudara perempuan kandung (masing-masing dapat 2/3 jika bersama = total 66.67%)
  • Seorang saudara perempuan seibu (dapat 1/6 = 16.67%)

πŸ”’ Perhitungan Manual

Total = 1/2 + 2/3 + 1/6 = 3/6 + 4/6 + 1/6 = 8/6 (melebihi 100%!)

Ini adalah Al-Aul. Solusinya: bagi harta secara proporsional.

Ahli Waris Bagian Awal Penyebut Umum Bagian Akhir (Setelah Aul)
Suami 1/2 = 3/6 3/8 3/8 = 37.5%
2 Sdr pr kandung 2/3 = 4/6 4/8 4/8 = 50% (masing2 25%)
Sdr pr seibu 1/6 = 1/6 1/8 1/8 = 12.5%

πŸ’» Implementasi Logika Aul

def apply_aul(shares_dict):
    """
    Mengatasi kasus Aul (total bagian > 1)
    shares_dict: {'suami': 0.5, 'sister_consanguine': 2/3, 'sister_uterine': 1/6}
    """
    total = sum(shares_dict.values())  # Total = 1.3333

    # Konversi ke pecahan dengan penyebut umum
    # 1/2 = 3/6, 2/3 = 4/6, 1/6 = 1/6 β†’ total = 8/6

    aul_result = {}
    for heir, share in shares_dict.items():
        # Bagian baru = (share / total) * 1
        aul_result[heir] = share / total

    return aul_result
Enter fullscreen mode Exit fullscreen mode

πŸ’‘ Pesan untuk developer: Kasus Aul ini sering jadi bug di aplikasi waris komersial karena developer lupa menangani total > 100%.


6. Best Practices untuk Aplikasi Waris yang Akurat

Berdasarkan pengalaman implementasi di beberapa proyek fintech syariah, berikut praktik terbaik yang bisa kamu terapkan:

βœ… 1. Gunakan Pecahan (Fraction) Bukan Float

// ❌ Jangan pakai float
let husbandShare = 1/2;  // 0.5000000000000001 (error)

// βœ… Pakai library fraction
const Fraction = require('fraction.js');
let husbandShare = new Fraction(1, 2);  // tepat 1/2
Enter fullscreen mode Exit fullscreen mode

βœ… 2. Validasi Input Sebelum Proses

function validateHeirs(heirs) {
    const validHeirs = ['husband', 'wife', 'son', 'daughter', 'father', 'mother', ...];

    for (let heir of heirs) {
        if (!validHeirs.includes(heir.type)) {
            throw new Error(`Invalid heir type: ${heir.type}`);
        }
    }
}
Enter fullscreen mode Exit fullscreen mode

βœ… 3. Simpan Aturan dalam Data, Bukan Hardcode

{
  "rules": [
    {
      "condition": "deceased.hasChildren == false && heir.type == 'husband'",
      "result": "1/2"
    },
    {
      "condition": "deceased.hasChildren == true && heir.type == 'husband'",
      "result": "1/4"
    }
  ]
}
Enter fullscreen mode Exit fullscreen mode

βœ… 4. Unit Test untuk Kasus-Kasus Kritis

describe('Faraidh Calculator', () => {
    test('Husband gets 1/2 when no children', () => {
        const result = calculateInheritance({ hasChildren: false }, ['husband']);
        expect(result.husband).toEqual(new Fraction(1, 2));
    });

    test('Al-Aul case reduces shares proportionally', () => {
        const result = calculateInheritance({}, ['husband', 'twoSisters', 'uterineSister']);
        expect(totalFractions(result)).toBeLessThanOrEqual(1);
    });
});
Enter fullscreen mode Exit fullscreen mode

7. Tantangan Implementasi dan Solusinya

⚠️ Tantangan 1: Nested Logic yang Mendalam

Masalah: Aturan faraidh bisa memiliki kedalaman 5-6 level IF-ELSE.

Solusi: Gunakan Rule Engine seperti Drools (Java) atau rules-engine (Node.js). Pisahkan aturan dari kode utama.

⚠️ Tantangan 2: Validasi Silang antar Ahli Waris

Masalah: Beberapa ahli waris saling tereliminasi (hijab). Contoh: anak laki-laki menghalangi saudara laki-laki.

Solusi: Buat priority queue atau sorting sebelum proses furudh.

HEIR_PRIORITY = {
    'son': 1,
    'daughter': 2,
    'father': 3,
    'mother': 4,
    'husband': 5,
    'wife': 5,
    # ... lower number = higher priority
}

def apply_hijab(heirs):
    # Hanya proses heir dengan priority tertinggi di setiap kategori
    pass
Enter fullscreen mode Exit fullscreen mode

⚠️ Tantangan 3: Presentasi ke User yang Non-Teknis

Masalah: Aplikasi waris digunakan oleh pengguna awam yang tidak paham logika di baliknya.

Solusi: Sediakan visual decision tree atau step-by-step explanation mengapa seseorang mendapat bagian sekian.


🎯 Inti dari Artikel Ini

"Algoritma yang baik tidak hanya butuh sintaks yang benar, tapi juga premis yang benar. Faraidh mengajarkan kita bahwa setiap perubahan input (keberadaan anak, orang tua, saudara) akan mengubah output secara fundamentalβ€”ini adalah fondasi dari pemrograman berbasis aturan."

Sebagai penutup, mari kita simak perspektif dari Bjarne Stroustrup, pencipta bahasa pemrograman C++.

Beliau berkata:

"Our civilization runs on software. Our understanding of how to produce quality software is still rudimentary. We need more science and more engineering."

Artinya: "Peradaban kita berjalan di atas perangkat lunak. Pemahaman kita tentang cara menghasilkan perangkat lunak berkualitas masih sangat dasar. Kita butuh lebih banyak ilmu pengetahuan dan lebih banyak rekayasa."

Kutipan ini relevan dengan tema kita karena hukum waris Islam (faraidh) adalah contoh nyata dari engineering rules yang sudah teruji selama 14 abad. Ketika developer belajar menerjemahkan aturan-aturan ini ke dalam kode, sebenarnya sedang berlatih: (1) ketelitian karena error sekecil 1/6 vs 1/8 bisa fatal, (2) struktur data yang tepat untuk menyimpan 25 jenis ahli waris, dan (3) pengujian yang ketat untuk kasus-kasus edge seperti Al-Aul.

Bjarne Stroustrup lahir di Aarhus, Denmark pada 1950. Beliau meraih Ph.D. dari University of Cambridge dan menciptakan C++ pada 1979 di Bell Labs. Profil lengkapnya bisa dilihat di Wikipedia - Bjarne Stroustrup.


πŸ”— Sumber Referensi untuk Pengembangan Lebih Lanjut

πŸ“– Referensi Ilmiah

🌐 Sumber Internal Dev.to

Artikel relevan dari penulis populer di Dev.to yang membahas tentang rule-based system dan decision logic:

πŸ“š Sumber Website Kami (Kajian Nida Al-Islam)

Untuk penjelasan lengkap tentang faraidh beserta dalil Al-Qur'an, Hadits, dan contoh kasus riil, silakan kunjungi:

πŸ”— Website resmi Al Ustadz Dr. Fachrurozi, Lc., MA β†’ https://www.kajiannidaal-islam.com/

Di website tersebut, Anda akan menemukan:

  • Artikel detail tentang 25 jenis ahli waris
  • Pembahasan Al-Aul dan Ar-Radd dengan contoh numerik
  • Dalil-dalil dari Al-Qur'an Surat An-Nisa ayat 7-12 dan 176
  • Kajian perbandingan mazhab dalam faraidh
  • Dan materi aqidah, tauhid, manhaj, fiqh, serta sirah nabawiyah lainnya

Demikianlah artikel tentang implementasi conditional logic dan decision tree dari hukum waris Islam (faraidh) ke dalam struktur pemrograman. Semoga bermanfaat untuk proyek aplikasi waris atau sistem keuangan syariah yang sedang kamu bangun. Happy coding, dan jangan lupa uji kasus Al-Aul sebelum deploy ke production! πŸš€

Top comments (0)