zakat 0.1.2

A type-safe, comprehensive, and Fiqh-compliant Zakat calculation library. Supports Gold, Silver, Business, Agriculture, Livestock, Professional Income, and Modern Assets (Crypto/Stocks).
Documentation
███████╗ █████╗ ██╗  ██╗ █████╗ ████████╗
╚══███╔╝██╔══██╗██║ ██╔╝██╔══██╗╚══██╔══╝
  ███╔╝ ███████║█████╔╝ ███████║   ██║   
 ███╔╝  ██╔══██║██╔═██╗ ██╔══██║   ██║   
███████╗██║  ██║██║  ██╗██║  ██║   ██║   
╚══════╝╚═╝  ╚═╝╚═╝  ╚═╝╚═╝  ╚═╝   ╚═╝   

Zakat

Crates.io Docs.rs License: MIT

Rust library for Islamic Zakat calculation. Uses rust_decimal for precision.

Features

  • Gold, Silver, Business, Agriculture, Livestock, Mining & Rikaz
  • Stocks, Mutual Funds, Crypto (as liquid assets)
  • Professional Income (Gross/Net)
  • Zakat Fitrah
  • Configurable Nisab thresholds
  • Portfolio aggregation

Install

[dependencies]

zakat = "0.1.2"

rust_decimal = "1.39"

rust_decimal_macros = "1.39"

Usage

Business Zakat

use zakat::{ZakatConfig, CalculateZakat};
use zakat::maal::business::{BusinessAssets, BusinessZakatCalculator};

fn main() {
    let config = ZakatConfig::new(65, 1); // gold $65/g, silver $1/g

    let assets = BusinessAssets::new(
        50000, // cash
        20000, // inventory
        5000,  // receivables
        1000   // debt
    );

    let calc = BusinessZakatCalculator::new(assets, &config).unwrap();
    let result = calc.calculate_zakat(None).unwrap();

    if result.is_payable {
        println!("Zakat: ${}", result.zakat_due);
    }
}

Portfolio

use zakat::{ZakatConfig, ZakatPortfolio, WealthType};
use zakat::maal::precious_metals::PreciousMetal;
use zakat::maal::investments::{InvestmentAssets, InvestmentType};
use zakat::maal::income::{IncomeZakatCalculator, IncomeCalculationMethod};
use rust_decimal_macros::dec;

fn main() {
    let config = ZakatConfig::new(65, 1);

    let portfolio = ZakatPortfolio::new()
        .add_calculator(IncomeZakatCalculator::new(
            5000, 0, IncomeCalculationMethod::Gross, &config
        ).unwrap())
        .add_calculator(PreciousMetal::new(
            100, WealthType::Gold, &config
        ).unwrap())
        .add_calculator_with_debt(InvestmentAssets::new(
            20000, InvestmentType::Crypto, &config
        ).unwrap(), dec!(2000.0));

    let result = portfolio.calculate_total().unwrap();
    println!("Total: ${}", result.total_zakat_due);
}

Custom Nisab

use zakat::ZakatConfig;

let config = ZakatConfig::new(65, 1)
    .with_gold_nisab(87)
    .with_agriculture_nisab(700);

Modules

Module Nisab
maal::precious_metals 85g Gold / 595g Silver
maal::business 85g Gold
maal::income 85g Gold
maal::investments 85g Gold
maal::agriculture 653 kg
maal::livestock Count-based
maal::mining Rikaz: None / Mines: 85g Gold
fitrah N/A

Contributing

  1. Add tests
  2. Use rust_decimal
  3. Run cargo test

Support

GitHub Sponsors Ko-fi Patreon PayPal Saweria

"Those who spend their wealth in the cause of Allah..."Al-Baqarah 2:262

License

MIT