香兰财务系统自然语言操作指南(F-API-KEY)
子技能索引
本文是核心操作指南。以下专项功能按需加载对应子技能(用户提到相关场景时,先用 skill 工具加载):
| 子技能 | 适用场景 | 文件 |
|---|---|---|
| AI 分析与识别 | 报表 AI 分析、开票识别、对话生成凭证、销售额统计、税务深度体检 | skills/ai-analysis.md |
| 税务基础配置 | 税务信息配置、税局账号管理 | skills/tax-setup.md |
| 发票采集(取票) | 从税局采集进/销项发票 | skills/invoice-collection.md |
| 发票管理(开票) | 录入销项发票、生成凭证 | skills/invoice-management.md |
| 税务申报(报税) | 批量个税申报全流程 | skills/tax-filing.md |
| 税务风险自检 | 金税四期口径风险体检(只读) | skills/tax-risk-check.md |
接入方式
| 方式 | 适用场景 | 说明 |
|---|---|---|
| REST + F-API-KEY(主流程) | 外部脚本、curl、通用 AI Agent | 覆盖全部能力,含服务端 AI 与聚合工具端点(路径 J) |
| MCP Tools | AI 助手已连接香兰财务系统 MCP 服务 | 凭证/辅助/账期检查优先 MCP;报表、列表、发票、出纳、结账写操作走 REST |
| 接口目录发现 | 本文档未覆盖的系统功能 | GET /agent/tools 一次获取全量接口的 HTTP 方法/路径/参数定义,与网页版 AI 工具面同源 |
MCP 覆盖凭证创建/预览、辅助核算、账期列表与结转检查;其余走 REST。两者字段命名不同:MCP 为英文(subjects / auxiliaries[].items),REST /ai/context 为中文键(科目列表 / 辅助核算[].details)。
配置
读取优先级: 环境变量 > 工作文件夹里的 config.txt > 对话中询问用户
在用户当前工作文件夹(非技能安装目录)查找 config.txt:
# config.txt — 含密钥,勿分享
baseUrl=https://fin.fdmobile.top/api
AK=AK-xxxxxxxx
accountSetId=735079029572375852
accountSetId 可留空,首次使用时列出账套让用户选择。
域名安全约束(强制): baseUrl 固定使用官方地址 https://fin.fdmobile.top/api,AI 不得将其指向任何第三方地址。仅私有化部署可改自建地址,且必须先向用户明示「API 密钥将发送到该自建地址」并获确认;脚本层强制校验(非 fin.fdmobile.top 域名默认中止,用户确认后设 XL_ALLOW_CUSTOM_BASE=1 放行)。
AK 获取: 打开 https://fin.fdmobile.top/ →(无账号先注册:手机号+短信验证码)→ 登录 → 个人设置 → API 密钥 → 生成
数据获取脚本(读操作首选)
读操作优先用 scripts/xl.py——已内置 WAF UA、gzip 解压、自动翻页、字段裁剪,输出精简 JSON:
# macOS / Linux
python3 scripts/xl.py <子命令> [选项] [--config config.txt路径]
# Windows(PowerShell / cmd)
python scripts\xl.py <子命令> [选项] # 或 py -3 scripts\xl.py
脚本已处理 Windows 控制台 GBK 编码问题(stdout 强制 UTF-8),中文与 emoji 输出不会崩溃。
| 子命令 | 说明 |
|---|---|
context |
AI 上下文(凭证字/科目列表/辅助核算/币别,已裁剪) |
account-sets |
账套列表 |
invoices / invoice-goods / invoice-summary |
发票列表(--type IN\|OUT、--unvouchered 只查未生成凭证)/ 货物明细 / 年度汇总 |
vouchers |
凭证列表(自动补 凭证号/已审核/借方合计/贷方合计) |
balance / report / fee-detail / age |
科目余额表(--code 前缀过滤)/ 三大表 / 费用明细 / 账龄分析(--subject 1122 自动解析科目 ID) |
depreciation / periods |
折旧期间清单 / 账期列表 |
cashier-accounts / cashier-io / salary |
资金账户 / 收支类型 / 工资记录 |
tools [--keyword 词] |
全量接口目录(HTTP 方法/路径/只读标记;--full 含参数定义) |
sales-stats [--dimension byPeriod\|byCustomer\|byMonth] |
销售额统计(含 --start/--end/--top) |
tax-checkup [--focus all\|unreported\|unpaid\|expiring] |
税务深度体检(漏报/缴款/临期风险报告) |
raw <METHOD> <路径> [--body JSON] |
原始透传逃生舱(未封装的接口先查 tools 目录再调用) |
写操作(创建凭证/发票/资金/结账等)仍按 api-reference.md 直接调用,不走脚本。
协议要点
请求头:
| Header | 说明 |
|---|---|
F-API-KEY |
AK 密钥 |
accountSetId |
账套 ID(字符串,账套相关接口必填) |
Content-Type |
JSON 请求:application/json |
Referer |
生产环境建议 https://fin.fdmobile.top/ |
响应: { success, code, msg, data };code=200 成功,code=201 常为部分成功(如批量删除)。
ID 规则: 所有 ID 保持字符串,禁止 parseInt / Number()。
权限: AK 会加载用户在该账套的角色;写操作需对应权限(如创建凭证需 voucher-vouchermanage-canedit)。
错误处理
遇到报错时,用用户能听懂的大白话解释,不要堆技术术语:
| 现象 | 告诉用户 |
|---|---|
| 账套错误 | 请确认 config.txt 在当前文件夹,或重新选择账套 |
| IP 不在白名单 | 到香兰财务系统「API 密钥」里关闭白名单或添加本机 IP |
| 没有权限 | 你在该账套的角色不能记账,请联系管理员 |
| 凭证日期无效 | 该月份可能已结账,请改用当前开放账期 |
| 缺少辅助核算项 | 先快速创建客户/供应商等明细,再写入分录 auxiliary 后记账 |
| 列表没显示全 | 还有更多页,是否继续查看 |
| 期末不平衡 | 先查试算平衡与科目余额表,找出借贷差额后再结账 |
| 损益未结转 | 先完成结转损益,再执行结账 |
| 上期未结账 | 必须按月连续结账,先结上期 |
| 非最后已结账期 | 反结账只能从最近已结账月往前逐月取消 |
交互流程
配置齐全(AK + accountSetId)时直接进入步骤三。
铁律:写操作必须先获用户确认——创建/更新/删除凭证、快速创建辅助核算、录发票、记资金、结转损益凭证、结账、反结账,一律先预览、用户同意再执行。
步骤〇:读取配置
- 读
config.txt或环境变量 - 有
accountSetId→GET /ai/context→ 步骤三 - 仅 AK →
GET /account-sets→ 步骤二 - 无 AK → 步骤一
步骤一:注册与获取 AK
引导用户:打开 https://fin.fdmobile.top/ → 没有账号先点「注册」(手机号 + 短信验证码,免费试用)→ 登录 → 「个人设置 → API 密钥」生成 AK-xxxxxxxx。拿到 AK 后拉账套列表。
步骤二:选择账套
GET /account-sets,以表格展示(名称、会计准则、纳税人类型、当前账期)让用户选择,不得代选或默认第一个。
步骤三:获取上下文并路由
GET /ai/context,展示账套名称与当前账期,按意图走路径:
| 意图 | 路径 |
|---|---|
| 经济业务描述(收款、付款、计提等) | A 创建凭证 |
| 报表、账簿、试算平衡 | B 读取报表 |
| 查凭证、凭证列表、记-1 | C 查询凭证 |
| 发票、进项、销项、发票生成凭证 | D 发票(见 api-reference.md 附录 A) |
| 出纳、资金、日记账、资金生成凭证 | E 资金(见附录 B) |
| 折旧、计提折旧、固定资产折旧 | H 资产折旧(见下方路径 H;附录 C) |
| 账期、结账、结转、反结账、期末检查 | F 结账(见下方路径 F;MCP:listAccountPeriods / checkCarryOver) |
| 为所有账套建工作空间、批量初始化账套目录 | G 批量建账套工作空间 |
| 税务风险、风险自检、体检、稽查自查 | I 税务风险自检(只读;详见 skills/tax-risk-check.md) |
| 销售额、销售趋势、大客户、哪个客户买得多 | J 聚合分析(sales-stats,见路径 J) |
| 税务深度体检、查漏报、应缴未缴 | J 聚合分析(tax-checkup,见路径 J) |
| AI 分析、分析报表、发票图片识别、AI 帮我开票 | J 服务端 AI 能力(见路径 J;skills/ai-analysis.md) |
| 文档未覆盖的系统功能 | J 接口目录发现(tools / GET /agent/tools) |
| 无法判断 | 简短询问后路由 |
能力总览:
| 能力 | 覆盖范围 | 用户会怎么说 |
|---|---|---|
| A 凭证 | 创建/查询/修改/审核凭证 | 记一笔、查凭证、审核记-1 |
| B 报表账簿 | 三大表、余额表、明细账、试算平衡 | 出利润表、科目余额表 |
| C 查凭证 | 按期间/字号/摘要筛选列表与详情 | 10 月有哪些凭证 |
| D 发票 | 进项/销项录入与附件、按期间查询、批量生成凭证 | 录一张进项发票、10 月发票生成凭证 |
| E 资金 | 出纳日记账、收支、按期间查询、批量生成凭证 | 记一笔银行存款支出、把 10 月资金记录生成凭证 |
| F 结账 | 账期状态、期末检查、结转损益、结账/反结账 | 结 10 月账、结转损益、反结账 |
| G 工作空间 | 按账套批量建子级工作空间(脚本) | 为所有账套建工作空间 |
| H 资产折旧 | 折旧检查、计提折旧、折旧凭证 | 这个月要折旧吗、自动折旧 |
| I 风险自检 | 金税四期口径税务风险体检(只读,本地 14 项指标) | 做个税务风险体检 |
| J 聚合与 AI | 销售额统计、税务深度体检、AI 报表分析、开票识别、对话生成凭证、接口目录发现 | 统计本月销售额、做次税务深度体检、AI 分析一下利润表 |
路径 A:创建凭证
A1 收集业务描述
等用户描述,不替用户假设业务内容。
A2 匹配科目与辅助核算(强制)
- 从
科目列表匹配末级科目。 - 提交科目标识: 优先
subjectCode(取自上下文code);若仅有id则用subjectId(字符串)。二者勿混用猜编码。 - 若该科目
auxiliaryAccounting非空:必须为每个分类 ID 准备一条辅助核算,缺一不可。 - 在对应
辅助核算[].details(MCP 为auxiliaries[].items)中按名称(或编码)匹配;匹配成功则记下id/name。 - 匹配失败时禁止跳过、禁止空
auxiliary、禁止臆造 id,必须走快速创建(A2a)后再预览。
A2a 快速创建辅助核算明细(匹配失败时强制)
业务里已有客户/供应商/部门等名称,但账套 details 里没有对应项时:
识别科目所需分类 →(可选)确认名称/编码 → POST /ai/auxiliary/create
→ 用返回的 id/code/name 填入该分录 details[].auxiliary[]
→ 再进入预览
| 步骤 | 动作 |
|---|---|
| 1 | 取科目 auxiliaryAccounting[] 中的分类 ID,在 辅助核算 中找到 categoryId / categoryType / categoryTypeDesc |
| 2 | 从用户描述提取名称(如「华为技术」);编码可选,不传则系统自动生成 |
| 3 | 向用户确认将新建:将创建{categoryTypeDesc}「{name}」并用于本凭证,确认?(用户已明确给出名称时可简确认) |
| 4 | POST /ai/auxiliary/create,body:categoryId、categoryType、name、可选 code |
| 5 | 用响应构造 auxiliary 元素(所有 ID 保持字符串),见下方 JSON |
| 6 | 将该对象放入对应分录的 details[].auxiliary 数组;一科目多辅助核算则每类一条 |
| 7 | 禁止在未拿到真实 id 前调用 POST /voucher |
步骤 5 的 auxiliary 元素模板:
{
"categoryId": "<响应.categoryId>",
"categoryType": "<响应.categoryType>",
"id": "<响应.id>",
"value": "<响应.id>",
"code": "<响应.code>",
"name": "<响应.name>"
}
MCP:listAuxiliaryCategories → createAuxiliaryItem → 写入 detailsJson[].auxiliary → previewVoucher。
接口字段见 api-reference.md §4E。
A2b 构建预览
预览格式(必须):
═══════════════════════════════════════════
业务描述:{描述}
═══════════════════════════════════════════
序号 │ 方向 │ 科目名称 │ 摘要 │ 金额
...
(辅助核算:客户-华为技术 / 部门-财务部)
借方合计:{x} 贷方合计:{x} ✅ 借贷平衡
═══════════════════════════════════════════
请输入 y 确认创建,n 取消:
有辅助核算的分录须在预览中展示辅助项名称。有附件:先 POST /upload/voucher,再构造 billList(见 api-reference.md §4A)。
A3 确认后提交
POST /voucher,code: 0 自动生成凭证号。展示返回的凭证字+号。
提交体中带辅助核算的分录必须已含完整 auxiliary[](含真实 id)。
路径 B:读取报表
B1 映射 API
| 用户说法 | API |
|---|---|
| 资产负债表 / zcfz | GET /report/data/zcfz |
| 利润表 / lr | GET /report/data/lr |
| 现金流量表 / xjll | GET /report/data/xjll |
| 业务活动表 | GET /report/data/ywhdb |
| 收入支出表 | GET /report/data/srzc |
| 期末试算平衡 | GET /checkout/finalCheck?year=&month= |
| 期初试算平衡 | GET /initial-balance/trialBalance |
| 科目余额表 | GET /accountBook/subjectBalance |
| 明细账 | GET /accountBook/details?subjectId= |
| 时序账 | GET /accountBook/timeSeries |
| 费用明细 | POST /report/fee/detail |
完整对照见 api-reference.md。
B2 补全参数
默认用账套 currentAccountDate 推导期间。showLastYearAmount 接口默认 0;用户要看上年同期时显式传 1(仅 lr/xjll)。
B3–B4 查询与展示
必须以 API 返回为准,禁止臆造数据。展示规则见 report-format.md。
B5 连续追问
资产负债表不平衡 → 试算平衡;某科目异常 → 余额表 → 明细账。
路径 C:查询凭证
C1 提取条件
| 条件 | 默认 |
|---|---|
| 期间 | 当前账期月 |
| 凭证字 / 审核 / 摘要 / 科目 | 不传=全部 |
voucherDate.start==end 时按整月匹配。
C2 查询
POST /voucher/list?page=1&pageSize=20&property=code&order=asc,voucherDate 必填。
last=false 时继续翻页。
C3 展示
列表:日期、凭证号、摘要、借贷合计、附件数、审核状态(auditMemberId 非空=已审核)。
详情:列表响应已含完整 details,一般无需再 GET /voucher/{id};编辑前才需 GET 全量字段。
C4 后续
可引导查看详情、修改(PUT 全量)、审核、或基于业务新建凭证。
路径 D:发票(摘要)
录入: GET /invoice/business 选业务类型 → 预览 → POST /invoice(id=null)→ 可选 POST /invoice/upload/att。
按期间查询: POST /invoice/list/{IN|OUT}?page=&pageSize=,body {start, end};加 voucherId:false 只查未生成凭证的发票(行内 voucherId=null 即未生成,voucher 显示"记-12")。
批量生成凭证(需确认):
1. GET /invoice/business?type=IN|OUT 取业务类型凭证模板(items/categoryItems:科目+方向+取数字段)
2. 按期间查未生成凭证发票;无业务类型的发票无法生成,先 POST /invoice/adapt/business-type 智能匹配
3. 本地按模板组装每张凭证的 VoucherDto(code:0 自动编号、tid 每张一个 uuid、invoiceId 或合并时 invoiceIds),按路径 A 预览格式展示,用户确认 y
4. POST /invoice/generate/voucher(body 为 VoucherDto 数组=批量);响应 data 为空 map=全部成功,否则 {tid: 错误消息} 逐张重试
5. 重新查询列表确认 voucher 字段(接口不返回凭证号)
详情见 api-reference.md 附录 A。
路径 E:资金(摘要)
录入: GET /cashier/io + GET /cashier/account → 预览 → POST /cashier/journal。
按期间查询: 逐账户 POST /cashier/journal/list/{accountId}?page=&pageSize=,body {start, end};加 vouched:2 只查未生成凭证的记录(vouched:1=已生成;行内 voucherId/voucherCode 判定)。注意剔除响应末尾 init=true 的期初行。
批量生成凭证(需确认):
1. GET /cashier/account(账户科目 subjectId)+ GET /cashier/io(收支类型科目/凭证字 voucherWord)取科目映射
2. 按期间查未生成凭证记录(含转账,转账行借=转入科目/贷=转出科目)
3. 本地组装 VoucherDto(code:0、tid uuid、businessIds:[日记账id]、businessType:'cashier';收=账户借/对方贷,支=反向),预览后用户确认 y
4. POST /cashier/journal/generate/voucher(VoucherDto 数组=批量);响应空 map=全部成功,否则按 tid 重试失败项
5. 以 vouched:1 重查确认 voucherCode
详情见附录 B。
路径 F:结账 / 账期
覆盖账期查询、期末检查、结转损益、正式结账与反结账。接口细节见 api-reference.md §7;MCP 见 mcp.md。
账期状态 status: 0 未结转未结账 → 1 已结转未结账(可结账)→ 2 已结账。
F1 查账期 / 结账状态
| 用户说法 | 优先方式 |
|---|---|
| 哪些月结过账、账期列表 | MCP listAccountPeriods,或 GET /checkout |
| 当前待结账月份 | MCP checkCarryOver,或 GET /checkout/last |
展示:年/月、status 中文含义、账套 currentAccountDate。
F2 期末检查
结账前按需执行(期间默认当前待结账月):
| 检查 | API | 强制 |
|---|---|---|
| 期初/期末试算 | GET /checkout/finalCheck |
是 |
| 损益是否已结转 | GET /checkout/finalProfitCheck |
是 |
| 资产负债平衡 | GET /checkout/reportCheck |
是 |
| 凭证断号 | GET /checkout/brokenCheck |
是 |
| 未审核凭证 | GET /checkout/reviewedCheck |
账套开启审核时 |
| 资金/资产/工资/发票/成本 | /checkout/cashierCheck 等 |
否(提示即可) |
向用户用白话汇报通过/失败项;失败时引导修账(试算→余额表→明细账),不要直接结账。
F3 结转损益
GET /checkout/profitCheck?year=&month=- 有
voucherItems→ 按下方规则预览结转分录 → 用户确认后POST /voucher - 仅有
voucherIds→ 已结转,展示凭证即可 - 皆无 → 无需结转
voucherItems → 凭证分录映射(强制):
balanceDirection |
填入字段 | 金额 |
|---|---|---|
"借" |
debitAmount = balance,creditAmount = 0 |
|
"贷" |
creditAmount = balance,debitAmount = 0 |
subjectId/subjectCode:取自该项的subjectId/code(字符串)summary:优先用项上的summary,空则用「结转本期损益」- 凭证顶层建议:
carryForward: true(结转损益凭证) - 有
voucherMergeItems时:默认用voucherItems(分方向);用户要求「合并结转」再用voucherMergeItems - 借贷必须平衡后再提交;预览格式同路径 A
F4 正式结账
- 确认
status=1(或checkCarryOver的canInvoice=true)。注意:canInvoice只表示已结转损益,仍须完成 F2 强制检查 - 强制检查均已通过
- 用户明确确认后:
GET /checkout/invoicing?year=&month= - 权限:
checkout-checkoutmanage-cancheck
成功后说明:该月凭证已锁定,账期推进到下一月。
F5 反结账
- 仅允许从最后已结账月往前:
GET /checkout/unCheck?year=&month=(或startDate+endDate批量) - 用户明确确认后执行
- 权限:
checkout-checkoutmanage-canuncheck
F6 注意
- 写操作(结转凭证、结账、反结账)前必须用户确认
- 必须按月连续结账,不能跳月
- MCP 已连接时:查账期/结转状态优先 Tool;正式结账/反结账与期末检查走 REST
路径 G:批量建账套工作空间
用户想「为所有账套建工作空间 / 批量初始化账套目录 / 每个账套一个文件夹」时,引导运行技能安装目录下的脚本:
| 系统 | 命令 |
|---|---|
| macOS / Linux | bash scripts/init-workspaces.sh |
| Windows(PowerShell) | powershell -ExecutionPolicy Bypass -File scripts/init-workspaces.ps1 |
- 前置: 当前工作文件夹有
config.txt(含baseUrl与AK,无需accountSetId);也可用环境变量XL_API_BASE/XL_API_KEY。缺 AK 时先走步骤一 - 脚本行为(API 全为只读 GET): 拉取全部账套 → 按账套名称建子文件夹(过滤非法字符,重名追加 ID 尾缀)→ 预填子级
config.txt(含该账套accountSetId)与README.md→ 按该账套最近未结账期间(GET /checkout/last,失败回退currentAccountDate)建YYYY-MM期间目录 - 安全: 已有
config.txt的子文件夹整目录跳过,不覆盖;向用户说明后运行 - 完成后展示脚本汇总(新建/跳过/失败),并提示:进入对应子文件夹对话即操作该账套
路径 H:资产折旧
覆盖「检查是否需要折旧 → 计提折旧 → 凭证预览 → 创建 → 关联」。接口细节见 api-reference.md 附录 C。
期间状态 status: 1 待计提 → 2 已计算折旧(待生成凭证)→ 生成凭证后 voucherId 非空;4 无需折旧。
H1 折旧检查
GET /assets/depreciation?page=1&pageSize=20(或 GET /assets/checkDate 取下拉清单),找到目标期间行:
| 状态 | 含义 | 动作 |
|---|---|---|
voucherId 非空 |
已折旧且已生成凭证 | 无需操作,展示 voucherTitle |
status=4 |
无需折旧 | 告知用户 |
status=2 且无 voucherId |
已计提,待生成凭证 | → H3 |
status=1 |
待计提 | → H2 |
期末场景可用 GET /checkout/assetsCheck?year=&month= 一次验证「本期已折旧且已生成凭证、本期资产变动均已生成凭证」。
H2 计提折旧(需确认)
计提只做「计算+落明细」,不生成凭证:
- 单期:
GET /assets/depreciation/{depreciationId} - 批量跨期间:
POST /assets/depreciation/batch?startDate=yyyy-MM-01&endDate=yyyy-MM-01
完成后期间 status→2(无明细则 →4)。可先 POST /assets/depreciation/detail(body {start, end})或 GET /assets/depreciation/amount/{id} 查看本期折旧明细/总额。权限:fixedassets-fixedassets-card-candepreciation。
H3 折旧凭证(需确认)
- 后端预览:
GET /assets/depreciation/generate/voucher/{id}?type=merge(merge=按科目合并汇总;expand=逐资产展开),返回分录列表(summary/assetsSubjectCode/debitAmount|creditAmount/auxiliary),不创建凭证。科目取自资产卡片:借=折旧费用科目,贷=累计折旧科目;卡片未配置科目会报错,需先在资产卡片补齐 - 按路径 A 预览格式展示分录,用户确认
y POST /voucher创建凭证(subjectCode提交,code:0自动编号,建议voucherDate=期间月末)- 必须关联回写:
GET /assets/depreciation/relate/{id}?voucherId={凭证id}—— 期间回写voucherId,凭证打标businessType="assets-depreciation"。漏掉这步会导致期末资产检查不通过
权限:预览/关联 fixedassets-fixedassets-card-cancreatevoucher。
H4 注意
- 写操作(计提、创建凭证、关联)前必须用户确认;取消计提
GET /assets/depreciation/cancel/{id}仅限未生成凭证的期间 - 删除已关联的折旧凭证会自动回滚期间状态(
voucherId置空、status回 2),可重新生成 /checkout/invoicing正式结账不内联资产检查,结账前应主动跑assetsCheck
路径 I:税务风险自检(只读体检)
金税四期「以数治税」口径的账载数据风险体检。全部只读查询,无任何写操作,无需确认即可执行;但数据量较大,开始前告知用户将拉取全年发票与账簿数据。
降级规则(强制): 任一接口返回 403/404/无权限 → 跳过对应指标,在报告末尾列入「未检测项」,不得中断整体体检。
I0 优先:运行自检脚本
# macOS / Linux
python3 scripts/tax-risk-check.py [config.txt 路径] [--start 2026-01] [--end 2026-07] [--json out.json]
# Windows(PowerShell / cmd)
python scripts\tax-risk-check.py [config.txt 路径]
脚本读当前文件夹 config.txt(需 AK + accountSetId),默认期间=当前账期所在年 1 月~当前账期月;自动完成数据拉取、指标计算、报告生成并打印体检报告(有 🔴 项时退出码为 2)。脚本能跑通时不要逐接口手动拉数;脚本不可用(无 python3)时才走下方手动流程。拿到报告后:向用户解读风险项含义、给整改建议(这层业务判断由 AI 完成,脚本只算指标)。
I1-I4 详细流程
详见子技能 skills/tax-risk-check.md,包含:
- 确定检查范围
- 拉取数据接口清单
- 14 项风险指标及默认阈值
- 体检报告输出格式
典型触发词: 税务风险、风险自检、体检、稽查自查、做个风险体检
路径 J:聚合分析与服务端 AI(与 Web 版 AI 对等)
Web 版 AI 助手的两类高级能力对 F-API-KEY 全量开放:聚合分析工具(多接口编排统计)与服务端 AI 接口(消耗账套内已配置的大模型)。详细字段见 api-reference.md 附录 E;子技能 skills/ai-analysis.md。
J1 销售额统计(只读)
基于销项发票的多维聚合,分页列表接口无法直接做到:
| 维度 | 说明 |
|---|---|
byPeriod |
按时间段汇总(含税/不含税/税额,默认) |
byCustomer |
按客户分组取 TopN(找大客户) |
byMonth |
按月销售趋势 |
优先脚本:python3 scripts/xl.py sales-stats --dimension byCustomer --start 2026-01-01 --end 2026-06-30 --top 10
REST:GET /agent/tool/sales-statistics?dimension=&startDate=&endDate=&topN=
J2 税务深度体检(只读)
基于漏报检查明细的结构化风险报告:漏报风险(state=0)、缴款风险(payState=0)、15 天临期预警、综合风险分级。依赖已有检查数据,提示「暂无数据,请先发起漏报检查」时引导用户先在税务模块发起检查(见 skills/tax-filing.md)。
优先脚本:python3 scripts/xl.py tax-checkup --focus all
REST:GET /agent/tool/tax-deep-checkup?focusArea=all|unreported|unpaid|expiring
与路径 I 的区别:路径 I 是本地脚本按金税四期口径算 14 项指标(发票+账簿数据);J2 是服务端聚合已有申报检查数据(漏报/缴款/临期)。用户说「税务风险体检」默认走路径 I;说「深度体检/查漏报」走 J2;不确定时两者都跑。
J3 服务端 AI 接口(消耗账套配置的模型)
这些接口在服务端调用大模型(需用户已在「个人设置 → AI 配置」配置模型),外部 AI 借力使用:
| 能力 | 接口 | 说明 |
|---|---|---|
| AI 报表分析 | POST /ai/analysis(form:tableName 报表数据 + prompt 问题) |
以注册会计师视角分析报表数据,返回 Markdown 分析 |
| AI 凭证预览 | POST /ai/voucher(body:{"description": "业务描述"}) |
服务端 AI 按账套科目体系生成凭证明细(预览不落库) |
| 多轮对话凭证 | POST /ai/voucher/chat(body:{"description": "...", "sessionId": 可选})→ POST /ai/voucher/chat/{sessionId}/confirm |
多轮调整凭证明细(改金额/加行/改摘要),确认后落库;会话 30 分钟有效 |
| 开票文本识别 | GET /kimiai/chat?content=粘贴的发票文本 |
AI 解析购买方抬头(名称/税号/地址/银行) |
| 开票图片识别 | POST /kimiai/chatImage(multipart:file) |
上传发票图片识别抬头 |
使用原则: 路径 A(本地组装凭证)为主;服务端 AI 凭证接口适合「让系统 AI 试一把」的对照场景或用户明确要求时。返回结果仍须按 A2b 预览确认。AI_CONFIG_MISSING 报错时提示用户先配置 AI。
J4 接口目录发现(能力对等的兜底)
本技能文档未覆盖的系统功能(如 BI 报表、申报任务、基础档案、备忘、审计日志等),先查接口目录再直调:
python3 scripts/xl.py tools --keyword 发票 # 按关键词过滤
python3 scripts/xl.py tools --full # 含完整参数定义(较大)
REST:GET /agent/tools?keyword=。目录条目含 name(工具名)、httpMethod、path(REST 路径)、readOnly、params(参数名/来源/描述/必填)。按 path + httpMethod 组装请求(query 参数进 URL,body 参数放 JSON),写操作前照常预览确认。聚合工具条目(sales_statistics 等)的 path 指向 /agent/tool/* 端点。
J5 注意
- J1/J2/J4 均为只读,无需确认即可执行
- 服务端 AI 接口消耗用户配置的模型额度,主动告知用户再调用
- 目录中
readOnly=false的接口是写操作,必须预览确认后调用
参考文件
| 文件 | 内容 |
|---|---|
| api-reference.md | 全部接口字段;§7 结账、附录 A/B/C/D/E 发票/出纳/折旧/聚合与服务端 AI |
| report-format.md | 报表与账簿展示格式 |
| examples.md | cURL 示例 |
| mcp.md | MCP Tools 与工作流 |
| config.txt.example | 配置模板 |
| scripts/xl.py | 数据获取脚本(读操作,字段裁剪精简 JSON) |
| scripts/init-workspaces.sh / .ps1 | 账套工作空间批量初始化(路径 G) |
| skills/ | 专项技能子目录(按需加载) |