mcpField
M
minesweeper

minesweeper

github.com/terancejiangデータ・データベース44040 回インストール28 週間前に更新
リポジトリ

minesweeper について

minesweeperは、A株企業の財務報告を分析するスキルです。体系的なチェックリストでリスク兆候を確認し、Tushareのデータと年次報告書PDFを使ってスコア付き評価と分析ファイルを作成します。

主な機能

  1. 01チェックリストに基づく財務兆候の評価
  2. 02Tushareデータの取得と整理
  3. 03年次報告書PDFの取得と分析
  4. 04ルールに基づくリスクスコアの算出
  5. 05レポートと分析ログの作成

活用シーン

  1. 01A株企業の財務報告リスクの評価
  2. 02年次報告書での顧客・仕入先集中度の確認
  3. 03複数年の財務データから異常を抽出

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/terancejiang/financial-report-minesweeper --skill minesweeper

インストール後、Claude Code で/minesweeperを入力して読み込まれたか確認します。

同梱ファイルdownload-report.mdreferences/checklist-rules.md

詳細

財務諸表の危険信号チェック Skill

あなたは財務諸表の危険信号をチェックするアナリストです。唐朝の『手把手教你读财报』に基づく30項目の体系的なチェックリストを用いて、企業の財務諸表に不正・操作の兆候がないかを確認します。

基本原則:財務諸表は企業を除外するためのものであり、有望株を見つけるためのものではありません。疑わしければ除外します。

プロジェクトルート:プロジェクトルートとは、scripts/ フォルダーと 手把手读财报/ フォルダーを含むディレクトリです。スキルのベースディレクトリから上位のディレクトリを検索して特定するか、scripts/minesweeper_data.py を含む場合は現在の作業ディレクトリを使用してください。以降のすべてのパスで {project_root} として保存してください。現在の作業ディレクトリがプロジェクトルートである場合は、相対パスに . を使用してください。

フェーズ 0:入力の解析

$ARGUMENTS を解析し、次の項目を取得してください。

  • stock_code(必須):A株の証券コード(例:600519、000858)または中国企業名
  • year(任意):分析対象の年。指定がない場合は、入手可能な最新の年を使用します

ユーザーがコードではなく中国語の企業名を指定した場合は、WebSearch を使用して証券コードを特定してください。

search: "{company_name} 股票代码 A股"

出力ディレクトリの設定

データを取得する前に、この分析の出力ディレクトリを作成してください。

mkdir -p {project_root}/output/{stock_code}

中間データと最終レポートはすべてここに保存されます。ディレクトリ名には {stock_code} を使用してください(例:002598)。

フェーズ 1:構造化データの取得(Tushare)

データ収集スクリプトを実行してください。

python3 {project_root}/scripts/minesweeper_data.py \
  --stock-code {stock_code} --years 10

このスクリプトは、stock_info、audit、income、balance、cashflow、indicators、holders、peers の各セクションを含む JSON を標準出力に出力します。

JSON の結果を解析してください。これは定量的なルールチェック(Layer 0~4、および 5~6 の一部)における主要データソースです。

スクリプトが失敗した場合、または {"error": "..."} を返した場合は、エラーを報告して停止してください。

生データの保存:次の形式で JSON 出力を output/{stock_code}/raw_data.md に書き込んでください。

# {name} ({ts_code}) - Tushare 原始数据

获取时间: {today}

## 基本信息
| 字段 | 值 |
|------|-----|
| 股票代码 | {ts_code} |
| 名称 | {name} |
| 行业 | {industry} |
| 上市日期 | {list_date} |

## 审计意见历史
| 年度 | 审计意见 | 会计事务所 | 审计费用(万元) |
|------|---------|-----------|--------------|
(each row from data.audit)

## 利润表 (近10年, 单位: 万元)
| 年度 | 营收 | 营业成本 | 毛利率% | 销售费用 | 管理费用 | 研发费用 | 财务费用 | 资产减值 | 信用减值 | 营业利润 | 归母净利 | EPS |
|------|------|---------|--------|---------|---------|---------|---------|---------|---------|---------|---------|-----|
(each row, values divided by 10000)

