# This file is automatically generated by pyo3_stub_gen
# ruff: noqa: E501, F401

import builtins
import enum
import typing

@typing.final
class BusinessZakat:
    @property
    def cash_on_hand(self) -> builtins.str: ...
    @property
    def inventory_value(self) -> builtins.str: ...
    @property
    def receivables(self) -> builtins.str: ...
    @property
    def receivables_list(self) -> builtins.str: ...
    @property
    def liabilities_due_now(self) -> builtins.str: ...
    @property
    def hawl_satisfied(self) -> builtins.bool: ...
    @property
    def label(self) -> typing.Optional[builtins.str]: ...
    @property
    def _input_errors(self) -> builtins.list[builtins.str]: ...
    def __new__(cls, **kwargs: typing.Any) -> BusinessZakat: ...
    def update(self, kwargs: dict) -> None:
        r"""
        Bulk update fields using keyword arguments
        Example: obj.update(cash_on_hand="100", hawl_satisfied=True)
        """
    def calculate(self, config: ZakatConfig) -> ZakatDetails: ...

@typing.final
class IncomeZakatCalculator:
    @property
    def income(self) -> builtins.str: ...
    @property
    def expenses(self) -> builtins.str: ...
    @property
    def method(self) -> builtins.str: ...
    @property
    def liabilities_due_now(self) -> builtins.str: ...
    @property
    def hawl_satisfied(self) -> builtins.bool: ...
    @property
    def label(self) -> typing.Optional[builtins.str]: ...
    @property
    def _input_errors(self) -> builtins.list[builtins.str]: ...
    def __new__(cls, **kwargs: typing.Any) -> IncomeZakatCalculator: ...
    def update(self, kwargs: dict) -> None:
        r"""
        Bulk update fields using keyword arguments
        Example: obj.update(cash_on_hand="100", hawl_satisfied=True)
        """
    def calculate(self, config: ZakatConfig) -> ZakatDetails: ...

@typing.final
class InvestmentAssets:
    @property
    def value(self) -> builtins.str: ...
    @property
    def investment_type(self) -> builtins.str: ...
    @property
    def purification_rate(self) -> builtins.str: ...
    @property
    def strategy(self) -> builtins.str: ...
    @property
    def liabilities_due_now(self) -> builtins.str: ...
    @property
    def hawl_satisfied(self) -> builtins.bool: ...
    @property
    def label(self) -> typing.Optional[builtins.str]: ...
    @property
    def _input_errors(self) -> builtins.list[builtins.str]: ...
    def __new__(cls, **kwargs: typing.Any) -> InvestmentAssets: ...
    def update(self, kwargs: dict) -> None:
        r"""
        Bulk update fields using keyword arguments
        Example: obj.update(cash_on_hand="100", hawl_satisfied=True)
        """
    def calculate(self, config: ZakatConfig) -> ZakatDetails: ...

@typing.final
class MiningAssets:
    @property
    def value(self) -> builtins.str: ...
    @property
    def mining_type(self) -> builtins.str: ...
    @property
    def liabilities_due_now(self) -> builtins.str: ...
    @property
    def hawl_satisfied(self) -> builtins.bool: ...
    @property
    def label(self) -> typing.Optional[builtins.str]: ...
    @property
    def _input_errors(self) -> builtins.list[builtins.str]: ...
    def __new__(cls, **kwargs: typing.Any) -> MiningAssets: ...
    def update(self, kwargs: dict) -> None:
        r"""
        Bulk update fields using keyword arguments
        Example: obj.update(cash_on_hand="100", hawl_satisfied=True)
        """
    def calculate(self, config: ZakatConfig) -> ZakatDetails: ...

