301 lines
9.6 KiB
Plaintext
301 lines
9.6 KiB
Plaintext
///! # GNACS类型系统
|
||
///!
|
||
///! Global NAC Asset Classification System (GNACS)
|
||
///! 全球NAC资产分类系统
|
||
///!
|
||
///! **版本**: v1.0
|
||
///! **模块**: charter-std/asset/gnacs.ch
|
||
|
||
// ============================================================================
|
||
// GNACS编码结构(48位)
|
||
// ============================================================================
|
||
|
||
/// GNACS编码结构
|
||
///
|
||
/// 48位编码结构:
|
||
/// - 位1-8: 资产类别 (asset_class)
|
||
/// - 位9-16: 子类别 (sub_class)
|
||
/// - 位17-24: 司法辖区 (jurisdiction)
|
||
/// - 位25-28: 风险等级 (risk_level, 0-15)
|
||
/// - 位29-32: 流动性等级 (liquidity_level, 0-15)
|
||
/// - 位33-36: 合规状态 (compliance_status, 0-15)
|
||
/// - 位37-40: 版本号 (version, 0-15)
|
||
/// - 位41-48: 保留位 (reserved)
|
||
struct GNACSCode {
|
||
asset_class: u8, // 资产类别(8位)
|
||
sub_class: u8, // 子类别(8位)
|
||
jurisdiction: u8, // 司法辖区(8位)
|
||
risk_level: u4, // 风险等级(4位,0-15)
|
||
liquidity_level: u4, // 流动性等级(4位,0-15)
|
||
compliance_status: u4, // 合规状态(4位,0-15)
|
||
version: u4, // 版本号(4位,0-15)
|
||
reserved: u8 // 保留位(8位)
|
||
}
|
||
|
||
// ============================================================================
|
||
// GNACS编码实现
|
||
// ============================================================================
|
||
|
||
impl GNACSCode {
|
||
/// 从48位整数解析GNACS编码
|
||
///
|
||
/// # 参数
|
||
/// - `code`: 48位GNACS编码
|
||
///
|
||
/// # 返回
|
||
/// - `GNACSCode`: 解析后的GNACS结构
|
||
pub fn from_u48(code: u48) -> GNACSCode {
|
||
GNACSCode {
|
||
asset_class: ((code >> 40) & 0xFF) as u8,
|
||
sub_class: ((code >> 32) & 0xFF) as u8,
|
||
jurisdiction: ((code >> 24) & 0xFF) as u8,
|
||
risk_level: ((code >> 20) & 0x0F) as u4,
|
||
liquidity_level: ((code >> 16) & 0x0F) as u4,
|
||
compliance_status: ((code >> 12) & 0x0F) as u4,
|
||
version: ((code >> 8) & 0x0F) as u4,
|
||
reserved: (code & 0xFF) as u8
|
||
}
|
||
}
|
||
|
||
/// 转换为48位整数
|
||
///
|
||
/// # 返回
|
||
/// - `u48`: 48位GNACS编码
|
||
pub fn to_u48(&self) -> u48 {
|
||
((self.asset_class as u48) << 40) |
|
||
((self.sub_class as u48) << 32) |
|
||
((self.jurisdiction as u48) << 24) |
|
||
((self.risk_level as u48) << 20) |
|
||
((self.liquidity_level as u48) << 16) |
|
||
((self.compliance_status as u48) << 12) |
|
||
((self.version as u48) << 8) |
|
||
(self.reserved as u48)
|
||
}
|
||
|
||
/// 验证GNACS编码有效性
|
||
///
|
||
/// # 返回
|
||
/// - `bool`: true表示有效,false表示无效
|
||
pub fn validate(&self) -> bool {
|
||
// 检查资产类别是否有效(1-9)
|
||
if self.asset_class < 1 || self.asset_class > 9 {
|
||
return false;
|
||
}
|
||
|
||
// 检查风险等级是否有效(0-15)
|
||
if self.risk_level > 15 {
|
||
return false;
|
||
}
|
||
|
||
// 检查流动性等级是否有效(0-15)
|
||
if self.liquidity_level > 15 {
|
||
return false;
|
||
}
|
||
|
||
// 检查合规状态是否有效(0-15)
|
||
if self.compliance_status > 15 {
|
||
return false;
|
||
}
|
||
|
||
return true;
|
||
}
|
||
|
||
/// 获取资产类别名称
|
||
///
|
||
/// # 返回
|
||
/// - `String`: 资产类别名称
|
||
pub fn get_asset_class_name(&self) -> String {
|
||
match self.asset_class {
|
||
REAL_ESTATE => "不动产",
|
||
FINANCIAL_ASSETS => "金融资产",
|
||
ART_COLLECTIBLES => "艺术品与收藏品",
|
||
COMMODITIES => "大宗商品",
|
||
INTELLECTUAL_PROPERTY => "知识产权",
|
||
CARBON_CREDITS => "碳信用与环境权益",
|
||
DIGITAL_ASSETS => "数字资产",
|
||
REVENUE_RIGHTS => "收益权",
|
||
OTHER => "其他",
|
||
_ => "未知"
|
||
}
|
||
}
|
||
|
||
/// 获取风险等级描述
|
||
///
|
||
/// # 返回
|
||
/// - `String`: 风险等级描述
|
||
pub fn get_risk_level_description(&self) -> String {
|
||
match self.risk_level {
|
||
0..=3 => "低风险",
|
||
4..=7 => "中低风险",
|
||
8..=11 => "中高风险",
|
||
12..=15 => "高风险",
|
||
_ => "未知"
|
||
}
|
||
}
|
||
|
||
/// 获取流动性等级描述
|
||
///
|
||
/// # 返回
|
||
/// - `String`: 流动性等级描述
|
||
pub fn get_liquidity_level_description(&self) -> String {
|
||
match self.liquidity_level {
|
||
0..=3 => "低流动性",
|
||
4..=7 => "中低流动性",
|
||
8..=11 => "中高流动性",
|
||
12..=15 => "高流动性",
|
||
_ => "未知"
|
||
}
|
||
}
|
||
|
||
/// 检查是否为实物资产
|
||
///
|
||
/// # 返回
|
||
/// - `bool`: true表示实物资产,false表示非实物资产
|
||
pub fn is_physical_asset(&self) -> bool {
|
||
match self.asset_class {
|
||
REAL_ESTATE | ART_COLLECTIBLES | COMMODITIES => true,
|
||
_ => false
|
||
}
|
||
}
|
||
|
||
/// 检查是否为数字资产
|
||
///
|
||
/// # 返回
|
||
/// - `bool`: true表示数字资产,false表示非数字资产
|
||
pub fn is_digital_asset(&self) -> bool {
|
||
self.asset_class == DIGITAL_ASSETS
|
||
}
|
||
}
|
||
|
||
// ============================================================================
|
||
// 资产类别常量(9种主要类别)
|
||
// ============================================================================
|
||
|
||
/// 1. 不动产 (Real Estate)
|
||
pub const REAL_ESTATE: u8 = 1;
|
||
|
||
/// 2. 金融资产 (Financial Assets)
|
||
pub const FINANCIAL_ASSETS: u8 = 2;
|
||
|
||
/// 3. 艺术品与收藏品 (Art & Collectibles)
|
||
pub const ART_COLLECTIBLES: u8 = 3;
|
||
|
||
/// 4. 大宗商品 (Commodities)
|
||
pub const COMMODITIES: u8 = 4;
|
||
|
||
/// 5. 知识产权 (Intellectual Property)
|
||
pub const INTELLECTUAL_PROPERTY: u8 = 5;
|
||
|
||
/// 6. 碳信用与环境权益 (Carbon Credits & Environmental Rights)
|
||
pub const CARBON_CREDITS: u8 = 6;
|
||
|
||
/// 7. 数字资产 (Digital Assets)
|
||
pub const DIGITAL_ASSETS: u8 = 7;
|
||
|
||
/// 8. 收益权 (Revenue Rights)
|
||
pub const REVENUE_RIGHTS: u8 = 8;
|
||
|
||
/// 9. 其他 (Other)
|
||
pub const OTHER: u8 = 9;
|
||
|
||
// ============================================================================
|
||
// 子类别常量示例
|
||
// ============================================================================
|
||
|
||
// 不动产子类别
|
||
pub const RESIDENTIAL_REAL_ESTATE: u8 = 1; // 住宅
|
||
pub const COMMERCIAL_REAL_ESTATE: u8 = 2; // 商业地产
|
||
pub const INDUSTRIAL_REAL_ESTATE: u8 = 3; // 工业地产
|
||
pub const LAND: u8 = 4; // 土地
|
||
|
||
// 金融资产子类别
|
||
pub const EQUITY: u8 = 1; // 股权
|
||
pub const DEBT: u8 = 2; // 债权
|
||
pub const DERIVATIVES: u8 = 3; // 衍生品
|
||
pub const FUNDS: u8 = 4; // 基金
|
||
|
||
// 数字资产子类别
|
||
pub const CRYPTOCURRENCY: u8 = 1; // 加密货币
|
||
pub const NFT: u8 = 2; // NFT
|
||
pub const DIGITAL_SECURITIES: u8 = 3; // 数字证券
|
||
|
||
// ============================================================================
|
||
// 司法辖区常量(部分示例)
|
||
// ============================================================================
|
||
|
||
pub const JURISDICTION_US: u8 = 1; // 美国
|
||
pub const JURISDICTION_UK: u8 = 2; // 英国
|
||
pub const JURISDICTION_CN: u8 = 3; // 中国
|
||
pub const JURISDICTION_HK: u8 = 4; // 香港
|
||
pub const JURISDICTION_SG: u8 = 5; // 新加坡
|
||
pub const JURISDICTION_JP: u8 = 6; // 日本
|
||
pub const JURISDICTION_DE: u8 = 7; // 德国
|
||
pub const JURISDICTION_FR: u8 = 8; // 法国
|
||
pub const JURISDICTION_CH: u8 = 9; // 瑞士
|
||
pub const JURISDICTION_AE: u8 = 10; // 阿联酋
|
||
|
||
// ============================================================================
|
||
// 合规状态常量
|
||
// ============================================================================
|
||
|
||
pub const COMPLIANCE_PENDING: u4 = 0; // 待审核
|
||
pub const COMPLIANCE_APPROVED: u4 = 1; // 已批准
|
||
pub const COMPLIANCE_REJECTED: u4 = 2; // 已拒绝
|
||
pub const COMPLIANCE_SUSPENDED: u4 = 3; // 已暂停
|
||
pub const COMPLIANCE_REVOKED: u4 = 4; // 已撤销
|
||
pub const COMPLIANCE_EXPIRED: u4 = 5; // 已过期
|
||
pub const COMPLIANCE_UNDER_REVIEW: u4 = 6; // 审核中
|
||
|
||
// ============================================================================
|
||
// 辅助函数
|
||
// ============================================================================
|
||
|
||
/// 创建标准GNACS编码
|
||
///
|
||
/// # 参数
|
||
/// - `asset_class`: 资产类别
|
||
/// - `sub_class`: 子类别
|
||
/// - `jurisdiction`: 司法辖区
|
||
/// - `risk_level`: 风险等级
|
||
/// - `liquidity_level`: 流动性等级
|
||
///
|
||
/// # 返回
|
||
/// - `u48`: 48位GNACS编码
|
||
pub fn create_gnacs_code(
|
||
asset_class: u8,
|
||
sub_class: u8,
|
||
jurisdiction: u8,
|
||
risk_level: u4,
|
||
liquidity_level: u4
|
||
) -> u48 {
|
||
let gnacs = GNACSCode {
|
||
asset_class: asset_class,
|
||
sub_class: sub_class,
|
||
jurisdiction: jurisdiction,
|
||
risk_level: risk_level,
|
||
liquidity_level: liquidity_level,
|
||
compliance_status: COMPLIANCE_PENDING,
|
||
version: 1,
|
||
reserved: 0
|
||
};
|
||
|
||
return gnacs.to_u48();
|
||
}
|
||
|
||
/// 解析GNACS编码字符串(十六进制)
|
||
///
|
||
/// # 参数
|
||
/// - `hex_string`: 十六进制字符串(如"0x010101120187")
|
||
///
|
||
/// # 返回
|
||
/// - `GNACSCode`: 解析后的GNACS结构
|
||
pub fn parse_gnacs_hex(hex_string: String) -> GNACSCode {
|
||
// 移除"0x"前缀
|
||
let hex = hex_string.trim_start_matches("0x");
|
||
|
||
// 转换为u48
|
||
let code = u48::from_hex(hex);
|
||
|
||
return GNACSCode::from_u48(code);
|
||
}
|