196 lines
6.2 KiB
Rust
196 lines
6.2 KiB
Rust
//! 司法辖区定义和会计准则
|
|
|
|
use serde::{Deserialize, Serialize};
|
|
use std::collections::HashMap;
|
|
|
|
/// 司法辖区枚举
|
|
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
|
|
pub enum Jurisdiction {
|
|
/// 美国辖区
|
|
US,
|
|
/// 欧盟辖区
|
|
EU,
|
|
/// 中国辖区
|
|
CN,
|
|
/// 香港辖区
|
|
HK,
|
|
/// 新加坡辖区
|
|
SG,
|
|
/// 英国辖区
|
|
UK,
|
|
/// 日本辖区
|
|
JP,
|
|
/// 中东辖区 (伊斯兰金融体系)
|
|
ME,
|
|
}
|
|
|
|
/// 会计准则
|
|
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
|
|
pub enum AccountingStandard {
|
|
/// 美国公认会计原则
|
|
USGAAP,
|
|
/// 国际财务报告准则
|
|
IFRS,
|
|
/// 中国企业会计准则
|
|
CAS,
|
|
/// 日本公认会计原则
|
|
JGAAP,
|
|
/// 伊斯兰金融机构会计与审计组织准则
|
|
AAOIFI,
|
|
}
|
|
|
|
/// 法系类型
|
|
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
|
|
pub enum LegalSystem {
|
|
/// 普通法系
|
|
CommonLaw,
|
|
/// 大陆法系
|
|
CivilLaw,
|
|
/// 社会主义法系
|
|
SocialistLaw,
|
|
/// 混合法系
|
|
MixedLaw,
|
|
/// 伊斯兰法系
|
|
ShariaLaw,
|
|
}
|
|
|
|
/// 辖区详细信息
|
|
#[derive(Debug, Clone, Serialize, Deserialize)]
|
|
pub struct JurisdictionInfo {
|
|
/// 辖区代码
|
|
pub code: Jurisdiction,
|
|
/// 法系类型
|
|
pub legal_system: LegalSystem,
|
|
/// 会计准则
|
|
pub accounting_standard: AccountingStandard,
|
|
/// 企业所得税率 (0-1)
|
|
pub corporate_tax_rate: f64,
|
|
/// 资本利得税率 (0-1)
|
|
pub capital_gains_tax_rate: f64,
|
|
/// 增值税率 (0-1)
|
|
pub vat_rate: f64,
|
|
/// 监管成本率 (0-1)
|
|
pub regulatory_cost_rate: f64,
|
|
/// 基础流动性折扣 (0-1)
|
|
pub base_liquidity_discount: f64,
|
|
}
|
|
|
|
impl Jurisdiction {
|
|
/// 获取辖区详细信息
|
|
pub fn info(self) -> JurisdictionInfo {
|
|
match self {
|
|
Jurisdiction::US => JurisdictionInfo {
|
|
code: Jurisdiction::US,
|
|
legal_system: LegalSystem::CommonLaw,
|
|
accounting_standard: AccountingStandard::USGAAP,
|
|
corporate_tax_rate: 0.21,
|
|
capital_gains_tax_rate: 0.20,
|
|
vat_rate: 0.0,
|
|
regulatory_cost_rate: 0.02,
|
|
base_liquidity_discount: 0.075,
|
|
},
|
|
Jurisdiction::EU => JurisdictionInfo {
|
|
code: Jurisdiction::EU,
|
|
legal_system: LegalSystem::CivilLaw,
|
|
accounting_standard: AccountingStandard::IFRS,
|
|
corporate_tax_rate: 0.21,
|
|
capital_gains_tax_rate: 0.25,
|
|
vat_rate: 0.20,
|
|
regulatory_cost_rate: 0.03,
|
|
base_liquidity_discount: 0.125,
|
|
},
|
|
Jurisdiction::CN => JurisdictionInfo {
|
|
code: Jurisdiction::CN,
|
|
legal_system: LegalSystem::SocialistLaw,
|
|
accounting_standard: AccountingStandard::CAS,
|
|
corporate_tax_rate: 0.25,
|
|
capital_gains_tax_rate: 0.20,
|
|
vat_rate: 0.13,
|
|
regulatory_cost_rate: 0.04,
|
|
base_liquidity_discount: 0.20,
|
|
},
|
|
Jurisdiction::HK => JurisdictionInfo {
|
|
code: Jurisdiction::HK,
|
|
legal_system: LegalSystem::CommonLaw,
|
|
accounting_standard: AccountingStandard::IFRS,
|
|
corporate_tax_rate: 0.165,
|
|
capital_gains_tax_rate: 0.0,
|
|
vat_rate: 0.0,
|
|
regulatory_cost_rate: 0.01,
|
|
base_liquidity_discount: 0.075,
|
|
},
|
|
Jurisdiction::SG => JurisdictionInfo {
|
|
code: Jurisdiction::SG,
|
|
legal_system: LegalSystem::CommonLaw,
|
|
accounting_standard: AccountingStandard::IFRS,
|
|
corporate_tax_rate: 0.17,
|
|
capital_gains_tax_rate: 0.0,
|
|
vat_rate: 0.07,
|
|
regulatory_cost_rate: 0.01,
|
|
base_liquidity_discount: 0.075,
|
|
},
|
|
Jurisdiction::UK => JurisdictionInfo {
|
|
code: Jurisdiction::UK,
|
|
legal_system: LegalSystem::CommonLaw,
|
|
accounting_standard: AccountingStandard::IFRS,
|
|
corporate_tax_rate: 0.25,
|
|
capital_gains_tax_rate: 0.20,
|
|
vat_rate: 0.20,
|
|
regulatory_cost_rate: 0.02,
|
|
base_liquidity_discount: 0.125,
|
|
},
|
|
Jurisdiction::JP => JurisdictionInfo {
|
|
code: Jurisdiction::JP,
|
|
legal_system: LegalSystem::MixedLaw,
|
|
accounting_standard: AccountingStandard::JGAAP,
|
|
corporate_tax_rate: 0.232,
|
|
capital_gains_tax_rate: 0.20,
|
|
vat_rate: 0.10,
|
|
regulatory_cost_rate: 0.03,
|
|
base_liquidity_discount: 0.175,
|
|
},
|
|
Jurisdiction::ME => JurisdictionInfo {
|
|
code: Jurisdiction::ME,
|
|
legal_system: LegalSystem::ShariaLaw,
|
|
accounting_standard: AccountingStandard::AAOIFI,
|
|
corporate_tax_rate: 0.025, // Zakat
|
|
capital_gains_tax_rate: 0.0,
|
|
vat_rate: 0.05,
|
|
regulatory_cost_rate: 0.02,
|
|
base_liquidity_discount: 0.25,
|
|
},
|
|
}
|
|
}
|
|
|
|
/// 计算辖区调整系数
|
|
pub fn adjustment_factor(self) -> f64 {
|
|
let info = self.info();
|
|
(1.0 - info.corporate_tax_rate) * (1.0 - info.regulatory_cost_rate)
|
|
}
|
|
}
|
|
|
|
#[cfg(test)]
|
|
mod tests {
|
|
use super::*;
|
|
|
|
#[test]
|
|
fn test_jurisdiction_info() {
|
|
let us_info = Jurisdiction::US.info();
|
|
assert_eq!(us_info.accounting_standard, AccountingStandard::USGAAP);
|
|
assert_eq!(us_info.legal_system, LegalSystem::CommonLaw);
|
|
|
|
let me_info = Jurisdiction::ME.info();
|
|
assert_eq!(me_info.accounting_standard, AccountingStandard::AAOIFI);
|
|
assert_eq!(me_info.legal_system, LegalSystem::ShariaLaw);
|
|
}
|
|
|
|
#[test]
|
|
fn test_adjustment_factor() {
|
|
let us_factor = Jurisdiction::US.adjustment_factor();
|
|
assert!(us_factor > 0.7 && us_factor < 0.8);
|
|
|
|
let hk_factor = Jurisdiction::HK.adjustment_factor();
|
|
assert!(hk_factor > 0.8 && hk_factor < 0.9);
|
|
}
|
|
}
|