| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556 |
- 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 []
|