通用上市公司日报生成技能 (Daily Report Generator)
概述
本技能为通用化日报生成器,支持任意A股上市公司。只需提供:
- 公司名称(简称,如"贵州茅台")
- 股票代码(6位数字,如"600519")
即可自动完成从信息抓取到日报交付的全流程,生成统一风格的HTML+MD双格式日报。
数据来源与合规边界(必读)
本技能仅用于正当用途下的公开信息整合(如投资研究、内部审计、合规监控、舆情跟踪), 并严格遵守以下边界:
- 仅采集公开信息:所有数据均来自公司对外公告、新闻媒体公开报道、证券交易所/行情服务商公开的市场数据。不抓取、不访问任何非公开、隐私、内部系统或未授权数据。
- 不针对个人隐私:监控对象限定为已公开上市的法人主体及其对外披露事项,不采集任何自然人(含高管个人)的隐私信息、通讯记录或内部行为数据。
- 必须经用户明确授权:在发起任何搜索(Step 2)之前,必须先通过 Step 1.5 监控授权与范围确认,获得用户对监控对象与搜索范围的显式确认;用户未确认或选择取消时,技能立即停止,不得默认进入抓取流程。
- 用户可逐项选择:用户对每一组关键词搜索均可单独勾选或取消,技能仅执行用户确认范围内的任务。
- 可审计、可撤回:每次执行的监控对象与范围会记录在日报执行摘要中,用户可随时停止或调整。
- 来源透明:日报中每条信息均标注来源与发布时间,行情数据注明数据日期,便于用户核验。
若用户要求监控非公开信息、特定自然人隐私或明显超出正当用途的数据,应明确拒绝并说明理由。
触发词
用户说出以下任一表达时触发本技能:
- "生成XX公司日报"
- "XX公司信息监控"
- "上市公司日报"
- "每日监控日报"
- "公司舆情日报"
- "生成日报"
- "今日日报"
- "监控日报"
- "帮我做XX的日报"
- "XX股票今日监控"
输入参数
执行前向用户确认(或直接解析)以下参数:
| 参数 | 必填 | 说明 | 示例 |
|------|------|------|------|
| company_name | 是 | 上市公司简称 | 西部证券 |
| stock_code | 是 | 6位股票代码 | 002673 |
| output_dir | 否 | 输出目录根路径(执行前必须向用户确认,见 Step 1.6) | D:\WorkBuddy Docs\信息监控与汇总 |
核心工作流
收到指令后,严格按下述步骤顺序执行。注意:Step 1.5 为强制授权前置,未通过不得进入 Step 2。
Step 1:初始化与历史回顾
- 解析
company_name+stock_code - 计算计划保存路径(仅计算,不立即创建目录,待 Step 1.6 用户确认后再创建):
{output_dir}\{company_name}({stock_code})每日信息汇总\- HTML 日报计划保存至:
{output_dir}\{company_name}({stock_code})每日信息汇总\{company_name}日报_YYYY-MM-DD.html - MD 日报计划保存至:
{output_dir}\{company_name}({stock_code})每日信息汇总\{company_name}日报_YYYY-MM-DD.md
- HTML 日报计划保存至:
- 在用户确认路径前,不读取也不写入该目录;待 Step 1.6 确认后,再读取历史
日报信息等级汇总.md,提取:- 持续跟踪事项清单(带状态emoji:✅/🚨/👤/⏰)
- 上期严重程度评估
- 未结诉讼/处罚/融资事项
- 读取
.workbuddy\automations\{stock_code}\memory.md(如有),获取上期执行摘要
Step 1.5:监控授权与范围确认(必经前置,未通过不得进入 Step 2)
本步骤是强制授权闸门,旨在消除"默认进入、无确认"的合规风险。未获得用户显式确认前,禁止执行任何 WebSearch 或行情/资金查询。
-
回显监控对象:向用户明确展示将要监控的主体:
- 公司名称:
{company_name} - 股票代码:
{stock_code} - 用途(由用户声明,如投资研究 / 内部审计 / 合规监控)
- 公司名称:
-
披露数据范围:明确告知用户,本技能只会采集公开披露信息(公告、新闻、公开行情),不触及任何隐私或内部数据。
-
逐项列出搜索任务并请求确认:将以下 8 项搜索任务逐条列出,请用户勾选/取消(支持"全选"或"仅保留部分"):
| 序号 | 搜索任务 | 说明 | 默认 | |------|----------|------|------| | ① | 公告搜索 |
"{company_name} {stock_code} 公告"| ✅ | | ② | 最新动态 |"{company_name} 最新动态 新闻"| ✅ | | ③ | 监管处罚 |"{company_name} 监管 处罚"| ✅ | | ④ | 诉讼纠纷 |"{company_name} 诉讼 纠纷"| ✅ | | ⑤ | 舆情监控 |"{company_name} 舆情"| ✅ | | ⑥ | 行情数据 |"{company_name} {stock_code} 股价 行情"| ✅ | | ⑦ | 资金流向 |"{company_name} {stock_code} 资金流向 主力 融资融券"| ✅ | | ⑧ | 实时行情(连接器) | 如 westock-mcp / akshare-finance 可用则调用 | ⚪可选 | -
等待显式确认:使用确认式交互(如
AskUserQuestion或明确要求用户回复"确认启动"),必须收到用户明确同意后方可继续。- 用户选择"取消" → 立即终止,不再执行任何搜索。
- 用户取消某几项 → 仅执行被保留的任务(在 Step 2 中跳过未勾选项)。
-
记录授权范围:将"已确认的主体 + 已勾选的搜索任务清单"记入本次执行摘要,确保可审计。
⚠️ 任何情况下都不得跳过本步骤、不得对用户未确认的主体或任务执行搜索。若用户在对话中已事前明确授权(如"帮我监控XX公司,按默认范围来"),仍需在回复中复述本次范围并等待其确认,不得静默默认执行。
Step 1.6:保存路径确认(写盘前必经,未确认不得创建目录/写文件)
本步骤是写盘授权闸门。在创建任何目录、生成或写入 HTML/MD/汇总表之前,必须向用户明确展示拟保存位置并获得确认,杜绝静默写盘。
- 展示默认保存位置:基于用户输入的
output_dir(未指定时使用本机默认工作目录),向用户清晰展示即将生成的文件落点:- 📁 工作目录:
{output_dir}\{company_name}({stock_code})每日信息汇总\ - 📄 HTML 日报:
{output_dir}\{company_name}({stock_code})每日信息汇总\{company_name}日报_YYYY-MM-DD.html - 📄 MD 日报:
{output_dir}\{company_name}({stock_code})每日信息汇总\{company_name}日报_YYYY-MM-DD.md - 📄 汇总表(追加):
{output_dir}\{company_name}({stock_code})每日信息汇总\日报信息等级汇总.md
- 📁 工作目录:
- 请求确认或修改:使用确认式交互(如
AskUserQuestion)请用户选择:- 确认使用默认路径:按上述落点生成文件;
- 修改为自定义路径:用户提供新的
output_dir,技能据此重新计算全部落点后再确认。
- 等待显式确认:必须收到用户明确同意后,方可创建目录并继续 Step 2 之后的流程;用户未确认前,不得执行
mkdir或任何写盘操作。 - 记录路径:将最终确认的保存路径记入本次执行摘要,确保可审计。
⚠️ 任何情况下都不得跳过本步骤、不得在未获确认时静默创建目录或写入文件。
Step 1.7:本地保存路径确认记忆 + 云端同步每次询问
本步骤实现「本地路径首次确认后默认沿用」与「腾讯文档云端同步每次执行后单独询问」两条独立规则。
⚠️ 核心规则:
- 本地路径:仅首次执行时与用户确认本地保存地点;确认后写入
path_config.json(confirmed_targets含local且local_dir有效),后续执行默认沿用该路径,不再询问。- 云端同步:每次本地日报保存完成后,都通过
AskUserQuestion单独询问「本次是否需要同步腾讯文档」——不因历史确认而跳过。用户选择"是"才执行 Step 11.5;选择"否"则仅本地交付。
- 配置字段(
~/.workbuddy/automations/{stock_code}/path_config.json):{ "stock_code": "002673", "company_name": "西部证券", "sync_local": true, "local_dir": "F:\\...\\信息监控与汇总", "sync_tencent_docs": true, "tencent_docs_dir_id": "PvnEpcszduWq", "confirmed_targets": ["local"], "configured": true, "configured_at": "2026-08-23T08:30:00+08:00" }sync_local/local_dir:是否落本地、本地输出目录根;sync_tencent_docs/tencent_docs_dir_id:是否同步云端、腾讯文档文件夹file_id;confirmed_targets:已获用户确认的本地路径标记(含local即本地路径已确认、可默认沿用);云端目标不在此列——云端是否同步以每次询问结果为准。
- 本地路径判定(仅首次确认):
- 若
confirmed_targets含local且local_dir有效 → 默认沿用,不再询问; - 否则 → 通过
AskUserQuestion与用户确认本地保存路径(默认D:\WorkBuddy Docs\信息监控与汇总或自定义),确认后调用path_config.py --set-local --dir "..."写入并登记local,再执行。
- 若
- 云端同步判定(每次询问):
- 每次本地日报保存完成后,无论历史状态,均通过
AskUserQuestion询问「是否同步腾讯文档」; - 选择"是" → 进入 Step 11.5 执行云端同步(云端根目录定位/新建文件夹 + 同步日报);
- 选择"否" → 本次仅本地交付,不执行任何云端操作。
- 每次本地日报保存完成后,无论历史状态,均通过
- 更改 / 查看配置:运行
scripts/path_config.py --code {code} --status;- 首次确认本地:
--set-local --dir "..."(自动登记local已确认); - 更新云端目标:
--set-tencent --dir-id "<file_id>"(仅记录云端目标,不构成永久确认); - 关闭本地:
--disable-local;清除全部配置:--reset(下次重新确认本地路径)。
- 首次确认本地:
- 脚本层默认保存:
generate_report.py与backfill_summary.py缺省--output-dir时自动从path_config.json读取本地路径(--code参数);云端同步由独立的 Step 11.5 +sync_tencent_docs.py负责。
Step 2:多渠道信息抓取(5组关键词并行搜索)
前置条件:必须已完成 Step 1.5 的授权与范围确认。以下搜索以用户勾选确认的范围为准;未勾选的任务一律跳过,绝不默认补跑。所有搜索均针对公开信息。
使用 WebSearch 工具,对以下5组关键词分别独立搜索(附加当前年月以提升时效性):
| 序号 | 关键词模板 | 说明 |
|------|-----------|------|
| ① | "{company_name} {stock_code} 公告" | 公司公告 |
| ② | "{company_name} 最新动态 新闻" | 最新动态 |
| ③ | "{company_name} 监管 处罚" | 监管处罚 |
| ④ | "{company_name} 诉讼 纠纷" | 诉讼纠纷 |
| ⑤ | "{company_name} 舆情" | 舆情监控 |
补充抓取(对应 Step 1.5 中用户勾选的 ⑥⑦⑧ 项;若用户在 1.5 中未勾选则跳过):
- ⑥ 行情数据:使用
WebSearch搜索"{company_name} {stock_code} 股价 行情" - ⑦ 资金流向:使用
WebSearch搜索"{company_name} {stock_code} 资金流向 主力 融资融券" - ⑧ 实时行情(可选):如连接器可用且用户已勾选,使用
westock-mcp或akshare-finance获取实时行情;不可用或用户未选时跳过,改用 ⑥ 的公开搜索结果
Step 3:信息分组(三版块)
将抓取到的所有信息按以下三版块归类:
| 版块 | 涵盖内容 | |------|----------| | 财务类 | 营收/利润波动、公允价值变动、现金流异常、借款及负债变化、股价行情、资金流向、融资融券、债券发行/兑付 | | 合规类 | 监管处罚、诉讼、程序合规、关联交易、反洗钱、保荐责任 | | 经营类 | 业务转型、人员变动、投资项目、重大社会活动、获奖、研报、调研、股东会 |
Step 4:分类定级(A/B/C三级)
对每条信息按以下标准定级:
| 等级 | 判定标准 | 示例 | |------|----------|------| | A类(重大事项) | 监管处罚、立案调查、重大诉讼、业绩大幅变动(±30%+)、重大重组、退市风险 | 证监局处罚决定、营收利润同比变动超30%、合并收购 | | B类(重要事项) | 定期报告、分红、增发、重大投资、分支机构调整、债券发行/兑付、股东会、薪酬制度、高管变动 | 年报季报发布、公司债发行、短融兑付、经营范围变更 | | C类(一般事项) | 日常新闻、市场评论、资金流向、业务资格、社会活动、研报 | 股价行情、主力资金流向、行业报道、投资者活动 |
去重规则:同一事项多渠道报道只记录一次,以官方公告为权威来源。
Step 5:提取审计关注要点
对每条信息从三个维度分析:
| 维度 | 关注要点 | |------|----------| | 财务类 | 营收/利润波动、公允价值变动、现金流异常、借款变化、负债变化、融资成本 | | 合规类 | 监管处罚、诉讼、程序合规、关联交易、信息披露合规、反洗钱 | | 经营类 | 业务转型、人员变动、投资项目、重大社会活动、获得奖项、业务资格变更 |
每条信息标注风险等级:高/中/低。
持续跟踪事项:上期遗留的未结事项(诉讼、处罚整改进度、融资兑付等)需在当期日报中持续跟踪直至结项。
Step 6:生成HTML日报(严格锁定模板)
⚠️ 最关键步骤。 每日HTML日报必须严格按照本包内 references/html-template.md(自带原创模板,见"关键模板引用"节的来源声明)中的完整CSS模板和HTML结构规范生成,不得自行创意、不得变更配色、不得更换布局方式、不得更改类名或组件结构。
推荐优先使用
scripts/generate_report.py生成(其已内联同一套 CSS/JS,完全自包含、可复现);如需在对话中直接生成,则读取本包内references/html-template.md作为结构基础。
强制检查清单(生成前必检):
- [ ] CSS变量与模板完全一致(--primary: #C7000B 等)
- [ ] Hero背景为
linear-gradient(135deg, var(--primary) 0%, var(--primary-dark) 100%) - [ ] Hero badge文案为"内部审计 · 每日信息监控"
- [ ] 导航栏使用
nav-bar/nav-inner/nav-link结构,7个锚点完整 - [ ] Section header使用
section-icon + section-title组合 - [ ] 卡片使用
card-top/card-seq/card-body/card-summary/card-actions结构 - [ ] chip类名为
chip-source/chip-time/chip-level.a/b/c - [ ] 审计要点使用
audit-list/audit-item(high/medium/low)/audit-priority/audit-text - [ ] 风险卡片使用
risk-card(h4+p)结构,中风险使用.mid变体 - [ ] 空状态使用
empty-state(icon ✅ + text) - [ ] Footer包含总条数和数据源
- [ ] 全局编号贯穿连续不重置
- [ ] 时间格式为北京人话格式(如"2小时前"/"今天上午"/"昨天"/"6月11日公告")
- [ ] JS滚动动画和导航交互与模板一致
- [ ] 文件UTF-8编码
动态替换内容:
- 公司名称、股票代码、日期、星期
- A/B/C数量统计
- 行情标签组(收盘价/涨跌幅/成交额/换手率/总市值/市盈率/市净率/主力净流入)
- 概览表格行
- 资讯卡片列表(全局连续编号)
- 审计要点列表
- 风险卡片列表
- 明日关注列表
- Footer总条数、数据源、生成时间
文件保存路径:
{output_dir}\{company_name}({stock_code})每日信息汇总\{company_name}日报_YYYY-MM-DD.html
Step 7:生成MD日报
基于HTML日报内容,生成同结构的Markdown版本,用于存档和知识库同步。
文件保存路径:
{output_dir}\{company_name}({stock_code})每日信息汇总\{company_name}日报_YYYY-MM-DD.md
Step 8:更新汇总表(每次执行强制完善,单文件)
强制要求:每一次日报执行(无论单日或按周期批量),都必须完善《{company_name}日报信息等级汇总》 这一单一汇总文件——已存在则更新对应日期行,不存在则创建该文件并写入首行。该文件是后续 复盘的唯一索引,绝不可跳过。
将当日(或当批各日)等级信息追加至:
{output_dir}\{company_name}({stock_code})每日信息汇总\日报信息等级汇总.md
推荐优先使用
scripts/generate_report.py自动更新:新日期行会插入到第一个主汇总表(表头分隔行之后)的末尾,并自动处理表中历史遗留空行;若该日期已存在则原地替换;若汇总文件不存在则自动创建。手工追加时,请同样把新行写入顶部主表,勿插入文件末尾的备注/次要表格区域。
追加格式为表格行:
| YYYY-MM-DD | A类数量 | B类数量+说明 | C类数量+说明 | 严重程度评估 |
同时更新汇总表中的:
- 持续跟踪事项清单
- 重要融资事项表
- 审计跟踪要点
Step 8.5:历史日报补录汇总表
每日日报生成并更新汇总表后,可运行补录脚本校验一致性,将任何「有日报文件但汇总表未记录」 的日期自动补录:
python scripts/backfill_summary.py --code {stock_code} --company {company_name}
- 脚本遍历
{output_dir}\{company_name}({stock_code})每日信息汇总\下全部 《{company_name}日报_YYYY-MM-DD.md》,对照汇总表主表已有日期,仅补录缺失日期 (已存在行跳过,保留人工润色内容)。 - 补录行按日期升序插入第一个主汇总表末尾;若汇总表不存在则自动创建 md(不生成 HTML)。
- 支持
--dry-run预览缺失清单;--output-dir缺省从path_config.json读取。 - 兼容两代日报格式:新版正文含
### 【n】标题;旧版无标题结构但概览表「说明」列含摘要, 脚本自动优先采用概览说明、回退正文标题提取。 - 建议每日交付前运行一次,保证汇总表与日报文件始终一致。
Step 9:最终检查
对照Step 6中的强制检查清单逐项确认。
Step 10:输出摘要
在对话中输出当日信息摘要(不超过500字),包括:
- 今日抓取信息总数(去重后)
- A类事项数量及简要说明
- B类亮点事项
- 重点审计关注事项(高优先级)
- 如有重大事项,特别提醒
- 行情一句话点评
Step 11:交付文件
使用 present_files 工具交付HTML+MD两个文件给用户。
Step 11.5:腾讯文档同步(用户本次确认后云端落地)
触发条件:本次执行中,用户通过 Step 1.7 的 AskUserQuestion 明确选择了「同步腾讯文档」。本地 HTML/MD 生成完毕后执行本步骤。
- 前置检查:确认 tencent-docs 连接器处于已连接状态。
- 云端根目录文件夹定位/新建(按规则在云端根目录生成「{company}({code})每日信息汇总」文件夹):
- 调用
manage.folder_list检索云端根目录,按标题(如「西部证券(002673)每日信息汇总」)精确匹配文件夹; - 命中 → 复用该文件夹
file_id,更新path_config.json的tencent_docs_dir_id(path_config.py --set-tencent --dir-id <file_id>); - 未命中 → 尝试创建文件夹(若连接器提供创建接口则调用);连接器暂未开放自动建文件夹接口时,向用户说明并请其手动在腾讯文档首页创建该文件夹,或选择复用历史
tencent_docs_dir_id,回填后继续;亦可降级为同步至云端根目录(不归位文件夹)。
- 调用
- 执行同步脚本(幂等、按天):
python scripts/sync_tencent_docs.py --code {stock_code} # 其他设备路径不同可指定:--td-skill-dir "<腾讯文档技能目录>" # 仅预览:--dry-run 强制重传:--force- 脚本扫描本地
{local_dir}\{company}({code})每日信息汇总\下的全部《{company}日报_YYYY-MM-DD.md》与日报信息等级汇总.md; - 按**精确标题(去扩展名)**检索云端,已存在则跳过(best-effort 确保归位到目标文件夹);
- 不存在则导入为在线 Markdown 文档并移入目标文件夹;
- 结果落盘至
~/.workbuddy/automations/{code}/sync_result.json(imported/skipped/failed)。 - 刷新已变更内容:若本地《日报信息等级汇总》或某日报内容有修改需覆盖云端旧版,
加
--refresh-summary(仅刷新汇总表)或--force(全部重传)参数。--force会因云端允许重名而产生新文档,建议优先用--refresh-summary精确刷新汇总表。
- 脚本扫描本地
- 记录结果:将返回的文档链接与 file_id 写入当日自动化记忆
(
~/.workbuddy/automations/{code}/memory.md)。 - 失败降级:若连接器不可用、文件夹不可用或上传失败,降级为本地交付(
present_files本地文件), 并在回复中说明腾讯文档未同步成功及原因,不阻塞日报交付。 - 本地留存:本地文件始终按
local_dir留存一份,保证可追溯、可离线复盘。
Step 12:更新项目记忆
在 .workbuddy\memory\YYYY-MM-DD.md 追加执行记录。
Step 13:更新自动化记忆
在 .workbuddy\automations\{stock_code}\memory.md 追加执行摘要(高层面,不含详细内容)。
按指定时间周期建立/完善日志工作流(多日补制 / 完善)
触发:用户要求「补制 / 完善某时间周期(如 2026-07-01 ~ 2026-07-15)的日志」。
核心原则:日志必须按天保存,严禁将多天或跨期信息写入同一个日志文件。
- 解析周期:将用户给出的起止日期展开为逐日日期列表(含周六/日,因上市公司可能在休市日发布重要公告)。
- 逐日检索:对列表中每一天分别执行 Step 2 风格的关键词检索(搜索词附加该具体日期以提升时效), 获取该日公开信息。切勿一次性检索整个周期后混合归档。
- 按天落盘判定(对已指定路径逐日检查):
- 检查
{local_dir}\{company_name}({stock_code})每日信息汇总\下是否已存在《{company_name}日报_YYYY-MM-DD.md》:- 已存在 → 将本次检索内容与原文比对:仅当原文未涵盖本次新检索到的信息 (新增事项 / 新来源 / 新进展)时,增量更新该文件(在原结构内追加或修订对应版块), 不整体覆盖、不丢失已有内容;去重键为「来源 + 日期 + 事项」。
- 不存在 → 新建
《{company_name}日报_YYYY-MM-DD.md》(及对应 HTML),按统一模板生成当日日报。
- 检查
- 汇总表完善:全部日期处理完后,运行
python scripts/backfill_summary.py --code {stock_code}(或逐日generate_report.py) 将各日等级信息写入 / 更新《{company_name}日报信息等级汇总.md》(单一汇总文件,有则更新、无则创建)。 - 云端同步(如已确认
sync_tencent_docs):执行 Step 11.5 将新增 / 更新的文件同步至腾讯文档。 - 校验:运行
backfill_summary.py --code {stock_code} --dry-run确认「日报文件 ↔ 汇总记录」0 缺失。
该工作流与单日流程共用同一套脚本与模板,区别仅在于「外层按天循环 + 逐日比对更新」, 保证任意时间周期的日志都可被精确、可追溯地建立或完善。
关键模板引用
本技能依赖以下参考文档(均随本技能包一同分发,位于 references/ 目录,不依赖任何外部链接、仓库或网络下载):
| 文件 | 内容 | 来源 |
|------|------|------|
| references/classification-standards.md | A/B/C分类标准、审计维度、风险等级定义、持续跟踪事项管理 | 本技能原创规范 |
| references/html-template.md | 完整HTML模板:CSS变量、组件样式、JS交互、HTML骨架 | 本技能自带原创骨架 |
模板来源与授权声明(重要)
references/html-template.md 是本技能自带、原创、随包分发的 HTML/CSS/JS 资源,不是从任何外部不可见位置粘贴或抓取的代码。其来源与性质明确如下:
- 原创通用前端骨架:模板为作者原创的通用页面结构,采用系统字体栈(PingFang SC / Microsoft YaHei / Noto Sans SC 等)与纯原生 CSS/JS 实现。
- 无任何第三方依赖:未使用 Bootstrap、Tailwind 等任何前端框架,未引入任何 CDN、外部字体文件或商业网站的专有样式/脚本,不存在复制他人受版权保护代码的情况。
- 配色可配置:CSS 变量(如
--primary: #C7000B)为示例默认配色,用户可自由修改,不构成对任何特定品牌视觉的模仿或冒用。 - 授权范围:本模板仅供本技能生成用户日报使用,可自由用于该用途,无额外许可限制。
以往版本曾要求"将外部 html-template.md 原样粘贴",现已澄清:该文件始终随本包提供,技能运行时应读取本包内
references/html-template.md并据此生成,无需、也不会从任何外部/未披露来源获取代码。
生成方式(二选一,均自包含)
- 推荐 · 脚本生成(完全自包含):使用
scripts/generate_report.py,其已内联全部 CSS/JS(即references/html-template.md的同一套样式),运行时不依赖任何外部文件读取,直接根据输入 JSON 产出 HTML+MD 日报。这是最可控、可复现的生成路径。 - 规范生成(人工/对话式):在对话中生成日报时,读取本包内
references/html-template.md的 CSS/JS/HTML 骨架作为结构基础,仅替换动态数据,保持组件类名与布局一致。
无论哪种方式,模板内容均来自本包自带资源,来源清晰、可审计。
依赖技能/工具
| 技能/工具 | 用途 | 场景 |
|-----------|------|------|
| WebSearch | 网络搜索(公开信息) | Step 2(用户勾选的 ①②③④⑤⑥⑦ 项) |
| westock-mcp | 腾讯自选股行情 | Step 1.5 之 ⑧(用户勾选且连接器可用时) |
| akshare-finance | AKShare行情数据 | Step 1.5 之 ⑧(用户勾选且连接器可用时) |
| tushare-finance | 金融数据补充 | Step 1.5 之 ⑧(备选,用户勾选时) |
| cninfo-filing-scraper | 巨潮公告检索 | Step 2 之 ①(如有,用户勾选时) |
| scripts/generate_report.py | 生成 HTML+MD 日报并更新汇总表(含自动创建/更新汇总表) | Step 6/7/8 |
| scripts/path_config.py | 双目标同步配置管理(本地+云端,强制确认记忆,查看/设置/关闭/重置) | Step 1.7 |
| scripts/backfill_summary.py | 历史日报补录汇总表(含自动创建 md、每日 0 缺失校验) | Step 8.5 |
| scripts/sync_tencent_docs.py | 本地日报目录 → 腾讯文档文件夹 幂等同步(去重/导入/归位,结果落盘) | Step 11.5 |
特殊场景处理
休市日(周六/周日/法定节假日)
- 公告仍需查询(上市公司可能在休市日发布公告)
- 行情数据使用最近交易日数据
- C类事项可能较少或为零
多日补制
- Web搜索附加具体日期
- 按信息实际发布日期归入对应日期日报
- 汇总表每个日期独立一行
A类为空
- 使用
empty-state组件:<div class="empty-state"><div class="icon">✅</div><div class="text">今日无重大事项</div></div> - 编号从1起,B类承接
行情数据缺失
- 使用最近可获得的数据
- 在标签中标注数据日期(如"收盘价(7月31日)")
文件输出规范
- 所有文件使用 UTF-8 编码
- HTML文件名:
{company_name}日报_YYYY-MM-DD.html - MD文件名:
{company_name}日报_YYYY-MM-DD.md - 金额单位统一使用"元",不进行万元/亿元转换
- 涨跌颜色遵循中国A股惯例:涨→红(#C62828)、跌→绿(#2E7D32)
- 货币符号使用 ¥
- 日期格式:
YYYY年M月D日 · 星期X
最终检查清单(生成前必检)
□ CSS变量是否与附录模板完全一致
□ Hero背景是否为 linear-gradient(135deg, var(--primary) 0%, var(--primary-dark) 100%)
□ Hero badge文案是否为"内部审计 · 每日信息监控"
□ 导航栏是否使用 nav-bar/nav-inner/nav-link 结构,7个锚点是否完整
□ Section header是否使用 section-icon + section-title 组合
□ 卡片是否使用 card-top/card-seq/card-body/card-summary/card-actions 结构
□ chip类名是否为 chip-source/chip-time/chip-level.a/b/c
□ 审计要点是否使用 audit-list/audit-item(high/medium/low)/audit-priority/audit-text
□ 风险卡片是否使用 risk-card(h4+p) 结构
□ 空状态是否使用 empty-state(icon ✅ + text)
□ Footer是否包含总条数和数据源
□ 全局编号是否贯穿连续
□ 时间格式是否为人话格式
□ JS滚动动画和导航交互是否与附录模板一致
□ 文件是否UTF-8编码保存
如以上任何一项不符合,必须在交付前修正后方可交付。
版本修订说明
v1.5.0(2026-08-28)
- 日报保存路径与云端同步规则优化:
- 本地路径首次确认后默认沿用:仅首次执行时与用户确认本地保存路径,写入
path_config.json(confirmed_targets含local),后续执行默认沿用、不再询问; - 云端同步每次执行后单独询问:不再将
tencent_docs视为永久确认目标;每次本地日报保存完成后通过AskUserQuestion单独询问「本次是否需要同步腾讯文档」,用户选择"是"才执行 Step 11.5,选择"否"则仅本地交付; - 云端根目录文件夹定位/新建:选择云端同步时,先按规则在云端根目录定位「{company}({code})每日信息汇总」文件夹(
manage.folder_list标题命中复用;未命中时因连接器暂未开放自动建文件夹接口,提示手动创建或复用历史tencent_docs_dir_id),更新tencent_docs_dir_id后执行同步。
- 本地路径首次确认后默认沿用:仅首次执行时与用户确认本地保存路径,写入
v1.4.0(2026-08-25)
- 腾讯文档同步 file_id 解析缺陷正式修复(随包升级,统一版本号 V1.4):
scripts/sync_tencent_docs.py在 V1.1 已含修复逻辑,本次将脚本内部版本号由 V1.1 统一升级为 V1.4 并随包分发。根因:import_progress首轮必报瞬态11607错误,而旧代码if perr: break在第一次轮询时即中断退出,导致永远取不到file_id;async_import仅返回task_id、不含file_id字段,原兜底取值res2.get("file_id")为死代码,新文件导入成功却滞留云端根目录。修复后逻辑:轮询遇错重试不中断(第 2 轮即正常返回file_id)+ 深度字段提取(file_id/fileId/doc_id/id)+ 标题检索兜底,文档导入成功后可靠取回file_id并自动move_file归位目标文件夹。 - 实测验证通过(2026-08-25):执行 8/25 日报同步时,
sync_tencent_docs.py --refresh-summary返回「导入 2(8/25 新日报 + 刷新汇总表)/ 跳过 94 / 失败 0」,8/25 日报正确返回云端 URL(docs.qq.com/markdown/DUGNFVnZocG9Fa1d6)并归位目标文件夹,首次实现新文件同步零人工归位,原"取不到 file_id 滞留根目录需人工归位"缺陷已彻底消除。日志中的11607现为"文件已在目标文件夹内、无需再移动"的良性提示。 - 统一脚本版本号:
generate_report.py/path_config.py已为 V1.4;本次将sync_tencent_docs.py(V1.1→V1.4)、backfill_summary.py(V1.3→V1.4)对齐至 V1.4,包内脚本版本一致,便于跨设备识别。 - 自动化记忆标注:
~/.workbuddy/automations/{code}/memory.md中"sync_tencent_docs.py 取 file_id 失败"已知问题已改为"已解决(V1.4 实测)",恢复脚本(search_file+move_file人工归位)不再需要。
v1.3.0(2026-08-23)
- 双目标同步 + 强制确认记忆(核心改造):
path_config.json由单一save_mode升级为 「本地 + 腾讯文档云端」双目标模型(sync_local/local_dir/sync_tencent_docs/tencent_docs_dir_id/confirmed_targets)。执行时强制确认本地与线上同步需求; 若历史记忆confirmed_targets已同时含local与tencent_docs且路径有效,则直接执行; 否则先与用户确认再执行(Step 1.7)。path_config.py同步升级:新增--set-tencent --dir-id/--confirm-local/--confirm-tencent/--disable-local/--disable-tencent,旧--set-local/--set-tencent兼容。 - 新增
sync_tencent_docs.py:本地日报目录 → 腾讯文档文件夹的幂等同步脚本。 按精确标题(去扩展名)检索云端、已存在则跳过(best-effort 归位)、不存在则导入并移入目标文件夹; 结果落盘sync_result.json;支持--dry-run/--force/--td-skill-dir(适配多设备路径)。 Step 11.5 改为调用本脚本落地云端,并固化强制确认闸门与失败降级。 - 汇总表强制完善:Step 8 明确「每次执行(单日/周期)必须完善《XX日报信息等级汇总》单文件, 有则更新、无则创建」,作为后续复盘唯一索引。
- 新增「按指定时间周期建立/完善日志工作流」:落实日志按天保存、严禁跨期/多天合并; 逐日检索 → 按天判定(已存在则比对增量更新、不存在则新建)→ 汇总表完善 → 云端同步 → 校验 0 缺失。
generate_report.py路径逻辑适配双目标:local_dir始终用于本地落盘,纯云端模式回退临时目录。
v1.2.0(2026-08-21)
- 新增「保存路径用户交互配置」:首次运行强制确认保存路径(本地路径 / 腾讯文档路径 / 自定义),
写入
~/.workbuddy/automations/{code}/path_config.json,后续默认沿用;新增scripts/path_config.py用于查看/设置/重置配置(Step 1.7)。 - 新增「历史日报补录」:
scripts/backfill_summary.py自动将「有日报文件但汇总表未记录」的 日期补录至《日报信息等级汇总.md》主表——按日期升序插入、自动创建缺失的 md(不生成 HTML)、 兼容新旧两代日报格式(Step 8.5)。 - 脚本层配置化默认保存:
generate_report.py/backfill_summary.py未传--output-dir时 自动从path_config.json读取保存路径(--code参数),实现"配置一次、后续默认沿用"。 - 腾讯文档路径端到端流程:Step 1.7 补充腾讯文档模式完整执行路径(连接器建文件夹/取 dir_id → 本地临时生成 → Step 11.5 连接器上传 → 链接入记忆);新增 Step 11.5「腾讯文档上传日报」 (含上传失败降级本地交付策略)。
- 汇总表结构统一:主表 = 全部日报日期(升序)+ 无日报占位行(待更新);保留历史备注与 重要融资/已兑付两张融资表;清理历史遗留的重复行、游离表与旧版章节残留。
v1.1.1(2026-08-21)
- 修复汇总表插入定位逻辑(update_summary):v1.1.0 首次修复后,当主汇总表内存在历史遗留空行时,新行仍可能被插到中断处(如 8/03 之后而非最新日期之后)。v1.2.1 将数据区扫描升级为「
|行计为数据行、空行跳过、遇非表内容(>备注/#标题等)视为表结束」,确保新行始终落在第一个主汇总表最后一个数据行之后;已存在的日期行则原地替换。 - 实测验证:2026-08-21 执行 8/21 日报时,8/21 行正确插入主表第 80 行(紧随 8/20),全文件仅出现一次,无需手工校正。
- 顺带清理:脚本执行前可先清除汇总表「表内空行」(空行前后均为
|数据行)与重复误插行,保持主表连续。
v1.1.0(2026-08-20)
- 修复汇总表插入定位 bug(update_summary):原实现从文件末尾反向找最后一个
|行,当汇总文件含多张表/备注结构时,会把新日期行误插到末尾的次要表格或备注区,导致顶部主表缺行。v1.1.0 改为定位第一个含---分隔行的 Markdown 表格(即顶部主汇总表),在数据区末尾插入。
v1.0.0(首次封装)
- 修复脚本日期显示 Bug:
scripts/generate_report.py原 HTML 模板中日期渲染逻辑存在缺陷,会输出乱码日期(如"2026日08年18")。已修正为按YYYY年M月D日格式输出正确日期(如"2026年8月18日")。 - 新增「保存路径确认」机制(Step 1.6):在执行任何写盘操作(创建目录、生成 HTML/MD、追加汇总表)之前,强制向用户展示拟保存的 HTML/MD 文件落点并请求确认或修改,杜绝静默写盘;未获确认不得创建目录或写文件。
- 脚本跨平台修复:修正
strftime中仅 Linux/macOS 支持的非跨平台格式(%-m/%-d),确保脚本在 Windows 环境下正常运行。
微信扫一扫