# coding: utf-8
from sqlalchemy import Column, DECIMAL, Date, DateTime, String, TIMESTAMP, Text, text
from sqlalchemy.dialects.mysql import INTEGER, MEDIUMTEXT, TINYINT
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()
metadata = Base.metadata


class CompanyInfo(Base):
    __tablename__ = 'company_info'
    __table_args__ = {'comment': '公司基本信息表'}

    id = Column(String(64), primary_key=True)
    p_company_id = Column(String(64), comment='公司id')
    company_name = Column(String(255), comment='公司中文全称')
    company_short_name = Column(String(80), comment='公司中文简称')
    company_english_name = Column(String(255), comment='基金管理人全称(英文)')
    company_type = Column(INTEGER(11), comment='公司类型:1-私募证券投资、2-公募基金公司、3-银行、4-证券公司、5-信托公司、6-审计机构,7-法律顾问,8-投资顾问,9-行政管理人,10-上市公司,11-期货公司,12-基金公司子公司,13工作室,14-私募股权投资,15-证券公司子公司,16-期货公司子公司,17-私募创业投资,-1-私募其他投资')
    organization_number = Column(String(20), comment='组织机构代码')
    establish_date = Column(Date, comment='公司成立日期')
    domicile_id = Column(INTEGER(11), comment='公司注册国家:1-中国大陆、2-香港、3-新加坡、4-开曼群岛、5-台湾、6-英属维尔京群岛BVI、-1-其他')
    company_address = Column(String(255), comment='公司注册地址')
    company_address2 = Column(String(255), comment='办公地址')
    city = Column(String(100), comment='城市')
    province = Column(String(100), comment='省')
    country = Column(String(100), comment='国家')
    reg_city = Column(String(100), comment='注册城市')
    reg_province = Column(String(100), comment='注册省')
    reg_country = Column(String(100), comment='注册国家')
    contact_phone = Column(String(20), comment='联系电话')
    post_code = Column(String(40), comment='邮政编码')
    fax = Column(String(20), comment='传真')
    email = Column(String(40), comment='邮箱')
    website = Column(String(255), comment='公司网址')
    registered_capital = Column(DECIMAL(22, 6), comment='公司注册资本,<量纲:万元>\t')
    company_profile = Column(Text, comment='公司简介')
    offshore_fund = Column(INTEGER(11), comment='是否有海外基金,0-否,1-是,-1-其他')
    philosopy = Column(Text, comment='投资理念')
    company_status = Column(INTEGER(11), comment='公司状态:1-运行;2-注销')
    base_currency_crc = Column(INTEGER(11), comment='公司注册资本货币单位:1-人民币,2-港币,3-美元,-1-其他')
    register_number = Column(String(20), comment='备案编码')
    register_status = Column(INTEGER(4), comment='备案状态:0-未备案,1-备案注销,2-备案存续')
    register_date = Column(Date, comment='备案日期')
    register_number_address = Column(String(255), comment='备案地址')
    is_member = Column(TINYINT(4), comment='是否会员:1-是,0-否')
    join_date = Column(Date, comment='入会时间')
    member_type = Column(INTEGER(4), comment='会员类型:1-普通会员、2-联席会员、3-观察会员、4-特别会员')
    fund_category_ori = Column(String(50), comment='管理基金主要类别(与中基协同步)')
    business_type = Column(String(50), comment='业务类型')
    nature_business_type = Column(INTEGER(4), comment='企业性质:1 中外合作企业 2中外合资企业 3内资企业 4境外机构 5外商独资企业 6政府机构')
    capital_paid_rate = Column(DECIMAL(22, 6), comment='注册资本实缴比例')
    logo = Column(String(255), comment='公司logo')
    isvisible = Column(INTEGER(11), comment='公司是否在前台可见')
    paid_capital = Column(DECIMAL(22, 6), comment='实缴资本(万元)(人民币)')
    company_asset_size = Column(INTEGER(4), comment='公司资产规模 1:0-1亿 2:1-10亿 3:10-20亿 4:20-50亿 5:50-100亿 6:100亿以上')
    legal_representative = Column(String(100), comment='法人代表')
    representative_experience = Column(MEDIUMTEXT, comment='法人代表履历')
    is_qualify = Column(INTEGER(11), comment='是否认证 0:否 1:是')
    get_qualify_method = Column(String(50), comment='法人从业资格获得方式')
    employee_cnts = Column(INTEGER(11), comment='员工人数')
    integrity_info = Column(String(500), comment='信信息')
    special_tips = Column(String(300), comment='提示信息')
    amac_link = Column(String(200), comment='协会网站链接')
    create_time = Column(DateTime, comment='创建时间')
    create_by = Column(String(64), comment='创建人')
    update_time = Column(DateTime, comment='修改时间')
    update_by = Column(String(64), comment='修改人')
    delete_tag = Column(INTEGER(1), nullable=False, server_default=text("'0'"), comment='删除标识')


class CompanyTnaPersonnel(Base):
    __tablename__ = 'company_tna_personnel'
    __table_args__ = {'comment': '公司管理资产及人员变动统计'}

    id = Column(String(64), primary_key=True, comment='主键ID')
    company_id = Column(String(64), nullable=False, comment='公司id')
    stat_date = Column(Date, nullable=False, comment='统计日期')
    trust_fund_asset_size = Column(DECIMAL(22, 6), comment='信托管理总资产规模,<量纲:亿元>')
    special_account_asset_size = Column(DECIMAL(22, 6), comment='专户管理总资产规模,<量纲:亿元>')
    ltdco_fund_asset_size = Column(DECIMAL(22, 6), comment='有限合伙管理总资产规模,<量纲:亿元>')
    offshore_fund_asset_size = Column(DECIMAL(22, 6), comment='海外基金管理总资产规模,<量纲:亿元>')
    fund_num = Column(INTEGER(11), comment='基金总数')
    staff_num = Column(INTEGER(11), comment='公司人数')
    analyst_num = Column(INTEGER(11), comment='投研人员数')
    total_asset_size = Column(DECIMAL(22, 6), comment='管理总资产规模,<量纲:亿元>\t')
    create_by = Column(String(64))
    create_time = Column(DateTime)
    update_by = Column(String(64))
    update_time = Column(DateTime)
    delete_tag = Column(INTEGER(11), nullable=False, server_default=text("'0'"))


class ConfidenceIndex(Base):
    __tablename__ = 'confidence_index'
    __table_args__ = {'comment': '对冲基金经理信心指数'}

    id = Column(String(64), primary_key=True)
    index_id = Column(String(64), nullable=False, index=True, comment='指数id')
    index_name = Column(String(50), nullable=False, comment='指数全称')
    index_date = Column(Date, nullable=False, comment='指数日期')
    index_value = Column(DECIMAL(22, 6), nullable=False, comment='信心指数值')
    market_estimation_index = Column(DECIMAL(22, 6), nullable=False, comment='A股市场趋势预期信心指标值')
    position_plan_index = Column(DECIMAL(22, 6), nullable=False, comment='仓位增减持投资计划指标值')
    me_extrem_optimistic = Column(DECIMAL(22, 6), nullable=False, comment='市场趋势预期信心极度乐观人数百分比例;<量纲:%>')
    me_optimistic = Column(DECIMAL(22, 6), nullable=False, comment='市场趋势预期信乐观人数百分比例;<量纲:%>')
    me_netural = Column(DECIMAL(22, 6), nullable=False, comment='市场趋势预期信乐观人数百分比例;<量纲:%>')
    me_pessimistic = Column(DECIMAL(22, 6), nullable=False, comment='市场趋势预期信心悲观人数百分比例;<量纲:%>')
    me_extrem_pessimistic = Column(DECIMAL(22, 6), nullable=False, comment='市场趋势预期信心极度悲观人数百分比例;<量纲:%>')
    pp_increase_significant = Column(DECIMAL(22, 6), nullable=False, comment='计划大幅增仓人数百分比例;<量纲:%>')
    pp_increase = Column(DECIMAL(22, 6), nullable=False, comment='计划增仓人数百分比例;<量纲:%>')
    pp_unchange = Column(DECIMAL(22, 6), nullable=False, comment='计划仓位不变人数百分比例;<量纲:%>')
    pp_reduce = Column(DECIMAL(22, 6), nullable=False, comment='计划减仓人数百分比例;<量纲:%>')
    pp_reduce_significant = Column(DECIMAL(22, 6), nullable=False, comment='计划大幅减仓人数百分比例;<量纲:%>')
    update_time = Column(TIMESTAMP, nullable=False, server_default=text("CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP"))
    create_time = Column(TIMESTAMP, nullable=False, server_default=text("CURRENT_TIMESTAMP"))
    delete_tag = Column(INTEGER(11), nullable=False, server_default=text("'0'"))


class ContractTemplateManage(Base):
    __tablename__ = 'contract_template_manage'
    __table_args__ = {'comment': '合同及指南管理'}

    id = Column(String(64), primary_key=True, comment='唯一主键')
    fund_id = Column(String(64), nullable=False, comment='产品id')
    trading_rules = Column(String(255), comment='交易规则')
    expense_subscription = Column(String(255), comment='基金总费用-认/申购费')
    expense_ratio = Column(DECIMAL(22, 6), comment='认购费用')
    expense_manage = Column(String(255), comment='基金总费用-管理费')
    expense_manage_ratio = Column(DECIMAL(22, 6), comment='基金管理费用')
    expense_achievement = Column(String(255), comment='基金总费用-业绩报酬')
    expense_achievement_ratio = Column(DECIMAL(22, 6), comment='基金总费用-业绩报酬比例')
    ifa_subscription = Column(String(255), comment='理财师分成-认/申购费')
    ifa_subscription_ratio = Column(DECIMAL(22, 6), comment='理财师分成-认/申购费比例')
    ifa_manage = Column(String(255), comment='理财师分成-管理费')
    ifa_manage_ratio = Column(DECIMAL(22, 6), comment='理财师分成-管理费比例')
    ifa_achievement = Column(String(255), comment='理财师分成-业绩报酬')
    ifa_achievement_ratio = Column(DECIMAL(22, 6), comment='理财师分成-业绩报酬比例')
    create_time = Column(DateTime, nullable=False, server_default=text("CURRENT_TIMESTAMP"))
    creart_by = Column(String(64))
    update_time = Column(DateTime, nullable=False, server_default=text("CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP"))
    update_by = Column(String(64))
    delete_tag = Column(INTEGER(3), nullable=False, server_default=text("'0'"), comment='删除标志位:0:未删除,1:已删除')


class FileDesc(Base):
    __tablename__ = 'file_desc'
    __table_args__ = {'comment': '文件描述'}

    id = Column(String(64), primary_key=True)
    rel_id = Column(String(64), nullable=False, index=True, server_default=text("''"), comment='文件id')
    info = Column(MEDIUMTEXT, nullable=False)
    create_by = Column(String(64), nullable=False, server_default=text("''"))
    create_time = Column(TIMESTAMP, nullable=False, server_default=text("CURRENT_TIMESTAMP"))
    update_by = Column(String(64))
    update_time = Column(TIMESTAMP)
    delete_tag = Column(INTEGER(3), nullable=False, server_default=text("'0'"))


class FundAssetSize(Base):
    __tablename__ = 'fund_asset_size'
    __table_args__ = {'comment': '基金资产规模'}

    id = Column(String(64), primary_key=True)
    fund_id = Column(String(64))
    fund_asset_size_date = Column(Date, comment='规模日期')
    fund_asset_size = Column(DECIMAL(22, 6), comment='基金资产规模')
    create_by = Column(String(64))
    create_time = Column(DateTime)
    update_by = Column(String(64))
    update_time = Column(DateTime)
    delete_tag = Column(TINYINT(3), nullable=False, server_default=text("'0'"))


class FundAttribute(Base):
    __tablename__ = 'fund_attributes'
    __table_args__ = {'comment': '基金属性'}

    id = Column(String(64), primary_key=True, comment='基金id')
    master_feeder_fund = Column(INTEGER(11), comment='是否为master feeder fund:1-是')
    target_return_fund = Column(INTEGER(11), comment='是否为目标回报型基金:1-是')
    risk_buffer_fund = Column(INTEGER(11), comment='是否为风险缓冲型基金:1-是')
    umbrella_fund = Column(INTEGER(11), comment='是否为伞形产品,1-是')
    share_class = Column(INTEGER(11), comment='分级基金份额标识:1-是')
    multi_advisor = Column(INTEGER(11), comment='多投顾:1-是')
    pro_class_m = Column(INTEGER(11), comment='是否为分级母基金:1-是')
    pro_class_s = Column(INTEGER(11), comment='是否为分级子基金:1-是')
    tot_sign = Column(TINYINT(4), comment='是否信托中类型TOT(一对一):1-是;0-否')
    create_by = Column(String(64))
    create_time = Column(DateTime)
    update_by = Column(String(64))
    update_time = Column(DateTime)
    delete_tag = Column(TINYINT(4))


