Files
bid-doctor/packages/api-client/src/schema.d.ts
YANG JIANKUAN f99bb8b358 feat(server): 参考 BidEngine 补五项:原因码、截断重跑、项目信息逐项表态、占位符、提示词规则对应校验
- 待确认记原因码(extract.FAILURES,存在 ai_values.failures),解析结果按原因计数
  (verify_failures);前端待确认条目显示具体原因
- 相邻分块重叠约 800 字;模型输出被截断或不是合法 JSON 时对半重跑(最多 3 层),
  拆到底仍不完整记 output_incomplete。修复:以前截断时整块条目被当成「没有结果」悄悄丢掉
- 项目基本信息提示词 v2:12 个字段逐项表态 found / ambiguous / not_found,跨分块合并为
  found / absent / needs_review(info_fields)
- 「____元」「××」「( )」「待填」等占位符不算取值
- 提示词 substantive v4,qualification / scoring / schedule / tech_param v3:每条禁止事项
  对应一个原因码,对照表在 prompts/README.md
- 顾问(Fable)深读参考项目的结论补进 ref-bid-engine-analysis.md §5;架构 §13 SK12
- 待确认:国动 4 → 2,S02 13 → 3,S06 57 → 55

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 21:59:12 +08:00

4480 lines
142 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* This file was auto-generated by openapi-typescript.
* Do not make direct changes to the file.
*/
export interface paths {
"/auth/sms-codes": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
get?: never;
put?: never;
/** 发送短信验证码 */
post: operations["sendSmsCode"];
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/auth/register": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
get?: never;
put?: never;
/** 手机号注册(同时创建企业主体和免费版订阅) */
post: operations["register"];
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/auth/login": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
get?: never;
put?: never;
/**
* 手机号 + 验证码登录
* @description 同一账号已有其他设备在线时返回 409 `concurrent_session`,附在线设备列表;
* 用户确认后带 `force: true` 重发,其他会话被挤下线(API3)。
*
*/
post: operations["login"];
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/auth/logout": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
get?: never;
put?: never;
/** 退出登录(吊销当前会话) */
post: operations["logout"];
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/me": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
/** 当前用户、企业、套餐、权限点 */
get: operations["getMe"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
/** 修改显示名 */
patch: operations["updateMe"];
trace?: never;
};
"/me/sessions": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
/** 我的在线会话 */
get: operations["listMySessions"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/me/sessions/{session_id}": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
get?: never;
put?: never;
post?: never;
/** 让某个设备下线 */
delete: operations["revokeMySession"];
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/tenant/close": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
get?: never;
put?: never;
/**
* 注销账号(删除企业下全部业务数据,不可恢复)
* @description data-model §6.2。需要短信验证码和企业名称两次确认。成功后当前会话失效。
*/
post: operations["closeTenant"];
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/plans": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
/** 套餐列表(含额度、文件大小和页数上限,购买页和上传页展示用) */
get: operations["listPlans"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/quota": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
/** 额度总览:本期已用、剩余、按功能分布 */
get: operations["getQuota"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/quota/entries": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
/** 额度流水 */
get: operations["listQuotaEntries"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/activation-requests": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
/** 我的专业版开通申请 */
get: operations["listActivationRequests"];
put?: never;
/** 提交专业版开通申请(之后对公转账,运营确认到账后开通,G8) */
post: operations["createActivationRequest"];
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/projects": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
/** 工作台项目列表(FR-M6-01) */
get: operations["listProjects"];
put?: never;
/** 新建项目 */
post: operations["createProject"];
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/projects/{project_id}": {
parameters: {
query?: never;
header?: never;
path: {
project_id: components["parameters"]["ProjectId"];
};
cookie?: never;
};
/** 项目概览 */
get: operations["getProject"];
put?: never;
post?: never;
/** 删除项目(彻底删除业务内容,不可恢复;额度流水保留,G10) */
delete: operations["deleteProject"];
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/projects/{project_id}/fields/{field_key}": {
parameters: {
query?: never;
header?: never;
path: {
project_id: components["parameters"]["ProjectId"];
field_key: components["schemas"]["ProjectFieldKey"];
};
cookie?: never;
};
get?: never;
/**
* 人工修改项目基本信息字段(FR-M2-03)
* @description `value` 为 null 表示撤销人工值,恢复为 AI 提取值。
*/
put: operations["setProjectField"];
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/projects/{project_id}/fields/{field_key}/pending": {
parameters: {
query?: never;
header?: never;
path: {
project_id: components["parameters"]["ProjectId"];
field_key: components["schemas"]["ProjectFieldKey"];
};
cookie?: never;
};
get?: never;
put?: never;
/** 确认或驳回补遗带来的新值(FR-M2-10) */
post: operations["resolvePendingField"];
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/projects/{project_id}/transitions": {
parameters: {
query?: never;
header?: never;
path: {
project_id: components["parameters"]["ProjectId"];
};
cookie?: never;
};
get?: never;
put?: never;
/**
* 手动变更项目状态(递交 / 撤销递交 / 归档 / 撤销归档,FR-M6-02)
* @description 致命问题未处理也可以递交(红线 4);响应里带当时的就绪状态,由前端提示。
*/
post: operations["transitionProject"];
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/projects/{project_id}/lots": {
parameters: {
query?: never;
header?: never;
path: {
project_id: components["parameters"]["ProjectId"];
};
cookie?: never;
};
/** 分包列表 */
get: operations["listLots"];
put?: never;
/** 手工增加分包(FR-M2-04) */
post: operations["createLot"];
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/projects/{project_id}/bidding-lots": {
parameters: {
query?: never;
header?: never;
path: {
project_id: components["parameters"]["ProjectId"];
};
cookie?: never;
};
get?: never;
/** 选择要投的包 */
put: operations["setBiddingLots"];
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/lots/{lot_id}": {
parameters: {
query?: never;
header?: never;
path: {
lot_id: components["schemas"]["Id"];
};
cookie?: never;
};
get?: never;
put?: never;
post?: never;
/** 删除分包(原属这个包的清单项变为各包通用) */
delete: operations["deleteLot"];
options?: never;
head?: never;
/** 修改分包 */
patch: operations["updateLot"];
trace?: never;
};
"/uploads": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
get?: never;
put?: never;
/**
* 开始一次分片上传(架构 §5.2 第 7 条)
* @description 先按套餐校验文件大小;超出上限直接返回 409,不建上传(FR-M2-01)。
*/
post: operations["createUpload"];
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/uploads/{upload_id}": {
parameters: {
query?: never;
header?: never;
path: {
upload_id: components["parameters"]["UploadId"];
};
cookie?: never;
};
/** 查询已收到的分片(断点续传用) */
get: operations["getUpload"];
put?: never;
post?: never;
/** 放弃上传 */
delete: operations["abortUpload"];
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/uploads/{upload_id}/parts/{part_no}": {
parameters: {
query?: never;
header?: never;
path: {
upload_id: components["parameters"]["UploadId"];
part_no: number;
};
cookie?: never;
};
get?: never;
/** 上传一个分片(重复上传同一分片会覆盖) */
put: operations["putUploadPart"];
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/uploads/{upload_id}/complete": {
parameters: {
query?: never;
header?: never;
path: {
upload_id: components["parameters"]["UploadId"];
};
cookie?: never;
};
get?: never;
put?: never;
/**
* 完成上传:合并分片、按文件头识别格式、读页数
* @description 格式、加密、损坏、页数超限都在这里拦截,不建任务、不扣点(FR-M2-01)。
* 识别出电子投标平台的加密格式时返回 `bid_file_platform_encrypted`(FR-M3-01)。
*
*/
post: operations["completeUpload"];
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/projects/{project_id}/documents": {
parameters: {
query?: never;
header?: never;
path: {
project_id: components["parameters"]["ProjectId"];
};
cookie?: never;
};
/** 项目的文档(招标文件、补遗、澄清、投标分册的各个版本) */
get: operations["listDocuments"];
put?: never;
/** 把上传好的文件挂到项目上(不扣点;招标侧文件要另外发起解析) */
post: operations["createDocument"];
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/documents/{document_id}": {
parameters: {
query?: never;
header?: never;
path: {
document_id: components["parameters"]["DocumentId"];
};
cookie?: never;
};
/** 文档详情 */
get: operations["getDocument"];
put?: never;
post?: never;
/**
* 删除文档
* @description 已被清单项或检查批次引用的文档不能删除,返回 `document_in_use`。
*/
delete: operations["deleteDocument"];
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/documents/{document_id}/file": {
parameters: {
query?: never;
header?: never;
path: {
document_id: components["parameters"]["DocumentId"];
};
cookie?: never;
};
/** 取文件的短时下载地址(pdf.js 直接加载,不需要带鉴权头) */
get: operations["getDocumentFileUrl"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/documents/{document_id}/pages": {
parameters: {
query?: never;
header?: never;
path: {
document_id: components["parameters"]["DocumentId"];
};
cookie?: never;
};
/** 逐页摘要(阅读器的页尺寸、OCR 标记) */
get: operations["listDocumentPages"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/documents/{document_id}/pages/{page_no}/sentences": {
parameters: {
query?: never;
header?: never;
path: {
document_id: components["parameters"]["DocumentId"];
page_no: number;
};
cookie?: never;
};
/** 一页的句子(阅读器里选句补出处用;数据来自对象存储的文字层,DM1) */
get: operations["listPageSentences"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/projects/{project_id}/citations": {
parameters: {
query?: never;
header?: never;
path: {
project_id: components["parameters"]["ProjectId"];
};
cookie?: never;
};
get?: never;
put?: never;
/** 人工建一条出处(在阅读器里选中句子) */
post: operations["createCitation"];
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/documents/{document_id}/parse-jobs": {
parameters: {
query?: never;
header?: never;
path: {
document_id: components["parameters"]["DocumentId"];
};
cookie?: never;
};
get?: never;
put?: never;
/**
* 发起解析(预扣 1 次解析;失败、超时、取消都退回)
* @description 只用于招标文件、补遗、澄清;投标分册的解析算在检查里(01 §4)。
* 失败后重试也调用这个接口,会建一条新任务并重新预扣,上一条已经退回(FR-M2-02)。
*
*/
post: operations["startParseJob"];
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/parse-jobs/{job_id}": {
parameters: {
query?: never;
header?: never;
path: {
job_id: components["parameters"]["JobId"];
};
cookie?: never;
};
/** 解析进度(事件流断线时的轮询兜底) */
get: operations["getParseJob"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/parse-jobs/{job_id}/cancel": {
parameters: {
query?: never;
header?: never;
path: {
job_id: components["parameters"]["JobId"];
};
cookie?: never;
};
get?: never;
put?: never;
/** 取消解析(退回额度) */
post: operations["cancelParseJob"];
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/projects/{project_id}/checklist": {
parameters: {
query?: never;
header?: never;
path: {
project_id: components["parameters"]["ProjectId"];
};
cookie?: never;
};
/** 清单概况:状态、版本、各类数量、标注规则、数量核对提示 */
get: operations["getChecklist"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/projects/{project_id}/checklist/items": {
parameters: {
query?: never;
header?: never;
path: {
project_id: components["parameters"]["ProjectId"];
};
cookie?: never;
};
/** 清单项(一个项目几百条,一次返回全部,不分页) */
get: operations["listChecklistItems"];
put?: never;
/** 人工新增清单项(标注「人工添加」,可以没有出处) */
post: operations["createChecklistItem"];
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/checklist-items/{item_id}": {
parameters: {
query?: never;
header?: never;
path: {
item_id: components["parameters"]["ItemId"];
};
cookie?: never;
};
/** 清单项详情 */
get: operations["getChecklistItem"];
put?: never;
post?: never;
/** 删除(软删除,可以恢复;待确认区的条目就是「丢弃」) */
delete: operations["deleteChecklistItem"];
options?: never;
head?: never;
/** 修改清单项(改过的字段记入 edited_fields;已确认的清单回到草稿) */
patch: operations["updateChecklistItem"];
trace?: never;
};
"/checklist-items/{item_id}/restore": {
parameters: {
query?: never;
header?: never;
path: {
item_id: components["parameters"]["ItemId"];
};
cookie?: never;
};
get?: never;
put?: never;
/** 恢复已删除的条目 */
post: operations["restoreChecklistItem"];
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/checklist-items/{item_id}/accept": {
parameters: {
query?: never;
header?: never;
path: {
item_id: components["parameters"]["ItemId"];
};
cookie?: never;
};
get?: never;
put?: never;
/**
* 从待确认区采纳进正式清单(FR-M2-07)
* @description 必须补上出处,或者声明「人工确认、无出处」;可以同时修改字段(修改后采纳)。
*/
post: operations["acceptPendingItem"];
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/checklist-items/{item_id}/citations": {
parameters: {
query?: never;
header?: never;
path: {
item_id: components["parameters"]["ItemId"];
};
cookie?: never;
};
get?: never;
/** 替换清单项的出处列表(按顺序) */
put: operations["setItemCitations"];
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/checklist-items/{item_id}/supersession": {
parameters: {
query?: never;
header?: never;
path: {
item_id: components["parameters"]["ItemId"];
};
cookie?: never;
};
get?: never;
put?: never;
/**
* 确认或驳回「已被补遗 N 更新」(FR-M2-10)
* @description 接受时旧条目软删除,新条目保留;驳回时解除关联,两条都保留,由用户自己处理。
*/
post: operations["resolveSupersession"];
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/checklist-items/{item_id}/history": {
parameters: {
query?: never;
header?: never;
path: {
item_id: components["parameters"]["ItemId"];
};
cookie?: never;
};
/** 修改记录(谁、什么时候、改前、改后;来自审计事件) */
get: operations["getItemHistory"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/projects/{project_id}/checklist/confirm": {
parameters: {
query?: never;
header?: never;
path: {
project_id: components["parameters"]["ProjectId"];
};
cookie?: never;
};
get?: never;
put?: never;
/** 确认清单(生成不可变版本) */
post: operations["confirmChecklist"];
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/projects/{project_id}/checklist/versions": {
parameters: {
query?: never;
header?: never;
path: {
project_id: components["parameters"]["ProjectId"];
};
cookie?: never;
};
/** 清单版本 */
get: operations["listChecklistVersions"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/projects/{project_id}/check-preview": {
parameters: {
query?: never;
header?: never;
path: {
project_id: components["parameters"]["ProjectId"];
};
cookie?: never;
};
/**
* 发起检查前的预览:这次扣不扣点、用哪些文件、有什么提示
* @description 「开始检查」按钮旁的扣点说明来自这里(红线 9)。
*/
get: operations["getCheckPreview"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/projects/{project_id}/check-runs": {
parameters: {
query?: never;
header?: never;
path: {
project_id: components["parameters"]["ProjectId"];
};
cookie?: never;
};
/** 检查记录 */
get: operations["listCheckRuns"];
put?: never;
/** 发起检查(FR-M3-02) */
post: operations["startCheckRun"];
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/check-runs/{run_id}": {
parameters: {
query?: never;
header?: never;
path: {
run_id: components["parameters"]["RunId"];
};
cookie?: never;
};
/** 检查批次(进度、覆盖范围、各级别数量) */
get: operations["getCheckRun"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/check-runs/{run_id}/cancel": {
parameters: {
query?: never;
header?: never;
path: {
run_id: components["parameters"]["RunId"];
};
cookie?: never;
};
get?: never;
put?: never;
/** 取消检查(退回额度) */
post: operations["cancelCheckRun"];
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/check-runs/{run_id}/findings": {
parameters: {
query?: never;
header?: never;
path: {
run_id: components["parameters"]["RunId"];
};
cookie?: never;
};
/** 本批次的全部问题(含「本次已解决」,一次返回全部) */
get: operations["listFindings"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/check-runs/{run_id}/findings/bulk-resolve": {
parameters: {
query?: never;
header?: never;
path: {
run_id: components["parameters"]["RunId"];
};
cookie?: never;
};
get?: never;
put?: never;
/** 批量处理(只限「提示」级,FR-M3-07) */
post: operations["bulkResolveFindings"];
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/findings/{finding_id}/resolve": {
parameters: {
query?: never;
header?: never;
path: {
finding_id: components["parameters"]["FindingId"];
};
cookie?: never;
};
get?: never;
put?: never;
/**
* 处理一个问题
* @description 忽略必须写原因;致命问题选「确认无误」也必须写说明,说明同时进入误报反馈(U4)。
* 只有最近一次检查的问题可以处理,历史批次只读。
*
*/
post: operations["resolveFinding"];
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/findings/{finding_id}/reopen": {
parameters: {
query?: never;
header?: never;
path: {
finding_id: components["parameters"]["FindingId"];
};
cookie?: never;
};
get?: never;
put?: never;
/** 撤销处理,回到待处理(U 键) */
post: operations["reopenFinding"];
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/projects/{project_id}/manual-checks": {
parameters: {
query?: never;
header?: never;
path: {
project_id: components["parameters"]["ProjectId"];
};
cookie?: never;
};
/** 需人工核对的条目和勾选结果(按项目存,P2) */
get: operations["listManualChecks"];
/** 勾选或取消勾选一条 */
put: operations["setManualCheck"];
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/check-runs/{run_id}/reports": {
parameters: {
query?: never;
header?: never;
path: {
run_id: components["parameters"]["RunId"];
};
cookie?: never;
};
get?: never;
put?: never;
/**
* 生成检查报告 PDF(后台生成,完成后推送事件)
* @description 致命问题未处理也可以导出(红线 4)。每次生成都是一份新报告。
*/
post: operations["generateReport"];
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/report-jobs/{job_id}": {
parameters: {
query?: never;
header?: never;
path: {
job_id: components["parameters"]["JobId"];
};
cookie?: never;
};
/** 报告生成进度(轮询兜底) */
get: operations["getReportJob"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/projects/{project_id}/reports": {
parameters: {
query?: never;
header?: never;
path: {
project_id: components["parameters"]["ProjectId"];
};
cookie?: never;
};
/** 项目的报告(随项目归档,可以重复下载) */
get: operations["listReports"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/reports/{report_id}/file": {
parameters: {
query?: never;
header?: never;
path: {
report_id: components["schemas"]["Id"];
};
cookie?: never;
};
/** 报告的短时下载地址 */
get: operations["getReportFileUrl"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/qualifications": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
/** 资质库 */
get: operations["listQualifications"];
put?: never;
/** 新增资质 */
post: operations["createQualification"];
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/qualifications/{qualification_id}": {
parameters: {
query?: never;
header?: never;
path: {
qualification_id: components["parameters"]["QualificationId"];
};
cookie?: never;
};
get?: never;
/** 修改资质 */
put: operations["updateQualification"];
post?: never;
/** 删除资质(连同附件) */
delete: operations["deleteQualification"];
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/qualifications/{qualification_id}/files": {
parameters: {
query?: never;
header?: never;
path: {
qualification_id: components["parameters"]["QualificationId"];
};
cookie?: never;
};
get?: never;
put?: never;
/** 挂上一个已上传的附件 */
post: operations["attachQualificationFile"];
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/qualifications/{qualification_id}/files/{file_id}": {
parameters: {
query?: never;
header?: never;
path: {
qualification_id: components["parameters"]["QualificationId"];
file_id: components["schemas"]["Id"];
};
cookie?: never;
};
/** 附件的短时下载地址 */
get: operations["getQualificationFileUrl"];
put?: never;
post?: never;
/** 删除附件 */
delete: operations["deleteQualificationFile"];
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/notifications": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
/** 站内通知 */
get: operations["listNotifications"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/notifications/read": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
get?: never;
put?: never;
/** 标为已读(不传编号就是全部已读) */
post: operations["markNotificationsRead"];
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/events": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
/**
* 事件流(SSE)
* @description 当前用户在当前企业下的事件。前端用 fetch 读流(可以带 Bearer 头),不用浏览器的 EventSource(API2)。
* 每条事件带 `id`;断线重连时带 `Last-Event-ID`,服务端尽量补发,补不了时发 `resync`,前端重新拉取数据。
* 事件只是「有变化」的提示,权威状态以对应资源的 GET 为准。
*
*/
get: operations["streamEvents"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/feedback": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
get?: never;
put?: never;
/** 反馈判断有误(误报 / 漏报,J5) */
post: operations["createFeedback"];
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
}
export type webhooks = Record<string, never>;
export interface components {
schemas: {
/** Format: uuid */
Id: string;
/**
* Format: date-time
* @description RFC 3339,带时区
*/
Timestamp: string;
/** @description 金额用字符串传,避免浮点误差;单位元 */
Money: string;
/** @description 中国大陆手机号,11 位 */
Phone: string;
Page: {
/** @description 为 null 表示没有下一页 */
next_cursor: string | null;
};
/** @description RFC 9457 problem details,`code` 是给前端判断用的稳定编码(api-design §5) */
Problem: {
/** @description 固定为 about:blank 或错误码文档地址 */
type: string;
/** @description 给用户看的一句话(中文) */
title: string;
status: number;
code: string;
detail?: string;
request_id: string;
errors?: {
/** @description 字段路径,如 spec.tech_param.value */
field: string;
code: string;
message: string;
}[];
} & {
[key: string]: unknown;
};
DownloadUrl: {
/** Format: uri */
url: string;
expires_at: components["schemas"]["Timestamp"];
sha256?: string;
};
/** @description 操作人;人离职或注销后仍显示当时的姓名 */
UserRef: {
id: components["schemas"]["Id"];
name: string;
};
/** @enum {string} */
ProjectStatus: "tracking" | "drafting" | "checked" | "submitted" | "archived";
/** @enum {string} */
LegalRegime: "gov_procurement" | "tendering" | "unknown";
/** @enum {string} */
DocumentRole: "tender" | "addendum" | "clarification" | "bid_volume";
/** @enum {string} */
DetectedFormat: "pdf" | "docx" | "doc" | "wps" | "ofd" | "encrypted_bid" | "unknown";
/** @enum {string} */
JobStatus: "queued" | "running" | "succeeded" | "failed" | "cancelled";
/** @enum {string} */
Category: "qualification" | "invalidity" | "scoring" | "schedule" | "tech_param" | "format_doc" | "price";
/**
* @description 界面显示为 ★ / ▲ / 一般
* @enum {string}
*/
Importance: "substantive" | "important" | "normal";
/** @enum {string} */
Zone: "pending" | "formal";
/** @enum {string} */
PendingReason: "no_citation" | "low_confidence" | "verify_failed" | "marker_uncovered" | "absent_in_rerun";
/** @enum {string} */
Origin: "ai" | "rule" | "human";
/** @enum {string} */
FindingType: "unresponded" | "negative_deviation" | "suspected_unmet" | "formality" | "qualification" | "price_form" | "manual_review";
/** @enum {string} */
Severity: "fatal" | "important" | "hint";
/** @enum {string} */
FindingStatus: "pending" | "confirmed_ok" | "modified" | "ignored";
/**
* @description 新增 / 沿用 / 本次已解决
* @enum {string}
*/
Presence: "new" | "carried" | "resolved";
/** @enum {string} */
BillingMode: "charged" | "waived_recheck" | "free_plan";
/** @enum {string} */
QuotaUnit: "parse" | "check" | "generate" | "dedupe";
/** @enum {string} */
QuotaEntryKind: "grant" | "hold" | "settle" | "release" | "expire" | "adjust" | "waive";
/** @enum {string} */
PlanCode: "free" | "pro" | "enterprise";
/** @enum {string} */
QualificationKind: "certificate" | "system_cert" | "software_copyright" | "other";
/** @enum {string} */
ProjectFieldKey: "name" | "code" | "purchaser" | "agency" | "procurement_method" | "legal_regime" | "budget_total" | "ceiling_total" | "eval_method" | "accept_consortium" | "accept_imported" | "sme_only" | "deadline_at";
/**
* @description 工作台「下一步」,由服务端按项目状态算出
* @enum {string}
*/
NextAction: "upload_tender" | "wait_parse" | "select_lots" | "confirm_checklist" | "upload_bid" | "run_check" | "handle_fatal" | "export_report" | "archive" | "none";
/**
* @description 权限点(AR12)。MVP 的所有者拥有全部;前端只用来决定按钮显不显示,服务端仍会检查
* @enum {string}
*/
Permission: "project.create" | "project.edit" | "project.delete" | "checklist.edit" | "checklist.confirm" | "check.run" | "finding.resolve" | "report.export" | "quota.view" | "billing.manage" | "qualification.edit" | "tenant.close";
RegisterRequest: {
phone: components["schemas"]["Phone"];
sms_code: string;
/** @description 企业名称(MVP 不做认证,G9) */
tenant_name: string;
display_name: string;
/** @description 同意的服务协议版本(含围串标禁止条款) */
terms_version: string;
/** @enum {string} */
client_kind: "web" | "desktop";
};
LoginRequest: {
phone: components["schemas"]["Phone"];
sms_code: string;
/** @enum {string} */
client_kind: "web" | "desktop";
/**
* @description 已有其他设备在线时,确认挤下线后重发
* @default false
*/
force: boolean;
};
LoginResult: {
me: components["schemas"]["Me"];
/** @description 只有 client_kind = desktop 时返回,且只返回这一次 */
token?: string;
expires_at?: components["schemas"]["Timestamp"];
};
SessionInfo: {
id: components["schemas"]["Id"];
/** @enum {string} */
client_kind: "web" | "desktop";
/** @description 从 User-Agent 归纳,如「Chrome · macOS」 */
device?: string;
/** @description IP 归属地,如「江苏南京」;不返回完整 IP */
ip_region?: string;
created_at: components["schemas"]["Timestamp"];
last_seen_at: components["schemas"]["Timestamp"];
current: boolean;
};
Me: {
user: {
id: components["schemas"]["Id"];
display_name: string;
phone_hint: string;
};
tenant: {
id: components["schemas"]["Id"];
name: string;
};
/** @enum {string} */
role: "owner" | "admin" | "member";
plan: components["schemas"]["PlanSummary"];
permissions: components["schemas"]["Permission"][];
};
PlanSummary: {
code: components["schemas"]["PlanCode"];
name: string;
starts_at?: components["schemas"]["Timestamp"];
ends_at?: components["schemas"]["Timestamp"] | null;
/** @description 套餐到期后数据只读(FR-M6-05) */
read_only: boolean;
};
Plan: {
code: components["schemas"]["PlanCode"];
version: number;
name: string;
/** @description 每个周期的额度;专业版的检查从解析额度扣 */
quotas: {
[key: string]: number;
};
limits: {
max_file_bytes?: number;
max_pages?: number;
max_projects?: number | null;
};
/** @description 给用户看的检查计费说明,如「检查从解析额度扣 1 次;同一项目 24 小时内复查不扣」 */
check_rule?: string;
};
QuotaOverview: {
plan: components["schemas"]["PlanSummary"];
accounts: {
unit: components["schemas"]["QuotaUnit"];
/** @description 剩余,含正在预扣的 */
balance: number;
/** @description 正在预扣、还没结算的 */
held?: number;
period_granted: number;
period_used: number;
/** @description 0~1;≥ 0.8 时界面变赭色(Q9) */
used_ratio?: number;
/** @description 按功能分布,如解析、检查 */
by_feature?: {
/** @enum {string} */
feature: "parse" | "check";
used: number;
}[];
}[];
};
QuotaEntry: {
id: components["schemas"]["Id"];
unit: components["schemas"]["QuotaUnit"];
kind: components["schemas"]["QuotaEntryKind"];
/** @description 对余额的影响;结算、免扣为 0 */
amount: number;
/** @description 调整原因;免扣时为规则说明,如「24 小时内复查」 */
reason?: string;
project?: {
id?: components["schemas"]["Id"];
/** @description 项目已删除时为 null,界面显示「(已删除的项目)」 */
name?: string | null;
deleted?: boolean;
} | null;
ref?: {
/** @enum {string} */
type?: "parse_job" | "check_run";
id?: components["schemas"]["Id"];
/** @description 如「招标文件解析」「第 3 次检查」 */
label?: string | null;
} | null;
created_at: components["schemas"]["Timestamp"];
};
ActivationRequestCreate: {
/** @enum {string} */
plan_code: "pro";
invoice_info: components["schemas"]["InvoiceInfo"];
};
InvoiceInfo: {
/** @description 发票抬头 */
title: string;
/** @description 纳税人识别号 */
tax_no: string;
address_phone?: string;
bank_account?: string;
/** @enum {string} */
invoice_type?: "general" | "special";
contact_name?: string;
contact_phone?: string;
};
ActivationRequest: {
id: components["schemas"]["Id"];
plan_code: components["schemas"]["PlanCode"];
/** @enum {string} */
status: "submitted" | "paid" | "activated" | "rejected" | "cancelled";
invoice_info?: components["schemas"]["InvoiceInfo"];
/** @description 对公转账账户和备注要求 */
payment_instructions?: string;
ops_note?: string;
created_at: components["schemas"]["Timestamp"];
};
/** @description 就绪状态只在 status = checked 时有意义(G7);未就绪也不阻止导出和递交(红线 4) */
ProjectReadiness: {
status: components["schemas"]["ProjectStatus"];
open_fatal_count: number;
/** @description 不是 checked 状态时为 null */
ready: boolean | null;
};
ProjectListItem: {
id: components["schemas"]["Id"];
name: string;
code?: string | null;
purchaser?: string | null;
deadline_at?: components["schemas"]["Timestamp"] | null;
status: components["schemas"]["ProjectStatus"];
readiness: components["schemas"]["ProjectReadiness"];
bidding_lots: string[];
/** @description 待确认区条目数 */
pending_item_count?: number;
/** @description 正在跑的解析或检查 */
active_job?: {
/** @enum {string} */
kind?: "parse_job" | "check_run";
id?: components["schemas"]["Id"];
progress?: number;
label?: string;
} | null;
next_action: components["schemas"]["NextAction"];
updated_at: components["schemas"]["Timestamp"];
};
ProjectDetail: components["schemas"]["ProjectListItem"] & {
legal_regime: components["schemas"]["LegalRegime"];
agency?: string | null;
procurement_method?: string | null;
/** @description 基本信息字段(FR-M2-03),每个都带出处 */
fields: components["schemas"]["ProjectField"][];
/** @description 关键日期时间线(FR-M2-09),来自「日期与递交」类清单项 */
key_dates: {
item_id: components["schemas"]["Id"];
label: string;
at: components["schemas"]["Timestamp"];
/** @description 补遗带来了新值、等用户确认 */
superseded_pending?: boolean;
}[];
latest_check_run_id?: components["schemas"]["Id"] | null;
members?: {
user?: components["schemas"]["UserRef"];
/** @enum {string} */
role?: "lead" | "editor" | "viewer";
}[];
created_by: components["schemas"]["UserRef"];
created_at: components["schemas"]["Timestamp"];
};
/** @description 按字段:文本、布尔、金额(Money 字符串)或时间 */
FieldValue: string | boolean | null;
ProjectField: {
key: components["schemas"]["ProjectFieldKey"];
value: components["schemas"]["FieldValue"];
/** @enum {string} */
source: "ai" | "human" | "none";
ai_value?: components["schemas"]["FieldValue"];
citation?: components["schemas"]["Citation"] | null;
updated_by?: components["schemas"]["UserRef"] | null;
/** @description 补遗带来的新值(FR-M2-10) */
pending?: {
value?: components["schemas"]["FieldValue"];
document_label?: string;
citation?: components["schemas"]["Citation"];
} | null;
};
LotInput: {
lot_no?: string;
name?: string;
budget_amount?: components["schemas"]["Money"] | null;
ceiling_amount?: components["schemas"]["Money"] | null;
};
Lot: {
id: components["schemas"]["Id"];
lot_no: string;
name?: string | null;
budget_amount?: components["schemas"]["Money"] | null;
ceiling_amount?: components["schemas"]["Money"] | null;
/** @description 没有分包时自动建的默认包,界面跳过选包 */
is_default: boolean;
is_bidding: boolean;
origin: components["schemas"]["Origin"];
edited_fields: string[];
};
Upload: {
id: components["schemas"]["Id"];
/** @description 字节,最后一片可以更小 */
part_size: number;
part_count: number;
received_parts: number[];
expires_at: components["schemas"]["Timestamp"];
};
UploadCompleted: {
id: components["schemas"]["Id"];
filename: string;
size_bytes: number;
sha256: string;
detected_format: components["schemas"]["DetectedFormat"];
/** @description 扩展名和真实格式不一致(07 F2),界面只做提示 */
extension_mismatch?: boolean;
/** @description PDF 能直接读出;Word 要转换后才知道,这里为 null */
page_count?: number | null;
};
DocumentCreate: {
upload_id: components["schemas"]["Id"];
role: components["schemas"]["DocumentRole"];
/** @description 投标分册名:商务 / 技术 / 报价 / 资格证明 */
volume_name?: string;
/** @description 投标分册重新上传时填上一版的编号,生成新版本(FR-M3-01) */
replaces_document_id?: components["schemas"]["Id"];
};
Document: {
id: components["schemas"]["Id"];
role: components["schemas"]["DocumentRole"];
/** @description 如「招标文件」「补遗 1」「技术分册 v2」 */
label: string;
seq_no?: number;
volume_name?: string | null;
lineage_id?: components["schemas"]["Id"];
is_latest_version?: boolean;
original_filename: string;
detected_format: components["schemas"]["DetectedFormat"];
size_bytes: number;
page_count?: number | null;
normalized_sha256?: string | null;
/** @enum {string} */
status: "uploaded" | "normalizing" | "ready" | "failed";
latest_parse_job?: components["schemas"]["ParseJob"] | null;
uploaded_by?: components["schemas"]["UserRef"];
created_at: components["schemas"]["Timestamp"];
};
DocumentPage: {
page_no: number;
width_pt: number;
height_pt: number;
/** @enum {integer} */
rotation: 0 | 90 | 180 | 270;
/** @enum {string} */
text_source: "text" | "ocr" | "mixed" | "empty";
};
/** @description 一个矩形 [x0, y0, x1, y1],单位 pt,原点在页面左上角 */
Quad: number[];
Sentence: {
key: string;
text: string;
quads: components["schemas"]["Quad"][];
/** @enum {string} */
location: "body" | "table" | "header_footer";
/** @description 文字格式片段 [起, 止, 格式],格式取 b / i / u 的组合 */
format_runs?: [
number,
number,
string
][];
/** @description 所在章节,如「第三章 采购需求 > 3.2 技术参数」 */
section_path?: string;
};
CitationCreate: {
document_id: components["schemas"]["Id"];
/** @description 同一页上连续的句子 */
sentence_keys: string[];
char_start?: number;
char_end?: number;
};
/** @description 出处,不可变(data-model §5.1) */
Citation: {
id: components["schemas"]["Id"];
document_id: components["schemas"]["Id"];
document_label: string;
/** @description 和文档当前哈希不一致时前端不画高亮 */
normalized_sha256: string;
page_no: number;
sentence_keys: string[];
char_start?: number | null;
char_end?: number | null;
/** @description 原句 */
quote: string;
quads: components["schemas"]["Quad"][];
created_by_kind: components["schemas"]["Origin"];
};
/** @description 给用户看的失败原因;不含文档内容 */
JobError: {
code: string;
message: string;
/** @description 额度是否已退回 */
refunded: boolean;
};
ParseJob: {
id: components["schemas"]["Id"];
document_id: components["schemas"]["Id"];
attempt_no: number;
status: components["schemas"]["JobStatus"];
/** @enum {string|null} */
stage?: "detect" | "convert" | "text_layer" | "ocr" | "structure" | "extract" | "verify" | "merge" | null;
progress: number;
cancel_requested?: boolean;
error?: components["schemas"]["JobError"] | null;
/** @description 成功后的摘要 */
result?: {
items_added?: number;
items_updated?: number;
items_pending?: number;
/** @description 重新解析时没再出现的旧条目 */
items_absent?: number;
lots_found?: number;
/** @description 没通过校验的原因码和条数(如 quote_too_short、value_unverified),评测和排查用 */
verify_failures?: {
[key: string]: number;
};
/** @description 模型输出被截断、把分块对半重跑的次数 */
chunks_split?: number;
/** @description 拆到底输出仍不完整的分块数(这些分块的结果可能不全) */
output_incomplete?: number;
/** @description 项目基本信息各字段的结论:found / absent(文件本身没写)/ needs_review(抽取有问题,要人核对) */
info_fields?: {
[key: string]: "found" | "absent" | "needs_review";
};
} | null;
created_at: components["schemas"]["Timestamp"];
finished_at?: components["schemas"]["Timestamp"] | null;
};
MarkingRule: {
id: components["schemas"]["Id"];
/** @enum {string} */
marker: "star" | "asterisk" | "triangle" | "italic_underline" | "bold" | "underline" | "keyword";
marker_text?: string | null;
/** @enum {string} */
meaning: "substantive" | "important";
declared_count?: number | null;
/** @description 实际抽到的条数 */
found_count?: number;
citation: components["schemas"]["Citation"];
};
Checklist: {
/** @enum {string} */
status: "draft" | "confirmed";
/** @description 最近一次确认的版本号;没确认过为 0 */
version_no: number;
confirmed_by?: components["schemas"]["UserRef"] | null;
confirmed_at?: components["schemas"]["Timestamp"] | null;
counts: {
formal: number;
pending: number;
deleted: number;
superseded_pending?: number;
by_category?: {
[key: string]: number;
};
};
marking_rules: components["schemas"]["MarkingRule"][];
/** @description 如「文件写明 ★ 项共 14 条,实际抽到 13 条」 */
warnings?: {
/** @enum {string} */
code: "declared_count_mismatch" | "marker_rule_not_found" | "legal_regime_unknown";
message: string;
}[];
};
/** @description 类别特有字段(05 §3.3),按类别分组;一条清单项有几个类别就可以有几组 */
ItemSpec: {
qualification?: {
/** @enum {string} */
kind?: "general" | "specific" | "credit";
validity_requirement?: string;
};
invalidity?: {
/** @enum {string} */
source?: "statute" | "tender_text" | "substantive_marker";
};
scoring?: {
factor?: string;
/** @description 分值,可能是「0~5」这样的区间,所以用字符串 */
points?: string;
criteria?: string;
/** @enum {string} */
part?: "price" | "technical" | "commercial";
};
schedule?: {
/** @enum {string} */
date_kind?: "question_deadline" | "bid_deadline" | "opening" | "deposit_deadline" | "other";
at?: components["schemas"]["Timestamp"];
deposit_amount?: components["schemas"]["Money"];
/** @enum {string} */
submission_mode?: "electronic" | "paper" | "ca_encrypted" | "mixed";
copies?: string;
};
tech_param?: {
param?: string;
/** @enum {string} */
op?: ">=" | "<=" | "=" | "contains" | "supports";
value?: string;
unit?: string;
device?: string;
};
format_doc?: {
doc_name?: string;
modifiable?: boolean;
};
/** @description 分项限价、单价上限(DM7);只存招标文件写明的限价,系统不给任何报价建议(红线 6) */
price?: {
/** @enum {string} */
kind?: "item_ceiling" | "unit_price_ceiling";
target?: string;
/** @enum {string} */
op?: "<=";
value?: components["schemas"]["Money"];
};
};
ChecklistItemFields: {
categories?: components["schemas"]["Category"][];
title?: string;
requirement_text?: string | null;
importance?: components["schemas"]["Importance"];
lot_id?: components["schemas"]["Id"] | null;
evidence_required?: string | null;
spec?: components["schemas"]["ItemSpec"];
};
ChecklistItemCreate: components["schemas"]["ChecklistItemFields"] & {
categories: components["schemas"]["Category"][];
title: string;
citation_ids?: components["schemas"]["Id"][];
};
ChecklistItemUpdate: components["schemas"]["ChecklistItemFields"];
ChecklistItem: components["schemas"]["ChecklistItemFields"] & {
categories: components["schemas"]["Category"][];
title: string;
importance: components["schemas"]["Importance"];
id: components["schemas"]["Id"];
/** @description AI 摘要,界面标注 AI 生成 */
summary?: string | null;
/** @enum {string|null} */
importance_basis?: "marker" | "statute" | "tender_text" | "human" | null;
marking_rule_id?: components["schemas"]["Id"] | null;
/** @description 空表示各包通用 */
lot_no?: string | null;
origin: components["schemas"]["Origin"];
/** @description 如「AI」「人工添加」「补遗 1」 */
origin_label?: string;
zone: components["schemas"]["Zone"];
pending_reason?: components["schemas"]["PendingReason"] | null;
/** @description 人工确认、无出处 */
no_citation_ack?: boolean;
citations: components["schemas"]["Citation"][];
/** @description AI 原值;和当前值不同的字段界面可以显示「AI 原为……」 */
ai_values?: Record<string, never> | null;
edited_fields: string[];
confidence?: number | null;
/** @description 已被补遗更新,等用户确认 */
superseded_by?: {
item_id?: components["schemas"]["Id"];
document_label?: string;
confirmed?: boolean;
} | null;
accepted_by?: components["schemas"]["UserRef"] | null;
deleted_at?: components["schemas"]["Timestamp"] | null;
updated_at: components["schemas"]["Timestamp"];
};
ChecklistVersion: {
id: components["schemas"]["Id"];
version_no: number;
/** @enum {string} */
kind: "confirmed" | "check";
item_count: number;
created_by: components["schemas"]["UserRef"];
created_at: components["schemas"]["Timestamp"];
};
HistoryEntry: {
action: string;
actor: components["schemas"]["UserRef"];
at: components["schemas"]["Timestamp"];
changes?: {
field: string;
before?: unknown;
after?: unknown;
}[];
};
CheckPreview: {
can_start: boolean;
/** @description can_start 为 false 的原因 */
blockers?: ("no_parsed_tender" | "no_bid_documents" | "job_already_running" | "quota_exhausted" | "project_read_only")[];
billing: components["schemas"]["BillingMode"];
/**
* @description 这次检查扣几次
* @enum {integer}
*/
charge: 0 | 1;
charge_unit?: components["schemas"]["QuotaUnit"];
/** @description 24 小时免扣窗口的结束时间(从上一次扣点的检查算起,P1) */
waive_until?: components["schemas"]["Timestamp"] | null;
/** @description 为 false 时提示「清单未确认,检查结果以当前清单为准」 */
checklist_confirmed: boolean;
/** @description 待确认区条目不参与检查 */
pending_item_count?: number;
/** @description 默认用每个分册的最新版本 */
bid_documents: components["schemas"]["Document"][];
lot_ids: components["schemas"]["Id"][];
};
CheckRunCreate: {
/** @description 本次检查的投标文件版本 */
document_ids: components["schemas"]["Id"][];
/**
* @description 前端按 check-preview 提示用户的扣点数;和服务端当下算的不一致时返回 `billing_changed`,不扣点(API4)
* @enum {integer}
*/
expected_charge: 0 | 1;
};
CheckRun: {
id: components["schemas"]["Id"];
run_no: number;
status: components["schemas"]["JobStatus"];
/** @enum {string|null} */
stage?: "prepare_bid" | "match" | "rules" | "verify" | "carry_over" | "summarize" | null;
progress: number;
cancel_requested?: boolean;
error?: components["schemas"]["JobError"] | null;
billing: components["schemas"]["BillingMode"];
/** @description 只有最近一次检查的问题可以处理 */
is_latest?: boolean;
checklist_version_no: number;
checklist_confirmed: boolean;
rule_set_version: string;
legal_regime?: components["schemas"]["LegalRegime"];
documents?: components["schemas"]["Document"][];
/** @description 查了什么、没查什么(报告首页,FR-M3-09) */
coverage?: {
checked?: string[];
not_checked?: string[];
} | null;
counts?: {
fatal?: number;
important?: number;
hint?: number;
open_fatal?: number;
resolved_this_run?: number;
new?: number;
} | null;
created_by: components["schemas"]["UserRef"];
created_at: components["schemas"]["Timestamp"];
finished_at?: components["schemas"]["Timestamp"] | null;
};
Finding: {
id: components["schemas"]["Id"];
type: components["schemas"]["FindingType"];
severity: components["schemas"]["Severity"];
title: string;
explanation: string;
/** @enum {string} */
detector: "ai" | "rule";
/** @description AI 判断的问题必有;规则问题没有对应条目时为 null,显示 rule(DM6) */
checklist_item?: {
id?: components["schemas"]["Id"];
title?: string;
importance?: components["schemas"]["Importance"];
categories?: components["schemas"]["Category"][];
} | null;
rule?: {
code?: string;
description?: string;
} | null;
/** @description 按类型的补充信息:参数的要求值和响应值、资质预警种类(expired / insufficient_level / not_covered)、从投标文件读到的金额 */
detail?: Record<string, never>;
tender_citations: components["schemas"]["Citation"][];
bid_citations: components["schemas"]["Citation"][];
/** @description 「未找到响应」时找过哪些分册、哪些章节(FR-M3-03) */
search_scope?: {
documents?: string[];
sections?: string[];
} | null;
presence: components["schemas"]["Presence"];
/** @description 沿用时,上一次的处理状态(上次「已修改」的这次回到待处理) */
carried_status?: components["schemas"]["FindingStatus"] | null;
status: components["schemas"]["FindingStatus"];
resolution_note?: string | null;
resolved_by?: components["schemas"]["UserRef"] | null;
resolved_at?: components["schemas"]["Timestamp"] | null;
};
ManualCheck: {
check_key: string;
label: string;
requirement_text?: string | null;
citation?: components["schemas"]["Citation"] | null;
checked: boolean;
note?: string | null;
checked_by?: components["schemas"]["UserRef"] | null;
checked_at?: components["schemas"]["Timestamp"] | null;
};
ReportJob: {
id: components["schemas"]["Id"];
check_run_id: components["schemas"]["Id"];
status: components["schemas"]["JobStatus"];
report_id?: components["schemas"]["Id"] | null;
error?: components["schemas"]["JobError"] | null;
};
Report: {
id: components["schemas"]["Id"];
check_run_id: components["schemas"]["Id"];
run_no: number;
page_count: number;
sha256?: string;
template_version: string;
/** @description 导出时还没处理的致命问题数 */
open_fatal_at_export?: number;
generated_by: components["schemas"]["UserRef"];
created_at: components["schemas"]["Timestamp"];
};
QualificationInput: {
name: string;
kind: components["schemas"]["QualificationKind"];
level?: string | null;
cert_no?: string | null;
issuer?: string | null;
/** Format: date */
valid_from?: string | null;
/**
* Format: date
* @description 空表示长期有效
*/
valid_to?: string | null;
};
Qualification: components["schemas"]["QualificationInput"] & {
id: components["schemas"]["Id"];
files: {
id: components["schemas"]["Id"];
filename: string;
size_bytes: number;
}[];
created_at: components["schemas"]["Timestamp"];
updated_at: components["schemas"]["Timestamp"];
};
Notification: {
id: components["schemas"]["Id"];
/** @enum {string} */
kind: "parse_succeeded" | "parse_failed" | "check_succeeded" | "check_failed" | "quota_80" | "quota_100" | "subscription_activated" | "subscription_expiring";
title: string;
project_id?: components["schemas"]["Id"] | null;
/** @description 前端路由,如 /projects/<id>/results */
link?: string | null;
read_at?: components["schemas"]["Timestamp"] | null;
created_at: components["schemas"]["Timestamp"];
};
Event: {
/** @enum {string} */
type: "job.progress" | "job.finished" | "report.ready" | "notification.created" | "quota.changed" | "project.changed" | "resync";
at: components["schemas"]["Timestamp"];
project_id?: components["schemas"]["Id"] | null;
job?: {
/** @enum {string} */
kind?: "parse_job" | "check_run" | "report_job";
id?: components["schemas"]["Id"];
status?: components["schemas"]["JobStatus"];
stage?: string | null;
progress?: number;
} | null;
notification_id?: components["schemas"]["Id"] | null;
};
FeedbackCreate: {
project_id: components["schemas"]["Id"];
/** @enum {string} */
object_type: "finding" | "checklist_item" | "checklist";
object_id?: components["schemas"]["Id"];
/** @enum {string} */
kind: "false_positive" | "false_negative";
note?: string;
};
};
responses: {
/** @description `unauthenticated`、`session_expired`、`session_revoked`(被其他设备挤下线时附 `reason: concurrent_login`) */
Unauthenticated: {
headers: {
[name: string]: unknown;
};
content: {
"application/problem+json": components["schemas"]["Problem"];
};
};
/** @description `not_found`;访问别的企业的资源也返回这个(架构 §3.3) */
NotFound: {
headers: {
[name: string]: unknown;
};
content: {
"application/problem+json": components["schemas"]["Problem"];
};
};
/** @description `validation_failed`;`errors` 列出每个字段的问题 */
ValidationFailed: {
headers: {
[name: string]: unknown;
};
content: {
"application/problem+json": components["schemas"]["Problem"];
};
};
/** @description `rate_limited`;响应头 Retry-After */
RateLimited: {
headers: {
[name: string]: unknown;
};
content: {
"application/problem+json": components["schemas"]["Problem"];
};
};
/** @description `project_read_only`:项目已递交或已归档,要先撤销 */
ProjectReadOnly: {
headers: {
[name: string]: unknown;
};
content: {
"application/problem+json": components["schemas"]["Problem"];
};
};
/** @description `precondition_failed`:资源已被修改,请刷新后再改 */
PreconditionFailed: {
headers: {
[name: string]: unknown;
};
content: {
"application/problem+json": components["schemas"]["Problem"];
};
};
};
parameters: {
ProjectId: components["schemas"]["Id"];
DocumentId: components["schemas"]["Id"];
UploadId: components["schemas"]["Id"];
JobId: components["schemas"]["Id"];
RunId: components["schemas"]["Id"];
ItemId: components["schemas"]["Id"];
FindingId: components["schemas"]["Id"];
QualificationId: components["schemas"]["Id"];
SessionId: components["schemas"]["Id"];
/** @description 上一页返回的 next_cursor */
Cursor: string;
Limit: number;
/** @description 选填;带上时版本不一致返回 412(多人编辑时防止覆盖) */
IfMatch: string;
};
requestBodies: never;
headers: {
/** @description 网页版登录时设置 `bd_session`(HttpOnly)和 `bd_csrf`(前端可读) */
SetSessionCookie: string;
/** @description 资源版本;修改时放进 If-Match */
ETag: string;
};
pathItems: never;
}
export type $defs = Record<string, never>;
export interface operations {
sendSmsCode: {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
requestBody: {
content: {
"application/json": {
phone: components["schemas"]["Phone"];
/** @enum {string} */
purpose: "login" | "register" | "close_tenant";
};
};
};
responses: {
/** @description 已发送(号码是否注册都返回 202,不泄露注册状态) */
202: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": {
/** @description 多少秒后可以重发 */
resend_after_s: number;
};
};
};
422: components["responses"]["ValidationFailed"];
429: components["responses"]["RateLimited"];
};
};
register: {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
requestBody: {
content: {
"application/json": components["schemas"]["RegisterRequest"];
};
};
responses: {
/** @description 注册成功并登录。网页版设置会话 cookie;桌面版在响应体里拿到令牌(只返回这一次) */
201: {
headers: {
"Set-Cookie": components["headers"]["SetSessionCookie"];
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["LoginResult"];
};
};
/** @description `phone_already_registered` */
409: {
headers: {
[name: string]: unknown;
};
content: {
"application/problem+json": components["schemas"]["Problem"];
};
};
422: components["responses"]["ValidationFailed"];
};
};
login: {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
requestBody: {
content: {
"application/json": components["schemas"]["LoginRequest"];
};
};
responses: {
/** @description 登录成功 */
200: {
headers: {
"Set-Cookie": components["headers"]["SetSessionCookie"];
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["LoginResult"];
};
};
/** @description `phone_not_registered`(验证码校验通过后才会返回) */
404: {
headers: {
[name: string]: unknown;
};
content: {
"application/problem+json": components["schemas"]["Problem"];
};
};
/** @description `concurrent_session` */
409: {
headers: {
[name: string]: unknown;
};
content: {
"application/problem+json": components["schemas"]["Problem"] & {
sessions?: components["schemas"]["SessionInfo"][];
};
};
};
422: components["responses"]["ValidationFailed"];
429: components["responses"]["RateLimited"];
};
};
logout: {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
requestBody?: never;
responses: {
/** @description 已退出 */
204: {
headers: {
[name: string]: unknown;
};
content?: never;
};
401: components["responses"]["Unauthenticated"];
};
};
getMe: {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
requestBody?: never;
responses: {
/** @description OK */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["Me"];
};
};
401: components["responses"]["Unauthenticated"];
};
};
updateMe: {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
requestBody: {
content: {
"application/json": {
display_name?: string;
};
};
};
responses: {
/** @description OK */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["Me"];
};
};
422: components["responses"]["ValidationFailed"];
};
};
listMySessions: {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
requestBody?: never;
responses: {
/** @description OK */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": {
items: components["schemas"]["SessionInfo"][];
};
};
};
};
};
revokeMySession: {
parameters: {
query?: never;
header?: never;
path: {
session_id: components["parameters"]["SessionId"];
};
cookie?: never;
};
requestBody?: never;
responses: {
/** @description 已吊销 */
204: {
headers: {
[name: string]: unknown;
};
content?: never;
};
404: components["responses"]["NotFound"];
};
};
closeTenant: {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
requestBody: {
content: {
"application/json": {
sms_code: string;
confirm_tenant_name: string;
};
};
};
responses: {
/** @description 已受理,后台删除文件 */
202: {
headers: {
[name: string]: unknown;
};
content?: never;
};
422: components["responses"]["ValidationFailed"];
};
};
listPlans: {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
requestBody?: never;
responses: {
/** @description OK */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": {
items: components["schemas"]["Plan"][];
};
};
};
};
};
getQuota: {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
requestBody?: never;
responses: {
/** @description OK */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["QuotaOverview"];
};
};
};
};
listQuotaEntries: {
parameters: {
query?: {
unit?: components["schemas"]["QuotaUnit"];
project_id?: components["schemas"]["Id"];
/** @description 上一页返回的 next_cursor */
cursor?: components["parameters"]["Cursor"];
limit?: components["parameters"]["Limit"];
};
header?: never;
path?: never;
cookie?: never;
};
requestBody?: never;
responses: {
/** @description 按时间倒序 */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["Page"] & {
items: components["schemas"]["QuotaEntry"][];
};
};
};
};
};
listActivationRequests: {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
requestBody?: never;
responses: {
/** @description OK */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": {
items: components["schemas"]["ActivationRequest"][];
};
};
};
};
};
createActivationRequest: {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
requestBody: {
content: {
"application/json": components["schemas"]["ActivationRequestCreate"];
};
};
responses: {
/** @description 已提交 */
201: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["ActivationRequest"];
};
};
/** @description `activation_pending`:已有一份待处理的申请 */
409: {
headers: {
[name: string]: unknown;
};
content: {
"application/problem+json": components["schemas"]["Problem"];
};
};
422: components["responses"]["ValidationFailed"];
};
};
listProjects: {
parameters: {
query?: {
status?: components["schemas"]["ProjectStatus"][];
deadline_from?: string;
deadline_to?: string;
/** @description 按项目名称、编号、采购人搜索 */
q?: string;
sort?: "deadline" | "-deadline" | "updated" | "-updated";
/** @description 上一页返回的 next_cursor */
cursor?: components["parameters"]["Cursor"];
limit?: components["parameters"]["Limit"];
};
header?: never;
path?: never;
cookie?: never;
};
requestBody?: never;
responses: {
/** @description OK */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["Page"] & {
items: components["schemas"]["ProjectListItem"][];
};
};
};
};
};
createProject: {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
requestBody: {
content: {
"application/json": {
/** @description 选填;不填时为「未命名项目」,解析后按招标文件自动填写 */
name?: string;
};
};
};
responses: {
/** @description 已创建;建项目的人自动成为负责人(AR12) */
201: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["ProjectDetail"];
};
};
/** @description `plan_limit_exceeded`:免费版限 1 个项目 */
409: {
headers: {
[name: string]: unknown;
};
content: {
"application/problem+json": components["schemas"]["Problem"];
};
};
};
};
getProject: {
parameters: {
query?: never;
header?: never;
path: {
project_id: components["parameters"]["ProjectId"];
};
cookie?: never;
};
requestBody?: never;
responses: {
/** @description OK */
200: {
headers: {
ETag: components["headers"]["ETag"];
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["ProjectDetail"];
};
};
404: components["responses"]["NotFound"];
};
};
deleteProject: {
parameters: {
query?: never;
header?: never;
path: {
project_id: components["parameters"]["ProjectId"];
};
cookie?: never;
};
requestBody?: never;
responses: {
/** @description 已删除;对象存储里的文件由后台清理 */
204: {
headers: {
[name: string]: unknown;
};
content?: never;
};
404: components["responses"]["NotFound"];
};
};
setProjectField: {
parameters: {
query?: never;
header?: {
/** @description 选填;带上时版本不一致返回 412(多人编辑时防止覆盖) */
"If-Match"?: components["parameters"]["IfMatch"];
};
path: {
project_id: components["parameters"]["ProjectId"];
field_key: components["schemas"]["ProjectFieldKey"];
};
cookie?: never;
};
requestBody: {
content: {
"application/json": {
value: components["schemas"]["FieldValue"];
};
};
};
responses: {
/** @description OK */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["ProjectField"];
};
};
409: components["responses"]["ProjectReadOnly"];
412: components["responses"]["PreconditionFailed"];
422: components["responses"]["ValidationFailed"];
};
};
resolvePendingField: {
parameters: {
query?: never;
header?: never;
path: {
project_id: components["parameters"]["ProjectId"];
field_key: components["schemas"]["ProjectFieldKey"];
};
cookie?: never;
};
requestBody: {
content: {
"application/json": {
accept: boolean;
};
};
};
responses: {
/** @description OK */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["ProjectField"];
};
};
/** @description `no_pending_value` 或 `project_read_only` */
409: {
headers: {
[name: string]: unknown;
};
content: {
"application/problem+json": components["schemas"]["Problem"];
};
};
};
};
transitionProject: {
parameters: {
query?: never;
header?: never;
path: {
project_id: components["parameters"]["ProjectId"];
};
cookie?: never;
};
requestBody: {
content: {
"application/json": {
/** @enum {string} */
action: "submit" | "unsubmit" | "archive" | "unarchive";
};
};
};
responses: {
/** @description OK */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["ProjectDetail"];
};
};
/** @description `invalid_transition` */
409: {
headers: {
[name: string]: unknown;
};
content: {
"application/problem+json": components["schemas"]["Problem"];
};
};
};
};
listLots: {
parameters: {
query?: never;
header?: never;
path: {
project_id: components["parameters"]["ProjectId"];
};
cookie?: never;
};
requestBody?: never;
responses: {
/** @description OK */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": {
items: components["schemas"]["Lot"][];
};
};
};
};
};
createLot: {
parameters: {
query?: never;
header?: never;
path: {
project_id: components["parameters"]["ProjectId"];
};
cookie?: never;
};
requestBody: {
content: {
"application/json": components["schemas"]["LotInput"];
};
};
responses: {
/** @description OK */
201: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["Lot"];
};
};
409: components["responses"]["ProjectReadOnly"];
422: components["responses"]["ValidationFailed"];
};
};
setBiddingLots: {
parameters: {
query?: never;
header?: never;
path: {
project_id: components["parameters"]["ProjectId"];
};
cookie?: never;
};
requestBody: {
content: {
"application/json": {
lot_ids: components["schemas"]["Id"][];
};
};
};
responses: {
/** @description OK */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": {
items: components["schemas"]["Lot"][];
};
};
};
409: components["responses"]["ProjectReadOnly"];
};
};
deleteLot: {
parameters: {
query?: never;
header?: never;
path: {
lot_id: components["schemas"]["Id"];
};
cookie?: never;
};
requestBody?: never;
responses: {
/** @description 已删除 */
204: {
headers: {
[name: string]: unknown;
};
content?: never;
};
/** @description `last_lot`:至少保留一个包;或 `project_read_only` */
409: {
headers: {
[name: string]: unknown;
};
content: {
"application/problem+json": components["schemas"]["Problem"];
};
};
};
};
updateLot: {
parameters: {
query?: never;
header?: never;
path: {
lot_id: components["schemas"]["Id"];
};
cookie?: never;
};
requestBody: {
content: {
"application/json": components["schemas"]["LotInput"];
};
};
responses: {
/** @description OK */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["Lot"];
};
};
409: components["responses"]["ProjectReadOnly"];
422: components["responses"]["ValidationFailed"];
};
};
createUpload: {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
requestBody: {
content: {
"application/json": {
filename: string;
size_bytes: number;
/** @description 选填;提供时完成上传时校验 */
sha256?: string;
/** @enum {string} */
purpose: "project_document" | "qualification_file";
};
};
};
responses: {
/** @description OK */
201: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["Upload"];
};
};
/** @description `plan_limit_exceeded`:超出单文件大小上限,`detail` 写明上限值 */
409: {
headers: {
[name: string]: unknown;
};
content: {
"application/problem+json": components["schemas"]["Problem"];
};
};
};
};
getUpload: {
parameters: {
query?: never;
header?: never;
path: {
upload_id: components["parameters"]["UploadId"];
};
cookie?: never;
};
requestBody?: never;
responses: {
/** @description OK */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["Upload"];
};
};
404: components["responses"]["NotFound"];
};
};
abortUpload: {
parameters: {
query?: never;
header?: never;
path: {
upload_id: components["parameters"]["UploadId"];
};
cookie?: never;
};
requestBody?: never;
responses: {
/** @description 已放弃 */
204: {
headers: {
[name: string]: unknown;
};
content?: never;
};
};
};
putUploadPart: {
parameters: {
query?: never;
header?: never;
path: {
upload_id: components["parameters"]["UploadId"];
part_no: number;
};
cookie?: never;
};
requestBody: {
content: {
"application/octet-stream": string;
};
};
responses: {
/** @description 已收到 */
204: {
headers: {
[name: string]: unknown;
};
content?: never;
};
404: components["responses"]["NotFound"];
422: components["responses"]["ValidationFailed"];
};
};
completeUpload: {
parameters: {
query?: never;
header?: never;
path: {
upload_id: components["parameters"]["UploadId"];
};
cookie?: never;
};
requestBody?: never;
responses: {
/** @description OK */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["UploadCompleted"];
};
};
/** @description `upload_incomplete` */
409: {
headers: {
[name: string]: unknown;
};
content: {
"application/problem+json": components["schemas"]["Problem"];
};
};
/** @description `file_format_unsupported`、`file_encrypted`、`file_corrupted`、`bid_file_platform_encrypted`、
* `upload_checksum_mismatch`、`plan_limit_exceeded`(页数)
* */
422: {
headers: {
[name: string]: unknown;
};
content: {
"application/problem+json": components["schemas"]["Problem"];
};
};
};
};
listDocuments: {
parameters: {
query?: {
role?: components["schemas"]["DocumentRole"];
};
header?: never;
path: {
project_id: components["parameters"]["ProjectId"];
};
cookie?: never;
};
requestBody?: never;
responses: {
/** @description OK */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": {
items: components["schemas"]["Document"][];
};
};
};
};
};
createDocument: {
parameters: {
query?: never;
header?: never;
path: {
project_id: components["parameters"]["ProjectId"];
};
cookie?: never;
};
requestBody: {
content: {
"application/json": components["schemas"]["DocumentCreate"];
};
};
responses: {
/** @description OK */
201: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["Document"];
};
};
409: components["responses"]["ProjectReadOnly"];
422: components["responses"]["ValidationFailed"];
};
};
getDocument: {
parameters: {
query?: never;
header?: never;
path: {
document_id: components["parameters"]["DocumentId"];
};
cookie?: never;
};
requestBody?: never;
responses: {
/** @description OK */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["Document"];
};
};
404: components["responses"]["NotFound"];
};
};
deleteDocument: {
parameters: {
query?: never;
header?: never;
path: {
document_id: components["parameters"]["DocumentId"];
};
cookie?: never;
};
requestBody?: never;
responses: {
/** @description 已删除 */
204: {
headers: {
[name: string]: unknown;
};
content?: never;
};
/** @description `document_in_use` 或 `project_read_only` */
409: {
headers: {
[name: string]: unknown;
};
content: {
"application/problem+json": components["schemas"]["Problem"];
};
};
};
};
getDocumentFileUrl: {
parameters: {
query: {
variant: "normalized" | "original";
};
header?: never;
path: {
document_id: components["parameters"]["DocumentId"];
};
cookie?: never;
};
requestBody?: never;
responses: {
/** @description OK */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["DownloadUrl"];
};
};
/** @description `document_not_ready`:规范化 PDF 还没生成 */
409: {
headers: {
[name: string]: unknown;
};
content: {
"application/problem+json": components["schemas"]["Problem"];
};
};
};
};
listDocumentPages: {
parameters: {
query?: never;
header?: never;
path: {
document_id: components["parameters"]["DocumentId"];
};
cookie?: never;
};
requestBody?: never;
responses: {
/** @description OK */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": {
normalized_sha256: string;
items: components["schemas"]["DocumentPage"][];
};
};
};
};
};
listPageSentences: {
parameters: {
query?: never;
header?: never;
path: {
document_id: components["parameters"]["DocumentId"];
page_no: number;
};
cookie?: never;
};
requestBody?: never;
responses: {
/** @description OK */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": {
items: components["schemas"]["Sentence"][];
};
};
};
404: components["responses"]["NotFound"];
};
};
createCitation: {
parameters: {
query?: never;
header?: never;
path: {
project_id: components["parameters"]["ProjectId"];
};
cookie?: never;
};
requestBody: {
content: {
"application/json": components["schemas"]["CitationCreate"];
};
};
responses: {
/** @description OK */
201: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["Citation"];
};
};
/** @description `sentence_not_found`:句子编号不在这份文档里,或不在同一页 */
422: {
headers: {
[name: string]: unknown;
};
content: {
"application/problem+json": components["schemas"]["Problem"];
};
};
};
};
startParseJob: {
parameters: {
query?: never;
header?: never;
path: {
document_id: components["parameters"]["DocumentId"];
};
cookie?: never;
};
requestBody?: {
content: {
"application/json": {
/**
* @description 前端提示用户的扣点数;和服务端算的不一致时返回 `billing_changed`(API4)
* @enum {integer}
*/
expected_charge?: 1;
};
};
};
responses: {
/** @description 已排队 */
201: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["ParseJob"];
};
};
/** @description `job_already_running`(附 `job_id`)、`quota_exhausted`、`billing_changed`、`document_role_not_parsable` */
409: {
headers: {
[name: string]: unknown;
};
content: {
"application/problem+json": components["schemas"]["Problem"];
};
};
};
};
getParseJob: {
parameters: {
query?: never;
header?: never;
path: {
job_id: components["parameters"]["JobId"];
};
cookie?: never;
};
requestBody?: never;
responses: {
/** @description OK */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["ParseJob"];
};
};
404: components["responses"]["NotFound"];
};
};
cancelParseJob: {
parameters: {
query?: never;
header?: never;
path: {
job_id: components["parameters"]["JobId"];
};
cookie?: never;
};
requestBody?: never;
responses: {
/** @description 已受理;worker 在下一个检查点停下 */
202: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["ParseJob"];
};
};
/** @description `job_finished` */
409: {
headers: {
[name: string]: unknown;
};
content: {
"application/problem+json": components["schemas"]["Problem"];
};
};
};
};
getChecklist: {
parameters: {
query?: never;
header?: never;
path: {
project_id: components["parameters"]["ProjectId"];
};
cookie?: never;
};
requestBody?: never;
responses: {
/** @description OK */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["Checklist"];
};
};
404: components["responses"]["NotFound"];
};
};
listChecklistItems: {
parameters: {
query?: {
zone?: components["schemas"]["Zone"];
category?: components["schemas"]["Category"];
/** @description `bidding` = 通用 + 所投的包(默认,FR-M2-04);`all` = 全部 */
lot_scope?: "bidding" | "all";
include_deleted?: boolean;
};
header?: never;
path: {
project_id: components["parameters"]["ProjectId"];
};
cookie?: never;
};
requestBody?: never;
responses: {
/** @description 按原文顺序 */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": {
items: components["schemas"]["ChecklistItem"][];
};
};
};
};
};
createChecklistItem: {
parameters: {
query?: never;
header?: never;
path: {
project_id: components["parameters"]["ProjectId"];
};
cookie?: never;
};
requestBody: {
content: {
"application/json": components["schemas"]["ChecklistItemCreate"];
};
};
responses: {
/** @description OK */
201: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["ChecklistItem"];
};
};
409: components["responses"]["ProjectReadOnly"];
422: components["responses"]["ValidationFailed"];
};
};
getChecklistItem: {
parameters: {
query?: never;
header?: never;
path: {
item_id: components["parameters"]["ItemId"];
};
cookie?: never;
};
requestBody?: never;
responses: {
/** @description OK */
200: {
headers: {
ETag: components["headers"]["ETag"];
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["ChecklistItem"];
};
};
404: components["responses"]["NotFound"];
};
};
deleteChecklistItem: {
parameters: {
query?: never;
header?: never;
path: {
item_id: components["parameters"]["ItemId"];
};
cookie?: never;
};
requestBody?: never;
responses: {
/** @description 已删除 */
204: {
headers: {
[name: string]: unknown;
};
content?: never;
};
409: components["responses"]["ProjectReadOnly"];
};
};
updateChecklistItem: {
parameters: {
query?: never;
header?: {
/** @description 选填;带上时版本不一致返回 412(多人编辑时防止覆盖) */
"If-Match"?: components["parameters"]["IfMatch"];
};
path: {
item_id: components["parameters"]["ItemId"];
};
cookie?: never;
};
requestBody: {
content: {
"application/json": components["schemas"]["ChecklistItemUpdate"];
};
};
responses: {
/** @description OK */
200: {
headers: {
ETag: components["headers"]["ETag"];
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["ChecklistItem"];
};
};
409: components["responses"]["ProjectReadOnly"];
412: components["responses"]["PreconditionFailed"];
422: components["responses"]["ValidationFailed"];
};
};
restoreChecklistItem: {
parameters: {
query?: never;
header?: never;
path: {
item_id: components["parameters"]["ItemId"];
};
cookie?: never;
};
requestBody?: never;
responses: {
/** @description OK */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["ChecklistItem"];
};
};
};
};
acceptPendingItem: {
parameters: {
query?: never;
header?: never;
path: {
item_id: components["parameters"]["ItemId"];
};
cookie?: never;
};
requestBody: {
content: {
"application/json": {
citation_ids?: components["schemas"]["Id"][];
/** @default false */
no_citation_ack?: boolean;
changes?: components["schemas"]["ChecklistItemUpdate"];
};
};
};
responses: {
/** @description OK */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["ChecklistItem"];
};
};
/** @description `item_not_pending` 或 `project_read_only` */
409: {
headers: {
[name: string]: unknown;
};
content: {
"application/problem+json": components["schemas"]["Problem"];
};
};
/** @description `citation_required`:既没有出处也没有声明无出处 */
422: {
headers: {
[name: string]: unknown;
};
content: {
"application/problem+json": components["schemas"]["Problem"];
};
};
};
};
setItemCitations: {
parameters: {
query?: never;
header?: never;
path: {
item_id: components["parameters"]["ItemId"];
};
cookie?: never;
};
requestBody: {
content: {
"application/json": {
citation_ids: components["schemas"]["Id"][];
};
};
};
responses: {
/** @description OK */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["ChecklistItem"];
};
};
409: components["responses"]["ProjectReadOnly"];
};
};
resolveSupersession: {
parameters: {
query?: never;
header?: never;
path: {
item_id: components["parameters"]["ItemId"];
};
cookie?: never;
};
requestBody: {
content: {
"application/json": {
accept: boolean;
};
};
};
responses: {
/** @description 返回旧条目 */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["ChecklistItem"];
};
};
/** @description `not_superseded` */
409: {
headers: {
[name: string]: unknown;
};
content: {
"application/problem+json": components["schemas"]["Problem"];
};
};
};
};
getItemHistory: {
parameters: {
query?: never;
header?: never;
path: {
item_id: components["parameters"]["ItemId"];
};
cookie?: never;
};
requestBody?: never;
responses: {
/** @description 按时间倒序 */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": {
items: components["schemas"]["HistoryEntry"][];
};
};
};
};
};
confirmChecklist: {
parameters: {
query?: never;
header?: never;
path: {
project_id: components["parameters"]["ProjectId"];
};
cookie?: never;
};
requestBody?: never;
responses: {
/** @description OK */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["Checklist"];
};
};
/** @description `checklist_empty` 或 `project_read_only` */
409: {
headers: {
[name: string]: unknown;
};
content: {
"application/problem+json": components["schemas"]["Problem"];
};
};
};
};
listChecklistVersions: {
parameters: {
query?: never;
header?: never;
path: {
project_id: components["parameters"]["ProjectId"];
};
cookie?: never;
};
requestBody?: never;
responses: {
/** @description OK */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": {
items: components["schemas"]["ChecklistVersion"][];
};
};
};
};
};
getCheckPreview: {
parameters: {
query?: never;
header?: never;
path: {
project_id: components["parameters"]["ProjectId"];
};
cookie?: never;
};
requestBody?: never;
responses: {
/** @description OK */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["CheckPreview"];
};
};
};
};
listCheckRuns: {
parameters: {
query?: never;
header?: never;
path: {
project_id: components["parameters"]["ProjectId"];
};
cookie?: never;
};
requestBody?: never;
responses: {
/** @description 按时间倒序 */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": {
items: components["schemas"]["CheckRun"][];
};
};
};
};
};
startCheckRun: {
parameters: {
query?: never;
header?: never;
path: {
project_id: components["parameters"]["ProjectId"];
};
cookie?: never;
};
requestBody: {
content: {
"application/json": components["schemas"]["CheckRunCreate"];
};
};
responses: {
/** @description 已排队 */
201: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["CheckRun"];
};
};
/** @description `job_already_running`(附 `job_id`)、`quota_exhausted`、`billing_changed`(附最新的 `preview`)、
* `no_parsed_tender`、`no_bid_documents`、`project_read_only`
* */
409: {
headers: {
[name: string]: unknown;
};
content: {
"application/problem+json": components["schemas"]["Problem"];
};
};
};
};
getCheckRun: {
parameters: {
query?: never;
header?: never;
path: {
run_id: components["parameters"]["RunId"];
};
cookie?: never;
};
requestBody?: never;
responses: {
/** @description OK */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["CheckRun"];
};
};
404: components["responses"]["NotFound"];
};
};
cancelCheckRun: {
parameters: {
query?: never;
header?: never;
path: {
run_id: components["parameters"]["RunId"];
};
cookie?: never;
};
requestBody?: never;
responses: {
/** @description 已受理 */
202: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["CheckRun"];
};
};
/** @description `job_finished` */
409: {
headers: {
[name: string]: unknown;
};
content: {
"application/problem+json": components["schemas"]["Problem"];
};
};
};
};
listFindings: {
parameters: {
query?: {
severity?: components["schemas"]["Severity"];
status?: components["schemas"]["FindingStatus"];
presence?: components["schemas"]["Presence"];
};
header?: never;
path: {
run_id: components["parameters"]["RunId"];
};
cookie?: never;
};
requestBody?: never;
responses: {
/** @description 按级别、再按原文顺序 */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": {
items: components["schemas"]["Finding"][];
};
};
};
};
};
bulkResolveFindings: {
parameters: {
query?: never;
header?: never;
path: {
run_id: components["parameters"]["RunId"];
};
cookie?: never;
};
requestBody: {
content: {
"application/json": {
finding_ids: components["schemas"]["Id"][];
/** @enum {string} */
status: "confirmed_ok" | "ignored";
note?: string;
};
};
};
responses: {
/** @description 全部成功才提交,否则一条都不改 */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": {
items: components["schemas"]["Finding"][];
project: components["schemas"]["ProjectReadiness"];
};
};
};
/** @description `run_superseded`、`project_read_only` */
409: {
headers: {
[name: string]: unknown;
};
content: {
"application/problem+json": components["schemas"]["Problem"];
};
};
/** @description `bulk_only_hint`(附不符合的问题编号)、`note_required` */
422: {
headers: {
[name: string]: unknown;
};
content: {
"application/problem+json": components["schemas"]["Problem"];
};
};
};
};
resolveFinding: {
parameters: {
query?: never;
header?: never;
path: {
finding_id: components["parameters"]["FindingId"];
};
cookie?: never;
};
requestBody: {
content: {
"application/json": {
/** @enum {string} */
status: "confirmed_ok" | "modified" | "ignored";
note?: string;
};
};
};
responses: {
/** @description 返回问题和项目最新的就绪状态 */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": {
finding: components["schemas"]["Finding"];
project: components["schemas"]["ProjectReadiness"];
};
};
};
/** @description `run_superseded`、`finding_resolved_this_run`、`project_read_only` */
409: {
headers: {
[name: string]: unknown;
};
content: {
"application/problem+json": components["schemas"]["Problem"];
};
};
/** @description `note_required` */
422: {
headers: {
[name: string]: unknown;
};
content: {
"application/problem+json": components["schemas"]["Problem"];
};
};
};
};
reopenFinding: {
parameters: {
query?: never;
header?: never;
path: {
finding_id: components["parameters"]["FindingId"];
};
cookie?: never;
};
requestBody?: never;
responses: {
/** @description OK */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": {
finding: components["schemas"]["Finding"];
project: components["schemas"]["ProjectReadiness"];
};
};
};
/** @description `run_superseded`、`project_read_only` */
409: {
headers: {
[name: string]: unknown;
};
content: {
"application/problem+json": components["schemas"]["Problem"];
};
};
};
};
listManualChecks: {
parameters: {
query?: never;
header?: never;
path: {
project_id: components["parameters"]["ProjectId"];
};
cookie?: never;
};
requestBody?: never;
responses: {
/** @description OK */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": {
items: components["schemas"]["ManualCheck"][];
};
};
};
};
};
setManualCheck: {
parameters: {
query?: never;
header?: never;
path: {
project_id: components["parameters"]["ProjectId"];
};
cookie?: never;
};
requestBody: {
content: {
"application/json": {
/** @description item:<清单项编号> 或 rule:<规则编号> */
check_key: string;
checked: boolean;
note?: string;
};
};
};
responses: {
/** @description OK */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["ManualCheck"];
};
};
409: components["responses"]["ProjectReadOnly"];
422: components["responses"]["ValidationFailed"];
};
};
generateReport: {
parameters: {
query?: never;
header?: never;
path: {
run_id: components["parameters"]["RunId"];
};
cookie?: never;
};
requestBody?: never;
responses: {
/** @description 已排队 */
202: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["ReportJob"];
};
};
/** @description `run_not_succeeded` */
409: {
headers: {
[name: string]: unknown;
};
content: {
"application/problem+json": components["schemas"]["Problem"];
};
};
};
};
getReportJob: {
parameters: {
query?: never;
header?: never;
path: {
job_id: components["parameters"]["JobId"];
};
cookie?: never;
};
requestBody?: never;
responses: {
/** @description OK */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["ReportJob"];
};
};
404: components["responses"]["NotFound"];
};
};
listReports: {
parameters: {
query?: never;
header?: never;
path: {
project_id: components["parameters"]["ProjectId"];
};
cookie?: never;
};
requestBody?: never;
responses: {
/** @description 按时间倒序 */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": {
items: components["schemas"]["Report"][];
};
};
};
};
};
getReportFileUrl: {
parameters: {
query?: never;
header?: never;
path: {
report_id: components["schemas"]["Id"];
};
cookie?: never;
};
requestBody?: never;
responses: {
/** @description OK */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["DownloadUrl"];
};
};
404: components["responses"]["NotFound"];
};
};
listQualifications: {
parameters: {
query?: {
kind?: components["schemas"]["QualificationKind"];
};
header?: never;
path?: never;
cookie?: never;
};
requestBody?: never;
responses: {
/** @description OK */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": {
items: components["schemas"]["Qualification"][];
};
};
};
};
};
createQualification: {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
requestBody: {
content: {
"application/json": components["schemas"]["QualificationInput"];
};
};
responses: {
/** @description OK */
201: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["Qualification"];
};
};
422: components["responses"]["ValidationFailed"];
};
};
updateQualification: {
parameters: {
query?: never;
header?: never;
path: {
qualification_id: components["parameters"]["QualificationId"];
};
cookie?: never;
};
requestBody: {
content: {
"application/json": components["schemas"]["QualificationInput"];
};
};
responses: {
/** @description OK */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["Qualification"];
};
};
404: components["responses"]["NotFound"];
422: components["responses"]["ValidationFailed"];
};
};
deleteQualification: {
parameters: {
query?: never;
header?: never;
path: {
qualification_id: components["parameters"]["QualificationId"];
};
cookie?: never;
};
requestBody?: never;
responses: {
/** @description 已删除 */
204: {
headers: {
[name: string]: unknown;
};
content?: never;
};
};
};
attachQualificationFile: {
parameters: {
query?: never;
header?: never;
path: {
qualification_id: components["parameters"]["QualificationId"];
};
cookie?: never;
};
requestBody: {
content: {
"application/json": {
upload_id: components["schemas"]["Id"];
};
};
};
responses: {
/** @description OK */
201: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["Qualification"];
};
};
};
};
getQualificationFileUrl: {
parameters: {
query?: never;
header?: never;
path: {
qualification_id: components["parameters"]["QualificationId"];
file_id: components["schemas"]["Id"];
};
cookie?: never;
};
requestBody?: never;
responses: {
/** @description OK */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["DownloadUrl"];
};
};
};
};
deleteQualificationFile: {
parameters: {
query?: never;
header?: never;
path: {
qualification_id: components["parameters"]["QualificationId"];
file_id: components["schemas"]["Id"];
};
cookie?: never;
};
requestBody?: never;
responses: {
/** @description 已删除 */
204: {
headers: {
[name: string]: unknown;
};
content?: never;
};
};
};
listNotifications: {
parameters: {
query?: {
unread?: boolean;
/** @description 上一页返回的 next_cursor */
cursor?: components["parameters"]["Cursor"];
limit?: components["parameters"]["Limit"];
};
header?: never;
path?: never;
cookie?: never;
};
requestBody?: never;
responses: {
/** @description 按时间倒序 */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["Page"] & {
unread_count: number;
items: components["schemas"]["Notification"][];
};
};
};
};
};
markNotificationsRead: {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
requestBody?: {
content: {
"application/json": {
ids?: components["schemas"]["Id"][];
};
};
};
responses: {
/** @description OK */
204: {
headers: {
[name: string]: unknown;
};
content?: never;
};
};
};
streamEvents: {
parameters: {
query?: never;
header?: {
"Last-Event-ID"?: string;
};
path?: never;
cookie?: never;
};
requestBody?: never;
responses: {
/** @description `text/event-stream`;`event` 字段是 Event.type,`data` 是 Event 的 JSON */
200: {
headers: {
[name: string]: unknown;
};
content: {
"text/event-stream": components["schemas"]["Event"];
};
};
};
};
createFeedback: {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
requestBody: {
content: {
"application/json": components["schemas"]["FeedbackCreate"];
};
};
responses: {
/** @description 已提交 */
201: {
headers: {
[name: string]: unknown;
};
content?: never;
};
422: components["responses"]["ValidationFailed"];
};
};
}