# Tyc Financial Deep

> 上市公司财务深度分析（TYC 独有），输出三表 + 主要指标 + 股本结构 + 股东 + 董监高 + 违规 + 招股书

- Skill: `tyc-tech/tyc-financial-deep` (Agent Skill)
- Install (CLI): `npx skillmds@latest add tyc-tech/tyc-financial-deep`
- Raw SKILL.md: https://api.skillmd.com/api/skills/tyc-tech/tyc-financial-deep/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: tyc-tech (https://skillmd.com/u/tyc-tech)
- Updated: 2026-09-22
- Page: https://skillmd.com/skills/tyc-tech/tyc-financial-deep

---


# 上市公司财务深度分析（TYC 独有扩展）

## 触发条件

二级市场投资研究、Pre-IPO 估值参考、上市公司收购前财务尽调、价值投资入场分析。

关键词：上市公司财务、三表分析、ROE 拆解、股东结构、Pre-IPO 估值

## 输入要求

用户输入的企业标识可能是以下三种形式之一，**Step 0 会按形式分流**，不要急着把用户原话当成 `searchKey` 喂给后续步骤：

| 输入形式 | 示例 | 是否需要 L0 实体锚定 |
|---|---|---|
| **完整企业名**（含组织形式后缀：`有限公司` / `股份有限公司` / `集团` / `合伙企业` / `个体工商户` / `事务所` / `中心` 等） | `北京字节跳动科技有限公司` / `腾讯科技（深圳）有限公司` | ❌ 跳过 L0，直接当 `searchKey` |
| **统一社会信用代码（USCC）** 18 位大写字母+数字 | `91110108551385082Q` | ❌ 跳过 L0，直接当 `searchKey` |
| **企业简称 / 曾用名 / 品牌名 / 模糊指代** | `字节` / `抖音` / `今日头条` / `乐视` / `阿里` | ✅ **必须先走 L0**，由用户在候选中确认唯一企业，再拿 `creditCode` 作为 `searchKey` |

> 经过 Step 0 锚定后，下文 Step 1+ 的 `searchKey` 都指**精确企业名或 USCC**，调用方式不变。

## 执行流程

### Step 0: 实体锚定（条件性 · L0 工具：`search_companies`）

**目的**：用户给的常常是简称、曾用名、模糊指代，下游所有步骤都依赖精确企业；先用 L0 把它消歧成唯一 `creditCode`，避免后续步骤在错主体上反复烧 token。

**判定与分流**：

1. **若 userInput 匹配 USCC 正则** `^[0-9A-Z]{18}$` → 跳过 L0，`searchKey = userInput`
2. **若 userInput 含组织形式后缀**（`有限公司` / `股份` / `集团` / `合伙企业` / `事务所` / `个体工商户` / `分公司` 等）**且长度 ≥ 6** → 跳过 L0，`searchKey = userInput`
3. **否则**（简称 / 曾用名 / 品牌名 / 任何看起来不完整的字符串）→ **必须走 L0**：

   - 调用 `search_companies` (`searchKey: userInput`)
   - 在返回 `items[]` 中默认按 `regStatus ∈ {存续, 在业, 在营, 开业}` 过滤，按 `regCapital` 倒序取 Top 5 作为候选展示
   - **候选 = 1** → 自动锚定，`searchKey = items[0].creditCode`
   - **候选 ≥ 2** → **暂停执行**，向用户输出候选清单（`name` / `creditCode` / `regStatus` / `regLocation` / `legalPersonName`）请求确认，待回复后取选定企业的 `creditCode` 作为 `searchKey`
   - **候选 = 0** → 终止流程，提示"未找到匹配企业，请提供更完整的名称或换关键词"

**对用户的话术（候选 ≥ 2 时）**：

> 你说的「{userInput}」匹配到 N 家企业，请确认是哪一家：
>
> | # | 企业名称 | USCC | 状态 | 法定代表人 | 注册地 |
> |---|---|---|---|---|---|
> | 1 | … | … | 存续 | … | … |
> | 2 | … | … | 存续 | … | … |
>
> 回复编号（1-N）以继续，或回复"都不是"重新输入。

