账税风险筛查
目的
对目标企业从工商、税务、银行、账务四个维度进行系统性风险筛查,输出量化评分(100 分制)+ 问题清单 + 整改建议的风险筛查报告。
触发场景
- "帮我对XX公司做风险筛查/风险体检/尽调"
- "生成XX公司的风险筛查报告"
- "这家客户能不能接/能不能给他授信/供货"(客户准入)
- 代理记账机构对客户的接前体检、年检式风险排查
运行环境(跨平台:macOS / Windows / Linux)
脚本均为纯 Python,无系统专用绝对路径,中文路径/文件名(含 Windows)均可正常处理。
- Python:任意 Python 3;Windows 若
python3不可用,改用python或py -3。 - 依赖(首次安装,跨平台通用):
bash python3 -m pip install openpyxl xlrd pymupdf openpyxl/xlrd:Excel(xlsx / xls)解析pymupdf:PDF 解析(有预编译 wheel,无需编译)- PDF 转换:
scripts/html2pdf.py自动探测 macOS / Windows / Linux 上的 Chrome / Edge / Chromium;Windows 一般自带 Edge,未装 Chrome 也能转换。全部缺失时脚本不中断,降级交付 HTML 并提示手动打印为 PDF。 - 不依赖任何 MCP 连接器或外部 skill。
执行流程
执行前置校验(务必先执行,任一不满足则停止、不执行筛查)
- 未提供数据文件(财务报表、科目余额表、纳税申报表、银行流水、序时账等任一)→ 停止执行,提示"请给出数据文件"。
- 未提供公司名称 → 停止执行,提示"请输入公司名称"。
- 公司名称不正确 → 停止执行,提示"公司名称不正确"。判定"不正确"的情形:非完整规范的企业名称(如简称、缺后缀、明显错别字),或经公开信息/工商数据源核实查无此企业。
固定规则(务必遵守):本技能的筛查步骤、评分权重(工商20% / 税务30% / 银行20% / 账务30%)、风险等级划分、行业比率标准、各章节结构与"风控建议"固定文案等均为既定标准,不得根据用户个人习惯、口头偏好或临时要求而改动后续步骤与逻辑标准;仅当用户明确提出并经确认、且已写入本 SKILL.md 的规则修改才生效。
第一步:确认筛查标的与资料清单
向用户确认:
- 企业全称(有统一社会信用代码更佳),以及是否需关联筛查实控人/股东。
-
可提供的资料(有则分析;无则该项直接不列示,报告中不显示"信息缺口 / 无法核查 / 无法执行"类表述):
- 财务资料:资产负债表、利润表、科目余额表、序时账/明细账
- 税务资料:增值税及附加申报表、企业所得税申报表、个税申报记录、完税证明
- 银行资料:对公账户流水(建议近 12 个月)、贷款卡/征信报告
- 其他:合同、存货盘点表、纳税评估/稽查文书 -
资料文件解析(本技能内置脚本,快速、准确、只读,无外部 skill 依赖,跨平台):
- Excel(xlsx/xls/csv):python3 <skill目录>/scripts/parse_excel.py 文件一键 dump 全部 sheet(自动识别格式、数字精确到角分、只读不改原文件)。依赖openpyxl(xlsx)、xlrd(xls),缺失时python3 -m pip install openpyxl xlrd。
- PDF(纳税申报表、完税证明等):用 PyMuPDF(fitz) 提取,依赖python3 -m pip install pymupdf(有预编译 wheel、速度快);表格型申报表用page.find_tables()。详见<skill目录>/references/pdf-extract.md。
- 禁止用pdfplumber(依赖 pypdfium2,编译慢、易卡死)。
- Windows 上若python3不可用,改用python或py -3。
第二步:采集工商司法信息(工商维度数据源)
直接用公开网络信息采集工商数据(不依赖启信慧眼/天眼查连接器):
- 用
WebSearch检索企业工商照面信息:统一社会信用代码、法定代表人、注册资本(认缴/实缴)、成立日期、经营状态、经营范围、注册地址、股东及持股比例、主要人员、变更记录(减资/股权变更)、参保人数、所属行业、企业规模等。 - 检索司法与经营合规风险:被执行人、失信、诉讼、行政处罚、经营异常、严重违法、黑名单、股权冻结/质押、动产抵押、限制高消费、终本案件等。
- 检索实控人/法定代表人的对外任职与关联企业,判断关联方风险。
注意事项:
- 数据来源不注明"公开网络信息"及查询日期,报告全文不得出现"数据来源""查询日期""资料来源"等来源说明性文字(见第五步第 4 条)。
- 禁止编造工商数据;公开渠道未检索到负面记录时不写正向结论(各维度只列风险项,见第五步第 2 条),不写"待连接器核实"。
- 同名/近似名企业须严格用统一社会信用代码比对,避免张冠李戴(如"意诚"误作"易诚")。
第三步:逐项风险筛查
按 references/risk-checklists.md 中四大维度的清单逐项核对:
- 工商维度:主要来自第二步查询结果
- 税务维度:基于申报表 + 财报做勾稽(税负率、进销项匹配、申报一致性等)。易错点(务必注意):
1. 城建税税率按纳税人所在地分档(市区 7% / 县城镇 5% / 其他 1%),且小微企业叠加"六税两费"减半征收——勾稽时先确认所在地税率再判断,勿默认 7%。
2. 科目余额表"应交税费-应交增值税"三级科目(销项/进项/转出未交)的期初/期末挂账额 ≠ 真实销售规模:长期挂账多为会计科目未结转的历史余额,判断"账外经营/隐匿收入"必须以申报销售额与账面收入是否一致为准,不得用挂账额除以税率反推销售额。
3. 收入勾稽优先核对"账面营业收入 vs 增值税申报销售额 vs 企业所得税申报收入"三口径是否一致,一致即为全额申报。 - 银行维度:基于流水做对账与可疑交易筛查(公私混用、快进快出、流水与收入背离等)
- 账务维度:基于科目余额表/序时账查六大往来挂账、资产科目负数、注册资金实缴账务、未分配利润异常、固定资产入账合理性、存货与收入配比、工资发放合理性、隐匿收入、无票成本、两套账迹象等(详见 risk-checklists.md 4.1–4.7)。表述规范(务必注意):
1. 汇总科目(无二级明细 / 辅助核算):科目余额表里只看到一级科目、没有 2241001 等二级子科目时,不要直接下结论"无明细"——很可能是用友/金蝶等财务软件采用了核算项目(辅助核算)方式设置明细,具体挂账方记录在辅助核算里、不在科目余额表的行明细中。正确表述:"明细采用核算项目(辅助核算)方式设置,不在导出的科目余额表行明细中展开;需调取财务软件辅助核算明细、银行流水或合同台账核实具体挂账方"。"账务透明度不足 / 隐藏负债 / 资金池 / 代收代付"等推断仍属无数据支撑,不写。
2. 不要做无数据支撑的业务模式推断:未看到具体明细、合同、流水证据前,不要直接断言"挂靠 / 资金池 / 代收代付 / 体外循环"等具体业务模式,应保持中性表述(如"账务透明度不足,需调取资料核实")。
3. 不要把科目余额表层面的问题错扣到"报表失真":判断"报表失真 / 列报失真"前必须先核对——报表是否已正确将往来明细的借方余额从应付账款重分类到预付账款。判断规则:- 若报表应付账款(贷方)+ 报表预付账款(借方)= 科目余额表应付账款一级科目借+贷方绝对值之和 → 报表已合规重分类,问题只在科目余额表层面(同一供应商借贷双向挂账未轧差、账务不规范);
- 若报表应付账款 ≈ 科目余额表应付账款轧差数、且报表预付账款未体现多付金额 → 报表确实失真(多付供应商款未重分类到预付账款,预付资产被隐藏)。
两种情况的诊断方向不同,不要一看到科目余额表有借方余额就直接断言"报表失真",要分清是哪一层的问题。
每个风险项须记录:问题描述、证据(数据/文件)、严重程度(high / medium / low)、涉及金额(如适用)。核查不了的项目直接跳过、不列示,不显示"信息缺口 / 无法执行"类表述,不得默认无风险。
第四步:计算风险评分
将发现项整理为 JSON,执行评分脚本(脚本仅依赖标准库,任意 Python 3 可运行):
python3 <skill目录>/scripts/risk_score.py findings.json
输入格式与评分权重见 references/scoring-method.md。脚本输出各维度得分、加权总分、风险等级(低/中低/中高/高)。
第五步:生成报告
- 读取
assets/report-template.html作为报告骨架(浅色主题,含评分卡片、财务概览、四维详述、风控建议),填入实际内容后渲染/交付。 - 章节结构:摘要 → 一、企业概况 → 二、财务概览(资产负债表主要项目表在前、利润表主要项目表在后,附毛利率/净利率/资产负债率等衍生指标)→ 三、工商维度 → 四、税务维度 → 五、银行维度 → 六、账务维度 → 七、风控建议。各维度发现项明细在对应维度章节内完整列示,不另设问题清单汇总表、待核实事项与附录。
- 四个维度的章节展示规范(三、工商 / 四、税务 / 五、银行 / 六、账务,固定顺序不得调换):
- 先分析数据、后风险事项:每章第一节固定为「××数据分析」,即 工商数据分析 / 税务数据分析 / 银行数据分析 / 账务数据分析,用表格集中呈现该维度的核查结果数据(工商→主体/股权/司法/处罚/关联/经营持续性核查数据;税务→税负率、三口径勾稽、各税种申报数据;银行→账户与流水统计;账务→重点科目余额、关键比率),不写结论性文字叙述;第二节固定为「风险事项」,集中列示本章查出的风险项。
- 只列风险项:风险事项清单中只出现构成风险的条目,不写"经核查登记状态为存续""未见负面记录""该项正常"等正向/无风险表述;本维度无风险项时,该维度只保留「××数据分析」表格,不再出现「风险事项」小节。
- 风险项排序:同一维度内按 高危 → 中危 → 低危 依次排列(严重程度优先,高危置顶)。
- 风险标识前置:每条风险项最前面先显示风险等级标识(
高危/中危/低危彩色标签),其后依次为风险项名称、涉及金额(如适用)、风险描述与证据。 - "七、风控建议"为整章固定文案,逐字使用、不得增删改写:"鉴于当前涉及账税事项较为复杂,建议与财务人员沟通,由执业会计师/税务师提供合规规范指导,确保相关事项处理符合税法要求,有效防范税务风险。"
- 报告全文中一律不得出现数据来源说明:不得出现"数据来源""资料来源""查询日期""依据××提供的资料""以官方渠道实时信息为准"等来源说明性文字,含章节脚注、表格下方注释、封面与页脚。数据自身的期间/时点口径(如"截至 2026-06-30""2026 年 1—6 月")属数据内容,应予保留。
- 不写"待连接器核实/待天眼查核实/待启信慧眼核实/待权威核实"等提醒文案;无法核实的事项直接不列,报告中不出现"信息缺口 / 无法执行 / 资料未提供 / 待核实"等表述。
- 统一生成 PDF 版(跨平台):生成 HTML 报告后,无论何种情况一律执行
python3 <skill目录>/scripts/html2pdf.py 报告.html生成 PDF 交付;不根据用户习惯、是否要求或其他因素选择跳过转 PDF。
- 脚本自动探测 macOS / Windows / Linux 上的 Chrome / Edge / Chromium(Windows 通常自带 Edge,无 Chrome 也能转)。
- 若机器无任何 Chromium 内核浏览器:脚本不报错中断,打印降级指引并正常退出——交付 HTML 源文件,提示用户用浏览器打开 HTML → 打印 → 另存为 PDF。
- HTML 源文件可同时保留,无法转 PDF 时以 HTML 为准交付。
输出要求
- 摘要页:总分、四维得分、风险等级、TOP3 核心风险、一句话结论
- 四维度章节结构固定为「××数据分析(工商/税务/银行/账务数据分析,表格在前)→ 风险事项(只列风险项,高危→中危→低危,风险标识前置)」
- 风险项内容包括:风险等级标识 / 风险项名称 / 涉及金额(如适用)/ 风险描述与证据
- 报告全文不出现任何数据来源、查询日期类说明文字
- "七、风控建议"整章使用固定文案(见第五步第 4 条),不再分档展开整改建议
- 交付物统一为 PDF 版(见第五步第 7 条),HTML 仅为生成中间产物
- 每次筛查独立执行:仅针对当前目标企业,不引用其他企业的数据/结论,不做跨企业横向关联推断(如"与XX企业属同一客户群/同一代理记账机构"),除非用户明确要求对比