diff --git a/AGENTS.md b/AGENTS.md index 80d2407..c9d30b2 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -196,4 +196,5 @@ samples/ - 2026-11-03:物理数据模型 v0.1(`docs/architecture/data-model.md` + `schema-draft.sql`,40 张表,PostgreSQL 16 上 16 项行为测试通过)。DM1–DM7 全部按建议确认:句子放对象存储不进库、外键都带租户、每个项目一把数据密钥、手机号不存明文、规则问题可以只挂规则编号、清单新增「报价」类别。 - 2026-11-03:接口契约 v0.1(`docs/architecture/api-design.md` + `openapi.yaml`,OpenAPI 3.1,64 个路径、81 个操作),覆盖 MVP 原型 13 页的主流程,运营后台另行定义。API1–API5 全部按建议确认:骨架搭好前以 `openapi.yaml` 为准,之后以 FastAPI 生成的快照为准;事件流用 fetch 读;异地登录确认后挤掉旧设备;扣点说明和实际不一致时拒绝、不扣点;报告后台生成。 - 2026-11-03:工程骨架完成(分支 `feat/engineering-skeleton`)。「上传 → 解析 → 显示清单」最小链路在真实样本 S02、S06 和虚构样例上跑通:分片上传、按文件头识别格式、Gotenberg 转 PDF、文字层与稳定句子编号、实质性条款抽取(假模型 + 三道校验 + 标注类规则兜底)、并入清单;额度预扣 / 结算 / 退回、行级安全策略、对象加密都有测试。后端 30 个测试、pyright 严格模式、import 规则全部通过;前端 5 个页面按设计规范 v0.2 实现,类型检查和构建通过。搭建中的调整记在架构 §13(SK1–SK8),SK1、SK2 待确认。 -- 下一步:读标的修改类接口(采纳、修改、删除、确认清单)和 pdf.js 原文查看器;之后是查标(M3)。骨架留下的 TODO 见架构 §13 末尾。 +- 2026-11-03:测试环境接上真实模型(DeepSeek,配置在不进 git 的根目录 `.env`)。读标补齐五类清单和项目基本信息的抽取,修了国动样本暴露的 4 个问题(标注规则碎片、页码混入与跨页拆分、无效写法漏认、上级标题下的无效情形),见架构 §13 SK9、SK10。 +- 下一步:在 S01–S10 上做标注集评测(各类召回率、准确率),再做读标的修改类接口和 pdf.js 原文查看器;之后是查标(M3)。 diff --git a/apps/web/src/components/ChecklistItemRow.vue b/apps/web/src/components/ChecklistItemRow.vue index a87d7ae..42e1a35 100644 --- a/apps/web/src/components/ChecklistItemRow.vue +++ b/apps/web/src/components/ChecklistItemRow.vue @@ -5,7 +5,7 @@ */ import { computed } from "vue"; import CitationBlock from "./CitationBlock.vue"; -import { category, IMPORTANCE_MARK, IMPORTANCE_NAME, pendingReason } from "@/lib/labels"; +import { category, IMPORTANCE_MARK, IMPORTANCE_NAME, pendingReason, specFacts } from "@/lib/labels"; import type { ChecklistItem } from "@/lib/queries"; const props = defineProps<{ item: ChecklistItem; pending?: boolean }>(); @@ -16,6 +16,8 @@ const more = computed(() => props.item.citations.length - shown.value.length); const mark = computed(() => IMPORTANCE_MARK[props.item.importance] ?? ""); /** AI 摘要和标题不同时才单独显示,避免重复 */ const summary = computed(() => (props.item.summary && props.item.summary !== props.item.title ? props.item.summary : "")); +/** 结构化取值:分值、参数要求、日期等,都来自原文(取值校验通过的才进正式清单) */ +const facts = computed(() => specFacts(props.item.spec));