/** * 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; 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 | 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; 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//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; 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"]; }; }; }