NAC_Blockchain/nvm_v2/nvm-l0/src/asset_classification.rs

779 lines
21 KiB
Rust

// 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<String, AssetMetadata>,
}
/// 资产元数据
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AssetMetadata {
/// 类别名称
pub name: String,
/// 类别描述
pub description: String,
/// 父类别
pub parent: Option<String>,
/// 子类别
pub children: Vec<String>,
/// 典型估值方法
pub valuation_methods: Vec<String>,
/// 流动性等级 (1-5, 5最高)
pub liquidity_level: u8,
/// 是否需要专业评估
pub requires_professional_appraisal: bool,
/// 典型持有期限(天)
pub typical_holding_period: Option<u32>,
}
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));
}
}