class FundBank(Base):
    __tablename__ = 'fund_bank'
    __table_args__ = {'comment': '基金托管银行信息'}

    fund_id = Column(String(64), primary_key=True)
    bank_code = Column(String(32), comment='银行code')
    bank_id = Column(String(32))
    bank_name = Column(String(64), nullable=False, comment='银行名称')
    fund_account = Column(String(64), nullable=False, comment='账号id')
    account_name = Column(String(32), nullable=False, comment='户名')
    create_by = Column(String(64), nullable=False)
    create_time = Column(TIMESTAMP, nullable=False, server_default=text("CURRENT_TIMESTAMP"))
    update_by = Column(String(64), nullable=False)
    update_time = Column(TIMESTAMP, nullable=False, server_default=text("CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP"))
    delete_tag = Column(INTEGER(3), nullable=False, server_default=text("'0'"))


class FundCombineInfo(Base):
    __tablename__ = 'fund_combine_info'
    __table_args__ = {'comment': '组合基金'}

    id = Column(String(64), primary_key=True)
    p_fund_id = Column(String(64), nullable=False, comment='组合基金id')
    fund_id = Column(String(64), nullable=False, comment='基金id')
    change_date = Column(Date, comment='最新变动日期')
    proportion_ratio = Column(DECIMAL(22, 6), comment='占比')
    compare_last = Column(DECIMAL(22, 6), comment='较上次推荐持仓变动')
    flag = Column(INTEGER(3), comment='组合基金标识 0:当前组合 1:历史组合')
    create_time = Column(DateTime)
    create_by = Column(String(64))
    update_time = Column(DateTime)
    update_by = Column(String(64))
    delete_tag = Column(INTEGER(3), server_default=text("'0'"))


class FundCombineInfoLog(Base):
    __tablename__ = 'fund_combine_info_log'
    __table_args__ = {'comment': '组合基金变更记录表'}

    id = Column(String(64), primary_key=True)
    p_fund_id = Column(String(64), nullable=False, comment='组合基金id')
    fund_id = Column(String(64), nullable=False, comment='基金id')
    change_date = Column(Date, comment='变动日期')
    proportion_ratio = Column(DECIMAL(22, 6), comment='占比')
    compare_last = Column(DECIMAL(22, 6), comment='较上次持仓变动')
    create_time = Column(DateTime)
    create_by = Column(String(64))
    update_time = Column(DateTime)
    update_by = Column(String(64))
    delete_tag = Column(INTEGER(3), server_default=text("'0'"))


class FundCount(Base):
    __tablename__ = 'fund_count'
    __table_args__ = {'comment': '基金历史业绩'}

    id = Column(String(64), primary_key=True)
    fund_id = Column(String(64), nullable=False, unique=True, comment='基金id')
    strategy = Column(INTEGER(4), index=True, comment='基金策略分类')
    substrategy = Column(INTEGER(4), comment="融智子策略分类:1010-主观多头 1020-股票多空 1030-量化多头 2010-宏观策略 3010-主观趋势 3020-主观套利 3030-量化趋势 3040-量化套利 3050-管理期货复合 4010-并购重组 4020-定向增发 4030-大宗交易 4040-事件驱动复合 5010-股票市场中性 5020-套利 5030-相对价值复合 6010-纯债策略 6020-强债策略 6030-固收复合 7010-MOM 7020-FOF 8010-主观多策略 8020-量化多策略 -1-其他策略'")
    type = Column(INTEGER(3), nullable=False, server_default=text("'0'"), comment='是否可预约 0:不可预约 1:可预约')
    end_date = Column(Date, comment='截至日期')
    price_date = Column(Date, comment='最近累计净值日期')
    net_nav = Column(DECIMAL(22, 6), comment='单位净值')
    cumulative_nav = Column(DECIMAL(22, 6), comment='最近累计净值')
    ret_1day = Column(DECIMAL(22, 6), comment='最近一天收益率')
    ret_1day_bm1 = Column(DECIMAL(22, 6), comment='最近一天基准指数收益率,基准指数bm1=沪深300(取决于基金设定的基准指数)')
    ret_1w = Column(DECIMAL(22, 6), comment='最近一个周收益率')
    ret_1w_bm1 = Column(DECIMAL(22, 6), comment='最近一个周基准指数收益率,基准指数bm1=沪深300(取决于基金设定的基准指数)')
    ret_1m = Column(DECIMAL(22, 6), comment='最近一个月收益率')
    ret_1m_bm1 = Column(DECIMAL(22, 6), comment='最近一个月基准指数收益率,基准指数bm1=沪深300(取决于基金设定的基准指数)')
    ret_3m = Column(DECIMAL(22, 6), comment='最近三个月收益率')
    ret_3m_bm1 = Column(DECIMAL(22, 6), comment='最近三个月基准指数收益率,基准指数bm1=沪深300(取决于基金设定的基准指数)')
    ret_6m = Column(DECIMAL(22, 6), comment='最近半年收益率')
    ret_6m_bm1 = Column(DECIMAL(22, 6), comment='最近半年基准指数收益率,基准指数bm1=沪深300(取决于基金设定的基准指数)')
    ret_1y = Column(DECIMAL(22, 6), comment='最近一年收益率')
    ret_1y_bm1 = Column(DECIMAL(22, 6), comment='最近一年基准指数收益率,基准指数bm1=沪深300(取决于基金设定的基准指数)')
    ret_2y = Column(DECIMAL(22, 6), comment='最近两年收益率')
    ret_2y_bm1 = Column(DECIMAL(22, 6), comment='最近两年基准指数收益率,基准指数bm1=沪深300(取决于基金设定的基准指数)')
    ret_2y_a = Column(DECIMAL(22, 6), comment='最近两年收益率(年化)')
    ret_2y_bm1_a = Column(DECIMAL(22, 6), comment='最近两年基准指数收益率(年化),基准指数bm1=沪深300(取决于基金设定的基准指数)')
    ret_3y = Column(DECIMAL(22, 6), comment='最近三年收益率')
    ret_3y_bm1 = Column(DECIMAL(22, 6), comment='最近三年基准指数收益率,基准指数bm1=沪深300(取决于基金设定的基准指数)')
    ret_3y_a = Column(DECIMAL(22, 6), comment='最近三年收益率(年化)')
    ret_3y_bm1_a = Column(DECIMAL(22, 6), comment='最近三年基准指数收益率(年化),基准指数bm1=沪深300(取决于基金设定的基准指数)')
    ret_4y = Column(DECIMAL(22, 6), comment='最近四年收益率')
    ret_4y_bm1 = Column(DECIMAL(22, 6), comment='最近四年基准指数收益率,基准指数bm1=沪深300(取决于基金设定的基准指数)')
    ret_4y_a = Column(DECIMAL(22, 6), comment='最近四年收益率(年化)')
    ret_4y_bm1_a = Column(DECIMAL(22, 6), comment='最近四年基准指数收益率(年化),基准指数bm1=沪深300(取决于基金设定的基准指数)')
    ret_5y = Column(DECIMAL(22, 6), comment='最近五年收益率')
    ret_5y_bm1 = Column(DECIMAL(22, 6), comment='最近五年基准指数收益率,基准指数bm1=沪深300(取决于基金设定的基准指数)')
    ret_5y_a = Column(DECIMAL(22, 6), comment='最近五年收益率(年化)')
    ret_5y_bm1_a = Column(DECIMAL(22, 6), comment='最近五年基准指数收益率(年化),基准指数bm1=沪深300(取决于基金设定的基准指数)')
    ret_ytd = Column(DECIMAL(22, 6), comment='今年以来收益率')
    ret_ytd_bm1 = Column(DECIMAL(22, 6), comment='今年以来基准指数收益率,基准指数bm1=沪深300(取决于基金设定的基准指数)')
    ret_incep = Column(DECIMAL(22, 6), comment='成立以来收益率')
    ret_incep_bm1 = Column(DECIMAL(22, 6), comment='成立以来基准指数收益率,基准指数bm1=沪深300(取决于基金设定的基准指数)')
    ret_incep_a = Column(DECIMAL(22, 6), comment='成立以来收益率(年化)')
    ret_incep_bm1_a = Column(DECIMAL(22, 6), comment='成立以来基准指数收益率(年化),基准指数bm1=沪深300(取决于基金设定的基准指数)')
    sharperatio_1y = Column(DECIMAL(22, 6), comment='最近一年的夏普比率')
    sharperatio_2y = Column(DECIMAL(22, 6), comment='最近两年的夏普比率')
    sharperatio_3y = Column(DECIMAL(22, 6), comment='最近三年的夏普比率')
    sharperatio_4y = Column(DECIMAL(22, 6), comment='最近四年的夏普比率')
    sharperatio_5y = Column(DECIMAL(22, 6), comment='最近五年的夏普比率')
    sharperatio_incep = Column(DECIMAL(22, 6), comment='成立以来的夏普比率')
    stddev_1y = Column(DECIMAL(22, 6), comment='最近一年的年化波动率')
    stddev_2y = Column(DECIMAL(22, 6), comment='最近两年的年化波动率')
    stddev_3y = Column(DECIMAL(22, 6), comment='最近三年的年化波动率')
    stddev_4y = Column(DECIMAL(22, 6), comment='最近四年的年化波动率')
    stddev_5y = Column(DECIMAL(22, 6), comment='最近五年的年化波动率')
    stddev_10y = Column(DECIMAL(22, 6), comment='最近十年的年化波动率')
    stddev_incep = Column(DECIMAL(22, 6), comment='成立以来的年化波动率')
    stddev_ytd = Column(DECIMAL(22, 6), comment='今年以来的年化波动率')
    maxdrawdown_1y = Column(DECIMAL(22, 6), comment='最近一年的最大回撤')
    maxdrawdown_2y = Column(DECIMAL(22, 6), comment='最近两年的最大回撤')
    maxdrawdown_3y = Column(DECIMAL(22, 6), comment='最近四年的最大回撤')
    maxdrawdown_4y = Column(DECIMAL(22, 6), comment='最近四年的最大回撤')
    maxdrawdown_5y = Column(DECIMAL(22, 6), comment='最近五年的最大回撤')
    maxdrawdown_10y = Column(DECIMAL(22, 6), comment='最近十年的最大回撤')
    maxdrawdown_incep = Column(DECIMAL(22, 6), comment='成立以来的最大回撤')
    data_sources = Column(INTEGER(3), nullable=False, server_default=text("'1'"), comment='数据来源 1:tanpu,2:私募排排 3:指数')
    update_time = Column(TIMESTAMP, server_default=text("CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP"))
    create_time = Column(TIMESTAMP, nullable=False, server_default=text("CURRENT_TIMESTAMP"))
    status = Column(INTEGER(3), nullable=False, server_default=text("'0'"), comment='0:待上架  1:已上架 2:已下架')
    sort = Column(INTEGER(11), server_default=text("'0'"), comment='排序')
    delete_tag = Column(INTEGER(3), nullable=False, server_default=text("'0'"))


class FundDistribution(Base):
    __tablename__ = 'fund_distribution'
    __table_args__ = {'comment': '基金分红'}

    id = Column(String(64), primary_key=True)
    fund_id = Column(String(64), nullable=False, index=True, comment='基金Id')
    distribute_date = Column(Date, nullable=False, comment='分配日期')
    distribute_type = Column(INTEGER(11), nullable=False, comment='基金分配类型标志:-1-其他,1-分红,2-拆分 3-业绩报酬 -1-其他')
    distribution = Column(DECIMAL(22, 6), comment='分红/拆分比例')
    create_by = Column(String(64))
    create_time = Column(DateTime)
    update_by = Column(String(64))
    update_time = Column(DateTime)
    delete_tag = Column(INTEGER(11), nullable=False, server_default=text("'0'"))


class FundExplain(Base):
    __tablename__ = 'fund_explain'
    __table_args__ = {'comment': '产品解读'}

    id = Column(String(64), primary_key=True, comment='主键id')
    fund_id = Column(String(64), nullable=False, comment='基金id')
    title = Column(String(128), nullable=False, comment='标题')
    content = Column(String(2000), nullable=False, comment='解读内容')
    sort = Column(INTEGER(11), nullable=False, server_default=text("'0'"), comment='排序')
    create_by = Column(String(64), nullable=False, comment='创建人')
    create_time = Column(DateTime, nullable=False, comment='创建时间')
    update_by = Column(String(64), comment='更新人')
    update_time = Column(DateTime, comment='更新时间')
    delete_tag = Column(INTEGER(1), nullable=False, server_default=text("'0'"), comment='删除标识')


