{"id":51284253,"url":"https://github.com/coowinit/tech-stock-ai-research-system","last_synced_at":"2026-06-30T04:00:36.565Z","repository":{"id":367041968,"uuid":"1278976235","full_name":"coowinit/tech-stock-ai-research-system","owner":"coowinit","description":"面向科技制造方向的本地化股票研究系统，支持 AI 候选发现、正式公告核验、候选池管理、财务数据筛选、PDF 字段校验及 JSON 备份恢复。","archived":false,"fork":false,"pushed_at":"2026-06-24T10:07:53.000Z","size":4021,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-24T11:14:08.087Z","etag":null,"topics":["ai-workflow","cninfo","data-management","html-css-javascript","investment-research","javascript","static-site","stock-research","stock-screening"],"latest_commit_sha":null,"homepage":"https://coowinit.github.io/tech-stock-ai-research-system/","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/coowinit.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-06-24T09:01:46.000Z","updated_at":"2026-06-24T10:07:57.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/coowinit/tech-stock-ai-research-system","commit_stats":null,"previous_names":["coowinit/tech-stock-ai-research-system"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/coowinit/tech-stock-ai-research-system","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/coowinit%2Ftech-stock-ai-research-system","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/coowinit%2Ftech-stock-ai-research-system/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/coowinit%2Ftech-stock-ai-research-system/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/coowinit%2Ftech-stock-ai-research-system/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/coowinit","download_url":"https://codeload.github.com/coowinit/tech-stock-ai-research-system/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/coowinit%2Ftech-stock-ai-research-system/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34951598,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-30T02:00:05.919Z","response_time":92,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai-workflow","cninfo","data-management","html-css-javascript","investment-research","javascript","static-site","stock-research","stock-screening"],"created_at":"2026-06-30T04:00:32.948Z","updated_at":"2026-06-30T04:00:36.555Z","avatar_url":"https://github.com/coowinit.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 科技制造高增长股票 AI 研究系统\n\n一个面向科技制造方向的本地化股票研究工具。项目以“正式公告数据”为核心，结合 AI 辅助候选发现、正式公告核验、候选池管理、数据备份和 PDF 字段级校验，帮助用户持续维护一份可追溯、可筛选、可导出的高增长股票数据库。\n\n\u003e 免责声明：本项目仅用于财务数据整理、行业研究和个人学习，不构成任何投资建议。股票筛选结果不代表买卖建议，使用者应自行核验公告原文并独立判断风险。\n\n## 版本概览\n\n当前版本：**v1.5.0（物理AI全产业链研究版）**\n\n本版本以最初上传的80家公司数据库为基础，累计新增19家物理AI核心公司，将正式数据库扩展至99家公司，并完成20只物理AI核心候选股的全部核验入库。系统现已从以AI算力、光模块、PCB、存储和液冷为主的科技制造数据库，扩展为覆盖“材料—芯片—感知—控制—执行—本体—应用”的综合AI产业研究系统。\n\n| 对比项目 | 初始版本 | v1.5.0 | 累计变化 |\n| --- | ---: | ---: | ---: |\n| 正式数据库公司 | 80家 | 99家 | +19家 |\n| 财务报告记录 | 160条 | 198条 | +38条 |\n| 物理AI核心候选池 | 未建立 | 20家 | 20/20完成核验 |\n| 物理AI关联公司 | 少量分散标签 | 25家 | 形成完整产业链 |\n| 覆盖报告期 | 2025A、2026Q1 | 2025A、2026Q1 | 保持一致 |\n\n### v1.5.0 的核心升级\n\n- 建立半导体材料、晶圆制造、AI计算芯片、机器视觉、力觉传感、工业自动化、精密传动、机器人执行器、机器人本体、智能驾驶、无人系统和具身智能模型等细分方向；\n- 完成三批物理AI公司核验，并保留每家公司2025年及2026年一季度的真实财务状态；\n- 明确区分产业龙头、高增长公司、扭亏公司、增收不增利公司和仍处于亏损阶段的观察型公司；\n- 保留默认排除科创板设置，数据库完整性提高，但日常筛选习惯不变；\n- 新增候选池JSON、产业链研究文档、分批核验记录及版本更新日志。\n\n## 目录\n\n- [版本概览](#版本概览)\n- [界面预览](#界面预览)\n- [系统特色](#系统特色)\n- [当前数据状态](#当前数据状态)\n- [物理AI核心股票池](#物理ai核心股票池)\n- [项目结构](#项目结构)\n- [快速开始](#快速开始)\n- [操作流程](#操作流程)\n- [使用说明和注意事项](#使用说明和注意事项)\n- [程序维护](#程序维护)\n- [数据结构说明](#数据结构说明)\n- [常见问题](#常见问题)\n- [后续扩展方向](#后续扩展方向)\n\n## 界面预览\n\n### 核心数据看板\n\n`index.html` 用于查看正式数据库中的公司、报告期、增长指标、来源信息和 PDF 字段级核验状态。\n\n![核心数据看板](docs/preview-dashboard.png)\n\n### 公司详情与历史报告\n\n看板支持展开公司详情，查看历史报告、公告来源、核验状态、字段级校验结果和备注信息。\n\n![核心数据看板详情](docs/preview-dashboard-detail.png)\n\n### AI 筛选中心\n\n`screening.html` 是数据入口和维护中心，包含“候选发现 / 正式核验 / 候选池与数据管理”三段工作流。\n\n![AI 筛选中心](docs/preview-screening.png)\n\n### 候选池与数据管理\n\n`screening.html` 的“候选池与数据管理”页面用于管理候选池、正式数据库、本机快照、公告来源清单以及正式数据删除操作。\n\n![候选池与数据管理](docs/preview-screening-data-management.png)\n\n## 系统特色\n\n### 1. 纯前端、本地运行\n\n项目由 HTML、CSS 和 JavaScript 构成，无需后端服务、数据库服务器或登录账号。正式数据库、候选池和本机快照默认保存在浏览器 `localStorage` 中。\n\n适合场景：\n\n- 个人研究和本地维护；\n- 离线查看已保存数据；\n- 把正式数据库导出为 JSON 后跨设备备份；\n- 结合 AI 工具进行候选发现和公告核验。\n\n### 2. 两步 AI 协作流程\n\n系统不直接相信 AI 给出的结论，而是把 AI 使用拆成两步：\n\n1. **候选发现**：AI 可以基于公开线索、新闻、公告摘要等发现可能符合条件的公司，但这些公司只会进入候选池。\n2. **正式核验**：AI 必须回到巨潮资讯、交易所公告或其他正式来源，逐项填写正式公告字段。只有通过页面校验的 `verifiedStocks` 才能写入正式数据库。\n\n这种设计可以降低“AI 直接编造数据入库”的风险。\n\n### 3. 正式数据库准入门\n\n正式数据写入前会经过统一校验，包括但不限于：\n\n- 股票代码格式必须合法，例如 `000001.SZ`、`600000.SH`；\n- 报告期必须与当前核验任务一致；\n- `verificationStatus` 必须为 `verified`；\n- 营业收入同比、归母净利润、归母净利润同比等关键字段必须可校验；\n- 页面会重新计算财务筛选条件，不直接相信 AI 的筛选结论；\n- 来源域名必须来自正式公告白名单或明确人工确认的来源；\n- 同一批次不能出现重复股票代码；\n- 候选公司必须属于本次提交名单，避免 AI 夹带额外公司。\n\n### 4. 正式来源白名单\n\n系统会识别公告链接来源，并阻止财经媒体、搜索页、占位链接或未知域名直接作为正式核验依据。\n\n当前自动认可的正式来源包括：\n\n- 巨潮资讯：`cninfo.com.cn`\n- 上海证券交易所：`sse.com.cn`\n- 深圳证券交易所：`szse.cn`\n- 北京证券交易所：`bse.cn`\n\n### 5. 候选池与正式数据库隔离\n\n候选池保存在独立的工作流数据库中，不会污染正式数据库。候选可以处于：\n\n- 待核验；\n- 核验中；\n- 已入库；\n- 已淘汰；\n- 无法核验。\n\n正式数据库只接收通过正式核验的数据。\n\n### 6. 集中数据管理\n\n所有正式数据库维护操作集中在 `screening.html` 的“候选池与数据管理”标签中，包括：\n\n- 正式数据库导出；\n- 正式数据库导入；\n- 同步最新版内置数据；\n- 恢复初始数据；\n- 候选池工作流导入 / 导出；\n- 本机快照创建、恢复、删除；\n- 正式数据维护；\n- 删除指定报告期；\n- 删除整家公司；\n- 查看待补公告来源清单；\n- 查看来源健康度概览。\n\n`index.html` 只负责查看、筛选、分析和打印，不再承担导入、导出、同步或重置操作。\n\n### 7. 本机快照和删除前保护\n\n重要操作前后会自动创建本机回退快照，最多保留最近 20 个。支持恢复和删除快照。\n\n会自动创建快照的场景包括：\n\n- 导入正式数据库；\n- 同步内置数据；\n- 正式核验入库；\n- 恢复初始数据；\n- 恢复本机快照；\n- 删除报告期；\n- 删除整家公司。\n\n注意：本机快照只保存在当前浏览器中，不能代替正式 JSON 文件备份。\n\n### 8. PDF 字段级核验\n\n项目提供 `tools/audit-pdf-fields.js`，用于下载并解析正式公告 PDF，抽取营业收入、归母净利润、同比增速等字段，和数据库字段进行比对。\n\n字段级核验结果会写入：\n\n- `fieldVerificationStatus`\n- `fieldVerificationNote`\n- `fieldVerifiedAt`\n- `fieldVerification`\n\n汇总结果保存在：\n\n```text\ndata/pdf-field-audit-result.json\n```\n\n当前内置数据库已完成 PDF 字段级核验标记。\n\n\n### 9. 物理AI龙头产业链\n\n`v1.3.0—v1.5.0` 分三批建立物理AI研究主线，将半导体材料与硅片、晶圆制造、AI芯片、机器视觉、力觉传感、工业自动化、精密传动、机器人本体、智能驾驶、无人系统和具身智能模型串联到同一正式数据库。\n\n完整链条如下：\n\n```text\n半导体材料与硅片\n→ 晶圆制造\n→ AI计算与控制芯片\n→ 机器视觉与力觉感知\n→ 工业控制与伺服系统\n→ 精密减速器、丝杠与机器人执行器\n→ 工业机器人及人形机器人本体\n→ 智能驾驶、无人机与智能制造应用\n```\n\n三批累计新增19家公司，原数据库中的兆易创新直接纳入20只核心候选池；同时为全志科技、瑞芯微、亿纬锂能、华工科技、水晶光电等公司补充物理AI关联标签。当前20只核心候选股已 **20/20 全部核验入库**，正式数据库共有 **25家物理AI关联公司**。\n\n系统不会因为公司具有“物理AI”“机器人”或“龙头”概念就自动认定为高增长，而是继续依据正式报告中的营业收入、归母净利润和同比数据进行判断。产业地位与财务筛选结果会分别展示。\n\n在 `index.html` 搜索“物理AI”即可查看整条产业链。系统仍默认排除科创板，因此新增科创板公司不会自动进入日常筛选结果。完整资料见：\n\n```text\ndata/physical-ai-candidate-pool.json\ndocs/PHYSICAL-AI-RESEARCH.md\ndocs/PHYSICAL-AI-BATCH-2-AUDIT.md\ndocs/PHYSICAL-AI-BATCH-3-AUDIT.md\n```\n\n## 当前数据状态\n\n当前内置正式数据库状态：\n\n| 项目 | 状态 |\n| --- | --- |\n| 数据结构版本 | `2.1.0` |\n| 内置数据版本 | `2026-06-30-physical-ai-core-v3` |\n| 公司数量 | 99 家 |\n| 报告记录 | 198 条 |\n| 报告期 | `2025A`、`2026Q1` |\n| 正式来源记录 | 198 条，均通过公告来源门槛 |\n| PDF字段状态 | matched 187 条、partial 9 条、mismatch 2 条（历史状态原样保留） |\n| 默认存储位置 | 浏览器 `localStorage` |\n\n默认筛选条件：\n\n- 营业收入同比严格大于 8%；\n- 归母净利润金额严格大于 0；\n- 归母净利润同比严格大于 0，或公告明确为“扭亏为盈”；\n- 默认排除科创板 `688` 开头公司；\n- 默认排除 ST / `*ST`；\n- 默认排除北交所公司。\n\n## 物理AI核心股票池\n\n20只核心候选股按照产业链分为以下环节：\n\n| 产业环节 | 公司 | 股票代码 | 核心定位 |\n| --- | --- | --- | --- |\n| 半导体硅片 | 立昂微 | 605358.SH | 重掺硅片、功率器件用硅片 |\n| 半导体材料 | 安集科技 | 688019.SH | CMP抛光液及湿电子化学品 |\n| 半导体材料 | 江丰电子 | 300666.SZ | 超高纯金属溅射靶材 |\n| 晶圆制造 | 中芯国际 | 688981.SH | 中国大陆晶圆代工核心平台 |\n| AI计算芯片 | 海光信息 | 688041.SH | 国产CPU、DCU |\n| AI计算芯片 | 寒武纪 | 688256.SH | 云端及边缘端AI芯片 |\n| 控制与存储芯片 | 兆易创新 | 603986.SH | MCU、存储及模拟芯片 |\n| 机器视觉芯片 | 豪威集团 | 603501.SH | CMOS图像传感器 |\n| 3D视觉感知 | 奥比中光 | 688322.SH | 3D视觉、深度相机 |\n| 力觉传感器 | 柯力传感 | 603662.SH | 六维力及关节扭矩传感器 |\n| 控制与伺服 | 汇川技术 | 300124.SZ | 控制器、伺服、电机及执行器 |\n| 精密减速器 | 绿的谐波 | 688017.SH | 谐波减速器及精密传动 |\n| 机器人执行器 | 三花智控 | 002050.SZ | 仿生机器人机电执行器 |\n| 机器人执行器 | 拓普集团 | 601689.SH | 旋转及直线执行器 |\n| 丝杠与轴承 | 五洲新春 | 603667.SH | 行星滚柱丝杠、机器人轴承 |\n| 工业机器人本体 | 埃斯顿 | 002747.SZ | 工业机器人、运动控制 |\n| 机器人平台 | 机器人 | 300024.SZ | 新松机器人及系统集成 |\n| 智能驾驶 | 德赛西威 | 002920.SZ | 智驾域控制器及感知系统 |\n| 无人系统 | 中无人机 | 688297.SH | 大型无人机系统平台 |\n| 具身智能模型 | 科大讯飞 | 002230.SZ | 多模态模型及具身智能软件 |\n\n### 阅读物理AI数据时的注意事项\n\n- “产业龙头”不等于“当前财务高增长”；\n- “送样”“定点”“小批量”和“正式规模收入”应分别判断；\n- 科创板公司已完整保留在数据库中，但默认筛选仍排除 `688` 开头股票；\n- 机器人业务占比较低的公司，应重点查看相关业务收入、客户验证和量产进度；\n- 财务筛选基于正式公告数据，不依据市场概念或短期股价表现。\n\n## 项目结构\n\n```text\ntech-stock-ai-research-system-v1.5.0/\n├─ index.html                         # 核心数据看板\n├─ screening.html                     # AI 筛选中心与数据管理入口\n├─ start-server.bat                   # Windows 本地静态服务器启动脚本\n├─ run-tests.bat                      # Windows 测试脚本\n├─ package.json                       # Node 依赖与测试命令\n├─ README.md                          # 项目说明文档\n├─ CHANGELOG.md                       # 更新日志\n├─ SHA256SUMS.txt                     # 文件校验清单\n├─ assets/\n│  ├─ css/\n│  │  ├─ common.css                   # 全局通用样式\n│  │  ├─ dashboard.css                # 核心看板样式\n│  │  └─ screening.css                # 筛选中心样式\n│  └─ js/\n│     ├─ default-data.js              # 内置数据库\n│     ├─ database.js                  # 正式数据库读写、校验、迁移、备份\n│     ├─ dashboard.js                 # 核心看板逻辑\n│     ├─ research-workflow.js         # AI 工作流、候选池和 JSON 解析\n│     └─ screening.js                 # 筛选中心页面逻辑\n├─ data/\n│  ├─ stocks.json                     # 正式数据库 JSON 文件\n│  ├─ physical-ai-candidate-pool.json # 物理AI 20股候选池与核验进度\n│  ├─ ai-response-example.json        # 旧版 AI 响应示例\n│  ├─ candidate-discovery-example.json\n│  ├─ official-verification-example.json\n│  ├─ cninfo-source-verification-result.json\n│  ├─ pdf-field-audit-result.json\n│  └─ 2025A-net-profit-supplement-audit.csv\n├─ docs/\n│  ├─ DATA-SCHEMA.md                  # 数据结构说明\n│  ├─ PHASE1-TECHNICAL-NOTES.md       # 工作流技术说明\n│  ├─ 2025A-NET-PROFIT-SUPPLEMENT.md\n│  ├─ PHYSICAL-AI-RESEARCH.md         # 物理AI完整产业链研究\n│  ├─ PHYSICAL-AI-BATCH-2-AUDIT.md    # 第二批公司核验记录\n│  ├─ PHYSICAL-AI-BATCH-3-AUDIT.md    # 第三批科创板核验记录\n│  └─ preview-*.png                   # README 预览图\n├─ tools/\n│  ├─ audit-pdf-fields.js             # PDF 字段级核验工具\n│  └─ fill-cninfo-sources.js          # 来源补齐辅助工具\n└─ tests/\n   └─ stage1-tests.js                 # 数据层与工作流测试\n```\n\n## 快速开始\n\n### 方式一：双击启动\n\nWindows 用户可以直接双击：\n\n```text\nstart-server.bat\n```\n\n脚本会在当前目录启动静态服务器，并打开：\n\n```text\nhttp://127.0.0.1:8000/\n```\n\n推荐使用 `127.0.0.1:8000`，而不是直接双击 HTML 文件。这样两个页面可以稳定共享同一个站点下的 `localStorage`。\n\n### 方式二：手动启动\n\n如果已安装 Python，也可以在项目目录运行：\n\n```bash\npython -m http.server 8000 --bind 127.0.0.1\n```\n\n然后打开：\n\n```text\nhttp://127.0.0.1:8000/\n```\n\n### 方式三：直接打开 HTML\n\n可以直接打开 `index.html` 或 `screening.html`，但不推荐长期使用。不同浏览器对 `file://` 页面的本地存储隔离策略不同，可能导致两个页面无法稳定共享数据。\n\n## 操作流程\n\n### 1. 查看正式数据库\n\n打开：\n\n```text\nhttp://127.0.0.1:8000/index.html\n```\n\n可以查看：\n\n- 当前增长池；\n- 历史观察池；\n- 待更新公司；\n- 公司详情；\n- 历史报告；\n- 来源链接；\n- 核验状态；\n- PDF 字段级核验状态。\n\n### 2. 生成候选发现提示词\n\n打开：\n\n```text\nhttp://127.0.0.1:8000/screening.html\n```\n\n进入“候选发现”标签：\n\n1. 选择报告期；\n2. 设置营收同比阈值、排除规则和研究范围；\n3. 生成候选发现提示词；\n4. 复制提示词给支持联网检索的 AI；\n5. 要求 AI 返回候选 JSON。\n\n候选发现阶段只负责发现线索，不写入正式数据库。\n\n### 3. 解析候选 JSON\n\n把 AI 返回的候选 JSON 粘贴到页面中，点击解析。页面会：\n\n- 清洗 Markdown 代码块；\n- 提取 JSON 对象或数组；\n- 校验候选代码格式；\n- 校验报告期；\n- 校验候选字段；\n- 将有效候选写入候选池。\n\n### 4. 生成正式核验批次\n\n进入“正式核验”标签：\n\n1. 选择报告期；\n2. 设置每批核验数量；\n3. 刷新待核验批次；\n4. 将候选标记为核验中；\n5. 生成正式核验提示词；\n6. 复制给 AI，让 AI 回到正式公告逐家公司核验。\n\n### 5. 合并正式核验结果\n\nAI 应返回以下结构：\n\n```json\n{\n  \"periodCode\": \"2026Q1\",\n  \"verifiedStocks\": [],\n  \"rejectedStocks\": [],\n  \"unverifiedStocks\": []\n}\n```\n\n页面会分别处理：\n\n- `verifiedStocks`：通过正式来源和页面规则后写入正式数据库；\n- `rejectedStocks`：标记为已淘汰；\n- `unverifiedStocks`：标记为无法核验。\n\n即使 AI 写了 `verified`，页面仍会重新检查报告期、股票代码、来源域名、财务字段和提交名单完整性。\n\n### 6. 管理候选池和正式数据库\n\n进入“候选池与数据管理”标签，可以完成：\n\n- 候选池状态查看；\n- 候选池工作流导入 / 导出；\n- 待补公告来源清单查看；\n- 来源健康度概览；\n- 正式数据库导出 / 导入；\n- 同步最新版内置数据；\n- 恢复初始数据；\n- 本机快照管理；\n- 正式数据维护。\n\n### 7. 正式数据维护\n\n“正式数据维护”区域支持：\n\n- 搜索公司、代码或板块；\n- 按报告期筛选；\n- 仅显示待补 / 异常来源；\n- 删除指定公司某一个报告期；\n- 删除整家公司；\n- 自动创建删除前快照；\n- 统计本次维护删除了多少家公司和报告；\n- 查看最近删除前快照。\n\n删除操作会二次确认，但删除后仍建议及时导出正式数据库 JSON。\n\n## 使用说明和注意事项\n\n### 本地存储说明\n\n系统主要使用以下 `localStorage` 键：\n\n```text\ntech-stock-research-database-v2\ntech-stock-research-workflow-v1\ntech-stock-research-database-backups-v1\n```\n\n含义：\n\n- `tech-stock-research-database-v2`：正式数据库；\n- `tech-stock-research-workflow-v1`：候选池、发现批次、核验批次；\n- `tech-stock-research-database-backups-v1`：本机回退快照。\n\n清除浏览器站点数据会删除这些内容。\n\n### 备份、命名和恢复\n\n系统里有两类“备份”，用途不同：\n\n| 类型 | 位置 | 用途 | 是否适合长期保存 |\n| --- | --- | --- | --- |\n| 正式数据库 JSON 备份 | 下载到电脑文件夹 | 跨浏览器、跨电脑、长期归档、重新导入 | 适合 |\n| 本机快照 | 当前浏览器 `localStorage` | 短期误操作回退 | 不适合 |\n\n#### 导出正式数据库备份\n\n正式数据库备份是最重要的备份文件。建议每次完成正式核验、删除数据、同步内置数据或准备上传 GitHub 前都导出一份。\n\n操作步骤：\n\n1. 启动项目并打开：\n\n   ```text\n   http://127.0.0.1:8000/screening.html\n   ```\n\n2. 点击顶部标签：\n\n   ```text\n   候选池与数据管理\n   ```\n\n3. 找到：\n\n   ```text\n   正式数据库管理\n   ```\n\n4. 点击按钮：\n\n   ```text\n   导出正式数据库\n   ```\n\n5. 浏览器会下载一个 `.json` 文件，这个文件就是正式数据库备份。\n\n#### 备份文件放在哪里\n\n建议在项目目录外单独建立一个备份文件夹，不要只放在浏览器默认“下载”目录里。\n\n推荐位置示例：\n\n```text\nD:\\StockResearchBackups\\\n```\n\n或者：\n\n```text\nC:\\Users\\你的用户名\\Documents\\StockResearchBackups\\\n```\n\n如果想和项目放在一起，也可以建立：\n\n```text\ntech-stock-ai-research-system\\backups\\\n```\n\n但如果准备上传到 GitHub，请注意：`backups/` 里的文件可能包含你自己的研究数据。公开仓库上传前应确认是否适合公开，或者把 `backups/` 加入 `.gitignore`。\n\n#### 备份文件如何命名\n\n推荐使用“日期时间 + 数据类型 + 简短说明”的命名方式，方便按时间排序和回溯。\n\n推荐格式：\n\n```text\nYYYYMMDD-HHMM-tech-stock-db-说明.json\n```\n\n示例：\n\n```text\n20260624-1030-tech-stock-db-before-delete.json\n20260624-1105-tech-stock-db-after-verified-merge.json\n20260624-1130-tech-stock-db-before-github-release.json\n20260624-1200-tech-stock-db-stable.json\n```\n\n命名建议：\n\n- `before-delete`：删除公司或报告期前；\n- `after-delete`：删除公司或报告期后；\n- `before-sync`：同步内置数据前；\n- `after-sync`：同步内置数据后；\n- `after-verified-merge`：正式核验入库后；\n- `before-github-release`：上传 GitHub 或发布版本前；\n- `stable`：确认可长期保存的稳定版本。\n\n#### 如何导入备份文件\n\n当需要恢复某个正式数据库 JSON 备份时：\n\n1. 打开：\n\n   ```text\n   http://127.0.0.1:8000/screening.html\n   ```\n\n2. 进入：\n\n   ```text\n   候选池与数据管理\n   ```\n\n3. 在“正式数据库管理”区域点击：\n\n   ```text\n   导入正式数据库\n   ```\n\n4. 选择之前导出的 `.json` 备份文件。\n\n5. 页面导入后会自动刷新正式数据库统计、来源健康度、待补来源清单和正式数据维护列表。\n\n6. 导入成功后，建议马上再点击一次：\n\n   ```text\n   导出正式数据库\n   ```\n\n   保存一份新的“导入后确认版”备份。\n\n#### 候选池工作流也需要单独备份\n\n正式数据库 JSON 只包含正式入库数据，不等于候选池工作流。\n\n如果你希望保留候选发现记录、核验批次和候选状态，还需要在同一页面中找到“候选池工作流”相关按钮，点击：\n\n```text\n导出候选池JSON\n```\n\n建议命名：\n\n```text\n20260624-1130-tech-stock-workflow-before-github-release.json\n```\n\n恢复候选池时，点击：\n\n```text\n导入候选池JSON\n```\n\n#### 本机快照怎么用\n\n本机快照位于“候选池与数据管理”的“本机快照”区域。它适合处理刚刚发生的误操作，例如：\n\n- 刚删除了错误的报告期；\n- 刚删除了整家公司；\n- 刚导入了错误文件；\n- 刚恢复了错误版本。\n\n可以点击对应快照的：\n\n```text\n恢复\n```\n\n把当前浏览器中的正式数据库恢复到该快照状态。\n\n注意：\n\n- 本机快照最多保留最近 20 个；\n- 本机快照只存在当前浏览器里；\n- 清除浏览器站点数据会删除本机快照；\n- 换电脑、换浏览器、换域名后，本机快照不会自动跟随；\n- 本机快照不能代替正式数据库 JSON 备份。\n\n### 关于 GitHub 上传\n\n建议上传：\n\n- `index.html`\n- `screening.html`\n- `assets/`\n- `data/`\n- `docs/`\n- `tools/`\n- `tests/`\n- `package.json`\n- `package-lock.json`\n- `README.md`\n- `CHANGELOG.md`\n- `start-server.bat`\n- `run-tests.bat`\n\n不建议上传：\n\n- `node_modules/`\n- `.cache/`\n- 浏览器本地生成的临时文件。\n\n当前 `.gitignore` 已忽略：\n\n```text\nnode_modules/\n.cache/\n```\n\n如果不希望上传本机快照目录，也可以把 `backups/` 加入 `.gitignore`。\n\n### 关于 AI 输出\n\nAI 返回内容必须是 JSON。页面可以清洗常见包装格式，但仍建议要求 AI：\n\n- 不要输出 Markdown 表格；\n- 不要输出自然语言解释；\n- 不要把财经媒体链接当作正式公告；\n- 不要把搜索结果页当作正式来源；\n- 不要把无法确认的数据填成 `verified`；\n- 遇到无法确认的公司放入 `unverifiedStocks`。\n\n### 关于财务单位\n\n正式数据库中金额统一为“亿元”，同比字段为纯数字百分比。例如：\n\n```json\n{\n  \"netProfit\": 2.36,\n  \"revenueGrowth\": 27.62\n}\n```\n\n不要写成：\n\n```json\n{\n  \"netProfit\": \"2.36亿元\",\n  \"revenueGrowth\": \"27.62%\"\n}\n```\n\n### 关于“扭亏为盈”\n\n如果公告显示归母净利润同比为“扭亏为盈”，可以使用：\n\n```json\n{\n  \"netProfitGrowth\": null,\n  \"netProfitGrowthText\": \"扭亏为盈\"\n}\n```\n\n正式核验更新允许 `null` 覆盖旧错误值，避免旧数据残留。\n\n## 程序维护\n\n### 安装依赖\n\n如果需要运行测试或 PDF 字段级核验工具，请先安装 Node 依赖：\n\n```bash\nnpm install\n```\n\n### 运行测试\n\n```bash\nnpm test\n```\n\n或双击：\n\n```text\nrun-tests.bat\n```\n\n测试覆盖内容包括：\n\n- 默认数据加载；\n- 旧数据库迁移；\n- JSON 清洗；\n- 候选发现解析；\n- 正式核验解析；\n- 正式来源白名单；\n- 媒体来源阻断；\n- 股票代码校验；\n- 财务条件重新计算；\n- 候选池去重；\n- 正式报告权威替换；\n- 导入、同步和备份相关逻辑。\n\n### PDF 字段级核验\n\n运行：\n\n```bash\nnode tools/audit-pdf-fields.js\n```\n\n该脚本会尝试下载正式公告 PDF 并解析字段。运行前请确认网络环境可以访问公告链接。\n\n输出结果：\n\n```text\ndata/pdf-field-audit-result.json\n```\n\n### 来源补齐辅助工具\n\n运行：\n\n```bash\nnode tools/fill-cninfo-sources.js\n```\n\n该脚本用于辅助补齐巨潮资讯来源信息。使用前建议先导出正式数据库作为备份。\n\n### 更新内置数据\n\n内置数据主要位于：\n\n```text\nassets/js/default-data.js\ndata/stocks.json\n```\n\n更新建议：\n\n1. 先在页面中导出当前正式数据库；\n2. 修改或生成新的 `data/stocks.json`；\n3. 同步更新 `assets/js/default-data.js`；\n4. 确认 `builtInDataVersion` 已变化；\n5. 运行 `npm test`；\n6. 打开页面验证数据能自动迁移；\n7. 更新 `CHANGELOG.md` 和 `README.md` 中的数据状态。\n\n### 更新 SHA256 校验清单\n\n项目包含 `SHA256SUMS.txt`，用于记录文件哈希。Windows PowerShell 可使用：\n\n```powershell\n$files = Get-ChildItem -Recurse -File |\n  Where-Object {\n    $_.FullName -notmatch '\\\\.git\\\\' -and\n    $_.FullName -notmatch '\\\\node_modules\\\\' -and\n    $_.Name -ne 'SHA256SUMS.txt'\n  } |\n  Sort-Object FullName\n\n$lines = foreach ($file in $files) {\n  $rel = Resolve-Path -Relative $file.FullName\n  $rel = $rel -replace '^\\.\\\\',''\n  $hash = (Get-FileHash -Algorithm SHA256 -LiteralPath $file.FullName).Hash.ToLowerInvariant()\n  \"$hash  $rel\"\n}\n\nSet-Content -LiteralPath SHA256SUMS.txt -Value $lines -Encoding ascii\n```\n\n### 编码注意事项\n\n项目文件包含中文，建议统一使用 UTF-8。编辑 README、HTML、JS 和 CSS 时，请确认编辑器不会把文件保存为 ANSI、GBK 或其他编码。\n\n## 数据结构说明\n\n详细结构请查看：\n\n```text\ndocs/DATA-SCHEMA.md\n```\n\n核心结构：\n\n```mermaid\nflowchart LR\n  A[\"候选发现 JSON\"] --\u003e B[\"候选池 workflow localStorage\"]\n  B --\u003e C[\"正式核验批次\"]\n  C --\u003e D[\"verified / rejected / unverified JSON\"]\n  D --\u003e E{\"页面准入校验\"}\n  E --\u003e|通过| F[\"正式数据库 database localStorage\"]\n  E --\u003e|拒绝| B\n  F --\u003e G[\"核心数据看板 index.html\"]\n  F --\u003e H[\"导出正式数据库 JSON\"]\n  F --\u003e I[\"本机快照\"]\n```\n\n正式报告主要字段：\n\n| 字段 | 说明 |\n| --- | --- |\n| `periodCode` | 报告期代码，例如 `2026Q1` |\n| `periodLabel` | 报告期中文名称 |\n| `revenue` | 营业收入，单位亿元 |\n| `revenueGrowth` | 营业收入同比，数字百分比 |\n| `netProfit` | 归母净利润，单位亿元 |\n| `netProfitGrowth` | 归母净利润同比，数字百分比 |\n| `netProfitGrowthText` | 特殊同比文本，例如“扭亏为盈” |\n| `sourceName` | 公告名称 |\n| `sourceUrl` | 公告链接 |\n| `sourceType` | 来源类型，例如 `cninfo` |\n| `sourceHost` | 来源域名 |\n| `announcementDate` | 公告日期 |\n| `verificationStatus` | `verified`、`pending` 或 `conflict` |\n\n## 常见问题\n\n### 1. 双击 `start-server.bat` 没反应怎么办？\n\n请确认电脑已安装 Python。脚本会依次尝试：\n\n- `python`\n- 用户目录下的 Python 安装路径；\n- `py`\n\n如果没有 Python，可以安装 Python 后重试，或临时直接打开 HTML 文件。\n\n### 2. 应该访问 `localhost:8000` 还是 `127.0.0.1:8000`？\n\n推荐使用：\n\n```text\nhttp://127.0.0.1:8000/\n```\n\n项目脚本默认也会打开这个地址。一般情况下 `localhost:8000` 也可以访问，但为了避免部分系统解析或浏览器存储隔离差异，建议统一使用 `127.0.0.1:8000`。\n\n### 3. 为什么刷新后数据还在？\n\n因为数据保存在浏览器 `localStorage` 中。刷新页面不会清空数据。\n\n### 4. 为什么换浏览器后数据不见了？\n\n`localStorage` 是按浏览器和站点隔离的。Chrome、Edge、Firefox 之间不会自动共享数据。换浏览器前请在“候选池与数据管理”中分别导出：\n\n- 正式数据库 JSON；\n- 候选池工作流 JSON。\n\n换到新浏览器后，再进入同一页面点击“导入正式数据库”和“导入候选池JSON”恢复。\n\n### 5. 为什么我导入数据后看起来还是旧数据？\n\n可能是浏览器旧数据优先于内置数据。可以在“候选池与数据管理”中使用：\n\n- 同步最新版内置数据；\n- 导入正式数据库；\n- 恢复初始数据。\n\n如果仍异常，可以先按“备份、命名和恢复”章节导出正式数据库备份，再清除站点数据后重新打开并重新导入备份文件。\n\n### 6. 为什么 AI 返回了 `verified`，页面仍然拒绝入库？\n\n页面会重新校验，不直接相信 AI。常见原因：\n\n- 股票代码格式错误；\n- 报告期不一致；\n- 来源不是正式公告域名；\n- 链接是媒体文章或搜索页；\n- 缺少公告日期；\n- 财务字段为空；\n- 不满足筛选条件；\n- 公司不在当前核验批次中；\n- 同一批次出现重复代码。\n\n### 7. 为什么“待补/异常来源”显示 0？\n\n说明当前正式数据库中所有报告记录都满足：\n\n- `verificationStatus` 为 `verified`；\n- 来源域名通过正式来源识别；\n- 已填写公告日期。\n\n### 8. 删除公司或报告期后能恢复吗？\n\n可以。删除前会自动创建本机快照，可以在“本机快照”区域恢复。但仍建议删除前后导出正式数据库 JSON，因为本机快照只保存在当前浏览器中。\n\n### 9. GitHub Pages 可以直接部署吗？\n\n可以作为静态页面部署，但需要注意：\n\n- GitHub Pages 上的 `localStorage` 和本地 `127.0.0.1` 不是同一份；\n- 上传到公开仓库的数据文件会公开；\n- 如果正式数据库包含个人维护信息，请先检查是否适合公开。\n\n### 10. 这个项目是否会自动联网抓取股票数据？\n\n页面本身不会自动联网抓取实时股票数据。PDF 字段级核验工具和来源补齐工具可能会访问公告链接，需要手动运行 Node 脚本。\n\n## 后续扩展方向\n\n以下方向适合作为后续版本继续演进：\n\n1. **数据维护操作日志**\n\n   记录每次导入、导出、同步、恢复、删除的时间、动作、影响公司和报告数量，方便追溯。\n\n2. **更细粒度的来源健康度筛选**\n\n   将“待补/异常来源”拆成来源缺失、未核验、冲突、非白名单、缺少公告日期等独立筛选。\n\n3. **PDF 核验结果可视化**\n\n   在页面中展示字段差异明细，例如公告原文值、数据库值、差异类型和建议处理方式。\n\n4. **批量维护工具**\n\n   支持批量删除某报告期、批量标记关注状态、批量导出筛选结果。\n\n5. **更多报告期支持**\n\n   扩展到 `2026H1`、`2026Q3`、`2026A` 以及后续年度报告。\n\n6. **自定义行业模板**\n\n   为半导体、AI服务器、物理AI、工业软件、机器人、智能驾驶和低空经济等方向建立不同的候选发现提示词模板。\n\n7. **可选后端同步**\n\n   增加本地文件或轻量数据库后端，实现多浏览器、多设备共享。\n\n8. **权限和多人协作**\n\n   如果未来团队使用，可以增加操作人、审核人、变更记录和审批状态。\n\n9. **自动化公告索引**\n\n   对接交易所公告检索或本地公告索引，减少人工查找公告链接的工作量。\n\n10. **风险提示维度**\n\n    增加商誉、现金流、毛利率、应收账款、存货、客户集中度等风险指标。\n\n## 版本说明\n\n当前项目版本：\n\n```text\nv1.5.0\n```\n\n版本名称：\n\n```text\n物理AI全产业链研究版\n```\n\n当前主要能力：\n\n- 99家公司、198条正式财务报告记录；\n- 2025年年度报告与2026年第一季度报告对比；\n- 核心数据看板和公司历史报告详情；\n- 两步AI工作流：候选发现与正式公告核验；\n- 候选池、正式数据库和本机快照分层管理；\n- 正式公告来源白名单和字段准入校验；\n- PDF字段级核验与差异状态展示；\n- 20只物理AI核心候选股完整产业链；\n- 25家物理AI关联公司统一标签检索；\n- 科创板、ST及北交所默认排除设置；\n- JSON导入、导出、同步、恢复及删除前保护；\n- 版本更新日志和SHA256文件完整性校验。\n\n相较初始压缩包，本版本最重要的变化不是简单增加股票数量，而是把原有AI算力与科技制造研究框架扩展为：\n\n\u003e **半导体材料 → 晶圆制造 → AI芯片 → 感知系统 → 控制系统 → 执行器 → 机器人本体 → 物理AI应用场景**\n\n更多更新记录请查看：\n\n```text\nCHANGELOG.md\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcoowinit%2Ftech-stock-ai-research-system","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcoowinit%2Ftech-stock-ai-research-system","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcoowinit%2Ftech-stock-ai-research-system/lists"}