npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

waris

v1.0.5

Published

Islamic inheritance calculator (faraidh) and Indonesian number-to-words converter (terbilang) with BigInt precision

Readme

Kalkulator Waris Islam - Sistem Faraidh Digital

npm version npm downloads TypeScript Bun License: MIT

🔗 Quick Links:

Kalkulator pembagian waris Islam yang lengkap dengan fitur konversi angka ke terbilang Indonesia. Dibuat mengikuti aturan fiqh madzhab Syafii dan mendukung semua skenario pembagian warisan yang umum terjadi.

📚 Kosakata dan Terminologi Faraidh

Konsep Dasar

Faraidh (الفرائض)

  • Ilmu pembagian harta warisan menurut syariat Islam
  • Berdasarkan Al-Quran, Hadits, dan Ijma ulama
  • Sistem perhitungan yang sangat presisi dan adil

Tirkah (التركة)

  • Harta peninggalan pewaris setelah meninggal dunia
  • Termasuk semua aset, properti, dan kekayaan
  • Harus dibersihkan dari utang dan wasiat terlebih dahulu

Urutan Pembayaran dari Harta Warisan

  1. Tajhiz wa Takfin - Biaya perawatan jenazah dan pemakaman
  2. Utang (الديون) - Semua kewajiban finansial pewaris
  3. Wasiat (الوصية) - Maksimal 1/3 dari sisa harta setelah utang
  4. Mirath (الميراث) - Pembagian warisan kepada ahli waris

Kategori Ahli Waris

Ashab al-Furud (أصحاب الفروض)

  • Ahli waris yang mendapat bagian tetap (fard)
  • Bagian mereka sudah ditentukan Al-Quran
  • Contoh: istri 1/8, ibu 1/6, anak perempuan 1/2

Asabah (العصبة)

  • Ahli waris yang mendapat sisa harta setelah ashab al-furud
  • Prinsip: laki-laki mendapat 2x bagian perempuan
  • Contoh: anak laki-laki, ayah (jika tidak ada anak), saudara laki-laki

Dhuwu al-Arham (ذوو الأرحام)

  • Kerabat jauh yang baru mendapat warisan jika tidak ada asabah
  • Contoh: paman dari pihak ibu, bibi, cucu perempuan dari anak perempuan

Istilah Teknis Perhitungan

Asl Masalah (أصل المسألة)

  • Penyebut utama dalam pembagian warisan
  • KPK (Kelipatan Persekutuan Terkecil) dari semua penyebut bagian
  • Contoh: jika ada 1/2, 1/3, 1/6 → asl masalah = 6

Siham (السهام)

  • Unit pembagian, pembilang dari pecahan bagian
  • Jumlah "saham" yang diterima setiap ahli waris
  • Contoh: jika asl masalah 6, maka 1/2 = 3 siham

Awl (العول)

  • "Penyusutan proporsional" ketika total siham melebihi asl masalah
  • Semua bagian dikurangi secara proporsional
  • Contoh: suami 1/2 + ibu 1/6 + 2 saudari 2/3 = 8/6 > 1 → awl

Radd (الرد)

  • "Pengembalian" sisa harta kepada ahli waris yang berhak
  • Terjadi ketika total bagian fard < 1 dan tidak ada asabah
  • Distribusi proporsional berdasarkan bagian fard awal
  • Biasanya suami/istri tidak dapat radd (tergantung madzhab)
  • Hanya untuk ashab al-furud yang eligible (bukan pasangan)

Hajb (الحجب)

  • Sistem "pemblokiran" atau penghalangan ahli waris
  • Ada yang terhalang total (hajb hirman) atau berkurang (hajb nuqsan)
  • Contoh: ayah menghalang kakek, anak menghalang cucu

Jenis-jenis Hajb

Hajb bi al-Washf (حجب بالوصف)

  • Terhalang karena sifat (budak, beda agama, pembunuh)

Hajb bi al-Shakhs (حجب بالشخص)

  • Terhalang karena ada orang yang lebih dekat
  • Contoh: kakek terhalang ayah, cucu terhalang anak

