计划见 docs/architecture/vision-plan.md(VS1–VS13,docs/decisions.md)。 - 验证:OCR(RapidOCR + PP-OCRv6 small,CPU)和 DeepSeek Flash 看图在国动投标文件 和 7 张证书上初测(tech-validation §7,代码 spikes/s5-ocr/) - OCR 服务 services/ocr(镜像、Compose 服务):整页转正(含 180°)、红章附近按红色通道重读 - 扫描页和插图识别后并入文字层 v6,句子标 source=ocr;出处标「OCR」(迁移 0013); 依据识别文字的问题降级,规则不查扫描附件;国动端到端见 check-eval §16 - 资质库上传识别:添加资质对话框最上面传证书照片,识别后填表,只预填和 OCR 文字 对得上的字段;识别值留痕、照片挂成附件(迁移 0014,提示词 vision.cert_fields v1) - 资质库改为查看详情(只读键值 + 附件缩略图),附件用大图浏览控件看,不开新标签页 (设计规范 §7.23);PDF 附件按页出预览图 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
5211 lines
172 KiB
TypeScript
5211 lines
172 KiB
TypeScript
/**
|
||
* 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;
|
||
};
|
||
"/me/sms-codes": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
get?: never;
|
||
put?: never;
|
||
/** 登录后发验证码到自己的手机号(注销账号的二次确认,前端不需要完整号码) */
|
||
post: operations["sendMySmsCode"];
|
||
delete?: never;
|
||
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,决策 M6-8。需要短信验证码(`POST /me/sms-codes`)和企业名称两次确认;
|
||
* 企业名称不一致返回 422 `tenant_name_mismatch`。成功后所有会话失效,手机号可以重新注册;项目、资质库等由后台删除。
|
||
*
|
||
*/
|
||
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;
|
||
};
|
||
"/projects/{project_id}/lots/clear": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
project_id: components["parameters"]["ProjectId"];
|
||
};
|
||
cookie?: never;
|
||
};
|
||
get?: never;
|
||
put?: never;
|
||
/**
|
||
* 这个项目不分包(PI2)
|
||
* @description 删掉所有包,清单项都归为各包通用,建回默认包。用于把分项误识别成包等情况。
|
||
*/
|
||
post: operations["clearLots"];
|
||
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;
|
||
/**
|
||
* 删除分包(原属这个包的清单项变为各包通用,PI3)
|
||
* @description 删掉最后一个包时项目回到「不分包」(自动建回默认包,PI2)。
|
||
*/
|
||
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/response-modes/{category}": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
project_id: components["parameters"]["ProjectId"];
|
||
category: "technical" | "commercial";
|
||
};
|
||
cookie?: never;
|
||
};
|
||
get?: never;
|
||
/** 改招标文件某一类要求的响应方式(C12 的人工确认点) */
|
||
put: operations["setResponseMode"];
|
||
post?: never;
|
||
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}/qualification-matches": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
project_id: components["parameters"]["ProjectId"];
|
||
};
|
||
cookie?: never;
|
||
};
|
||
/**
|
||
* 读标清单上的资质库情况(qualification-plan §4,第 6 步)
|
||
* @description 正式清单里资格条件、评分项中认出证书类别的条目,每类给出资质库里有效期最晚的一条,按投标截止日判断是否过期
|
||
* (没有截止时间按今天)。认类别、排除产品和人员证书的口径和查标一样;资质库是空的时 items 为空(QL3)。
|
||
*
|
||
*/
|
||
get: operations["listQualificationMatches"];
|
||
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}/item-results": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
run_id: components["parameters"]["RunId"];
|
||
};
|
||
cookie?: never;
|
||
};
|
||
/**
|
||
* 每条清单项的检查结论(C9)
|
||
* @description 「已响应」也是 AI 结论,同样带投标侧出处、可以复核、可以反馈判断有误(红线 1、2)。
|
||
* 问题只为没响应好的条目生成;这里列出本批次参与检查的全部清单项。
|
||
*
|
||
*/
|
||
get: operations["listCheckItemResults"];
|
||
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;
|
||
};
|
||
/**
|
||
* 资质库
|
||
* @description 按「有效期至」从近到远排,长期有效的在最后。
|
||
*/
|
||
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}/previews": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
qualification_id: components["parameters"]["QualificationId"];
|
||
file_id: components["schemas"]["Id"];
|
||
};
|
||
cookie?: never;
|
||
};
|
||
/** 附件的预览图(图片一张,PDF 每页一张,最多 10 页),详情和大图浏览用 */
|
||
get: operations["getQualificationFilePreviews"];
|
||
put?: never;
|
||
post?: never;
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/qualification-scans": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
get?: never;
|
||
put?: never;
|
||
/** 上传证书扫描件识别(后台识别,轮询结果;不扣额度,每个企业每天限 100 次) */
|
||
post: operations["createQualificationScan"];
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/qualification-scans/{scan_id}": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
scan_id: components["schemas"]["Id"];
|
||
};
|
||
cookie?: never;
|
||
};
|
||
/** 识别结果 */
|
||
get: operations["getQualificationScan"];
|
||
put?: never;
|
||
post?: never;
|
||
/** 丢弃识别结果(连同原件) */
|
||
delete: operations["deleteQualificationScan"];
|
||
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";
|
||
/**
|
||
* @description jpeg、png 只出现在资质附件(purpose = qualification_file)上
|
||
* @enum {string}
|
||
*/
|
||
DetectedFormat: "pdf" | "docx" | "doc" | "wps" | "ofd" | "encrypted_bid" | "jpeg" | "png" | "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";
|
||
/** @description 一类证书在资质库里的情况(读标页用) */
|
||
QualificationMatch: {
|
||
family: string;
|
||
/** @description 资质库里这一类有几条 */
|
||
count: number;
|
||
/**
|
||
* @description 按 as_of 判断;missing 是资质库里没有这一类
|
||
* @enum {string}
|
||
*/
|
||
state: "valid" | "expired" | "missing";
|
||
/** @description 有效期最晚的一条;没有时为 null */
|
||
record: null | {
|
||
id: components["schemas"]["Id"];
|
||
name: string;
|
||
kind: components["schemas"]["QualificationKind"];
|
||
level?: string | null;
|
||
cert_no?: string | null;
|
||
/**
|
||
* Format: date
|
||
* @description null 表示长期有效
|
||
*/
|
||
valid_to: string | null;
|
||
};
|
||
};
|
||
/** @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;
|
||
/** @description 本期发放(按当前这一期订阅) */
|
||
period_granted: number;
|
||
/** @description 本期净用量(预扣 − 退回) */
|
||
period_used: number;
|
||
/** @description 本期退回的次数(失败、超时、取消) */
|
||
period_released?: number;
|
||
/** @description 0~1;≥ 0.8 时界面变赭色(Q9) */
|
||
used_ratio?: number;
|
||
}[];
|
||
/** @description 本期按功能分布(没被退回的预扣);deleted 是项目已删除、看不出用途的;waived 是 24 小时内复查的免扣次数 */
|
||
usage: {
|
||
tender: number;
|
||
/** @description 补遗和澄清 */
|
||
addendum: number;
|
||
check: number;
|
||
deleted: number;
|
||
waived: number;
|
||
};
|
||
/** @description 已续费、排队等当前一期结束后生效的那一期 */
|
||
renewal?: null | {
|
||
starts_at: components["schemas"]["Timestamp"];
|
||
ends_at: components["schemas"]["Timestamp"];
|
||
};
|
||
/** @description 还在等转账或开通的申请 */
|
||
pending_request?: null | components["schemas"]["ActivationRequest"];
|
||
};
|
||
QuotaEntry: {
|
||
id: components["schemas"]["Id"];
|
||
unit: components["schemas"]["QuotaUnit"];
|
||
kind: components["schemas"]["QuotaEntryKind"];
|
||
/** @description 对余额的影响;结算、免扣为 0 */
|
||
amount: number;
|
||
/** @description 记完这一条以后的账户余额 */
|
||
balance_after: number;
|
||
/** @description 结算、退回对应的预扣 */
|
||
hold_entry_id?: components["schemas"]["Id"] | null;
|
||
/** @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"];
|
||
};
|
||
/** @description 专票(invoice_type = special)还要地址电话和开户行账号 */
|
||
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"];
|
||
/** @description 申请单号,对公转账时写在备注里 */
|
||
request_no: string;
|
||
plan_code: components["schemas"]["PlanCode"];
|
||
/**
|
||
* @description 等待转账 / 已到账 / 已开通 / 已退回 / 已撤回
|
||
* @enum {string}
|
||
*/
|
||
status: "submitted" | "paid" | "activated" | "rejected" | "cancelled";
|
||
invoice_info?: components["schemas"]["InvoiceInfo"];
|
||
/** @description 收款信息(配置项;没配时为「(待定)」,决策 M6-6)。页面不写价格,运营联系确认金额 */
|
||
payment: {
|
||
payee_name: string;
|
||
payee_bank: string;
|
||
payee_account: string;
|
||
};
|
||
/** @description 退回原因 */
|
||
ops_note?: string | null;
|
||
invoice_no?: string | null;
|
||
handled_at?: components["schemas"]["Timestamp"] | null;
|
||
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"];
|
||
/** @description 最近一次完成的检查(「处理致命问题」直接打开它) */
|
||
latest_check_run_id?: components["schemas"]["Id"] | null;
|
||
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: {
|
||
/** @description 来自哪条清单项;人工改过的投标截止时间没有对应条目,为 null */
|
||
item_id: components["schemas"]["Id"] | null;
|
||
label: string;
|
||
/** @enum {string} */
|
||
kind?: "question_deadline" | "bid_deadline" | "opening" | "deposit_deadline" | "validity" | "other";
|
||
at: components["schemas"]["Timestamp"];
|
||
/** @description 人工改过(投标截止时间按项目字段的人工值显示) */
|
||
edited?: boolean;
|
||
/** @description 已按补遗确认更新:原来的时间和带来新值的文件(「已按补遗 1 更新 · 原为……」) */
|
||
replaces?: {
|
||
at: string;
|
||
document_label: string;
|
||
} | null;
|
||
/** @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;
|
||
updated_at?: components["schemas"]["Timestamp"] | 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[];
|
||
/** @description AI 识别的原值(包号、名称、预算、限价),人工修改不覆盖 */
|
||
ai_values?: Record<string, never> | null;
|
||
};
|
||
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;
|
||
};
|
||
/**
|
||
* @description 整本 / 资格证明 / 商务 / 技术 / 报价 / 其他(C8)
|
||
* @enum {string}
|
||
*/
|
||
VolumeKind: "whole" | "qualification" | "commercial" | "technical" | "price" | "other";
|
||
DocumentCreate: {
|
||
upload_id: components["schemas"]["Id"];
|
||
role: components["schemas"]["DocumentRole"];
|
||
/** @description 用户自填的分册名称,不填时按分册类型显示 */
|
||
volume_name?: string;
|
||
/** @description 投标分册类型,默认整本(C8)。只用来排序检索候选和填写「找过哪些分册」,不限制检索范围 */
|
||
volume_kind?: components["schemas"]["VolumeKind"];
|
||
/** @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;
|
||
volume_kind?: components["schemas"]["VolumeKind"] | 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 原句是扫描页或插图上 OCR 识别出来的,可能有错字(界面标「识别文字」) */
|
||
ocr: boolean;
|
||
};
|
||
/** @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 补遗:更早文件里有几条日期条目被标「已被补遗 N 更新」(FR-M2-10) */
|
||
dates_superseded?: number;
|
||
/** @description 补遗:项目字段里有几个新值等确认 */
|
||
fields_pending?: 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: {
|
||
/** @description 招标文件对技术、商务要求的响应方式(C12)。识别出来的(origin = rule)可以改(origin = human,人工确认点);查标按它判没找到响应算不算问题 */
|
||
response_modes?: components["schemas"]["ResponseMode"][];
|
||
/** @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;
|
||
/** @description 来自哪份招标侧文件(招标文件、补遗 N、澄清 N);人工添加的为 null */
|
||
origin_document?: {
|
||
id: components["schemas"]["Id"];
|
||
label: string;
|
||
} | null;
|
||
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" | "checklist_empty" | "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 补遗带来的新值、日期更新还没确认的处数;查标用旧值(AD4),只提示、不阻止 */
|
||
pending_updates?: 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 检查之后改过项目依据(截止时间、限价、所投的包、法律体系),查标页提示「重新检查后生效」(PI5) */
|
||
basis_changed?: boolean;
|
||
/** @description 查了什么、没查什么(报告首页、查标页顶部,FR-M3-09、m3-plan §2.5)。认不出、查不了、没查的都写在这里,不静默跳过。
|
||
* */
|
||
coverage?: {
|
||
checked?: string[];
|
||
not_checked?: string[];
|
||
/** @description 本次检查的投标分册;没有文字层(扫描件)的页码 */
|
||
documents?: {
|
||
id?: components["schemas"]["Id"];
|
||
label?: string;
|
||
pages?: number;
|
||
pages_without_text?: number[];
|
||
chars?: number;
|
||
}[];
|
||
/** @description 清单项条数:正式清单、本次查了的、待确认区、不在所投包、没完成判断、证据没通过校验 */
|
||
items?: {
|
||
formal?: number;
|
||
checked?: number;
|
||
pending_zone?: number;
|
||
other_lot?: number;
|
||
undetermined?: number;
|
||
evidence_unverified?: number;
|
||
};
|
||
checklist_confirmed?: boolean;
|
||
legal_regime?: {
|
||
value?: components["schemas"]["LegalRegime"];
|
||
/** @description 这套法律体系的规则是否经过样本验证(招标投标体系暂无样本) */
|
||
rules_verified?: boolean;
|
||
};
|
||
rule_set_version?: string;
|
||
/** @description 资质匹配的计数(qualification-plan §3.4):资质库条数、核对的资质要求、按资质库判断的、没认出类别的、排除的 */
|
||
qualification?: Record<string, never>;
|
||
/** @description 检查时用的项目依据(PI5):deadline_at、ceiling_total、legal_regime 各为 {value, source},lots 是所投各包 {lot_no, ceiling_amount, source}。报告按它写 */
|
||
basis?: Record<string, never>;
|
||
prompt_versions?: Record<string, never>;
|
||
tokens?: {
|
||
in?: number;
|
||
out?: number;
|
||
};
|
||
model_calls?: number;
|
||
/** @description 证据没通过校验的条目数,按原因码计 */
|
||
verify_failures?: {
|
||
[key: string]: number;
|
||
};
|
||
} | 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;
|
||
/** @description 规则问题的规则编号和说明(detector = rule 时有);资质匹配的问题同时挂清单项 */
|
||
rule?: {
|
||
code?: string;
|
||
description?: string;
|
||
} | null;
|
||
/** @description 按类型的补充信息:参数的要求值和响应值、从投标文件读到的金额;资质问题(type = qualification)有 kind(expired / level_low / not_covered)、source(bid_text / library)、deadline,issues[] 里 source = library 的带 library(资质库记录的快照:id、name、kind、level、cert_no、valid_to),界面显示为「依据:资质库记录」 */
|
||
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;
|
||
/** @description 同一次检查里问题类型相同、要求原文完全相同的其他问题(清单里重复出现的要求,决策 C5 修订:各自判断,界面折叠显示) */
|
||
duplicate_ids?: components["schemas"]["Id"][];
|
||
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;
|
||
};
|
||
ResponseMode: {
|
||
/** @enum {string} */
|
||
category: "technical" | "commercial";
|
||
/**
|
||
* @description 逐条响应 / 默认接受(只列偏离)
|
||
* @enum {string}
|
||
*/
|
||
mode: "explicit" | "implicit";
|
||
/**
|
||
* @description 写明了 / 两处写法冲突(按逐条处理)/ 没写明(按逐条处理)
|
||
* @enum {string}
|
||
*/
|
||
status: "found" | "conflict" | "unknown";
|
||
/** @enum {string} */
|
||
origin: "rule" | "human";
|
||
citations: components["schemas"]["Citation"][];
|
||
set_by?: components["schemas"]["UserRef"] | null;
|
||
set_at?: components["schemas"]["Timestamp"] | null;
|
||
};
|
||
CheckItemResult: {
|
||
checklist_item_id: components["schemas"]["Id"];
|
||
title?: string | null;
|
||
/**
|
||
* @description 已响应 / 未找到 / 负偏离未说明 / 疑似不满足 / 未给出具体值 / 未判定(模型漏答或暂时不可用)/ 扫描件请人工核对 /
|
||
* 按招标文件默认接受(未列入偏离表的视为接受,不出问题)/ 默认接受的实质性要求、请人工核对(C12)。
|
||
* 没有校验通过的投标侧证据,不会是 responded(架构 §3.6)
|
||
*
|
||
* @enum {string}
|
||
*/
|
||
verdict: "responded" | "not_found" | "negative_deviation" | "suspected_unmet" | "no_value" | "undetermined" | "scanned" | "implicit_accepted" | "implicit_review";
|
||
/**
|
||
* @description 结论来自哪一层(m3-plan §2.1;presence 是按文件在不在判断)
|
||
* @enum {string}
|
||
*/
|
||
layer: "deviation_table" | "rule_compare" | "model" | "retrieval" | "presence";
|
||
/** @enum {string} */
|
||
evidence_status: "verified" | "unverified" | "none";
|
||
/** @description 证据没通过、漏答、模型错误等的原因码 */
|
||
reason_code?: string | null;
|
||
bid_citations: components["schemas"]["Citation"][];
|
||
/** @description 响应值、模型指的页码、找过哪些分册 */
|
||
detail: Record<string, never>;
|
||
/** @description 24 小时内复查时沿用了上一次的结论(C2) */
|
||
reused: boolean;
|
||
};
|
||
ManualCheck: {
|
||
/** @description rule:MANUAL.<主题>:SUBMIT、SIGN_ENCRYPT、DECRYPT、PAPER、DEPOSIT */
|
||
check_key: string;
|
||
label: string;
|
||
/** @description 代表这一主题的清单条目标题 */
|
||
requirement_text?: string | null;
|
||
/** @description 同一主题的清单条目(公告、须知、无效情形里常各写一遍,按主题合并成一条核对) */
|
||
related_items?: {
|
||
id: components["schemas"]["Id"];
|
||
title: string;
|
||
}[];
|
||
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;
|
||
/** @description 界面上必填(查标时用它核对附件),接口可空,以后批量导入时不一定读得全 */
|
||
cert_no?: string | null;
|
||
issuer?: string | null;
|
||
/** @description 证书主体(企业名、著作权人、持证人) */
|
||
holder?: string | null;
|
||
/** Format: date */
|
||
valid_from?: string | null;
|
||
/**
|
||
* Format: date
|
||
* @description 空表示长期有效;要晚于 valid_from
|
||
*/
|
||
valid_to?: string | null;
|
||
};
|
||
/** @description 新增、修改资质。从识别结果保存时带上 scan:记下识别值,原件挂成附件(同一个原件不重复挂) */
|
||
QualificationSave: components["schemas"]["QualificationInput"] & {
|
||
scan?: {
|
||
scan_id: components["schemas"]["Id"];
|
||
/** @description 识别结果里的第几张证书(从 0 数) */
|
||
index: number;
|
||
} | null;
|
||
};
|
||
/** @description 一次证书识别(vision-plan 第 2 步)。没保存的 24 小时后删除 */
|
||
QualificationScan: {
|
||
id: components["schemas"]["Id"];
|
||
filename: string;
|
||
/** @enum {string} */
|
||
status: "queued" | "running" | "succeeded" | "failed";
|
||
error: null | components["schemas"]["ScanError"];
|
||
pages: {
|
||
page: number;
|
||
/** @description 识别用的页面图宽(像素),高亮框按它换算成比例 */
|
||
width: number;
|
||
height: number;
|
||
/** @description OCR 转正用的角度(0 / 90 / 180 / 270) */
|
||
rotation: number;
|
||
/** @description 页面图的短时签名地址 */
|
||
url: string;
|
||
}[];
|
||
certificates: components["schemas"]["ScanCertificate"][];
|
||
created_at: components["schemas"]["Timestamp"];
|
||
};
|
||
ScanError: {
|
||
code: string;
|
||
message: string;
|
||
};
|
||
ScanCertificate: {
|
||
page: number;
|
||
/** @enum {string} */
|
||
category: "enterprise_qualification" | "system_cert" | "software_copyright" | "product" | "personnel" | "business_license" | "other";
|
||
kind: components["schemas"]["QualificationKind"];
|
||
/** @description 建议的资质名称:证书标题,后面括注软件名或专业 */
|
||
name: string;
|
||
/**
|
||
* @description 证书编号取哪个字段(软著取登记号)
|
||
* @enum {string}
|
||
*/
|
||
cert_no_field: "cert_no" | "reg_no";
|
||
/** @description 字段名 → 识别结果。name、holder、level、specialty、software、cert_no、reg_no、issuer、issued_on、valid_from、valid_to、validity_text */
|
||
fields: {
|
||
[key: string]: components["schemas"]["ScanField"];
|
||
};
|
||
/** @description 证书上有、但被打码或看不清的字段,要手动填写 */
|
||
masked: string[];
|
||
/** @description 推算的建议值,用户点了才填。valid_to:证书只写了有效期长度(如「五年」)时按发证日期推算 */
|
||
suggest: {
|
||
/** Format: date */
|
||
valid_to?: string;
|
||
};
|
||
notes: {
|
||
/** @enum {string} */
|
||
code: "personnel" | "product" | "business_license" | "holder_mismatch";
|
||
holder?: string;
|
||
tenant?: string;
|
||
}[];
|
||
/** @description 资质库里证书编号相同的一条(换证时建议更新它) */
|
||
existing: null | {
|
||
id: components["schemas"]["Id"];
|
||
name: string;
|
||
};
|
||
};
|
||
ScanField: {
|
||
/** @description 证书上的原样文字 */
|
||
value: string;
|
||
/**
|
||
* @description ok / date_ok 才自动填;low_conf(马赛克、模糊)、mismatch(识别结果和 OCR 对不上)等只作建议
|
||
* @enum {string}
|
||
*/
|
||
check: "ok" | "date_ok" | "low_conf" | "mismatch" | "bad_line" | "bad_format";
|
||
/**
|
||
* Format: date
|
||
* @description 日期字段换算成的日期
|
||
*/
|
||
day?: string;
|
||
/** @description 所引 OCR 行在页面图上的位置(像素)[x0, y0, x1, y1] */
|
||
boxes: number[][];
|
||
};
|
||
Qualification: components["schemas"]["QualificationInput"] & {
|
||
id: components["schemas"]["Id"];
|
||
/** @description 是从识别结果保存的(识别值留痕) */
|
||
recognized: boolean;
|
||
files: {
|
||
id: components["schemas"]["Id"];
|
||
filename: string;
|
||
size_bytes: number;
|
||
}[];
|
||
/** @description 进行中的项目(跟进中、编制中、已检查,截止日不早于今天)里,投标截止日晚于「有效期至」的项目。到期按每个项目的截止日判断,不按今天 */
|
||
late_for: {
|
||
project_id: components["schemas"]["Id"];
|
||
name: string;
|
||
/** Format: date */
|
||
deadline: string;
|
||
}[];
|
||
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" | "report_succeeded" | "report_failed" | "quota_80" | "quota_100" | "subscription_activated" | "subscription_expiring" | "subscription_expired" | "activation_rejected";
|
||
title: string;
|
||
project_id?: components["schemas"]["Id"] | null;
|
||
project_name?: string | null;
|
||
/** @description 前端路由,如 /projects/<id>/results、/quota */
|
||
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"];
|
||
};
|
||
};
|
||
sendMySmsCode: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody: {
|
||
content: {
|
||
"application/json": {
|
||
/** @enum {string} */
|
||
purpose: "close_tenant";
|
||
};
|
||
};
|
||
};
|
||
responses: {
|
||
/** @description 已发送 */
|
||
202: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
resend_after_s: number;
|
||
};
|
||
};
|
||
};
|
||
429: components["responses"]["RateLimited"];
|
||
};
|
||
};
|
||
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"];
|
||
};
|
||
};
|
||
clearLots: {
|
||
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"][];
|
||
};
|
||
};
|
||
};
|
||
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;
|
||
};
|
||
409: components["responses"]["ProjectReadOnly"];
|
||
};
|
||
};
|
||
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;
|
||
/**
|
||
* @description 资质附件只收 PDF、JPG、PNG,单个不超过 20MB
|
||
* @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"][];
|
||
/** @description `lot_scope = bidding` 时不在所投包里、没列出的条数 */
|
||
hidden_count: number;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
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"];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
setResponseMode: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
project_id: components["parameters"]["ProjectId"];
|
||
category: "technical" | "commercial";
|
||
};
|
||
cookie?: never;
|
||
};
|
||
requestBody: {
|
||
content: {
|
||
"application/json": {
|
||
/** @enum {string} */
|
||
mode: "explicit" | "implicit";
|
||
};
|
||
};
|
||
};
|
||
responses: {
|
||
/** @description 返回清单概况 */
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["Checklist"];
|
||
};
|
||
};
|
||
409: components["responses"]["ProjectReadOnly"];
|
||
};
|
||
};
|
||
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"];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
listQualificationMatches: {
|
||
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": {
|
||
/**
|
||
* Format: date
|
||
* @description 按哪天判断有效期
|
||
*/
|
||
as_of: string;
|
||
/** @description as_of 是投标截止日(false 时是今天) */
|
||
by_deadline: boolean;
|
||
items: {
|
||
checklist_item_id: components["schemas"]["Id"];
|
||
families: components["schemas"]["QualificationMatch"][];
|
||
}[];
|
||
};
|
||
};
|
||
};
|
||
404: components["responses"]["NotFound"];
|
||
};
|
||
};
|
||
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`、`checklist_empty`、`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"][];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
listCheckItemResults: {
|
||
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": {
|
||
items: components["schemas"]["CheckItemResult"][];
|
||
};
|
||
};
|
||
};
|
||
404: components["responses"]["NotFound"];
|
||
};
|
||
};
|
||
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?: {
|
||
content: {
|
||
"application/json": {
|
||
/**
|
||
* @description 问题明细带招标、投标两侧出处
|
||
* @default true
|
||
*/
|
||
citations?: boolean;
|
||
/**
|
||
* @description 附录「需人工核对」
|
||
* @default true
|
||
*/
|
||
manual_checks?: boolean;
|
||
};
|
||
};
|
||
};
|
||
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"];
|
||
/** @description 按名称、证书编号、发证机构搜索 */
|
||
q?: string;
|
||
};
|
||
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"]["QualificationSave"];
|
||
};
|
||
};
|
||
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"]["QualificationSave"];
|
||
};
|
||
};
|
||
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"];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
getQualificationFilePreviews: {
|
||
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": {
|
||
file_id: components["schemas"]["Id"];
|
||
filename: string;
|
||
pages: {
|
||
page: number;
|
||
width: number;
|
||
height: number;
|
||
/** @description 预览图(JPEG)的短时签名地址 */
|
||
url: string;
|
||
}[];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
createQualificationScan: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody: {
|
||
content: {
|
||
"application/json": {
|
||
upload_id: components["schemas"]["Id"];
|
||
};
|
||
};
|
||
};
|
||
responses: {
|
||
/** @description 已排队 */
|
||
201: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["QualificationScan"];
|
||
};
|
||
};
|
||
429: components["responses"]["RateLimited"];
|
||
/** @description `ocr_unavailable`:扫描件识别服务没有开或连不上,可以先手动填写 */
|
||
503: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/problem+json": components["schemas"]["Problem"];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
getQualificationScan: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
scan_id: components["schemas"]["Id"];
|
||
};
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
/** @description OK */
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["QualificationScan"];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
deleteQualificationScan: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
scan_id: components["schemas"]["Id"];
|
||
};
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
/** @description 已删除 */
|
||
204: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content?: never;
|
||
};
|
||
};
|
||
};
|
||
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"];
|
||
};
|
||
};
|
||
}
|