// 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, /// 持续合规监督要求 pub ongoing_monitoring: bool, } /// 禁止条款(Haram 清单) #[derive(Debug, Clone, Serialize, Deserialize)] pub struct HaramProhibitions { /// 禁止商品类别 pub prohibited_goods: Vec, /// 禁止行业 pub prohibited_industries: Vec, /// 禁止金融结构 pub prohibited_structures: Vec, /// 禁止合同条款 pub prohibited_clauses: Vec, } /// 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, } /// 利润分配规则(替代利息) #[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, /// 说明 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, /// Sharia 审查委员会要求 pub sharia_board: ShariaBoardRequirement, /// 禁止条款 pub prohibitions: HaramProhibitions, /// 资产要求 pub asset_requirements: ShariaAssetRequirements, /// 支持的金融结构 pub supported_structures: Vec, /// 利润分配规则 pub profit_sharing_rules: Vec, /// Sukuk 发行要求(如支持) pub sukuk_requirements: Option, /// 不动产 Sharia 合规要求 pub real_estate_sharia_requirements: Vec, /// 商品交易 Sharia 合规要求 pub goods_trade_sharia_requirements: Vec, /// 知识产权 Sharia 合规要求 pub ip_sharia_requirements: Vec, /// 与传统金融的互操作性说明 pub conventional_interoperability: String, } /// 获取辖区 Sharia 合规框架 pub fn get_sharia_framework(jurisdiction: &str) -> Option { 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, /// 建议 pub recommendations: Vec, /// 是否需要 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("双轨制")); } }