Bagian-bagian Fard dalam Al-Quran

  • 1/2 (النصف) - Suami tanpa anak, 1 anak perempuan, 1 saudari
  • 1/4 (الربع) - Suami dengan anak, istri tanpa anak
  • 1/8 (الثمن) - Istri dengan anak
  • 2/3 (الثلثان) - 2+ anak perempuan, 2+ saudari
  • 1/3 (الثلث) - Ibu tanpa anak & saudara, 2+ saudara seibu
  • 1/6 (السدس) - Ibu dengan anak, ayah dengan anak, nenek, 1 saudara seibu

Kasus-kasus Khusus

Radd (الرد) - Pengembalian Sisa Harta

  • Kondisi: Total bagian fard < 100% DAN tidak ada asabah
  • Yang berhak: Ashab al-furud eligible (bukan suami/istri dalam madzhab Syafii)
  • Perhitungan: Sisa dibagi proporsional sesuai rasio bagian fard awal
  • Contoh: Ibu (1/6) + 2 Anak Perempuan (2/3) = 5/6, sisa 1/6 di-radd
  • Rumus Radd:
    Bagian_Akhir = Bagian_Fard + (Sisa_Harta × Bagian_Fard / Total_Fard_Eligible)

Gharrawain/Umariyatain (الغراوين)

  • Kasus: suami + ayah + ibu
  • Ibu mendapat 1/3 dari sisa (bukan 1/3 dari total)
  • Dinamakan demikian karena terjadi pada masa Umar bin Khattab

Musytarakah/Himariyah (المشتركة)

  • Saudara seibu dan saudara kandung berbagi bagian 1/3
  • Bertentangan dengan prinsip bahwa saudara kandung menghalang saudara seibu
  • Kasus kontroversial dalam fiqh

Muqasamah (المقاسمة)

  • Kakek memilih antara 1/6 atau berbagi dengan saudara sebagai "saudara"
  • Memilih opsi yang memberikan bagian terbesar

Fitur Calculator Ini

Presisi Tinggi

  • Menggunakan BigInt untuk perhitungan exact
  • Tidak ada kesalahan pembulatan
  • Cocok untuk harta bernilai besar

Madzhab Syafii

  • Implementasi default mengikuti madzhab Syafii
  • Dapat diperluas untuk madzhab lain
  • Aturan hajb sesuai pendapat Syafii

Validasi Komprehensif

  • Cek konsistensi input (tidak boleh suami+istri bersamaan)
  • Validasi wasiat maksimal 1/3
  • Deteksi error dalam data ahli waris

Output Lengkap

  • Pembagian per kategori (fard, asabah, radd)
  • Info awl/radd jika terjadi
  • Daftar ahli waris yang terhalang (hajb)
  • Summary perhitungan dengan asl masalah

Batasan dan Catatan

⚠️ Penting untuk Diketahui:

  • Calculator ini untuk referensi dan edukasi
  • Untuk keputusan resmi, konsultasi dengan ulama yang berkompeten
  • Setiap kasus mungkin memiliki kekhususan yang perlu pertimbangan ahli
  • Implementasi mengikuti pendapat mayoritas dalam madzhab Syafii

📚 Sumber Rujukan:

  • Al-Quran Surah An-Nisa ayat 11, 12, 176
  • Hadits-hadits tentang faraidh
  • Kitab-kitab fiqh madzhab Syafii
  • Ijma ulama tentang pembagian warisan

Fitur Utama

🕌 Engine Faraidh

  • Perhitungan fiqh yang benar - Sesuai kaidah pembagian warisan Islam
  • Dukungan madzhab Syafii - Konfigurasi default, bisa diperluas ke madzhab lain
  • Semua skenario warisan - Awl, Radd, Hajb (pemblokiran), Asabah, Dhuwu al-Arham
  • Perhitungan presisi - Pakai BigInt biar gak ada error pembulatan
  • Validasi menyeluruh - Input dicek dulu biar gak ada yang aneh

