Files

88 lines
2.7 KiB
Python
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.
#!/usr/bin/env python3
"""财务BOT — CMA财务日报脚本
每天9点自动生成财务摘要,直接返回文本给Hermes cron递送
"""
import sys, os, json
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
# 直接调用BOT API
CMA_BOT_API = "http://127.0.0.1:8010/api/cma/bot"
API_KEY = "cma-bot-finance-2026"
import httpx
from datetime import datetime
def fetch(path, params=None):
url = f"{CMA_BOT_API}{path}"
r = httpx.get(url, headers={"X-BOT-KEY": API_KEY}, params=params, timeout=10)
r.raise_for_status()
return r.json()
def format_finance_brief(data: dict) -> str:
"""格式化财务简报"""
lines = []
lines.append(f"📊 财务BOT日报 | {datetime.now().strftime('%Y-%m-%d %H:%M')}")
lines.append("")
stats = data.get("overview", {})
lines.append(f"📌 系统概览:{stats.get('kpis', 0)}个KPI | "
f"{stats.get('alerts_open', 0)}条预警 | "
f"{stats.get('budget_plans', 0)}个预算计划")
# 财务维度KPI
kpis = data.get("kpis", [])
fin_kpis = [k for k in kpis if k.get("dimension") == "finance"]
if fin_kpis:
lines.append("")
lines.append("💰 财务维度KPI")
for k in fin_kpis:
line = f" • {k['name']}{k['code']}"
target = k.get("target")
unit = k.get("unit", "")
if target is not None:
line += f" 目标{target}{unit}"
lines.append(line)
# 预警
alerts = data.get("alerts", [])
if alerts:
lines.append("")
lines.append("🚨 待处理预警:")
for a in alerts[:5]:
level_icon = {"red": "🔴", "yellow": "🟡", "green": "🟢"}
icon = level_icon.get(a.get("level", ""), "⚠️")
lines.append(f" {icon} [{a['level']}] {a['message']}")
# 预算异常
budget = data.get("budget", [])
if budget:
lines.append("")
lines.append("📋 预算计划:共{}条".format(len(budget)))
# 行动方案
actions = data.get("actions", [])
if actions:
lines.append("")
lines.append("📋 进行中改善行动:")
for a in actions[:3]:
prog = a.get("progress", 0)
bar = "▓" * (prog // 10) + "░" * (10 - prog // 10)
lines.append(f" {bar} {a['title']}{prog}%")
lines.append("")
lines.append("💡 输入「财务分析」获取详细解读")
return "\n".join(lines)
def main():
try:
data = fetch("/query", {"q": "all"})
report = format_finance_brief(data)
print(report)
except Exception as e:
print(f"❌ 财务BOT获取数据失败: {e}")
sys.exit(1)
if __name__ == "__main__":
main()