772 lines
32 KiB
Rust
772 lines
32 KiB
Rust
// NAC RWA 伊斯兰合规合约层(Sharia Compliance Layer)
|
||
// 版本:1.0.0
|
||
//
|
||
// 覆盖辖区:
|
||
// AE(阿联酋)、SA(沙特阿拉伯)、MY(马来西亚)
|
||
//
|
||
// 核心原则:
|
||
// 1. 禁止利息(Riba)—— 任何形式的固定利息均被禁止
|
||
// 2. 禁止不确定性(Gharar)—— 合同条款须明确,不能有过度不确定性
|
||
// 3. 禁止赌博(Maysir)—— 禁止投机性交易
|
||
// 4. 禁止非法商品(Haram)—— 禁止猪肉、酒精、武器等非法商品
|
||
// 5. 风险共担(Musharakah)—— 利润和损失须共同承担
|
||
// 6. 资产支持(Asset-Backed)—— 金融交易须有真实资产支撑
|
||
|
||
use serde::{Deserialize, Serialize};
|
||
|
||
/// 伊斯兰金融结构类型
|
||
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
|
||
pub enum IslamicFinanceStructure {
|
||
/// Murabaha(成本加成融资)—— 银行购买资产后以成本加利润出售给客户
|
||
Murabaha,
|
||
/// Ijara(伊斯兰租赁)—— 类似融资租赁,但无利息
|
||
Ijara,
|
||
/// Ijara wa Iqtina(租赁并购买)—— 租赁期满后转让所有权
|
||
IjaraWaIqtina,
|
||
/// Musharakah(合伙)—— 双方共同出资,按比例分享利润和损失
|
||
Musharakah,
|
||
/// Mudarabah(信托融资)—— 一方出资,另一方经营,按约定比例分配利润
|
||
Mudarabah,
|
||
/// Sukuk(伊斯兰债券)—— 基于资产的证券,代表对资产的所有权份额
|
||
Sukuk,
|
||
/// Istisna(制造合同)—— 预先约定制造某物品的合同
|
||
Istisna,
|
||
/// Salam(预付货款)—— 预先付款,未来交付商品
|
||
Salam,
|
||
/// Wakalah(代理)—— 委托代理关系
|
||
Wakalah,
|
||
/// Takaful(伊斯兰保险)—— 互助保险,基于共同担保原则
|
||
Takaful,
|
||
}
|
||
|
||
/// Sharia 审查委员会要求
|
||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||
pub struct ShariaBoardRequirement {
|
||
/// 是否需要 Sharia 审查委员会批准
|
||
pub required: bool,
|
||
/// 最低委员人数
|
||
pub minimum_scholars: u8,
|
||
/// 是否需要 Fatwa(宗教裁定)
|
||
pub fatwa_required: bool,
|
||
/// 推荐的 Sharia 审查机构
|
||
pub recommended_boards: Vec<String>,
|
||
/// 持续合规监督要求
|
||
pub ongoing_monitoring: bool,
|
||
}
|
||
|
||
/// 禁止条款(Haram 清单)
|
||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||
pub struct HaramProhibitions {
|
||
/// 禁止商品类别
|
||
pub prohibited_goods: Vec<String>,
|
||
/// 禁止行业
|
||
pub prohibited_industries: Vec<String>,
|
||
/// 禁止金融结构
|
||
pub prohibited_structures: Vec<String>,
|
||
/// 禁止合同条款
|
||
pub prohibited_clauses: Vec<String>,
|
||
}
|
||
|
||
/// Sharia 合规资产要求
|
||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||
pub struct ShariaAssetRequirements {
|
||
/// 资产须为真实有形资产
|
||
pub must_be_tangible: bool,
|
||
/// 资产须合法(Halal)
|
||
pub must_be_halal: bool,
|
||
/// 资产须可识别和确定
|
||
pub must_be_identifiable: bool,
|
||
/// 资产须已存在(Salam 除外)
|
||
pub must_exist_at_contract: bool,
|
||
/// 资产须可交付
|
||
pub must_be_deliverable: bool,
|
||
/// 特殊说明
|
||
pub special_notes: Vec<String>,
|
||
}
|
||
|
||
/// 利润分配规则(替代利息)
|
||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||
pub struct ProfitSharingRule {
|
||
/// 金融结构类型
|
||
pub structure: IslamicFinanceStructure,
|
||
/// 利润分配比例描述
|
||
pub profit_sharing_ratio: String,
|
||
/// 损失承担规则
|
||
pub loss_bearing_rule: String,
|
||
/// 基准利率替代(如 LIBOR 替代)
|
||
pub benchmark_alternative: Option<String>,
|
||
/// 说明
|
||
pub notes: String,
|
||
}
|
||
|
||
/// Sukuk(伊斯兰债券)结构
|
||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||
pub struct SukukStructure {
|
||
/// Sukuk 类型
|
||
pub sukuk_type: IslamicFinanceStructure,
|
||
/// 基础资产描述
|
||
pub underlying_asset: String,
|
||
/// SPV(特殊目的载体)要求
|
||
pub spv_required: bool,
|
||
/// 资产转让要求
|
||
pub asset_transfer_required: bool,
|
||
/// 收益率计算方式(替代利息)
|
||
pub return_calculation: String,
|
||
/// 赎回机制
|
||
pub redemption_mechanism: String,
|
||
/// Sharia 审查要求
|
||
pub sharia_board: ShariaBoardRequirement,
|
||
}
|
||
|
||
/// 辖区 Sharia 合规框架
|
||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||
pub struct ShariaComplianceFramework {
|
||
/// 辖区代码
|
||
pub jurisdiction: String,
|
||
/// 辖区名称
|
||
pub jurisdiction_name: String,
|
||
/// 伊斯兰金融监管机构
|
||
pub regulatory_body: String,
|
||
/// 适用的伊斯兰金融法律
|
||
pub applicable_laws: Vec<String>,
|
||
/// Sharia 审查委员会要求
|
||
pub sharia_board: ShariaBoardRequirement,
|
||
/// 禁止条款
|
||
pub prohibitions: HaramProhibitions,
|
||
/// 资产要求
|
||
pub asset_requirements: ShariaAssetRequirements,
|
||
/// 支持的金融结构
|
||
pub supported_structures: Vec<IslamicFinanceStructure>,
|
||
/// 利润分配规则
|
||
pub profit_sharing_rules: Vec<ProfitSharingRule>,
|
||
/// Sukuk 发行要求(如支持)
|
||
pub sukuk_requirements: Option<SukukStructure>,
|
||
/// 不动产 Sharia 合规要求
|
||
pub real_estate_sharia_requirements: Vec<String>,
|
||
/// 商品交易 Sharia 合规要求
|
||
pub goods_trade_sharia_requirements: Vec<String>,
|
||
/// 知识产权 Sharia 合规要求
|
||
pub ip_sharia_requirements: Vec<String>,
|
||
/// 与传统金融的互操作性说明
|
||
pub conventional_interoperability: String,
|
||
}
|
||
|
||
/// 获取辖区 Sharia 合规框架
|
||
pub fn get_sharia_framework(jurisdiction: &str) -> Option<ShariaComplianceFramework> {
|
||
match jurisdiction.to_uppercase().as_str() {
|
||
"AE" => Some(ae_sharia_framework()),
|
||
"SA" => Some(sa_sharia_framework()),
|
||
"MY" => Some(my_sharia_framework()),
|
||
_ => None,
|
||
}
|
||
}
|
||
|
||
/// 验证合同是否符合 Sharia 原则
|
||
pub fn validate_sharia_compliance(
|
||
jurisdiction: &str,
|
||
structure: &IslamicFinanceStructure,
|
||
has_interest: bool,
|
||
has_excessive_uncertainty: bool,
|
||
involves_haram_goods: bool,
|
||
) -> ShariaValidationResult {
|
||
let framework = match get_sharia_framework(jurisdiction) {
|
||
Some(f) => f,
|
||
None => return ShariaValidationResult {
|
||
is_compliant: false,
|
||
violations: vec![format!("辖区 {} 不在 Sharia 合规覆盖范围内", jurisdiction)],
|
||
recommendations: vec![],
|
||
requires_fatwa: false,
|
||
},
|
||
};
|
||
|
||
let mut violations = Vec::new();
|
||
let mut recommendations = Vec::new();
|
||
|
||
if has_interest {
|
||
violations.push("违反禁止利息原则(Riba):合同包含固定利息条款".to_string());
|
||
recommendations.push(format!("建议将利息结构替换为 {:?} 结构", IslamicFinanceStructure::Murabaha));
|
||
}
|
||
|
||
if has_excessive_uncertainty {
|
||
violations.push("违反禁止不确定性原则(Gharar):合同条款存在过度不确定性".to_string());
|
||
recommendations.push("建议明确所有合同条款,消除不确定性".to_string());
|
||
}
|
||
|
||
if involves_haram_goods {
|
||
violations.push("违反禁止非法商品原则(Haram):交易涉及禁止商品".to_string());
|
||
recommendations.push("须确认交易商品符合 Halal 标准".to_string());
|
||
}
|
||
|
||
if !framework.supported_structures.contains(structure) {
|
||
violations.push(format!("金融结构 {:?} 在 {} 辖区不被支持", structure, jurisdiction));
|
||
recommendations.push(format!("建议使用支持的结构:{:?}", framework.supported_structures));
|
||
}
|
||
|
||
let requires_fatwa = framework.sharia_board.fatwa_required && violations.is_empty();
|
||
|
||
ShariaValidationResult {
|
||
is_compliant: violations.is_empty(),
|
||
violations,
|
||
recommendations,
|
||
requires_fatwa,
|
||
}
|
||
}
|
||
|
||
/// Sharia 合规验证结果
|
||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||
pub struct ShariaValidationResult {
|
||
/// 是否合规
|
||
pub is_compliant: bool,
|
||
/// 违规项目
|
||
pub violations: Vec<String>,
|
||
/// 建议
|
||
pub recommendations: Vec<String>,
|
||
/// 是否需要 Fatwa
|
||
pub requires_fatwa: bool,
|
||
}
|
||
|
||
fn ae_sharia_framework() -> ShariaComplianceFramework {
|
||
ShariaComplianceFramework {
|
||
jurisdiction: "AE".to_string(),
|
||
jurisdiction_name: "阿联酋(United Arab Emirates)".to_string(),
|
||
regulatory_body: "阿联酋中央银行(CBUAE)+ 迪拜伊斯兰经济局(DIEDC)+ AAOIFI".to_string(),
|
||
applicable_laws: vec![
|
||
"联邦第6号法律(2004年):伊斯兰银行法".to_string(),
|
||
"联邦第14号法律(2018年):伊斯兰金融机构法".to_string(),
|
||
"迪拜国际金融中心(DIFC):伊斯兰金融规则".to_string(),
|
||
"AAOIFI Sharia Standards(会计和审计组织标准)".to_string(),
|
||
],
|
||
sharia_board: ShariaBoardRequirement {
|
||
required: true,
|
||
minimum_scholars: 3,
|
||
fatwa_required: true,
|
||
recommended_boards: vec![
|
||
"AAOIFI(伊斯兰金融机构会计和审计组织)".to_string(),
|
||
"迪拜伊斯兰银行 Sharia 委员会".to_string(),
|
||
"阿布扎比伊斯兰银行 Sharia 委员会".to_string(),
|
||
],
|
||
ongoing_monitoring: true,
|
||
},
|
||
prohibitions: HaramProhibitions {
|
||
prohibited_goods: vec![
|
||
"猪肉及猪肉制品".to_string(),
|
||
"酒精及含酒精饮料".to_string(),
|
||
"武器弹药(民用)".to_string(),
|
||
"色情内容".to_string(),
|
||
"赌博设备".to_string(),
|
||
],
|
||
prohibited_industries: vec![
|
||
"传统银行(基于利息)".to_string(),
|
||
"酒类生产和销售".to_string(),
|
||
"赌博业".to_string(),
|
||
"猪肉相关产业".to_string(),
|
||
"烟草业(部分学者认为禁止)".to_string(),
|
||
],
|
||
prohibited_structures: vec![
|
||
"固定利率贷款(Riba al-Nasi'ah)".to_string(),
|
||
"超额利息(Riba al-Fadl)".to_string(),
|
||
"期权和期货(Gharar过度)".to_string(),
|
||
"空头卖出(不拥有资产即出售)".to_string(),
|
||
"信用违约互换(CDS)".to_string(),
|
||
],
|
||
prohibited_clauses: vec![
|
||
"固定利率条款".to_string(),
|
||
"罚息条款(迟延利息)".to_string(),
|
||
"不确定价格条款".to_string(),
|
||
"条件性销售(买方须购买另一商品)".to_string(),
|
||
],
|
||
},
|
||
asset_requirements: ShariaAssetRequirements {
|
||
must_be_tangible: true,
|
||
must_be_halal: true,
|
||
must_be_identifiable: true,
|
||
must_exist_at_contract: true,
|
||
must_be_deliverable: true,
|
||
special_notes: vec![
|
||
"Sukuk 须基于真实资产,不能是纯债务".to_string(),
|
||
"Murabaha 中银行须实际拥有资产后再出售".to_string(),
|
||
"Ijara 中出租物须为合法资产".to_string(),
|
||
],
|
||
},
|
||
supported_structures: vec![
|
||
IslamicFinanceStructure::Murabaha,
|
||
IslamicFinanceStructure::Ijara,
|
||
IslamicFinanceStructure::IjaraWaIqtina,
|
||
IslamicFinanceStructure::Musharakah,
|
||
IslamicFinanceStructure::Mudarabah,
|
||
IslamicFinanceStructure::Sukuk,
|
||
IslamicFinanceStructure::Istisna,
|
||
IslamicFinanceStructure::Wakalah,
|
||
IslamicFinanceStructure::Takaful,
|
||
],
|
||
profit_sharing_rules: vec![
|
||
ProfitSharingRule {
|
||
structure: IslamicFinanceStructure::Musharakah,
|
||
profit_sharing_ratio: "按约定比例分配利润(通常与出资比例相关)".to_string(),
|
||
loss_bearing_rule: "按出资比例承担损失".to_string(),
|
||
benchmark_alternative: Some("EIBOR(阿联酋银行间利率)作为参考基准,但不作为利息".to_string()),
|
||
notes: "利润分配比例须在合同签订时明确约定".to_string(),
|
||
},
|
||
ProfitSharingRule {
|
||
structure: IslamicFinanceStructure::Mudarabah,
|
||
profit_sharing_ratio: "出资方(Rab al-Mal)和经营方(Mudarib)按约定比例分配利润".to_string(),
|
||
loss_bearing_rule: "损失由出资方承担,经营方损失时间和劳动".to_string(),
|
||
benchmark_alternative: None,
|
||
notes: "经营方不保证利润,但须尽职经营".to_string(),
|
||
},
|
||
],
|
||
sukuk_requirements: Some(SukukStructure {
|
||
sukuk_type: IslamicFinanceStructure::Sukuk,
|
||
underlying_asset: "须为真实有形资产(不动产、基础设施、设备等)".to_string(),
|
||
spv_required: true,
|
||
asset_transfer_required: true,
|
||
return_calculation: "基于资产收益(租金、利润分成),而非固定利率".to_string(),
|
||
redemption_mechanism: "到期按约定价格赎回,或通过资产处置".to_string(),
|
||
sharia_board: ShariaBoardRequirement {
|
||
required: true,
|
||
minimum_scholars: 3,
|
||
fatwa_required: true,
|
||
recommended_boards: vec![
|
||
"AAOIFI认证的 Sharia 委员会".to_string(),
|
||
"迪拜金融服务局(DFSA)认可的 Sharia 顾问".to_string(),
|
||
],
|
||
ongoing_monitoring: true,
|
||
},
|
||
}),
|
||
real_estate_sharia_requirements: vec![
|
||
"不动产融资须使用 Ijara wa Iqtina(租赁并购买)或 Musharakah Mutanaqisah(递减合伙)结构".to_string(),
|
||
"禁止传统抵押贷款(含固定利息)".to_string(),
|
||
"DLD(迪拜土地局)须完成产权登记".to_string(),
|
||
"须获得 DLD 的 NOC(无异议证明)".to_string(),
|
||
"伊斯兰银行须实际拥有不动产后再转让给买方".to_string(),
|
||
"不动产须为 Halal 用途(不能用于酒吧、赌场等)".to_string(),
|
||
],
|
||
goods_trade_sharia_requirements: vec![
|
||
"商品须为 Halal(合法)商品".to_string(),
|
||
"商品须在合同签订时已存在(Salam 除外)".to_string(),
|
||
"价格须在合同签订时明确确定".to_string(),
|
||
"禁止出售尚未拥有的商品(除 Salam 和 Istisna)".to_string(),
|
||
"商品融资可使用 Murabaha 结构".to_string(),
|
||
],
|
||
ip_sharia_requirements: vec![
|
||
"知识产权可作为 Sharia 合规资产".to_string(),
|
||
"许可费须为固定金额或明确的利润分成,不能为利息".to_string(),
|
||
"可使用 Wakalah(代理)结构管理知识产权".to_string(),
|
||
"须确保知识产权用途符合 Halal 原则".to_string(),
|
||
],
|
||
conventional_interoperability: "阿联酋同时存在传统金融和伊斯兰金融体系,DIFC 内可使用传统金融结构,但须明确标注非 Sharia 合规".to_string(),
|
||
}
|
||
}
|
||
|
||
fn sa_sharia_framework() -> ShariaComplianceFramework {
|
||
ShariaComplianceFramework {
|
||
jurisdiction: "SA".to_string(),
|
||
jurisdiction_name: "沙特阿拉伯(Kingdom of Saudi Arabia)".to_string(),
|
||
regulatory_body: "沙特中央银行(SAMA)+ 资本市场局(CMA)+ 沙特伊斯兰金融委员会".to_string(),
|
||
applicable_laws: vec![
|
||
"皇家法令 M/5(1966年):银行管制法".to_string(),
|
||
"资本市场法(2003年)".to_string(),
|
||
"Sukuk 监管框架(2021年)".to_string(),
|
||
"AAOIFI Sharia Standards".to_string(),
|
||
"IFSB(伊斯兰金融服务委员会)标准".to_string(),
|
||
],
|
||
sharia_board: ShariaBoardRequirement {
|
||
required: true,
|
||
minimum_scholars: 3,
|
||
fatwa_required: true,
|
||
recommended_boards: vec![
|
||
"沙特阿拉伯伊斯兰大学 Sharia 委员会".to_string(),
|
||
"AAOIFI 认证学者".to_string(),
|
||
"IFSB 认可的 Sharia 顾问".to_string(),
|
||
],
|
||
ongoing_monitoring: true,
|
||
},
|
||
prohibitions: HaramProhibitions {
|
||
prohibited_goods: vec![
|
||
"猪肉及猪肉制品".to_string(),
|
||
"酒精(严格禁止)".to_string(),
|
||
"武器弹药(未经许可)".to_string(),
|
||
"色情内容".to_string(),
|
||
"赌博设备".to_string(),
|
||
"偶像崇拜相关物品".to_string(),
|
||
],
|
||
prohibited_industries: vec![
|
||
"传统银行(基于利息)".to_string(),
|
||
"酒类(严格禁止)".to_string(),
|
||
"赌博业".to_string(),
|
||
"娱乐业(部分)".to_string(),
|
||
"烟草业".to_string(),
|
||
],
|
||
prohibited_structures: vec![
|
||
"固定利率贷款".to_string(),
|
||
"任何形式的 Riba".to_string(),
|
||
"期权和期货(Gharar)".to_string(),
|
||
"传统保险(须用 Takaful 替代)".to_string(),
|
||
],
|
||
prohibited_clauses: vec![
|
||
"固定利率条款".to_string(),
|
||
"罚息条款".to_string(),
|
||
"不确定价格条款".to_string(),
|
||
],
|
||
},
|
||
asset_requirements: ShariaAssetRequirements {
|
||
must_be_tangible: true,
|
||
must_be_halal: true,
|
||
must_be_identifiable: true,
|
||
must_exist_at_contract: true,
|
||
must_be_deliverable: true,
|
||
special_notes: vec![
|
||
"沙特对 Sharia 合规要求极为严格,须获得正式 Fatwa".to_string(),
|
||
"Vision 2030 框架下,部分娱乐业已开放,但须确认具体项目的合规性".to_string(),
|
||
"NEOM 等新城市项目有特殊的 Sharia 合规安排".to_string(),
|
||
],
|
||
},
|
||
supported_structures: vec![
|
||
IslamicFinanceStructure::Murabaha,
|
||
IslamicFinanceStructure::Ijara,
|
||
IslamicFinanceStructure::IjaraWaIqtina,
|
||
IslamicFinanceStructure::Musharakah,
|
||
IslamicFinanceStructure::Mudarabah,
|
||
IslamicFinanceStructure::Sukuk,
|
||
IslamicFinanceStructure::Istisna,
|
||
IslamicFinanceStructure::Salam,
|
||
IslamicFinanceStructure::Wakalah,
|
||
IslamicFinanceStructure::Takaful,
|
||
],
|
||
profit_sharing_rules: vec![
|
||
ProfitSharingRule {
|
||
structure: IslamicFinanceStructure::Musharakah,
|
||
profit_sharing_ratio: "按约定比例分配利润".to_string(),
|
||
loss_bearing_rule: "按出资比例承担损失".to_string(),
|
||
benchmark_alternative: Some("SAIBOR(沙特银行间利率)作为参考基准".to_string()),
|
||
notes: "沙特对 Musharakah 结构有严格的 Sharia 审查要求".to_string(),
|
||
},
|
||
],
|
||
sukuk_requirements: Some(SukukStructure {
|
||
sukuk_type: IslamicFinanceStructure::Sukuk,
|
||
underlying_asset: "须为真实有形资产,沙特政府 Sukuk 通常基于基础设施资产".to_string(),
|
||
spv_required: true,
|
||
asset_transfer_required: true,
|
||
return_calculation: "基于资产收益,通常参考 SAIBOR 加点".to_string(),
|
||
redemption_mechanism: "到期按约定价格赎回".to_string(),
|
||
sharia_board: ShariaBoardRequirement {
|
||
required: true,
|
||
minimum_scholars: 3,
|
||
fatwa_required: true,
|
||
recommended_boards: vec![
|
||
"AAOIFI 认证的 Sharia 委员会".to_string(),
|
||
"沙特 CMA 认可的 Sharia 顾问".to_string(),
|
||
],
|
||
ongoing_monitoring: true,
|
||
},
|
||
}),
|
||
real_estate_sharia_requirements: vec![
|
||
"不动产融资须使用 Ijara 或 Musharakah Mutanaqisah 结构".to_string(),
|
||
"须在沙特不动产登记局(Notary Public)完成登记".to_string(),
|
||
"外资购买不动产受限(须获得 SAGIA 批准)".to_string(),
|
||
"不动产须为 Halal 用途".to_string(),
|
||
"须获得正式 Fatwa 确认合规性".to_string(),
|
||
],
|
||
goods_trade_sharia_requirements: vec![
|
||
"商品须为 Halal 商品(须有 Halal 认证)".to_string(),
|
||
"食品须符合沙特食品药品局(SFDA)的 Halal 认证".to_string(),
|
||
"商品融资可使用 Murabaha 或 Salam 结构".to_string(),
|
||
"禁止出售酒精、猪肉等 Haram 商品".to_string(),
|
||
],
|
||
ip_sharia_requirements: vec![
|
||
"知识产权须用于 Halal 目的".to_string(),
|
||
"许可费须为固定金额,不能含利息成分".to_string(),
|
||
"须获得 Sharia 委员会确认许可结构合规".to_string(),
|
||
],
|
||
conventional_interoperability: "沙特金融体系几乎完全基于伊斯兰金融,传统金融机构须设立独立的伊斯兰金融窗口".to_string(),
|
||
}
|
||
}
|
||
|
||
fn my_sharia_framework() -> ShariaComplianceFramework {
|
||
ShariaComplianceFramework {
|
||
jurisdiction: "MY".to_string(),
|
||
jurisdiction_name: "马来西亚(Malaysia)".to_string(),
|
||
regulatory_body: "马来西亚国家银行(BNM)+ 证券委员会(SC)+ 国家 Sharia 咨询委员会(SAC)".to_string(),
|
||
applicable_laws: vec![
|
||
"伊斯兰金融服务法(IFSA 2013)".to_string(),
|
||
"伊斯兰资本市场框架".to_string(),
|
||
"BNM Sharia 标准".to_string(),
|
||
"SC 伊斯兰证券指南".to_string(),
|
||
"AAOIFI Sharia Standards(参考)".to_string(),
|
||
],
|
||
sharia_board: ShariaBoardRequirement {
|
||
required: true,
|
||
minimum_scholars: 3,
|
||
fatwa_required: false,
|
||
recommended_boards: vec![
|
||
"BNM 国家 Sharia 咨询委员会(SAC)".to_string(),
|
||
"SC Sharia 咨询委员会".to_string(),
|
||
"ISRA(伊斯兰金融研究院)".to_string(),
|
||
],
|
||
ongoing_monitoring: true,
|
||
},
|
||
prohibitions: HaramProhibitions {
|
||
prohibited_goods: vec![
|
||
"猪肉及猪肉制品".to_string(),
|
||
"酒精".to_string(),
|
||
"武器弹药(未经许可)".to_string(),
|
||
"色情内容".to_string(),
|
||
],
|
||
prohibited_industries: vec![
|
||
"传统银行(基于利息)".to_string(),
|
||
"酒类".to_string(),
|
||
"赌博业".to_string(),
|
||
"烟草业".to_string(),
|
||
],
|
||
prohibited_structures: vec![
|
||
"固定利率贷款(Riba)".to_string(),
|
||
"任何形式的 Riba(利息)均被禁止".to_string(),
|
||
"传统保险(须用 Takaful 替代)".to_string(),
|
||
"Gharar 过度的衍生品".to_string(),
|
||
],
|
||
prohibited_clauses: vec![
|
||
"固定利率条款".to_string(),
|
||
"罚息条款(但可收取 Ta'widh 实际损失补偿)".to_string(),
|
||
],
|
||
},
|
||
asset_requirements: ShariaAssetRequirements {
|
||
must_be_tangible: true,
|
||
must_be_halal: true,
|
||
must_be_identifiable: true,
|
||
must_exist_at_contract: true,
|
||
must_be_deliverable: true,
|
||
special_notes: vec![
|
||
"马来西亚是全球最成熟的伊斯兰金融市场之一".to_string(),
|
||
"BNM 允许 Ta'widh(实际损失补偿),替代罚息".to_string(),
|
||
"马来西亚同时存在传统金融和伊斯兰金融双轨制".to_string(),
|
||
"AIBIM(伊斯兰银行协会)提供行业指导".to_string(),
|
||
],
|
||
},
|
||
supported_structures: vec![
|
||
IslamicFinanceStructure::Murabaha,
|
||
IslamicFinanceStructure::Ijara,
|
||
IslamicFinanceStructure::IjaraWaIqtina,
|
||
IslamicFinanceStructure::Musharakah,
|
||
IslamicFinanceStructure::Mudarabah,
|
||
IslamicFinanceStructure::Sukuk,
|
||
IslamicFinanceStructure::Istisna,
|
||
IslamicFinanceStructure::Salam,
|
||
IslamicFinanceStructure::Wakalah,
|
||
IslamicFinanceStructure::Takaful,
|
||
],
|
||
profit_sharing_rules: vec![
|
||
ProfitSharingRule {
|
||
structure: IslamicFinanceStructure::Musharakah,
|
||
profit_sharing_ratio: "按约定比例分配利润(通常与出资比例相关)".to_string(),
|
||
loss_bearing_rule: "按出资比例承担损失".to_string(),
|
||
benchmark_alternative: Some("KLIBOR(吉隆坡银行间利率)作为参考基准".to_string()),
|
||
notes: "马来西亚 Musharakah 实践较为灵活".to_string(),
|
||
},
|
||
ProfitSharingRule {
|
||
structure: IslamicFinanceStructure::Mudarabah,
|
||
profit_sharing_ratio: "出资方和经营方按约定比例分配利润(通常70:30或80:20)".to_string(),
|
||
loss_bearing_rule: "损失由出资方承担".to_string(),
|
||
benchmark_alternative: None,
|
||
notes: "马来西亚 Mudarabah 存款广泛使用".to_string(),
|
||
},
|
||
],
|
||
sukuk_requirements: Some(SukukStructure {
|
||
sukuk_type: IslamicFinanceStructure::Sukuk,
|
||
underlying_asset: "须为真实资产,马来西亚 Sukuk 市场全球最大".to_string(),
|
||
spv_required: true,
|
||
asset_transfer_required: true,
|
||
return_calculation: "基于资产收益,通常参考 KLIBOR 加点".to_string(),
|
||
redemption_mechanism: "到期按约定价格赎回".to_string(),
|
||
sharia_board: ShariaBoardRequirement {
|
||
required: true,
|
||
minimum_scholars: 3,
|
||
fatwa_required: false,
|
||
recommended_boards: vec![
|
||
"SC Sharia 咨询委员会".to_string(),
|
||
"BNM SAC 认可的 Sharia 顾问".to_string(),
|
||
],
|
||
ongoing_monitoring: true,
|
||
},
|
||
}),
|
||
real_estate_sharia_requirements: vec![
|
||
"不动产融资可使用 Bai' Bithaman Ajil(BBA,延期付款买卖)或 Musharakah Mutanaqisah".to_string(),
|
||
"须在马来西亚土地局(Pejabat Tanah)完成产权登记".to_string(),
|
||
"外资购买不动产须遵守各州规定(通常须获批准)".to_string(),
|
||
"不动产须为 Halal 用途".to_string(),
|
||
],
|
||
goods_trade_sharia_requirements: vec![
|
||
"商品须为 Halal 商品(须有 JAKIM Halal 认证)".to_string(),
|
||
"商品融资可使用 Murabaha 或 Tawarruq 结构".to_string(),
|
||
"禁止出售 Haram 商品".to_string(),
|
||
],
|
||
ip_sharia_requirements: vec![
|
||
"知识产权须用于 Halal 目的".to_string(),
|
||
"许可费须为固定金额或明确的利润分成".to_string(),
|
||
"马来西亚 SC 已发布知识产权 Sukuk 指南".to_string(),
|
||
],
|
||
conventional_interoperability: "马来西亚实行双轨制金融体系,传统金融和伊斯兰金融并存,须明确标注合同类型".to_string(),
|
||
}
|
||
}
|
||
|
||
#[cfg(test)]
|
||
mod tests {
|
||
use super::*;
|
||
|
||
#[test]
|
||
fn test_ae_framework_exists() {
|
||
let f = get_sharia_framework("AE");
|
||
assert!(f.is_some());
|
||
let f = f.unwrap();
|
||
assert_eq!(f.jurisdiction, "AE");
|
||
assert!(f.sharia_board.required);
|
||
assert!(f.sharia_board.fatwa_required);
|
||
}
|
||
|
||
#[test]
|
||
fn test_sa_framework_exists() {
|
||
let f = get_sharia_framework("SA");
|
||
assert!(f.is_some());
|
||
let f = f.unwrap();
|
||
assert_eq!(f.jurisdiction, "SA");
|
||
assert!(f.sharia_board.required);
|
||
}
|
||
|
||
#[test]
|
||
fn test_my_framework_exists() {
|
||
let f = get_sharia_framework("MY");
|
||
assert!(f.is_some());
|
||
let f = f.unwrap();
|
||
assert_eq!(f.jurisdiction, "MY");
|
||
assert!(f.sharia_board.required);
|
||
}
|
||
|
||
#[test]
|
||
fn test_unknown_jurisdiction_returns_none() {
|
||
let f = get_sharia_framework("XX");
|
||
assert!(f.is_none());
|
||
}
|
||
|
||
#[test]
|
||
fn test_all_frameworks_prohibit_riba() {
|
||
for j in &["AE", "SA", "MY"] {
|
||
let f = get_sharia_framework(j).unwrap();
|
||
assert!(
|
||
f.prohibitions.prohibited_structures.iter().any(|s| s.contains("利息") || s.contains("Riba")),
|
||
"{} 框架未明确禁止利息(Riba)", j
|
||
);
|
||
}
|
||
}
|
||
|
||
#[test]
|
||
fn test_all_frameworks_support_murabaha() {
|
||
for j in &["AE", "SA", "MY"] {
|
||
let f = get_sharia_framework(j).unwrap();
|
||
assert!(
|
||
f.supported_structures.contains(&IslamicFinanceStructure::Murabaha),
|
||
"{} 框架不支持 Murabaha 结构", j
|
||
);
|
||
}
|
||
}
|
||
|
||
#[test]
|
||
fn test_all_frameworks_support_sukuk() {
|
||
for j in &["AE", "SA", "MY"] {
|
||
let f = get_sharia_framework(j).unwrap();
|
||
assert!(
|
||
f.supported_structures.contains(&IslamicFinanceStructure::Sukuk),
|
||
"{} 框架不支持 Sukuk", j
|
||
);
|
||
assert!(f.sukuk_requirements.is_some(), "{} 框架缺少 Sukuk 要求", j);
|
||
}
|
||
}
|
||
|
||
#[test]
|
||
fn test_validate_compliant_musharakah() {
|
||
let result = validate_sharia_compliance(
|
||
"AE",
|
||
&IslamicFinanceStructure::Musharakah,
|
||
false,
|
||
false,
|
||
false,
|
||
);
|
||
assert!(result.is_compliant);
|
||
assert!(result.violations.is_empty());
|
||
}
|
||
|
||
#[test]
|
||
fn test_validate_riba_violation() {
|
||
let result = validate_sharia_compliance(
|
||
"AE",
|
||
&IslamicFinanceStructure::Musharakah,
|
||
true,
|
||
false,
|
||
false,
|
||
);
|
||
assert!(!result.is_compliant);
|
||
assert!(result.violations.iter().any(|v| v.contains("Riba")));
|
||
}
|
||
|
||
#[test]
|
||
fn test_validate_haram_goods_violation() {
|
||
let result = validate_sharia_compliance(
|
||
"SA",
|
||
&IslamicFinanceStructure::Murabaha,
|
||
false,
|
||
false,
|
||
true,
|
||
);
|
||
assert!(!result.is_compliant);
|
||
assert!(result.violations.iter().any(|v| v.contains("Haram")));
|
||
}
|
||
|
||
#[test]
|
||
fn test_validate_gharar_violation() {
|
||
let result = validate_sharia_compliance(
|
||
"MY",
|
||
&IslamicFinanceStructure::Murabaha,
|
||
false,
|
||
true,
|
||
false,
|
||
);
|
||
assert!(!result.is_compliant);
|
||
assert!(result.violations.iter().any(|v| v.contains("Gharar")));
|
||
}
|
||
|
||
#[test]
|
||
fn test_all_frameworks_have_real_estate_requirements() {
|
||
for j in &["AE", "SA", "MY"] {
|
||
let f = get_sharia_framework(j).unwrap();
|
||
assert!(
|
||
!f.real_estate_sharia_requirements.is_empty(),
|
||
"{} 框架缺少不动产 Sharia 要求", j
|
||
);
|
||
}
|
||
}
|
||
|
||
#[test]
|
||
fn test_all_frameworks_have_goods_requirements() {
|
||
for j in &["AE", "SA", "MY"] {
|
||
let f = get_sharia_framework(j).unwrap();
|
||
assert!(
|
||
!f.goods_trade_sharia_requirements.is_empty(),
|
||
"{} 框架缺少商品 Sharia 要求", j
|
||
);
|
||
}
|
||
}
|
||
|
||
#[test]
|
||
fn test_ae_has_sukuk_spv_requirement() {
|
||
let f = get_sharia_framework("AE").unwrap();
|
||
let sukuk = f.sukuk_requirements.unwrap();
|
||
assert!(sukuk.spv_required);
|
||
assert!(sukuk.asset_transfer_required);
|
||
}
|
||
|
||
#[test]
|
||
fn test_my_dual_system_note() {
|
||
let f = get_sharia_framework("MY").unwrap();
|
||
// 马来西亚是双轨制,须有互操作性说明
|
||
assert!(f.conventional_interoperability.contains("双轨制"));
|
||
}
|
||
}
|