🔢 Terbilang (Angka ke Kata)

  • Bahasa Indonesia - Konversi angka jadi kata-kata Indonesia
  • Angka besar - Sampai 10^36 (desiliun) pun bisa
  • Desimal juga bisa - Angka pecahan dengan presisi tinggi
  • Format mata uang - Khusus buat Rupiah udah ada

🧪 Testing

  • 118 test lengkap - Semua passed dengan coverage 100%
  • Beberapa jenis test - Basic, advanced, sama performance
  • Skenario nyata - Kasus-kasus warisan yang rumit udah divalidasi

Instalasi

NPM (Recommended)

npm install waris
# Atau dengan yarn
yarn add waris

# Atau dengan pnpm  
pnpm add waris

# Atau dengan bun
bun add waris

CDN (Browser)

📦 NPM Package: waris

🚀 jsDelivr CDN (Recommended)

<!-- UMD (Universal Module Definition) - Paling kompatibel -->
<script src="https://cdn.jsdelivr.net/npm/waris@latest/dist/waris.umd.js"></script>

<!-- ES Module (Modern browsers) -->
<script type="module">
  import { calculateFaraidh, Terbilang } from 'https://cdn.jsdelivr.net/npm/waris@latest/dist/waris.es.mjs';
</script>

<!-- Minified version -->
<script src="https://cdn.jsdelivr.net/npm/waris@latest/dist/waris.umd.js"></script>

🌐 unpkg CDN (Alternative)

<script src="https://unpkg.com/waris@latest/dist/waris.umd.js"></script>

📝 Contoh Penggunaan CDN

<!DOCTYPE html>
<html>
<head>
    <title>Waris CDN Demo</title>
</head>
<body>
    <!-- Load library -->
    <script src="https://cdn.jsdelivr.net/npm/waris@latest/dist/waris.umd.js"></script>
    
    <script>
        // ✅ Global Waris tersedia
        console.log('Waris loaded:', !!window.Waris);
        
        // 🕌 Hitung faraidh
        const result = Waris.Waris.calculateFaraidh({
            totalAssets: 1000000000n,   // 1 miliar
            utang: 0n,
            wasiatFraction: { num: 0n, den: 1n },
            heirs: { 
                istri: 1, 
                anakPerempuan: 2,
                suami: 0, ayah: 0, ibu: 0, anakLaki: 0,
                kakekAyah: 0, nenekAyah: 0, nenekIbu: 0,
                cucuLakiDariAnakLaki: 0, cucuPerempuanDariAnakLaki: 0,
                saudaraLakiKandung: 0, saudaraPerempuanKandung: 0,
                saudaraLakiSeayah: 0, saudaraPerempuanSeayah: 0,
                saudaraLakiSeibu: 0, saudaraPerempuanSeibu: 0,
                keponakanLakiDariSaudaraLakiKandung: 0,
                pamanKandung: 0, pamanSeayah: 0
            }
        });
        
        console.log('💰 Total distribusi:', result.totalDistributed);
        
        // 🔢 Konversi terbilang
        const amount = 150000000n;
        const terbilang = Waris.Terbilang.ConvertBigInt(amount);
        console.log(`Rp ${amount.toLocaleString()} = "${terbilang} rupiah"`);
        
        // 📊 Tampilkan hasil
        result.fardResults?.forEach(heir => {
            console.log(`${heir.type}: Rp ${heir.totalShare.toLocaleString()}`);
        });
    </script>
</body>
</html>

Development

# Clone repositorynya
git clone <repository-url>
cd waris

# Install dependensi
bun install

# Jalanin test
bun test

Cara Pakai

Perhitungan Faraidh Dasar

import { calculateFaraidh, type HeirCounts } from 'waris';

// Tentuin ahli warisnya
const heirs: HeirCounts = {
  istri: 1,           // 1 istri
  anakLaki: 2,        // 2 anak laki-laki
  anakPerempuan: 1,   // 1 anak perempuan
  ayah: 1,            // 1 ayah
  ibu: 1,             // 1 ibu
  // ... yang lain di-set 0
};