class FundFileRecord(Base):
    __tablename__ = 'fund_file_record'

    id = Column(String(64), primary_key=True, server_default=text("''"), comment='唯一主键')
    ref_id = Column(String(64), index=True, comment='关联数据ID')
    file_name = Column(String(128), comment='文件原始名称')
    original_url = Column(String(256), comment='文件原链接')
    type = Column(INTEGER(5), nullable=False, server_default=text("'1'"), comment='1:公告,2:附件,3:探普研报')
    file_suffix = Column(String(128), comment='文件后缀名')
    logical_name = Column(String(128), comment='文件逻辑名')
    logical_path = Column(String(256), index=True, comment='文件存放路径')
    create_time = Column(TIMESTAMP, nullable=False, server_default=text("CURRENT_TIMESTAMP"), comment='创建时间')
    create_by = Column(String(64), comment='创建人')
    update_time = Column(TIMESTAMP, nullable=False, server_default=text("CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP"), comment='修改时间')
    update_by = Column(String(64), comment='修改人')
    delete_tag = Column(INTEGER(1), nullable=False, server_default=text("'0'"), comment='删除标识')
    task_id = Column(String(100), comment='任务id')
    status = Column(INTEGER(1), comment='状态 0 :待转换  1:已经转换  2:转换失败')


class FundFuturestypeMapping(Base):
    __tablename__ = 'fund_futurestype_mapping'
    __table_args__ = {'comment': '基金投资品种信息'}

    id = Column(String(64), primary_key=True)
    fund_id = Column(String(64), nullable=False)
    futures_type = Column(TINYINT(4), comment='投资品种:1-商品期货、2-金融期货、3-股票、4-债券型、5-指数型、6-期权型、7-基金型、8-新三板、-1-其他;')
    create_by = Column(String(64))
    create_time = Column(DateTime)
    update_by = Column(String(64))
    update_time = Column(DateTime)
    delete_tag = Column(TINYINT(3), nullable=False)


class FundInfo(Base):
    __tablename__ = 'fund_info'
    __table_args__ = {'comment': '基金基本信息'}

    id = Column(String(64), primary_key=True, comment='基金id')
    p_fund_id = Column(String(64), comment='父级产品ID')
    fund_name = Column(String(255), nullable=False, comment='基金中文全称')
    fund_short_name = Column(String(80), nullable=False, comment='基金中文简称')
    fund_structure = Column(INTEGER(11), comment='基金形式:1-公司型,2-合伙型,3-契约型,-1-其他')
    fund_type = Column(INTEGER(4), comment='私募基金类型:1-信托计划,2-有限合伙,3-券商资管,4-公募专户,5-单账户,6-证券投资基金,7-海外基金,8-期货资管,9-保险资管、10-创业投资基金、11-股权投资基金、12-银行理财、13-类固收信托、-1其他投资基金   \t\t\\n公募基金类型:1-混合型、2-债券型、3-定开债券、4-联接基金、5-货币型、6-债券指数、7-保本型、8-理财型、9-QDII、10-股票指数、11-QDII-指数、12-股票型、13-固定收益、14-分级杠杆、15-ETF-场内、16-QDII-ETF、17-债券创新-场内、18-封闭式')
    type = Column(INTEGER(3), nullable=False, server_default=text("'0'"), comment='是否可预约 0:不可预约 1:可预约')
    raise_type = Column(INTEGER(4), comment='募集方式:1-私募,2-公募')
    fund_characteristic = Column(Text, comment='券商资管产品特点')
    base_currency = Column(INTEGER(11), comment='基础货币,1-人民币,2-港币,3-美元,4-份,-1-其他')
    inception_date = Column(Date, comment='成立日期')
    domicile = Column(INTEGER(4), comment='注册国家,1-中国大陆、2-香港、3-新加坡、4-开曼群岛、5-台湾、6-英属维尔京群岛BVI、-1-其他')
    primary_benchmark_id = Column(String(64), comment="指数id,以'IN'开头(后加36进制编码格式,不足8位长度左补零) 例:IN00000001")
    lockup_period = Column(INTEGER(4), comment='封闭期 (排排数据:单位:月,-1:不确定,0:无封闭期)')
    open_day = Column(String(400), comment='开放日')
    apply_day = Column(DateTime, comment='预约开放日')
    redeem_day = Column(DateTime, comment='赎回开放日')
    duration = Column(INTEGER(11), comment='产品存续期,单位:月。-1,不确定,0,无固定期限,999999永续')
    investment_scope = Column(Text, comment='基金投资范围')
    investment_restriction = Column(Text, comment='投资限制')
    fund_investment_philosophy = Column(Text, comment='投资理念')
    fund_strategy_description = Column(Text, comment='投资策略')
    advisor_id = Column(String(64), comment='投资顾问id')
    custodian_id = Column(String(64), comment='托管银行Id')
    broker_id = Column(String(64), comment='证券经纪人Id')
    broker_future_id = Column(String(64), comment='期货经纪人id')
    liquidation_agency_id = Column(String(64), comment='外包机构Id')
    trust_id = Column(String(64), comment='基金管理公司Id')
    investment_consultant_id = Column(String(64), comment='投资顾问Id')
    administrator_id = Column(String(64), comment='行政管理人Id')
    legal_counsel_id = Column(String(64), comment='法律顾问Id')
    auditor_id = Column(String(64), comment='审计机构')
    nav_frequency = Column(INTEGER(3), comment='净值披露频率 1:天 2:周 3:月 4:半月 5:季度')
    performance_disclosure_mark = Column(INTEGER(4), comment='产品业绩披露标识:1-AAA,2-AA,3-A,4-A-,5-A+')
    register_number = Column(String(20), comment='备案编码')
    register_date = Column(Date, comment='备案日期')
    isvisible = Column(INTEGER(4), comment='基金在前台是否可见:1-可见 0-不可见')
    istiered = Column(INTEGER(4), comment='是否分级:1-分级,0-不分级;')
    is_ranking = Column(INTEGER(4), comment='是否参与排名,1-参与排名 0-不参与排名 \t')
    is_rating = Column(INTEGER(4), comment='是否参与评级,1-参与评级 0-不参与评级\t')
    special_tips = Column(String(300), comment='基金协会特别提示')
    amac_url = Column(String(255), comment='基金协会链接')
    nav_source_type = Column(INTEGER(4), comment='净值来源说明:1-托管外包、2-信托券商官网、3-私募机构')
    combine_target = Column(Text, comment='组合目标')
    fit_group = Column(Text, comment='适合群体')
    combine_comment = Column(Text, comment='组合点评')
    transfer_comment = Column(Text, comment='调仓点评')
    desc_info = Column(String(512), comment='基金描述')
    strategy = Column(INTEGER(4), comment='融智策略分类,1-股票策略,2-宏观策略,3-管理期货,4-事件驱动,5-相对价值策略,6-固定收益策略,7-组合基金,8-复合策略,-1-其它策略')
    substrategy = Column(INTEGER(4), comment="融智子策略分类:1010-主观多头 1020-股票多空 1030-量化多头 2010-宏观策略 3010-主观趋势 3020-主观套利 3030-量化趋势 3040-量化套利 3050-管理期货复合 4010-并购重组 4020-定向增发 4030-大宗交易 4040-事件驱动复合 5010-股票市场中性 5020-套利 5030-相对价值复合 6010-纯债策略 6020-强债策略 6030-固收复合 7010-MOM 7020-FOF 8010-主观多策略 8020-量化多策略 -1-其他策略'")
    risk_level = Column(INTEGER(1), comment='风险等级')
    create_by = Column(String(64))
    create_time = Column(DateTime)
    update_by = Column(String(64))
    update_time = Column(DateTime)
    data_sources = Column(INTEGER(5), nullable=False, server_default=text("'1'"), comment='数据来源 1:tanpu,2:私募排排')
    status = Column(INTEGER(1), comment='0:待上架  1:已上架 2:已下架')
    delete_tag = Column(INTEGER(3), nullable=False, server_default=text("'0'"), comment='删除标识 0:否 1:是')
    sort = Column(INTEGER(10), nullable=False, server_default=text("'0'"), comment='排序')


class FundManagerMapping(Base):
    __tablename__ = 'fund_manager_mapping'
    __table_args__ = {'comment': '基金与基金经理关联'}

    id = Column(String(64), primary_key=True)
    fund_id = Column(String(64), nullable=False, index=True, comment='基金id')
    fund_manager_id = Column(String(64), index=True, comment='基金经理id,即人员id')
    management_start_date = Column(Date, comment='基金管理开始时间')
    management_end_date = Column(Date, comment='基金管理结束时间')
    isvisible = Column(INTEGER(11), comment='前台是否可见,1-可见 0-不可见')
    create_by = Column(String(64))
    create_time = Column(DateTime)
    update_by = Column(String(64))
    update_time = Column(DateTime)
    delete_tag = Column(INTEGER(11), nullable=False, server_default=text("'0'"))


class FundMarketIndex(Base):
    __tablename__ = 'fund_market_indexes'
    __table_args__ = {'comment': '指数'}

    id = Column(String(64), primary_key=True)
    index_id = Column(String(10), nullable=False)
    index_code = Column(String(20), nullable=False, comment='指数代码')
    price_date = Column(Date, comment='更新日期')
    preclose = Column(DECIMAL(22, 6))
    open = Column(DECIMAL(22, 6))
    high = Column(DECIMAL(22, 6))
    low = Column(DECIMAL(22, 6))
    close = Column(DECIMAL(22, 6))
    trade_volumen = Column(DECIMAL(22, 6))
    trade_amount = Column(DECIMAL(22, 6))
    wave_range = Column(DECIMAL(22, 6))
    day_price_limit = Column(DECIMAL(22, 6))
    duration = Column(DECIMAL(22, 6))
    convexity = Column(String(22))
    create_time = Column(DateTime)
    create_by = Column(String(64))
    update_time = Column(DateTime)
    update_by = Column(String(64))
    delete_tag = Column(INTEGER(3), nullable=False, server_default=text("'0'"))


class FundNav(Base):
    __tablename__ = 'fund_nav'
    __table_args__ = {'comment': '基金净值'}

    id = Column(String(64), primary_key=True)
    fund_id = Column(String(64), nullable=False, index=True, comment="基金id,'HF'开头(后加36进制编码格式,不足8位长度左补零) 例:HF00000001")
    price_date = Column(Date, nullable=False, comment='净值日期')
    nav = Column(DECIMAL(22, 6), nullable=False, comment='单位净值')
    cumulative_nav = Column(DECIMAL(22, 6), comment='考虑分红再投资的单位累计净值')
    cumulative_nav_withdrawal = Column(DECIMAL(22, 6), comment='分红不投资的单位累计净值')
    ishigh_or_low = Column(INTEGER(11), comment='净值创新高或新低标志;1-创历史新高;2-创历史新低;3-既没有创历史新高也没有创历史新低;-1-其他')
    tohigh_nav_ratio = Column(DECIMAL(22, 6), comment='距离历史新高的距离,(历史最高累计净值-最新累计净值)*100%/最新累计净值')
    create_by = Column(String(64), server_default=text("'admin'"))
    create_time = Column(DateTime, nullable=False, server_default=text("CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP"))
    update_by = Column(String(64), nullable=False, server_default=text("'admin'"))
    update_time = Column(DateTime, nullable=False, server_default=text("CURRENT_TIMESTAMP"))
    delete_tag = Column(INTEGER(3), nullable=False, server_default=text("'0'"))


