gangtise-openapi-cli 0.47.0 → 0.49.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,16 +1,16 @@
1
1
  ---
2
2
  name: gangtise-openapi
3
- version: "0.47.0"
3
+ version: "0.49.0"
4
4
  description: |-
5
5
  通过 gangtise CLI 直接调用 Gangtise OpenAPI,拉取投研原始数据、批量导出、下载文件、调用 AI 能力。
6
6
 
7
7
  **触发词**:Gangtise / 冈底斯 / 岗底斯 / gtIC(Gangtise 语音误识别)/ 调接口 / CLI / openapi / 导出 / 下载研报 / 批量查 / 拉数据 / 跑一下 / 研报 / 纪要 / 公告 / K线 / 财报 / 估值 / 选股 / 债券 / 基金 / ETF
8
8
 
9
- **适用**:原始数据导出、批量 jsonl/csv、下载 PDF/MD、行情 K 线、财务报表、估值指标、证券级数据指标(EDE 截面/时序/条件选股)、财报日历(业绩预告/快报/公告)、会议线索、帕米尔专家纪要、资金流向、题材与板块、债券(资料/行情/估值/评级/公告)、公募基金(资料/净值/费率/经理/规模/持有人/持仓与配置/ETF 申赎)、联网搜索、PDF 解析为 Markdown、AI 能力(一页通/投资逻辑/同业对比/个股看点·投研总结/投研线索/业绩点评/观点PK·多空辩论/主题跟踪/热点话题/管理层讨论/调研提纲/知识库搜索)、云盘文件管理(Vault)
9
+ **适用**:原始数据导出、批量 jsonl/csv、下载 PDF/MD、行情 K 线、财务报表、估值指标、证券级数据指标(EDE 截面/时序/条件选股)、财报日历(业绩预告/快报/公告)、会议线索、帕米尔专家纪要、资金流向、题材与板块、债券(资料/行情/估值/评级/公告/违约)、公募基金(资料/净值/费率/经理/规模/持有人/持仓与配置/ETF 申赎)、联网搜索、PDF 解析为 Markdown、AI 能力(一页通/投资逻辑/同业对比/个股看点·投研总结/投研线索/业绩点评/观点PK·多空辩论/主题跟踪/热点话题/管理层讨论/管理层情绪/调研提纲/知识库搜索)、云盘文件管理(Vault)
10
10
 
11
11
  **不适用**:不脱离 OpenAPI 自行撰写研报、编造投研结论或做自由问答——观点总结、多空 PK 等 AI 产物本 skill 只经由 Gangtise 平台 AI 接口获取,不自行生成
12
12
 
13
- **前置**:依赖 gangtise CLI,未安装时提示用户 `npm install -g gangtise-openapi-cli`
13
+ **前置**:依赖 gangtise CLI,未安装时提示用户 `npm install -g gangtise-openapi-cli`;升级用 `gangtise update`
14
14
  ---
15
15
 
16
16
  # Gangtise OpenAPI CLI
@@ -36,7 +36,7 @@ description: |-
36
36
  - K 线全市场关键字(`aShares` / `hkStocks` / `usStocks`;旧命令 `all`)跨日期 → 自动按日切片并合并,粒度按各市场单日行数定(A 1 个工作日 / 港 2 个工作日 / 美 1 个工作日)
37
37
  - 5xx / `429` / 网络错误 / `999999` → 自动指数退避重试(🔴 贵档端点例外:仅连接失败 / 429 / token 自愈重试,5xx/超时不重放防重复扣分;`indicator` 端点对 `999999` 不重试)
38
38
  - Token 失效 → 自动换用已刷新的 token 或重新登录,再重发;凭证错 `999011` → **不重试**(AK/SK 不对不会自己好),查环境变量
39
- 8. **参数命名差异**:`--security-code` 只用于 **Fundamental 全组、AI 单证券生成类**(`one-pager` / `investment-logic` / `peer-comparison` / `earnings-review` / `research-outline` / `management-discuss-*`)**与 `insight qa list`**;`ai security-clue` 用 `--gts-code`;`fund manager-info` 按人名查、用 `--manager`;其余(Insight 其他命令、Quote、Vault、Bond、Fund、Indicator、`ai stock-summary`)一律用 `--security`。
39
+ 8. **参数命名差异**:`--security-code` 只用于 **Fundamental 全组、AI 单证券生成类**(`one-pager` / `investment-logic` / `peer-comparison` / `earnings-review` / `research-outline` / `management-discuss-*`)**与 `insight qa list`**;`ai security-clue` 用 `--gts-code`;`fund manager-info` 按人名查、用 `--manager`;其余(Insight 其他命令、Quote、Vault、Bond、Fund、Indicator、`ai stock-summary`、`ai management-sentiment-indicator` / `-conclusion`)一律用 `--security`。
40
40
  9. **调试**:`--verbose` 或 `GANGTISE_VERBOSE=1` 打印每个请求的耗时/字节数到 stderr。
41
41
  10. **`--field` 字段名必须核对,不确定就别传**(返回全量最稳)。上游对不存在的字段名:`quote` 系(realtime / day-kline / minute-kline / fund-flow)名和值一起丢、不报错——CLI 比对请求与返回的列名,缺列标 `partial` + `missingFields` 并退出 3;`fundamental main-business` / `valuation-analysis` 报 `100005`、`bond` / `fund` 报 `100003`,都会点名写错的名字。CLI 另检查每行的值个数与字段数,对不上直接报错退出 1,报障时带上报错末尾的 `(trace …)`。多只证券或全市场时,缺的身份列 CLI 会补到最前(日 K 补 `securityCode` / `tradeDate`、分钟 K 补 `securityCode` / `tradeTime`、realtime 补 `securityCode`);单只不补。realtime **无 `close`**(用 `latestPrice`)、**无市值**(总市值走 `indicator cross-section --indicator qte_mkt_cptl`,A/港/美股均有数)。
42
42
  11. 🔴 **EDE(`indicator` 截面 / 时序 / 选股)取不到数返 `null` 占位、行列都保留、退出码 0**;代码写错才报 `100003` 并指名。报告期类指标(`is_*` 等)的日期一律落**报告期末**(`03-31` / `06-30` / `09-30` / `12-31`),截面用 `--indicator-param "<指标code>:reportDate=YYYY-MM-DD"`(`screener` 用 `"F1:reportDate=..."`)——日期不在报告期末时整批 `null`,`screener` 筛出空集是**日期用错,不是没有符合条件的标的**。时序按日返回、只有报告期末那几行是真值,**别对整列直接求均值 / 求和**。**`--calendar-type` 默认别传**(CLI 自动选日期轴;显式传 `TD` 会让报告期类指标整行 `null`)。详见 `references/commands/indicator.md`。
@@ -66,7 +66,7 @@ description: |-
66
66
  - 公司名 → 先速查表,否则 `reference securities-search`
67
67
  - opaque ID → 先 `references/lookup-ids.md`
68
68
  - 模糊时间词 → 查"时间词映射"
69
- - 列表类命令用户没要求全量 → 按单价主动加 `--size` 兜底(不必问):免费或 0.1 积分/条的列表用 `--size 200`;**≥1 积分/条的(观点、独立观点、路演四件套、会议线索、个股线索、热点话题等)用 `--size 20`**,要更多先 `--size 1` 看 stderr 的 `Total` 估总价再定。CLI 省略 `--size` 会拉全量;按条计费的列表估算全量超过 1000 积分时报错退出(报错里有估算积分),此时把估算积分告诉用户,确认后加 `--yes` 重跑或改传较小的 `--size N`。**显式 `--size` 本身估算超过 1000 积分也同样拦截**(别用 `--size 100000` 当「全量」绕过),`fundamental earning-forecast` 按日期区间估算、同一条线
69
+ - 列表类命令用户没要求全量 → 按单价主动加 `--size` 兜底(不必问):免费或 0.1 积分/条的列表用 `--size 200`;**≥1 积分/条的(观点、独立观点、路演四件套、会议线索、个股线索、热点话题、管理层情绪等)用 `--size 20`**,要更多先 `--size 1` 看 stderr 的 `Total` 估总价再定。CLI 省略 `--size` 会拉全量;按条计费的列表估算全量超过 1000 积分时报错退出(报错里有估算积分),此时把估算积分告诉用户,确认后加 `--yes` 重跑或改传较小的 `--size N`。**显式 `--size` 本身估算超过 1000 积分也同样拦截**(别用 `--size 100000` 当「全量」绕过),`fundamental earning-forecast` 按日期区间估算、同一条线
70
70
  - 预估结果 >200 行 → 别全量 `--format json` 引进上下文,改 `--format jsonl --output <file>` 落盘(行边取边写、内存不随行数增长,stdout 只回显文件路径),再 `wc -l` + `head` 采样呈现。落盘的 `csv` / `jsonl` 旁边会有 `<file>.meta.json`:`complete` / `rows` / `result.partial` 与缺失项标记都在里面,转交文件时一并给、核验完整性先看它(`complete: false` = 那次导出退出码 3)
71
71
  - 路由到 AI 同步生成命令 → 同步生成类(`one-pager` / `investment-logic` / `peer-comparison` / `research-outline` / `theme-tracking` / `management-discuss-*`)CLI 已内置 120s 超时下限,无需前缀;`stock-summary` 同样有 120s 下限;`hot-topic` 仍建议前置 `GANGTISE_TIMEOUT_MS=120000`。**贵档端点超时/5xx 不自动重试**(重放=重复扣分)——超时报错后内容可能已在服务端生成并扣费,同参数再调仍会**再扣一次**(无缓存豁免),所以一次调用给足超时比失败重跑省钱。`earnings-review` / `viewpoint-debate` 是异步(`--wait` 或 `*-check` 轮询),不吃这个超时
72
72
  - "AI速记/智能摘要/会议纪要"→`summary`、"原始文件/原文件"→`original`、"语音识别/转写文本/ASR"→`asr` — 用户已明示时直接映射 content-type,不必问
@@ -77,19 +77,19 @@ description: |-
77
77
 
78
78
  - **免费**:所有 `quote` 行情、`fundamental` 报表/主营/估值/股东(**盈利预测除外**)、`reference`/`constant` 查询(含 `official-account-search`)、`alternative edb-search`、`vault`(record/wechat/股票池/drive/AI云盘,含云盘上传与目录管理)、`insight report-image list`
79
79
  - **0.1/条 list**:research / foreign-report / official-account / announcement(A/港/美) / summary / qa / performance-calendar 的 list、`vault my-conference-list`;`insight report-image download` 0.1/张
