demos = list()

demo0 = '''
开始日期 = '2024-04-01'
结束日期 = '2024-04-01'
公募产品开放产品 = 产品(['公募开放式'], ['净资产', '前一日净资产'])
公募产品净资产 = 公募产品开放产品.净资产
'''

# 资产指标计算
demo1 = '''回购资产 = 资产(['质押式回购', '买断式回购'], ['剩余期限', '久期']) in 产品([], ['前一日净资产'])
回购资产最大存续期 = agg(回购资产.剩余期限, ['产品代码', '产品简称'], 'max')
监控规则 = {'不符合监管要求': '剩余期限 > 365', '正常': '剩余期限 <= 365'}
'''
demos.append({'label': '1.质押式回购与买断式回购（含协议式回购）最长期限均不得超过365天', 'value': demo1})

# 产品指标计算
demo2 = '''正回购 = 资产(['债券正回购']) in 产品(['公募开放式'])
正回购持仓市值 = 正回购.持仓市值
正回购持仓市值合计 = agg(正回购持仓市值, ['产品代码', '产品简称'], 'sum')
公募产品开放产品净资产 = 产品(['公募开放式']).净资产
正回购余额占比 = 正回购持仓市值合计 / 公募产品开放产品净资产
监控规则 = {'不符合监管要求’': '正回购余额占比 > 0.4',  '正常': '正回购余额占比 <= 0.4'}
'''
demos.append({'label': '2.公募（除封闭式外）理财产品债券正回购资金余额不超过产品净资产的40%', 'value': demo2})

# 主体指标计算
demo3 = '''债券逆回购 = 资产(['债券逆回购']) in 产品(['私募'])
逆回购持仓市值 = 债券逆回购.持仓市值
逆回购持仓市值合计 = agg(逆回购持仓市值, ['产品代码', '产品简称'], 'sum')
私募产品净资产 = 产品(['私募']).净资产
逆回购余额占比 = 逆回购持仓市值合计 / 私募产品净资产
监控规则 = {'不符合监管要求': '逆回购余额占比 > 1',  '正常': '逆回购余额占比 <= 1'}
'''
demos.append({'label': '3.私募产品债券逆回购资金余额不超过产品净资产的100%', 'value': demo3})

# 资产-产品混合计算
demo4 = '''债权类资产持仓明细 = (资产(['债权类']) in 产品(['固定收益类'])).持仓市值
债权类资产持仓汇总 = agg(债权类资产持仓明细, ['产品代码', '产品简称'], 'sum')
固定收益类产品净资产 = 产品(['固定收益类']).净资产
债权类资产占比 = 债权类资产持仓汇总 / 固定收益类产品净资产
监控规则 = {'不符合监管要求': '债权类资产占比 < 0.8',  '正常': '债权类资产占比 >= 0.8'}
'''
demos.append({'label': '4.固定收益类理财产品投资于存款、债券等债权类资产的比例不低于80%', 'value': demo4})

# 主体-产品混合计算
demo5 = '''未上市股权 = 资产(['未上市企业股权及其受(收)益权']) in 产品(['公募开放式'])
未上市股权个数 = agg(未上市股权, ['产品代码', '产品简称'], 'count', {'资产代码': '未上市股权个数'})
监控规则 = {'不符合监管要求': '未上市股权个数 > 0',  '正常': '未上市股权个数 == 0'}
'''
demos.append({'label': '5.公募产品不得投资未上市企业股权', 'value': demo5})

# 这个有点小问题
demo6 = '''产品数据 = 产品(['封闭式']).下一开放日
非标数据 = 资产(['非标准化债权类资产']).资产到期日
非标持仓 = 非标数据 in 产品数据 
超标持仓 = filter(非标持仓, '资产到期日 > 下一开放日')
超限个数 = agg(超标持仓, ['产品代码', '产品简称'], 'count', {'资产代码': '超限个数'})
监控规则 = {'不符合监管要求': '超限个数 > 1',  '正常': '超限个数 <= 1'}
'''
demos.append({'label': '6.非标准化债权类资产终止日不得晚于封闭式资产管理产品的到期日', 'value': demo6})

# 合规限额计算2
demo7 = '''全部资产投资金额 = agg((资产([], '穿透') in 产品([])).持仓市值, ['资产代码', '资产简称'], 'sum')
监控规则 = {'不符合监管要求': '持仓市值 > 30000000000',  '正常': '持仓市值 <= 30000000000'}
'''
demos.append({'label': '7.【穿透】所有资产管理产品投资同一资产的资金总规模合计不得超过300亿元', 'value': demo7})

# 压力测试计算
demo8 = '''单个证券资产持仓占比 = (资产(['债券', '股票', '基金']) in 产品()).持仓市值 / 产品().净资产
监控规则 = {'不符合监管要求': '单个证券资产持仓占比 > 0.1',  '正常': '单个证券资产持仓占比 <= 0.1'}
'''
demos.append({'label': '8.单只公募理财产品持有单只证券或单只证券投资基金的市值不得超过该理财产品净资产的10%', 'value': demo8})

