feat(check): 需人工核对(P2)和分项 / 单价上限(C7)

- 需人工核对:份数、密封、递交、CA 签章加密、解密、保证金这类文件里看不出来的要求,
  从正式清单按主题合并、带招标原文出处;manual-checks 接口按项目存勾选、写勾选人和时间,
  复查沿用;查标页加「需人工核对」一块,覆盖范围写明列了几条
- 「报价」类清单项:读标从采购需求的清单表规则读出分项 / 单价上限(checklist/price.py);
  查标交给规则 PRICE.OVER_CEILING_ITEM 比对分项报价表,不交给模型;规则集 2026.11-r2
- 版面工具(分页、分行、归栏)挪到 document/pipeline/layout.py,读标和查标共用
- 评测:price_defects.py 从规矩投标文件派生只带报价问题的 4 份(P01、P02、P03)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
YANG JIANKUAN
2026-11-04 17:31:32 +08:00
parent db1b1f6f9f
commit 81c58798d2
22 changed files with 888 additions and 84 deletions

View File

@@ -14,5 +14,6 @@ export const qk = {
checkRuns: (projectId: string) => ["check-runs", projectId] as const,
checkRun: (id: string) => ["check-run", id] as const,
findings: (runId: string) => ["findings", runId] as const,
manualChecks: (projectId: string) => ["manual-checks", projectId] as const,
itemResults: (runId: string) => ["item-results", runId] as const,
};

View File

@@ -25,6 +25,7 @@ export type CheckPreview = Schemas["CheckPreview"];
export type CheckRun = Schemas["CheckRun"];
export type Finding = Schemas["Finding"];
export type CheckItemResult = Schemas["CheckItemResult"];
export type ManualCheck = Schemas["ManualCheck"];
export const fetchMe = () => unwrap(api.GET("/me"));
@@ -125,6 +126,13 @@ export function useCheckRun(id: MaybeRefOrGetter<string>) {
});
}
export function useManualChecks(projectId: MaybeRefOrGetter<string>) {
return useQuery({
queryKey: computed(() => qk.manualChecks(toValue(projectId))),
queryFn: () => unwrap(api.GET("/projects/{project_id}/manual-checks", { params: { path: { project_id: toValue(projectId) } } })),
});
}
export function useFindings(runId: MaybeRefOrGetter<string>, enabled: MaybeRefOrGetter<boolean>) {
return useQuery({
queryKey: computed(() => qk.findings(toValue(runId))),