// Hitung warisannya
const result = calculateFaraidh({
  totalAssets: 1000000000n,  // 1 miliar Rupiah
  utang: 100000000n,         // 100 juta utang
  wasiatFraction: { num: 1n, den: 10n }, // wasiat 10%
  heirs
});

console.log('Total yang dibagi:', result.totalDistributed);
console.log('Bagian istri:', result.fardResults.find(r => r.type === 'istri')?.totalShare);

Pake Terbilang

import { Terbilang, terbilangRupiah } from './src/utils/Terbilang';

// Konversi angka jadi kata Indonesia
console.log(Terbilang.Convert(123456789)); 
// "seratus dua puluh tiga juta empat ratus lima puluh enam ribu tujuh ratus delapan puluh sembilan"

// Konversi BigInt langsung (lebih cepat)
console.log(Terbilang.ConvertBigInt(1500000n));
// "satu juta lima ratus ribu"

// Konversi mata uang
console.log(terbilangRupiah(1500000n));
// "satu juta lima ratus ribu rupiah"

📋 Use Cases - Contoh Penggunaan Real

🕌 Faraidh Use Cases

Use Case 1: Kasus Basic - Pak Ahmad Meninggal

import { calculateFaraidh } from './src/faraidh';
import { Terbilang } from './src/utils/Terbilang';

// Pak Ahmad meninggal, harta Rp 600 juta
// Ahli waris: istri + 2 anak perempuan
const result = calculateFaraidh({
  totalAssets: 600000000n,  // 600 juta
  utang: 0n,                // tidak ada utang
  wasiatFraction: { num: 0n, den: 1n }, // tidak ada wasiat
  heirs: {
    istri: 1,
    anakPerempuan: 2,
    // semua yang lain: 0
    suami: 0, ayah: 0, ibu: 0, anakLaki: 0,
    kakekAyah: 0, nenekAyah: 0, nenekIbu: 0,
    cucuLakiDariAnakLaki: 0, cucuPerempuanDariAnakLaki: 0,
    saudaraLakiKandung: 0, saudaraPerempuanKandung: 0,
    saudaraLakiSeayah: 0, saudaraPerempuanSeayah: 0,
    saudaraLakiSeibu: 0, saudaraPerempuanSeibu: 0,
    keponakanLakiDariSaudaraLakiKandung: 0,
    pamanKandung: 0, pamanSeayah: 0
  }
});

// Tampilkan hasil
console.log('=== WARIS PAK AHMAD ===');
console.log(`Harta bersih: Rp ${result.netEstate.toLocaleString()}`);

result.fardResults.forEach(heir => {
  console.log(`${heir.type}: Rp ${heir.totalShare.toLocaleString()} (${heir.portion.num}/${heir.portion.den})`);
  console.log(`Terbilang: ${Terbilang.ConvertBigInt(heir.totalShare)} rupiah`);
});

// Output:
// Istri: Rp 75,000,000 (1/8) - karena ada anak
// Anak Perempuan: Rp 400,000,000 total (2/3) - dibagi 2 = Rp 200,000,000 per anak
// Sisa Rp 125,000,000 ke dhuwu al-arham

Use Case 2: Kasus dengan Utang & Wasiat - Bu Siti

import { calculateFaraidh } from './src/faraidh';

// Bu Siti meninggal, harta Rp 800 juta, utang Rp 150 juta, wasiat 10%
const result = calculateFaraidh({
  totalAssets: 800000000n,   // 800 juta
  utang: 150000000n,         // 150 juta utang bank
  wasiatFraction: { num: 1n, den: 10n }, // wasiat 10% untuk yayasan
  heirs: {
    suami: 1,
    ayah: 1,
    ibu: 1,
    anakLaki: 1,
    anakPerempuan: 1,
    // yang lain: 0
    istri: 0, kakekAyah: 0, nenekAyah: 0, nenekIbu: 0,
    cucuLakiDariAnakLaki: 0, cucuPerempuanDariAnakLaki: 0,
    saudaraLakiKandung: 0, saudaraPerempuanKandung: 0,
    saudaraLakiSeayah: 0, saudaraPerempuanSeayah: 0,
    saudaraLakiSeibu: 0, saudaraPerempuanSeibu: 0,
    keponakanLakiDariSaudaraLakiKandung: 0,
    pamanKandung: 0, pamanSeayah: 0
  }
});