# 绩效评价计算
demo9 = '''证券持仓明细 = (资产(['债券', '股票', '基金']) in 产品()).持仓市值
证券持仓汇总 = agg(证券持仓明细, ['资产代码', '资产简称'], 'sum')
证券发行市值 = 资产(['债券', '股票', '基金']).发行市值
持仓占发行市值比 = 证券持仓汇总 / 证券发行市值
监控规则 = {'不符合监管要求': '持仓占发行市值比 > 0.3',  '正常': '持仓占发行市值比 <= 0.3'}
'''
demos.append({'label': '9.全部公募理财产品持有单只证券或单只证券投资基金的市值，不得超过该证券市值或该证券投资基金市值的30%', 'value': demo9})

demo10 = '''股票持仓明细 = (资产(['股票']) in 产品(['公募开放式'])).持仓市值
股票持仓汇总 = agg(股票持仓明细, ['资产代码', '资产简称'], 'sum')
股票流通市值 = 资产(['股票']).可流通市值
持仓占流通市值比 = 股票持仓汇总 / 股票流通市值
监控规则 = {'不符合监管要求': '持仓占流通市值比 > 0.15',  '正常': '持仓占流通市值比 <= 0.15'}
'''
demos.append({'label': '10.全部开放式公募理财产品投资单一上市公司发行的股票不得超过该上市公司可流通股票的15%', 'value': demo10})

# 错误示例1
demo11 = '''包括非机构投资者的产品 = filter(产品().个人投资者占比, '个人投资者占比 > 0')
不良资产 = 资产(['不良资产受(收)益权'])
不良资产持仓 = 不良资产 in 包括非机构投资者的产品
不良资产个数 = agg(不良资产持仓, ['产品代码', '产品简称'], 'count')
监控规则 = {'不符合监管要求': '个人投资者占比 > 0',  '正常': '个人投资者占比 == 0'}
'''
demos.append({'label': '11.面向非机构投资者发行的理财产品不得直接或间接投资于不良资产受（收）益权', 'value': demo11})

# 错误示例2
demo12 = '''债券资产持仓 = (资产(['债券', '资产支持证券']) in 主体() in 产品(['现金管理类'])).持仓市值
主体持仓汇总 = agg(债券资产持仓, ['产品代码', '产品简称', '主体代码', '主体名称'], 'sum')
产品净资产 = 产品(['现金管理类']).净资产
主体持仓汇总占比 = 主体持仓汇总 / 产品净资产
监控规则 = {'不符合监管要求': '主体持仓汇总占比 > 0.1',  '正常': '主体持仓汇总占比 <= 0.1'}
'''
demos.append({'label': '12.每只现金管理类产品投资于同一机构发行的债券及其作为原始权益人的资产支持证券的比例合计不得超过该产品资产净值的10%', 'value': demo12})

demo13 = '''主体AAA以下持仓 = (资产() in 主体(['主体信用评级低于AAA']) in 产品(['现金管理类'])).持仓市值
主体持仓汇总 = agg(主体AAA以下持仓, ['产品代码', '产品简称', '主体代码', '主体名称'], 'sum')
产品净资产 = 产品(['现金管理类']).净资产
主体持仓汇总占比 = 主体持仓汇总 / 产品净资产
监控规则 = {'不符合监管要求': '主体持仓汇总占比 > 0.02',  '正常': '主体持仓汇总占比 <= 0.02'}
'''
demos.append({'label': '13.每只现金管理类产品投资于所有主体信用评级低于AAA的机构发行的金融工具的比例合计不得超过该产品资产净值的10%', 'value': demo13})

demo14 = '''存款存单持仓合计 = agg((资产(['银行存款', '同业存单']) in 主体() in 产品(['现金管理类'])).持仓市值, ['主体代码', '主体名称'], 'sum')
银行上季度净资产 = agg((资产(['银行存款', '同业存单']) in 主体() in 产品(['现金管理类'])).上一季度末净资产, ['主体代码', '主体名称'], 'first')
持仓占净资产比例 = 存款存单持仓合计 / 银行上季度净资产
监控规则 = {'不符合监管要求': '持仓占净资产比例 > 0.1',  '正常': '持仓占净资产比例 <= 0.1'}
'''
demos.append({'label': '14.全部现金管理类产品投资于同一商业银行的存款、同业存单和债券，不得超过该商业银行最近一个季度末净资产的10%', 'value': demo14})