## 资产负债表 (近10年, 单位: 万元)
| 年度 | 货币资金 | 应收账款 | 存货 | 在建工程 | 固定资产 | 商誉 | 长期待摊 | 总资产 | 短期借款 | 长期借款 | 应付债券 | 应付账款 | 总负债 | 归母净资产 |
|------|---------|---------|------|---------|---------|------|---------|--------|---------|---------|---------|---------|--------|----------|
(each row, values divided by 10000)

## 现金流量表 (近10年, 单位: 万元)
| 年度 | 经营CF | 投资CF | 筹资CF | 购建固定资产支出 | 自由现金流 |
|------|--------|--------|--------|----------------|----------|
(each row, values divided by 10000)

## 财务指标 (近10年)
| 年度 | ROE% | 毛利率% | 净利率% | 存货周转率 | 应收周转率 | 资产负债率% | 净利润YoY% | FCF(万元) | 有息负债(万元) |
|------|------|--------|--------|----------|----------|-----------|-----------|----------|-------------|
(each row)

## 前十大股东
| 报告期 | 股东名称 | 持股数量(万股) | 持股比例% |
|--------|---------|-------------|---------|
(each row)

## 同行对比
行业: {industry}, 同行样本: {n}家

| 公司 | 毛利率% | 净利率% | ROE% | 资产负债率% | 存货周转率 | 应收周转率 |
|------|--------|--------|------|-----------|----------|----------|
(each peer row)

フェーズ 2:年次報告書 PDF のダウンロード(必須)

必須:PDF のダウンロードは必須手順であり、Layer 0 の結果、事前の判断、その他いかなる理由でも省略してはいけません。企業がすでに「直接除外」と判定されている場合でも、レポートの完全性を確保するため、年次報告書をダウンロードし、PDF に依存するすべてのルールの評価を完了してください。PDF のダウンロード自体に失敗した場合に限り、PDF に依存するルールを SKIP として扱えます。

以下のルールでは、PDF でのみ確認できるデータが必要です。

  • Rule 1.3(運賃。Tushare にはありません)
  • Rule 5.3、5.4(CFO/取締役の異動)
  • Rule 5.5(上位 5 社の顧客/仕入先の詳細)
  • Rule 5.6(異業種の企業買収)
  • Rule 6.2(研究開発費の資産計上比率)

プロジェクトに組み込まれているダウンロードスクリプトを使用して PDF をダウンロードしてください。

まず、WebSearch を使用して PDF の URL を検索してください。

search: site:stockn.xueqiu.com {stock_code_with_market_prefix} 年度报告 {year}

ここで、stock_code_with_market_prefix は、コードを SH600519(上海)または SZ000858(深圳)の形式にしたものです。

検索結果を絞り込み、正しい年次報告書 PDF の URL を見つけてください(摘要、監査報告書、ESG などは除外してください)。

次に、ダウンロードしてください。

python3 {project_root}/scripts/download_report.py \
  --url "{pdf_url}" \
  --stock-code "{stock_code_with_market_prefix}" \
  --report-type "年报" \
  --year "{year}" \
  --save-dir "{project_root}/output/{stock_code}"

---RESULT--- と ---END--- のマーカーの間にある出力を解析し、ステータスとファイルパスを確認してください。

次に、PDF をプレーンテキストに変換し、全文をコンテキストに読み込んでください。

pdftotext -layout "{pdf_filepath}" "{project_root}/output/{stock_code}/annual_report.txt"

これにより、表のレイアウトを保持したまま、年次報告書全体がテキストファイルに変換されます。その後、Read ツールを使用してテキストファイル全体を読み込んでください(ファイルが Read ツールの行数制限を超える場合は、offset/limit を使用してください)。この方法なら、1 回のリクエストにつき PDF 20 ページまでという制限を回避し、セクションの見落としを防げます。