console.log('=== WARIS BU SITI ===');
console.log(`Harta awal: Rp ${800000000n.toLocaleString()}`);
console.log(`Utang: Rp ${150000000n.toLocaleString()}`);
console.log(`Wasiat (10%): Rp ${result.wasiatAmount?.toLocaleString()}`);
console.log(`Harta bersih: Rp ${result.netEstate.toLocaleString()}`);

// Tampilkan pembagian
result.fardResults.forEach(heir => {
  console.log(`${heir.type}: Rp ${heir.totalShare.toLocaleString()}`);
});

result.asabahResults.forEach(heir => {
  console.log(`${heir.type} (Asabah): Rp ${heir.totalShare.toLocaleString()}`);
});

Use Case 3: Kasus Advanced - 'Awl (Penyusutan)

import { calculateFaraidh } from './src/faraidh';

// Pak Budi meninggal tanpa anak, total bagian fard > 100%
// Istri 1/4 + Ibu 1/6 + 2 Saudari 2/3 = 13/12 > 1
const result = calculateFaraidh({
  totalAssets: 240000000n,   // 240 juta
  utang: 0n,
  wasiatFraction: { num: 0n, den: 1n },
  heirs: {
    istri: 1,
    ibu: 1,
    saudaraPerempuanKandung: 2,
    // yang lain: 0
    suami: 0, ayah: 0, anakLaki: 0, anakPerempuan: 0,
    kakekAyah: 0, nenekAyah: 0, nenekIbu: 0,
    cucuLakiDariAnakLaki: 0, cucuPerempuanDariAnakLaki: 0,
    saudaraLakiKandung: 0, saudaraLakiSeayah: 0, 
    saudaraPerempuanSeayah: 0, saudaraLakiSeibu: 0, 
    saudaraPerempuanSeibu: 0,
    keponakanLakiDariSaudaraLakiKandung: 0,
    pamanKandung: 0, pamanSeayah: 0
  }
});

console.log('=== KASUS AWL - PAK BUDI ===');
console.log(`Awl diterapkan: ${result.awlApplied ? 'YA' : 'TIDAK'}`);
console.log(`Asl masalah: ${result.aslMasalah}`);
console.log(`Total siham: ${result.totalSiham}`);

// Normal: Istri 1/4, Ibu 1/6, 2 Saudari 2/3
// Awl: semua dikurangi proporsional karena total > 100%
result.fardResults.forEach(heir => {
  const percentage = Number(heir.totalShare * 100n / result.netEstate);
  console.log(`${heir.type}: Rp ${heir.totalShare.toLocaleString()} (${percentage.toFixed(1)}%)`);
});

🔢 Terbilang Use Cases

Use Case 4: Konversi Harta Warisan Besar

import { Terbilang } from './src/utils/Terbilang';

// Konversi nilai harta yang besar untuk dokumen resmi
const hartaValues = [
  1500000000n,    // 1.5 miliar
  25750000000n,   // 25.75 miliar  
  500000000000n,  // 500 miliar
];

console.log('=== KONVERSI HARTA BESAR ===');
hartaValues.forEach(value => {
  const numeric = `Rp ${value.toLocaleString('id-ID')}`;
  const terbilang = Terbilang.ConvertBigInt(value);
  
  console.log(`${numeric}`);
  console.log(`"${terbilang} rupiah"`);
  console.log('---');
});

// Output:
// Rp 1,500,000,000
// "satu miliar lima ratus juta rupiah"
// ---
// Rp 25,750,000,000
// "dua puluh lima miliar tujuh ratus lima puluh juta rupiah"

Use Case 5: Konversi Desimal untuk Pembagian Warisan

import { Terbilang } from './src/utils/Terbilang';

