Files
xb/app/config/xibao_logic.json

392 lines
9.8 KiB
JSON
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"template_file": "/opt/xibao-web/templates/黄金三十天喜报模版(余额、保险、理财)(1).pptx",
"output_dir": "/opt/xibao-web/app/output",
"history_file": "/opt/xibao-web/app/data/generated_history.json",
"output_settings": {
"auto_export_png": true,
"auto_cleanup_pptx": true,
"output_pattern": "喜报_{branch}_{index}.png"
},
"relay_handling": {
"enabled": true,
"trigger_keyword": "#接龙",
"parse_rules": {
"skip_lines": [
"业绩亮单英雄榜",
"例",
"保险、余额、基金",
"网点+姓名"
],
"line_pattern": "^\\d+、\\s*"
},
"dedup": {
"enabled": true,
"key_fields": [
"branch",
"amount",
"type"
],
"action_on_new": "delete_old_then_generate"
}
},
"branches": {
"allowed": [
"四马桥",
"仙子脚",
"桥头",
"鸿雁",
"营江路",
"柑子园",
"潇水南路",
"濂溪",
"清塘",
"祥霖铺",
"梅花",
"蚣坝",
"白马渡"
],
"alias": {
"中心所": "潇水南路",
"营江路所": "营江路"
},
"template_location": {
"shape_index": 3,
"paragraph_index": 1,
"display_format": "{branch}营业所",
"company_replacement": "道县"
},
"shapes": {
"四马桥": {
"shape": 0,
"paragraphs": 2
},
"仙子脚": {
"shape": 0,
"paragraphs": 2
},
"桥头": {
"shape": 0,
"paragraphs": 2
},
"鸿雁": {
"shape": 0,
"paragraphs": 2
},
"营江路": {
"shape": 0,
"paragraphs": 2
},
"柑子园": {
"shape": 0,
"paragraphs": 2
},
"潇水南路": {
"shape": 0,
"paragraphs": 2
},
"濂溪": {
"shape": 0,
"paragraphs": 2
},
"清塘": {
"shape": 0,
"paragraphs": 2
},
"祥霖铺": {
"shape": 0,
"paragraphs": 2
},
"梅花": {
"shape": 0,
"paragraphs": 2
},
"蚣坝": {
"shape": 0,
"paragraphs": 2
},
"白马渡": {
"shape": 0,
"paragraphs": 2
}
}
},
"pages": {
"page_0": {
"display_name": "三个月定期",
"amount_shape": 2,
"status_shape": 3,
"has_bracket": true
},
"page_1": {
"display_name": "六个月定期",
"amount_shape": 2,
"status_shape": 3,
"has_bracket": true
},
"page_2": {
"display_name": "一年期定期",
"amount_shape": 1,
"status_shape": 2,
"has_bracket": true
},
"page_3": {
"display_name": "期交保险",
"amount_shape": 2,
"status_shape": 3,
"has_bracket": false
},
"page_4": {
"display_name": "趸交保险",
"amount_shape": 2,
"status_shape": 3,
"has_bracket": false
},
"page_5": {
"display_name": "两三年期理财",
"display_aliases": [
"两三期理财",
"两三年期理财"
],
"amount_shape": 2,
"status_shape": 3,
"has_bracket": false
},
"page_6": {
"display_name": "资管",
"amount_shape": 2,
"status_shape": 3,
"has_bracket": false
},
"page_7": {
"display_name": "基金/理财",
"amount_shape": 2,
"status_shape": 3,
"has_bracket": false
}
},
"type_matching": {
"三个月定期": "page_0",
"六个月定期": "page_1",
"一年期定期": "page_2",
"一年": "page_2",
"定期一年": "page_2",
"定期": "page_2",
"5年交": "page_3",
"5年期交": "page_3",
"期交": "page_3",
"趸交": "page_4",
"两三期理财": "page_5",
"两三年期理财": "page_5",
"理财": "page_5",
"资管": "page_6",
"基金": "page_7",
"保险": "page_3"
},
"insurance_handling": {
"default": "期交",
"page": "page_3",
"description": "保险默认匹配期交page_3如需确认是几年交请手动修正"
},
"status_extraction": {
"description": "从原始语句中提取状态关键词匹配4字状态词",
"valid_status": [
"揽收现金",
"微信提现",
"揽收他行",
"他行挖转",
"存量提升",
"商户提现",
"揽收商户",
"揽收彩礼",
"资金来源",
"成功营销"
],
"extraction_rules": {
"揽收他行": [
"揽收他行",
"他行揽收"
],
"他行挖转": [
"他行挖转",
"挖转",
"挖他行"
],
"揽收现金": [
"揽收现金"
],
"微信提现": [
"微信提现"
],
"商户提现": [
"商户提现"
],
"揽收商户": [
"揽收商户"
],
"揽收彩礼": [
"揽收彩礼",
"礼金"
],
"存量提升": [
"存量提升"
],
"资金来源": [
"资金来源"
],
"成功营销": [
"成功营销"
]
},
"fallback": "成功营销",
"priority_order": [
"揽收现金",
"微信提现",
"揽收他行",
"他行挖转",
"揽收彩礼",
"商户提现",
"揽收商户",
"存量提升",
"资金来源",
"成功营销"
]
},
"replace_algorithm": {
"important": "必须遍历runs逐个处理保持字体格式不改变",
"amount": {
"step1": "遍历所有shapes的text_frame",
"step2": "遍历每个paragraph的runs",
"step3": "判断条件run.text.strip()是纯数字或纯*",
"step4": "只替换该run的text为新金额数字去掉万",
"step5": "其他runs文字、单位的万等保持不变",
"condition_digit": "text.strip().isdigit()",
"condition_star": "text.strip() == '*'",
"example": {
"原始runs": [
"一年期定期",
"14",
"万"
],
"新金额": "30万",
"替换后runs": [
"一年期定期",
"30",
"万"
],
"最终显示": "一年期定期30万"
}
},
"status": {
"description": "根据page和shape索引替换状态",
"page_2_status_shape": 2,
"page_3_status_shape": 3,
"rule": "只替换长度为4的中文字符串状态词",
"condition": "len(text.strip()) == 4",
"valid_status": [
"揽收现金",
"微信提现",
"揽收他行",
"他行挖转",
"存量提升",
"商户提现",
"揽收商户",
"揽收彩礼",
"资金来源",
"成功营销"
],
"note": "不能替换类型关键词如'期交'、'定期'等",
"example_with_bracket": {
"原始runs": [
"",
"成功营销",
""
],
"新状态": "他行挖转",
"替换后runs": [
"",
"他行挖转",
""
],
"最终显示": "(他行挖转)"
},
"example_without_bracket": {
"原始runs": [
"成功营销"
],
"新状态": "他行挖转",
"替换后runs": [
"他行挖转"
],
"最终显示": "他行挖转"
}
},
"branch": {
"description": "动态替换网点名称",
"shape_index": 3,
"paragraph_index": 1,
"format": "{branch}营业所",
"company_replacement": "道县",
"note": "替换Shape 3 Paragraph 1的文本为'网点名称+营业所'",
"example": {
"原始": "仙子脚营业所",
"新网点": "白马渡",
"替换后": "白马渡营业所"
}
}
},
"performance": {
"single_generation_mode": true,
"max_build_workers": 1,
"max_extract_workers": 1,
"single_slide_output": true,
"generation_strategy": "page_template_cache",
"template_cache_min_records": 2,
"memory_reclaim": {
"enabled": true,
"gc_collect": true,
"malloc_trim": true
},
"image_delivery": {
"enabled": true,
"max_kbps": 0,
"chunk_kb": 64
}
},
"workflow": {
"step_1": "检测消息是否包含#接龙关键词",
"step_1a": "是接龙:解析每行数据,提取网点+金额+类型+状态",
"step_1b": "读取history_file获取已生成的数据记录",
"step_1c": "对比新旧数据,找出新增的记录",
"step_1d": "如果有待删除的旧记录删除对应的PNG文件",
"step_1e": "只对新记录执行生成",
"step_2": "遍历输入数据列表",
"step_2a": "检查branch是否在allowed_branches中如不在则跳过",
"step_2b": "检查alias将别名转换为潇水南路",
"step_3": "从数据中提取branch(网点)、amount(金额)、type(类型)",
"step_3a": "使用status_extraction从原始语句中提取状态关键词",
"step_4": "用type字段从type_matching找到对应page",
"step_5": "每条数据重新加载模板(避免状态累积)",
"step_6": "调用replace_algorithm.branch修改网点名称",
"step_7": "调用replace_algorithm.amount修改金额只改数字run",
"step_8": "调用replace_algorithm.status修改状态只改4字状态词",
"step_9": "保存临时PPT使用PowerPoint导出PNG图片",
"step_10": "自动清理临时PPT文件只保留PNG图片",
"step_11": "更新history_file记录已生成的数据",
"step_12": "重复步骤2-11直到处理完所有新数据"
},
"data_format": {
"required_fields": [
"raw_text"
],
"parsed_fields": [
"branch",
"amount",
"type",
"status"
],
"branch_filter": {
"description": "只允许13个网点不是则跳过该条数据",
"action": "skip"
}
}
}