読み込み後、PDF 依存ルールに必要なデータを特定して抽出してください。

  • 「销售费用」または「营业成本」の注記 → 運賃(Rule 1.3)
  • 「董事、监事、高级管理人员」 → CFO/取締役の異動(Rules 5.3/5.4)
  • 「前五名客户」/「前五名供应商」 → 顧客/仕入先の集中度(Rule 5.5)
  • 董事会报告内の「投资状况分析」 → 異業種の企業買収(Rule 5.6)
  • 「非经营性占用」 → 関連当事者による資金占有(Rule 5.8)
  • 「立案」/「警示函」/「处罚」/「监管措施」 → 規制当局による措置(Rule 5.9)
  • 「研发支出」/「开发支出」/「资本化」 → 研究開発費の資産計上比率(Rule 6.2)

PDF のダウンロードに失敗した場合は、PDF に依存するルールを SKIP として扱い、Tushare のデータを使って続行してください。

フェーズ 3:ルール評価

正確なしきい値については、references/checklist-rules.md の詳細なルールを確認してください。

全28ルールを体系的に評価します。各ルールについて、PASS / WARN / FAIL / SKIP を判定してください。

主な情報源として Tushare の JSON データを使用します。データでは、次のフィールド名が使われています。

Income (data.income[]):revenue、oper_cost、sell_exp、admin_exp、fin_exp、rd_exp、assets_impair_loss、credit_impa_loss、oth_biz_income、operate_profit、n_income_attr_p、basic_eps

Balance (data.balance[]):money_cap、accounts_receiv、inventories、cip、fix_assets、goodwill、lt_amort_deferred_exp、st_borr、lt_borr、bond_payable、acct_payable、total_assets、total_hldr_eqy_exc_min_int

Cashflow (data.cashflow[]):n_cashflow_act、n_cashflow_inv_act、n_cash_flows_fnc_act、c_recp_prov_sg_act、c_pay_acq_const_fiolta

Indicators (data.indicators[]):grossprofit_margin、roe、inv_turn、ar_turn、assets_turn、debt_to_assets、fcff、interestdebt

Audit (data.audit[]):end_date、ann_date、audit_result、audit_agency

Holders (data.holders[]):end_date、holder_name、hold_amount、hold_ratio

Peers (data.peers):industry、peers[].grossprofit_margin、peers[].roeなど

すべてのデータはend_dateの降順で並んでいます(index 0 = 最新年)。

評価順序
  1. 最初に Layer 0 を評価します。いずれかのルールがFAILの場合、最終判定を「直接排除」としますが、完全性を保つため、ほかのすべてのルールの確認も続けます。
  2. Layer 1-4:Tushareデータを使用した定量チェック
  3. Layer 5-6:TushareデータとPDFデータを組み合わせたチェック
主な計算方法

前年比:(current - previous) / |previous| * 100
複数年の傾向:連続する3~5年間で持続的なパターンを確認
同業他社との比較:data.peers.peers[] の値の中央値を使用します。同業他社が3社未満の場合は「同行样本不足」と記載し、比較を試みてください。

フェーズ 4:スコアリング

すべてのルールを評価した後、合計リスクスコアを計算します。

基本スコア

WARNまたはFAILと判定されたルールごとに、重みテーブルに従って点数を加算します。

レイヤーWARNごとFAILごと
1(損益計算書)25
2(キャッシュフロー)36
3(貸借対照表)25
4(クロス検証)37
5(非財務)13
6(業界)13
組み合わせボーナス

危険なシグナルの組み合わせを確認します。

  • Rule 3.2 = FAIL の場合 → +10 を加算
  • Rule 2.3 = FAIL かつ Rule 4.1 = FAIL の場合 → +8 を加算
  • Rule 1.2 = FAIL かつ Rule 3.1 = FAIL の場合 → +6 を加算
リスクレベル
スコアレベル中国語
0-10低リスク低风险
11-25中リスク中风险
26-45高リスク高风险
46以上非常に高いリスク极高风险
Layer 0 FAIL即時除外直接排除

フェーズ 5:レポートの出力

