diff --git a/.playwright-cli/console-2026-09-28T03-26-48-947Z.log b/.playwright-cli/console-2026-09-28T03-26-48-947Z.log new file mode 100644 index 0000000..7341414 --- /dev/null +++ b/.playwright-cli/console-2026-09-28T03-26-48-947Z.log @@ -0,0 +1,29 @@ +[ 223ms] [LOG] AI融资已启动 @ http://localhost:5175/App.uvue?import&vue&type=script&setup=true&lang.uts:15 +[ 235ms] [LOG] Preload pages in uni-app-x development mode. @ http://localhost:5175/@fs/D:/Develop/HBuilderX/plugins/uniapp-cli-vite/node_modules/@dcloudio/uni-h5/dist-x/uni-h5.es.js:25391 +[ 419ms] [VERBOSE] [DOM] Password field is not contained in a form: (More info: https://goo.gl/9p2vKq) %o @ http://localhost:5175/#/packages/account/login/login:0 +[ 1254ms] [LOG] AI融资已启动 @ http://localhost:5175/App.uvue?import&vue&type=script&setup=true&lang.uts:15 +[ 1258ms] [LOG] Preload pages in uni-app-x development mode. @ http://localhost:5175/@fs/D:/Develop/HBuilderX/plugins/uniapp-cli-vite/node_modules/@dcloudio/uni-h5/dist-x/uni-h5.es.js:25391 +[ 112839ms] [LOG] AI融资已启动 @ http://localhost:5175/App.uvue?import&vue&type=script&setup=true&lang.uts:15 +[ 112845ms] [LOG] Preload pages in uni-app-x development mode. @ http://localhost:5175/@fs/D:/Develop/HBuilderX/plugins/uniapp-cli-vite/node_modules/@dcloudio/uni-h5/dist-x/uni-h5.es.js:25391 +[ 125960ms] [LOG] AI融资已启动 @ http://localhost:5175/App.uvue?import&vue&type=script&setup=true&lang.uts:15 +[ 125965ms] [LOG] Preload pages in uni-app-x development mode. @ http://localhost:5175/@fs/D:/Develop/HBuilderX/plugins/uniapp-cli-vite/node_modules/@dcloudio/uni-h5/dist-x/uni-h5.es.js:25391 +[ 177135ms] [LOG] AI融资已启动 @ http://localhost:5175/App.uvue?import&vue&type=script&setup=true&lang.uts:15 +[ 177137ms] [LOG] Preload pages in uni-app-x development mode. @ http://localhost:5175/@fs/D:/Develop/HBuilderX/plugins/uniapp-cli-vite/node_modules/@dcloudio/uni-h5/dist-x/uni-h5.es.js:25391 +[ 182081ms] [LOG] AI融资已启动 @ http://localhost:5175/App.uvue?import&vue&type=script&setup=true&lang.uts:15 +[ 182088ms] [LOG] Preload pages in uni-app-x development mode. @ http://localhost:5175/@fs/D:/Develop/HBuilderX/plugins/uniapp-cli-vite/node_modules/@dcloudio/uni-h5/dist-x/uni-h5.es.js:25391 +[ 183314ms] [LOG] AI融资已启动 @ http://localhost:5175/App.uvue?import&vue&type=script&setup=true&lang.uts:15 +[ 183317ms] [LOG] Preload pages in uni-app-x development mode. @ http://localhost:5175/@fs/D:/Develop/HBuilderX/plugins/uniapp-cli-vite/node_modules/@dcloudio/uni-h5/dist-x/uni-h5.es.js:25391 +[ 183943ms] [ERROR] Failed to load resource: net::ERR_FAILED @ http://127.0.0.1/api/v1/assessments/331/report:0 +[ 188358ms] [LOG] AI融资已启动 @ http://localhost:5175/App.uvue?import&vue&type=script&setup=true&lang.uts:15 +[ 188364ms] [LOG] Preload pages in uni-app-x development mode. @ http://localhost:5175/@fs/D:/Develop/HBuilderX/plugins/uniapp-cli-vite/node_modules/@dcloudio/uni-h5/dist-x/uni-h5.es.js:25391 +[ 192055ms] [LOG] AI融资已启动 @ http://localhost:5175/App.uvue?import&vue&type=script&setup=true&lang.uts:15 +[ 192062ms] [LOG] Preload pages in uni-app-x development mode. @ http://localhost:5175/@fs/D:/Develop/HBuilderX/plugins/uniapp-cli-vite/node_modules/@dcloudio/uni-h5/dist-x/uni-h5.es.js:25391 +[ 192408ms] [ERROR] Failed to load resource: the server responded with a status of 404 (Not Found) @ http://127.0.0.1/api/v1/assessments/161:0 +[ 246390ms] [LOG] AI融资已启动 @ http://localhost:5175/App.uvue?import&vue&type=script&setup=true&lang.uts:15 +[ 246396ms] [LOG] Preload pages in uni-app-x development mode. @ http://localhost:5175/@fs/D:/Develop/HBuilderX/plugins/uniapp-cli-vite/node_modules/@dcloudio/uni-h5/dist-x/uni-h5.es.js:25391 +[ 247813ms] [LOG] AI融资已启动 @ http://localhost:5175/App.uvue?import&vue&type=script&setup=true&lang.uts:15 +[ 247815ms] [LOG] Preload pages in uni-app-x development mode. @ http://localhost:5175/@fs/D:/Develop/HBuilderX/plugins/uniapp-cli-vite/node_modules/@dcloudio/uni-h5/dist-x/uni-h5.es.js:25391 +[ 248706ms] [LOG] AI融资已启动 @ http://localhost:5175/App.uvue?import&vue&type=script&setup=true&lang.uts:15 +[ 248714ms] [LOG] Preload pages in uni-app-x development mode. @ http://localhost:5175/@fs/D:/Develop/HBuilderX/plugins/uniapp-cli-vite/node_modules/@dcloudio/uni-h5/dist-x/uni-h5.es.js:25391 +[ 249316ms] [ERROR] Failed to load resource: the server responded with a status of 401 (Unauthorized) @ http://127.0.0.1/api/v1/assessments/331/report:0 +[ 249656ms] [VERBOSE] [DOM] Password field is not contained in a form: (More info: https://goo.gl/9p2vKq) %o @ http://localhost:5175/?qa=expiry#/packages/account/login/login:0 diff --git a/.playwright-cli/page-2026-09-28T03-26-49-220Z.yml b/.playwright-cli/page-2026-09-28T03-26-49-220Z.yml new file mode 100644 index 0000000..e69de29 diff --git a/README.md b/README.md index e0906dd..86dda0e 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,14 @@ # AI 融资移动端 -基于 uni-app x、Vue 3、UTS 的移动端原型,包含 25 个页面。使用 HBuilderX(VDOM 模式)开发,已验证 5.24 和 5.26 的本地编译;本项目没有独立的 npm 构建入口。 +基于 uni-app x、Vue 3、UTS 的移动端原型,包含 26 个页面。使用 HBuilderX(VDOM 模式)开发,已验证 5.24 和 5.26 的本地编译;本项目没有独立的 npm 构建入口。 + +2026-09-28:原型07产品对比已接通,匹配列表/本次产品详情可选择2—3项历史产品,支持补选、移除、刷新恢复、失败列重试及手机横向滚动。复用本人冻结匹配详情,不新增表或模型调用;当前26页,真实产品与跨平台验收仍待完成。见[开发进度6.16](docs/开发进度.md)。 + +2026-09-28:原型09报告已改为“评估概况/匹配结果/改善建议”,支持栏目URL刷新、最多3项历史候选、分组产品依据与局部重试;重新评估进入空白个人/企业表单,旧报告不补算。PDF、上下文助手与行动页继续独立开发。验证见[开发进度6.17](docs/开发进度.md)。 ## 本地运行 -2026-09-24:本地产品库已按用户要求上架6条演示产品(ID22—27)。新评估会冻结目录、计算三态及证据并保存匹配结果;报告已展示实际统计和演示标记,旧报告不补算。匹配列表/详情API及04—10页面仍待改造,不能把现有模拟产品页面作为本次真实结果入口。数据、脚本与参数见[产品规则契约第7节](docs/产品匹配规则开发契约.md),验收进度见[开发进度6.12](docs/开发进度.md)。 +2026-09-24:本地产品库已按用户要求上架6条演示产品(ID22—27)。新评估会冻结目录、计算三态及证据并保存匹配结果;报告已展示实际统计和演示标记,旧报告不补算。匹配列表/详情API和03/04/05/06基础已接通,可从新报告进入本次匹配;07—10扩展待开发。数据、脚本与参数见[产品规则契约第7节](docs/产品匹配规则开发契约.md),验收进度见[开发进度6.12](docs/开发进度.md)。 本地评估分析还需要启动后端队列进程;仅启动 phpStudy、Redis 和前端页面不会执行模型任务。在 PowerShell 中运行下列命令,并保持终端运行(重启电脑后需重新启动): @@ -15,7 +19,7 @@ Set-Location 'D:\AAdesk\202609\airz' 提交后一直“分析中”时,先检查此进程是否运行;未运行时任务会保留在队列中,启动后继续处理,无需重复提交。运行会调用已配置的真实模型并产生用量。生产环境需要独立的进程守护;本地手动启动不代表已配置开机自启。 -在 HBuilderX 中导入当前目录,选择“运行 → 运行到浏览器”。共享请求配置位于 `services/api.uts`,账户、融资服务分别位于对应分包的 `services/`。现已接入本地后端密码登录、账户资料、头像、退出及改密,以及融资需求v2录入、正式提交、历史、DeepSeek自填报告与失败重试;完整度/准备状态及报告v2自填支线已接入;短信与真实产品匹配仍待接入。无草稿;金额显示万元、接口传元字符串。最新状态和验证范围见[开发进度](docs/开发进度.md)0.6及6.6。 +在 HBuilderX 中导入当前目录,选择“运行 → 运行到浏览器”。共享请求配置位于 `services/api.uts`,账户、融资服务分别位于对应分包的 `services/`。现已接入本地后端密码登录、账户资料、头像、退出及改密,以及融资需求v2录入、正式提交、历史、DeepSeek自填报告与失败重试;完整度/准备状态及报告v2自填支线已接入;短信与真实机构产品资料仍待接入。无草稿;金额显示万元、接口传元字符串。最新状态和验证范围见[开发进度](docs/开发进度.md)0.6及6.6。 也可使用 HBuilderX CLI。以下 PowerShell 命令中的安装路径应按本机环境调整;在项目根目录执行: @@ -67,7 +71,7 @@ $projectPath = (Get-Location).Path 资产与负债包含 `creditLoanCount`(信用贷款笔数)、`totalDebtBalance`(欠款总余额)、`monthlyLoanPayment`(贷款月还款金额)、`creditCardCount`(银行信用卡张数)、`creditCardTotalLimit`(总额度)、`creditCardUsedLimit`(已使用总额度)、`house` / `car`(有 / 无)。移动端所有金额统一以万元输入和展示,最多六位小数;提交接口前精确换算成元的两位小数字符串,范围为 0–999999999.99 元(DECIMAL(11,2))。数量为非负整数;资产负债保持原来的可跳过规则。企业经营时间使用实际经营月数,不从区间猜测。启动时清理旧评估草稿缓存,不导入、不恢复。 -新闻与课程的数据定义位于 `packages/content/services/content.uts`,产品定义位于 `packages/finance/services/finance.uts`。产品列表与详情共用 ID;预留 `GET /matches`(`items` 数组)及 `GET /products/:id`(单个产品),字段见 `FinanceProduct`,其中视图模型的 `amount` 为万元数值、`rate` 为年化百分比数值。真实接口应返回 `amountYuan`(元的两位小数字符串),由适配层转换;旧 `amount`(万元)仅保留兼容。后端产品表使用独立的额度、期限和利率范围字段,匹配分数与理由属于评估结果。申请入口目前仅引导准备资料,不向金融机构提交申请。 +新闻与课程的数据定义位于 `packages/content/services/content.uts`。正式匹配与产品适配位于 `packages/finance/services/matches.uts`;GET /assessments/:id/matches及结果详情返回冻结的产品范围、判定和证据;GET /products/:id返回当前公共资料。金额范围使用元的十进制字符串,在适配层精确转换为万元。旧无评估GET /matches和模拟fetchProduct入口已移除。后端产品表使用独立的额度、期限和利率范围字段,匹配分数与理由属于评估结果。申请入口目前仅引导准备资料,不向金融机构提交申请。 首页搜索进入内容分包的 `search/search`,支持全部、新闻、融资课堂筛选及对应详情跳转。搜索服务位于 `packages/content/services/search.uts`,当前匹配本地标题、简介、分类和正文;空格分隔的多个关键词需同时命中。预留 `GET /content/search`,参数为 `keyword` 与 `type`(`all` / `news` / `lesson`),返回 `{ items: ContentSearchResult[] }`,每项包含 `id`、`type`、`title`、`summary`、`category`、`meta`、`image`。后端接入时需同步接入新闻和课程详情的数据源,确保返回的 ID 可查询详情。 @@ -80,7 +84,7 @@ $projectPath = (Get-Location).Path | 目录 | 内容 | 页面数 | | --- | --- | --- | | `pages/home` | 首页 | 1 | -| `packages/finance` | 融资入口、评估、确认、分析、报告、匹配、产品、助手、档案 | 9 | +| `packages/finance` | 融资入口、评估、确认、分析、报告、匹配、产品、对比、助手、档案 | 10 | | `packages/account` | 启动引导、登录、个人中心、修改资料、账户安全、修改密码、更换手机号、积分、消息 | 9 | | `packages/content` | 搜索、帮助与反馈、新闻、文章、融资课堂、课程详情 | 6 | @@ -129,3 +133,15 @@ $projectPath = (Get-Location).Path 迁移 `database/migrate_analysis_tasks.py --apply` 已执行,仅增补fa_user_info的task_requests/task_stage/attempt_count/lease_until/dispatched_at及idx_task_dispatch;无新表。执行前0条评估,备份为 `D:/AAdesk/202609/airz-backups/analysis-tasks-20260923-172957-846359/user_info.sql`。回退需先停worker并关闭分析,核对新增业务数据后再用备份恢复,不能直接覆盖后来评估;优先保留兼容字段、回退代码。 验证:先停全部worker,运行 `php tests/analysis_tasks.php --worker-stopped`(29项)和 `php tests/analysis_http.php --worker-stopped`(15项),使用合成数据与假模型;恢复扫描可能发现任意queued测试行,不能只依赖随机Redis队列隔离。任务测试可显式追加`--live`真实调用一次;`tests/deepseek_smoke.php --live`真实调用两个模型。常规正式评估HTTP回归需分析关闭,开启时会SKIP。当前真实个人自填报告及企业H5重试→worker→报告均通过,普通Chromium与Android编译通过;生产、微信内H5、Safari/真机、外部数据及真实产品匹配未验收。 + +## 2026-09-24 匹配读取与页面接入 + +新增GET /api/v1/assessments/:id/matches、GET /api/v1/assessments/:id/matches/:productId、GET /api/v1/products/:id,均需会员Bearer;前两者还校验评估归属及成功状态。匹配使用已存快照,当前可用性另查,不重跑规则或模型。报告→匹配三态列表→解释/详情/条件三栏已接通,金额显示万元;演示产品明确标识,旧报告不补算。产品对比已完成本地接口联调,报告三栏已完成本地联调;单产品AI解释、PDF和行动页仍待开发。 + +后端tests/match_records.php --worker-stopped验证62项接口/快照边界(先停止正式worker,合成账户/假模型自动清理,产品变动回滚);前端Web/Android本地编译通过,H5验证记录见前端docs/开发进度.md第6.13节。无新增表或迁移。 + +## 2026-09-28 融资档案界面 + +“我的融资档案”恢复个人/企业切换、完整度与四组资料卡;默认读取该类型最新提交,支持历史分页选择与只读展开。完整度使用所选成功报告中的冻结结果,旧版/未完成/无记录显示未评定说明;底部可查看同次报告或发起空白新评估。不恢复草稿,不编辑历史资料。后端沿用GET /assessments的type过滤及详情/报告接口,验证范围见docs/开发进度.md第6.14节。 + +2026-09-28:个人中心入口去重,顶部为“开始评估”(选择个人/企业)和“最近报告”(本人最近提交且已完成的报告直达),下方“我的融资档案”管理历史资料。无报告但有任务时可查看进度,无记录时明确提示;不重新提交或调用模型。验证范围见开发进度6.15。 diff --git a/docs/产品匹配规则开发契约.md b/docs/产品匹配规则开发契约.md index ad32149..0b6fed5 100644 --- a/docs/产品匹配规则开发契约.md +++ b/docs/产品匹配规则开发契约.md @@ -1,6 +1,6 @@ # 产品匹配规则开发契约 -版本:1.2。日期:2026-09-24。关联PRODUCT-001、PRODUCT-002、PRODUCT-003。页面消费方式见[04—10方案](原型04-10页面改造与跳转方案.md),完整产品判定/快照/接口语义仍以[数据契约](需求与评估结果数据契约.md)第5节为准。 +版本:1.3。日期:2026-09-24。关联PRODUCT-001、PRODUCT-002、PRODUCT-003。页面消费方式见[04—10方案](原型04-10页面改造与跳转方案.md),完整产品判定/快照/接口语义仍以[数据契约](需求与评估结果数据契约.md)第5节为准。 ## 1. 本轮实现边界 @@ -77,7 +77,7 @@ 64项覆盖金额上下界/一分钱误差/最大值/float拒绝、期限边界/类型、零值与缺失、fail优先但保留unknown、来源门槛、other用途、地区不从文本推断、证据产品隔离、确定性、无评分、身份字段排除、非法规则与列表大小等。 -发布预检、字段编译、目录冻结/排序/理由及正式任务持久化已交付。下一步为匹配分页/详情与公共查询接口,再按04—10方案接页面;PRODUCT-003结构化编辑体验和真实产品录入仍待完成。演示产品联调不解除真实产品资料、外部核验和业务金标准验收的依赖。 +发布预检、字段编译、目录冻结/排序/理由及正式任务持久化已交付。匹配分页/详情与公共详情、03/04/05/06基础现已接通(第8节);下一步为07对比及09报告三栏;PRODUCT-003结构化编辑体验和真实产品录入仍待完成。演示产品联调不解除真实产品资料、外部核验和业务金标准验收的依赖。 ## 6. 产品发布JSON与字段编译(本轮已实现) @@ -193,4 +193,51 @@ compile(product,dictionary)不读当前时间,返回来源、字典、规范 `tests/product_matching.php`纯内存验证目录筛选、冻结摘要、排序、理由引用、来源门槛和配置失败;`tests/product_matching_tasks.php --worker-stopped`使用本地演示目录及随机合成账户/假模型验证正式提交、落库、重试、旧引擎、损坏快照和归属。后者预期6条初始演示参数;运营修改后需要同步业务金标准,不能自动覆盖产品凑测试。测试结束只清理本次账户/评估/会话/队列,6条演示产品按用户要求保留。 -正式接口的matches分页/详情、公共产品查询、单产品AI解释及04—10页面仍待后续开发;当前报告页显示真实规则统计,不能据此宣称整个匹配页面已经验收。 +本阶段之后的匹配只读API及页面进展见第8节;单产品AI解释、公共产品列表、07—10扩展和真实产品验收仍待完成。 + +## 8. 匹配读取与页面消费(2026-09-24已实现) + +### 8.1 接口、鉴权与分页 + +统一前缀`/api/v1`,全部要求`Authorization: Bearer `,响应沿用`{code,msg,time,data}`并禁止缓存。以下GET只读,不创建评估、调用DeepSeek或重新计算匹配;重复读取只可能更新当前可用性。 + +| 方法和路径 | 参数/类型 | 响应data | 关键错误 | +| --- | --- | --- | --- | +| GET /assessments/:id/matches | id正整数字符串;eligibility为eligible/ineligible/unknown,默认eligible;limit查询字符串1—50,默认3;cursor可省略/空字符串 | assessmentId:string、resultVersion:number、matching、items:MatchResult[]、hasMore:boolean、nextCursor:string/null | 401未登录;404非本人/软删除/ID无效;409报告未完成/格式不可用/匹配损坏;422参数/游标错误 | +| GET /assessments/:id/matches/:productId | 两ID均为正整数字符串,无请求体 | assessmentId、resultVersion、matching、item:MatchResult | 404 MATCH_NOT_FOUND表示不在本次快照;其他鉴权/状态错误同列表;不回退公共详情 | +| GET /products/:id | 当前产品ID;无个人评估参数 | 当前公共Product DTO及rulesByApplicantType | 401未登录;404 PRODUCT_NOT_FOUND表示未发布/不在有效期/不存在;409 PRODUCT_CONFIGURATION_INVALID表示发布资料损坏 | + +列表拒绝未知查询字段、数组参数和非法limit。先验证所有者,再解析游标,不泄露他人评估是否有匹配结果。游标使用既有AES-GCM加密方案,绑定userId、assessmentId、resultVersion、冻结结果摘要、eligibility及offset;不是页码,不由前端拼接,换组必须丢弃。结果更改、跨评估、跨组或篡改返回422 `MATCH_CURSOR_INVALID`,客户端从首屏重读。当前产品状态不进入摘要,产品下架不会令分页失效。 + +已匹配但无符合项时`status=completed,candidateCount=0`;未执行时`status=unavailable`、三组统计为null、items空数组,均返回200。v1成功报告返回`LEGACY_INPUT`;既有v2未匹配报告不补算。损坏的匹配列表、重复产品、非法rank/score、统计不一致或错误证据引用返回409 `MATCH_RESULT_UNAVAILABLE`,不以空数组掩盖损坏。 + +未执行匹配的data示例(ID仅为示意): + +```json +{ + "assessmentId": "100", + "resultVersion": 1, + "matching": { + "status": "unavailable", "reasonCode": "LEGACY_INPUT", + "ruleVersion": null, "orderingPolicyVersion": null, "catalogSnapshotId": null, + "candidateCount": null, "ineligibleCount": null, "unknownCount": null + }, + "items": [], "hasMore": false, "nextCursor": null +} +``` + +### 8.2 字段投影、金额与历史 + +MatchResult沿用数据契约第5节:productId、productVersion、eligibility、rank、score、scorePolicyVersion、reasons、positiveReasons、blockingReasons、cautions、evidence、aiExplanation、productSnapshot,新增实时读取的currentAvailability(available/unavailable/unknown)。score无已发布评分策略时为null;rank仅eligible有值,不能渲染成百分比或审批概率。所有理由/evidenceRefs只关联本项证据;接口显式投影字段,不返回analysis_context、姓名、证件号码或未声明内部字段。 + +productSnapshot包含产品ID/版本/名称/机构/类型,amountMinYuan、amountMaxYuan(元的两位小数字符串)、termMinMonths/termMaxMonths(整数月)、annualRateMinPercent/annualRateMaxPercent(百分数字符串)、isDemo、applicantTypes、regions(空数组表示全国)、validFrom/validUntil(日期)、capturedAt、source(publisher/title/reference/checkedOn)、rules、information/condition及创建/更新时间。客户端仅在显示时转万元,例如`"123456.78"`元显示`12.345678 万元`;个人事实金额也按此规则。 + +公共DTO使用当前发布条件rulesByApplicantType按主体分组,不返回eligibility、rank、score、个人理由/事实/证据。repaymentMethod、channel、approvalDuration在两种产品DTO均为null,当前页面显示“未提供”;不得从演示或自由文本猜值。公共详情不等于公共产品列表,GET /products尚未实现。 + +当前可用性通过一次受限ID集合查询读取,避免逐项查询。下架、删除、未到生效日或过期为unavailable;目录查询异常为unknown;历史快照仍可读。不会把产品当前版本/额度拼回历史详情。AI解释目前not_requested,前端明确提示尚未生成,保留完整确定性规则理由;失败时的提示分支已预留,真实生成与计费/重试待后续任务。 + +### 8.3 页面与验收边界 + +报告入口携带assessmentId;列表三组统计与分页来自同次结果;卡片只预览最多三条主要理由,详情保留全部不符/待核实理由,已满足项可展开。无评估编号时选择历史或重新评估;非法编号明确错误,绝不读取最近结果。详情无assessmentId只展示公共资料,有assessmentId始终读取本人快照。页面离开清空结果,响应返回时校验当前Token和请求序号,防止旧账户迟到响应恢复界面。 + +本轮`tests/match_records.php --worker-stopped`62项验证接口身份/方法、三组、游标分页和篡改、快照归属、未知键投影、损坏数据、下架/过期/删除/改价后历史、旧版报告、重复读取无副作用。产品变化只在测试连接事务内发生并回滚,随机账户及队列清理;停止正式worker以避免恢复扫描拾取合成评估。浏览器结果及截图见开发进度6.13。 diff --git a/docs/原型04-10页面改造与跳转方案.md b/docs/原型04-10页面改造与跳转方案.md index 9c870e1..f364a32 100644 --- a/docs/原型04-10页面改造与跳转方案.md +++ b/docs/原型04-10页面改造与跳转方案.md @@ -1,11 +1,11 @@ # 原型04—10页面改造与跳转方案 -版本:1.0。日期:2026-09-24。依据:[原型图](原型.jpg)、[开发文档](开发文档.md)、[数据契约](需求与评估结果数据契约.md)。本轮用户明确要求补齐04—10页面并随后进入产品匹配开发;此前“对比/PDF另行排期”的范围限制,自本方案起由下列正式任务覆盖。 +版本:1.3。日期:2026-09-28。依据:[原型图](原型.jpg)、[开发文档](开发文档.md)、[数据契约](需求与评估结果数据契约.md)。本轮用户明确要求补齐04—10页面并随后进入产品匹配开发;此前“对比/PDF另行排期”的范围限制,自本方案起由下列正式任务覆盖。 ## 1. 范围与落地原则 - 04、05是同一产品匹配详情的不同判定状态,06是同一详情页的产品信息栏;复用现有product/product,不机械新增三个页面。 -- 07产品对比、10下一步行动新增两个融资分包页面。当前pages.json仍注册25页,实施后目标27页;本文中的新增路由尚未注册。 +- 07产品对比、10下一步行动新增两个融资分包页面。compare已注册,当前pages.json共26页;next-step仍待开发注册,最终目标27页。 - 08复用assistant/assistant;09复用report/report并改为“评估概况/匹配结果/改善建议”。03匹配列表作为04—10的必要入口一并改造。 - 保留蓝白主色、卡片、银行标识、正反理由分组和清晰底部行动区。数据必须来自本人本次评估;原型的92%/B+不作为默认值。 - 首版使用既有三态准入:符合已知条件、条件不符、待核实。score=null,不展示匹配百分比;稳定顺序采用productId升序并注明不代表优劣。真实评分、运营优先级另发版本化策略。 @@ -17,12 +17,12 @@ | 原型 | 页面实现 | 页面内容与行为 | 任务 | 当前状态 | | --- | --- | --- | --- | --- | -| 04 单家银行AI解释 | product/product,tab=explanation,eligible状态 | 银行/产品名、条件判定、已满足条件、注意事项、证据来源、AI解释、对比/准备申请 | PRODUCT-004 | 待开发;现有公共详情不含个性化解释 | -| 05 其他银行不推荐解释 | 同一页面,ineligible或unknown状态 | 不符条件与待核实项分组;已满足部分称“已满足条件”;查看资料/询问AI,不建议直接申请 | PRODUCT-004 | 待开发;服务端判定决定状态,不接受URL指定“推荐” | -| 06 产品详情 | product/product,tab=details或conditions | 额度/期限/年化利率范围、还款方式、材料、渠道、适用对象、来源及版本;独立显示当前可用性 | PRODUCT-003、PRODUCT-004 | 基础页面已有;真实资料和快照接口待接 | -| 07 同类产品对比 | 新增compare/compare | 同一评估2—3个产品列式对比,首列指标固定,移动端横向滚动;条件判定、金额/利率/期限、材料、差异依据 | PRODUCT-005 | 新增任务,未开始 | +| 04 单家银行AI解释 | product/product,tab=explanation,eligible状态 | 银行/产品名、条件判定、已满足条件、注意事项、证据来源、AI解释、对比/准备申请 | PRODUCT-004 | 基础已接规则理由/证据/历史快照及对比;单产品AI解释和行动页待开发 | +| 05 其他银行不推荐解释 | 同一页面,ineligible或unknown状态 | 不符条件与待核实项分组;已满足部分称“已满足条件”;查看资料/询问AI,不建议直接申请 | PRODUCT-004 | 已接不符/待核实及证据;AI咨询待接;服务端判定决定状态 | +| 06 产品详情 | product/product,tab=details或conditions | 额度/期限/年化利率范围、还款方式、材料、渠道、适用对象、来源及版本;独立显示当前可用性 | PRODUCT-003、PRODUCT-004 | 已接三栏、公共/历史双模式及当前可用性;真实机构资料待录入 | +| 07 同类产品对比 | 新增compare/compare | 同一评估2—3个产品列式对比,首列指标固定,移动端横向滚动;条件判定、金额/利率/期限、材料、差异依据 | PRODUCT-005 | 基础完成,本地联调通过;真实产品及平台待验收 | | 08 AI助手延伸问答 | assistant/assistant | 本次评估及选定产品上下文卡、按实际判定生成快捷问题、持久会话、分页、重试、返回报告/产品 | CHAT-001—004 | 页面已有;真实上下文问答待接 | -| 09 我的融资报告 | report/report | 三栏内容、资料准备状态、完整度、最多三个候选及查看更多、改善项、PDF下载、重新评估、下一步行动 | REPORT-004、REPORT-005 | 自填报告已有;三栏/产品/PDF待开发 | +| 09 我的融资报告 | report/report | 三栏内容、资料准备状态、完整度、最多三个候选及查看更多、改善项、PDF下载、重新评估、下一步行动 | REPORT-004、REPORT-005 | 三栏/历史候选/改善证据基础已联调;PDF及行动入口待独立任务 | | 10 下一步行动 | 新增next-step/next-step | 准备申请、查看已保存报告、下载PDF、优化资料、咨询AI、回首页;依结果决定可用行动 | REPORT-006 | 新增任务,未开始 | ### 03 匹配列表入口(必要配套) @@ -30,7 +30,7 @@ 1. 入口必须携带assessmentId。无编号时引导选择历史评估或开始评估,不能展示固定产品。 2. 默认eligible最多三条;“查看更多”读取同一冻结结果分页。独立提供“条件不符”“待核实”分组及各组真实计数。 3. matching=unavailable时说明尚未执行,completed且零候选说明已执行但没有候选,failed从任务状态页展示;三者不可共用“完善资料再试”。 -4. 卡片进入产品解释栏;“加入对比”不触发卡片跳转。选择限2—3项,切换评估清空选择,仅在当前页面内存保留。 +4. 卡片进入产品解释栏;“加入对比”不触发卡片跳转。选择限2—3项,选择ID仅在同一账户会话/评估的内存保留,跨页通过productIds传递;切换评估或会话清空内存选择,对比刷新按URL重新鉴权。 5. 没有评分时移除当前score百分比和按score排序;金额和利率使用范围。金额、利率排序若后续提供,只改变展示顺序,不改历史rank。 ### 04/05/06 产品详情的两种模式 @@ -92,7 +92,7 @@ | --- | --- | --- | | 03 | matches/matches?assessmentId=A&group=eligible | A必填;group允许eligible/ineligible/unknown,默认eligible | | 04/05/06 | product/product?assessmentId=A&productId=P&tab=explanation&from=matches | tab为explanation/details/conditions;带A必须读匹配快照;无A默认details;旧id仅作productId兼容,冲突时拒绝 | -| 07 | compare/compare?assessmentId=A&productIds=P1,P2,P3 | A必填、ID去重后仍须2—3项;1项仅进入补选状态;不能跨评估 | +| 07 | compare/compare?assessmentId=A&productIds=P1,P2,P3 | A必填,正式对比2—3项;重复ID直接报错,不静默去重;0/1项仅补选状态;不能跨评估 | | 08 | assistant/assistant?assessmentId=A&productIds=P1,P2&chatId=C&from=compare | A可选;productIds要求A;chatId可选且归属/上下文需一致;从首页进入允许无评估的普通问答 | | 09 | report/report?assessmentId=A&tab=overview | tab为overview/matches/improvements,默认overview;v1能力不足时解释原因 | | 10 | next-step/next-step?assessmentId=A&productId=P§ion=prepare | A必填,P可选;section为actions/prepare,默认actions;无P的prepare引导选择,不猜测产品 | @@ -133,9 +133,9 @@ flowchart TD | --- | --- | --- | | GET /api/v1/assessments/:id/status | 已实现 | 状态/重试边界,不把queued当模型运行 | | GET /api/v1/assessments/:id/report | 已实现自填v1/v2 | 09/10真实来源;产品区块随匹配扩展,不回填旧报告 | -| GET /api/v1/assessments/:id/matches | 计划新增 | 03/09,三态分页、默认limit=3;既有契约字段不变 | -| GET /api/v1/assessments/:id/matches/:productId | 计划新增 | 04/05/06,以及07每次最多读取三项;本人成功记录、本次冻结产品,404不得回退公共数据 | -| GET /api/v1/products/:id | 计划新增 | 06公共模式;不含个人判定及理由,当前资料与历史快照分开 | +| GET /api/v1/assessments/:id/matches | 已实现 | 03/09,三态分页、默认limit=3;既有契约字段不变 | +| GET /api/v1/assessments/:id/matches/:productId | 已实现 | 04/05/06,以及07每次最多读取三项;本人成功记录、本次冻结产品,404不得回退公共数据 | +| GET /api/v1/products/:id | 已实现,会员Bearer | 06公共模式;不含个人判定及理由,当前资料与历史快照分开 | | POST /api/v1/assistant/chats | 计划新增 | contextAssessmentId:string或null、contextProductIds:string[]、requestId;服务端校验同一评估和产品快照,不接客户端报告正文 | | GET/POST /api/v1/assistant/chats/:id/messages | 计划新增 | 08消息分页、提交与幂等;上下文由会话固定 | | GET /api/v1/assessments/:id/report.pdf | 计划新增,REPORT-005 | Bearer鉴权;成功application/pdf,Content-Disposition安全文件名、no-store;401/404/409/503为JSON错误;失败不生成报告或调用模型 | @@ -181,3 +181,27 @@ PDF接口owner校验先于渲染,未完成返回409 REPORT_NOT_READY,格式 - 10没有银行申请提交;优化资料只创建新评估,历史和原报告不变;无草稿恢复。 - 真实产品/渠道未就绪时只使用合成样例验证,不发布示例产品,不把原型中的固定排名与等级当实际结果。 - 普通手机H5、桌面H5、微信内浏览器分别记录;PDF中文分页、长理由、无产品、历史下架、大字号/横向表格需要独立证据。 + +## 8. 2026-09-24 本轮落地与剩余边界 + +03列表与04/05/06三栏已使用正式只读API,报告提供入口;卡片不使用模拟百分比,未知与不符单列。公共模式不展示个人匹配,带assessmentId始终读取本人快照,失败不降级。单产品AI解释暂为not_requested;“查看资料准备说明”只切到条件栏,10页尚未创建。已验证手机/桌面、刷新同一评估、三态详情、公共资料、无ID引导及越权。 + +当前返回会重新读取首屏,不保证保留原滚动位置;group/tab按URL初始参数恢复,栏内切换尚不写URL;登录失效返回登录但尚无原路恢复。from尚不参与导航决策,不接收returnUrl。后续按第3节完善导航体验。07对比、08上下文助手、09三栏/PDF、10行动保持未开始/待开发,不将基础接入等同全04—10验收。 + +## 7. 2026-09-28 原型07实施记录 + +compare/compare已注册,当前26页。列表加入对比阻止卡片冒泡;最多选择3项且保留顺序,可跨三态分组选择;详情带本次选择进入对比。补选/返回匹配带原ID集合,详情返回优先navigateBack,冷启动from=compare返回同次对比,其他来源回本次匹配;from按白名单校验。列表返回首屏及登录后自动原路恢复仍待完善。 + +每列读取本人冻结详情并校验assessmentId/产品ID;列间比较resultVersion、catalogSnapshotId、ruleVersion、orderingPolicyVersion。版本冲突、404和网络失败都不会补用公共资料;单列可重试,不完整结果明确提示。重复或超过3项、非法ID不发请求。0/1项提供补选,移除通过redirectTo替换URL,刷新不恢复已移除的ID。 + +首列在横向滚动区外固定;各行等高,长文本/表头内部纵向滚动,避免错行和长标题遮挡。桌面列宽扩展到可用空间;App保留受支持的rpx尺寸。金额仍精确转万元,缺失范围显示未提供;状态和三类理由直接来自规则结果,无新增评分或AI生成解释。 + +本地验证和剩余边界见[开发进度6.16](开发进度.md)。07基础不代表08上下文助手、09报告三栏/PDF、10行动页完成。 + +## 9. 2026-09-28 原型09三栏实施记录 + +report/report的overview/matches/improvements已接现有报告与匹配只读接口。切栏使用redirectTo更新URL,刷新重新鉴权,读取失败不跳最新评估;概况不提前请求产品。完整度进度条只用已保存百分比;生成时间按客户端当地时间展示,无时间标“未记录”;旧v1不補造需求或评分。没有候选与未执行匹配分别提示。 + +匹配栏默认eligible前3项,改善栏分别读取ineligible/unknown前3项,各有完整列表和产品详情入口,不把摘要当全部结果。关联产品证据直接展示规则理由、字段值和来源;AI改善文字保留报告中的字段/准备依据标签。读取时核对报告与列表的版本、目录标识及三态统计,异常保留其他可用区块并单独重试。 + +“重新评估”选择主体后清空流程内存进入空白表单,历史报告不编辑。PDF、下一步行动及上下文问答按钮待对应能力完成后接入。26页、63任务编号和历史估时不变;REPORT-004整体保持开发中,具体验证/剩余边界见[开发进度6.17](开发进度.md)。 diff --git a/docs/开发文档.md b/docs/开发文档.md index 0a0b9cc..fbc96f1 100644 --- a/docs/开发文档.md +++ b/docs/开发文档.md @@ -1,6 +1,6 @@ # AI 融资平台开发文档 -> 版本:v1.9 · 基线日期:2026-09-22 · 更新日期:2026-09-24 · 状态:目录冻结、规则匹配和正式任务落库已接通;本地已上架6条演示产品,匹配接口及04—10页面待接 +> 版本:v1.14 · 基线日期:2026-09-22 · 更新日期:2026-09-28 · 状态:匹配分页/详情及公共产品详情已接通;03/04/05/06基础接入,07对比与09报告三栏本地联调通过;08助手、09PDF、10行动待开发 > 配套台账:[开发进度](开发进度.md)。本文定义范围、接口和验收口径,台账记录实际执行与证据。 > 文档初始规划后已开始开发;以下更新记录优先于原始基线。除明确列为已实现的部分外,计划接口和增量数据仍待开发。 @@ -132,6 +132,50 @@ eligibility_rules完整格式、字段映射与发布限制见[产品规则契 报告页已从固定“未执行匹配”改为读取后端统计与演示提示。匹配列表/详情API、公共查询、单产品AI解释及04—10整体改造仍未交付,不能跳转现有模拟匹配页当真实结果。465项PHP检查通过,Web/Android编译通过,H5报告统计/刷新/历史导航通过;细节见台账6.12与[规则契约](产品匹配规则开发契约.md)第7节。 +### 0.12 2026-09-24 匹配读取接口与03/04/05/06页面基础接入 + +已新增本人匹配分页、匹配详情、会员可读公共产品详情三个GET接口。读取既有快照,不重跑模型或规则;先验证评估归属与成功状态,再解析绑定账户/评估/结果摘要/分组的加密游标。当前产品下架、过期或删除只改变currentAvailability,历史参数与理由保持不变。公共详情不附个人判定、理由或事实。 + +报告新增“查看本次匹配与依据”;匹配列表展示三态分组、真实统计、默认三项分页、失败重试和演示标记;详情改为匹配解释/产品详情/申请条件三栏,金额及事实以万元展示,取消固定匹配百分比。已满足理由可展开,不符/待核实理由完整保留;AI解释未生成时明确提示。无评估入口引导历史或新评估,不猜测最近记录;越权不回退公共产品。 + +PRODUCT-004记为开发中,不能标整项完成:07对比、08上下文助手、09报告三栏/PDF、10行动页及单产品AI解释仍待开发。当前“查看资料准备说明”仅切换条件栏,不提交申请;返回重新鉴权读取列表首屏,精确滚动位置恢复与登录后原路返回待后续完善。真实产品资料/人工金标准及微信内H5、真机验收仍未完成。具体接口见规则契约第8节,验证见进度6.13。 + +### 0.13 2026-09-28 融资档案恢复原卡片布局 + +按用户确认,融资档案恢复个人/企业切换、完整度卡片和四组资料入口,新增历史记录选择;保留无草稿、提交后只读及多次评估分别存档的规则。默认展示所选类型的最新记录,可分页切换较早记录;显式assessmentId刷新后重新鉴权查看原记录,错误不回退到最新记录。数据分组展开查看,底部进入同次报告/分析状态或空白新评估。 + +完整度仅取本人成功报告的冻结percent,不从当前字段重算;无记录、旧版未计算、分析中/失败、未评定及读取错误使用“—”和对应说明,不能显示成0%。各组“已记录”仅指存在已提交字段,不等同该组完整或信用核验。资料与授权保持未开放。金额仍精确显示万元。代码位于archive/archive.uvue和services/records.uts,复用已有后端type过滤与读取API,本轮无后端业务修改、迁移或新增表。 + +### 0.14 2026-09-28 个人中心入口去重 + +个人中心顶部“评估记录/查看”改为图标+“开始评估”,先选择个人/企业,再进入对应融资入口;“评估报告/查看”改为图标+“最近报告”。菜单“我的融资档案”继续作为个人/企业历史、已提交资料和对应报告的管理入口。 + +最近报告通过已有GET /assessments?status=succeeded&limit=1查询本人所有类型中最近提交且已成功的记录,携带assessmentId直接打开报告;不被较新的未完成评估遮挡。无成功记录才查询status=processing&limit=1,提示“报告生成中”并可查看同次进度;两者都无则提示暂无报告,可发起评估,失败记录仍在融资档案查看。请求异常提示重试,不假装没有报告。查找不创建评估、不重跑分析、不缓存个人报告。 + +账户分包新增latest-report.uts服务,仅依赖共享请求,不跨包导入融资服务。未登录先登录,查找中防重复,离页/Token变化后丢弃迟到响应和弹窗回调。沿用既有edit-file/file-text图标,与积分中心统一样式,无新增页面或后端接口。 + +### 0.15 2026-09-28 原型07产品对比基础完成 + +PRODUCT-005新增compare页面,注册页数由25变为26。匹配列表与本次产品详情可选择最多3项,支持跨分组选择;正式对比需2—3项,0/1项仅作补选状态。URL按顺序保存assessmentId和productIds,移除会替换URL,刷新重新鉴权。选择ID只存在按账户会话/评估隔离的内存中,不新增草稿、持久个人缓存或数据表。 + +每列复用GET /assessments/:id/matches/:productId,最多三项并行;校验响应assessmentId、产品ID、resultVersion、catalogSnapshotId、ruleVersion和orderingPolicyVersion。错误列独立重试,版本不一致的列不展示参数,完整对比必须所有列读取成功。越权/不存在不回退公共产品,不重跑规则或模型;401清理显示并转登录,离页/会话变化丢弃迟到响应。 + +指标包括需求覆盖证据、额度、期限、年化利率、主体/地区、三类条件理由、准入规则、材料、还款方式、渠道、有效期与来源。历史参数和当前可用性分开显示,金额精确转万元,缺值显示未提供;未结构化的还款方式/渠道不猜测。首列固定,手机横向滚动,桌面列宽展开;长内容在单元格内滚动。当前仅提供详情/选择入口,不提供申请提交。 + +状态为待验收:本地编译及合成账户真实读取接口验证完成,真实机构产品签收、微信内H5/Safari与真机仍待验收。详细证据见开发进度6.16。下一步为REPORT-004报告三栏,PDF、上下文助手及行动页独立开发。 + +### 0.16 2026-09-28 原型09报告三栏基础完成 + +REPORT-004页面子项完成本地联调:report/report改为评估概况、匹配结果、改善建议。URL中的tab限定overview/matches/improvements,默认overview;切栏替换当前路由,刷新恢复栏目并重新鉴权读取本人报告,不创建评估或重跑模型。无前页时返回融资档案;产品与匹配入口始终携带当前assessmentId。 + +概况保留冻结需求、准备状态、真实完整度进度条、生成时间、自填来源、AI摘要/优势、风险与免责声明;事实及逐项完整度可展开。v1明确提示当时未采集/未计算,百分比显示“—”;v2未评定与实际0%分开,不用当前规则补算历史。 + +匹配栏从报告读取三态统计,复用GET /assessments/:id/matches?eligibility=eligible&limit=3展示最多3项候选,提供完整列表及不符/待核实入口。改善栏组合缺失/待核实字段、准备依据、已保存AI建议及不符/待核实分组各前3项产品证据,关联产品详情并标明摘要边界;没有依据不补造建议。不符条件仅解释现状,不承诺改善后获批。 + +报告与列表校验assessmentId、resultVersion、catalogSnapshotId、ruleVersion、orderingPolicyVersion及三态统计;不同版本不拼接。候选和两个建议分组分别加载/重试,局部失败不隐藏已保存报告,也不显示为零候选。按可见栏目请求,概况不请求产品;离页/Token变化丢弃旧响应,401清空内容并回登录。修复匹配列表返回时的卸载挂载冲突:先关闭内容渲染,再清空资料。 + +继续无草稿。“重新评估”选择个人/企业并清空当前流程内存,进入空白填写页;只有再次正式提交才创建新assessmentId。页面仍26个,未改后端业务、未迁移、未调用收费模型。PDF(REPORT-005)、下一步行动(REPORT-006)与上下文助手按独立任务推进,未展示虚假可用按钮。REPORT-004整体仍开发中,真实产品/外部渠道与微信内H5、真机尚未验收;证据见开发进度6.17。 + ## 1. 项目目标与现状 ### 1.1 已确认范围 @@ -146,7 +190,7 @@ eligibility_rules完整格式、字段映射与发布限制见[产品规则契 | 项目 | 当前事实 | 规划用途 | | --- | --- | --- | -| 前端 | uni-app x / Vue 3 / UTS,25 页,无独立 npm 构建入口 | 沿用 HBuilderX 和现有分包,不重新搭建前端 | +| 前端 | uni-app x / Vue 3 / UTS,26 页,无独立 npm 构建入口 | 沿用 HBuilderX 和现有分包,不重新搭建前端 | | 后端 | FastAdmin / ThinkPHP 5.0.28 / PHP 7.4 | 复用认证、后台、模型与队列依赖,新增业务 API/服务 | | 数据库 | MySQL 8.0.44,删除空 Token 表后实际 25 张 InnoDB 表 | 已核对本地库并更新结构快照;恢复点见进度第0节 | | 当前前端模式 | 开发环境已连接本地 v1 API,模拟请求开关关闭 | 密码账户流程已接入,内容与产品匹配等页面仍有原型数据,不按页面数计算完成度 | @@ -173,9 +217,9 @@ eligibility_rules完整格式、字段映射与发布限制见[产品规则契 ## 2. 页面与功能覆盖 -路由以 [pages.json](../pages.json) 为准。以下覆盖现有全部 25 页;反馈表单、历史列表等优先补入所属现有页面,若交互确需新增页面,在所属分包注册并同步台账。 +路由以 [pages.json](../pages.json) 为准。以下覆盖现有全部 26 页;反馈表单、历史列表等优先补入所属现有页面,若交互确需新增页面,在所属分包注册并同步台账。 -原型04—10新增路由仅属计划,尚未注册:`packages/finance/compare/compare`(PRODUCT-005)与`packages/finance/next-step/next-step`(REPORT-006);目标共27页。04/05/06均复用product/product,报告PDF不另加页面。参数与返回矩阵见专项页面方案第3节。 +原型07路由`packages/finance/compare/compare`(PRODUCT-005)已注册,现共26页;`packages/finance/next-step/next-step`(REPORT-006)待开发注册,目标共27页。04/05/06均复用product/product,报告PDF不另加页面。参数与返回矩阵见专项页面方案第3节。 | 序号 | 页面路由 | 功能职责 | 主要任务 | | --- | --- | --- | --- | @@ -204,6 +248,7 @@ eligibility_rules完整格式、字段映射与发布限制见[产品规则契 | 23 | packages/content/article/article | 新闻、协议和说明内容 | CONTENT-001、CONTENT-002、FILE-003 | | 24 | packages/content/classroom/classroom | 课程分类和推荐 | CONTENT-002 | | 25 | packages/content/lesson/lesson | 图文章节、学习状态 | CONTENT-001、CONTENT-003 | +| 26 | packages/finance/compare/compare | 同次评估2—3产品冻结结果对比、补选及独立重试 | PRODUCT-005 | ## 3. 数据与架构约定 @@ -311,7 +356,7 @@ eligibility_rules完整格式、字段映射与发布限制见[产品规则契 - **前端:** 统一请求与账户专用请求,处理认证、业务错误、重复点击、加载/空态、401回跳;首页聚合公共内容与登录后状态。 - **后端:** 新路由显式绑定控制器和方法;解析JSON并逐字段校验,不能对结构化输入机械套用HTML转义;兼容旧Token入口但新客户端只发送Bearer。 - **数据:** 以userId建立账户缓存命名空间;旧草稿键清理,不提供导入;未提交内容只在当前流程内存中传递。 -- **接口:** GET /home、GET /dictionaries,以及所有接口共用协议。 具体方法和字段见第5章;均按计划新增/改造处理。 +- **接口:** GET /home、GET /dictionaries,以及所有接口共用协议。 具体方法和字段见第5章;匹配分页/详情、公共产品详情已实现,公共产品列表仍计划新增。 - **异常与边界:** 生产缺API地址直接报配置错误;禁止静默降级成demo。断网不删除服务端事实。 | 任务编号 | 任务与交付范围 | 优先级 | 前置任务/外部条件 | 验收条件 | 人日 | @@ -347,7 +392,7 @@ eligibility_rules完整格式、字段映射与发布限制见[产品规则契 - **前端:** 按微信内/普通浏览器/桌面浏览器展示受支持登录方式,处理跳出返回、取消和短信回退。 - **后端:** 服务端code/credential交换,state和回调防重放;已有账户绑定需账户证明,禁止按昵称自动合并。 - **数据:** 独立第三方身份关系以provider/appId/subject唯一;unionid仅在取得并验证适用范围后辅助绑定。 -- **接口:** GET /auth/wechat/authorize、GET /auth/wechat/callback、POST /auth/oneclick、POST /auth/bind-phone。 具体方法和字段见第5章;均按计划新增/改造处理。 +- **接口:** GET /auth/wechat/authorize、GET /auth/wechat/callback、POST /auth/oneclick、POST /auth/bind-phone。 具体方法和字段见第5章;匹配分页/详情、公共产品详情已实现,公共产品列表仍计划新增。 - **异常与边界:** 渠道授权失败不创建半登录会话;不支持的网络或浏览器回到短信;只有支持矩阵中场景通过才记完成。 | 任务编号 | 任务与交付范围 | 优先级 | 前置任务/外部条件 | 验收条件 | 人日 | @@ -365,7 +410,7 @@ eligibility_rules完整格式、字段映射与发布限制见[产品规则契 - **前端:** 资料类型、上传进度/失败重试、已上传列表、协议全文、授权状态和撤销入口。 - **后端:** 私有文件服务、归属/MIME/内容/大小校验、鉴权下载、协议版本和授权事件;评估提交时由服务端形成快照。 - **数据:** 复用附件表与评估JSON;协议修订和独立授权事件保留历史;文件保留/删除期限在DEC-PRIVACY定稿。 -- **接口:** POST /documents、GET/DELETE /documents/:id、GET /agreements/:code、GET/POST /consents、POST /consents/:id/revoke。 具体方法和字段见第5章;均按计划新增/改造处理。 +- **接口:** POST /documents、GET/DELETE /documents/:id、GET /agreements/:code、GET/POST /consents、POST /consents/:id/revoke。 具体方法和字段见第5章;匹配分页/详情、公共产品详情已实现,公共产品列表仍计划新增。 - **异常与边界:** 临时路径、他人附件、无效授权全部拒绝;可选资料不强迫提交;撤销后停止新查询,历史留存按已确认规则处理。 | 任务编号 | 任务与交付范围 | 优先级 | 前置任务/外部条件 | 验收条件 | 人日 | @@ -401,7 +446,7 @@ eligibility_rules完整格式、字段映射与发布限制见[产品规则契 - **前端:** 展示实际可用查询种类、授权状态、查询中/成功/失败/拒绝/撤销,不把选择框当查询完成。 - **后端:** 服务商适配、签名、异步状态、回调验签/去重、对账、费用状态;原始证件标识只在必要服务端流程使用。 - **数据:** 查询记录与评估/用户/授权绑定;必要结果加密或私有存储;输入冻结后只追加查询事件。 -- **接口:** GET/POST /assessments/:id/data-queries、GET /data-queries/:id、POST /callbacks/data/:provider。 具体方法和字段见第5章;均按计划新增/改造处理。 +- **接口:** GET/POST /assessments/:id/data-queries、GET /data-queries/:id、POST /callbacks/data/:provider。 具体方法和字段见第5章;匹配分页/详情、公共产品详情已实现,公共产品列表仍计划新增。 - **异常与边界:** 超时收费不明先查渠道状态;未取得或已撤销授权不新调用;缺失数据标未知,不能伪装征信正常。 | 任务编号 | 任务与交付范围 | 优先级 | 前置任务/外部条件 | 验收条件 | 人日 | @@ -419,7 +464,7 @@ eligibility_rules完整格式、字段映射与发布限制见[产品规则契 - **前端:** 拆Product与MatchResult;显示范围而非单点额度/利率;保持历史快照并提示当前产品状态。 - **后端:** 确定性规则、白名单操作符、类型校验、版本化排序;只推荐状态/有效期/地区及硬条件满足的产品。 - **数据:** 产品独立字段+regions/eligibility_rules;个性化分数和理由放match_result,快照含产品版本。 -- **接口:** GET /products、GET /products/:id、GET /assessments/:id/matches;后台沿用产品CRUD并补运营校验。 具体方法和字段见第5章;均按计划新增/改造处理。 +- **接口:** GET /products、GET /products/:id、GET /assessments/:id/matches;后台沿用产品CRUD并补运营校验。 具体方法和字段见第5章;匹配分页/详情、公共产品详情已实现,公共产品列表仍计划新增。 - **异常与边界:** 暂无匹配是合法完成结果;规则未知不执行任意表达式;产品下架不删除历史快照。 | 任务编号 | 任务与交付范围 | 优先级 | 前置任务/外部条件 | 验收条件 | 人日 | @@ -438,7 +483,7 @@ eligibility_rules完整格式、字段映射与发布限制见[产品规则契 - **前端:** 轮询真实状态、刷新恢复、失败重试;渲染数据驱动维度、来源时间和版本;查看历史。 - **后端:** DeepSeek适配、结构校验、任务抢占/超时/漏投补偿、输入最小化、用量记录;在事务中同时落报告、匹配和成功状态。 - **数据:** result_version/rule_version/model与产品快照分别记录;模型输出不能覆盖金额、硬准入或数据来源。 -- **接口:** GET /assessments/:id/status、GET /assessments/:id/report;内部worker调用complete/fail,不公开完成接口。 具体方法和字段见第5章;均按计划新增/改造处理。 +- **接口:** GET /assessments/:id/status、GET /assessments/:id/report;内部worker调用complete/fail,不公开完成接口。 具体方法和字段见第5章;匹配分页/详情、公共产品详情已实现,公共产品列表仍计划新增。 - **异常与边界:** 模型输出错误/配额不足/队列故障进入可追踪失败;重试不允许旧taskId回写;供应商超时可能计费,不承诺外部零重复收费。 | 任务编号 | 任务与交付范围 | 优先级 | 前置任务/外部条件 | 验收条件 | 人日 | @@ -458,7 +503,7 @@ eligibility_rules完整格式、字段映射与发布限制见[产品规则契 - **前端:** 创建/切换/恢复会话、分页历史、发送状态、异步回复轮询与重试;保留requestId。 - **后端:** DeepSeek对话、上下文裁剪、所有者校验、消息和本地额度幂等;用户输入不可触发任意管理操作。 - **数据:** 普通scene的assessment_id保持NULL;context_assessment_id只引用本人可访问评估;工具结果记录来源。 -- **接口:** POST/GET /assistant/chats、GET/POST /assistant/chats/:id/messages、GET /assistant/messages/:id、POST /assistant/messages/:id/retry。 具体方法和字段见第5章;均按计划新增/改造处理。 +- **接口:** POST/GET /assistant/chats、GET/POST /assistant/chats/:id/messages、GET /assistant/messages/:id、POST /assistant/messages/:id/retry。 具体方法和字段见第5章;匹配分页/详情、公共产品详情已实现,公共产品列表仍计划新增。 - **异常与边界:** 失败消息保留错误和可重试状态;切换账号不带上旧会话;渠道取消不能保证停止已发生计费,一期不要求生成中强制取消。 | 任务编号 | 任务与交付范围 | 优先级 | 前置任务/外部条件 | 验收条件 | 人日 | @@ -476,7 +521,7 @@ eligibility_rules完整格式、字段映射与发布限制见[产品规则契 - **前端:** 新闻、文章、课堂、课程页接真实分页/详情;处理404/下架,搜索竞态和章节完成状态。 - **后端:** 发布/下架、富文本清洗、分类与首页推荐、搜索和FAQ;稳定章节ID与进度幂等。 - **数据:** 复用fa_acticle/fa_finance;章节数据结构化;用户章节完成关系独立存储;不引入视频和付费课程。 -- **接口:** /content/articles、/content/lessons、/content/lessons/:id/progress、/content/search、/help/faqs。 具体方法和字段见第5章;均按计划新增/改造处理。 +- **接口:** /content/articles、/content/lessons、/content/lessons/:id/progress、/content/search、/help/faqs。 具体方法和字段见第5章;匹配分页/详情、公共产品详情已实现,公共产品列表仍计划新增。 - **异常与边界:** 未发布内容不可访问;新增/重排章节不沿用索引作为进度ID;搜索慢响应不得覆盖新查询。 | 任务编号 | 任务与交付范围 | 优先级 | 前置任务/外部条件 | 验收条件 | 人日 | @@ -494,7 +539,7 @@ eligibility_rules完整格式、字段映射与发布限制见[产品规则契 - **前端:** 分类分页、未读数、已读/全部已读、与正确评估记录跳转。 - **后端:** 在业务事务完成后可靠生成通知,事件唯一键去重;读取和更新均限定当前用户。 - **数据:** 复用fa_user_message,补事件唯一键;is_read和read_at同步;全部已读采用最大ID水位。 -- **接口:** GET /messages、GET /messages/unread-count、POST /messages/:id/read、POST /messages/read-all。 具体方法和字段见第5章;均按计划新增/改造处理。 +- **接口:** GET /messages、GET /messages/unread-count、POST /messages/:id/read、POST /messages/read-all。 具体方法和字段见第5章;匹配分页/详情、公共产品详情已实现,公共产品列表仍计划新增。 - **异常与边界:** 队列重试不重复通知;全部已读期间新增消息仍未读;本期站内消息不等同App推送。 | 任务编号 | 任务与交付范围 | 优先级 | 前置任务/外部条件 | 验收条件 | 人日 | @@ -512,7 +557,7 @@ eligibility_rules完整格式、字段映射与发布限制见[产品规则契 - **前端:** 真实积分、流水、服务端签到状态、邀请码和任务进度,显示已发布规则版本。 - **后端:** 积分事务和并发锁、日期与任务幂等、防自邀、可信事件奖励;错误需向业务层传播。 - **数据:** 复用score及score_log,明确business_type/business_id;邀请码唯一、受邀用户一次绑定。 -- **接口:** GET /points、GET /points/ledger、POST /points/check-in、GET /points/tasks、GET /invitations、POST /invitations/bind。 具体方法和字段见第5章;均按计划新增/改造处理。 +- **接口:** GET /points、GET /points/ledger、POST /points/check-in、GET /points/tasks、GET /invitations、POST /invitations/bind。 具体方法和字段见第5章;匹配分页/详情、公共产品详情已实现,公共产品列表仍计划新增。 - **异常与边界:** 默认保留每日签到10分作为待业务确认建议;其他奖励金额不编造。复制文案或客户端上报完成不直接发积分。 | 任务编号 | 任务与交付范围 | 优先级 | 前置任务/外部条件 | 验收条件 | 人日 | @@ -530,7 +575,7 @@ eligibility_rules完整格式、字段映射与发布限制见[产品规则契 - **前端:** 反馈表单/附件/记录/回复;客服在线/排队/离线状态及失败回退。 - **后端:** 反馈归属与后台处理、服务端访客签名、客服会话关联;外部系统消息遵循渠道身份规则。 - **数据:** 复用fa_feedback补处理结果;不把反馈图片当公共文件;客服历史优先由供应商维护。 -- **接口:** POST/GET /feedback、GET /feedback/:id、POST /support/session。 具体方法和字段见第5章;均按计划新增/改造处理。 +- **接口:** POST/GET /feedback、GET /feedback/:id、POST /support/session。 具体方法和字段见第5章;匹配分页/详情、公共产品详情已实现,公共产品列表仍计划新增。 - **异常与边界:** 无坐席能留言且后台有责任人;SDK失败提示可使用站内反馈;退出切换账号清理客服身份。 | 任务编号 | 任务与交付范围 | 优先级 | 前置任务/外部条件 | 验收条件 | 人日 | @@ -548,7 +593,7 @@ eligibility_rules完整格式、字段映射与发布限制见[产品规则契 - **前端:** FastAdmin后台增加任务、模型额度、查询状态和运营入口,非移动端新增主导航。 - **后端:** 角色授权、敏感字段掩码、任务/查询定位、受控重试和审计;不允许手改已提交评估输入及正式结果。 - **数据:** 复用管理员fa_auth_*;保留被删除会员组/规则表的删除状态;不恢复历史无关业务表。 -- **接口:** 沿用后台路由与权限体系;不将管理查询、complete/fail或密钥管理暴露到用户API。 具体方法和字段见第5章;均按计划新增/改造处理。 +- **接口:** 沿用后台路由与权限体系;不将管理查询、complete/fail或密钥管理暴露到用户API。 具体方法和字段见第5章;匹配分页/详情、公共产品详情已实现,公共产品列表仍计划新增。 - **异常与边界:** 权限不足不可越权;重试需要有效状态和当前taskId;日志不得输出证件或模型密钥。 | 任务编号 | 任务与交付范围 | 优先级 | 前置任务/外部条件 | 验收条件 | 人日 | @@ -566,7 +611,7 @@ eligibility_rules完整格式、字段映射与发布限制见[产品规则契 - **前端:** 普通桌面/手机/微信内H5、上传/键盘/回跳/弱网、深链接和版本更新回归。 - **后端:** 全链路、并发、权限、真实渠道、迁移和恢复;部署队列守护及错误/费用监控。 - **数据:** 使用脱敏测试数据与独立环境;新增迁移先预检/备份/演练;禁止用旧备份覆盖新业务数据。 -- **接口:** 对本章所有一期API及渠道执行自动与手动验收,记录版本、环境和证据。 具体方法和字段见第5章;均按计划新增/改造处理。 +- **接口:** 对本章所有一期API及渠道执行自动与手动验收,记录版本、环境和证据。 具体方法和字段见第5章;匹配分页/详情、公共产品详情已实现,公共产品列表仍计划新增。 - **异常与边界:** 未完成任一必做能力不能标首发完成;生产配置不允许模拟Token、固定报告和占位协议。 | 任务编号 | 任务与交付范围 | 优先级 | 前置任务/外部条件 | 验收条件 | 人日 | @@ -720,10 +765,10 @@ eligibility_rules完整格式、字段映射与发布限制见[产品规则契 | POST /callbacks/data/:provider | 渠道验签 | 供应商原始格式 | 供应商要求的ACK | 原始体验签、防重放、单号映射、幂等;不适用用户Bearer | | GET /assessments/:id/report | 所有者 | 无 | Report(v1/v2自填版本) | 已实现;未成功409 REPORT_NOT_READY,不存在/越权404,旧结构409 REPORT_FORMAT_UNAVAILABLE;Cache-Control:no-store | | GET /assessments/:id/report.pdf | 所有者 | 无 | application/pdf流;错误为JSON | 计划新增REPORT-005;401/404/409沿用报告语义,503 REPORT_EXPORT_UNAVAILABLE;no-store、安全文件名,不重跑模型 | -| GET /assessments/:id/matches | 所有者 | eligibility默认eligible、limit默认3上限50、cursor可空 | assessmentId、resultVersion、matching、items、hasMore、nextCursor | 计划新增,三态分组、冻结快照与游标绑定,见专项契约第5.3节;当前尚未实现 | -| GET /assessments/:id/matches/:productId | 所有者 | 无 | 该次匹配结果、理由、证据和快照 | 计划新增;只读本次已评估项;越权/快照无该产品404;不从当前公共产品拼历史 | +| GET /assessments/:id/matches | 所有者 | eligibility默认eligible、limit默认3上限50、cursor可空 | assessmentId、resultVersion、matching、items、hasMore、nextCursor | 已实现;三态分组、冻结快照与游标绑定,见专项契约第5.3节和规则契约第8节 | +| GET /assessments/:id/matches/:productId | 所有者 | 无 | 该次匹配结果、理由、证据和快照 | 已实现;只读本次已评估项;越权/快照无该产品404;不从当前公共产品拼历史 | | GET /products | 公开 | type/regionCode可选、page/pageSize | Product分页 | 仅当前有效上架产品;不返回用户分数 | -| GET /products/:id | 公开 | 无 | Product | 下架/过期返回不可用语义;历史快照从本人匹配接口读取 | +| GET /products/:id | 会员Bearer | 无 | 公共产品DTO | 已实现;公共指不含个人结果,并非匿名;下架/过期404;历史快照从本人匹配接口读取 | 当前已实现自填分析支线(提交→数据库queued→Redis→DeepSeek→报告);以下授权查询和产品规则主流程仍待实现:提交后检查授权 → 获取选定的外部结果 → 冻结查询引用 → 规则匹配 → DeepSeek解释 → 原子保存正式结果。未选择可选外部授权时使用自填资料并标记来源;已选择查询但失败时是否允许降级到自填,需要DEC-QUERY形成明确规则。该规则未定稿前,相应错误按失败处理,不静默忽略。 diff --git a/docs/开发进度.md b/docs/开发进度.md index cfc19fd..812cedd 100644 --- a/docs/开发进度.md +++ b/docs/开发进度.md @@ -1,6 +1,6 @@ # AI 融资平台开发进度 -基线日期:2026-09-22。文档版本:1.9。最新规划及实施见0.11节与6.12节;此前章节保留阶段记录。技术方案和接口说明见[开发文档](./开发文档.md)。本台账现有63项任务,编号与开发文档保持一致。 +基线日期:2026-09-22。文档版本:1.14。最新规划及实施见0.16节与6.17节;此前章节保留阶段记录。技术方案和接口说明见[开发文档](./开发文档.md)。本台账现有63项任务,编号与开发文档保持一致。 ## 0. 2026-09-22 首轮实施更新(优先于初始基线) @@ -131,6 +131,50 @@ PRODUCT-003进入开发中:新增ProductPublication及Product模型发布校 报告适配器已读取后端匹配统计和演示提示,后端465项检查通过,Web/Android编译及H5报告→刷新→历史导航通过。匹配列表/详情接口、04—10页面及真实业务验收仍待实施,未将整模块改为已完成。下一步先接只读匹配接口,再改造产品详情和匹配页面。 +### 0.12 2026-09-24 匹配读取接口与03/04/05/06页面基础接入 + +已新增本人匹配分页、匹配详情、会员可读公共产品详情三个GET接口。读取既有快照,不重跑模型或规则;先验证评估归属与成功状态,再解析绑定账户/评估/结果摘要/分组的加密游标。当前产品下架、过期或删除只改变currentAvailability,历史参数与理由保持不变。公共详情不附个人判定、理由或事实。 + +报告新增“查看本次匹配与依据”;匹配列表展示三态分组、真实统计、默认三项分页、失败重试和演示标记;详情改为匹配解释/产品详情/申请条件三栏,金额及事实以万元展示,取消固定匹配百分比。已满足理由可展开,不符/待核实理由完整保留;AI解释未生成时明确提示。无评估入口引导历史或新评估,不猜测最近记录;越权不回退公共产品。 + +PRODUCT-004记为开发中,不能标整项完成:07对比、08上下文助手、09报告三栏/PDF、10行动页及单产品AI解释仍待开发。当前“查看资料准备说明”仅切换条件栏,不提交申请;返回重新鉴权读取列表首屏,精确滚动位置恢复与登录后原路返回待后续完善。真实产品资料/人工金标准及微信内H5、真机验收仍未完成。具体接口见规则契约第8节,验证见进度6.13。 + +### 0.13 2026-09-28 融资档案恢复原卡片布局 + +按用户确认,融资档案恢复个人/企业切换、完整度卡片和四组资料入口,新增历史记录选择;保留无草稿、提交后只读及多次评估分别存档的规则。默认展示所选类型的最新记录,可分页切换较早记录;显式assessmentId刷新后重新鉴权查看原记录,错误不回退到最新记录。数据分组展开查看,底部进入同次报告/分析状态或空白新评估。 + +完整度仅取本人成功报告的冻结percent,不从当前字段重算;无记录、旧版未计算、分析中/失败、未评定及读取错误使用“—”和对应说明,不能显示成0%。各组“已记录”仅指存在已提交字段,不等同该组完整或信用核验。资料与授权保持未开放。金额仍精确显示万元。代码位于archive/archive.uvue和services/records.uts,复用已有后端type过滤与读取API,本轮无后端业务修改、迁移或新增表。 + +### 0.14 2026-09-28 个人中心入口去重 + +个人中心顶部“评估记录/查看”改为图标+“开始评估”,先选择个人/企业,再进入对应融资入口;“评估报告/查看”改为图标+“最近报告”。菜单“我的融资档案”继续作为个人/企业历史、已提交资料和对应报告的管理入口。 + +最近报告通过已有GET /assessments?status=succeeded&limit=1查询本人所有类型中最近提交且已成功的记录,携带assessmentId直接打开报告;不被较新的未完成评估遮挡。无成功记录才查询status=processing&limit=1,提示“报告生成中”并可查看同次进度;两者都无则提示暂无报告,可发起评估,失败记录仍在融资档案查看。请求异常提示重试,不假装没有报告。查找不创建评估、不重跑分析、不缓存个人报告。 + +账户分包新增latest-report.uts服务,仅依赖共享请求,不跨包导入融资服务。未登录先登录,查找中防重复,离页/Token变化后丢弃迟到响应和弹窗回调。沿用既有edit-file/file-text图标,与积分中心统一样式,无新增页面或后端接口。 + +### 0.15 2026-09-28 原型07产品对比基础完成 + +PRODUCT-005新增compare页面,注册页数由25变为26。匹配列表与本次产品详情可选择最多3项,支持跨分组选择;正式对比需2—3项,0/1项仅作补选状态。URL按顺序保存assessmentId和productIds,移除会替换URL,刷新重新鉴权。选择ID只存在按账户会话/评估隔离的内存中,不新增草稿、持久个人缓存或数据表。 + +每列复用GET /assessments/:id/matches/:productId,最多三项并行;校验响应assessmentId、产品ID、resultVersion、catalogSnapshotId、ruleVersion和orderingPolicyVersion。错误列独立重试,版本不一致的列不展示参数,完整对比必须所有列读取成功。越权/不存在不回退公共产品,不重跑规则或模型;401清理显示并转登录,离页/会话变化丢弃迟到响应。 + +指标包括需求覆盖证据、额度、期限、年化利率、主体/地区、三类条件理由、准入规则、材料、还款方式、渠道、有效期与来源。历史参数和当前可用性分开显示,金额精确转万元,缺值显示未提供;未结构化的还款方式/渠道不猜测。首列固定,手机横向滚动,桌面列宽展开;长内容在单元格内滚动。当前仅提供详情/选择入口,不提供申请提交。 + +状态为待验收:本地编译及合成账户真实读取接口验证完成,真实机构产品签收、微信内H5/Safari与真机仍待验收。详细证据见开发进度6.16。下一步为REPORT-004报告三栏,PDF、上下文助手及行动页独立开发。 + +### 0.16 2026-09-28 原型09报告三栏基础完成 + +REPORT-004页面子项完成本地联调:report/report改为评估概况、匹配结果、改善建议。URL中的tab限定overview/matches/improvements,默认overview;切栏替换当前路由,刷新恢复栏目并重新鉴权读取本人报告,不创建评估或重跑模型。无前页时返回融资档案;产品与匹配入口始终携带当前assessmentId。 + +概况保留冻结需求、准备状态、真实完整度进度条、生成时间、自填来源、AI摘要/优势、风险与免责声明;事实及逐项完整度可展开。v1明确提示当时未采集/未计算,百分比显示“—”;v2未评定与实际0%分开,不用当前规则补算历史。 + +匹配栏从报告读取三态统计,复用GET /assessments/:id/matches?eligibility=eligible&limit=3展示最多3项候选,提供完整列表及不符/待核实入口。改善栏组合缺失/待核实字段、准备依据、已保存AI建议及不符/待核实分组各前3项产品证据,关联产品详情并标明摘要边界;没有依据不补造建议。不符条件仅解释现状,不承诺改善后获批。 + +报告与列表校验assessmentId、resultVersion、catalogSnapshotId、ruleVersion、orderingPolicyVersion及三态统计;不同版本不拼接。候选和两个建议分组分别加载/重试,局部失败不隐藏已保存报告,也不显示为零候选。按可见栏目请求,概况不请求产品;离页/Token变化丢弃旧响应,401清空内容并回登录。修复匹配列表返回时的卸载挂载冲突:先关闭内容渲染,再清空资料。 + +继续无草稿。“重新评估”选择个人/企业并清空当前流程内存,进入空白填写页;只有再次正式提交才创建新assessmentId。页面仍26个,未改后端业务、未迁移、未调用收费模型。PDF(REPORT-005)、下一步行动(REPORT-006)与上下文助手按独立任务推进,未展示虚假可用按钮。REPORT-004整体仍开发中,真实产品/外部渠道与微信内H5、真机尚未验收;证据见开发进度6.17。 + ## 1. 项目状态与维护规则 当前已具备25个页面原型、部分本机交互、优化后的数据库结构和评估内部生命周期服务;密码账户基础已完成本地前后端联调,短信、评估、报告、匹配等完整业务仍待完成。AI供应商确定为DeepSeek,模型已确定为deepseek-v4-pro-0813和deepseek-v4-flash-0731,两个模型权限及自填报告已真实验证,商业预算、余额及生产容量仍待核验;其他服务商待定。 @@ -158,7 +202,7 @@ P0 表示核心流程、安全、首发外部能力或发布门槛;P1 表示 - 初始工程量基线为 **69–117 人日**(取消草稿及本轮实现后的实际剩余量待重估),按每周 5 个工作日约 **14–24 周**;不等于承诺上线日期,不含供应商开通、资质、审核与商务等待。 - 每类第三方暂按 1 个服务商估算;能力不足、增加渠道或调整业务范围时,修改受影响任务估算并在更新日志说明。 -- 不用页面数、SQL 表数、代码行数计算业务完成率。文档完成也不计为下面 60 个业务任务完成。 +- 不用页面数、SQL 表数、代码行数计算业务完成率。文档完成也不计为下面 63 个业务任务完成。 - 每次开发结束同步状态、实际证据、日期、依赖变化与下一步;保留原任务编号。任务跨模块时不得重复统计工时。 - 证据优先包含代码文件或版本、脱敏接口记录、测试报告、截图/录屏、第三方请求编号、验收人;不写 Token、验证码、密钥或证件原文。 - 接口与范围调整先同步开发文档,再同步本台账。新增需求单独变更评审,不能通过扩大既有任务标题掩盖新增成本。 @@ -175,7 +219,7 @@ P0 表示核心流程、安全、首发外部能力或发布门槛;P1 表示 | FILE 资料授权 | 选图本机预览、授权勾选与占位说明 | documents/consent_data 仅预留 | 通用公共上传不能代替私有证件服务 | 私有上传、下载、授权事件待开发 | 私有存储待定 | 未完成 | | ASSESS 评估档案 | 个人/企业填写流程已有;未提交不持久化 | 一次评估一条记录及状态/幂等字段已有 | Assessment 内部服务已有 | 正式提交、状态、历史API已接通;不提供草稿接口 | 依赖上传/授权/数据渠道 | 内部历史测试已有,真实闭环未完成 | | DATA 外部查询 | 查询选项为意向或占位 | 查询事件持久化待增量设计 | 渠道、回调和对账待开发 | 待开发 | 数据渠道待定 | 未完成 | -| PRODUCT 产品匹配 | 产品/匹配页使用模拟数据 | 范围字段、规则 JSON、版本/有效期已有 | 产品后台基础已有,规则执行器未完成 | 公共查询与评估匹配读取待开发 | 真实产品及规则待确认 | 结构/版本历史测试已有,业务匹配未验收 | +| PRODUCT 产品匹配 | 03/04/05/06已接正式快照及公共详情;本地产品为演示资料 | 范围/规则/版本及快照已有 | 发布预检、规则/冻结/排序/持久化已实现 | 匹配分页/详情、公共详情已接;公共列表待开发 | 真实产品及金标准待确认 | 本地接口和H5验证通过;整模块未验收 | | REPORT AI 报告 | 已接真实自填报告,移除固定评分/雷达 | 报告快照、调用用量及任务元数据已接入 | Redis任务、补投/租约、重试已实现 | 自填报告支线已联调 | 指定Pro/Flash均真实可用 | 完整产品/查询范围未完成 | | CHAT AI 助手 | 模拟对话 | 会话/消息/使用量字段已有 | 调用、上下文、配额待开发 | 待开发 | 依赖 DeepSeek | 未完成 | | CONTENT 内容课堂 | 新闻/课程/搜索/FAQ 本地数据,学习进度本机 | 文章/融资课堂表已有,课程进度待增量设计 | 内容后台基础需补齐 | 真实列表/详情/进度/搜索待开发 | 内容运营素材待准备 | 未完成 | @@ -200,9 +244,9 @@ P0 表示核心流程、安全、首发外部能力或发布门槛;P1 表示 | 编译与页面金额检查 | 上一轮 Web 与 Android 编译通过;手机 390×844、桌面 1280×900 浏览器检查金额输入、超限、确认、模拟提交和产品显示 | [前端 README](../README.md)、[页面注册](../pages.json);前序任务会话验证记录 | 不是短信/AI/上传真实联调;无 iOS/Xcode 或 Android 真机上线结论;独立历史日志路径未留档,后续回归须新增证据 | | 迁移与恢复基础 | 本机迁移及仓库外备份已完成 | [数据库迁移说明](D:/AAdesk/202609/airz/database/README.md) | 旧迁移限定业务空表,不得直接用于已有业务数据环境;未完成通用部署和恢复演练 | -### 2.2 全部 25 个页面的验收归属 +### 2.2 全部 26 个页面的验收归属 -页面路径以[pages.json](../pages.json)为准。下表记录页面真实业务的主要收口任务;其内部依赖仍需全部完成。当前 25 页均未通过一期真实业务验收。 +页面路径以[pages.json](../pages.json)为准。下表记录页面真实业务的主要收口任务;其内部依赖仍需全部完成。当前 26 页均未通过一期真实业务验收。 | 页面 | 注册路径 | 主要任务 | 当前状态 | | --- | --- | --- | --- | @@ -211,9 +255,10 @@ P0 表示核心流程、安全、首发外部能力或发布门槛;P1 表示 | 评估填写 | packages/finance/assessment/assessment | ASSESS-004、FILE-004、DATA-004 | 当前流程内存填写/本机图片预览 | | 评估确认 | packages/finance/confirm/confirm | ASSESS-004 | 元/万元转换、正式提交及网络重试幂等 | | 分析中 | packages/finance/analyzing/analyzing | REPORT-004 | 按assessmentId轮询状态、失败重试、成功后打开真实报告 | -| 评估报告 | packages/finance/report/report | REPORT-004 | 按assessmentId读取真实自填报告、金额万元,无固定评分 | -| 匹配结果 | packages/finance/matches/matches | PRODUCT-004、REPORT-004 | 模拟匹配 | -| 产品详情 | packages/finance/product/product | PRODUCT-004 | 模拟产品/申请准备 | +| 评估报告 | packages/finance/report/report | REPORT-004 | 三栏已接本人冻结报告、匹配候选与改善证据;真实业务及平台验收未完成 | +| 匹配结果 | packages/finance/matches/matches | PRODUCT-004、REPORT-004 | 已接本人冻结结果、三态/分页及对比选择;演示产品联调 | +| 产品详情 | packages/finance/product/product | PRODUCT-004 | 已接历史理由/证据和参数、对比入口;单产品AI解释待开发 | +| 产品对比 | packages/finance/compare/compare | PRODUCT-005 | 2—3项冻结对比本地联调通过,真实产品与平台待验收 | | AI 助手 | packages/finance/assistant/assistant | CHAT-004 | 模拟对话 | | 融资档案 | packages/finance/archive/archive | ASSESS-004、REPORT-004 | 本人历史分页、脱敏只读详情、刷新恢复 | | 启动引导 | packages/account/index/index | BASE-003、AUTH-002 | 原型/本机引导 | @@ -379,16 +424,16 @@ DEC-DEMAND已确认并发布,需求录入/提交/历史子范围已实现; | PRODUCT-001 | 规则字典与评分口径 | 确定准入三态、来源要求、单产品需求覆盖、用途规则、证据结构和版本化排序;评分未发布时null。 | P0 | ASSESS-001、DEC-MATCH | 1.5–2 | 开发中 | | PRODUCT-002 | 准入与排序执行器 | 执行上架/有效期/对象/地区及需求硬规则;保存pass/fail/unknown证据,生成eligibility和稳定rank。 | P0 | PRODUCT-001 | 2–3 | 开发中 | | PRODUCT-003 | 产品后台与公共查询 | 补规则条件编辑、来源/用途依据、发布预检、版本与公共详情;录入真实产品,缺依据阻止发布。 | P0 | PRODUCT-001、BASE-002、DEC-PRODUCT | 1.5–2 | 开发中 | -| PRODUCT-004 | 匹配页面与快照 | 按assessmentId展示三态分组、最多三个候选及分页;结果详情展示依据/注意项/AI解释,保留产品快照与申请准备。 | P0 | PRODUCT-002、PRODUCT-003、ASSESS-004、REPORT-003 | 1–2 | 未开始 | -| PRODUCT-005 | 同类产品对比 | 新增compare页,同评估2—3项冻结产品、状态/范围/条件对照、补选与返回、刷新恢复。 | P1 | PRODUCT-004 | 1.5–2.5 | 未开始 | +| PRODUCT-004 | 匹配页面与快照 | 按assessmentId展示三态分组、最多三个候选及分页;结果详情展示依据/注意项/AI解释,保留产品快照与申请准备。 | P0 | PRODUCT-002、PRODUCT-003、ASSESS-004、REPORT-003 | 1–2 | 开发中 | +| PRODUCT-005 | 同类产品对比 | 新增compare页,同评估2—3项冻结产品、状态/范围/条件对照、补选与返回、刷新恢复。 | P1 | PRODUCT-004 | 1.5–2.5 | 待验收 | | 任务编号 | 负责人 | 验收条件 | 证据 | 更新时间 | | --- | --- | --- | --- | --- | | PRODUCT-001 | 全栈开发(待指定) | 发布规则与人工样例可审阅;非法字段/操作符阻止发布;fail优先于unknown,匹配指标不作为审批概率。 | 首版字段/操作符/来源门槛已形成规则契约;64项内存测试;真实产品发布依据与业务样例待验收 | 2026-09-24 | | PRODUCT-002 | 全栈开发(待指定) | 同输入/快照结果稳定;未知不当满足,配置错误不归咎用户;需求不拆额、不改期;未运行与零候选区分。 | 目录冻结/排序/理由已接正式worker;51项内存和19项任务测试通过;真实产品金标准、规模/生产验收仍待完成 | 2026-09-24 | -| PRODUCT-003 | 全栈开发(待指定) | 产品用途/地区/额度/期限有真实依据;规则可配置并启停,版本变化留依据;公共详情无个人分数。 | 发布预检及模型保存已实现;本地6条演示产品已授权上架,重复录入不覆盖;真实资料/发布验收、结构化编辑和公共查询待完成 | 2026-09-24 | -| PRODUCT-004 | 全栈开发(待指定) | 每条解释可追溯且不凑三正三反;当前产品变化不改历史;跨账户拒绝;unavailable/零候选/failed不混淆。 | 未验收;无真实业务验收证据;本次v2契约已补,新增业务尚未开始,原测试不覆盖v2 | 2026-09-23 | -| PRODUCT-005 | 全栈开发(待指定) | 不跨评估/混用现价;缺值不同于0;手机横向表格可读,单项失败明确;不重跑模型。 | 04—10方案第2—4节已定义,尚无运行页面证据 | 2026-09-24 | +| PRODUCT-003 | 全栈开发(待指定) | 产品用途/地区/额度/期限有真实依据;规则可配置并启停,版本变化留依据;公共详情无个人分数。 | 发布预检及模型保存已实现;本地6条演示产品已授权上架,重复录入不覆盖;公共详情已接;真实资料/发布验收、结构化编辑和公共列表待完成 | 2026-09-24 | +| PRODUCT-004 | 全栈开发(待指定) | 每条解释可追溯且不凑三正三反;当前产品变化不改历史;跨账户拒绝;unavailable/零候选/failed不混淆。 | 匹配分页/详情和03/04/05/06基础已接;62项HTTP/快照检查及H5验证见6.13;单产品AI解释、真实业务验收待完成 | 2026-09-24 | +| PRODUCT-005 | 全栈开发(待指定) | 不跨评估/混用现价;缺值不同于0;手机横向表格可读,单项失败明确;不重跑模型。 | compare页面及6.16本地编译/真实读取与异常注入证据;真实机构产品和微信内H5/真机待验收 | 2026-09-28 | 剩余门槛:DEC-MATCH开发口径已采用既有契约,真实产品规则/金标准业务签收待完成;PRODUCT-003真实发布仍依赖DEC-PRODUCT。纯规则、后台模型预检及字段编译已实施,未解除整模块验收依赖。 @@ -410,7 +455,7 @@ DEC-DEMAND已确认并发布,需求录入/提交/历史子范围已实现; | REPORT-001 | 全栈开发(待指定) | 模型可配置;密钥不下发;失败与使用量可追踪;数值事实不被模型改写。 | 两个指定模型真实连通;v2修正后Flash3例/Pro1例格式及语义检查通过;合成输入隐私过滤,调用tokens已记录;商业预算/生产稳定性待验收 | 2026-09-24 | | REPORT-002 | 全栈开发(待指定) | 漏投/中断可恢复或明确失败;旧任务不可回写;输入/目标结果/策略/产品快照重试不隐式变化。 | 54项报告检查覆盖目标版本冻结、超时重试快照不变、旧v2输入仍v1、损坏快照先于模型失败;产品快照/生产守护未完成,旧29项任务证据保留 | 2026-09-24 | | REPORT-003 | 全栈开发(待指定) | 完整度按发布字段集复算,等级有依据且非审批;null rank/score按状态验证;格式错误不成功,产品/规则更新不改旧报告。 | v2自填支线已实现;本轮58项回归及Flash3例/Pro1例真实样例通过;真实产品/外部查询、生产与业务人工签收待完成 | 2026-09-24 | -| REPORT-004 | 全栈开发(待指定) | 个人/企业真实链路按版本展示;未发布无分或等级,100%不等于授信;旧报告不重算;新复评新assessmentId。 | Chromium手机/桌面个人79%、企业100%、档案→报告→刷新、未发布无分和旧v1不重算通过;Web/Android编译通过;微信内/Safari/真机待验收 | 2026-09-24 | +| REPORT-004 | 全栈开发(待指定) | 个人/企业真实链路按版本展示;未发布无分或等级,100%不等于授信;旧报告不重算;新复评新assessmentId。 | 6.17三栏/局部重试/旧版/权限及生命周期验证;真实产品与外部渠道仍待验收 | 2026-09-28 | | REPORT-005 | 全栈开发(待指定) | 本人成功报告可导出;金额/理由与历史一致;不重跑模型/泄露身份;中文分页可读,JSON错误不保存成PDF。 | 04—10方案定义导出接口与失败/隐私边界;PDF引擎及中文字体待选型锁定,未生成样本 | 2026-09-24 | | REPORT-006 | 全栈开发(待指定) | 根据判定及当前可用性开放行动;无银行申请提交;新评估不改历史、无草稿;上下文和返回正确。 | 04—10方案已定义全部按钮去向和条件,尚未注册路由/实施页面 | 2026-09-24 | @@ -878,3 +923,97 @@ Browser插件/browser技能未提供,按frontend-testing-debugging及Playwrigh 未验收:新提示的真实DeepSeek语义、真实产品与渠道、微信内H5和真机、匹配列表/详情接口及04—10页面。下一步:按评估ID提供冻结匹配分页/详情,校验归属和游标,再接产品详情三栏及匹配结果页面。 收尾验证:正式worker已恢复(本次PID34404,错误日志为空);原1会员、2条成功评估/会话、25表保留,测试账户及队列清理。6条演示产品保留,种子文件预检再次通过。63项任务编号/依赖/工时一致且无环、25条现有路由、文档链接、UTF-8无BOM和diff检查通过。 + +### 6.13 2026-09-24 匹配读取API与03/04/05/06页面验证 + +本轮完成范围:本人匹配分页/详情、会员公共产品详情,报告入口、匹配三态列表、产品解释/资料/条件三栏。任务PRODUCT-004保持开发中,PRODUCT-003公共详情部分有实现证据,其他工时和依赖未改。 + +| 检查 | 环境/结果 | 覆盖及限制 | +| --- | --- | --- | +| match_records.php --worker-stopped | PHP7.4/MySQL/Redis,62项通过 | HTTP鉴权/所有权/GET限制、分页三态/游标、旧报告、损坏快照、重复GET无副作用;下架/过期/删除/改价的历史稳定性用事务回滚验证;假模型不调用供应商 | +| Web编译 | HBuilderX5.26,成功 | 开发服务初始存在layout.uts既有类型提示,不是本轮新增;浏览器业务运行正常 | +| Android编译 | HBuilderX5.26,成功 | 修复分组对象Any?类型后Kotlin/class通过;未做真机测试 | +| H5主链路 | Chromium,390×844、1280×900,通过 | 登录→报告→本次匹配→详情三栏→展开理由→返回→不符/待核实;刷新同一评估、万元精度0.800001/12.345678;无框架错误遮罩 | +| H5边界 | 同浏览器,通过 | 公共模式无个人解释、无ID引导及新评估、越权404不回退、查看更多无重复、网络失败后重新加载成功 | + +浏览器使用Playwright CLI,原因:本会话没有Browser插件及browser技能(Browser plugin not available)。分页UI测试仅将真实API请求limit改为1,使现有两个候选产生第二页,不伪造响应。网络失败为一次主动abort,用于验证重试;控制台出现预期net::ERR_FAILED,正常主链路无运行错误/警告。测试工具脚本曾因运行环境没有URL构造器失败,改用字符串替换后复验通过,未因此修改业务代码。 + +截图:[手机匹配]()、[手机产品]()、[待核实原因]()、[桌面产品]()。临时截图不是正式发布验收档案。 + +剩余:单产品AI解释尚未生成;真实产品与人工样例签收、微信内H5/Safari/真机未验证;返回列表首屏/原路登录恢复待完善。下一步按既定页面方案推进PRODUCT-005同评估2—3产品对比,再接REPORT-004报告三栏;PDF、行动页和上下文助手独立验收。本轮无迁移/新增表,无收费模型调用。 + +收尾:合成账户/评估/会话/队列和隔离HTTP服务已清理;原1会员、2条成功评估/会话、25张表保留,syntheticUsers=0。正式分析worker已恢复(本轮PID21560),错误日志为空;6条本地演示产品继续保留。63项任务编号/依赖/工时一致且无环,25条路由、文档链接、UTF-8无BOM及git diff --check通过。 + +### 6.14 2026-09-28 融资档案布局恢复与只读交互验证 + +对应ASSESS-004、REPORT-004的档案展示子项,原任务编号/依赖/估时不变,不将页面改造计为一期整体验收。保留截图中的分段切换、蓝色完整度卡片、四组图标/资料卡及蓝色主按钮;与旧图的有意差异为新增历史选择、只读展开、查看报告/新评估双入口,移除草稿保存与继续编辑。旧assessmentId深链仍可读取本人记录。 + +| 检查 | 结果与证据 | 范围限制 | +| --- | --- | --- | +| Web、Android、微信小程序编译 | HBuilderX5.26通过;Android将不支持的baseline对齐修正为flex-end | Web保留layout.uts既有类型提示;小程序未进行微信开发者工具/真机验证,Android未真机运行 | +| 主流程 | Chromium,http://localhost:5175/,390×844与1280×900通过;有页面标题、非空内容、无框架遮罩 | Browser plugin not available,沿用已有Playwright CLI,无安装新依赖 | +| 真实接口链路 | 随机合成账户+2条个人/1条企业记录+假模型报告:类型过滤、历史选择/刷新、分组只读展开、金额12.345678/0.800001/100.000001万元、0经营月数、同次报告入口、新评估入口通过 | 真实本地PHP/MySQL/Redis读接口,假模型不调用供应商;非真实用户资料 | +| 分页与边界 | 历史请求limit临时转为1验证第二页、无重复;他人评估161返回真实404且无最新记录回退 | 仅测试请求改limit,业务默认20;不改数据库已有历史 | +| UI异常分支 | 浏览器响应拦截验证空记录、v1未计算、processing/failed不请求报告、报告断网后可看资料并重试、401清除页面资料并转登录 | 这些分支为受控响应/网络故障注入,不代表供应商或生产环境验收 | +| 控制台 | 正常操作无业务错误/警告;故障注入对应预期网络错误、越权404及会话401 | 初次浏览器导航受启动时序影响中断、重复登录脚本在已登录页等待超时;回到正确页面后重新验证通过 | + +[手机档案]()、[企业档案]()、[空档案]()、[桌面档案]()。截图为临时验证证据。 + +尚未验证:微信内置浏览器、小程序与Android/iOS真机;账户切换并发采用代码中的Token/请求序号/离页清理防护,本轮通过401清理验证但未做完整双账户并发压力测试。后续计划仍为PRODUCT-005产品对比及REPORT-004报告三栏,不恢复草稿功能。 + +收尾记录:本轮合成账户、3条评估/会话和测试队列已清理,隔离HTTP服务已停止;保留原1会员、2条成功评估/会话、25张表,syntheticUsers=0。正式分析worker已恢复(PID44028),错误日志为空。最终Android编译通过,UTF-8无BOM、文档63项任务/依赖/估时一致及diff检查通过。 + +### 6.15 2026-09-28 个人中心入口去重验证 + +对应ASSESS-004/REPORT-004的入口体验,任务编号/依赖/工时不变。修改profile/profile.uvue、新增账户分包services/latest-report.uts;未改后端、未执行迁移或数据库写入、未调用模型。 + +- HBuilderX5.26:Web、Android、微信小程序本地编译通过;微信/Android/iOS真机尚未验证。 +- Chromium,http://localhost:5175/,390×844及1280×900:页面标题/内容正确,三个图标入口对齐,无框架遮罩。使用已有Playwright CLI,原因Browser plugin not available。 +- 浏览器使用拦截的合成登录/账户/评估/报告响应验证入口行为,没有使用真实账户或写库:未登录跳登录;个人/企业选择进入对应entry;最近成功报告直接打开指定ID;无成功时提示处理中并进入该任务;全空/无可用报告提示后可取消;融资档案仍进入历史;网络失败后再次点击成功。 +- 检查成功路径只请求status=succeeded&limit=1,空成功路径再请求processing;通过延迟响应验证连续点击只发一次请求、离页后响应不抢跳;401回到登录。真实服务已有status筛选/ID倒序/limit实现,本轮未增加后端逻辑,也未将合成响应验证视为生产联调。 +- 正常路径无业务控制台错误/警告;故障注入的net::ERR_FAILED与401为预期。最终文本UTF-8无BOM、diff检查及文档63项任务一致性检查通过。 + +截图:[手机个人中心]()、[桌面个人中心]()。测试脚本及截图在临时目录,不引入生产模拟数据。浏览器测试会话完成后关闭。 + +### 6.16 2026-09-28 原型07产品对比验证 + +PRODUCT-005基础实现,状态待验收;原依赖PRODUCT-004、1.5–2.5人日估算及63个任务编号不变。新增compare页面和选择服务,修改匹配列表/详情入口、冻结详情元数据适配及pages.json。26个注册页面(融资分包10页),不新增后端接口、业务表或数据库迁移。 + +| 检查 | 结果与证据 | 验证边界 | +| --- | --- | --- | +| 编译 | HBuilderX5.26的Web、Android、微信小程序本地编译通过 | Web已有layout.uts类型提示保留;Android不支持百分比min-width,已将该桌面样式限制为非App;非真机运行结论 | +| 主流程 | Chromium,http://localhost:5173/;390×844及1280×900。列表跨分组加入2/3项→对比→详情→返回→补选;上限提示、3→2→1→0移除、单产品详情加入、URL刷新均通过 | 使用已有Playwright CLI,Browser plugin not available,无新安装依赖 | +| 真实接口 | 临时随机合成账户与假模型完成的个人评估,经真实PHP/MySQL/Redis读取;符合22、不符23、待核实24各列正确,产品顺序保持,金额12.345678/0.800001万元精度保留 | 6条演示产品,无真实机构资料验收,不调用收费模型,不更改原2条成功评估 | +| 权限与参数 | 非法评估ID、重复/超3/带前导零/空段产品ID拦截;无效产品参数不发详情请求;他人评估161和不在本次目录的产品25真实404,无公共产品回退 | 不将错误结果当作完整对比,不自动改查最新评估 | +| 故障注入 | 单列断网仅重试该列;assessmentId错配与catalogSnapshotId不同拒绝;缺失额度/期限显示未提供;下架保留历史且标识当前不可用;401跳登录 | 以上变体通过浏览器拦截,不改数据库或供应商服务;最多3个详情请求并行 | +| 生命周期 | 延迟列在离页后明确释放并收到响应,页面保持在匹配列表,不恢复旧列;刷新重新鉴权 | 尚未做双真实账户并发压力测试;选择内存按账户/Token/评估隔离 | +| 视觉及控制台 | 页面标题/内容非空、无框架遮罩;首列横向不移动,产品区可横滚,桌面列宽展开。正常流程无业务控制台错误/警告 | 故障注入的ERR_FAILED、404、401为预期;长单元格内部上下滚动,微信内H5/Safari及真机待测 | + +脚本和截图位于临时目录airz-compare-20260928:flow.js、interactions.js、edges.js、late.js;其中异常深链测试通过完整导航/刷新独立载入各参数。初次滚动检测误选嵌套单元格滚动容器,修正选择器后验证通过;不把脚本定位失败计为业务通过。图示:[手机对比]()、[手机横向滚动]()、[桌面对比]()、[失败列]()。 + +下一步:REPORT-004报告三栏;单产品AI解释、PDF、上下文助手和行动页仍分别开发与验收。真实产品/人工金标准及微信内H5、真机尚未验收,不将PRODUCT-005记为整体已完成。 + +收尾:合成账户、评估/会话、会话Token及隔离队列已清理;测试HTTP服务与浏览器会话已关闭。正式分析worker已恢复(本轮PID28124),错误日志为空;原1会员、2条成功评估/会话、25张表保留,syntheticUsers=0。63项任务编号/依赖/工时一致且无环,当前26路由、相对链接、UTF-8无BOM与diff检查通过;无提交、推送或发布。 + +### 6.17 2026-09-28 原型09报告三栏验证 + +REPORT-004三栏页面子项完成本地联调,整体仍开发中。改动report/report.uvue、records.uts报告适配、matches.uts列表元数据及matches/matches.uvue离页渲染守卫;保留26个页面、63项任务、原依赖与估时。后端业务未修改,无迁移、无新增表、无收费模型调用。 + +| 检查 | 结果与证据 | 范围限制 | +| --- | --- | --- | +| 编译 | HBuilderX5.26的Web、Android、微信小程序本地编译通过 | Web既有layout.uts类型提示保留;没有微信开发者工具、Android/iOS真机或发行验证 | +| 主流程与视觉 | Chromium,http://localhost:5173/,390×844与1280×900;标题、非空页面、无框架遮罩;三栏切换/刷新、展开事实/逐项完整度、产品详情返回、分组入口、历史入口通过 | Browser plugin not available,沿用现有Playwright CLI;无新依赖安装,未做微信内H5/Safari验收 | +| 真实接口数据 | 随机合成账号,2份个人/1份企业评估,假模型报告;读取真实PHP/MySQL/Redis,金额12.345678、0.800001、100.000001万元与经营0个月保留;企业100%及个人缺失字段正确 | 不使用真实用户资料,演示产品不代表真实机构资料验收;原2条历史报告未修改 | +| 请求与跳转 | 概况不查询匹配;候选limit=3,改善分组各limit=3;流程登录后只有GET,无提交/重试分析写请求;重新评估选择主体进入空白表单 | 未恢复草稿或复制旧报告资料;PDF/下一步行动/上下文助手独立排期 | +| 旧版与空状态 | 浏览器受控响应验证v1三栏兼容且不请求匹配,未发布完整度显示“—”,真实0%不当缺失;未匹配与已匹配零候选区分,不补假卡片 | v1/策略变体为合成响应,没有重写已有报告;不据此认定所有生产历史格式均已覆盖 | +| 独立失败与边界 | 候选失败只重试候选,建议某组失败保留另组;目录版本不一致不显示卡片;下架保留历史参数;AI建议显示关联字段;不支持报告版本提示错误,报告断网可重试 | 异常为浏览器故障注入,非真实供应商故障;三态统计/冻结版本校验使用真实DTO | +| 权限与生命周期 | 无效ID/tab不请求API;他人评估161真实404不回退;401清理并回登录;候选延迟响应在切到概况后释放,不能恢复旧卡片 | 本轮未做双真实账户并发压力;Token/请求序号/可见性守卫保留 | +| 返回回归 | 定位Matches卸载时重建空状态引发的attachVmProps挂载错误;增加pageActive守卫,先关闭渲染再清理;重新加载后连续3次列表→返回→切栏无控制台错误/警告,延迟测试同样无错误 | 热更新期间旧页面实例仍可能保留旧生命周期;最终证据来自完整重新载入后的脚本 | + +脚本和截图位于临时目录airz-report-tabs-20260928:flow.js、edges.js、navigation.js、late.js、capture.js。最初API路由拦截未命中,改用**/api/v1/**并确认隔离HTTP服务收到请求后重跑通过。正常流程最终无业务控制台错误,故障注入ERR_FAILED/404/401为预期;未将前期失败掩盖为通过。 + +截图:[概况手机]()、[匹配手机]()、[改善手机]()、[产品依据]()、[概况桌面]()、[匹配桌面]()。 + +后续建议按页面方案推进08上下文AI助手(CHAT模块),再衔接10行动页与09 PDF独立任务。真实产品/人工金标准、外部渠道、微信内H5及真机均仍待验收,不标整体验收完成。 + +收尾:随机合成账户、3条评估/会话、Token和隔离队列已清理,测试HTTP服务和浏览器会话已关闭;原1会员、2条成功评估/会话、25张表保持,syntheticUsers=0。本轮开始时未发现运行中的analysis:work,清理后已启动正式worker(PID33796),错误日志为空。文本编码、diff检查、63任务一致性与26条路由检查通过;未提交、推送或发布。 diff --git a/docs/需求与评估结果数据契约.md b/docs/需求与评估结果数据契约.md index 2c924b4..d41eb7b 100644 --- a/docs/需求与评估结果数据契约.md +++ b/docs/需求与评估结果数据契约.md @@ -1,6 +1,6 @@ # 融资需求与评估结果数据契约 -版本:v1.5(需求/报告v2、目录冻结及规则匹配落库已实施;匹配读接口与页面待接)。日期:2026-09-24。配套:[开发文档](开发文档.md)、[开发进度](开发进度.md)。 +版本:v1.6(匹配读接口及03/04/05/06基础已接,单产品AI解释与07—10扩展待开发)。日期:2026-09-24。配套:[开发文档](开发文档.md)、[开发进度](开发进度.md)。 本文补充融资需求字段、资料完整度与准备等级、产品匹配解释三个范围,作为后续前后端、数据迁移及验收的共同依据。依据为[开发说明书](开发说明书.docx)第2—5节及[原型图](原型.jpg)第02—05、09屏,并遵循用户后续确认的无草稿、H5优先、数据库存元及复用评估/报告表的约定。 @@ -202,11 +202,11 @@ unknown不是建议申请;ineligible不是永久拒绝。展示应为“本次 | 方法/路径(/api/v1前缀) | 实施状态 | data与行为 | | --- | --- | --- | | GET /assessments/:id/report | 已支持v1/v2自填支线 | 本人成功记录;resultVersion辨识格式,未完成409、越权/不存在404;no-store | -| GET /assessments/:id/matches | 计划新增 | 参数eligibility默认eligible,可选ineligible/unknown;limit默认3、1—50,cursor可空。data={assessmentId,resultVersion,matching,items,hasMore,nextCursor};unavailable返回200+空数组及明确状态,不冒充零候选 | -| GET /assessments/:id/matches/:productId | 计划新增 | 只返回本次已评估的产品结果/全部理由/快照;未在快照内或越权404。不能拿公共当前产品临时拼出旧评估结论 | -| GET /products/:id | 计划新增 | 公开当前产品资料;无用户等级、理由或匹配分;与个人化结果分离 | +| GET /assessments/:id/matches | 已实现 | 参数eligibility默认eligible,可选ineligible/unknown;limit默认3、1—50,cursor可空。data={assessmentId,resultVersion,matching,items,hasMore,nextCursor};unavailable返回200+空数组及明确状态,不冒充零候选 | +| GET /assessments/:id/matches/:productId | 已实现 | 只返回本次已评估的产品结果/全部理由/快照;未在快照内或越权404。不能拿公共当前产品临时拼出旧评估结论 | +| GET /products/:id | 已实现,会员Bearer鉴权 | 当前公共产品资料(非匿名);无用户等级、理由或匹配分;与个人化结果分离 | -matches只读成功评估,未成功409;参数错误422。服务端先鉴权归属,再解析游标;游标绑定assessmentId、resultVersion、冻结结果摘要、eligibility和偏移量,非法/不匹配游标422。快照不可变,分页不能混用当前产品列表。v1成功报告也可返回matching.status=unavailable/reasonCode=LEGACY_INPUT;不回填历史match_result。 +本轮请求/响应示例、错误码及公共DTO范围见[规则契约第8节](产品匹配规则开发契约.md)。matches只读成功评估,未成功409;参数错误422。服务端先鉴权归属,再解析游标;游标绑定assessmentId、resultVersion、冻结结果摘要、eligibility和偏移量,非法/不匹配游标422。快照不可变,分页不能混用当前产品列表。v1成功报告也可返回matching.status=unavailable/reasonCode=LEGACY_INPUT;不回填历史match_result。 当前产品是否下架单列 `currentAvailability=available|unavailable|unknown`,由读取时受限查询得到,不写回productSnapshot、不改历史rank;当前不可用或查询失败时,申请准备页说明状态,不能继续显示“立即申请”。本项目仍只做资料引导,不向银行提交申请。 diff --git a/packages/account/profile/profile.uvue b/packages/account/profile/profile.uvue index b706c35..b451dcd 100644 --- a/packages/account/profile/profile.uvue +++ b/packages/account/profile/profile.uvue @@ -4,7 +4,7 @@ {{ displayName }}{{ loggedIn ? maskedPhone : '登录后管理您的融资信息' }} - 查看评估记录查看评估报告积分中心 + 开始评估{{ reportLoading ? '正在查找…' : '最近报告' }}积分中心 {{ item.name }}{{ item.note }} AI融资 · 让融资更简单 @@ -23,6 +23,7 @@ import AppIcon from '@/components/AppIcon.uvue' import { getSession } from '@/services/api.uts' import { logoutAccount } from '@/packages/account/services/auth.uts' + import { findLatestReportEntry } from '@/packages/account/services/latest-report.uts' import { showAgreementNotice } from '@/services/assessment.uts' import { DEFAULT_AVATAR, getAccountProfile, fetchAccountProfile, maskPhone } from '@/packages/account/services/account.uts' const { contentStyle, pageStyle } = usePageLayout() @@ -32,7 +33,10 @@ const displayName = ref('登录 / 注册') const maskedPhone = ref('') const avatar = ref('') + const reportLoading = ref(false) + let profileVisible = false; let reportRequest = 0 onShow(() => { + profileVisible = true const session = getSession() loggedIn.value = session != null const profile = getAccountProfile() @@ -43,7 +47,45 @@ }).catch(() => { /* 读取失败保留已归属当前账户的缓存,不显示其他账户资料。 */ }) }) const go = (url: string) => { uni.navigateTo({ url }) } - const openReport = () => { go('/packages/finance/archive/archive') } + const startAssessment = () => { + const session = getSession() + if (session == null) { go('/packages/account/login/login'); return } + const token = session.getString('token') ?? '' + uni.showActionSheet({ itemList: ['个人评估', '企业评估'], success: (result) => { + if (profileVisible && getSession()?.getString('token') == token) go('/packages/finance/entry/entry?type=' + (result.tapIndex == 0 ? 'personal' : 'enterprise')) + } }) + } + const openReport = async () => { + if (reportLoading.value) return + const session = getSession() + if (session == null) { go('/packages/account/login/login'); return } + const token = session.getString('token') ?? ''; const request = ++reportRequest + const current = (): boolean => profileVisible && request == reportRequest && getSession()?.getString('token') == token + reportLoading.value = true + try { + const entry = await findLatestReportEntry() + if (!current()) return + if (entry != null && entry.status == 'succeeded') { + go('/packages/finance/report/report?assessmentId=' + entry.id) + } else if (entry != null) { + const id = entry.id + uni.showModal({ title: '报告生成中', content: '您有一份评估正在排队或分析,可查看当前进度。', confirmText: '查看进度', cancelText: '暂不查看', success: (result) => { + if (result.confirm && current()) go('/packages/finance/analyzing/analyzing?assessmentId=' + id) + } }) + } else { + uni.showModal({ title: '暂无报告', content: '暂无已完成的评估报告。您可以开始评估,已提交的记录可在“我的融资档案”查看。', confirmText: '开始评估', cancelText: '暂不评估', success: (result) => { + if (result.confirm && current()) startAssessment() + } }) + } + } catch (err) { + if (!profileVisible || request != reportRequest) return + if (getSession() == null) { go('/packages/account/login/login'); return } + if (current()) uni.showToast({ title: err instanceof Error ? err.message : '报告查找失败,请重试', icon: 'none' }) + } finally { if (request == reportRequest) reportLoading.value = false } + } + // 离页或退出后,旧查找结果及弹窗回调不得把用户带到前一个账户的评估。 + onHide(() => { profileVisible = false; reportRequest++; reportLoading.value = false }) + onUnload(() => { profileVisible = false; reportRequest++; reportLoading.value = false }) const open = (key: string) => { if (key == 'archive') go('/packages/finance/archive/archive') else if (key == 'help') go('/packages/content/help/help') @@ -72,7 +114,6 @@ .account-state { padding: 8rpx 12rpx; border-radius: 8rpx; background-color: #eef4fd; color: #6c84a5; font-size: 22rpx; flex-shrink: 0; margin-left: 10rpx; } .stat-row { min-height: 136rpx; background-color: #fff; border-top: 1rpx solid #edf1f6; border-radius: 0 0 18rpx 18rpx; flex-direction: row; } .stat-item { flex: 1; align-items: center; justify-content: center; } - .stat-value { font-size: 31rpx; font-weight: 700; color: #173864; line-height: 44rpx; } .stat-label { color: #7d8ca1; font-size: 24rpx; margin-top: 10rpx; } .menu-list { margin-top: 24rpx; padding: 0 24rpx; border-radius: 18rpx; background-color: #fff; } .menu-row { min-height: 106rpx; flex-direction: row; align-items: center; border-bottom: 1rpx solid #edf1f6; } diff --git a/packages/account/services/latest-report.uts b/packages/account/services/latest-report.uts new file mode 100644 index 0000000..85e1757 --- /dev/null +++ b/packages/account/services/latest-report.uts @@ -0,0 +1,20 @@ +import { requestJson } from '@/services/api.uts' + +export type LatestReportEntry = { id: string, status: string } + +async function latestAssessment(status: string): Promise { + const result = await requestJson('/assessments', 'GET', { status, limit: '1' }) + const items = result['items'] as UTSJSONObject[] | null + if (items == null) throw new Error('评估记录响应不完整') + if (items.length == 0) return null + const id = items[0].getString('assessmentId') ?? '' + if (!/^[1-9][0-9]{0,9}$/.test(id) || items[0].getString('status') != status) throw new Error('评估记录格式错误,请稍后重试') + return { id, status } +} + +// 服务端先按成功状态筛选再取最新提交,避免最近一页中的处理中任务遮住更早的报告。 +// 账户分包只读取共享API,不导入融资分包代码,也不缓存报告或个人资料。 +export async function findLatestReportEntry(): Promise { + const report = await latestAssessment('succeeded') + return report != null ? report : await latestAssessment('processing') +} diff --git a/packages/finance/archive/archive.uvue b/packages/finance/archive/archive.uvue index b2b0582..e003480 100644 --- a/packages/finance/archive/archive.uvue +++ b/packages/finance/archive/archive.uvue @@ -1,117 +1,241 @@ diff --git a/packages/finance/compare/compare.uvue b/packages/finance/compare/compare.uvue new file mode 100644 index 0000000..5289bc1 --- /dev/null +++ b/packages/finance/compare/compare.uvue @@ -0,0 +1,189 @@ + + + diff --git a/packages/finance/matches/matches.uvue b/packages/finance/matches/matches.uvue index 65c8307..0a5c02b 100644 --- a/packages/finance/matches/matches.uvue +++ b/packages/finance/matches/matches.uvue @@ -1,90 +1,155 @@ - - diff --git a/packages/finance/product/product.uvue b/packages/finance/product/product.uvue index 030c97b..a277dde 100644 --- a/packages/finance/product/product.uvue +++ b/packages/finance/product/product.uvue @@ -1,103 +1,252 @@ - - diff --git a/packages/finance/report/report.uvue b/packages/finance/report/report.uvue index 31e54d4..972cf03 100644 --- a/packages/finance/report/report.uvue +++ b/packages/finance/report/report.uvue @@ -1,25 +1,55 @@