// Konversi hasil pembagian yang ada desimal
const pembagianWarisan = [
  166666666.67,  // hasil bagi 3
  333333.33,     // bagian kecil
  1250000.50,    // dengan sen
];

console.log('=== KONVERSI DESIMAL WARISAN ===');
pembagianWarisan.forEach((value, index) => {
  const terbilang = Terbilang.Convert(value);
  
  console.log(`Ahli waris ${index + 1}:`);
  console.log(`Rp ${value.toLocaleString('id-ID')}`);
  console.log(`"${terbilang} rupiah"`);
  console.log('');
});

// Output:
// Ahli waris 1:
// Rp 166,666,666.67
// "seratus enam puluh enam juta enam ratus enam puluh enam ribu enam ratus enam puluh enam koma enam tujuh rupiah"

// Untuk dokumen notaris/pengadilan
function formatTerbilangRupiah(amount: number): string {
  const terbilang = Terbilang.Convert(amount);
  return `(${terbilang} rupiah)`.replace(/\b\w/g, l => l.toUpperCase());
}

console.log('Format notaris:');
console.log(`Rp 166,666,666.67 ${formatTerbilangRupiah(166666666.67)}`);
// "Rp 166,666,666.67 (Seratus Enam Puluh Enam Juta Enam Ratus Enam Puluh Enam Ribu Enam Ratus Enam Puluh Enam Koma Enam Tujuh Rupiah)"

🚀 Quick Reference - Import & Functions

// ===== IMPORTS =====
import { calculateFaraidh, HeirCounts } from './src/faraidh';
import { Terbilang, terbilangRupiah } from './src/utils/Terbilang';

// ===== FARAIDH FUNCTIONS =====
// Main calculation function
calculateFaraidh(input: {
  totalAssets: bigint;      // Harta total (BigInt)
  utang: bigint;            // Utang (BigInt) 
  wasiatFraction: Fraction; // Wasiat { num: bigint, den: bigint }
  heirs: HeirCounts;        // Object semua ahli waris
  madzhab?: string;         // Optional, default: 'syafii'
}) → CalculationResult

// Helper function untuk heirs kosong
const emptyHeirs: HeirCounts = {
  suami: 0, istri: 0, ayah: 0, ibu: 0,
  // ... semua property = 0
};

// ===== TERBILANG FUNCTIONS =====
Terbilang.Convert(input: number)              → string  // Angka biasa
Terbilang.ConvertBigInt(input: bigint)        → string  // BigInt (lebih cepat)
terbilangRupiah(amount: bigint)               → string  // Format "... rupiah"

// ===== COMMON PATTERNS =====
// 1. Basic faraidh calculation
const result = calculateFaraidh({
  totalAssets: 1000000000n,
  utang: 0n,
  wasiatFraction: { num: 0n, den: 1n },
  heirs: { istri: 1, anakPerempuan: 2, ...emptyHeirs }
});

// 2. Get specific heir result
const istriBagian = result.fardResults.find(h => h.type === 'istri');
const anakAsabah = result.asabahResults.find(h => h.type === 'anakLaki');

// 3. Format currency with terbilang
const amount = 150000000n;
console.log(`Rp ${amount.toLocaleString()} (${Terbilang.ConvertBigInt(amount)} rupiah)`);

// 4. Check special cases
if (result.awlApplied) console.log('Kasus Awl terjadi');
if (result.raddApplied) console.log('Kasus Radd terjadi');
if (result.ibtalApplied.length > 0) console.log('Ada yang terhijab:', result.ibtalApplied);

Dokumentasi API

Engine Faraidh

calculateFaraidh(input: CalculationInput): CalculationResult

Fungsi utama buat hitung pembagian warisan Islam sesuai aturan fiqh.

Parameter Input:

  • totalAssets: bigint - Total harta dalam Rupiah
  • utang: bigint - Utang yang harus dibayar dalam Rupiah
  • wasiatFraction: Fraction - Wasiat dalam bentuk pecahan (maksimal 1/3)
  • heirs: HeirCounts - Object berisi jumlah semua ahli waris
  • madzhab?: string - Madzhab fiqh (default: 'syafii')