@typing.final
class PreciousMetals:
    @property
    def weight_grams(self) -> builtins.str: ...
    @property
    def metal_type(self) -> builtins.str: ...
    @property
    def purity(self) -> builtins.str: ...
    @property
    def usage(self) -> builtins.str: ...
    @property
    def stone_weight_grams(self) -> builtins.str: ...
    @property
    def gender(self) -> builtins.str: ...
    @property
    def liabilities_due_now(self) -> builtins.str: ...
    @property
    def hawl_satisfied(self) -> builtins.bool: ...
    @property
    def label(self) -> typing.Optional[builtins.str]: ...
    @property
    def _input_errors(self) -> builtins.list[builtins.str]: ...
    def __new__(cls, **kwargs: typing.Any) -> PreciousMetals: ...
    def update(self, kwargs: dict) -> None:
        r"""
        Bulk update fields using keyword arguments
        Example: obj.update(cash_on_hand="100", hawl_satisfied=True)
        """
    def calculate(self, config: ZakatConfig) -> ZakatDetails: ...

@typing.final
class RestrictedFund:
    @property
    def total_value(self) -> builtins.str: ...
    @property
    def vested_amount(self) -> builtins.str: ...
    @property
    def accessibility(self) -> builtins.str: ...
    @property
    def withdrawal_penalty(self) -> builtins.str: ...
    @property
    def liabilities_due_now(self) -> builtins.str: ...
    @property
    def hawl_satisfied(self) -> builtins.bool: ...
    @property
    def label(self) -> typing.Optional[builtins.str]: ...
    @property
    def _input_errors(self) -> builtins.list[builtins.str]: ...
    def __new__(cls, **kwargs: typing.Any) -> RestrictedFund: ...
    def update(self, kwargs: dict) -> None:
        r"""
        Bulk update fields using keyword arguments
        Example: obj.update(cash_on_hand="100", hawl_satisfied=True)
        """
    def calculate(self, config: ZakatConfig) -> ZakatDetails: ...

@typing.final
class ZakatConfig:
    @property
    def gold_price_per_gram(self) -> builtins.str: ...
    @property
    def silver_price_per_gram(self) -> builtins.str: ...
    def __new__(cls, gold_price: typing.Any, silver_price: typing.Any, rice_price_kg: typing.Optional[typing.Any] = None, rice_price_liter: typing.Optional[typing.Any] = None) -> ZakatConfig: ...
    @staticmethod
    def is_valid_input(val: builtins.str) -> builtins.bool: ...
    @staticmethod
    def hanafi(gold_price: typing.Any, silver_price: typing.Any) -> ZakatConfig: ...
    @staticmethod
    def shafi(gold_price: typing.Any) -> ZakatConfig: ...
    @staticmethod
    def maliki(gold_price: typing.Any) -> ZakatConfig: ...
    @staticmethod
    def hanbali(gold_price: typing.Any) -> ZakatConfig: ...
    @staticmethod
    def for_region(iso_code: builtins.str) -> ZakatConfig: ...

@typing.final
class ZakatDetails:
    @property
    def wealth_type(self) -> WealthType: ...
    @property
    def net_assets(self) -> builtins.str: ...
    @property
    def zakat_due(self) -> builtins.str: ...
    @property
    def total_assets(self) -> builtins.str: ...
    @property
    def is_payable(self) -> builtins.bool: ...
    @property
    def nisab_threshold(self) -> builtins.str: ...
    @property
    def status_reason(self) -> typing.Optional[builtins.str]: ...
    @property
    def recommendation(self) -> builtins.str: ...
    @property
    def structured_warnings(self) -> typing.Any: ...

@typing.final
class LiabilityType(enum.Enum):
    Immediate = ...
    LongTerm = ...

@typing.final
class WarningCode(enum.Enum):
    NegativeAssetsClamped = ...
    GrossMethodExpensesIgnored = ...
    LivestockBelowNisab = ...
    MetalBelowNisab = ...
    PriceDataStale = ...
    HawlNotMet = ...
    PartialCalculation = ...
    CurrencyConversionApplied = ...
    Other = ...

@typing.final
class WealthType(enum.Enum):
    Gold = ...
    Silver = ...
    Business = ...
    Agriculture = ...
    Livestock = ...
    Mining = ...
    Income = ...
    Investment = ...
    Fitrah = ...

@typing.final
class ZakatRecommendation(enum.Enum):
    Obligatory = ...
    Recommended = ...
    None = ...