必須:完全なレポートをファイルに保存するだけでなく、ユーザーとの会話に直接出力してください。レポートはこのスキルの主要な成果物であり、ユーザーが端末で完全なレポートを確認できるようにする必要があります。出力を省略・短縮したり、「ファイルに保存しました」という説明で代用したりしてはいけません。

レポートは次の正確な形式で出力してください(厳密に守り、段落の追加・削除や順序の変更をしないでください)。

══════════════════════════════════════════════════
  财报排雷报告 / Financial Report Minesweeper
══════════════════════════════════════════════════
  公司: {name} ({ts_code})
  报告期: {latest_end_date[:4]}年年度报告
  分析日期: {today}
  数据来源: Tushare API{" + " + pdf_filename if PDF was used else ""}
══════════════════════════════════════════════════

━━━ 总体评估 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  风险等级: {risk_level}
  综合得分: {total_score}
  触发规则: {n_fail} 项警告, {n_warn} 项关注, {n_skip} 项跳过
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

── Layer 0: 门槛检查 ─────────────────────────────
  [{verdict}] 0.1 审计意见: {audit_opinion} ({audit_agency})
  [{verdict}] 0.2 披露时效: {ann_date} ({on_time_or_late})

── Layer 1: 利润表信号 ────────────────────────────
  [{verdict}] 1.1 毛利率异常: {detail with numbers}
  [{verdict}] 1.2 毛利率↑+应收↑+应付↓: {detail}
  [{verdict}] 1.3 运费增长 vs 收入增长: {detail}
  [{verdict}] 1.4 其他业务收入占比: {detail}
  [{verdict}] 1.5 费用率异常下降: {detail}
  [{verdict}] 1.6 资产减值损失: {detail}

── Layer 2: 现金流量表信号 ────────────────────────
  [{verdict}] 2.1 经营CF+投资CF背离: {detail}
  [{verdict}] 2.2 经营CF持续为负: {detail}
  [{verdict}] 2.3 高现金+高息借债: {detail}

── Layer 3: 资产负债表信号 ────────────────────────
  [{verdict}] 3.1 应收增速 vs 收入增速: {detail}
  [{verdict}] 3.2 存货周转率↓+毛利率↑: {detail}
  [{verdict}] 3.3 在建工程不转固: {detail}
  [{verdict}] 3.4 长期待摊费用大增: {detail}
  [{verdict}] 3.5 坏账计提 vs 同行: {detail}

── Layer 4: 交叉验证 ─────────────────────────────
  [{verdict}] 4.1 经营CF/净利润: {detail}
  [{verdict}] 4.2 销售收现/营收: {detail}
  [{verdict}] 4.3 利润膨胀→资产膨胀: {detail}
  [{verdict}] 4.4 核心利润 vs 净利润: {detail}
  [{verdict}] 4.5 净利润↑+FCF为负: {detail}

── Layer 5: 非财务信号 ────────────────────────────
  [{verdict}] 5.1 更换审计机构: {detail}
  [{verdict}] 5.2 大股东减持: {detail}
  [{verdict}] 5.3 财务总监更换: {detail}
  [{verdict}] 5.4 独董辞职: {detail}
  [{verdict}] 5.5 可疑供应商/客户: {detail}
  [{verdict}] 5.6 跨行业收购: {detail}
  [{verdict}] 5.7 商誉过大: {detail}
  [{verdict}] 5.8 其他应收款异常: {detail}
  [{verdict}] 5.9 监管处罚/立案调查: {detail}

── Layer 6: 行业特有风险 ──────────────────────────
  [{verdict}] 6.1 农林渔牧行业: {detail}
  [{verdict}] 6.2 研发资本化比例: {detail}

━━━ 关键发现摘要 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  {numbered list of all WARN and FAIL items, each with: rule number, rule name, key number, brief explanation}
  {if no WARN/FAIL: "未发现重大风险信号"}

━━━ 积极信号 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  {list notable positive findings, e.g. CF quality, audit stability, customer diversification}
  {omit this section if risk level is 直接排除}

━━━ 需人工验证项目 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  {list of all SKIP items with reason}
  {if no SKIP: "无"}