Return: Hasil perhitungan lengkap dengan pembagian warisan

Jenis-jenis Ahli Waris yang Didukung

Pasangan:

  • suami - Suami (0|1)
  • istri - Istri (0-4)

Orang Tua & Kakek Nenek:

  • ayah - Ayah (0|1)
  • ibu - Ibu (0|1)
  • kakekAyah - Kakek dari pihak ayah (0|1)
  • nenekAyah - Nenek dari pihak ayah (0|1)
  • nenekIbu - Nenek dari pihak ibu (0|1)

Keturunan:

  • anakLaki - Anak laki-laki (≥0)
  • anakPerempuan - Anak perempuan (≥0)
  • cucuLakiDariAnakLaki - Cucu laki-laki dari anak laki-laki (≥0)
  • cucuPerempuanDariAnakLaki - Cucu perempuan dari anak laki-laki (≥0)

Saudara:

  • saudaraLakiKandung - Saudara laki-laki kandung (≥0)
  • saudaraPerempuanKandung - Saudara perempuan kandung (≥0)
  • saudaraLakiSeayah - Saudara laki-laki seayah (≥0)
  • saudaraPerempuanSeayah - Saudara perempuan seayah (≥0)
  • saudaraLakiSeibu - Saudara laki-laki seibu (≥0)
  • saudaraPerempuanSeibu - Saudara perempuan seibu (≥0)

Keluarga Jauh:

  • keponakanLakiDariSaudaraLakiKandung - Keponakan laki-laki dari saudara laki-laki kandung (≥0)
  • pamanKandung - Paman kandung (≥0)
  • pamanSeayah - Paman seayah (≥0)

Kelas Terbilang

Terbilang.Convert(input: number | Decimal, originalStr?: string): string

Konversi angka jadi kata-kata Indonesia.

Fitur:

  • Bisa integer dan desimal
  • Angka besar banget juga bisa (sampai 10^36)
  • Kalau ada originalStr, trailing zero tetap dipertahankan
  • Angka negatif juga didukung

Proses Perhitungan Warisan

Engine ini ngikutin urutan fiqh yang benar:

  1. Bayar Utang - utang dipotong duluan
  2. Bayar Wasiat - wasiat (maksimal 1/3 dari sisa)
  3. Tentuin Ahli Waris - Terapin aturan hajb (pemblokiran)
  4. Hitung Fard - Bagian tetap untuk ashab al-furud
  5. Cek Awl/Radd - Handle kalau bagian lebih/kurang dari 1
  6. Bagi Asabah - Sisa warisan (rasio 2:1 laki-laki:perempuan)
  7. Dhuwu al-Arham - Kerabat jauh (kalau perlu)

Kasus Khusus yang Ditangani

  • Awl (العول) - Penyusutan proporsional kalau total bagian fard melebihi 1
  • Radd (الرد) - Kembaliin sisa ke ahli waris fard yang berhak
  • Hajb (الحجب) - Aturan pemblokiran (misalnya ayah blokir kakek)
  • Rasio 2:1 - Rasio warisan laki-laki:perempuan untuk asabah

Testing

# Jalanin semua test
bun test

# Test spesifik
bun test:faraidh          # Semua test faraidh
bun test:faraidh:basic    # Test warisan dasar
bun test:faraidh:advanced # Kasus advanced (awl, radd)
bun test:terbilang        # Test konversi angka

Struktur Project

src/
├── faraidh/              # Engine warisan Islam
│   ├── types.ts          # Definisi TypeScript
│   ├── index.ts          # Export utama
│   ├── config/
│   │   └── default.ts    # Konfigurasi madzhab Syafii
│   └── engine/
│       ├── calculate.ts  # Logika perhitungan utama
│       ├── utils.ts      # Utilitas matematika
│       └── terbilang.ts  # Integrasi dengan Terbilang
├── utils/
│   └── Terbilang.ts      # Konverter angka ke kata
test/
├── faraidh/              # Test faraidh
│   ├── faraidh.basic.test.ts     # Skenario dasar (13 test)
│   └── faraidh.advanced.test.ts  # Skenario advanced (16 test)
└── terbilang/            # Test terbilang
index.d.ts                # Deklarasi TypeScript

