Skip to content
Back to skills

Credit Watch

ASecurity

Credit monitoring over a window for one issuer or a name list — 到期墙, negative announcements and adverse media, valuation deterioration (估值收益率跳升、利差走阔), and 担保圈 contagion — ranked by severity. Triggers on "信用风险排查", "到期压力", "到期墙", "估值异动", "利差走阔", "有没有负面", "持仓信用监控", "credit watch", "盯一下这几个主体".

  • 6 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added November 7, 2026
ai-agentspythongorails

Security analysis

A100/100

Scanned November 7, 2026

npx -y skills add MuLiuSaMa/MeowCode --skill credit-watch --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Credit Watch?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Credit Watch
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/muliusama-credit-watch/badge)](https://www.skillsdirectory.com/skills/muliusama-credit-watch)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: credit-watch
description: Credit monitoring over a window for one issuer or a name list — 到期墙, negative announcements and adverse media, valuation deterioration (估值收益率跳升、利差走阔), and 担保圈 contagion — ranked by severity. Triggers on "信用风险排查", "到期压力", "到期墙", "估值异动", "利差走阔", "有没有负面", "持仓信用监控", "credit watch", "盯一下这几个主体".
---

# Credit Watch

Ongoing monitoring, not a one-off assessment. The question is what changed in a window and what a reader must act on. Findings are graded; the issuer never is — this skill issues no ratings.

> Valuation-field traps that affect spread-move decomposition are in
> `../bond-profile/references/bond-spread-traps.md`.

## Workflow

### Step 1: Scope the watch

- **Universe**: one issuer, a list of issuers, or a list of bonds. If bonds, resolve each to its issuer with `hexin-bond.bond_basic_info` so the announcement and relationship checks run at the obligor level.
- **Window**: the lookback for events (default: trailing 30 days if unspecified) and the forward horizon for maturities (default: next 12 months). Both are stated in the output header.
- **Today**: resolve from the session context or the user (no clock tool). 同花顺 dates are `yyyyMMdd`.

Confirm the universe and both windows in one line before running; a watch over an unstated window cannot be re-run comparably next time.

### Step 2: Maturity wall — `bond_basic_info`

For every outstanding bond of every name in scope: 到期日, 行权日 where 含权, 债券余额/发行规模, 票面利率, 兑付安排.

- Bucket the forward horizon (未来 1 个月 / 1–3 个月 / 3–6 个月 / 6–12 个月) and sum the amount per bucket per issuer. Those sums are `[测算]` — state that they sum retrieved 余额 fields and name any bond excluded for a missing field.
- A 回售日 inside the horizon is a maturity for this purpose. Show 到期 and 回售 amounts in separate columns and label the total's 口径; a wall that ignores 回售 understates the pressure.
- Concentration is the finding, not the total: a single month holding most of the year's redemptions is what matters. Where a comparison to liquidity is possible from `issuer-credit`'s 货币资金/短期债务, reference it; where it is not, say the wall is presented without a liquidity offset rather than implying one exists.

### Step 3: Negative disclosure and media

1. **公告** — `wind-docs.get_company_announcements` per issuer over the lookback: 评级调整, 兑付/付息公告 and any 延期/展期, 违约或交叉违约, 债务重组, 重大诉讼与被执行, 控股股东质押或变更, 审计意见, 募集资金用途变更, 主体或债项变更. All `[披露]` + `[n]`.
2. **新闻** — `wind-docs.get_financial_news` (issuer name plus 违约/展期/被查/纠纷/评级下调/非标 keywords) over the same window. Anything appearing only here is `[媒体]` and stays `[媒体]` until an announcement corroborates it, at which point it becomes `[披露]` and cites the announcement.
3. A name with no hits is reported once on a `检索范围内未发现` line, never silently omitted. A source that errored for some names says which names.

### Step 3.5: Rating migration and outlook — `bond_special_data`

Step 3 can only find a rating action if a keyword search happens to surface the 评级调整公告. This step reads it as a field instead, per bond: 最新评级变动方向 (上调/下调/维持), 主体评级展望, 债项评级, 主体评级, 评级机构, 评级类型, 最新评级日期.

- **A 变动方向 of `下调` is a 🔴 finding**, and its 评级日期 tells you whether it falls inside the window. A 展望 moved to 负面 is 🟡 — an agency signalling before it acts.
- Where a change is found, go back to `wind-docs.get_company_announcements` for the rating report: the field says *what* changed, the announcement says *why*, and the why is what the reader needs.
- **Read back `主体评级类型` per bond.** On a guaranteed bond the 主体评级 column can return the **guarantor's** rating. A downgrade landing on the guarantor is not the issuer being downgraded — but on a guaranteed structure it is still a finding, reported as the guarantor's and cross-referenced to Step 5's 担保圈 work.
- Rating field unavailable → `源不可用`; queried with no rating on record → `检索范围内未发现`. Neither is `评级稳定`.

Report the agency's action. Do not restate it as our own view of the credit.

### Step 4: Valuation deterioration — `bond_market_data`

One code per call; fan out and merge. For each bond, compare the window's start and end:

- 估值收益率 change (bp) and 利差 change (bp), each stated against the **same** benchmark on both dates. A spread move computed against two different benchmarks is not a move.
- 估价净价 change, and 成交是否活跃 — a yield that jumped with no trading is a valuation mark, not a market print, and is labelled as one.
- Decompose the yield move into the benchmark component and the spread component where the benchmark series is available from `wind-economic.query_economic_indicator_data`. A bond that widened because rates rose is a different finding from one whose spread blew out.
- All deltas are `[测算]` with both dates and the benchmark named. Set and state the thresholds you treat as material (e.g. 利差走阔 ≥ 50bp within the window) rather than calling a move "significant" on feel.
- **Most-leading trigger**: a 估值收益率 single-day jump (e.g. ≥ 50bp) is the earliest market signal that credit is repricing — it leads the announcement record. Flag it as a leading finding that warrants an immediate re-check of the name, even before any announcement appears.

### Step 5: Guarantee-circle contagion — 天眼查 (capability-list tools)

Distress travels along the relationship graph before it reaches the issuer's own statements.

- Pull 股权链 (股东/对外投资/兄弟公司) and 资金链 for each name in scope.
- Re-run Step 3's announcement and news checks on the material guarantors, the controlling shareholder, and any sibling already flagged. A hit on a guarantor is a finding **about the watched name**, recorded in its row with the relationship stated.
- Where two or more watched names share a controller or a guarantee ring, say so explicitly — their findings are correlated and must not be read as independent.
- The relationships are `[披露]`; the contagion argument is `[推断]` with its chain spelled out.

### Step 5.5: Portfolio-level concentration (name/bond lists)

For a list scope (not a single issuer), concentration is itself a monitored risk, not just a per-name view:

- **发行人集中度** — outstanding exposure by issuer across the list; a list dominated by one obligor carries that obligor's risk regardless of per-name grades.
- **区域集中度 (城投)** — for platform names, bucket by 省/地市. A list heavy in one region shares that region's refinancing environment; when one platform in a region is distressed, its peers are correlated, not independent.
- Both are `[测算]` over retrieved 余额; name any bond excluded for a missing field. State this is exposure concentration, not a default forecast.

### Step 6: Grade the findings

Per the severity policy. Grade **findings, never issuers** — this plugin issues no ratings, no outlooks, no default probabilities. Cap the front of the deliverable at **three 🔴**; everything else lives in the body. If more than roughly a third of findings are 🔴, the scale is being used for emphasis and needs re-ranking.

- `🔴 高`(决策前须澄清): 违约/展期/交叉违约公告、评级下调公告、非标审计意见、控制人被查或失信被执行、窗口内利差走阔超阈值且无基准解释、未来 1 个月集中到期且无可证流动性对应、担保圈内主体已违约.
- `🟡 中`(记录并跟踪): 未来 1–3 个月到期集中、利差温和走阔、大额新增担保、密集负面舆情未获公告佐证、重大诉讼进展、大股东质押比例上升.
- `⚪ 低·信息`: 常规兑付与付息公告、小额到期、历史已了结事项、无异动确认.

**Leading-lag lens (cross-cutting, does not change the severity glyph).** Alongside its grade, tag each signal by how early it moves, because a leading signal on a 🟡 finding can warrant action sooner than a lagging 🔴:
- **领先**: 估值收益率跳升 / 利差走阔, 负面舆情未获公告佐证 — the market and the rumour move first.
- **同步**: 评级调整 / 兑付·展期 / 诉讼·被执行 公告 — the official record.
- **滞后**: 已发生的违约事件、外部评级下调(常为确认信号) — confirmation, not warning.
State the tag next to material findings so a reader sees not just how bad but how early.

### Step 7: Output

Short-form Markdown in-session by default. A multi-name maturity-and-move matrix goes to .xlsx via `xlsx-author`; a written watch report goes to PDF via `report-render`. State the choice in one clause. Word is the answer only when the user asks for it or the reader will edit the file — `report-render`'s `DocxReport` builds it with the same calls; unspecified long-form stays PDF (the house formatting policy). **要出 Word 就先载入 `report-render` 技能,再动手建。** `DocxReport` 与 `Report` 同一套调用;手搓 python-docx / docx-js 会丢掉标签配色、`[n]` 跳转与封面页,机制与实测记录在那个技能里,不在这里重述。

```
**信用监控 — [名单名/主体名]**
范围: [N] 个主体 / [M] 只债券 · 事件窗口: [起]—[止] · 到期观察期: [起]—[止] · 检索于: [timestamp]
标签口径: [披露] 公告或系统披露 · [测算] 本文推导 · [预期] 第三方具名预期(数据商一致预期,非同业券商测算) · [推断] 分析师推论 · [媒体] 媒体报道未经记录佐证

**需要决策的发现**(至多 3 条; 分级给到单条发现, 不给到主体本身)
🔴 高 [主体/债券] — [一句话] · [日期] [n]
   影响: [一两句; 自行推导的数字标 [测算] 并写公式, 自行的判断标 [推断]]
🟡 中 ...
⚪ 低·信息 [主体A/B/C]: [归并的一行]

**一、到期与回售压力**(观察期 [起]—[止]; 单位 [亿元])
| 主体 | ≤1 个月 | 1–3 个月 | 3–6 个月 | 6–12 个月 | 其中回售 | 合计 | 说明 |
|---|---|---|---|---|---|---|---|
|  |  |  |  |  |  |  | [测算] 加总已取到的债券余额; 缺字段个券: [列明] |

**二、负面披露与舆情**(窗口 [起]—[止])
| 主体 | 事项 | 日期 | 标签 | 分级 |
|---|---|---|---|---|
|  |  |  | [披露]/[媒体] [n] | 🔴/🟡/⚪ |
检索范围内未发现事项的主体: [列表]

**三、估值异动**([起] vs [止]; 基准 [曲线名], 两日同一基准)
| 债券 | 估值收益率变动(bp) | 利差变动(bp) | 其中基准贡献(bp) | 是否有成交 | 分级 |
|---|---|---|---|---|---|
|  | [测算] | [测算] | [测算] | [披露] | 🔴/🟡/⚪ |
重大性阈值: [写明本次采用的 bp 阈值及理由]

**四、担保圈与关联传染**
| 被监控主体 | 关联主体 | 关系 | 关联主体的事项 | 传导判断 |
|---|---|---|---|---|
|  |  | 股东/兄弟/担保对手/资金往来 [披露] [n] | [披露]/[媒体] [n] | [推断] |
共担保圈或共控制人的被监控主体: [列明; 其发现相关, 不可视作相互独立]

**五、组合集中度**(仅名单/组合口径; 单主体略)
| 维度 | 前 N 集中 | 说明 |
|---|---|---|
| 发行人集中度 | [测算] | 按发行人加总余额; 缺字段个券: [列明] |
| 区域集中度(城投) | [测算] | 按 省/地市 加总; [列明区域] |
(为敞口集中度,非违约预测)

## 覆盖范围与局限
检索于: [timestamp] · 事件窗口: [起]—[止] · 到期观察期: [起]—[止] · 口径/委托用途: [如 持仓信用监控]

| 检查项 | 结论 | 源 | 检索于 |
|---|---|---|---|
| 存续债与到期/回售安排 | 有记录 [n] / 检索范围内未发现 / 源不可用 | 同花顺 hexin-bond.bond_basic_info | [date] |
| 发行人公告 |  | 万得 wind-docs.get_company_announcements | [date] |
| 财经新闻 |  | 万得 wind-docs.get_financial_news | [date] |
| 负面舆情 |  | 万得 wind-docs.get_financial_news | [date] |
| 估值与利差变动 | 有记录 [x]/[M] 只 / 源不可用 [y] 只 | 同花顺 hexin-bond.bond_market_data | [date] |
| 评级变动方向与展望 | 有记录 [x]/[M] 只 / 检索范围内未发现 / 源不可用 | 万得 wind-bond.get_bond_issuer_info | [date] |
| 基准曲线(用于拆解) |  | 万得 wind-economic.query_economic_indicator_data (指标名与 code) | [date] |
| 股权链/担保圈/资金往来 |  | 天眼查 | [date] |
| 组合集中度(发行人/区域) | 有记录 [测算] / 不适用(单主体) | 本文测算(基于 hexin-bond.bond_basic_info) | [date] |

本次未能覆盖: [不可用的源与主体, 以及它们本应覆盖的检查项]
数据滞后性: [公告披露滞后、判决上网滞后、估值日频滞后、关联关系数据更新滞后]
本插件不出具自己的评级、评级展望或违约概率;上表评级字段为评级机构的评级,已注明机构与评级日期;"检索范围内未发现"仅指上述源在该窗口内无记录, 不构成无风险、无违约风险或通过的结论。

## 来源
[n] 〔一手|二手〕发布主体 · 文档或系统名 · 日期(发布日; 检索于) · URL
```

## Guardrails

- Do not invent example numbers, thresholds, or events. Every value in the template is a placeholder; a bond whose 余额 could not be retrieved is named and excluded from the sum, not estimated into it.
- Never grade an issuer. Every glyph attaches to a dated, cited finding.
- A source that errored, timed out, or does not cover a name is `源不可用` and named as such — never folded into `未发现`, which would overstate coverage.
- Dates are `yyyyMMdd`; `bond_market_data` takes one code per call. Never invent an indicator or EDB name.
- If the user wants this recurring (每周一 / 每月初), set it up with the host's scheduler and state the cadence — do not silently promise future scans. Persist the watched name list per the the state-file convention convention (`triggers/<name>.json`) so the next run re-evaluates the same universe comparably.
- `[n]` markers map one-to-one onto `## 来源` entries; the distinct marker count equals the entry count. `〔一手|二手〕` is mandatory and a `二手` entry names what it relays.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.