class FundPerformance(Base):
    __tablename__ = 'fund_performance'
    __table_args__ = {'comment': '基金历史业绩'}

    id = Column(String(64), primary_key=True)
    fund_id = Column(String(64), nullable=False, index=True, comment='基金id')
    end_date = Column(Date, nullable=False, comment='截至日期')
    price_date = Column(Date, comment='最近累计净值日期')
    cumulative_nav = Column(DECIMAL(22, 6), comment='最近累计净值')
    ret_1day = Column(DECIMAL(22, 6), comment='最近一天收益率')
    ret_1day_bm1 = Column(DECIMAL(22, 6), comment='最近一天基准指数收益率,基准指数bm1=沪深300(取决于基金设定的基准指数)')
    ret_1w = Column(DECIMAL(22, 6), comment='最近一个周收益率')
    ret_1w_bm1 = Column(DECIMAL(22, 6), comment='最近一个周基准指数收益率,基准指数bm1=沪深300(取决于基金设定的基准指数)')
    ret_1m = Column(DECIMAL(22, 6), comment='最近一个月收益率')
    ret_cum_1m = Column(DECIMAL(22, 6), comment='最近一个月累计收益率')
    ret_1m_bm1 = Column(DECIMAL(22, 6), comment='最近一个月基准指数收益率,基准指数bm1=沪深300(取决于基金设定的基准指数)')
    ret_cum_1m_bm1 = Column(DECIMAL(22, 6), comment='最近一个月累计基准指数收益率,基准指数bm1=沪深300(取决于基金设定的基准指数)')
    ret_3m = Column(DECIMAL(22, 6), comment='最近三个月收益率')
    ret_3m_bm1 = Column(DECIMAL(22, 6), comment='最近三个月基准指数收益率,基准指数bm1=沪深300(取决于基金设定的基准指数)')
    ret_cum_3m = Column(DECIMAL(22, 6), comment='最近三个月累计收益率')
    ret_cum_3m_bm1 = Column(DECIMAL(22, 6), nullable=False, comment='最近三个月累计基准指数收益率,基准指数bm1=沪深300(取决于基金设定的基准指数)')
    ret_6m = Column(DECIMAL(22, 6), comment='最近半年收益率')
    ret_cum_6m = Column(DECIMAL(22, 6), comment='最近半年累计收益率')
    ret_6m_bm1 = Column(DECIMAL(22, 6), comment='最近半年基准指数收益率,基准指数bm1=沪深300(取决于基金设定的基准指数)')
    ret_cum_6m_bm1 = Column(DECIMAL(22, 6), comment='最近半年累计基准指数收益率,基准指数bm1=沪深300(取决于基金设定的基准指数)')
    ret_1y = Column(DECIMAL(22, 6), comment='最近一年收益率')
    ret_cum_1y = Column(DECIMAL(22, 6), comment='最近一年累计收益率')
    ret_1y_bm1 = Column(DECIMAL(22, 6), comment='最近一年基准指数收益率,基准指数bm1=沪深300(取决于基金设定的基准指数)')
    ret_cum_1y_bm1 = Column(DECIMAL(22, 6), comment='最近一年累计基准指数收益率,基准指数bm1=沪深300(取决于基金设定的基准指数)')
    ret_2y = Column(DECIMAL(22, 6), comment='最近两年收益率')
    ret_cum_2y = Column(DECIMAL(22, 6), comment='最近两年累计收益率')
    ret_2y_bm1 = Column(DECIMAL(22, 6), comment='最近两年基准指数收益率,基准指数bm1=沪深300(取决于基金设定的基准指数)')
    ret_cum_2y_bm1 = Column(DECIMAL(22, 6), comment='最近两年累计基准指数收益率,基准指数bm1=沪深300(取决于基金设定的基准指数)')
    ret_2y_a = Column(DECIMAL(22, 6), comment='最近两年收益率(年化)')
    ret_2y_bm1_a = Column(DECIMAL(22, 6), comment='最近两年基准指数收益率(年化),基准指数bm1=沪深300(取决于基金设定的基准指数)')
    ret_3y = Column(DECIMAL(22, 6), comment='最近三年收益率')
    ret_cum_3y = Column(DECIMAL(22, 6), comment='最近三年累计收益率')
    ret_3y_bm1 = Column(DECIMAL(22, 6), comment='最近三年基准指数收益率,基准指数bm1=沪深300(取决于基金设定的基准指数)')
    ret_cum_3y_bm1 = Column(DECIMAL(22, 6), comment='最近三年累计基准指数收益率,基准指数bm1=沪深300(取决于基金设定的基准指数)')
    ret_3y_a = Column(DECIMAL(22, 6), comment='最近三年收益率(年化)')
    ret_3y_bm1_a = Column(DECIMAL(22, 6), comment='最近三年基准指数收益率(年化),基准指数bm1=沪深300(取决于基金设定的基准指数)')
    ret_4y = Column(DECIMAL(22, 6), comment='最近四年收益率')
    ret_cum_4y = Column(DECIMAL(22, 6), comment='最近四年累计收益率')
    ret_4y_bm1 = Column(DECIMAL(22, 6), comment='最近四年基准指数收益率,基准指数bm1=沪深300(取决于基金设定的基准指数)')
    ret_cum_4y_bm1 = Column(DECIMAL(22, 6), comment='最近四年累计基准指数收益率,基准指数bm1=沪深300(取决于基金设定的基准指数)')
    ret_4y_a = Column(DECIMAL(22, 6), comment='最近四年收益率(年化)')
    ret_4y_bm1_a = Column(DECIMAL(22, 6), comment='最近四年基准指数收益率(年化),基准指数bm1=沪深300(取决于基金设定的基准指数)')
    ret_5y = Column(DECIMAL(22, 6), comment='最近五年收益率')
    ret_cum_5y = Column(DECIMAL(22, 6), comment='最近五年累计收益率')
    ret_5y_bm1 = Column(DECIMAL(22, 6), comment='最近五年基准指数收益率,基准指数bm1=沪深300(取决于基金设定的基准指数)')
    ret_cum_5y_bm1 = Column(DECIMAL(22, 6), comment='最近五年累计基准指数收益率,基准指数bm1=沪深300(取决于基金设定的基准指数)')
    ret_5y_a = Column(DECIMAL(22, 6), comment='最近五年收益率(年化)')
    ret_5y_bm1_a = Column(DECIMAL(22, 6), comment='最近五年基准指数收益率(年化),基准指数bm1=沪深300(取决于基金设定的基准指数)')
    ret_ytd = Column(DECIMAL(22, 6), comment='今年以来收益率')
    ret_cum_ytd = Column(DECIMAL(22, 6), comment='今年以来累计收益率')
    ret_ytd_bm1 = Column(DECIMAL(22, 6), comment='今年以来基准指数收益率,基准指数bm1=沪深300(取决于基金设定的基准指数)')
    ret_cum_ytd_bm1 = Column(DECIMAL(22, 6), comment='今年以来累计基准指数收益率,基准指数bm1=沪深300(取决于基金设定的基准指数)')
    ret_incep = Column(DECIMAL(22, 6), comment='成立以来收益率')
    ret_cum_incep = Column(DECIMAL(22, 6), comment='成立以来累计收益率')
    ret_incep_bm1 = Column(DECIMAL(22, 6), comment='成立以来基准指数收益率,基准指数bm1=沪深300(取决于基金设定的基准指数)')
    ret_cum_incep_bm1 = Column(DECIMAL(22, 6), comment='成立以来累计基准指数收益率,基准指数bm1=沪深300(取决于基金设定的基准指数)')
    ret_incep_a = Column(DECIMAL(22, 6), comment='成立以来收益率(年化)')
    ret_incep_bm1_a = Column(DECIMAL(22, 6), comment='成立以来基准指数收益率(年化),基准指数bm1=沪深300(取决于基金设定的基准指数)')
    update_time = Column(TIMESTAMP, server_default=text("CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP"))
    create_time = Column(TIMESTAMP, nullable=False, server_default=text("CURRENT_TIMESTAMP"))
    delete_tag = Column(INTEGER(3), nullable=False, server_default=text("'0'"))


class FundPerformanceRanking(Base):
    __tablename__ = 'fund_performance_ranking'
    __table_args__ = {'comment': '基金业绩排名'}

    id = Column(String(64), primary_key=True)
    class_id = Column(INTEGER(11), nullable=False, comment='排名分类,1:产品类型,2:投资策略')
    fund_id = Column(String(64), nullable=False, index=True, comment='基金id')
    end_date = Column(String(10), nullable=False, comment='截至日期')
    absrank_ret_1m = Column(INTEGER(11), comment='最近一个月收益率的绝对排名')
    perrank_ret_1m = Column(INTEGER(11), comment='最近一个月收益率的相对排名(%)')
    absrank_ret_3m = Column(INTEGER(11), comment='最近三个月收益率的绝对排名')
    perrank_ret_3m = Column(INTEGER(11), comment='最近三个月收益率的相对排名(%)')
    absrank_ret_6m = Column(INTEGER(11), comment='最近六个月收益率的绝对排名')
    perrank_ret_6m = Column(INTEGER(11), comment='最近六个月收益率的相对排名(%)')
    absrank_ret_1y = Column(INTEGER(11), comment='最近一年收益率的绝对排名')
    perrank_ret_1y = Column(INTEGER(11), comment='最近一年收益率的相对排名(%)')
    absrank_ret_2y = Column(INTEGER(11), comment='最近两年收益率的绝对排名')
    perrank_ret_2y = Column(INTEGER(11), comment='最近两年收益率的相对排名(%)')
    absrank_ret_3y = Column(INTEGER(11), comment='最近三年收益率的绝对排名')
    perrank_ret_3y = Column(INTEGER(11), comment='最近三年收益率的相对排名(%)')
    absrank_ret_4y = Column(INTEGER(11), comment='最近四年收益率的绝对排名')
    perrank_ret_4y = Column(INTEGER(11), comment='最近四年收益率的相对排名(%)')
    absrank_ret_5y = Column(INTEGER(11), comment='最近五年收益率的绝对排名')
    perrank_ret_5y = Column(INTEGER(11), comment='最近五年收益率的相对排名(%)')
    absrank_ret_ytd = Column(INTEGER(11), comment='今年以来收益率的绝对排名')
    perrank_ret_ytd = Column(INTEGER(11), comment='今年以来收益率的相对排名(%)')
    absrank_ret_incep = Column(INTEGER(11), comment='成立以来绝对排名')
    perrank_ret_incep = Column(INTEGER(11), comment='成立以来相对排名(%)')
    absrank_maxdrawdown_1y = Column(INTEGER(11), comment='最近一年最大回撤的绝对排名')
    perrank_maxdrawdown_1y = Column(INTEGER(11), comment='最近一年最大回撤的相对排名')
    absrank_maxdrawdown_2y = Column(INTEGER(11), comment='最近两年最大回撤的绝对排名')
    perrank_maxdrawdown_2y = Column(INTEGER(11), comment='最近两年最大回撤的相对排名')
    absrank_maxdrawdown_3y = Column(INTEGER(11), comment='最近三年最大回撤的绝对排名')
    perrank_maxdrawdown_3y = Column(INTEGER(11), comment='最近三年最大回撤的相对排名')
    absrank_maxdrawdown_4y = Column(INTEGER(11), comment='最近四年最大回撤的绝对排名')
    perrank_maxdrawdown_4y = Column(INTEGER(11), comment='最近四年最大回撤的相对排名')
    absrank_maxdrawdown_5y = Column(INTEGER(11), comment='最近五年最大回撤的绝对排名')
    perrank_maxdrawdown_5y = Column(INTEGER(11), comment='最近五年最大回撤的相对排名')
    absrank_adjret_1y = Column(INTEGER(11), comment='最近一年风险调整收益的绝对排名')
    perrank_adjret_1y = Column(INTEGER(11), comment='最近一年风险调整收益的相对排名')
    absrank_adjret_2y = Column(INTEGER(11), comment='最近两年风险调整收益的绝对排名')
    perrank_adjret_2y = Column(INTEGER(11), comment='最近两年风险调整收益的相对排名')
    absrank_adjret_3y = Column(INTEGER(11), comment='最近三年风险调整收益的绝对排名')
    perrank_adjret_3y = Column(INTEGER(11), comment='最近三年风险调整收益的相对排名')
    absrank_adjret_4y = Column(INTEGER(11), comment='最近四年风险调整收益的绝对排名')
    perrank_adjret_4y = Column(INTEGER(11), comment='最近四年风险调整收益的相对排名')
    absrank_adjret_5y = Column(INTEGER(11), comment='最近五年风险调整收益的绝对排名')
    perrank_adjret_5y = Column(INTEGER(11), comment='最近五年风险调整收益的相对排名')
    absrank_upsidecaptureratio_1y = Column(INTEGER(11), comment='最近一年上行捕获率的绝对排名')
    perrank_upsidecaptureratio_1y = Column(INTEGER(11), comment='最近一年上行捕获率的相对排名')
    absrank_upsidecaptureratio_2y = Column(INTEGER(11), comment='最近两年上行捕获率的绝对排名')
    perrank_upsidecaptureratio_2y = Column(INTEGER(11), comment='最近两年上行捕获率的相对排名')
    absrank_upsidecaptureratio_3y = Column(INTEGER(11), comment='最近三年上行捕获率的绝对排名')
    perrank_upsidecaptureratio_3y = Column(INTEGER(11), comment='最近三年上行捕获率的相对排名')
    absrank_upsidecaptureratio_4y = Column(INTEGER(11), comment='最近四年上行捕获率的绝对排名')
    perrank_upsidecaptureratio_4y = Column(INTEGER(11), comment='最近四年上行捕获率的相对排名')
    absrank_upsidecaptureratio_5y = Column(INTEGER(11), comment='最近五年上行捕获率的绝对排名')
    perrank_upsidecaptureratio_5y = Column(INTEGER(11), comment='最近五年上行捕获率的相对排名')
    absrank_downsidecaptureratio_1y = Column(INTEGER(11), comment='最近一年下行捕获率的绝对排名')
    perrank_downsidecaptureratio_1y = Column(INTEGER(11), comment='最近一年下行捕获率的相对排名')
    absrank_downsidecaptureratio_2y = Column(INTEGER(11), comment='最近两年下行捕获率的绝对排名')
    perRank_downsidecaptureratio_2y = Column(INTEGER(11), comment='最近两年下行捕获率的相对排名')
    absrank_downsidecaptureratio_3y = Column(INTEGER(11), comment='最近三年下行捕获率的绝对排名')
    perrank_downsidecaptureratio_3y = Column(INTEGER(11), comment='最近三年下行捕获率的相对排名')
    absrank_downsidecaptureratio_4y = Column(INTEGER(11), comment='最近四年下行捕获率的绝对排名')
    perrank_downsidecaptureratio_4y = Column(INTEGER(11), comment='最近四年下行捕获率的相对排名')
    absrank_downsidecaptureratio_5y = Column(INTEGER(11), comment='最近五年下行捕获率的绝对排名')
    perrank_downsidecaptureratio_5y = Column(INTEGER(11), comment='最近五年下行捕获率的相对排名')
    update_time = Column(TIMESTAMP, nullable=False, server_default=text("CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP"))
    create_time = Column(TIMESTAMP, nullable=False, server_default=text("CURRENT_TIMESTAMP"))
    delete_tag = Column(INTEGER(3), nullable=False, server_default=text("'0'"))