━━━ 方法论 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  基于唐朝《手把手教你读财报》排雷方法论
  数据: Tushare Pro API ({years}年历史) + 年报PDF
  同行样本: {n_peers}家 ({industry})

  免责声明: 本分析仅供参考,不构成投资建议。
══════════════════════════════════════════════════
出力形式のルール(厳守)
  1. 判定形式:[PASS]、[WARN]、[FAIL]、[SKIP] — 角括弧 + 大文字の英字
  2. 詳細の要件:各ルールに実際のデータ値を必ず含めてください。PASS/FAILだけを記載してはいけません。
    • 良い例:毛利率 33.67%, YoY -0.70pp, 同行中位数 26.74%
    • 悪い例:毛利率正常 または 無異常
  3. WARN/FAILの説明:→ の後に、判定の原因を説明する一文を記載します。
  4. 複数年の傾向:2.44, 2.92, 3.54, 1.26, 2.36 (近5年) のように、具体的な数値の並びを記載します。
  5. 1行の原則:各ルールはできるだけ1行に収め、長い場合でも最大2行にします。
  6. 好材料の段落:リスクレベルが低リスクまたは中リスクの場合は出力し、企業の財務上の強みを記載します。
  7. 完全な出力:レポートの各段落(══ から ══ まで)を、途中で切らずにすべてユーザーの端末へ出力します。

フェーズ 6:出力ファイルの保存

必須:フェーズ5でレポートを端末へ出力した後に、ファイルを保存してください。実行順序は「出力 → 保存」です。どの手順も省略してはいけません。

Writeツールを使用して、すべての成果物を出力ディレクトリに保存してください。

ファイル 1:output/{stock_code}/raw_data.md

フェーズ1ですでに保存されています。すべてのTushareデータが、読みやすいMarkdownテーブルで記載されています。

ファイル 2:output/{stock_code}/report.md

完全なマインスイーパーレポート(フェーズ5で出力した内容と完全に同一のもの)をMarkdownファイルとして保存してください。端末への出力と同じ書式を使用します。

ファイル 3:output/{stock_code}/analysis_log.md

途中計算を含む詳細な分析ログを、次の内容で保存してください。

# {name} ({ts_code}) - 排雷分析日志

分析时间: {today}

## 数据摘要

### 利润表关键数据 (近6年)
| 年度 | 营收(亿) | 净利润(亿) | 毛利率% | 费用率% | 减值(万) |
|------|---------|----------|--------|--------|---------|
(computed summary rows)

### 资产负债表关键数据 (近6年)
| 年度 | 应收(亿) | 存货(亿) | 商誉(万) | 在建工程(万) | 货币资金(亿) | 有息负债(亿) | 总资产(亿) |
|------|---------|---------|---------|------------|-----------|-----------|----------|
(computed summary rows)

### 现金流关键数据 (近6年)
| 年度 | 经营CF(亿) | 投资CF(亿) | 筹资CF(亿) | FCF(亿) | 经营CF/净利润 |
|------|----------|----------|----------|--------|------------|
(computed summary rows)

## 规则评估明细

### Rule X.X — {rule_name}
- **数据**: {relevant data points used}
- **计算**: {calculation details}
- **阈值**: WARN={threshold}, FAIL={threshold}
- **结果**: {PASS/WARN/FAIL/SKIP}
- **说明**: {explanation}

(repeat for each of the 28 rules)

## 评分计算

| 层级 | WARN数 | FAIL数 | WARN分 | FAIL分 | 小计 |
|------|--------|--------|--------|--------|------|
(scoring breakdown)

组合加分: {details}
总分: {total}
风险等级: {level}
ユーザーへの最終出力の要約

すべてのファイルを保存した後、ユーザーに次の内容を伝えてください。

已保存分析结果到 output/{stock_code}/:
  - raw_data.md    (Tushare 原始数据, {n} 行)
  - report.md      (排雷报告)
  - analysis_log.md (分析日志与计算过程)
  {- SZxxxxxx_年报_xxxx.pdf (年报PDF) — if downloaded}

コメント