from __future__ import annotations LEVEL1_DOMAIN_MAP = { "零售金融部": "零售", "公司金融部": "对公", "信用卡中心": "信用卡", "风险管理部": "风险", "运营管理部": "运营", "计划财务部": "财务", "网络经营服务部": "渠道", "普惠金融部": "普惠", "金融市场部": "金融市场", "国际业务部": "国际业务", "法律合规部": "合规", "人力资源部": "人力", } DOMAIN_KEYWORDS = { "零售": ["零售", "高价值", "私人银行", "私钻", "财富", "养老金", "AUM", "存款", "消费贷", "理财", "基金", "保险", "MGM"], "对公": ["对公", "公司", "战略客户", "机构客户", "上市公司", "保证金", "代发", "项目融资", "供应链", "信用证", "保函", "票据", "交易银行"], "信用卡": ["信用卡", "发卡", "分期", "额度"], "风险": ["风险", "不良", "逾期", "拨备", "授信", "贷后", "资产质量", "抵质押"], "运营": ["运营", "柜面", "账户", "支付结算", "反洗钱", "投诉", "集中作业", "现金库存", "回单"], "财务": ["财务", "利润", "FTP", "费用", "收入", "资本", "预算", "资产负债", "税务", "EVA", "收益率"], "渠道": ["渠道", "手机银行", "网银", "网点", "自助设备", "开放银行", "数字人民币", "预约到店", "活跃", "渗透率"], "普惠": ["普惠", "小微", "首贷", "涉农", "科创", "个体工商户"], "金融市场": ["金融市场", "债券", "同业", "资金头寸", "外汇交易", "衍生品", "转贴现", "投资"], "国际业务": ["国际", "跨境", "贸易融资", "进口", "出口", "外汇", "结售汇"], "合规": ["合规", "受益所有人", "尽职调查", "名单命中", "可疑交易", "监管报送", "制裁"], "人力": ["人力", "人均产能", "客户经理绩效", "奖金", "编制", "培训", "人才盘点"], } CARD_BLUEPRINT_NAMES = { "零售": [ "当月零售客户数", "当月高价值客户数", "当月私人银行客户数", "零售客户较上月净增", "零售客户月度增长趋势", "高价值客户月度增长趋势", "AUM余额", "AUM余额月度走势图", "各机构AUM余额排名", "各机构高价值客户数及达成率", "客户资产分层结构", "产品持仓结构", "理财产品销售额", "基金产品保有量", "零售贷款余额", "消费贷放款额月度趋势", "客户经理AUM贡献TOP10", "流失预警客户清单", "本机构零售客户数", "本机构客户资产提升率", ], "对公": [ "当月对公客户数", "战略客户数", "对公客户较上月净增", "对公存款余额", "对公存款日均余额", "活期存款占比", "对公存款余额月度趋势", "各机构对公存款余额排名", "公司贷款余额", "当月公司贷款投放额", "公司贷款投放月度趋势", "行业投向结构", "重点客户综合贡献TOP10", "代发客户数", "代发金额月度趋势", "信用证余额", "保函余额", "票据贴现金额", "交易银行活跃客户数", "流失预警对公客户清单", ], "信用卡": [ "当月新增发卡量", "累计发卡量", "当月活跃客户数", "活跃率", "交易金额", "交易金额月度趋势", "交易笔数月度趋势", "各机构交易金额排名", "分期金额", "分期转化率", "分期手续费收入", "渠道获客结构", "额度使用率", "逾期客户数", "逾期余额", "逾期率月度趋势", "风险等级分布", "睡眠客户唤醒数", "权益活动参与客户数", "商户交易额TOP10", ], "风险": [ "贷款余额", "不良贷款余额", "不良率", "关注类贷款余额", "逾期余额", "逾期率", "资产质量月度趋势", "不良贷款迁徙趋势", "各机构不良率排名", "行业风险分布", "风险预警客户数", "预警处置完成率", "贷后检查完成率", "授信集中度", "大额风险暴露客户清单", "抵质押品价值变动趋势", "拨备覆盖率", "五级分类结构", "本机构不良贷款余额", "本机构风险预警处置清单", ], "运营": [ "当日柜面业务笔数", "当月柜面业务笔数", "业务金额", "平均处理时长", "超时业务笔数", "业务量月度趋势", "各机构业务量排名", "账户开立数", "账户异常数", "企业账户年检完成率", "支付结算笔数", "支付结算金额月度趋势", "运营风险事件数", "风险事件处理完成率", "客户投诉数", "投诉处理及时率", "集中作业处理时效分布", "现金库存余额", "电子回单使用率", "本机构待处理事项清单", ], "财务": [ "营业收入", "净利息收入", "中间业务收入", "营业支出", "税前利润", "经济利润EVA", "利润贡献月度趋势", "各机构利润贡献排名", "收入结构", "费用预算", "费用执行率", "费用执行月度趋势", "产品收益率排名", "资产收益率", "负债成本率", "资产负债结构", "资本占用金额", "FTP净收入", "本机构利润贡献", "本机构费用超预算项目", ], "渠道": [ "当月活跃客户数", "活跃率", "累计活跃客户数", "渠道渗透率", "活跃率月度走势图", "渗透率月度走势图", "各机构当月活跃客户数及活跃率", "各机构累计活跃客户数及活跃率", "手机银行登录次数", "网银交易金额", "数字人民币交易笔数", "线上预约到店客户数", "预约到店转化率", "活跃用户构成", "新增用户月度走势图", "流失用户数", "渠道交易金额结构", "自助设备可用率", "开放银行接口调用量", "活跃TOP10用户名称", ], "普惠": [ "普惠贷款余额", "普惠贷款投放额", "普惠贷款余额月度趋势", "各机构普惠贷款余额排名", "小微客户数", "小微客户较上月净增", "首贷户数", "首贷户拓展月度趋势", "涉农贷款余额", "科技型企业贷款余额", "个体工商户贷款余额", "贷款加权利率", "利率定价分布", "普惠不良贷款余额", "普惠不良率", "风险补偿金额", "延期还本金额", "本机构普惠贷款投放额", "客户经理普惠贷款贡献TOP10", "普惠风险客户清单", ], "金融市场": [ "投资余额", "投资市值", "估值损益", "估值损益月度趋势", "投资组合结构", "债券品种结构", "久期分布", "同业负债余额", "同业负债成本率", "资金头寸缺口", "资金头寸缺口趋势", "外汇交易损益", "衍生品估值损益", "交易对手集中度", "限额占用率", "限额超限预警清单", "票据转贴现金额", "理财投资资产穿透结构", "市场价格波动预警", "本机构同业业务余额", ], "国际业务": [ "跨境结算金额", "跨境结算笔数", "跨境结算月度趋势", "贸易融资余额", "贸易融资投放额", "进口信用证金额", "出口托收金额", "外汇存款余额", "结售汇金额", "结售汇客户贡献TOP10", "跨境人民币金额", "币种分布", "国家地区分布", "各机构国际业务收入排名", "国际业务风险预警笔数", "风险预警处置率", "本机构跨境结算金额", "本机构贸易融资余额", "重点客户国际业务贡献", "业务品种结构", ], "合规": [ "待尽调客户数", "已尽调客户数", "尽调完成率", "尽调完成率月度趋势", "受益所有人信息缺失客户数", "名单命中客户数", "可疑交易笔数", "可疑交易金额", "可疑交易月度趋势", "监管报送差错数", "报送质量月度趋势", "合规检查问题数", "整改完成率", "整改逾期问题清单", "制裁筛查处理及时率", "员工异常行为线索数", "各机构合规问题数排名", "风险等级分布", "本机构待处理合规事项", "本机构整改完成率", ], "人力": [ "在岗人数", "客户经理人数", "人均产能", "人均产能月度趋势", "各机构人均产能排名", "客户经理绩效得分", "客户经理绩效TOP10", "奖金金额", "奖金分配结构", "岗位编制缺口", "人员流入流出趋势", "培训完成率", "培训完成率月度趋势", "人才梯队人数", "一线人员工作量", "管户客户数", "管户负载分布", "本机构人均产能", "本机构编制缺口", "本机构培训未完成人员清单", ], } DOMAIN_PROFILES = { "零售": { "prefix": "RTL", "date_field": "统计日期", "default_dataset": "零售客户经营宽表", "datasets": [ (["AUM", "资产", "高价值", "私人银行", "客户经理"], "零售AUM日均汇总"), (["理财", "基金", "产品", "持仓"], "零售产品销售明细"), (["贷款", "消费贷"], "零售贷款余额快照"), ], "metrics": [ (["高价值"], [("客户ID", "高价值客户数", "CNT_DISTINCT")]), (["私人银行"], [("客户ID", "私人银行客户数", "CNT_DISTINCT")]), (["AUM", "资产"], [("AUM余额", "AUM余额", "SUM")]), (["理财"], [("理财销售额", "理财产品销售额", "SUM")]), (["基金"], [("基金保有量", "基金产品保有量", "SUM")]), (["贷款"], [("贷款余额", "零售贷款余额", "SUM")]), (["消费贷"], [("放款金额", "消费贷放款额", "SUM")]), (["净增", "新增"], [("客户ID", "新增客户数", "CNT_DISTINCT")]), (["流失"], [("客户ID", "流失客户数", "CNT_DISTINCT")]), (["提升率", "达成率"], [("达成率", "达成率", "AVG")]), ], "default_metric": ("客户ID", "零售客户数", "CNT_DISTINCT"), "top_metric": ("AUM余额", "AUM贡献", "SUM"), "structure_field": "客户层级", "top_field": "客户经理", "list_fields": ["客户名称", "客户层级", "AUM余额", "客户经理"], }, "对公": { "prefix": "CORP", "date_field": "统计日期", "default_dataset": "对公客户经营汇总", "datasets": [ (["存款", "活期"], "对公存款余额明细"), (["贷款", "投放", "行业投向"], "公司信贷业务余额"), (["代发", "交易银行"], "交易银行业务统计"), (["信用证", "保函", "票据"], "对公表外及票据业务明细"), ], "metrics": [ (["战略客户"], [("客户ID", "战略客户数", "CNT_DISTINCT")]), (["存款"], [("存款余额", "对公存款余额", "SUM")]), (["日均"], [("日均余额", "对公存款日均余额", "SUM")]), (["活期"], [("活期存款余额", "活期存款余额", "SUM"), ("存款余额", "存款余额", "SUM")]), (["贷款"], [("贷款余额", "公司贷款余额", "SUM")]), (["投放"], [("投放金额", "贷款投放额", "SUM")]), (["代发"], [("代发金额", "代发金额", "SUM")]), (["信用证"], [("信用证余额", "信用证余额", "SUM")]), (["保函"], [("保函余额", "保函余额", "SUM")]), (["票据"], [("贴现金额", "票据贴现金额", "SUM")]), (["交易银行", "活跃"], [("客户ID", "活跃客户数", "CNT_DISTINCT")]), (["综合贡献"], [("综合贡献", "综合贡献", "SUM")]), (["净增"], [("客户ID", "新增客户数", "CNT_DISTINCT")]), (["流失"], [("客户ID", "流失客户数", "CNT_DISTINCT")]), ], "default_metric": ("客户ID", "对公客户数", "CNT_DISTINCT"), "top_metric": ("综合贡献", "综合贡献", "SUM"), "structure_field": "行业门类", "top_field": "客户名称", "list_fields": ["客户名称", "客户等级", "行业门类", "管户客户经理"], }, "信用卡": { "prefix": "CARD", "date_field": "统计日期", "default_dataset": "信用卡客户交易汇总", "datasets": [ (["分期"], "信用卡分期业务明细"), (["逾期", "风险"], "信用卡风险客户监测"), (["渠道", "获客"], "信用卡渠道获客统计"), (["商户", "交易"], "信用卡客户交易汇总"), ], "metrics": [ (["发卡"], [("卡号", "发卡量", "CNT_DISTINCT")]), (["活跃"], [("客户ID", "活跃客户数", "CNT_DISTINCT")]), (["交易金额", "商户"], [("交易金额", "交易金额", "SUM")]), (["交易笔数"], [("交易流水号", "交易笔数", "CNT_DISTINCT")]), (["分期金额"], [("分期金额", "分期金额", "SUM")]), (["转化率", "活跃率", "使用率", "逾期率"], [("比率值", "比率", "AVG")]), (["手续费"], [("手续费收入", "分期手续费收入", "SUM")]), (["逾期余额"], [("逾期余额", "逾期余额", "SUM")]), (["逾期客户"], [("客户ID", "逾期客户数", "CNT_DISTINCT")]), (["唤醒"], [("客户ID", "唤醒客户数", "CNT_DISTINCT")]), ], "default_metric": ("客户ID", "信用卡客户数", "CNT_DISTINCT"), "top_metric": ("交易金额", "交易金额", "SUM"), "structure_field": "渠道名称", "top_field": "商户名称", "list_fields": ["客户名称", "卡产品", "风险等级", "逾期余额"], }, "风险": { "prefix": "RISK", "date_field": "统计日期", "default_dataset": "信贷资产质量汇总", "datasets": [ (["不良", "迁徙", "五级分类"], "不良贷款迁徙明细"), (["预警", "清单"], "预警客户处置台账"), (["授信", "集中度", "大额"], "授信集中度监控表"), (["抵质押"], "抵质押品重估明细"), ], "metrics": [ (["不良率", "逾期率"], [("比率值", "风险比率", "AVG")]), (["不良"], [("不良贷款余额", "不良贷款余额", "SUM")]), (["关注"], [("关注类贷款余额", "关注类贷款余额", "SUM")]), (["逾期"], [("逾期余额", "逾期余额", "SUM")]), (["预警"], [("客户ID", "风险预警客户数", "CNT_DISTINCT")]), (["完成率", "覆盖率"], [("比率值", "完成率", "AVG")]), (["授信"], [("授信余额", "授信集中度", "SUM")]), (["拨备"], [("拨备覆盖率", "拨备覆盖率", "AVG")]), ], "default_metric": ("贷款余额", "贷款余额", "SUM"), "top_metric": ("贷款余额", "贷款余额", "SUM"), "structure_field": "五级分类", "top_field": "客户名称", "list_fields": ["客户名称", "风险等级", "贷款余额", "处置状态"], }, "运营": { "prefix": "OPS", "date_field": "统计日期", "default_dataset": "网点运营业务量汇总", "datasets": [ (["账户"], "账户质量监控明细"), (["支付结算"], "支付结算业务统计"), (["风险事件", "投诉", "待处理"], "运营风险事件台账"), (["现金"], "现金库存调拨明细"), ], "metrics": [ (["笔数", "业务量"], [("业务流水号", "业务笔数", "CNT_DISTINCT")]), (["金额", "库存"], [("业务金额", "业务金额", "SUM")]), (["时长"], [("处理时长", "平均处理时长", "AVG")]), (["超时"], [("业务流水号", "超时业务笔数", "CNT_DISTINCT")]), (["开立"], [("账户ID", "账户开立数", "CNT_DISTINCT")]), (["异常"], [("账户ID", "账户异常数", "CNT_DISTINCT")]), (["完成率", "及时率", "使用率"], [("比率值", "比率", "AVG")]), (["投诉"], [("投诉编号", "客户投诉数", "CNT_DISTINCT")]), (["风险事件"], [("事件编号", "运营风险事件数", "CNT_DISTINCT")]), ], "default_metric": ("业务流水号", "业务笔数", "CNT_DISTINCT"), "top_metric": ("业务笔数", "业务笔数", "SUM"), "structure_field": "业务类型", "top_field": "机构名称", "list_fields": ["事项编号", "业务类型", "处理状态", "责任团队"], }, "财务": { "prefix": "FIN", "date_field": "统计月份", "default_dataset": "管理会计利润汇总", "datasets": [ (["费用", "预算"], "费用预算执行表"), (["收益率", "产品"], "产品收益率测算表"), (["资产负债", "资本", "FTP"], "资产负债结构快照"), ], "metrics": [ (["收入"], [("收入金额", "营业收入", "SUM")]), (["支出"], [("支出金额", "营业支出", "SUM")]), (["利润", "EVA"], [("利润金额", "利润贡献", "SUM")]), (["预算"], [("预算金额", "费用预算", "SUM")]), (["执行率", "收益率", "成本率"], [("比率值", "比率", "AVG")]), (["资本"], [("资本占用金额", "资本占用金额", "SUM")]), (["FTP"], [("FTP净收入", "FTP净收入", "SUM")]), ], "default_metric": ("财务金额", "财务金额", "SUM"), "top_metric": ("利润金额", "利润贡献", "SUM"), "structure_field": "产品条线", "top_field": "机构名称", "list_fields": ["项目名称", "费用科目", "预算金额", "执行金额"], }, "渠道": { "prefix": "CHNL", "date_field": "统计日期", "default_dataset": "数字渠道活跃客户统计", "datasets": [ (["网点", "预约"], "网点客流业务统计"), (["自助设备"], "自助设备运行明细"), (["营销"], "渠道协同营销明细"), (["接口", "开放银行"], "开放银行接口调用明细"), (["数字人民币"], "数字人民币交易统计"), ], "metrics": [ (["活跃客户", "累计活跃"], [("用户ID", "活跃用户数", "CNT_DISTINCT")]), (["活跃率", "渗透率", "转化率", "可用率"], [("比率值", "比率", "AVG")]), (["登录"], [("登录次数", "登录次数", "SUM")]), (["交易金额"], [("交易金额", "交易金额", "SUM")]), (["交易笔数"], [("交易流水号", "交易笔数", "CNT_DISTINCT")]), (["预约"], [("客户ID", "预约客户数", "CNT_DISTINCT")]), (["新增"], [("用户ID", "新增用户数", "CNT_DISTINCT")]), (["流失"], [("用户ID", "流失用户数", "CNT_DISTINCT")]), (["接口"], [("调用次数", "接口调用量", "SUM")]), ], "default_metric": ("用户ID", "用户数", "CNT_DISTINCT"), "top_metric": ("登录次数", "登录次数", "SUM"), "structure_field": "用户状态", "top_field": "用户名称", "list_fields": ["用户名称", "所属机构", "登录次数", "最近登录时间"], }, "普惠": { "prefix": "INCL", "date_field": "统计日期", "default_dataset": "普惠贷款业务汇总", "datasets": [ (["小微", "客户经理"], "小微客户经营宽表"), (["涉农"], "涉农贷款投放明细"), (["风险补偿", "延期"], "普惠风险补偿台账"), ], "metrics": [ (["投放"], [("投放金额", "普惠贷款投放额", "SUM")]), (["小微"], [("客户ID", "小微客户数", "CNT_DISTINCT")]), (["首贷"], [("客户ID", "首贷户数", "CNT_DISTINCT")]), (["涉农"], [("贷款余额", "涉农贷款余额", "SUM")]), (["科技型"], [("贷款余额", "科技型企业贷款余额", "SUM")]), (["利率", "不良率"], [("比率值", "比率", "AVG")]), (["不良"], [("不良贷款余额", "不良贷款余额", "SUM")]), (["风险补偿"], [("补偿金额", "风险补偿金额", "SUM")]), (["延期"], [("延期金额", "延期还本金额", "SUM")]), ], "default_metric": ("贷款余额", "普惠贷款余额", "SUM"), "top_metric": ("贷款余额", "普惠贷款贡献", "SUM"), "structure_field": "贷款产品", "top_field": "客户经理", "list_fields": ["客户名称", "贷款产品", "贷款余额", "风险等级"], }, "金融市场": { "prefix": "MKT", "date_field": "统计日期", "default_dataset": "金融市场投资组合明细", "datasets": [ (["同业"], "同业负债成本统计"), (["资金头寸"], "资金头寸预测表"), (["外汇", "衍生品"], "外汇衍生交易估值表"), (["票据"], "票据转贴现业务分析表"), ], "metrics": [ (["市值"], [("市值", "投资市值", "SUM")]), (["损益"], [("损益金额", "损益金额", "SUM")]), (["久期", "成本率", "占用率"], [("比率值", "比率", "AVG")]), (["同业"], [("同业负债余额", "同业负债余额", "SUM")]), (["缺口"], [("资金缺口", "资金头寸缺口", "SUM")]), (["票据"], [("贴现金额", "票据转贴现金额", "SUM")]), ], "default_metric": ("投资余额", "投资余额", "SUM"), "top_metric": ("投资余额", "投资余额", "SUM"), "structure_field": "交易品种", "top_field": "交易对手", "list_fields": ["交易对手", "交易品种", "限额占用率", "预警等级"], }, "国际业务": { "prefix": "INTL", "date_field": "统计日期", "default_dataset": "国际结算业务统计", "datasets": [ (["贸易融资"], "贸易融资业务明细"), (["结售汇"], "结售汇客户贡献表"), (["跨境人民币"], "跨境人民币业务汇总"), (["信用证", "托收"], "国际结算业务统计"), ], "metrics": [ (["笔数"], [("业务流水号", "业务笔数", "CNT_DISTINCT")]), (["贸易融资"], [("融资余额", "贸易融资余额", "SUM")]), (["投放"], [("投放金额", "贸易融资投放额", "SUM")]), (["信用证"], [("信用证金额", "进口信用证金额", "SUM")]), (["托收"], [("托收金额", "出口托收金额", "SUM")]), (["外汇存款"], [("存款余额", "外汇存款余额", "SUM")]), (["结售汇"], [("结售汇金额", "结售汇金额", "SUM")]), (["人民币"], [("业务金额", "跨境人民币金额", "SUM")]), (["处置率"], [("比率值", "风险预警处置率", "AVG")]), (["风险预警"], [("预警编号", "风险预警笔数", "CNT_DISTINCT")]), ], "default_metric": ("结算金额", "跨境结算金额", "SUM"), "top_metric": ("业务金额", "国际业务贡献", "SUM"), "structure_field": "业务品种", "top_field": "客户名称", "list_fields": ["客户名称", "业务品种", "币种", "业务金额"], }, "合规": { "prefix": "COMP", "date_field": "统计日期", "default_dataset": "反洗钱客户监测表", "datasets": [ (["尽调", "受益所有人"], "客户尽职调查台账"), (["监管报送"], "监管报送质量统计"), (["整改", "检查"], "合规检查整改明细"), (["名单", "可疑交易", "制裁"], "反洗钱客户监测表"), ], "metrics": [ (["待尽调"], [("客户ID", "待尽调客户数", "CNT_DISTINCT")]), (["已尽调"], [("客户ID", "已尽调客户数", "CNT_DISTINCT")]), (["完成率", "及时率"], [("比率值", "比率", "AVG")]), (["缺失"], [("客户ID", "信息缺失客户数", "CNT_DISTINCT")]), (["名单"], [("客户ID", "名单命中客户数", "CNT_DISTINCT")]), (["交易金额"], [("交易金额", "可疑交易金额", "SUM")]), (["可疑交易"], [("交易流水号", "可疑交易笔数", "CNT_DISTINCT")]), (["差错"], [("报送批次号", "报送差错数", "CNT_DISTINCT")]), (["问题"], [("问题编号", "合规检查问题数", "CNT_DISTINCT")]), (["线索"], [("线索编号", "异常行为线索数", "CNT_DISTINCT")]), ], "default_metric": ("客户ID", "客户数", "CNT_DISTINCT"), "top_metric": ("问题编号", "合规问题数", "CNT_DISTINCT"), "structure_field": "风险等级", "top_field": "机构名称", "list_fields": ["事项编号", "问题类型", "处理状态", "责任部门"], }, "人力": { "prefix": "HR", "date_field": "统计月份", "default_dataset": "机构人员产能统计", "datasets": [ (["绩效", "客户经理"], "客户经理绩效明细"), (["奖金"], "奖金分配测算表"), (["培训"], "培训完成情况表"), (["编制", "人才", "人员"], "人员编制与流动统计"), ], "metrics": [ (["人数", "在岗", "客户经理", "人才"], [("员工ID", "人数", "CNT_DISTINCT")]), (["产能"], [("人均产能", "人均产能", "AVG")]), (["绩效"], [("绩效得分", "绩效得分", "AVG")]), (["奖金"], [("奖金金额", "奖金金额", "SUM")]), (["缺口"], [("编制缺口", "编制缺口", "SUM")]), (["流入流出"], [("员工ID", "人员变动数", "CNT_DISTINCT")]), (["培训完成率"], [("比率值", "培训完成率", "AVG")]), (["管户"], [("客户ID", "管户客户数", "CNT_DISTINCT")]), ], "default_metric": ("员工ID", "人数", "CNT_DISTINCT"), "top_metric": ("绩效得分", "绩效得分", "AVG"), "structure_field": "岗位名称", "top_field": "员工姓名", "list_fields": ["员工姓名", "岗位名称", "团队名称", "完成状态"], }, } def get_card_blueprints(domain: str) -> list[dict[str, object]]: return [build_card_spec(domain, card_name) for card_name in CARD_BLUEPRINT_NAMES[domain]] def build_card_spec(domain: str, card_name: str) -> dict[str, object]: profile = DOMAIN_PROFILES[domain] metrics = _choose_metrics(profile, card_name) fields = _choose_fields(profile, card_name) filters = _choose_filters(profile, card_name) sort = _choose_sort(profile, card_name, fields, metrics) dataset = _choose_dataset(profile, card_name) spec = { "card_name": card_name, "dataset_prefix": profile["prefix"], "dataset": dataset, "fields": fields, "filters": filters, "metrics": [{"field": field, "alias": alias, "agg": agg} for field, alias, agg in metrics], "sort": sort, } validate_card_spec(spec) return spec def validate_card_spec(spec: dict[str, object]) -> None: metric_fields = [metric["field"] for metric in spec["metrics"]] metric_aggs = [metric["agg"] for metric in spec["metrics"]] filter_fields = [item["field"] for item in spec["filters"]] filter_values = [item.get("value", item.get("value_from")) for item in spec["filters"]] sort_fields = [item["field"] for item in spec["sort"]] sort_ways = [item["way"] for item in spec["sort"]] if len(metric_fields) != len(metric_aggs): raise ValueError(f"metric binding mismatch for {spec['card_name']}") if len(filter_fields) != len(filter_values): raise ValueError(f"filter binding mismatch for {spec['card_name']}") if len(sort_fields) != len(sort_ways): raise ValueError(f"sort binding mismatch for {spec['card_name']}") def _choose_dataset(profile: dict[str, object], card_name: str) -> str: for keywords, dataset in profile["datasets"]: if any(keyword in card_name for keyword in keywords): return dataset return profile["default_dataset"] def _choose_metrics(profile: dict[str, object], card_name: str) -> list[tuple[str, str, str]]: rate_keywords = ["率", "占比"] if any(keyword in card_name for keyword in rate_keywords) and "及" not in card_name: return [("比率值", card_name, "AVG")] if "TOP10" in card_name: return [profile["top_metric"]] matched: list[tuple[str, str, str]] = [] for keywords, metrics in profile["metrics"]: if any(keyword in card_name for keyword in keywords): for metric in metrics: if metric not in matched: matched.append(metric) if not matched: matched.append(profile["default_metric"]) if "及" in card_name and len(matched) == 1: matched.append(("比率值", "比率", "AVG")) return matched[:3] def _choose_fields(profile: dict[str, object], card_name: str) -> list[str]: date_field = profile["date_field"] if any(keyword in card_name for keyword in ["月度趋势", "走势图"]): return [date_field] if "各机构" in card_name or "各分行" in card_name: return ["机构名称"] if "TOP10" in card_name: return [profile["top_field"]] if any(keyword in card_name for keyword in ["结构", "分布", "构成"]): return [profile["structure_field"]] if "清单" in card_name or "超预算项目" in card_name or "未完成人员" in card_name: return list(profile["list_fields"]) return [] def _choose_filters(profile: dict[str, object], card_name: str) -> list[dict[str, str]]: filters = [{"field": profile["date_field"], "value_kind": "month_end"}] if "各机构" in card_name or "各分行" in card_name: filters.append({"field": "上级机构ID", "value_from": "dashboard.bbk_id"}) else: filters.append({"field": "机构ID", "value_from": "dashboard.bbk_id"}) if "本机构" in card_name: filters.append({"field": "机构层级", "value": "本机构"}) if "当月" in card_name: filters.append({"field": "统计周期", "value": "当月"}) if "累计" in card_name: filters.append({"field": "统计口径", "value": "年累计"}) if "流失" in card_name: filters.append({"field": "客户状态", "value": "流失"}) if "活跃" in card_name: filters.append({"field": "活跃标识", "value": "是"}) if "风险" in card_name or "预警" in card_name: filters.append({"field": "风险等级", "value": "中高风险"}) return filters def _choose_sort( profile: dict[str, object], card_name: str, fields: list[str], metrics: list[tuple[str, str, str]], ) -> list[dict[str, str]]: if any(keyword in card_name for keyword in ["月度趋势", "走势图"]): return [{"field": profile["date_field"], "way": "ASC"}] if any(keyword in card_name for keyword in ["排名", "TOP10", "清单", "各机构", "各分行"]): return [{"field": metrics[0][0], "way": "DESC"}] if any(keyword in card_name for keyword in ["结构", "分布", "构成"]) and metrics: return [{"field": metrics[0][0], "way": "DESC"}] if fields: return [{"field": fields[0], "way": "ASC"}] return []