class FundPerformanceStrategyRating(Base):
    __tablename__ = 'fund_performance_strategy_rating'
    __table_args__ = {'comment': '基金评级'}

    id = Column(String(64), primary_key=True)
    fund_id = Column(String(64), nullable=False, index=True, comment='基金id')
    class_id = Column(String(64), nullable=False, index=True, comment='类型id')
    end_date = Column(String(10), nullable=False, comment='评级日期')
    strategy = Column(INTEGER(11), nullable=False, server_default=text("'-1'"), comment='融智策略分类,1-股票策略,2-宏观策略,3-管理期货,4-事件驱动,5-相对价值策略,6-债券策略,7-组合基金,8-复合策略,-1-其它策略')
    substrategy = Column(INTEGER(11), nullable=False, server_default=text("'-1'"), comment='旧:(融智子策略分类:   ')
    rating_1y = Column(INTEGER(11), comment='一年评级')
    ret_rating_1y = Column(String(20), comment='一年收益等级')
    risk_rating_1y = Column(String(20), comment='一年风险等级')
    style_1y = Column(String(20), comment='一年风格类别')
    rating_2y = Column(INTEGER(11), comment='两年评级')
    ret_rating_2y = Column(String(20), comment='两年收益等级')
    risk_rating_2y = Column(String(20), comment='两年风险等级')
    style_2y = Column(String(20), comment='两年风格类别')
    rating_3y = Column(INTEGER(11), comment='三年评级')
    ret_rating_3y = Column(String(20), comment='三年收益等级')
    risk_rating_3y = Column(String(20), comment='三年风险等级')
    style_3y = Column(String(20), comment='三年风格类别')
    rating_4y = Column(INTEGER(11), comment='四年评级')
    ret_rating_4y = Column(String(20), comment='四年收益等级')
    risk_rating_4y = Column(String(20), comment='四年风险等级')
    style_4y = Column(String(20), comment='四年风格类别')
    rating_5y = Column(INTEGER(11), comment='五年评级')
    ret_rating_5y = Column(String(20), comment='五年收益等级')
    risk_rating_5y = Column(String(20), comment='五年风险等级')
    style_5y = Column(String(20), comment='五年风格类别')
    update_time = Column(TIMESTAMP, nullable=False, server_default=text("CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP"))
    create_time = Column(TIMESTAMP, nullable=False, server_default=text("CURRENT_TIMESTAMP"))
    delete_tag = Column(INTEGER(3), nullable=False, server_default=text("'0'"))


class FundPortfolio(Base):
    __tablename__ = 'fund_portfolio'
    __table_args__ = {'comment': '基金重仓统计'}

    id = Column(String(64), primary_key=True, comment='主键id')
    fund_id = Column(String(64), nullable=False, index=True, comment='基金id')
    portfolio_date = Column(Date, nullable=False, comment='统计日期')
    sec_code = Column(String(64), nullable=False, index=True, comment='证券代码')
    sec_type = Column(INTEGER(11), nullable=False, server_default=text("'1'"), comment='证券类型:1-股票,2-基金,3-债券,4-权证,-1-其他')
    sec_market_value = Column(DECIMAL(22, 6), comment='单只证券市值,<量纲:万元>')
    net_value_ratio = Column(DECIMAL(22, 6), comment='占净值比例,<量纲:%>')
    holding_num = Column(DECIMAL(22, 6), comment='持仓量,<量纲:万股>')
    holding_ratio = Column(DECIMAL(22, 6), comment='占流通比例,<量纲:%> 此字段只有信托类产品有数据,即fund_type=2 or 3')
    uni_code = Column(String(64), index=True, comment='标的代码(base_underlying_information)')
    update_time = Column(TIMESTAMP, nullable=False, server_default=text("CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP"), comment='修改时间;第一次创建时与CreatTime值相同,修改时与修改时间相同')
    create_time = Column(TIMESTAMP, nullable=False, server_default=text("CURRENT_TIMESTAMP"), comment='创建时间,默认第一次创建的getdate()时间')
    delete_tag = Column(INTEGER(3), server_default=text("'0'"))


class FundPosition(Base):
    __tablename__ = 'fund_position'
    __table_args__ = {'comment': '基金资产配置'}

    id = Column(String(64), primary_key=True)
    fund_id = Column(String(64), nullable=False, index=True, comment='基金id')
    position_date = Column(Date, nullable=False, comment='基金仓位统计日期')
    sec_type = Column(TINYINT(4), comment='证券类型:1-股票,2-基金,3-债券,4-权证,5-货币资金,-1-其他(券商资管产品特有)')
    market_valule = Column(DECIMAL(22, 6), comment='市值,<量纲:万元>')
    position = Column(DECIMAL(22, 6), comment='基金仓位比例,<量纲:%>')
    update_time = Column(TIMESTAMP, nullable=False, server_default=text("CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP"))
    create_by = Column(String(64), index=True, comment='创建者Id,默认第一次创建者名称,创建后不变更')
    create_time = Column(TIMESTAMP, nullable=False, server_default=text("CURRENT_TIMESTAMP"), comment='创建时间,默认第一次创建的getdate()时间')
    delete_tag = Column(INTEGER(3), nullable=False, server_default=text("'0'"))


class FundQa(Base):
    __tablename__ = 'fund_qa'
    __table_args__ = {'comment': '产品QA'}

    id = Column(String(64), primary_key=True)
    qa_type = Column(INTEGER(1), nullable=False, comment='问题类型  1:提问 2回答')
    fund_id = Column(String(64), nullable=False, comment='产品ID')
    content = Column(Text, nullable=False, comment='问题/回答内容')
    ask_id = Column(String(64), comment='问题ID')
    status = Column(INTEGER(1), comment='0 :未回答  1已回答')
    verify_status = Column(INTEGER(1), nullable=False, comment='审批状态 0:待审批  1:审批通过  2:未通过')
    user_head = Column(String(255), comment='用户头像')
    user_nickname = Column(String(50), comment='用户昵称')
    qa_source = Column(String(50), comment='1:运营 2:平台用户')
    sort = Column(INTEGER(3), nullable=False, server_default=text("'0'"))
    create_by = Column(String(64), nullable=False, comment='提问/回答人ID')
    create_time = Column(DateTime, nullable=False, comment='提问/回答时间')
    update_by = Column(String(64))
    update_time = Column(DateTime)
    delete_tag = Column(INTEGER(3), nullable=False, server_default=text("'0'"))


class FundRateMapping(Base):
    __tablename__ = 'fund_rate_mapping'
    __table_args__ = {'comment': '基金费率'}

    fund_id = Column(String(64), primary_key=True, comment="基金id(私募排排:'HF'开头(后加36进制编码格式,不足8位长度左补零) 例:HF00000001)")
    initial_unit_value = Column(String(255), comment='位面值')
    initial_size = Column(DECIMAL(22, 6), comment='初始规模,<量纲:万>')
    min_investment_share = Column(DECIMAL(22, 6), comment='最低认购额,<量纲:万> 券商资管产品量纲为<万元>')
    subsequent_investment_share = Column(DECIMAL(22, 6), comment='最低追加额,<量纲:万> 券商资管产品量纲为<万元>')
    subscription_fee = Column(DECIMAL(22, 6), comment='最高认购费,量纲<%>')
    subscription_fee_note = Column(String(255), comment='认(申)购费说明')
    redemption_fee = Column(DECIMAL(22, 6), comment='最高赎回费,量纲<%>')
    redemption_fee_note = Column(String(255), comment='最高赎回费,量纲<%>')
    managementfee_deduction_frequency = Column(String(255), comment='管理费计提周期,<量纲:月>')
    managementfee_consult = Column(DECIMAL(22, 6), comment='投资顾问管理费,<量纲:%>')
    managementfee_trust = Column(DECIMAL(22, 6), comment='受托人管理费,<量纲:%>')
    managementfee_bank = Column(DECIMAL(22, 6), comment='银行托管费,<量纲:%>')
    performance_fee = Column(DECIMAL(22, 6), comment='最高绩效费,量纲<%>')
    performance_fee_deduction_method = Column(INTEGER(11), comment='业绩报酬计提方式:0-未设 1-份额计提 2-净值计提 3-混合')
    performance_fee_note = Column(Text, comment='绩效费说明')
    dividend_rule = Column(Text, comment='分红规则')
    other_fee_note = Column(String(255), comment='其他费用说明')
    guard_line = Column(DECIMAL(22, 6), comment='警戒线,<量纲:%>')
    stop_loss_line = Column(DECIMAL(22, 6), comment='止损线,<量纲:%>')
    return_guarantees = Column(DECIMAL(22, 6), comment='保底收益率,<量纲:%>')
    expected_return = Column(DECIMAL(22, 6), comment='预计收益率')
    hurdle_rate = Column(DECIMAL(22, 6), comment='费前收益率(业绩提成前最低收益率),量纲<%>')
    leverage = Column(String(10), comment='融资杠杆比率')
    manager_participate_asset = Column(String(255), comment='基金管理人参与资产比例')
    posterior = Column(DECIMAL(22, 6), comment='劣后级杠杆比率')
    intermediate = Column(DECIMAL(22, 6), comment='中间级杠杆比率')
    priority = Column(DECIMAL(22, 6), comment='优先级杠杆比率')
    outsourcing_fee = Column(DECIMAL(22, 6), comment='外包管理费,量纲<%>')
    create_by = Column(String(64))
    create_time = Column(DateTime)
    update_by = Column(String(64))
    update_time = Column(DateTime)
    delete_tag = Column(INTEGER(3), nullable=False, server_default=text("'0'"))


