// Asset Classification System - 资产分类系统 // 基于GNACS (Global New Asset Classification Standard) 设计 use serde::{Deserialize, Serialize}; use std::collections::HashMap; /// 资产大类 /// /// 参考GNACS、GICS、ISO 10962等国际标准设计 #[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)] pub enum AssetClass { // ========== 1. 不动产类 (Real Estate) ========== /// 1.1 住宅地产 ResidentialRealEstate(ResidentialType), /// 1.2 商业地产 CommercialRealEstate(CommercialType), /// 1.3 工业地产 IndustrialRealEstate(IndustrialType), /// 1.4 土地使用权 LandUseRights(LandType), /// 1.5 房地产投资信托(REITs) RealEstateInvestmentTrust, // ========== 2. 金融证券类 (Financial Securities) ========== /// 2.1 股权证券 EquitySecurities(EquityType), /// 2.2 债务证券 DebtSecurities(DebtType), /// 2.3 衍生品 Derivatives(DerivativeType), /// 2.4 结构化产品 StructuredProducts(StructuredType), /// 2.5 基金份额 FundShares(FundType), // ========== 3. 大宗商品类 (Commodities) ========== /// 3.1 能源商品 EnergyCommodities(EnergyType), /// 3.2 金属商品 MetalCommodities(MetalType), /// 3.3 农产品 AgriculturalCommodities(AgricultureType), /// 3.4 贵金属 PreciousMetals(PreciousMetalType), // ========== 4. 艺术品与收藏品类 (Collectibles) ========== /// 4.1 艺术品 Artworks(ArtworkType), /// 4.2 古董文物 Antiques(AntiqueType), /// 4.3 收藏品 Collectibles(CollectibleType), /// 4.4 奢侈品 LuxuryGoods(LuxuryType), // ========== 5. 知识产权类 (Intellectual Property) ========== /// 5.1 专利权 Patents(PatentType), /// 5.2 商标权 Trademarks(TrademarkType), /// 5.3 版权 Copyrights(CopyrightType), /// 5.4 商业秘密 TradeSecrets, /// 5.5 域名 DomainNames, // ========== 6. 数字资产类 (Digital Assets) ========== /// 6.1 加密货币 Cryptocurrencies(CryptoType), /// 6.2 NFT NonFungibleTokens(NFTType), /// 6.3 数字藏品 DigitalCollectibles, /// 6.4 虚拟资产 VirtualAssets(VirtualAssetType), // ========== 7. 基础设施类 (Infrastructure) ========== /// 7.1 交通设施 TransportationInfrastructure(TransportType), /// 7.2 能源设施 EnergyInfrastructure(EnergyInfraType), /// 7.3 通信设施 TelecommunicationInfrastructure, /// 7.4 公用事业 UtilityInfrastructure(UtilityType), // ========== 8. 自然资源类 (Natural Resources) ========== /// 8.1 矿产资源 MineralResources(MineralType), /// 8.2 森林资源 ForestResources, /// 8.3 水资源 WaterResources, /// 8.4 渔业资源 FisheryResources, // ========== 9. 环境权益类 (Environmental Rights) ========== /// 9.1 碳排放权 CarbonEmissionRights(CarbonType), /// 9.2 排污权 PollutionRights, /// 9.3 可再生能源证书 RenewableEnergyCertificates, /// 9.4 生态补偿权 EcologicalCompensationRights, // ========== 10. 企业权益类 (Business Interests) ========== /// 10.1 股权 Equity(EquityInterestType), /// 10.2 合伙权益 PartnershipInterests, /// 10.3 特许经营权 FranchiseRights, /// 10.4 经营权 OperatingRights, // ========== 11. 债权类 (Receivables) ========== /// 11.1 应收账款 AccountsReceivable, /// 11.2 贷款债权 LoanReceivables(LoanType), /// 11.3 租赁债权 LeaseReceivables, /// 11.4 票据债权 BillReceivables, // ========== 12. 保险产品类 (Insurance Products) ========== /// 12.1 人寿保险 LifeInsurance(LifeInsuranceType), /// 12.2 财产保险 PropertyInsurance, /// 12.3 再保险 Reinsurance, // ========== 13. 农业资产类 (Agricultural Assets) ========== /// 13.1 农地 Farmland, /// 13.2 畜牧资产 Livestock(LivestockType), /// 13.3 农业设施 AgriculturalFacilities, // ========== 14. 交通工具类 (Vehicles) ========== /// 14.1 航空器 Aircraft(AircraftType), /// 14.2 船舶 Vessels(VesselType), /// 14.3 铁路车辆 RailwayVehicles, /// 14.4 汽车 Automobiles(AutoType), // ========== 15. 机械设备类 (Machinery & Equipment) ========== /// 15.1 工业设备 IndustrialEquipment, /// 15.2 医疗设备 MedicalEquipment, /// 15.3 科研设备 ResearchEquipment, // ========== 16. 数据资产类 (Data Assets) ========== /// 16.1 用户数据 UserData, /// 16.2 商业数据 BusinessData, /// 16.3 科研数据 ResearchData, // ========== 17. 品牌资产类 (Brand Assets) ========== /// 17.1 品牌价值 BrandValue, /// 17.2 商誉 Goodwill, /// 17.3 客户关系 CustomerRelationships, // ========== 18. 体育资产类 (Sports Assets) ========== /// 18.1 球员合同 PlayerContracts, /// 18.2 赛事权益 EventRights, /// 18.3 体育场馆 SportsVenues, // ========== 19. 娱乐资产类 (Entertainment Assets) ========== /// 19.1 影视版权 FilmRights, /// 19.2 音乐版权 MusicRights, /// 19.3 游戏资产 GameAssets, // ========== 20. 其他资产类 (Other Assets) ========== /// 自定义资产类别 Custom(String), } // ========== 子类别定义 ========== /// 住宅地产类型 #[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)] pub enum ResidentialType { SingleFamily, // 独栋别墅 Apartment, // 公寓 Condominium, // 共管公寓 Townhouse, // 联排别墅 Villa, // 别墅 PentHouse, // 顶层豪宅 AffordableHousing, // 经济适用房 } /// 商业地产类型 #[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)] pub enum CommercialType { Office, // 写字楼 Retail, // 零售商铺 Hotel, // 酒店 ShoppingMall, // 购物中心 MixedUse, // 综合体 Parking, // 停车场 } /// 工业地产类型 #[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)] pub enum IndustrialType { Warehouse, // 仓库 Factory, // 工厂 LogisticsCenter, // 物流中心 DataCenter, // 数据中心 RDFacility, // 研发设施 } /// 土地类型 #[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)] pub enum LandType { Residential, // 住宅用地 Commercial, // 商业用地 Industrial, // 工业用地 Agricultural, // 农业用地 Forest, // 林地 Undeveloped, // 未开发土地 } /// 股权证券类型 #[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)] pub enum EquityType { CommonStock, // 普通股 PreferredStock, // 优先股 Warrant, // 认股权证 ConvertibleBond, // 可转换债券 DepositaryReceipt, // 存托凭证(ADR/GDR) } /// 债务证券类型 #[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)] pub enum DebtType { GovernmentBond, // 国债 CorporateBond, // 公司债 MunicipalBond, // 市政债 AssetBackedSecurity, // 资产支持证券(ABS) MortgageBackedSecurity, // 抵押贷款支持证券(MBS) } /// 衍生品类型 #[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)] pub enum DerivativeType { Futures, // 期货 Options, // 期权 Swaps, // 掉期 Forwards, // 远期 CreditDerivatives, // 信用衍生品 } /// 结构化产品类型 #[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)] pub enum StructuredType { StructuredNote, // 结构化票据 CDO, // 担保债务凭证 CLO, // 担保贷款凭证 SyntheticCDO, // 合成CDO } /// 基金类型 #[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)] pub enum FundType { MutualFund, // 共同基金 HedgeFund, // 对冲基金 PrivateEquityFund, // 私募股权基金 VentureFund, // 风险投资基金 ETF, // 交易所交易基金 IndexFund, // 指数基金 } /// 能源商品类型 #[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)] pub enum EnergyType { CrudeOil, // 原油 NaturalGas, // 天然气 Coal, // 煤炭 Gasoline, // 汽油 HeatingOil, // 取暖油 Uranium, // 铀 } /// 金属商品类型 #[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)] pub enum MetalType { Copper, // 铜 Aluminum, // 铝 Zinc, // 锌 Nickel, // 镍 Lead, // 铅 Tin, // 锡 Steel, // 钢铁 } /// 农产品类型 #[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)] pub enum AgricultureType { Wheat, // 小麦 Corn, // 玉米 Soybeans, // 大豆 Rice, // 大米 Coffee, // 咖啡 Sugar, // 糖 Cotton, // 棉花 Cocoa, // 可可 } /// 贵金属类型 #[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)] pub enum PreciousMetalType { Gold, // 黄金 Silver, // 白银 Platinum, // 铂金 Palladium, // 钯金 Rhodium, // 铑 } /// 艺术品类型 #[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)] pub enum ArtworkType { Painting, // 绘画 Sculpture, // 雕塑 Photography, // 摄影 PrintMaking, // 版画 Installation, // 装置艺术 DigitalArt, // 数字艺术 } /// 古董类型 #[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)] pub enum AntiqueType { Furniture, // 家具 Porcelain, // 瓷器 Jade, // 玉器 Bronze, // 青铜器 Calligraphy, // 书法 Painting, // 古画 } /// 收藏品类型 #[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)] pub enum CollectibleType { Stamps, // 邮票 Coins, // 钱币 Comics, // 漫画 TradingCards, // 交易卡 Memorabilia, // 纪念品 Watches, // 手表 } /// 奢侈品类型 #[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)] pub enum LuxuryType { Jewelry, // 珠宝 Watches, // 名表 Handbags, // 名包 Wine, // 名酒 Spirits, // 烈酒 Cigars, // 雪茄 } /// 专利类型 #[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)] pub enum PatentType { Invention, // 发明专利 UtilityModel, // 实用新型 Design, // 外观设计 PlantPatent, // 植物专利 } /// 商标类型 #[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)] pub enum TrademarkType { WordMark, // 文字商标 FigurativeMark, // 图形商标 CombinedMark, // 组合商标 SoundMark, // 声音商标 ColorMark, // 颜色商标 } /// 版权类型 #[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)] pub enum CopyrightType { Literary, // 文学作品 Musical, // 音乐作品 Dramatic, // 戏剧作品 Audiovisual, // 视听作品 Software, // 软件著作权 } /// 加密货币类型 #[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)] pub enum CryptoType { Bitcoin, // 比特币 Ethereum, // 以太坊 Stablecoin, // 稳定币 UtilityToken, // 功能型代币 SecurityToken, // 证券型代币 GovernanceToken, // 治理代币 } /// NFT类型 #[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)] pub enum NFTType { Art, // 艺术品NFT Collectible, // 收藏品NFT Gaming, // 游戏NFT Music, // 音乐NFT Video, // 视频NFT Metaverse, // 元宇宙NFT } /// 虚拟资产类型 #[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)] pub enum VirtualAssetType { GameItems, // 游戏道具 VirtualLand, // 虚拟土地 VirtualRealEstate, // 虚拟房产 Avatars, // 虚拟形象 } /// 交通设施类型 #[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)] pub enum TransportType { Highway, // 高速公路 Railway, // 铁路 Airport, // 机场 Seaport, // 海港 Bridge, // 桥梁 Tunnel, // 隧道 } /// 能源设施类型 #[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)] pub enum EnergyInfraType { PowerPlant, // 发电厂 SolarFarm, // 太阳能电站 WindFarm, // 风电场 HydroPlant, // 水电站 NuclearPlant, // 核电站 Pipeline, // 管道 } /// 公用事业类型 #[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)] pub enum UtilityType { Water, // 供水 Electricity, // 供电 Gas, // 供气 Sewage, // 污水处理 Waste, // 垃圾处理 } /// 矿产资源类型 #[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)] pub enum MineralType { IronOre, // 铁矿 CopperOre, // 铜矿 GoldOre, // 金矿 SilverOre, // 银矿 RareEarth, // 稀土 Lithium, // 锂矿 } /// 碳排放权类型 #[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)] pub enum CarbonType { EmissionAllowance, // 排放配额 CarbonCredit, // 碳信用 CarbonOffset, // 碳抵消 CCER, // 中国核证自愿减排量 } /// 股权权益类型 #[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)] pub enum EquityInterestType { ControllingInterest, // 控股权 MinorityInterest, // 少数股权 FounderShares, // 创始人股份 EmployeeOptions, // 员工期权 } /// 贷款类型 #[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)] pub enum LoanType { Mortgage, // 抵押贷款 PersonalLoan, // 个人贷款 BusinessLoan, // 企业贷款 StudentLoan, // 学生贷款 AutoLoan, // 汽车贷款 } /// 人寿保险类型 #[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)] pub enum LifeInsuranceType { TermLife, // 定期寿险 WholeLife, // 终身寿险 UniversalLife, // 万能寿险 VariableLife, // 变额寿险 Annuity, // 年金保险 } /// 畜牧资产类型 #[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)] pub enum LivestockType { Cattle, // 牛 Pigs, // 猪 Sheep, // 羊 Poultry, // 家禽 Horses, // 马 } /// 航空器类型 #[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)] pub enum AircraftType { CommercialAircraft, // 商用飞机 PrivateJet, // 私人飞机 Helicopter, // 直升机 Drone, // 无人机 } /// 船舶类型 #[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)] pub enum VesselType { CargoShip, // 货船 TankerShip, // 油轮 ContainerShip, // 集装箱船 CruiseShip, // 邮轮 Yacht, // 游艇 } /// 汽车类型 #[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)] pub enum AutoType { PassengerCar, // 乘用车 Truck, // 卡车 Bus, // 公交车 ElectricVehicle, // 电动车 LuxuryCar, // 豪华车 ClassicCar, // 古董车 } /// 资产分类管理器 pub struct AssetClassificationManager { /// 资产类别元数据 #[allow(dead_code)] metadata: HashMap, } /// 资产元数据 #[derive(Debug, Clone, Serialize, Deserialize)] pub struct AssetMetadata { /// 类别名称 pub name: String, /// 类别描述 pub description: String, /// 父类别 pub parent: Option, /// 子类别 pub children: Vec, /// 典型估值方法 pub valuation_methods: Vec, /// 流动性等级 (1-5, 5最高) pub liquidity_level: u8, /// 是否需要专业评估 pub requires_professional_appraisal: bool, /// 典型持有期限(天) pub typical_holding_period: Option, } impl AssetClassificationManager { pub fn new() -> Self { Self { metadata: HashMap::new(), } } /// 获取资产类别的显示名称 pub fn get_display_name(asset_class: &AssetClass) -> String { match asset_class { AssetClass::ResidentialRealEstate(t) => format!("住宅地产 - {:?}", t), AssetClass::CommercialRealEstate(t) => format!("商业地产 - {:?}", t), AssetClass::EquitySecurities(t) => format!("股权证券 - {:?}", t), AssetClass::DebtSecurities(t) => format!("债务证券 - {:?}", t), AssetClass::EnergyCommodities(t) => format!("能源商品 - {:?}", t), AssetClass::Artworks(t) => format!("艺术品 - {:?}", t), AssetClass::Patents(t) => format!("专利 - {:?}", t), AssetClass::Cryptocurrencies(t) => format!("加密货币 - {:?}", t), AssetClass::CarbonEmissionRights(t) => format!("碳排放权 - {:?}", t), AssetClass::Custom(s) => format!("自定义 - {}", s), _ => format!("{:?}", asset_class), } } /// 判断是否为金融资产 pub fn is_financial_asset(asset_class: &AssetClass) -> bool { matches!( asset_class, AssetClass::EquitySecurities(_) | AssetClass::DebtSecurities(_) | AssetClass::Derivatives(_) | AssetClass::StructuredProducts(_) | AssetClass::FundShares(_) ) } /// 判断是否为实物资产 pub fn is_physical_asset(asset_class: &AssetClass) -> bool { matches!( asset_class, AssetClass::ResidentialRealEstate(_) | AssetClass::CommercialRealEstate(_) | AssetClass::EnergyCommodities(_) | AssetClass::MetalCommodities(_) | AssetClass::Artworks(_) | AssetClass::Antiques(_) ) } /// 判断是否为数字资产 pub fn is_digital_asset(asset_class: &AssetClass) -> bool { matches!( asset_class, AssetClass::Cryptocurrencies(_) | AssetClass::NonFungibleTokens(_) | AssetClass::DigitalCollectibles | AssetClass::VirtualAssets(_) ) } } impl Default for AssetClassificationManager { fn default() -> Self { Self::new() } } #[cfg(test)] mod tests { use super::*; #[test] fn test_asset_class_display() { let asset = AssetClass::ResidentialRealEstate(ResidentialType::Apartment); let name = AssetClassificationManager::get_display_name(&asset); assert!(name.contains("住宅地产")); } #[test] fn test_is_financial_asset() { let equity = AssetClass::EquitySecurities(EquityType::CommonStock); assert!(AssetClassificationManager::is_financial_asset(&equity)); let real_estate = AssetClass::ResidentialRealEstate(ResidentialType::Apartment); assert!(!AssetClassificationManager::is_financial_asset(&real_estate)); } #[test] fn test_is_physical_asset() { let real_estate = AssetClass::CommercialRealEstate(CommercialType::Office); assert!(AssetClassificationManager::is_physical_asset(&real_estate)); let crypto = AssetClass::Cryptocurrencies(CryptoType::Bitcoin); assert!(!AssetClassificationManager::is_physical_asset(&crypto)); } #[test] fn test_is_digital_asset() { let nft = AssetClass::NonFungibleTokens(NFTType::Art); assert!(AssetClassificationManager::is_digital_asset(&nft)); let gold = AssetClass::PreciousMetals(PreciousMetalType::Gold); assert!(!AssetClassificationManager::is_digital_asset(&gold)); } }