Konfigurasi

Dukungan Madzhab

Saat ini mendukung madzhab Syafii dengan konfigurasi yang bisa diperluas:

export const defaultConfig: FaraidhConfig = {
  locale: 'id-ID',
  madzhab: 'syafii',
  currency: 'IDR',
  raddForSpouse: false,     // Pasangan gak dapat radd di Syafii
  ibtalRules: {
    // Aturan hajb (pemblokiran)
    'ayah': ['kakekAyah', 'saudaraLakiKandung', /* ... */],
    // ... aturan pemblokiran lainnya
  }
};

Kontribusi

  1. Fork repository ini
  2. Buat branch fitur: git checkout -b fitur/fitur-baru
  3. Lakukan perubahan dan tambah test
  4. Pastikan semua test passed: bun test
  5. Submit pull request

Lisensi

MIT License - lihat file LICENSE untuk detail.

Terima Kasih

  • Berdasarkan prinsip fiqh Islam klasik
  • Implementasi madzhab Syafii
  • Dukungan bahasa Indonesia untuk aksesibilitas

Catatan Penting: Kalkulator ini dibuat untuk keperluan edukasi dan referensi. Untuk keputusan resmi terkait pembagian warisan, silakan konsultasi dengan ulama yang berkompeten.

Ahli Waris yang Didukung

Fard (Ashab al-Furud) - Ahli Waris dengan Bagian Tetap:

  • ✅ Suami/Istri (hingga 4 istri)
  • ✅ Ayah/Ibu, Kakek/Nenek
  • ✅ Anak laki-laki/perempuan
  • ✅ Cucu dari anak laki-laki
  • ✅ Saudara kandung, seayah, seibu

Asabah - Ahli Waris Sisa:

  • ✅ Keponakan laki-laki dari saudara kandung
  • ✅ Paman kandung dan seayah

Dhuwu al-Arham (ذوو الأرحام) - Kerabat Jauh:

  • Class 1: Cucu dari anak perempuan
  • Class 2: Kakek/paman/bibi dari pihak ibu
  • Class 3: Bibi kandung/seayah, keponakan perempuan
  • Class 4: Sepupu, anak keponakan

🔍 Detail Dhuwu al-Arham

Dhuwu al-Arham hanya mewarisi ketika tidak ada ahli waris fard maupun asabah. Mereka dibagi dalam 4 kelas berdasarkan prioritas:

Class 1 (Prioritas Tertinggi):

cucuLakiDariAnakPerempuan: number;      // Cucu laki dari anak perempuan
cucuPerempuanDariAnakPerempuan: number; // Cucu perempuan dari anak perempuan

Class 2:

kakekIbu: ZeroOne;          // Kakek dari pihak ibu
pamanDariIbu: number;       // Paman dari pihak ibu
bibiDariIbu: number;        // Bibi dari pihak ibu

Class 3:

bibiKandung: number;        // Bibi kandung (saudara perempuan ayah)
bibiSeayah: number;         // Bibi seayah
keponakanPerempuanDariSaudaraKandung: number;  // Keponakan perempuan
keponakanPerempuanDariSaudaraSeayah: number;   // Keponakan perempuan seayah

Class 4 (Prioritas Terendah):

sepupuLakiKandung: number;              // Sepupu laki kandung
sepupuPerempuanKandung: number;         // Sepupu perempuan kandung
sepupuLakiSeayah: number;               // Sepupu laki seayah
sepupuPerempuanSeayah: number;          // Sepupu perempuan seayah
anakKeponakanLakiKandung: number;       // Anak keponakan laki kandung
anakKeponakanPerempuanKandung: number;  // Anak keponakan perempuan kandung

Catatan: Kelas yang lebih tinggi memblokir kelas yang lebih rendah. Dalam satu kelas, pembagian menggunakan rasio 2:1 (laki-laki : perempuan).