class FundRiskStat(Base):
    __tablename__ = 'fund_risk_stats'
    __table_args__ = {'comment': '基金风险指标'}

    id = Column(String(64), primary_key=True)
    fund_id = Column(String(64), nullable=False, index=True, comment='基金id')
    end_date = Column(Date, nullable=False, comment='截至日期')
    stddev_1y = Column(DECIMAL(22, 6), comment='最近一年的年化波动率')
    stddev_2y = Column(DECIMAL(22, 6), comment='最近两年的年化波动率')
    stddev_3y = Column(DECIMAL(22, 6), comment='最近三年的年化波动率')
    stddev_4y = Column(DECIMAL(22, 6), comment='最近四年的年化波动率')
    stddev_5y = Column(DECIMAL(22, 6), comment='最近五年的年化波动率')
    stddev_10y = Column(DECIMAL(22, 6), comment='最近十年的年化波动率')
    stddev_incep = Column(DECIMAL(22, 6), comment='成立以来的年化波动率')
    stddev_ytd = Column(DECIMAL(22, 6), comment='今年以来的年化波动率')
    downsidedev_1y = Column(DECIMAL(22, 6), comment='最近一年的下行风险')
    downsidedev_2y = Column(DECIMAL(22, 6), comment='最近两年的下行风险')
    downsidedev_3y = Column(DECIMAL(22, 6), comment='最近三年的下行风险')
    downsidedev_4y = Column(DECIMAL(22, 6), comment='最近四年的下行风险')
    downsidedev_5y = Column(DECIMAL(22, 6), comment='最近五年的下行风险')
    downsidedev_10y = Column(DECIMAL(22, 6), comment='最近十年的下行风险')
    downsidedev_incep = Column(DECIMAL(22, 6), comment='成立以来的下行风险')
    downsidedev_ytd = Column(DECIMAL(22, 6), comment='今年以来的下行风险')
    alpha_1y = Column(DECIMAL(22, 6), comment='最近一年的阿尔法')
    alpha_2y = Column(DECIMAL(22, 6), comment='最近两年的阿尔法')
    alpha_3y = Column(DECIMAL(22, 6), comment='最近三年的阿尔法')
    alpha_4y = Column(DECIMAL(22, 6), comment='最近四年的阿尔法')
    alpha_5y = Column(DECIMAL(22, 6), comment='最近五年的阿尔法')
    alpha_10y = Column(DECIMAL(22, 6), comment='最近十年的阿尔法')
    alpha_incep = Column(DECIMAL(22, 6), comment='成立以来的阿尔法')
    alpha_ytd = Column(DECIMAL(22, 6), comment='今年以来的阿尔法')
    beta_1y = Column(DECIMAL(22, 6), comment='最近一年的贝塔')
    beta_2y = Column(DECIMAL(22, 6), comment='最近两年的贝塔')
    beta_3y = Column(DECIMAL(22, 6), comment='最近三年的贝塔')
    beta_4y = Column(DECIMAL(22, 6), comment='最近四年的贝塔')
    beta_5y = Column(DECIMAL(22, 6), comment='最近五年的贝塔')
    beta_10y = Column(DECIMAL(22, 6), comment='最近十年的贝塔')
    beta_incep = Column(DECIMAL(22, 6), comment='成立以来的贝塔')
    beta_ytd = Column(DECIMAL(22, 6), comment='今年以来的贝塔')
    r2_1y = Column(DECIMAL(22, 6), comment='最近一年的拟合优度')
    r2_2y = Column(DECIMAL(22, 6), comment='最近两年的拟合优度')
    r2_3y = Column(DECIMAL(22, 6), comment='最近三年的拟合优度')
    r2_4y = Column(DECIMAL(22, 6), comment='最近四年的拟合优度')
    r2_5y = Column(DECIMAL(22, 6), comment='最近五年的拟合优度')
    r2_10y = Column(DECIMAL(22, 6), comment='最近十年的拟合优度')
    r2_incep = Column(DECIMAL(22, 6), comment='成立以来的拟合优度')
    r2_ytd = Column(DECIMAL(22, 6), comment='今年以来的拟合优度')
    skewness_1y = Column(DECIMAL(22, 6), comment='最近一年的偏度')
    skewness_2y = Column(DECIMAL(22, 6), comment='最近两年的偏度')
    skewness_3y = Column(DECIMAL(22, 6), comment='最近三年的偏度')
    skewness_4y = Column(DECIMAL(22, 6), comment='最近四年的偏度')
    skewness_5y = Column(DECIMAL(22, 6), comment='最近五年的偏度')
    skewness_10y = Column(DECIMAL(22, 6), comment='最近十年的偏度')
    skewness_incep = Column(DECIMAL(22, 6), comment='成立以来的偏度')
    skewness_ytd = Column(DECIMAL(22, 6), comment='今年以来的偏度')
    kurtosis_1y = Column(DECIMAL(22, 6), comment='最近一年的峰度')
    kurtosis_2y = Column(DECIMAL(22, 6), comment='最近两年的峰度')
    kurtosis_3y = Column(DECIMAL(22, 6), comment='最近三年的峰度')
    kurtosis_4y = Column(DECIMAL(22, 6), comment='最近四年的峰度')
    kurtosis_5y = Column(DECIMAL(22, 6), comment='最近五年的峰度')
    kurtosis_10y = Column(DECIMAL(22, 6), comment='最近十年的峰度')
    kurtosis_incep = Column(DECIMAL(22, 6), comment='成立以来的峰度')
    kurtosis_ytd = Column(DECIMAL(22, 6), comment='今年以来的峰度')
    worstmonth_1y = Column(DECIMAL(22, 6), comment='最近一年的单月最大下跌')
    worstmonth_2y = Column(DECIMAL(22, 6), comment='最近两年的单月最大下跌')
    worstmonth_3y = Column(DECIMAL(22, 6), comment='最近三年的单月最大下跌')
    worstmonth_4y = Column(DECIMAL(22, 6), comment='最近四年的单月最大下跌')
    worstmonth_5y = Column(DECIMAL(22, 6), comment='最近五年的单月最大下跌')
    worstmonth_10y = Column(DECIMAL(22, 6), comment='最近十年的单月最大下跌')
    worstmonth_incep = Column(DECIMAL(22, 6), comment='成立以来的单月最大下跌')
    worstmonth_ytd = Column(DECIMAL(22, 6), comment='今年以来的单月最大下跌')
    downmonth_percent_1y = Column(DECIMAL(22, 6), comment='最近一年的下跌月份比')
    downmonth_percent_2y = Column(DECIMAL(22, 6), comment='最近两年的下跌月份比')
    downmonth_percent_3y = Column(DECIMAL(22, 6), comment='最近三年的下跌月份比')
    downmonth_percent_4y = Column(DECIMAL(22, 6), comment='最近四年的下跌月份比')
    downmonth_percent_5y = Column(DECIMAL(22, 6), comment='最近五年的下跌月份比')
    downmonth_percent_10y = Column(DECIMAL(22, 6), comment='最近十年的下跌月份比')
    downmonth_percent_incep = Column(DECIMAL(22, 6), comment='成立以来的下跌月份比')
    downmonth_percent_ytd = Column(DECIMAL(22, 6), comment='今年以来的下跌月份比')
    battingaverage_1y = Column(DECIMAL(22, 6), comment='最近一年的跑赢指数月份比')
    battingaverage_2y = Column(DECIMAL(22, 6), comment='最近两年的跑赢指数月份比')
    battingaverage_3y = Column(DECIMAL(22, 6), comment='最近三年的跑赢指数月份比')
    battingaverage_4y = Column(DECIMAL(22, 6), comment='最近四年的跑赢指数月份比')
    battingaverage_5y = Column(DECIMAL(22, 6), comment='最近五年的跑赢指数月份比')
    battingaverage_10y = Column(DECIMAL(22, 6), comment='最近五年的跑赢指数月份比')
    battingaverage_incep = Column(DECIMAL(22, 6), comment='成立以来的跑赢指数月份比')
    battingaverage_ytd = Column(DECIMAL(22, 6), comment='今年以来的跑赢指数月份比')
    gainloss_ratio_1y = Column(DECIMAL(22, 6), comment='最近一年的盈利/亏损比')
    gainloss_ratio_2y = Column(DECIMAL(22, 6), comment='最近两年的盈利/亏损比')
    gainloss_ratio_3y = Column(DECIMAL(22, 6), comment='最近三年的盈利/亏损比')
    gainloss_ratio_4y = Column(DECIMAL(22, 6), comment='最近四年的盈利/亏损比')
    gainloss_ratio_5y = Column(DECIMAL(22, 6), comment='最近五年的最长连续下跌月份数')
    gainloss_ratio_10y = Column(DECIMAL(22, 6), comment='最近十年的最长连续下跌月份数')
    gainloss_ratio_incep = Column(DECIMAL(22, 6), comment='成立以来的最长连续下跌月份数')
    gainloss_ratio_ytd = Column(DECIMAL(22, 6), comment='今年以来的最长连续下跌月份数')
    longestdown_months_1y = Column(INTEGER(11), comment='最近一年的最长连续下跌月份数')
    longestdown_months_2y = Column(INTEGER(11), comment='最近两年的最长连续下跌月份数')
    longestdown_months_3y = Column(INTEGER(11), comment='最近三年的最长连续下跌月份数')
    longestdown_months_4y = Column(INTEGER(11), comment='最近四年的最长连续下跌月份数')
    longestdown_months_5y = Column(INTEGER(11), comment='最近五年的最长连续下跌月份数')
    longestdown_months_10y = Column(INTEGER(11), comment='最近十年的最长连续下跌月份数')
    longestdown_months_incep = Column(INTEGER(11), comment='成立以来的最长连续下跌月份数')
    longestdown_months_ytd = Column(INTEGER(11), comment='今年以来的最长连续下跌月份数')
    maxdrawdown_3m = Column(DECIMAL(22, 6), comment='最近一年的最大回撤')
    maxdrawdown_ytd = Column(DECIMAL(22, 6))
    maxdrawdown_months_ytd = Column(DECIMAL(22, 6))
    maxdrawdown_peakdate_ytd = Column(DECIMAL(22, 6))
    maxdrawdown_valleydate_ytd = Column(DECIMAL(22, 6))
    maxdrawdown_1y = Column(DECIMAL(22, 6), comment='最近一年的最大回撤')
    maxdrawdown_months_1y = Column(INTEGER(11), comment='最近一年的最大回撤区间月份数')
    maxdrawdown_peakdate_1y = Column(String(10), comment='最近一年的最大回撤的峰值值起始日期')
    maxdrawdown_valleydate_1y = Column(String(10), comment='最近一年的最大回撤的谷值截止日期')
    maxdrawdown_recoverydate_1y = Column(String(10), comment='最近一年的最大回撤修复日期')
    maxdrawdown_recoverymonths_1y = Column(INTEGER(11), comment='最近一年的最大回撤修复区间月份数')
    maxdrawdown_2y = Column(DECIMAL(22, 6), comment='最近两年的最大回撤')
    maxdrawdown_months_2y = Column(INTEGER(11), comment='最近两年的最大回撤区间月份数')
    maxdrawdown_peakdate_2y = Column(String(11), comment='最近两年的最大回撤的峰值值起始日期')
    maxdrawdown_valleydate_2y = Column(String(11), comment='最近两年的最大回撤的谷值截止日期')
    maxdrawdown_recoverydate_2y = Column(INTEGER(11), comment='最近两年的最大回撤修复日期')
    maxdrawdown_recoverymonths_2y = Column(INTEGER(11), comment='最近两年的最大回撤修复区间月份数')
    maxdrawdown_3y = Column(DECIMAL(22, 6), comment='最近三年的最大回撤')
    maxdrawdown_months_3y = Column(INTEGER(11), comment='最近四年的最大回撤区间月份数')
    maxdrawdown_peakdate_3y = Column(String(10), comment='最近四年的最大回撤的峰值值起始日期')
    maxdrawdown_valleydate_3y = Column(String(10), comment='最近五年的最大回撤的谷值截止日期')
    maxdrawdown_recoverydate_3y = Column(String(10), comment='最近三年的最大回撤的谷值截止日期')
    maxdrawdown_recoverymonths_3y = Column(INTEGER(11), comment='最近三年的最大回撤修复区间月份数')
    maxdrawdown_4y = Column(DECIMAL(22, 6), comment='最近四年的最大回撤')
    maxdrawdown_months_4y = Column(INTEGER(11), comment='最近四年的最大回撤区间月份数')
    maxdrawdown_peakdate_4y = Column(String(10), comment='最近四年的最大回撤的峰值值起始日期')
    maxdrawdown_valleydate_4y = Column(String(10), comment='最近四年的最大回撤的谷值截止日期')
    maxdrawdown_recoverydate_4y = Column(String(10), comment='最近四年的最大回撤修复日期')
    maxdrawdown_recoverymonths_4y = Column(INTEGER(11), comment='最近四年的最大回撤修复区间月份数')
    maxdrawdown_5y = Column(DECIMAL(22, 6), comment='最近五年的最大回撤')
    maxdrawdown_10y = Column(DECIMAL(22, 6), comment='最近十年的最大回撤')
    maxdrawdown_months_5y = Column(INTEGER(11), comment='最近五年的最大回撤区间月份数')
    maxdrawdown_peakdate_5y = Column(String(10), comment='最近五年的最大回撤的峰值值起始日期')
    maxdrawdown_valleydate_5y = Column(String(10), comment='最近五年的最大回撤的谷值截止日期')
    maxdrawdown_recoverydate_5y = Column(String(10), comment='最近五年的最大回撤修复日期')
    maxdrawdown_recoverymonths_5y = Column(INTEGER(11), comment='最近五年的最大回撤修复区间月份数')
    maxdrawdown_months_10y = Column(INTEGER(11), comment='最近十年的最大回撤区间月份数')
    maxdrawdown_peakdate_10y = Column(String(10), comment='最近十年的最大回撤的峰值值起始日期')
    maxdrawdown_valleydate_10y = Column(String(10), comment='最近十年的最大回撤的谷值截止日期')
    maxdrawdown_recoverydate_10y = Column(String(10), comment='最近十年的最大回撤修复日期')
    maxdrawdown_recoverymonths_10y = Column(INTEGER(11), comment='最近十年的最大回撤修复区间月份数')
    maxdrawdown_incep = Column(DECIMAL(22, 6), comment='成立以来的最大回撤')
    maxdrawdown_months_incep = Column(INTEGER(11), comment='成立以来的最大回撤区间月份数')
    maxdrawdown_peakdate_incep = Column(String(10), comment='成立以来的最大回撤的峰值值起始日期')
    maxdrawdown_valleydate_incep = Column(String(10), comment='成立以来的最大回撤的谷值截止日期')
    maxdrawdown_recoverydate_incep = Column(String(10), comment='成立以来的最大回撤修复日期')
    maxdrawdown_recoverymonths_incep = Column(INTEGER(11), comment='成立以来的最大回撤修复区间月份数')
    update_time = Column(TIMESTAMP, nullable=False, server_default=text("CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP"))
    create_time = Column(TIMESTAMP, nullable=False, server_default=text("CURRENT_TIMESTAMP"))
    delete_tag = Column(INTEGER(3), nullable=False, server_default=text("'0'"))