### Step 1: 上市信息确认
- `get_listing_info` (`searchKey`) — 股票代码 / 上市日期 / 总市值

### Step 2: 财务三表
- `get_income_statement` — 利润表
- `get_balance_sheet` — 资产负债表
- `get_cash_flow_statement` — 现金流量表

### Step 3: 财务指标
- `get_financial_summary` — 财务简析（净利率、毛利率、ROA、ROE 等）
- `get_financial_main_indicators` — 年度 + 季度主要指标（每股收益等）

### Step 4: 股权结构
- `get_share_structure` — 股本结构 + 变动 + 分红 + 配股
- `get_stock_shareholders` — 十大股东 + 流通股东 + 参股控股

### Step 5: 董监高与公司治理
- `get_stock_executives` — 董监高 + 重要人员 + 联系方式
- `get_stock_violations` — 违规处理

### Step 6: IPO 历史
- `get_stock_prospectus` — 招股书

## 输出格式

```markdown
# 上市公司财务深度分析 — {name} ({stockCode})

## 一、上市基本信息
- 股票简称 / 代码: {securityName} / {stockCode}
- 交易所: {exchange}
- 上市日期: {listingDate}
- 总市值 / 总股本: ... / ...

## 二、财务三表（最近 3 期）
### 利润表（核心项）
| 项目 | 上期 | 本期 | 同比 |
|------|------|------|------|
| 营业收入 | | | |
| 净利润 | | | |
| ROE | | | |

### 资产负债表
| 项目 | 上期 | 本期 |
|------|------|------|
| 总资产 | | |
| 总负债 | | |
| 资产负债率 | | |

### 现金流量表
| 项目 | 上期 | 本期 |
|------|------|------|
| 经营性现金流 | | |
| 投资性现金流 | | |
| 筹资性现金流 | | |

## 三、关键财务指标
- 净利率: {netMargin}
- 毛利率: {grossMargin}
- 资产负债率: ...
- 流动比率: ...
- 速动比率: ...
- 基本每股收益（年/季）: ...

## 四、股本结构与变动
- A 股流通比例: ...
- 限售解禁日历: ...
- 历次分红: ...

## 五、股东结构
**十大股东**
| 股东 | 持有数量 | 占比 | 变化 |
|------|---------|------|------|

**十大流通股东**: ...
**参股控股关系**: ...

## 六、董监高与公司治理
（核心高管 + 持股 + 任职）

## 七、违规处理
| 公告日期 | 处罚对象 | 类型 | 金额 |
|---------|---------|------|------|

## 八、IPO 招股书摘要（如适用）
（标题 / 发布日期 / 内容摘要）

## 九、综合投资判断
- 财务健康度评级: AAA / AA / A / B / C
- 公司治理评级: ...
- 主要看点: ...
- 主要风险: ...
```

## 错误处理

- 若 Step 0 候选 = 0 → 终止流程，提示"未找到匹配企业，请提供更完整的名称或 USCC"，不要带着错主体往下跑
- 若 Step 0 候选 ≥ 2 而用户在合理时间内未回复 → 暂存上下文，**不要自行选择**第一条作为锚定（错锚定的代价远大于等待）
- 非上市公司 → 提示"该企业未上市，建议使用 `tyc-financial-data` 看年报财务"
- 部分财报字段缺失 → 标注"该期数据未披露"

## 示例

输入: `searchKey = "贵州茅台"` 或 `"600519"`

---

**新输入形态参考**（Step 0 引入后的三种典型）：

**例 1（USCC 直通，跳过 L0）**：

输入: `userInput = "91110108551385082Q"` → Step 0 判定 USCC，`searchKey = userInput`，直接进 Step 1。

**例 2（完整企业名直通，跳过 L0）**：

输入: `userInput = "北京字节跳动科技有限公司"` → Step 0 判定含 `有限公司` 后缀且长度 ≥ 6，`searchKey = userInput`，直接进 Step 1。

**例 3（简称，必走 L0）**：

输入: `userInput = "字节"` → Step 0 调 `search_companies (searchKey: "字节")`，过滤存续后取 Top 5，向用户列出候选请求确认；用户回复"1"（北京字节跳动科技有限公司）→ `searchKey = items[0].creditCode`，再进 Step 1。