demo15 = '''高流动性资产持仓 = (资产(['现金', '国债', '中央银行票据', '政策性金融债券', '5个交易日内到期'], 去重=True) in 产品(['现金管理类'])).持仓市值
持仓合计 = agg(高流动性资产持仓, ['产品代码', '产品简称'], 'sum')
高流动性资产持仓比例 = 持仓合计 / 产品(['现金管理类']).净资产
监控规则 = {'不符合监管要求': '高流动性资产持仓比例 < 0.1',  '正常': '高流动性资产持仓比例 >= 0.1'}
'''
demos.append({'label': '15.每只现金管理类产品持有不低于该产品资产净值10%的现金、国债、中央银行票据、政策性金融债券以及5个交易日内到期的其他金融工具', 'value': demo15})

demo16 = '''筛选后产品 = filter(产品(['现金管理类']).前10名投资者份额占比, '前10名投资者份额占比 > 20')
全部资产 = 资产()
全部持仓资产剩余期限 = (全部资产 in 筛选后产品).剩余期限
剩余期限平均值 = agg(全部持仓资产剩余期限, ['产品代码', '产品简称'], 'mean')
监控规则 = {'不符合监管要求': '剩余期限 > 180',  '正常': '剩余期限 <= 180'}
'''
demos.append({'label': '16.当前10名投资者的持有份额合计超过现金管理类产品总份额的20%时，平均剩余存续期限不得超过180天', 'value': demo16})

demo17 = '''定开产品 = filter(产品(['定期开放式']).产品开放期, '产品开放期 < 90')
不活跃资产 = 资产(['不存在活跃交易市场资产'])
不活跃资产持仓 = (不活跃资产 in 定开产品).持仓市值
不活跃资产合计持仓 = agg(不活跃资产持仓, ['产品代码', '产品简称'], 'sum')
定开产品净资产 = 定开产品.净资产
不活跃资产占比 = 不活跃资产合计持仓 / 定开产品净资产
监控规则 = {'不符合监管要求': '不活跃资产占比 > 0.5',  '正常': '不活跃资产占比 <= 0.5'}
'''
demos.append({'label': '17.定期开放周期小于90天的开放式理财产品，投资不存在活跃交易市场资产的比例不得超过该理财产品净资产的50%', 'value': demo17})

demo18 = '''摊余成本法资产 = filter((资产([], ['估值方法', '资产到期日']) in 产品(['封闭式'])), '估值方法=="摊余成本法"')
封闭式持仓资产到期日 = 摊余成本法资产.资产到期日
封闭式产品到期日 = 产品(['封闭式']).产品到期日
天数差 = 封闭式产品到期日 - 封闭式持仓资产到期日
监控规则 = {'不符合监管要求': '天数差 < 0',  '正常': '天数差 >= 0'}
'''
demos.append({'label': '18.封闭式理财产品所投资的以摊余成本法计量的金融资产到期日不得晚于理财产品到期日', 'value': demo18})

demo19 = '''封闭式持仓资产到期日 = (资产() in 产品(['封闭式'])).资产到期日
城投企业持仓 = (资产() in 主体(['城投企业']) in 产品()).持仓市值
城投企业持仓合计 = sum(城投企业持仓)
产品总量 = sum(产品().净资产)
城投企业集中度 = 城投企业持仓合计 / 产品总量
房地产企业持仓 = (资产() in 主体(['房地产企业']) in 产品()).持仓市值
房地产企业持仓合计 = sum(房地产企业持仓)
房地产企业集中度 = 房地产企业持仓合计 / 产品总量
'''
demos.append({'label': '19.理财业务单一城投企业投资集中度', 'value': demo19})

demo20 = '''资产代码 = 'B7'
产品代码 = 'P07'
摊余成本法资产 = filter((资产() in 产品(['封闭式'])).估值方法, '估值方法=="摊余成本法"')
封闭式持仓资产到期日 = 摊余成本法资产.资产到期日
封闭式产品到期日 = 产品(['封闭式']).产品到期日
天数差 = 封闭式产品到期日 - 封闭式持仓资产到期日
监控规则 = {'不符合监管要求': '天数差 < 0',  '正常': '天数差 >= 0'}
'''
demos.append({'label': '20.将产品代码和资产代码录入进行溯源演示', 'value': demo20})

demo21 = '''产品代码 = '2101AF0018'
封闭式产品 = 产品(['封闭式产品'], ['当日份额', '当日单位净值'])
'''

demo22 = '''债权资产 = 资产(['单一资产'], ['持仓市值', '面值', '数量'])
'''

demo23 = '''持仓 = 资产(['单一资产'], ['持仓市值', '面值', '数量']) in 产品(['封闭式产品'], ['当日份额', '当日单位净值'])
'''

demo24 = '''查询资产 = 资产(['单一资产'], ['持仓市值'])
查询产品 = 产品(['封闭式产品'], ['当日份额', '当日单位净值'])
持仓 = 查询资产 in 查询产品
汇总 = agg(持仓, ['产品代码'], {'持仓市值': 'sum', '当日份额': 'first'})
'''
def get_demos():
    return demos