class FundRiskadjretStat(Base):
    __tablename__ = 'fund_riskadjret_stats'
    __table_args__ = {'comment': '基金风险调整收益指标'}

    id = Column(String(64), primary_key=True)
    fund_id = Column(String(64), nullable=False, index=True, comment='基金id')
    end_date = Column(Date, nullable=False, comment='截至日期')
    sharperatio_1y = Column(DECIMAL(22, 6), comment='最近一年的夏普比率')
    sharperatio_2y = Column(DECIMAL(22, 6), comment='最近两年的夏普比率')
    sharperatio_3y = Column(DECIMAL(22, 6), comment='最近三年的夏普比率')
    sharperatio_4y = Column(DECIMAL(22, 6), comment='最近四年的夏普比率')
    sharperatio_5y = Column(DECIMAL(22, 6), comment='最近五年的夏普比率')
    sharperatio_incep = Column(DECIMAL(22, 6), comment='成立以来的夏普比率')
    sortinoratio_1y = Column(DECIMAL(22, 6), comment='最近一年的索提诺比率')
    sortinoratio_2y = Column(DECIMAL(22, 6), comment='最近两年的索提诺比率')
    sortinoratio_3y = Column(DECIMAL(22, 6), comment='最近三年的索提诺比率')
    sortinoratio_4y = Column(DECIMAL(22, 6), comment='最近四年的索提诺比率')
    sortinoratio_5y = Column(DECIMAL(22, 6), comment='最近五年的索提诺比率')
    sortinoratio_incep = Column(DECIMAL(22, 6), comment='成立以来的索提诺比率')
    sortinoratio_MAR_1y = Column(DECIMAL(22, 6), comment='最近一年的索提诺比率(MAR)')
    sortinoratio_MAR_2y = Column(DECIMAL(22, 6), comment='最近两年的索提诺比率(MAR)')
    sortinoratio_MAR_3y = Column(DECIMAL(22, 6), comment='最近三年的索提诺比率(MAR)')
    sortinoratio_MAR_4y = Column(DECIMAL(22, 6), comment='最近四年的索提诺比率(MAR)')
    sortinoratio_MAR_5y = Column(DECIMAL(22, 6), comment='最近五年的索提诺比率(MAR)')
    sortinoratio_MAR_incep = Column(DECIMAL(22, 6), comment='成立以来的索提诺比率(MAR)')
    treynorratio_1y = Column(DECIMAL(22, 6), comment='最近一年的特雷诺比率')
    treynorratio_2y = Column(DECIMAL(22, 6), comment='最近两年的特雷诺比率')
    treynorratio_3y = Column(DECIMAL(22, 6), comment='最近三年的特雷诺比率')
    treynorratio_4y = Column(DECIMAL(22, 6), comment='最近四年的特雷诺比率')
    treynorratio_5y = Column(DECIMAL(22, 6), comment='最近五年的特雷诺比率')
    treynorratio_incep = Column(DECIMAL(22, 6), comment='成立以来的特雷诺比率')
    jensen_1y = Column(DECIMAL(22, 6), comment='最近一年的詹森指数')
    jensen_2y = Column(DECIMAL(22, 6), comment='最近两年的詹森指数')
    jensen_3y = Column(DECIMAL(22, 6), comment='最近三年的詹森指数')
    jensen_4y = Column(DECIMAL(22, 6), comment='最近四年的詹森指数')
    jensen_5y = Column(DECIMAL(22, 6), comment='最近五年的詹森指数')
    jensen_incep = Column(DECIMAL(22, 6), comment='成立以来的詹森指数')
    calmarratio_1y = Column(DECIMAL(22, 6), comment='最近一年的卡玛比率')
    calmarratio_2y = Column(DECIMAL(22, 6), comment='最近两年的卡玛比率')
    calmarratio_3y = Column(DECIMAL(22, 6), comment='最近三年的卡玛比率')
    calmarratio_4y = Column(DECIMAL(22, 6), comment='最近四年的卡玛比率')
    calmarratio_5y = Column(DECIMAL(22, 6), comment='最近五年的卡玛比率')
    calmarratio_incep = Column(DECIMAL(22, 6), comment='成立以来的卡玛比率')
    omegaratio_1y = Column(DECIMAL(22, 6), comment='最近一年的欧米茄比率')
    omegaratio_2y = Column(DECIMAL(22, 6), comment='最近两年的欧米茄比率')
    omegaratio_3y = Column(DECIMAL(22, 6), comment='最近三年的欧米茄比率')
    omegaratio_4y = Column(DECIMAL(22, 6), comment='最近四年的欧米茄比率')
    omegaratio_5y = Column(DECIMAL(22, 6), comment='最近五年的欧米茄比率')
    omegaratio_incep = Column(DECIMAL(22, 6), comment='成立以来的欧米茄比率')
    kapparatio_1y = Column(DECIMAL(22, 6), comment='最近一年的卡帕比率')
    kapparatio_2y = Column(DECIMAL(22, 6), comment='最近两年的卡帕比率')
    kapparatio_3y = Column(DECIMAL(22, 6), comment='最近三年的卡帕比率')
    kapparatio_4y = Column(DECIMAL(22, 6), comment='最近四年的卡帕比率')
    kapparatio_5y = Column(DECIMAL(22, 6), comment='最近五年的卡帕比率')
    kapparatio_incep = Column(DECIMAL(22, 6), comment='成立以来的卡帕比率')
    update_time = Column(TIMESTAMP, nullable=False, server_default=text("CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP"))
    create_time = Column(TIMESTAMP, nullable=False, server_default=text("CURRENT_TIMESTAMP"))
    delete_tag = Column(INTEGER(3), nullable=False, server_default=text("'0'"))


class FundStatu(Base):
    __tablename__ = 'fund_status'
    __table_args__ = {'comment': '基金状态'}

    id = Column(String(64), primary_key=True, comment='基金Id')
    fund_status = Column(String(10), comment='基金运行状态:1-募集中、2-开放运行、3-封闭运行、4-提前清算、5-到期清算、6-发行失败、7-更换管理人、-1-其他')
    status_start_date = Column(Date, comment='募集开始时间')
    status_end_date = Column(Date, comment='募集结束时间')
    liquidate_date = Column(Date, comment='清算日期')
    create_by = Column(String(64))
    create_time = Column(DateTime)
    update_by = Column(String(64))
    update_time = Column(DateTime)
    delete_tag = Column(INTEGER(3), nullable=False)


class FundStrategyRanknum(Base):
    __tablename__ = 'fund_strategy_ranknum'
    __table_args__ = {'comment': '策略排名基金总数'}

    id = Column(String(64), primary_key=True)
    strategy = Column(INTEGER(11), comment='基金策略')
    end_date = Column(String(10), nullable=False, comment='截至日期')
    rankfunds_1m = Column(INTEGER(11), comment='参与排名基金数目(最近一个月)')
    rankfunds_3m = Column(INTEGER(11))
    rankfunds_6m = Column(INTEGER(11))
    rankfunds_1y = Column(INTEGER(11))
    rankfunds_2y = Column(INTEGER(11))
    rankfunds_3y = Column(INTEGER(11))
    rankfunds_4y = Column(INTEGER(11))
    rankfunds_5y = Column(INTEGER(11))
    rankfunds_ytd = Column(INTEGER(11))
    ratingnum_1y = Column(INTEGER(11))
    ratingnum_2y = Column(INTEGER(11))
    ratingnum_3y = Column(INTEGER(11))
    ratingnum_4y = Column(INTEGER(11))
    ratingnum_5y = Column(INTEGER(11))
    update_time = Column(TIMESTAMP, nullable=False, server_default=text("CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP"))
    create_time = Column(TIMESTAMP, nullable=False, server_default=text("CURRENT_TIMESTAMP"))
    delete_tag = Column(INTEGER(3), nullable=False, server_default=text("'0'"))


class FundStyleStat(Base):
    __tablename__ = 'fund_style_stats'
    __table_args__ = {'comment': '基金风格指标'}

    id = Column(String(64), primary_key=True)
    fund_id = Column(String(64), nullable=False, index=True, comment='基金id')
    end_date = Column(String(10), nullable=False, comment='截至日期')
    upsidecapture_ret_1y = Column(DECIMAL(22, 6), comment='最近一年的上行捕获收益率')
    upsidecapture_ret_2y = Column(DECIMAL(22, 6), comment='最近两年的上行捕获收益率')
    upsidecapture_ret_3y = Column(DECIMAL(22, 6), comment='最近三年的上行捕获收益率')
    upsidecapture_ret_4y = Column(DECIMAL(22, 6), comment='最近四年的上行捕获收益率')
    upsidecapture_ret_5y = Column(DECIMAL(22, 6), comment='最近五年的上行捕获收益率')
    upsidecapture_ret_incep = Column(DECIMAL(22, 6), comment='成立以来的上行捕获收益率')
    downsidecapture_ret_1y = Column(DECIMAL(22, 6), comment='最近一年的下行捕获收益率')
    downsidecapture_ret_2y = Column(DECIMAL(22, 6), comment='最近两年的下行捕获收益率')
    downsidecapture_ret_3y = Column(DECIMAL(22, 6), comment='最近三年的下行捕获收益率')
    downsidecapture_ret_4y = Column(DECIMAL(22, 6), comment='最近四年的下行捕获收益率')
    downsidecapture_ret_5y = Column(DECIMAL(22, 6), comment='最近五年的下行捕获收益率')
    downsidecapture_ret_incep = Column(DECIMAL(22, 6), comment='成立以来的下行捕获收益率')
    upsidecapture_ratio_1y = Column(DECIMAL(22, 6), comment='最近一年的上行捕获率')
    upsidecapture_ratio_2y = Column(DECIMAL(22, 6), comment='最近两年的上行捕获率')
    upsidecapture_ratio_3y = Column(DECIMAL(22, 6), comment='最近三年的上行捕获率')
    upsidecapture_ratio_4y = Column(DECIMAL(22, 6), comment='最近四年的上行捕获率')
    upsidecapture_ratio_5y = Column(DECIMAL(22, 6), comment='最近五年的上行捕获率')
    upsidecapture_ratio_incep = Column(DECIMAL(22, 6), comment='成立以来的上行捕获率')
    downsidecapture_ratio_1y = Column(DECIMAL(22, 6), comment='最近一年的下行捕获率')
    downsidecapture_ratio_2y = Column(DECIMAL(22, 6), comment='最近两年的下行捕获率')
    downsidecapture_ratio_3y = Column(DECIMAL(22, 6), comment='最近三年的下行捕获率')
    downsidecapture_ratio_4y = Column(DECIMAL(22, 6), comment='最近四年的下行捕获率')
    downsidecapture_ratio_5y = Column(DECIMAL(22, 6), comment='最近五年的下行捕获率')
    downsidecapture_ratio_incep = Column(DECIMAL(22, 6), comment='成立以来的下行捕获率')
    update_time = Column(TIMESTAMP, nullable=False, server_default=text("CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP"))
    create_time = Column(TIMESTAMP, nullable=False, server_default=text("CURRENT_TIMESTAMP"))
    delete_tag = Column(INTEGER(3), nullable=False, server_default=text("'0'"))


class IndexesProfile(Base):
    __tablename__ = 'indexes_profile'
    __table_args__ = {'comment': '指数基本信息'}

    id = Column(String(64), primary_key=True, comment='指数Id')
    index_id = Column(String(10), comment='指数ID')
    index_type_id = Column(INTEGER(11), comment='指数类型:1-对冲基金指数、2-信心指数、3-公募基金指数、4-沪深港股票指数、5-全球股票指数、6-金汇期指、7-无风险利率、-1-其他')
    index_code = Column(String(60), comment='指数代码')
    index_name = Column(String(255), comment='指数中文全称')
    index_short_name = Column(String(80), comment='指数中文简称')
    index_area_flag = Column(INTEGER(11), comment='1-中国,2-全球')
    index_family_id = Column(String(64), comment='指数提供机构ID')
    pricing_frequency = Column(INTEGER(11), comment='指数发布周期,1-日度、2-周、3-月度、4-季度、5-半年度、6-年度')
    inception_date = Column(Date, comment='指数基期,指数开始日期')
    index_initial_value = Column(DECIMAL(22, 6), comment='指数基点')
    base_currency = Column(INTEGER(11), comment='计算指数所使用的货币,1-人民币,2-港币,3-美元,4-新加坡元、-1-其他')
    calculation_method = Column(String(80), comment='编制指数所使用的计算方法')
    weighting_scheme = Column(String(80), comment='计算成份基金权重的方法')
    selection_scheme = Column(String(80), comment='成份基金筛选方法')
    create_by = Column(String(64))
    create_time = Column(DateTime)
    update_by = Column(String(64))
    update_time = Column(DateTime)
    delete_tag = Column(INTEGER(3), nullable=False, server_default=text("'0'"))


class PersonnelCompanyMapping(Base):
    __tablename__ = 'personnel_company_mapping'
    __table_args__ = {'comment': '人员公司匹配表'}

    id = Column(String(62), primary_key=True)
    personnel_id = Column(String(64), nullable=False)
    company_id = Column(String(64), nullable=False, comment='任职公司id')
    company_order = Column(INTEGER(11), comment='公司次序')
    personnel_order = Column(INTEGER(11), comment='人物次序')
    address = Column(String(80), comment='联系地址')
    is_keyfigure = Column(INTEGER(11), comment='是否为核心人物标志,1-是,0-否,-1-其他')
    is_include = Column(INTEGER(11), comment='是否纳入团队信息')
    is_visible = Column(INTEGER(11), comment='人物是否在前台可见:1-可见,0-禁止显示')
    is_leave = Column(INTEGER(11), comment='人物是否离职:1-是,0-否')
    is_default = Column(INTEGER(11), comment='默认任职公司:1-是,0-否')
    is_senior = Column(TINYINT(4), comment='是否高管:1-是,0-否')
    is_represent = Column(TINYINT(4), comment='是否法人:1-是,0-否')
    start_date = Column(Date, comment='任职开始日期')
    end_date = Column(Date, comment='任职结束日期')
    create_by = Column(String(64))
    create_time = Column(DateTime)
    update_by = Column(String(64))
    update_time = Column(DateTime)
    delete_tag = Column(INTEGER(3), nullable=False, server_default=text("'0'"))