80
- - **按条(观点/含详情类 list)**:`ai security-clue` 5;roadshow/site-visit/strategy/forum list 10;independent-opinion list 1;**opinion / foreign-opinion list 1(只含摘要 `brief`)**,要正文用 `detail` 30/条或 `list --with-content` 30/条;`fundamental earning-forecast` 0.5;`ai stock-summary` 1(无看点的证券不返回也不扣);`alternative edb-data` 30/指标
80
+ - **按条(观点/含详情类 list)**:`ai security-clue` 5;`ai management-sentiment-indicator` / `-conclusion` 5;roadshow/site-visit/strategy/forum list 10;independent-opinion list 1;**opinion / foreign-opinion list 1(只含摘要 `brief`)**,要正文用 `detail` 30/条或 `list --with-content` 30/条;`fundamental earning-forecast` 0.5;`ai stock-summary` 1(无看点的证券不返回也不扣);`alternative edb-data` 30/指标
81
81
  - **各 download(/篇)**:official-account / research 10;announcement 1;announcement-hk / announcement-us 2;independent-opinion / summary / foreign-report / my-conference 30;`performance-calendar download` A 股 1 / 港美股 2
82
82
  - **0.4 的 `bond` 系**:`bond` 全部命令 **0.4/次**(按次,与返回行数无关),三个例外按量计:`rating-overview` 0.4/**条**、`rating-change` 0.4/**只有数据的债券**、`issuer-rating-change` 0.4/**个发行人**
83
83
  - **0.4 的 `fund` 系**:`fund` 全部命令 **0.4/次**(按次,与返回行数、基金只数无关)——多只基金合并成一次调用最省
84
84
  - **`tool web-search` 1/次**(按次,与返回条数、是否带 `--include-content` 无关;零结果与报错不扣)
85
85
  - 🔴 **`insight highlight list` 5/条**——**按返回条数计**,`--size 20` 的一页 = 100 积分。省略 `--size` 时 CLI 先估算,超过 1000 积分(约 200 条)报错退出,要全量须加 `--yes`
86
86
  - **按页**:`tool file-parse` 0.8/页,**提交(`--file`)时按实际页数一次性扣**,取结果(`file-parse-check`)免费——50 页 PDF = 40 积分,别重复提交同一文件
87
- - 🔴 **按次**:`ai knowledge-batch` 10、`management-discuss-earnings-call` 10、`management-discuss-announcement` 5;AI Agent `one-pager` / `investment-logic` / `peer-comparison` / `research-outline` / `theme-tracking` **10/次**,`earnings-review` / `viewpoint-debate` **20/次**
87
+ - 🔴 **按次**:`ai knowledge-batch` 10、`management-discuss-earnings-call` 10、`management-discuss-announcement` 5、`management-sentiment-detail` 10;AI Agent `one-pager` / `investment-logic` / `peer-comparison` / `research-outline` / `theme-tracking` **10/次**,`earnings-review` / `viewpoint-debate` **20/次**
88
88
  - 🔴 **`ai hot-topic` 10/篇,按返回条数计**(不是按调用次数)。📌 **一「篇」= 一整份报告**(一份早报 / 午报 / 盘中快报 / 晚报),**不是报告里的一条话题**——一份报告通常包含多条热点话题。所以 `--size 20` 的一页 = 最多 20 份报告 = 200 积分,**先用 `--start-date`/`--end-date` + `--category` 收窄再拉**,别省略 `--size` 直接全量。**可查的历史范围是前溯 3 个月**(各档相同)——超出范围的日期返回空结果而不是报错,拿到空先想想是不是撞了权限窗口
89
89
  - **题材**:`alternative concept-info` / `concept-securities` **50/次**;🔴 加 `--full`(催化事件 / 重点个股标识 / 纳入理由)走旧版 **500/次**,不需要这几列就别加
90
90
  - ✅ **扣费发生在接口成功返回数据之后**(平台计费规则):没查到内容(空结果)、报错都不扣分——各 download、`ai hot-topic`(10/篇)、`ai stock-summary`(1/条,无看点总结的个股不进返回列表也不计费)、AI 生成类(`one-pager` 等 10~20/次),以及按次计费的 `ai knowledge-batch`、题材、`tool web-search` 都是这样。**所以「先小范围试探再放大」是安全的**——先用窄条件确认能查到东西,再扩范围。⚠️ **「成功返回」按服务端算**:超时报错时服务端可能已经生成并返回了内容(只是客户端没收到),这次已经扣过,同参数重调会再扣一次;异步的 `earnings-review` / `viewpoint-debate` 在提交成功(拿到任务 ID)时就扣,之后生成失败不退。**单价未公布的** `pamirs-summary`(见下)别据此假定
91
91
  - ⚠️ **同参数重复调用不免费**:按次计费的那批无缓存命中豁免(`one-pager` 等生成类重复调用每次扣分,即使秒回缓存内容);**按篇/按条的也一样**——重拉同一批 `hot-topic` 就是按条数再计一次费。生成类与列表结果拿到后自行留存复用,别为「刷新」重调
92
- - ⚠️ **这些端点超时 / 5xx 不自动重放**(共 64 个,完整清单见下方注释块:按次计费的 AI Agent 那批、`ai knowledge-batch` / `management-discuss-*` / `hot-topic`、题材两接口(含 `--full`)、`bond` 与 `fund` 全部命令、`tool web-search`、`tool file-parse` 提交;summary / foreign-report / my-conference 三个 download;按条计费的 `insight highlight list`、观点 `detail` / `list --with-content`、`ai stock-summary` 与 `fundamental earning-forecast`;以及不计分但重放有副作用的 `vault stock-pool-create` 与云盘上传 / 新建文件夹 / 复制 / 删除)。仅连接失败、429 与 token 自愈会重试。服务端可能已经执行并计费,重放会重复扣分、多建一份或把成功报成失败——**一次调用给足超时比失败重跑省钱**
92
+ - ⚠️ **这些端点超时 / 5xx 不自动重放**(共 66 个,完整清单见下方注释块:按次计费的 AI Agent 那批、`ai knowledge-batch` / `management-discuss-*` / `management-sentiment-detail` / `hot-topic`、题材两接口(含 `--full`)、`bond` 与 `fund` 全部命令、`tool web-search`、`tool file-parse` 提交;summary / foreign-report / my-conference 三个 download;按条计费的 `insight highlight list`、观点 `detail` / `list --with-content`、`ai stock-summary` 与 `fundamental earning-forecast`;以及不计分但重放有副作用的 `vault stock-pool-create` 与云盘上传 / 新建文件夹 / 复制 / 删除)。仅连接失败、429 与 token 自愈会重试。服务端可能已经执行并计费,重放会重复扣分、多建一份或把成功报成失败——**一次调用给足超时比失败重跑省钱**
93
93
 
94
94
  <!-- no-replay-endpoints
95
95
  上面那句点名的「不重放」端点,完整清单如下(endpoint key,与 `gangtise raw list` 一致):
@@ -99,6 +99,7 @@ ai.investment-logic
99
99
  ai.knowledge-batch
100
100
  ai.management-discuss-announcement
101
101
  ai.management-discuss-earnings-call
102
+ ai.management-sentiment-detail
102
103
  ai.one-pager
103
104
  ai.peer-comparison
104
105
  ai.research-outline
@@ -113,6 +114,7 @@ bond.announcement
113
114
  bond.basic-info
114
115
  bond.cash-flow
115
116
  bond.daily-quote
117
+ bond.default-list
116
118
  bond.exercise-notice
117
119
  bond.issuance-detail
118
120
  bond.issuance-plan
@@ -190,6 +192,8 @@ vault.stock-pool.create
190
192
  | `ai hot-topic` / `security-clue` | **3 个月** | 3 个月 |
191
193
  | `ai theme-tracking` | **1 个月** | 1 个月 |
192
194
  | `ai management-discuss-*` | **1 年** | 1 年 |
195
+ | `ai management-sentiment-indicator` / `-conclusion` | **1 年** | 6 个月 |
196
+ | `ai management-sentiment-detail` | 按 `--source-id` 取整场,不按日期限制 | 同正式 |
193
197
  | `ai earnings-review` | 最近 6 期财报 | 同正式 |
194
198
  | `ai one-pager` / `investment-logic` / `peer-comparison` / `research-outline` / `viewpoint-debate` / `stock-summary` | 最新截面 | 最新截面 |
195
199
  | `ai knowledge-batch` | **不限** | 不限 |
@@ -248,6 +252,7 @@ vault.stock-pool.create
248
252
  | 热点话题 / 早午晚报 | `ai hot-topic` |
249
253
  | 管理层讨论(财报) | `ai management-discuss-announcement` |
250
254
  | 管理层讨论(业绩会) | `ai management-discuss-earnings-call` |
255
+ | 管理层情绪 / 业绩会问答是否回避 · 乐观 · 确定 / 情绪较上一场的变化 | `ai management-sentiment-indicator`(三维评分,5/条)/ `ai management-sentiment-conclusion`(结论文本与较上一场的对比,5/条);逐条问答与判断依据 → `ai management-sentiment-detail --source-id <source.sourceId>`(10/次) |
251
256
  | 日 K(历史,A 股 / 港股 / 美股 / 沪深 ETF / 各类指数含全球指数,可混查) | `quote day-kline` |
252
257
  | 沪深京指数日 K / 要指数名称 | `quote day-kline` 逐个传指数代码(**没有一次拿全部指数的写法**,`index-day-kline --security all` 会被 CLI 拒绝);指数名称用 `reference securities-search --keyword <指数代码> --category index`(返回 `gtsName`) |
253
258
  | ~~港股 / 美股日 K~~ | ⚠️ 已弃用,用 `quote day-kline`(`day-kline-hk` / `day-kline-us` 仍可调但不校验代码) |
@@ -272,19 +277,20 @@ vault.stock-pool.create
272
277
  | 评级调整 / 评级变动历史 | `bond rating-change`(债项评级,最多 10 只)、`bond issuer-rating-change`(主体评级,`--security` 或 `--issuer` 二选一) |
273
278
  | 利率债发行计划 / 国债发行安排 | `bond issuance-plan`(**只按日期区间查,不收债券码**) |
274
279
  | 含权债行权 / 回售 / 赎回提示 | `bond exercise-notice` |
280
+ | 违约债券 / 债券违约记录 / 某主体违约历史 | `bond default-list`(违约日期区间〔两端都给、不超过 1 年〕/ `--security` / `--issuer` **三选一**;`--issuer` 一次一个,用发行人**全称**并核对返回的 `issuerName`) |
275
281
  | 基金资料 / 基金分类 / 管理人 / 成立日 / 业绩基准 / 跟踪指数 / 风险等级 | `fund basic-info`(`--security` 用 `005827.OF` / `159967.SZ` 这类带后缀代码;只知道名称时用 `reference securities-search --keyword <基金简称或 6 位代码> --category fund` 换代码(**只取 `category` 为 `fund` 的行**,结果里可能混有债券、债券代码查基金返回空结果;没有就换更具体的简称;场内场外都能搜到;全称常搜不到;不同份额与场内 / 场外代码会一起返回,按 `gtsName` 区分);`--field` 写错**整批拒绝** `100003`) |
276
282
  | 基金净值 / 复权净值 / 区间收益 / 货币基金七日年化 | `fund nav`(算收益用 `navAdjusted`) |
277
283
  | 基金费率 / 管理费 / 申购赎回费 | `fund fee-rate`(`feeRate` 是字符串) |
278
284
  | 基金经理画像(按人名) | `fund manager-info --manager <姓名>`(精确匹配,同名全返回,用 `currentCompany` 区分) |
279
285
  | 某只基金的历任 / 现任经理 | `fund manager-history`(`endDate` 为 `null` = 现任) |
280
286
  | 基金规模 / 份额变动 / 申赎份额 | `fund asset-size`(报告期口径);ETF 逐日份额与规模 → `fund etf-share-change` |
281
- | 基金持有人结构 / 机构占比 / 前十大持有人 | `fund holder-structure`(`holderCount` 是带千分位的字符串)、`fund top10-holders`(仅上市基金) |
287
+ | 基金持有人结构 / 机构占比 / 前十大持有人 | `fund holder-structure`、`fund top10-holders`(仅上市基金) |
282
288
  | 基金资产配置 / 股票仓位 / 债券仓位 | `fund asset-allocation` |
283
289
  | 基金重仓股 / 全部持股 / 持仓明细 | `fund stock-portfolio`(`--position-type all` 仅中报、年报有;只返回股票简称、无代码) |
284
290
  | 基金行业配置 / 行业分布 | `fund industry-allocation`(申万 / 中信一级二选一) |
285
291
  | 基金持债 / 券种分布 | `fund bond-portfolio` / `fund bond-type-allocation` |
286
292
  | FOF 持有的基金 / 持有基金类型分布 | `fund fund-portfolio` / `fund fund-type-allocation` |
287
- | ETF 申购赎回清单 / 成分股 / 现金差额 | `fund etf-pcf-components` / `fund etf-pcf-header`(**只有最新一份清单**,无历史) |
293
+ | ETF 申购赎回清单 / 成分股 / 现金差额 | `fund etf-pcf-components` / `fund etf-pcf-header`(**只有最新一份清单**,无历史;成分代码 `componentCode` 由 CLI 按名称匹配补上,现金行等匹配不到的为 `null`) |
288
294
  | 会议线索 / 会议要点 / 核心结论信息流 / 今天有什么会 | `insight highlight list`(🔴 **5 积分/条**,必须带 `--size`;`content` 是 HTML 片段) |
289
295
  | 联网搜索 / 查公开信息 / 政策原文 / 传闻核实 | `tool web-search`(1 积分/次;`--site` 定向站点、`--min-tier` 收信源、`--include-content` 取正文〔此时 `--size` ≤5〕) |
290
296
  | 云盘文件 | `vault drive-list / drive-download` |
@@ -300,6 +306,7 @@ vault.stock-pool.create
300
306
  | 题材画像 / 投资逻辑 / 行业空间 / 竞争格局 | `alternative concept-info`(前置:`reference concept-search` 拿 `concept-id`;50/次);**要催化事件**加 `--full`(500/次) |
301
307
  | 题材成分股 / 题材深度 F8 | `alternative concept-securities`(前置同上;50/次);**要重点个股标识 / 纳入理由**加 `--full`(500/次) |
302
308
  | 多证券已实现财务 / 估值指标搜索(含总市值) | `indicator search` |
309
+ | 多只基金批量取分类 / 复权净值 / 风险收益指标(夏普 / 最大回撤 / Alpha / Beta / 同类排名) | `indicator cross-section`(`--security` 传基金代码;指标与必填参数见 `indicator.md`「基金指标」) |
303
310
  | 多证券已实现指标截面(多指标 × 多证券,同一查询日期) | `indicator cross-section`(前置:`indicator search --format json` 通过三项校验) |
304
311
  | 多证券已实现指标时序(单指标 × 多证券,按区间) | `indicator time-series`(前置:`indicator search --format json` 通过三项校验) |
305
312
  | 条件选股 / 按指标筛股票(市值+PE+经营范围等多条件组合) | `indicator screener`(前置:`indicator search` 拿 code;范围可传板块 ID,见 `reference sector-search`) |
@@ -318,6 +325,7 @@ vault.stock-pool.create
318
325
  - "搜索 X" → 数据维度精确(按行业/券商)走对应 `insight ... list`;跨类型语义搜索走 `ai knowledge-batch`
319
326
  - 港股代码用在 `insight foreign-opinion --security` 还是 `quote day-kline --security`?前者要"境外"格式(`UBER.N`),后者要 `.HK`
320
327
  - "基金" → `fund` 命令组(资料 / 净值 / 持仓 / ETF 申赎);`quote fund-flow` 是 **A 股个股资金流向**,与基金无关。ETF 的日 K 与实时行情仍走 `quote day-kline` / `realtime`,ETF 净值、份额与申赎清单走 `fund`
328
+ - "管理层" → 讨论内容(财报管理层讨论、业绩会要点)走 `ai management-discuss-*`;问答里的态度(是否回避、乐观还是风险、表述是否确定)走 `ai management-sentiment-*`
321
329
  - "成分股" → 题材深度(分组;重点标记/纳入理由需 `--full`)走 `alternative concept-securities`;板块(行业/概念分类树,纯代码名单)走 `reference sector-constituents`
322
330
  - **证券指标按任务形态路由,不是搜到 EDE 就一律走 EDE**(细节见 `references/commands/indicator.md`):
323
331
  - 单证券 → 优先 `fundamental` 专用命令(多数免费 / 低价);多证券批量取**已实现**指标 → `indicator`(EDE)一次拉取:同一日期 / 报告期横比用 `cross-section`,区间走势用 `time-series`(不能多指标 × 多证券同时)
@@ -397,7 +405,7 @@ gangtise reference securities-search --keyword <公司名> --category stock --to
397
405
 
398
406
  🔴 **`--end-time` 写到当天末尾 `23:59:59` 最稳**:A 股公告与 `knowledge-batch` 只写日期时 CLI 按当日 23:59:59 换算;其余列表把时间串原样交给接口,写全时间才不依赖接口对「只有日期」的理解。
399
407
 
400
- 日期参数**按参数名判断、不按命令组**:名字带 `-date` 的(`--start-date` / `--end-date` / `--date` / `--report-date`)收年在前日期(`YYYY-MM-DD` 首选,`YYYY/MM/DD` / `YYYYMMDD` 也收);名字带 `-time` 的(`--start-time` / `--end-time`)收年在前日期 + 可选 ` HH:mm[:ss]`(空格或 `T` 分隔)或 10 / 13 位时间戳。易错:Insight / Vault 各 list 用 `-time`,**唯独 `insight performance-calendar` 用 `-date`**;AI 组两种都有(`theme-tracking --date`、`hot-topic` / `management-discuss-*` 用 `-date`,`security-clue` / `knowledge-batch` 用 `-time`);`quote minute-kline` 用 `-time`,其余 Quote / Fundamental / Indicator / `bond` / `fund` / `edb-data` 用 `-date`。拿不准看该命令 `--help`。
408
+ 日期参数**按参数名判断、不按命令组**:名字带 `-date` 的(`--start-date` / `--end-date` / `--date` / `--report-date`)收年在前日期(`YYYY-MM-DD` 首选,`YYYY/MM/DD` / `YYYYMMDD` 也收);名字带 `-time` 的(`--start-time` / `--end-time`)收年在前日期 + 可选 ` HH:mm[:ss]`(空格或 `T` 分隔)或 10 / 13 位时间戳(`ai management-sentiment-indicator` / `-conclusion` 写时刻必须带秒,`HH:mm` 报 `110001`)。易错:Insight / Vault 各 list 用 `-time`,**唯独 `insight performance-calendar` 用 `-date`**;AI 组两种都有(`theme-tracking --date`、`hot-topic` / `management-discuss-*` 用 `-date`,`security-clue` / `knowledge-batch` / `management-sentiment-indicator` / `-conclusion` 用 `-time`);`quote minute-kline` 用 `-time`,其余 Quote / Fundamental / Indicator / `bond` / `fund` / `edb-data` 用 `-date`。拿不准看该命令 `--help`。
401
409
 
402
410
  支持排序切换的 list:opinion / summary / pamirs-summary / research / foreign-report / 三个公告 / foreign-opinion / independent-opinion / official-account。**要最新加 `--rank-type 2`(按 `publishTime` 倒序);要最相关用默认 `--rank-type 1` + `--keyword`**——两者从同一结果集取的是**不同子集**,没有 `--keyword` 时无差异。`--search-type 2`(只有 summary / pamirs-summary / research / foreign-report / 三个公告 / official-account 有)扩大命中总数与 `--rank-type 2` 的候选池,**不改变 `--rank-type 1` 取回的条目**,要相关度不必加。判断这两个参数是否生效的方法见 `references/commands/insight.md` 开头。
403
411
 
@@ -422,7 +430,7 @@ gangtise reference securities-search --keyword <公司名> --category stock --to
422
430
  | `0000001008` / `999002` | token 失效 | CLI 自动换 token(必要时重新登录)后重发,无 AK/SK 时提示重新登录 |
423
431
  | `100006` | 查询/下载数量超限 | 缩短日期范围或调小 `--size`/`--limit`;`fund` 没有这两个参数,减少 `--security` 只数或缩短区间 |
424
432
 
425
- 其他场景:CLI 未安装 → `npm install -g gangtise-openapi-cli`;空结果 → 扩大时间范围 / 换关键词 / 去掉部分筛选;模糊公司名匹配多只 → 列出让用户选;下载路径冲突 → 询问覆盖。
433
+ 其他场景:CLI 未安装 → `npm install -g gangtise-openapi-cli`;命令或选项报不存在、`gangtise --version` 低于本文件头部的 `version` → 跑 `gangtise update --check`,有新版就请用户运行 `gangtise update`(会一并更新本 skill 的副本);报 `update` 命令不存在(0.49.0 之前的版本)则请用户运行 `npm install -g gangtise-openapi-cli@latest`。别自行安装;空结果 → 扩大时间范围 / 换关键词 / 去掉部分筛选;模糊公司名匹配多只 → 列出让用户选;下载路径冲突 → 询问覆盖。
426
434
 
427
435
  ## 详细参数
428
436
 
@@ -431,11 +439,11 @@ gangtise reference securities-search --keyword <公司名> --category stock --to
431
439
  - 内资观点 / 纪要 / 路演 / 调研 / 策略 / 论坛 / 财报日历(performance-calendar)/ 研报 / 外资研报 / A 股公告 / 港股公告 / 美股公告 / 外资观点 / 独立观点 / 公众号(official-account)/ 投资者问答(qa)/ 研报图表(report-image)→ `references/commands/insight.md`
432
440
  - 行情命令(A 股 / 港股 / 美股 / ETF / 指数日 K、分钟 K、实时行情、资金流向 fund-flow,含全球指数清单) → `references/commands/quote.md`
433
441
  - 三大报表(A 股 / 港股 / 美股)/ 主营 / 估值 / 盈利预测 / 股东 → `references/commands/fundamental.md`
434
- - knowledge-batch / security-clue / 个股看点(stock-summary)/ AI agent / 异步任务 / 主题跟踪 / 热点 / 管理层讨论 → `references/commands/ai.md`
442
+ - knowledge-batch / security-clue / 个股看点(stock-summary)/ AI agent / 异步任务 / 主题跟踪 / 热点 / 管理层讨论 / 管理层情绪 → `references/commands/ai.md`
435
443
  - drive / record / my-conference / wechat / 股票池 → `references/commands/vault.md`
436
444
  - 行业指标数据库(EDB)/ 题材指数画像与成分股(concept-info / concept-securities)→ `references/commands/alternative.md`
437
445
  - 数据指标(EDE:search / cross-section / time-series / screener,证券级指标截面、时序与条件选股)→ `references/commands/indicator.md`
438
- - 债券(basic-info / issuer-info / daily-quote / valuation / cash-flow / announcement / issuance-* / rating-overview / rating-change / issuer-rating-change / exercise-notice)→ `references/commands/bond.md`
446
+ - 债券(basic-info / issuer-info / daily-quote / valuation / cash-flow / announcement / issuance-* / rating-overview / rating-change / issuer-rating-change / exercise-notice / default-list)→ `references/commands/bond.md`
439
447
  - 公募基金(basic-info / nav / fee-rate / manager-* / asset-size / holder-structure / top10-holders / asset-allocation / 持仓与分布六个 / etf-pcf-* / etf-share-change)→ `references/commands/fund.md`
440
448
  - PDF 解析(file-parse)/ 联网搜索(web-search)→ `references/commands/tool.md`
441
449
  - securities-search / chiefs-search(首席 ID)/ institution-search(机构 ID)/ official-account-search(公众号 ID)/ 常量查询(constant-category / constant-list)/ 题材 ID(concept-search)/ 板块(sector-search / sector-constituents)/ lookup 本地表 / 行业别名 / raw call → `references/commands/reference-and-lookup.md`
@@ -170,3 +170,45 @@ gangtise ai management-discuss-earnings-call --report-date <date> --security-cod
170
170
  - `--report-date`:接受 `xxxx-03-31` / `xxxx-06-30` / `xxxx-09-30` / `xxxx-12-31`
171
171
  - `--dimension`(**必选**):`businessOperation` | `financialPerformance` | `developmentAndRisk`(注意:不支持 `all`,与财报版不同)
172
172
  - 返回 `content` 为字符串
173
+
174
+ ## 管理层情绪 `ai management-sentiment-indicator` / `-conclusion` / `-detail`
175
+
176
+ ```bash
177
+ gangtise ai management-sentiment-indicator [--security <code>...] [--start-time <datetime>] [--end-time <datetime>] [--from <n>] [--size <n>] [--yes]
178
+ gangtise ai management-sentiment-conclusion [--security <code>...] [--start-time <datetime>] [--end-time <datetime>] [--from <n>] [--size <n>] [--yes]
179
+ gangtise ai management-sentiment-detail --source-id <id> [--source-type <type>]
180
+ ```
181
+
182
+ 管理层在业绩会问答里的三维情绪:**正面回应程度**(正面回答还是回避)、**回复乐观度**(回答对公司是利好还是风险)、**回复确定度**(表述是否明确)。列表一条 = 一只证券 × 一场来源会议(同一证券开过几场就有几条,用 `source.sourceId` 区分),按发布时间倒序。来源类型目前只有 `conference`(电话会议)。
183
+
184
+ - **积分**:`indicator` / `conclusion` **5/条**(按返回条数);`detail` **10/次**(超时不自动重发)
185
+ - **数据范围**:两个列表正式账号前溯 1 年、试用 6 个月,`--start-time` 早于范围报 `110003`;`detail` 按 `--source-id` 取整场,不按日期限制
186
+ - `--security`:可重复,只收具体代码(`aShares` 这类市场关键词报 `120001`),任一代码非法整批报 `120001`。**不传 = 全部证券**——按条计费,省略 `--size` 时 CLI 先取 1 条拿到总数估算,超过 1000 积分报错退出,确认后加 `--yes`
187
+ - `--start-time` / `--end-time`:按发布时间筛,写 `yyyy-MM-dd`、`yyyy-MM-dd HH:mm:ss` 或 10 / 13 位时间戳——**写日期时间就要带秒**(`HH:mm` 报 `110001`);只写日期的 `--end-time` 含当天整天
188
+ - `--from` / `--size`:自动翻页(单页 100);省略 `--size` 拉全量
189
+ - `publishTime`(含 `conclusion` 里的 `previousSource.publishTime`)是北京时间,与 `--start-time` / `--end-time` 的筛选同一口径(北京时间 20:30 开的业绩会返回 `20:30:00`,`--start-time "2026-10-23 20:00:00"` 取得到这一场)
190
+
191
+ **`indicator`**:整场评分 `sentimentResponsiveness` / `sentimentPolarity` / `sentimentConviction`(0–5,两位小数)、有效问答数 `qaCount`、回避 / 风险 / 低确定度三个占比 `qaEvasionRatio` / `qaRiskRatio` / `qaUncertaintyRatio`(**百分数**:`7.14` 即 7.14%,分母是 `qaCount`),以及按问题类型拆分的 `questionCategoryList`。
192
+
193
+ - `questionCategoryList` 只列这一场出现过的类型(11 类,取值同 `insight qa list --question-category`),各类 `questionCategoryQaCount` 之和等于 `qaCount`。某类只有一两条问答时评分由单条决定、波动大,`isImportant` 标出重要类型
194
+
195
+ **`conclusion`**:结论文本 `sentimentSummary`(`overallSentiment` 总体情绪、`questionCategorySentiment` 主要影响因素、`qaSentimentChange` 重点变化)、三维信号文本 `sentimentSignal`、与上一场同一事项的问答对照 `qaSentimentContrast`(`previousQaList` 上一场、`currentQaList` 本场;`qTrace` / `aTrace` 是录音里的毫秒区间 `"起-止"`),对比基准见 `previousSource`。
196
+
197
+ - **没有可比的上一场时**:`qaSentimentChange` 为 `null`、`qaSentimentContrast` 为 `[]`、`previousSource` 为 `null`,结论文本照常返回、只是不含「较上一次」
198
+ - `*Signal` 是自然语言、不含分数,要分数用 `indicator`
199
+
200
+ **`detail`**:一场会议的全部问答,一次返回、不分页。每条给三维档位 `qaResponsiveness` / `qaPolarity` / `qaConviction`(只取 `5.0` / `2.5` / `0.0` 三档)和依据(`*Quote` 回答原文节选、`*Reason` 判断理由)。
201
+
202
+ - `--source-id` 从两个列表返回行的 `source.sourceId` 取;`--source-type` 默认 `conference`。**`--source-id` 写错不报错、返回空结果**——拿到空先核对 ID 是不是从列表里取的
203
+ - 返回行不带来源字段,批量取多场时自己记下每次的 `--source-id`
204
+ - `question` / `answer` 是录音转写原文(口语、可能有同音错字),展示时配合 `questionBrief`
205
+
206
+ **示例:**
207
+ ```bash
208
+ # 某公司最近几场业绩会的三维评分
209
+ gangtise ai management-sentiment-indicator --security 300285.SZ --size 5 --format json
210
+ # 较上一场的变化
211
+ gangtise ai management-sentiment-conclusion --security 300285.SZ --size 1 --format json
212
+ # 取上面返回的 source.sourceId,看逐条问答与依据
213
+ gangtise ai management-sentiment-detail --source-id 554030 --format json
214
+ ```
@@ -102,6 +102,22 @@ gangtise bond issuance-plan --start-date <d> --end-date <d> [--field <name>]
102
102
 
103
103
  🔴 **只按日期区间查,不收债券码**,日期必填。默认返回 `issueDate`。返回计划年份、发行人、债券性质与类型、期限、计划发行量、利率类型、付息频率、是否跨市场。
104
104
 
105
+ ## `default-list` 违约债券
106
+
107
+ ```bash
108
+ gangtise bond default-list (--start-date <d> --end-date <d> | --security <code>... | --issuer <name>) [--field <name>]
109
+ ```
110
+
111
+ 🔴 **三种查法三选一**,同传或都不传 CLI 先本地拦下:
112
+
113
+ - **按违约日期**:`--start-date` 与 `--end-date` 必须同时给,区间不超过 1 个自然年(`2025-01-01`~`2026-01-01` 可以,`2026-01-02` 报 `110002`)
114
+ - **按债券**:`--security` 不限只数,没有违约记录的代码不产生行
115
+ - **按发行人**:`--issuer` **一次一个**(传多个或用逗号拼在一起 CLI 本地报错,分次调用)。⚠️ **用发行人全称**:传简称也会返回结果,但只返回最匹配的**一家**——如「上海世茂」只返回上海世茂建设有限公司的记录,同样有违约记录的上海世茂股份有限公司不在其中。拿到结果先核对 `issuerName` 是不是要查的那家
116
+
117
+ 默认返回 `securityCode` + `defaultDate`,其余字段:`securityName` / `defaultAmount` 违约金额(**亿元**)/ `issuerName` 发行人全称 / `defaultReason` 违约原因,缺值为 `null`。按违约日期降序、代码升序,同一只债券每次违约一行。🔴 **`--field` 写错报 `100005`**(其余 `bond` 命令是 `100003`),同样整批拒绝并点名。
118
+
119
+ 历史范围不限。条件下一条记录都没有时返回 `130001`(见下「空结果」)。
120
+
105
121
  ## `announcement` 债券公告
106
122
 
107
123
  ```bash
@@ -9,6 +9,7 @@
9
9
  - LOF / ETF 的场内代码(`161005.SZ`)与场外代码(`161005.OF`)都能查,返回的 `fundCode` 与 `fundName` 跟随传入的代码(场内简称 / 场外简称不同);同一只基金别两种代码混着传,会重复
10
10
  - A / C 等份额各有代码,要合并到同一只基金用 `basic-info` 的 `mainFundCode`
11
11
  - 多只基金的结果**按 `fundCode` 字段对应**,别按请求顺序对位
12
+ - 多只基金横向比分类、复权净值与风险收益指标(夏普 / 最大回撤 / Alpha / 同类排名)用 `indicator cross-section`,见 `indicator.md`「基金指标」
12
13
 
13
14
  ⚠️ **超时 / 5xx 不自动重放**(避免重复扣费),偶发失败自行重跑。
14
15
 
@@ -107,7 +108,7 @@ gangtise fund holder-structure --security <code>... [--start-date <d>] [--end-da
107
108
 
108
109
  持有人户数、户均份额,机构 / 个人 / 员工持有份额(份)与占比(%)。只有半年报与年报披露,季报期没有行。
109
110
 
110
- - 🔴 **`holderCount` 是带千分位逗号的字符串**(如 `"2,219,140"`),不是数字。做数值计算或排序前先去掉逗号再转数字,否则按字符串比较会排错
111
+ - `holderCount` 为整数(如 `2219140`)
111
112
  - 占比字段可能为 `null`
112
113
 
113
114
  ## `top10-holders` 前十大持有人
@@ -164,7 +165,11 @@ gangtise fund etf-share-change --security <code>... [--start-date <d>] [--end
164
165
 
165
166
  - **`etf-pcf-header` / `etf-pcf-components` 只返回最新一份申购赎回清单**,无日期参数,查不了历史清单。`tradeDate` 是清单对应的交易日(清单盘前发布,可能就是当天)
166
167
  - **`etf-pcf-header`**:申赎允许情况(`允许申购·允许赎回` 这种 `·` 分隔的组合)、最小申赎单位(份)及其净值(元)、单日申购 / 赎回上限(份,无上限为 `null`)、现金差额与预估现金(元,可为负)、现金替代比例上限(%)、`componentCount` 成分记录数
167
- - **`etf-pcf-components`**:每个成分一行,按 `serialNumber` 排序:成分代码 `componentCode` 与名称、收盘价、涨跌幅、市值占比(%)、申购数量(股)、`cashSubstituteFlag`(`允许` / `必须`,中文)、申购 / 赎回现金替代溢价比例(%)、固定替代金额与申购 / 赎回替代金额(元)。宽基 ETF 动辄数百行,多只一起查注意 10000 行上限。`componentCode` **不带市场后缀**(如 `600519`),要接着查行情先补上后缀
168
+ - **`etf-pcf-components`**:每个成分一行,按 `serialNumber` 排序:成分代码 `componentCode`、成分名称 `componentName`、收盘价、涨跌幅、市值占比(%)、申购数量(股)、`cashSubstituteFlag`(`允许` / `必须`,中文)、申购 / 赎回现金替代溢价比例(%)、固定替代金额与申购 / 赎回替代金额(元)。宽基 ETF 动辄数百行,多只一起查注意 10000 行上限
169
+ - 🔴 **`componentCode` 是 CLI 按名称匹配补上的**(接口只返回名称),带市场后缀(如 `600519.SH` / `00941.HK` / `NVDA.O` / 国债 `019848.SH`)。匹配方式:按名称找证券(先查证券列表,没有再搜索),再用该行的 `close` 核对候选证券的最新价或昨收;核对不上的(清单价格滞后于行情、停牌等),改按清单价格所属那天的收盘价核对(A 股与港股各自定日期)——A+H 型 ETF 里同名的 A 股与 H 股两行据此分开;价格定不了时(债券、停牌、除权除息当天、行情查询失败):成分都在同一市场的 ETF 取该市场里名称完全一致的那只,同市场多只时取与 ETF 同一交易所的;**A+H 等跨市场的 ETF 里,价格定不了的行一律为 `null`**,不按名称猜
170
+ - **匹配不到的为 `null`**:现金行(如 `申赎现金`)、商品(如 `黄金9999`)、交易所简称与证券名称对不上的(如港股 `港交所`、`中海油`)。stderr 会说明匹配了多少行、列出为 `null` 的行
171
+ - ⚠️ 成分的 `close` 是清单给出的价格,日期可能早于 `tradeDate` 的前一交易日,一天之内还会更新,同一清单里 A 股与港股的日期也可能不同。要用价格计算,请以 `quote day-kline` / `quote realtime` 为准
172
+ - 额外请求都免费:下载一次 A 股 / 港股 / 美股证券列表(3 次请求)在本地按名称匹配,列表里没有的名称(债券、被截断的简称、现金行等)才逐个搜索,另加一两次实时行情查询;有实时价格核对不上的行时(清单价格滞后、停牌、除权除息等),再加一次日 K 查询。只要接口原始返回时加 `--no-component-code`(不发这些请求,行里没有 `componentCode`)
168
173
  - **`etf-share-change`**:逐交易日一行,份额(万份)、规模(万元)及较上期变动,`sharesChangeRate` 为份额变化率(%)。按日期倒序
169
174
 
170
175
  ---
@@ -15,6 +15,7 @@
15
15
  | A股估值历史分位 | `fundamental valuation-analysis` |
16
16
  | **估值指标的历史序列**(分位 / 回测 / 择时) | 两个接口口径不同、都要交叉核——EDE 按正式财报披露日切换财报口径,`valuation-analysis` 按业绩快报切,见下方专门小节 |
17
17
  | 开高低收 / 成交量等行情与 K 线 | `quote`;免费且支持多证券批量。**换接口不换口径**:`quote` 的 `volume` 与 EDE `qte_vol` 逐位相同(A股 / 港股 / 美股,单位均为股)。EDE 只在 `quote` 不提供的口径上才需要——周 / 月 / 季 / 年 / 区间成交量 |
18
+ | 单只基金的净值 / 持仓 / 规模 / 经理 | `fund` 命令组;多只基金批量取分类、复权净值与风险收益指标才用 EDE,见下方「基金指标」 |
18
19
  | 单证券资金流向(要占比字段) | `quote fund-flow`;免费,且有 EDE 没有的 `*Ratio` 占比。多证券批量取某一两个档位才用 EDE 的 `flow_*` |
19
20
  | 单证券三大报表全部科目 | 对应 `fundamental` 利润表 / 资产负债表 / 现金流量表命令 |
20
21
 
@@ -33,7 +34,7 @@ gangtise indicator search --keyword <text> [--limit <n>]
33
34
  - **市场范围按指标判断**:`scopeList` 会返回实际覆盖范围,且指标之间不同;不能笼统写成每个指标都覆盖 A / 港 / 美股。覆盖面在持续扩,别把抽查结论当常量:例如 `qte_mkt_cptl`/`shr_tot` 覆盖 A/港/美股,`finc_pe_ttm` / `finc_pb_mrq` 覆盖 A/港股,`is_op_rev_ttm`/`is_shnp_ttm` 覆盖 A/港股。目标列表含任一 scope 外证券时,本批 EDE 校验不通过,应回退专用接口
34
35
  - **`scopeList[].usageRestriction`**:该指标在具体接口上的限制,`null` = 无限制。⚠️ **它是提示不是硬约束**——标着「不支持指标时间序列接口」的 `qte_vol_intvl` 调时序照样返数据、不会被拦下。当成「口径可能不对、结果别当真」看,别指望它会报错
35
36
  - ⚠️ **`scopeList` 是声明不是保证**:它可能**超前于数据**(声明覆盖但该市场暂无数据),也可能**滞后于数据**(已有数据尚未声明)。**「某某仍无数据」这类否定结论过期得和正面结论一样快**,照着它走会白白拒掉一个现在能跑的查询,而且不报错。**判断成本很低**:无数据会保留行列、给一个占位单元格,抽查一行就能看出覆盖情况;code 写错则直接报 `100003`,两种情形不会混淆。占位值统一是 `null`(详见下方「缺数据 vs 代码写错」)
36
- - 美股代码用交易所后缀 `.O`(NASDAQ) / `.N`(NYSE):用 `AAPL.O`,`AAPL.US` 取不到数据
37
+ - 美股代码用交易所后缀 `.O`(NASDAQ) / `.N`(NYSE) / `.A`(NYSE American,原 AMEX):用 `AAPL.O`,`AAPL.US` 取不到数据
37
38
 
38
39
  ```bash
39
40
  gangtise indicator search --keyword 营业收入 --limit 10 --format json # 做语义 + scopeList + parameterList 三项校验
@@ -48,7 +49,7 @@ gangtise indicator cross-section --indicator <code> [--indicator <code2>] \
48
49
  ```
49
50
 
50
51
  - `--indicator`(**至少 1 个**):指标编码,来自 `search`,可重复传多个
51
- - `--security`(**至少 1 个**):证券代码,如 `600519.SH`(A股)/ `09992.HK`(港股)/ `AAPL.O`(美股,用 `.O`/`.N` 后缀,非 `.US`),可重复传多个。**也接受板块 ID**(`reference sector-search` 返回的 10 位 `sectorId`,如 `1000000287` 中信白酒 → 展开成它的全部成分股),代码与板块可混传,服务端取并集去重。⚠️ 中信行业码那类 9 位 ID(`100800109`)**不是** `sectorId`,传进去返 0 只
52
+ - `--security`(**至少 1 个**):证券代码,如 `600519.SH`(A股)/ `09992.HK`(港股)/ `AAPL.O`(美股,用 `.O`/`.N`/`.A` 后缀,非 `.US`),可重复传多个。**也接受板块 ID**(`reference sector-search` 返回的 10 位 `sectorId`,如 `1000000287` 中信白酒 → 展开成它的全部成分股),代码与板块可混传,服务端取并集去重。⚠️ 中信行业码那类 9 位 ID(`100800109`)**不是** `sectorId`,传进去返 0 只
52
53
  - `--date`(**必选**):数据日期 `yyyy-MM-dd`。**CLI 把它下发为每个指标各自的 `tradeDate`**(接口没有根级 date)。日期语义按指标分两类——财务报表指标=报告期末(可为非交易日;**⚠️ `_ttm` 后缀整族例外,走交易日,见下方「日期路由」**)、`finc_pe_ttm` / `finc_pb_mrq` 等日频估值=交易日(详见下方「日期路由」)
53
54
  - `--date` 必填:绝大多数指标必填 `tradeDate`,漏传服务端报 `100001` 并点名缺哪个参数,所以 CLI 要求带上、下发给每个指标。(`screener` 的 `--date` 也必填,同理)
54
55
  - 🔴 **判据一句话:该指标的 `parameterList` 里有 `tradeDate` 就不用管;没有,`--date` 下发的 `tradeDate` 就可能被拒。** 按这条走,四种情形四种写法(`parameterList` 从 `indicator search --keyword <code> --format json` 读,别按 code 前缀推断):
@@ -61,7 +62,7 @@ gangtise indicator cross-section --indicator <code> [--indicator <code2>] \
61
62
  | 无 `tradeDate`、`parameterList` 为空 | 只加 `--indicator-param "<code>:"` |
62
63
 
63
64
  - **空冒号那条与真实参数可以共存**:`"div_cash_yr:" "div_cash_yr:fiscalYear=2025"` 两条一起给,前者只关掉日期注入,不会把 `fiscalYear` 清掉
64
- - **哪些指标属于后两种**:已知是 `pty_*`(公司属性:注册地址 / 法定代表人 / 经营范围 / 公司简介…)与 `scr_*`(证券属性:证券简称 / ISIN / 上市市场 / 上市板块 / 上市日期…)两族,加上 `div_cash_paid_ratio` / `div_cash_yr` / `pty_shr_reg`。🔴 **这只是当前已知的快照,不是完整清单**——`indicator search` 必须给关键词、`--limit` 上限 100 且没有翻页,所以指标库无法整体枚举。**永远以 `parameterList` 为准**;要重新生成某一族用 `indicator search --keyword <前缀>_ --limit 100`,返回条数小于 100 即该族已列全
65
+ - **哪些指标属于后两种**:已知是 `pty_*`(公司属性:注册地址 / 法定代表人 / 经营范围 / 公司简介…)与 `scr_*`(证券属性:证券简称 / ISIN / 上市市场 / 上市板块 / 上市日期…)两族,加上 `div_cash_paid_ratio` / `div_cash_yr` / `pty_shr_reg` 与基金的 `fund_main_code` / `fund_estb_dt`。🔴 **这只是当前已知的快照,不是完整清单**——`indicator search` 必须给关键词、`--limit` 上限 100 且没有翻页,所以指标库无法整体枚举。**永远以 `parameterList` 为准**;要重新生成某一族用 `indicator search --keyword <前缀>_ --limit 100`,返回条数小于 100 即该族已列全
65
66
  - ⚠️ **别把「有 `fiscalYear`」当成「不要 `tradeDate`」**——`frcst_pe` / `frcst_shnp` / `frcst_op_rev` 等预测类指标 `parameterList` 里**两个都是必填**,照常用 `--date` 再加一条 `fiscalYear`,**不要**加空冒号那条
66
67
  - ⚠️ **也别把「有 `reportDate`」当成「不受影响」**——报告期类指标同样拒收注入的 `tradeDate`,只是解法(自己传 `reportDate`)刚好顺带关掉了注入
67
68
  - 🔴 **吃 `reportDate` 的指标必须显式传 `reportDate`**:`--indicator-param "code:reportDate=2024-12-31"`。服务端不接受 `tradeDate`——只给 `--date` 会报 `100003「指标 xxx 不支持参数 tradeDate; 指标 xxx 缺少必填参数 reportDate」`。哪些指标属于这一类看 `indicator search` 的 `parameterList`:`reportDate` 标 `required: true` 且列表里没有 `tradeDate` 的就是。利润表 / 资产负债表 / 现金流量表类(`is_*` 等)都在此列;行情与估值类(`qte_*` / `finc_*`)仍用 `--date` 即可。CLI 检测到你已为某指标传了 `tradeDate` 或 `reportDate` 就不再注入 `--date`,所以补上 `--indicator-param` 就能正常取数
@@ -140,7 +141,7 @@ gangtise indicator screener --indicator <F1:code> [--indicator <F2:code2>] \
140
141
  - 文本:`contains` / `notcontains`(不区分大小写,**仅对 `dataType: string` 的指标有效**)
141
142
  - 逻辑:`&&` `||`,分组 `(` `)`
142
143
  - `--date`(**必选**):下发为**每个**指标的 `tradeDate`(已带 `tradeDate`/`reportDate` 的不覆盖)。绝大多数指标必填 `tradeDate`,漏传服务端报 `100001`,所以必填
143
- - 🔴 **`parameterList` 里一个日期参数都没有的指标(`pty_*` / `scr_*` 静态属性两族、`div_cash_paid_ratio` / `div_cash_yr`、`pty_shr_reg`)必须显式声明「不要日期」**:写 `--indicator-param "F1:"`(冒号后什么都不写)。不写的话 `--date` 会给它注入 `tradeDate`,而这些指标不接受该参数,**整条请求**报 `100003 指标 xxx 不支持参数 tradeDate`。`F1:` 与真参数可组合,`div_cash_*` 要同时给 `F1:` 和 `F1:fiscalYear=2025`。这与 `cross-section` 的 `"code:"` 是同一个写法。注意只有**没有任何日期参数**的指标需要,报告期类(`is_*` 等)给 `F1:reportDate=...` 即可
144
+ - 🔴 **`parameterList` 里一个日期参数都没有的指标(`pty_*` / `scr_*` 静态属性两族、`div_cash_paid_ratio` / `div_cash_yr`、`pty_shr_reg`、`fund_main_code` / `fund_estb_dt`)必须显式声明「不要日期」**:写 `--indicator-param "F1:"`(冒号后什么都不写)。不写的话 `--date` 会给它注入 `tradeDate`,而这些指标不接受该参数,**整条请求**报 `100003 指标 xxx 不支持参数 tradeDate`。`F1:` 与真参数可组合,`div_cash_*` 要同时给 `F1:` 和 `F1:fiscalYear=2025`。这与 `cross-section` 的 `"code:"` 是同一个写法。注意只有**没有任何日期参数**的指标需要,报告期类(`is_*` 等)给 `F1:reportDate=...` 即可
144
145
  - `--indicator-param`:格式是 **`F1:key=value`(按变量,不是按 code)**。引用了没绑定的变量会直接报错,不会静默丢弃
145
146
  - `--expression` 里引用未绑定的变量,CLI **本地就拦**(不发请求、不计费);服务端也会报 `100003`
146
147
  - **输出(宽表)**:同 `cross-section`,每行一只**命中**的证券,列为 `security / name / <各指标名>…`;无命中返回空表
@@ -395,6 +396,33 @@ gangtise indicator cross-section --indicator shr_hld --indicator shr_avg_qty \
395
396
  --indicator-param "shr_avg_qty:shareType=2" --security 600519.SH --date 2026-10-15
396
397
  ```
397
398
 
399
+ ### 基金指标
400
+
401
+ `--security` 传基金代码(场外 `.OF`,场内 `.SH` / `.SZ`,如 `005827.OF` / `510300.SH`)。
402
+
403
+ | 类别 | 指标 | 日期参数 |
404
+ | :-- | :-- | :-- |
405
+ | 基础属性与分类(`scopeList` 只有基金) | `fund_main_code` 基金主代码(A / C 等份额归到主份额,如 `000004.OF` → `000003.OF`)、`fund_estb_dt` 成立日期 | 没有日期参数,带 `--indicator-param "<code>:"` |
406
+ | | `fund_opr_st` 运行状态、`fund_cls1_typ` / `fund_cls2_typ` Gangtise 基金一级 / 二级分类、`fund_adj_nav` 复权单位净值 | `tradeDate`(`--date`) |
407
+ | 业绩与风险(区间指标,`sDate` 到 `tradeDate`) | 只有基金:`fund_calmar` 卡玛比率、`fund_ret_rank` 收益率同类排名(文本,如 `"5/120"`)/ `fund_ret_rank_pct` 排名百分位。股票与基金通用(部分也覆盖指数,看 `scopeList`):`finc_ann_ret` 年化收益率、`finc_avg_ret` / `finc_avg_ret_ann` 平均收益率、`finc_vol` / `finc_vol_ann` 波动率、`finc_intvl_max_dd` 区间最大回撤、`finc_sharpe` / `finc_sharpe_ann`、`finc_treynor` / `finc_treynor_ann`、`finc_jensen` / `finc_jensen_ann`、`finc_alpha`、`finc_beta`、`finc_corr` 相关系数、`finc_unsys_risk` 非系统风险 | `sDate`(`--indicator-param "<code>:sDate=..."`)+ `tradeDate`(`--date`) |
408
+
409
+ - 🔴 **区间指标的其余参数一律显式传**,漏传报 `100001`(`parameterList` 列了默认值也一样):`changePeriod` 变化周期、`yieldType`(`0` 普通 / `1` 对数收益率)、`riskFreeRate`(`0` = 常数 0)、`benchmarkCode` 基准代码(Alpha / Beta / 相关系数 / Jensen / Treynor / 非系统风险要)、`industryLevel`(同类排名按哪一级分类)。每个指标要哪几个以 `parameterList` 为准
410
+ - ⚠️ **`changePeriod` 列出的默认值 `6`(区间)不是每个指标都收**:Sharpe 等的 `description` 写明只支持日 / 周 / 月 / 年(`0` / `1` / `2` / `5`),传 `6` 报 `100003`
411
+ - `finc_intvl_max_dd` 返回负的百分数(`-19.23` 即 -19.23%),无回撤为 `0`;`fund_estb_dt` 返回 `yyyyMMdd` 整数(如 `20180905`),不是日期字符串
412
+ - 这批区间指标的 `scopeList` 标着「不支持指标时间序列接口」,用 `cross-section` 取
413
+ - 单只基金的净值序列、持仓、规模走 `fund` 命令组;EDE 适合多只基金横向比
414
+
415
+ ```bash
416
+ gangtise indicator cross-section --indicator fund_cls2_typ --indicator fund_adj_nav \
417
+ --indicator finc_intvl_max_dd --indicator-param "finc_intvl_max_dd:sDate=2025-10-24" \
418
+ --security 005827.OF --security 510300.SH --date 2026-10-23
419
+
420
+ gangtise indicator cross-section --indicator finc_sharpe_ann \
421
+ --indicator-param "finc_sharpe_ann:sDate=2025-10-24" --indicator-param "finc_sharpe_ann:changePeriod=0" \
422
+ --indicator-param "finc_sharpe_ann:yieldType=0" --indicator-param "finc_sharpe_ann:riskFreeRate=0" \
423
+ --security 005827.OF --security 510300.SH --date 2026-10-23
424
+ ```
425
+
398
426
  ## 取数最佳实践
399
427
 
400
428
  - **先 search 做三项校验**:看 `indicatorName` + `description` 确认语义和口径,看 `scopeList` 确认覆盖全部目标市场 / 证券类型(并看 `usageRestriction` 有无接口限制),再看 `parameterList` 补齐必填参数(required)并核对专属参数**名称**与枚举(`adjustType`/`scale`/`currency` 等);任一不符就回退专用接口。**参数名一律以 search 返回的 `parameterList` 为准,不要照抄任何示例里的参数名**——参数名会随版本调整,写错会报 `100003` 并指出是哪个指标的哪个参数,按报错改即可。
@@ -76,7 +76,7 @@
76
76
  `partial: true`,保留已取到的部分;stderr 有 warning,`--format json` 才看得见标记,table/csv/jsonl 只有数据行、看不出问题。**拿到 3 就必须告知用户缺了哪段,不能当成功静默继续。**
77
77
 
78
78
  - 触发场景:翻页 / K 线分片有页失败、服务端返回行数与 `total` 矛盾(提前短页)、`total` 撞服务端上限(`totalCapped`:`total` 是封顶值而非真实条数,或正好等于偏移窗口、窗口外的行取不到也数不到)、`quote` 系带 `--field` 时请求了但服务端没回的列(`missingFields`)。附带定位字段:页失败 `failedPages`;分片失败 `failedShards`、分片撞行数上限 `truncatedShards`(均带日期区间可缩窗补拉)、只有部分分片返回的列 `droppedColumns`(合并结果的列集取自第一个有数据的分片,多出来的列放不下,需要就缩小日期区间单独拉);缺列 `missingFields`(字段名写错或已下线,按 `references/fields.md` 核对);多证券分批请求里撞行数上限的证券 `truncatedSecurities`;翻页时同一行在相邻两页各出现一次 `duplicateRows`(列表按时间这类可重复的字段排序,同一时刻的一组数据跨在页边界上时,重复了几行也就漏了几行;重复行已去掉,缩短时间范围重拉可补齐);同一 ID 在后面的页以不同内容再次出现 `changedRows`(翻页期间列表有变动、也可能漏了行;两版都保留,按 ID 去重只留一版,重拉即可;重拉后仍在同一处出现,说明该列表同一 ID 对应多条记录,按 ID 去重前先核对)。EDE 的 `omittedIndicators` / `omittedSecurities`:服务端对写错的 code 直接报 `100003`(退出 1),所以这两个标记很少出现
79
- - **EDE 代码写错是退出码 1 + `100003`,msg 里直接点名是哪个 code**(美股后缀用 `.O`/`.N`,不是 `.US`),不用从退出码 3 反推。真的没覆盖是占位单元格(统一 `null`)+ 退出码 0
79
+ - **EDE 代码写错是退出码 1 + `100003`,msg 里直接点名是哪个 code**(美股后缀用 `.O`/`.N`/`.A`,不是 `.US`),不用从退出码 3 反推。真的没覆盖是占位单元格(统一 `null`)+ 退出码 0
80
80
  - **`screener` 的缺列按表达式的布尔结构判**:把缺列的变量当作「无法求值」,看整个表达式**是否还有一条能成立的分支**——`A && B` 要两边都可求值,`A || B` 只要一边。**一条分支都不剩 → 退出码 1、不输出任何结果**(返回的行以「通过了该条件」的名义呈现,而条件根本无法证明被执行过);**还有分支可求值,或缺的只是未参与表达式的辅助变量 → `partial` + 退出码 3**。所以 `F1 || F2` 缺 F1 是降级,缺两个则是致命;`F1 && (F2 || F3)` 缺 F1 仍是致命。⚠️ **前提是服务端返回了命中行**——零命中时走「nothing matched」+ **退出码 0**。**空集别急着当成「条件成立但无标的符合」**:指标码写错会直接报 `100003`(退出 1),剩下**三种成因产生逐字相同的输出**——① 真的没有标的满足条件;② **日期没落在报告期末**(报告期类指标此时整批 `null`);③ **该指标不覆盖这批证券**(拿 A 股专属指标查港美股,如 `mgn_*` 融资融券系列)。②③ 都要靠单查一行确认,不能只改日期
81
81
 
82
82
  ## 退出码 4:数据写全了,但文件被另一次导出替换
@@ -4,7 +4,7 @@ CLI 自动处理 envelope:`{code, msg, data}` 信封会按 `code === "000000"`
4
4
 
5
5
  > 例外:`indicator`(EDE)四个接口(`search` / `cross-section` / `time-series` / `screener`)成功时**双层信封**(`data` 里再裹一层 `{code, status, data}`)。内层字段名为 `securityCodeList` / `securityNameList` / `indicatorList[{code,name,dataType}]`(screener 另带 `field`),`values` 是 2D 矩阵:**截面与 screener 为 `[证券][指标]`**、时序为 `[序列][日期]`。
6
6
  >
7
- > **缺数据 vs 代码写错**:无数据 / 无覆盖一律保留行列并给占位单元格——**占位值统一为 `null`**;⚠️ 报告期类指标(`is_*`)的时序只有报告期末那几行是真值,其余全是 `null`,详见 `commands/indicator.md`。**代码写错则直接报 `100003` 并点名**(指标 code 拼错 →「指标 xxx 不存在」;证券 code 后缀错 →「xxx 不是有效证券或者板块ID」,美股是 `.O`/`.N` 不是 `.US`),**无论同批有没有正确的 code 都会报**。CLI 的 `indicator` 子命令已二次解包、拍平成宽表;服务端没有返回请求里的某个指标或证券时标 `partial` + `omittedIndicators` / `omittedSecurities`、退出码 3(写错的 code 会直接报 `100003`,所以这种情况很少出现)。**`screener` 例外**:把缺列的变量当作无法求值,按表达式的**布尔结构**判断是否还有分支能成立(`A && B` 要两边、`A || B` 只要一边)。一条都不剩 → **退出码 1 且不输出**(那些行以「通过了该条件」的名义呈现,而条件根本无法证明被执行过);仍有分支可求值、或缺的只是输出用的辅助变量 → `partial` + 退出码 3。直接 `raw call indicator.*` 只会剥外层,内层需自行处理。
7
+ > **缺数据 vs 代码写错**:无数据 / 无覆盖一律保留行列并给占位单元格——**占位值统一为 `null`**;⚠️ 报告期类指标(`is_*`)的时序只有报告期末那几行是真值,其余全是 `null`,详见 `commands/indicator.md`。**代码写错则直接报 `100003` 并点名**(指标 code 拼错 →「指标 xxx 不存在」;证券 code 后缀错 →「xxx 不是有效证券或者板块ID」,美股是 `.O`/`.N`/`.A` 不是 `.US`),**无论同批有没有正确的 code 都会报**。CLI 的 `indicator` 子命令已二次解包、拍平成宽表;服务端没有返回请求里的某个指标或证券时标 `partial` + `omittedIndicators` / `omittedSecurities`、退出码 3(写错的 code 会直接报 `100003`,所以这种情况很少出现)。**`screener` 例外**:把缺列的变量当作无法求值,按表达式的**布尔结构**判断是否还有分支能成立(`A && B` 要两边、`A || B` 只要一边)。一条都不剩 → **退出码 1 且不输出**(那些行以「通过了该条件」的名义呈现,而条件根本无法证明被执行过);仍有分支可求值、或缺的只是输出用的辅助变量 → `partial` + 退出码 3。直接 `raw call indicator.*` 只会剥外层,内层需自行处理。
8
8
 
9
9
  ## 通用模式(5 类)
10
10
 
@@ -27,7 +27,7 @@ CLI 自动处理 envelope:`{code, msg, data}` 信封会按 `code === "000000"`
27
27
  | insight summary download | 文件路径(stdout) | — |
28
28
  | insight pamirs-summary list | `{list, total}` | `list[].summaryId` / `list[].title` / `list[].brief` / `list[].summaryTime`(纪要生成时间)/ `list[].publishTime`(发布时间)/ `list[].securityList[]{securityCode, securityName}` / `list[].researchAreaList[]{researchAreaId, researchAreaName}` / `list[].conceptList[]{conceptId, conceptName}` / `list[].categoryList` / `list[].marketList`。⚠️ `conceptList` / `categoryList` / `marketList` 三个标签字段**稀疏,且是否有值随记录和查法而变**:不带筛选时经常整条为空,用 `--category` 或 `--market` 任一过滤时回填率明显更高(这两个字段绑定,一起有或一起没有)。所以**别拉全量再本地分组**(会漏记录),也**别据此断言某条记录没有该属性**(为空只说明这次没回填)。详见 `commands/insight.md` |
29
29
  | insight pamirs-summary download | 文件路径(stdout) | — |
30
- | insight roadshow / site-visit / strategy / forum list | `{list, total}` | `list[].id` / `list[].title` / `list[].publishTime` / `list[].institution.institutionName` |
30
+ | insight roadshow / site-visit / strategy / forum list | `{list, total}` | 各自的 ID:`list[].roadshowId` / `siteVisitId` / `strategyMeetingId` / `forumId`;`list[].title` / `list[].startTime` / `list[].endTime` / `list[].publishTime` / `list[].location`;路演、调研、策略会另有 `list[].institutionList[]{institutionId, institutionName}`(论坛没有) |
31
31
  | insight research list | `{list, total}` | `list[].reportId` / `list[].title` / `list[].brief`(全文摘要) / `list[].publishTime` / `list[].publisher.brokerName` / `list[].securityList[].rating` |
32
32
  | insight research download | 文件路径(stdout) | — |
33
33
  | insight foreign-report list | `{list, total}` | `list[].reportId` / `list[].title` / `list[].titleTranslate` / `list[].brief` / `list[].briefTranslate`(中译全文摘要) / `list[].publishTime` / `list[].publisher.brokerName` |
@@ -77,6 +77,9 @@ CLI 自动处理 envelope:`{code, msg, data}` 信封会按 `code === "000000"`
77
77
  | ai theme-tracking | `[{type, date, content}, ...]`(列表,每元素一份报告) | 遍历筛选 `type === "morning" / "night"`;某主题在该日期可能只有一种类型,或两种都没(空列表) |
78
78
  | ai hot-topic | `{list, total}` | `list[].title` / `list[].reportDate` / `list[].category` / `list[].topics[].topicTitle` / `list[].topics[].driverEvent` / `list[].topics[].investLogic` |
79
79
  | ai management-discuss-* | `{securityCode, reportDate, discussionDimension, content}` | `content` 为字符串(业绩会)或字符串数组(财报) |
80
+ | ai management-sentiment-indicator | `{list, total}`,一条 = 一只证券 × 一场业绩会 | `list[].securityCode` / `publishTime` / `sentimentResponsiveness` · `sentimentPolarity` · `sentimentConviction`(0–5)/ `qaCount` / `qaEvasionRatio` · `qaRiskRatio` · `qaUncertaintyRatio`(百分数)/ `questionCategoryList[]` / `source.sourceType` + `source.sourceId` |
81
+ | ai management-sentiment-conclusion | `{list, total}`,粒度同上 | `list[].sentimentSummary.{overallSentiment, questionCategorySentiment, qaSentimentChange}` / `sentimentSignal.*Signal`(文本)/ `qaSentimentContrast[]` / `source` / `previousSource`(无可对比的上一场时为 `null`) |
82
+ | ai management-sentiment-detail | `{list, total}`,一条 = 一条问答,不分页 | `list[].qaId` / `questionCategory` / `questionBrief` / `question` / `answer` / `qaResponsiveness` · `qaPolarity` · `qaConviction`(`5.0` / `2.5` / `0.0` 三档)/ 三组 `*Quote` + `*Reason` |
80
83
  | ai earnings-review | `{dataId, status, hint}`(提交)/ `{dataId, status:"pending", hint}` 或 `{date, content}`(check) | `dataId` 用于轮询;最终 `content` 直接呈现 |
81
84
  | ai viewpoint-debate | 同 earnings-review | — |
82
85
  | vault drive-list | `{list, total}` | `list[].fileId`(下载用 `--file-id`)/ `list[].title` / `list[].fileType` / `list[].uploadTime` |
@@ -103,18 +106,18 @@ CLI 自动处理 envelope:`{code, msg, data}` 信封会按 `code === "000000"`
103
106
  | alternative edb-data | 列表,每行 `{date, <indicatorId>: value, ...}` 宽表 | `date` + 每个 `--indicator-id` 一列(该日指标值) |
104
107
  | alternative concept-info | `{conceptId, conceptName, ...}`(单对象,**非列表**) | `conceptName` / `definition` / `investmentLogic` / `industrySpace` / `competitiveLandscape`;**`keyEvents[].date` / `keyEvents[].content` 仅 `--full`**;文本字段未配置为 `null` |
105
108
  | alternative concept-securities | `{conceptId, conceptName, securityCount, securityDetail}`(单对象,分组) | `securityCount` / `securityDetail[].groupName` / `securityDetail[].securityList[].securityCode` / `.securityName` / `.isKey` / `.inclusionReason`(**这两列仅 `--full`**);无成分股时 `securityDetail` 为 `null` |
106
- | bond basic-info / issuer-info / daily-quote / valuation / cash-flow / issuance-detail / rating-overview / rating-change / issuer-rating-change / issuance-plan / exercise-notice | 列式 `{fieldList, list, total}` → 规范化后 `{list: [{...}], total}` | 字段名按 `--field` 或全部;每条命令的默认列恒在最前(如 `securityCode` + `tradeDate`、`issuerName`、`issueDate`),见 `commands/bond.md` |
109
+ | bond basic-info / issuer-info / daily-quote / valuation / cash-flow / issuance-detail / rating-overview / rating-change / issuer-rating-change / issuance-plan / exercise-notice / default-list | 列式 `{fieldList, list, total}` → 规范化后 `{list: [{...}], total}` | 字段名按 `--field` 或全部;每条命令的默认列恒在最前(如 `securityCode` + `tradeDate`、`issuerName`、`issueDate`、`securityCode` + `defaultDate`),见 `commands/bond.md` |
107
110
  | bond announcement | 列式 `{fieldList, list}`(**无 `total`**)→ 规范化后为行数组 | `announcementDate` / `securityCode` + 其余字段;翻过末页为 `[]` |
108
111
  | fund basic-info | `{list}`(**无 `total`**、不分页)→ 行数组;代码不存在返回 `[]` | `[].fundCode` / `fundName` / `mainFundCode`(A/C 份额共用)/ `investTypeCodeLevel1` / `investTypeNameLevel1` / `…Level2` / `mgrComp` / `setupDate` / `operationMode` / `exchange`(场外为 `null`)/ `riskLevel` / `isIndexFund`(布尔)/ `trackIndexCode` / `trackIndexName` |
109
112
  | fund nav | 同上 | `[].fundCode` / `tradeDate`(倒序)/ `navUnit` / `navAccumulated` / `adjustFactor` / `navAdjusted` / `mmfAnnualizedYield` / `mmfUnitYield`(后两列仅货币基金有值) |
110
113
  | fund fee-rate | 同上 | `[].fundCode` / `feeType` / `feeCondition`(分档条件,无分档为 `null`)/ `feeRate`(**字符串**,如 `"1.5%"`) |
111
114
  | fund manager-info | 同上 | `[].managerName` / `currentCompany` / `careerStartDate` / `workingYears` / `managedFundScale`(亿元)/ `managedFundCount` / `historyFundCount` / `introduction`;同名经理多行 |
112
115
  | fund manager-history | 同上 | `[].fundCode` / `managerName` / `startDate` / `endDate`(`null` = 现任)/ `managedDays` / `managedReturn`(%) |
113
- | fund asset-size / holder-structure / top10-holders | 同上,每报告期一行(`top10-holders` 每期按名次多行) | `[].fundCode` / `reportDate` + 规模(`sharesEnd` / `netAsset`,万份 / 万元)、持有人结构(`holderCount` 是**带千分位的字符串** / `pctInstitution` / `pctIndividual`)、前十大(`serialNumber` / `holderName` / `holdingShares` / `holdingPct`) |
116
+ | fund asset-size / holder-structure / top10-holders | 同上,每报告期一行(`top10-holders` 每期按名次多行) | `[].fundCode` / `reportDate` + 规模(`sharesEnd` / `netAsset`,万份 / 万元)、持有人结构(`holderCount` 整数 / `pctInstitution` / `pctIndividual`)、前十大(`serialNumber` / `holderName` / `holdingShares` / `holdingPct`) |
114
117
  | fund asset-allocation | 同上,每报告期按资产类型多行 | `[].fundCode` / `reportDate` / `assetLevel` / `assetType` / `assetTypeName` / `holdingValue`(元)/ `pctToTotalAsset` |
115
118
  | fund stock-portfolio / bond-portfolio / fund-portfolio | 同上,每报告期按持仓多行 | `[].fundCode` / `reportDate` / `stockName` · `bondName` · `holdingFundName`(**只有简称、无代码**)/ `holdingQuantity` / `holdingValue`(万元)/ `pctToNav`;股票另有 `pctToFloatShares` / `pctToNavChg` |
116
119
  | fund industry-allocation / bond-type-allocation / fund-type-allocation | 同上,每报告期按分类多行 | `[].fundCode` / `reportDate` / `industryCode` + `industryName` · `bondTypeCode` + `bondTypeName` · `investTypeCodeLevel1` + `investTypeNameLevel1` / `pctToNav`;行业与基金类型另有 `positionType`(`top` / `all`) |
117
- | fund etf-pcf-header / etf-pcf-components / etf-share-change | 同上 | 申赎参数(`tradeDate` / `purchaseRedemptionStatus` / `minUnitShares` / `cashBalance` / `componentCount`);成分清单(`serialNumber` / `componentCode` / `componentName` / `pctWeight` / `purchaseQuantity` / `cashSubstituteFlag`);份额变动(`tradeDate` / `shares` / `sharesChange` / `scale`,万份 / 万元) |
120
+ | fund etf-pcf-header / etf-pcf-components / etf-share-change | 同上 | 申赎参数(`tradeDate` / `purchaseRedemptionStatus` / `minUnitShares` / `cashBalance` / `componentCount`);成分清单(`serialNumber` / `componentCode`(CLI 按名称匹配补上,匹配不到为 `null`,见 `commands/fund.md`)/ `componentName` / `pctWeight` / `purchaseQuantity` / `cashSubstituteFlag`);份额变动(`tradeDate` / `shares` / `sharesChange` / `scale`,万份 / 万元) |
118
121
  | indicator search | `[{indicatorCode, indicatorName, ...}]`(列表) | `indicatorCode` / `indicatorName` / `description` / `scopeList[].market` / `scopeList[].securityType` / `scopeList[].usageRestriction`(接口限制,`null`=无限制) / `parameterList[].paramKey`(**参数名以此为准**) / `.enumList[].value` / `score` |
119
122
  | indicator cross-section | CLI 拍平为宽表 `{list, total}` | `list[].security` / `list[].name` + 每个指标名一列;**单日多指标 × 多证券**,每行一只证券。**没有 `date` 列**(查询日期挂在每个指标的参数上,各列可为不同日期);原始响应的 `values` 为 `[证券][指标]` |
120
123
  | indicator time-series | CLI 拍平为宽表 `{list, total}` | `list[].date` + 序列列:单证券时列=各指标、多证券时列=各证券;每行一个日期。原始响应 `values` 仍为 `[序列][日期]` |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gangtise-openapi-cli",
3
- "version": "0.47.0",
3
+ "version": "0.49.0",
4
4
  "description": "CLI for Gangtise OpenAPI",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -37,7 +37,7 @@
37
37
  },
38
38
  "dependencies": {
39
39
  "commander": "^14.0.0",
40
- "undici": "^7.29.1"
40
+ "undici": "^7.30.1"
41
41
  },
42
42
  "devDependencies": {
43
43
  "@types/node": "^20.19.43",