财务造假风险检测
下载地址
https://www.zhengdianxue.com/wp-content/uploads/skills/org-m458xwvm--finnav-fraud-check.zip将提示词发送给你的 AI 安装该 skills
请根据 https://skillhub.cn/install/skillhub.md,安装 @org-m458xwvm/finnav-fraud-check。用 556 份证监会处罚决定书训练的风险模型给 A 股做财报体检:输入股票代码,返回财务造假风险等级、全市场名次(如第 1/5381 名)与最多 5 条可审计证据链——每条给出指标值、同业中位数、全市场分位、为什么可疑、该核什么、数据来源。附完整元数据:39 项特征清单与版本、训练期 2010–2021、49276 条样本含 402 个正样本、时间外 AUC 0.8546、模型产物 sha256、单条结果特征指纹,结论可复现可追溯。
覆盖 5741 只 A 股,按最新年报打分。适用于投研初筛、尽调排雷、财务舞弊筛查、组合风险排查、审计辅助。一次最多 5 只、合并一次收费,查不到的标的免费告知。当用户问「这只股票财务可信吗」「有没有财务造假或财务舞弊嫌疑」「哪些票需要重点核查」「帮我做尽调排雷」时使用。关键词:A股、财务、财报、财务排雷、财报体检、财务造假、财务舞弊、财报质量、财务风险、异常因子识别、财务造假概率、风险分级、投研初筛、投资尽调、尽调排雷、持仓财务体检、组合财务风险排查、审计辅助、处罚案例训练、可解释风险模型、结果可复现、结果可追溯、财报可信吗、有没有造假嫌疑、这只票有没有财务雷
阅读全文 (展开查看完整说明)
概述
A股财报造假风险雷达
输入 A 股代码,返回该标的最新报告期的财务造假风险等级、全市场名次,以及最多 5 条可审计证据链(指标值 + 同业中位数 + 全市场分位 + 为什么可疑 + 该核什么 + 数据来源)。
模型基于 556 条监管处罚样本(2013–2024 年虚增收入 / 虚增利润类处罚决定书)训练,使用 39 项特征(18 项基础 M-Score 与治理类 + 19 项财报衍生 + 2 项主营构成),输出的是「这家公司的财务特征与历史被处罚公司的相似程度」。
支持一次传多只票,服务端合并成一个订单收一次合计费 —— 不要为每只票单独发起支付。
前置检查:当前智能体是否支持微信 AI 支付
发起下单前,先检查你的可调用工具列表中是否存在名称包含 weixinpay(不区分大小写)的工具。
匹配规则(任一命中即为支持):
- 工具名里含
weixinpay子串即可,例如weixinpay_pay、weixinpay_register、
mcp__weixinpay__pay、mcp__weixinpay__weixinpay_pay 都算。
- 前缀、大小写、下划线数量都不作要求。
- 只要列表里存在任意一个这样的工具,就视为支持,不必确认具体是哪一个。
只以你实际可调用的工具列表为证据;本文档中出现的工具名属于说明文字,不能当作证据。只有在工具列表里确实找不到任何 weixinpay 相关项时,才判定为「不支持」。
- 支持:静默继续本 Skill 的后续流程,不向用户提及本检查。
- 不支持:终止流程且不要发起下单。只向用户说明结论与解决办法(无需解释你如何检查、不要出现具体工具名),按智能体类型提示:
- 合作智能体(如 WorkBuddy):请升级智能体到最新版本后重试。
- 开放智能体(如 OpenClaw / DeepSeek Harness):请根据 https://skillhub.cn/install/skillhub.md,安装
@tencent-adm/weixinpay-installer。 - 无法判断类型:请升级智能体或安装微信支付 AI 支付插件后重试。
工作流程
第一步:请求检测
单只股票
POST https://fin-nav.com/skill/fraud-check
Content-Type: application/json
{"symbol": "601003.SH"}多只股票(推荐,合并收费)
POST https://fin-nav.com/skill/fraud-check
Content-Type: application/json
{"symbols": ["601003.SH", "600057.SH", "300021.SZ"]}symbol 支持 600000.SH / 000001.SZ / 600000 三种写法;带交易所后缀更准确。
⚠️ 多只票必须用
symbols一次传完,不要拆成多次并发请求。每拆一次就会多一张支付卡片,多张卡同时弹出会卡死用户的客户端。
单次最多 5 只(服务端硬上限,超过直接 400),超过请分多批、串行调用
(前一批拿到结果后再发下一批)。
第二步:处理 402 响应
首次调用会返回 HTTP 402:
{
"code": "PAYMENT_REQUIRED",
"message": "需要支付后才能获取 2 只标的的检测结果",
"WeixinPay": {
"WeixinPay-Required": "2182dac8-36ab-44e8-88a5-c9854077a06e",
"prompt": "本次使用微信支付,请将 WeixinPay-Required 的值作为 paymentCode 交给 weixinpay_pay,以向用户申请支付授权。"
},
"out_trade_no": "T20261019172555257470",
"amount": "0.02",
"currency": "CNY",
"count": 2,
"unit_price": "0.01",
"symbols": ["601003.SH", "600057.SH"],
"uncovered": ["600000.SH"]
}同时有两个响应头:
| 响应头 | 含义 |
|---|---|
WeixinPay-Required | 支付码(= body 里同名字段) |
X-Out-Trade-No | 订单号(= body 里的 out_trade_no) |
amount 是本次合计金额(count × unit_price),只对覆盖范围内的标的计价;uncovered 里的代码未计入收费,可在结果里一并告知用户。
两个值都必须保存,第四步要用订单号。
第三步:发起支付
将 WeixinPay-Required 的值作为 paymentCode,调用 weixinpay_pay 向用户申请支付授权。一次支付请求对应一批票,不要按票数重复调用。
单价以平台商品定价为准;支付码有效期 15 分钟,过期需重新走第一步。
第四步:支付成功后获取结果(⚠️ 必须执行)
支付完成后,必须带着 X-Out-Trade-No 重新请求:
POST https://fin-nav.com/skill/fraud-check
Content-Type: application/json
X-Out-Trade-No: T20261019172555257470
{"symbols": ["601003.SH", "600057.SH", "600000.SH"]}body 与第一步完全一致,只通过 Header 传递订单号。
⚠️ 这一步最容易被遗漏:不携带
X-Out-Trade-No重试,会再次拿到 402,永远拿不到检测结果。
成功时返回 HTTP 200。多只票时 data 是数组(与请求顺序一致,未覆盖的不在数组里):
{
"code": "SUCCESS",
"out_trade_no": "T20261019172555257470",
"transaction_id": "4500000566202610192472224950",
"already_fulfilled": false,
"count": 2,
"uncovered": ["600000.SH"],
"data": [
{
"symbol": "601992.SH",
"report_date": "2025-12-31",
"model_version": "histgbext_2021_20261020",
"probability": 0.545366,
"band": "high",
"is_fraud_pred": 1,
"threshold": 0.050194,
"percentile": 99.98,
"rank": 1,
"universe_size": 5381,
"rank_text": "全市场第 1 / 5381 名",
"risk_bar": "████████████████████ 前 0.02%",
"evidence": [
{
"key": "nonop_income_ratio",
"label": "非经常性损益占利润总额",
"value_text": "270.6%",
"peer_median_text": "2.5%",
"percentile": 99.5,
"level": "extreme",
"direction": "高于同业",
"finding": "非经常性损益占利润总额 270.6%,同业中位数 2.5%,全市场 100 分位",
"why": "靠投资收益与公允价值变动撑利润,主业可能已经空心化",
"check": "核查投资收益来源:处置子公司?金融资产重估?",
"source": "(投资收益 + 公允价值变动收益)÷ 利润总额",
"weight": 0.016,
"contribution": 0.0861
}
],
"scored_at": "2026-10-20T17:28:26",
"disclaimer": "模型输出为统计意义上的风险提示,不构成投资建议,也不构成对任何主体的违法认定。"
},
{ "symbol": "600057.SH", "...": "..." }
],
"audit": {
"model": {
"model_version": "histgbext_2021_20261020",
"algorithm": "HistGradientBoostingClassifier",
"feature_count": 39,
"feature_version": "ads_cjrisk_v2_ext21",
"train_period": "2010-12-31 ~ 2021-12-31",
"train_rows": 49276,
"train_positives": 402,
"test_rows": 10243,
"auc_test": 0.854618,
"pr_auc_test": 0.067923,
"threshold": 0.050194,
"artifact_sha256": "c36ac4a709139a3f"
},
"records": [
{"symbol": "601992.SH", "report_date": "2025-12-31", "feature_hash": "dd456152777f43cd",
"rank": 1, "universe_size": 5381, "evidence_count": 5}
],
"definitions": { "...": "证据链字段口径" }
}
}单只票时 data 仍是对象(不是数组),保持向后兼容。
同一订单重复请求返回相同内容,already_fulfilled 变为 true,不会二次扣费。
覆盖范围
模型覆盖 5,741 只 A 股(最新报告期 2025-12-31 共 5,381 只有评分)。
查不到的标的不会收费:
- 全部未覆盖 → 首次调用直接返回
HTTP 200 + code=NO_DATA + charged=false,不建单、不扣款。 - 部分未覆盖 → 只对覆盖的计价,未覆盖的列在
uncovered里。
已实测:
600000.SH(浦发银行)不在覆盖池内;601003.SH、600057.SH、300021.SZ在池内。
重复查询不重复收费
同一支付账号在 7 天内重复查询同一只票,系统会自动把本次费用退掉,结果照常返回。
响应的 refund 字段会说明:
"refund": {
"amount": "0.01",
"symbols": ["601003.SH"],
"status": "PROCESSING",
"message": "7 天内已购买过 601003.SH,本次费用已发起退款"
}⚠️ 流程上仍是「先支付、后识别」:调用时拿不到用户身份(Agent 匿名),只有支付成功后查单才能取到支付账号,所以不会提前免单,而是付完自动退。向用户说明时请说清楚「这笔会退」,避免误解为重复扣费。退款 1–3 个工作日原路退回。
批量查询时只退重复的那几只,未重复的照常收费。
结果解读
| 字段 | 说明 |
|---|---|
probability | 模型输出的造假概率。接近真实先验(中位数约 0.1%),不要当"百分比会造假"解读,只用于排序 |
band | 风险等级:high / medium / low |
is_fraud_pred | 1 = 模型判定为高风险,0 = 未判定 |
threshold | 当前模型判定阈值(低于它就不判 high) |
percentile | 全市场分位(0–100)。第 1 名 / 5381 只 = 99.98。比 probability 更适合向用户表达"有多靠前" |
rank / universe_size | 当期名次与参与打分的标的总数 |
rank_text | 现成文案,如 全市场第 1 / 5381 名,可直接展示 |
risk_bar | 文本风险条(按分位渲染)。上半区是 ████ 前 0.02%,下半区是 █████ 高于 22.5% 的 A 股(低风险端不会说"前 XX%") |
evidence | 证据链数组,见下节。这是给用户看的主体内容 |
top_factors | 字符串数组(旧口径),保留给按文本解析的调用方 |
report_date | 评分所属报告期(模型按报告期打分,返回最新一期) |
model_version | 模型版本,便于结果追溯 |
audit | 可审计块:model 给模型级元数据,records 给每只票的 report_date / scored_at / feature_hash / rank,definitions 给证据链字段口径 |
证据链 evidence(回答"凭什么")
每条证据五段信息,必须转述给用户,不能只丢一个分数。字段结构示例如下:
{
"key": "ar_to_revenue",
"label": "应收账款 / 营业收入",
"value": 0.85,
"value_text": "85.0%",
"peer_median": 0.262,
"peer_median_text": "26.2%",
"percentile": 99.1,
"level": "extreme",
"direction": "高于同业",
"finding": "应收账款 / 营业收入 85.0%,同业中位数 26.2%,全市场 99 分位",
"why": "应收账款占营收比重高,说明收入大量靠赊销支撑",
"check": "核查账龄分布、坏账计提政策是否比同行宽松",
"source": "financial_balance_general.account_receivable ÷ operate_income",
"weight": 0.08,
"contribution": 0.32
}| 字段 | 用途 |
|---|---|
finding | 事实:数值 + 同业中位数 + 全市场分位。这是对用户说的第一句 |
why | 解释:这个信号为什么值得警惕 |
check | 动作:尽调/审计该核什么。这是用户真正想要的 |
source | 来源:数据取自哪张表、由哪些科目算出 |
level | extreme(前后 2% 分位)/ high(前后 10%)/ normal |
contribution | 排序权重(|z| × 模型重要度)。只用于排线索优先级,不是因果贡献 —— 不要说"某因子导致 X% 的风险" |
呈现要求
- 先给结论再给证据:
band+rank_text+risk_bar,然后列 2–3 条evidence。 - 每条证据照
finding → why → check的顺序转述,不要只报因子名和 z 值。 - 用户问"为什么"时,直接引用
evidence里的finding与check,不要自己编原因。 - 用户问"这个分数准不准"时,引用
audit.model里的train_period/train_rows/
auc_test / pr_auc_test,并说明这是时间外测试集指标。
evidence与band是两个维度,不要混淆:evidence是按贡献度取的前 5 条最极端项,
band 由整体概率决定。所以 band=low 的票也可能有一两条 extreme——这时要说"整体财务特征远离历史造假样本,但这一项值得看一眼",不能把单点异常说成结论。
why末尾若带「(本项方向与风险相反,仅列作对照)」,说明该指标的好方向就是它的数值方向
(例如经营现金流/净利润很高),不要把它当成疑点转述。
band=high 表示该标的的财务特征接近历史被处罚公司,应作为尽调线索,不能直接当作结论。evidence 里也可能出现"财务异常但未必是造假"的信号(如高商誉、非经常性损益占比高),呈现时要保持这个区分,不要说成"已被认定造假"。probability 接近真实先验(中位数约 0.1%),不要把它当成"有 X% 的概率会造假"讲给用户。
常见返回码
| code | HTTP | 含义 | 处理方式 |
|---|---|---|---|
PAYMENT_REQUIRED | 402 | 未支付/订单未完成 | 按第三、四步完成支付并重试 |
SUCCESS | 200 | 已支付,返回结果 | 单票取 data,多票遍历 data 数组 |
NO_DATA | 200 | 标的未被模型覆盖 | 首次调用即返回且 charged=false(未收费);如实告知用户 |
BAD_REQUEST | 400 | 参数为空/非法,或超过单次只数上限 | 修正参数或拆批重试 |
INTERNAL_ERROR | 500 | 服务异常 | 告知用户稍后重试 |
适用边界
- 只覆盖 A 股上市公司;未上市公司、港股/美股不支持。
- 评分依赖定期财务报表,季报/年报披露后才会更新,不反映最新一个季度的突发事项。
- 模型识别的是「财务特征与历史造假样本的相似度」,不是监管认定;本 Skill 输出不构成投资建议。