class PersonnelCompanyPositionMapping(Base):
    __tablename__ = 'personnel_company_position_mapping'
    __table_args__ = {'comment': '人员在公司职务信息'}

    id = Column(String(64), primary_key=True)
    personnel_id = Column(String(64), nullable=False, comment='人物id')
    company_id = Column(String(64), nullable=False, comment='公司id')
    personnel_type = Column(INTEGER(11), nullable=False, comment='人员类型:1-基金经理 2-投研 3-联系人 4-市场 5-合规风控 6-公司高管 7-公司法人 -1-其他')
    position = Column(String(40), nullable=False, comment='当前职位')
    department = Column(String(50), comment='任职部门')
    is_default = Column(INTEGER(11), comment='是否默认职位信息:1-是,0-否')
    start_date = Column(Date, comment='任职开始日期')
    end_date = Column(Date, comment='任职结束日期')
    position_order = Column(INTEGER(11), comment='职位次序')
    create_by = Column(String(64))
    create_time = Column(DateTime)
    update_by = Column(String(64))
    update_time = Column(DateTime)
    delete_tag = Column(INTEGER(3), nullable=False, server_default=text("'0'"))


class PersonnelInfo(Base):
    __tablename__ = 'personnel_info'
    __table_args__ = {'comment': '人物信息表'}

    id = Column(String(64), primary_key=True, comment='人员id')
    personnel_name = Column(String(40), nullable=False, comment='姓名')
    avatar = Column(String(255), comment='人员头像')
    personnel_type = Column(INTEGER(11), server_default=text("'-1'"), comment='人员类别,1-基金经理,2-研究员、3-联系人、-1-其他')
    profession_background = Column(TINYINT(4), server_default=text("'-1'"), comment='职业背景:1-券商,2-公募,3-其他金融机构,4-媒体,5-海外,6-民间,7-期货,8-实业、9-学者、10-银行、11-信托、12-保险、13-私募、-1-其他')
    key_figure = Column(INTEGER(11), server_default=text("'-1'"), comment='是否为核心人物标志,1-是,0-否,-1-其他')
    company_id = Column(String(64), index=True, comment='就职公司id')
    position = Column(String(64), comment='当前职位')
    career_start_year = Column(String(4), comment='从业开始年份')
    investment_experience = Column(INTEGER(11), nullable=False, server_default=text("'-1'"), comment='从业年限,<量纲:年>,-1:从业年限不详')
    sex = Column(INTEGER(11), comment='性别,1-男,2-女,-1-其他')
    graduateschool = Column(String(100), server_default=text("''"), comment='毕业院校')
    education = Column(INTEGER(11), server_default=text("'0'"), comment='最高学历:1-小学、2-中学、3-大专、4-本科,5-硕士,6-博士,7-博士后,-1-其他')
    major = Column(String(40), server_default=text("''"), comment='主修专业')
    profile = Column(Text, comment='人物简介')
    porder = Column(INTEGER(11), server_default=text("'0'"), comment='人物次序')
    ifinclude = Column(INTEGER(11), server_default=text("'0'"), comment='是否纳入团队信息')
    isvisible = Column(INTEGER(3), server_default=text("'1'"), comment='人物是否在前台可见:1-可见,0-禁止显示')
    is_qualify = Column(TINYINT(4), comment='是否有从业资格:1-是,2-否')
    topic = Column(Text, comment='荣誉名称')
    create_time = Column(TIMESTAMP, nullable=False, server_default=text("CURRENT_TIMESTAMP"), comment='创建时间')
    update_time = Column(TIMESTAMP, server_default=text("CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP"), comment='修改时间;第一次创建时与CreatTime值相同,修改时与修改时间相同')
    delete_tag = Column(INTEGER(3), nullable=False, server_default=text("'0'"), comment='记录的有效性;1-无效;0-有效;')


class QrQualitativeReport(Base):
    __tablename__ = 'qr_qualitative_report'
    __table_args__ = {'comment': '公司定性报告信息'}

    id = Column(String(64), primary_key=True, comment='定性报告ID,主键')
    company_id = Column(String(64), comment='公司id')
    organization_name = Column(String(80), nullable=False, comment='公司名称')
    report_name = Column(String(180), nullable=False, comment='报告名称')
    report_date = Column(Date, comment='报告日期')
    linkman = Column(String(50), comment='联系人')
    linkman_position = Column(String(30), comment='联系人职位')
    linkman_mobile = Column(String(20), comment='联系人电话')
    linkman_email = Column(String(50), comment='联系人邮箱')
    visiting_personnel = Column(String(50), comment='走访人员')
    visit_date = Column(Date, comment='走访时间')
    visit_way = Column(INTEGER(11), comment='走访方式:1-电话尽调 2-现场走访')
    report_source = Column(TINYINT(4), comment='报告来源:1-机构 2-组合大师')
    source_id = Column(INTEGER(11), comment='来源ID,组合大师用户打分模板ID. 0=模板')
    report_status = Column(TINYINT(4), comment='报告状态:0-草稿 1-发布')
    is_admin = Column(TINYINT(4), comment='是否管理员填写: 0-否, 1-是\t')
    completion_rate = Column(DECIMAL(22, 6), comment='完成比例')
    create_by = Column(String(64))
    create_time = Column(DateTime)
    update_by = Column(String(64))
    update_time = Column(DateTime)
    delete_tag = Column(INTEGER(3), nullable=False, server_default=text("'0'"))


class RzIndex(Base):
    __tablename__ = 'rz_index'
    __table_args__ = {'comment': '融智指数'}

    id = Column(String(64), primary_key=True)
    index_id = Column(String(64), nullable=False, index=True, comment='指数ID与index_profile的index_id关联')
    index_code = Column(String(64), nullable=False, index=True, comment='指数代码来源于indexes_profile')
    end_date = Column(Date, nullable=False, comment='指数截止月份')
    index_value = Column(DECIMAL(22, 0), nullable=False, comment='本期指数')
    update_time = Column(TIMESTAMP, nullable=False, server_default=text("CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP"))
    create_time = Column(TIMESTAMP, nullable=False, server_default=text("CURRENT_TIMESTAMP"))
    delete_tag = Column(INTEGER(3), nullable=False, server_default=text("'0'"))


class StockIndustryType(Base):
    __tablename__ = 'stock_industry_type'
    __table_args__ = {'comment': '股票行业分类'}

    id = Column(String(64), primary_key=True)
    stock_industry_id = Column(INTEGER(11), nullable=False, server_default=text("'-1'"), comment='股票行业分类(申万行业分类):1-农林牧渔、2-采掘、3-化工、4-黑色金属、5-有色金属、6-建筑建材、7-机械设备、8-电子元器件、9-交运设备、10-信息设备、11-家用电器、12-食品饮料、13-纺织服装、14-轻工制造、15-医药生物、16-公用事业、17-交通运输、18-房地产、19-金融服务、20-商业贸易、21-餐饮旅游、22-信息服务、23-综合、-1-其他')
    stock_industry_type = Column(String(64), nullable=False, comment='股票行业分类')
    create_time = Column(TIMESTAMP, nullable=False, server_default=text("CURRENT_TIMESTAMP"), comment='创建时间,默认第一次创建的getdate()时间')
    update_time = Column(TIMESTAMP, nullable=False, server_default=text("CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP"), comment='修改时间;第一次创建时与CreatTime值相同,修改时与修改时间相同')
    delete_tag = Column(INTEGER(3), nullable=False, server_default=text("'0'"))


class StockInfo(Base):
    __tablename__ = 'stock_info'
    __table_args__ = {'comment': '股票信息'}

    id = Column(String(64), primary_key=True)
    stock_code = Column(String(64), nullable=False, index=True, comment='股票代码')
    stock_type = Column(String(3), nullable=False, comment='股票类型')
    stock_name = Column(String(64), nullable=False, comment='股票简称')
    create_time = Column(TIMESTAMP, nullable=False, server_default=text("CURRENT_TIMESTAMP"))
    update_time = Column(TIMESTAMP, nullable=False, server_default=text("CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP"))
    delete_tag = Column(INTEGER(3), nullable=False, server_default=text("'0'"))


class UserComposeFundCount(Base):
    __tablename__ = 'user_compose_fund_count'
    __table_args__ = {'comment': '用户组合基金收益'}

    id = Column(String(64), primary_key=True)
    user_id = Column(String(255), nullable=False)
    fund_id = Column(String(255), nullable=False)
    profit_ratio = Column(String(255))
    profit_ratio_total = Column(DECIMAL(10, 0))
    fund_index = Column(DECIMAL(22, 6))
    create_time = Column(DateTime)
    create_by = Column(String(64))
    update_by = Column(String(64))
    update_time = Column(DateTime)
    delete_tag = Column(INTEGER(3), nullable=False)


class UserHoldFundInfo(Base):
    __tablename__ = 'user_hold_fund_info'
    __table_args__ = {'comment': '用户持仓信息'}

    id = Column(String(64), primary_key=True, comment='唯一主键')
    user_id = Column(String(64), nullable=False, comment='用户ID')
    p_fund_id = Column(String(64), comment='组合基金ID')
    fund_id = Column(String(64), nullable=False, comment='基金ID')
    buy_fee_ratio = Column(DECIMAL(22, 6), comment='申购费率')
    confirm_share = Column(DECIMAL(22, 6), comment='确认份额')
    confirm_share_date = Column(DateTime, comment='确认份额日期')
    confirm_amount = Column(INTEGER(11), comment='确认金额(单位:分)')
    fund_nav_id = Column(String(64), comment='确认单位净值')
    fund_nav = Column(DECIMAL(22, 6), comment='确认单位净值')
    init_weight = Column(DECIMAL(22, 6), comment='初始权重')
    cost_amount = Column(INTEGER(11), comment='成本(单位:分)')
    market_value = Column(INTEGER(11), comment='市值(单位:分)')
    profit_loss = Column(INTEGER(11), comment='盈亏(单位:分)')
    match_ratio = Column(DECIMAL(22, 6), comment='配比')
    create_time = Column(DateTime)
    create_by = Column(String(64))
    update_time = Column(DateTime)
    update_by = Column(String(64))
    delete_tag = Column(INTEGER(3), nullable=False)


class UserHoldFundInfoHistory(Base):
    __tablename__ = 'user_hold_fund_info_history'
    __table_args__ = {'comment': '用户历史持仓变动'}

    id = Column(String(64), primary_key=True, comment='唯一主键')
    user_id = Column(String(64), nullable=False, comment='用户ID')
    p_fund_id = Column(String(64), comment='组合基金ID')
    fund_id = Column(String(64), nullable=False, comment='基金ID')
    buy_fee_ratio = Column(DECIMAL(22, 6), comment='申购费率')
    confirm_share = Column(DECIMAL(22, 6), comment='确认份额')
    confirm_share_date = Column(DateTime, comment='确认份额日期')
    confirm_amount = Column(INTEGER(11), comment='确认金额(单位:分)')
    fund_nav_id = Column(String(64), comment='确认单位净值')
    fund_nav = Column(DECIMAL(22, 6), comment='确认单位净值')
    init_weight = Column(DECIMAL(22, 6), comment='初始权重')
    cost_amount = Column(INTEGER(11), comment='成本(单位:分)')
    market_value = Column(INTEGER(11), comment='市值(单位:分)')
    profit_loss = Column(INTEGER(11), comment='盈亏(单位:分)')
    match_ratio = Column(DECIMAL(22, 6), comment='配比')
    ratio_transfer = Column(DECIMAL(22, 6), comment='较上次调仓')
    create_time = Column(DateTime)
    create_by = Column(String(64))
    update_time = Column(DateTime)
    update_by = Column(String(64))
    delete_tag = Column(INTEGER(3), nullable=False)


class UserSingleFundCount(Base):
    __tablename__ = 'user_single_fund_count'
    __table_args__ = {'comment': '用户单只基金收益统计'}

    id = Column(String(64), primary_key=True)
    user_id = Column(String(64), nullable=False, comment='用户ID')
    fund_id = Column(String(64), nullable=False, comment='基金ID')
    count_date = Column(Date, nullable=False, comment='统计日期')
    profit_radio = Column(DECIMAL(22, 6), comment='收益率')
    retracement_radio = Column(DECIMAL(22, 6), comment='回撤率')
    create_time = Column(DateTime)
    create_by = Column(String(64))
    update_time = Column(DateTime)
    update_by = Column(String(64))
    delete_tag = Column(INTEGER(3), nullable=False, server_default=text("'0'"))