Files
airz-uniapp/docs/开发文档.md
T
hujun 3b2a0139e4 feat: 支持评估版本隔离的报告、匹配及PDF导出功能
新增revisionId参数到路由、服务及导出接口,实现不同评估版本的隔离访问。删除已废弃的需求相关服务文件,移除取消采集的融资金额、期限和用途字段,更新相关页面提示文本。同时更新文档,说明评估版本、最新资料及产品展示规则的调整,支持前台正常业务名称显示,去除环境标签。
2026-09-30 19:11:44 +08:00

145 KiB
Raw Blame History

AI 融资平台开发文档

版本:v1.30 · 基线日期:2026-09-22 · 更新日期:2026-09-30 · 状态:正式库6条产品已同步正常业务文案,报告/PDF/助手去标签的3个PHP文件已正式部署并完成76项服务器验收,页面改动待发行;产品地区待核实、完整发布问题清单及既有编辑/公共目录本地联调完成,四条公开银行材料为隔离库草稿,未部署。最新资料/评估版本及会话任务列精简已完成正式库维护;小程序/H5未发布,外网HTTPS沿用此前连接重置状态。原型04—10及PDF既有功能保留。 配套台账:开发进度。本文定义范围、接口和验收口径,台账记录实际执行与证据。 文档初始规划后已开始开发;以下更新记录优先于原始基线。除明确列为已实现的部分外,计划接口和增量数据仍待开发。

0.36 2026-09-30 正常业务文案与来源展示

当前六条产品用于开发,按用户要求前台统一采用业务名称、机构显示名及正常材料/条件/建议,内部来源标记不作为可见标签。来源publisher/title为产品管理中心/产品参数与准入条件说明;稳定source reference不变,前端显示“产品规则档案”,产品/来源规则版本增加。金融参数、用途和准入条件保持,inputVersion=3不采集融资金额/期限/用途的约定不变;来源文字更新不新增银行核验结论。

正式产品数据已事务同步至ID22—27并备份,无新表/列,24张无关表一致。用户授权后,报告消息、助手提示词与PDF去标签的3个PHP文件已通过宝塔限定部署;76项服务器本机HTTPS/FPM和假模型检查通过,25表原有数据、其他源码/.env及全局参数保持,临时数据清理、worker与入口恢复,0次收费调用。备份及恢复入口见开发进度0.36和后端database/product-display-update.md;本次未包含产品编辑器/公共目录等其他未部署改动。

页面改动仍待发行。此前605项PHP、242项手机/桌面Playwright检查及微信开发编译通过;真实模型、真机与公网访问不属于本轮通过结果。此前强制显示环境标签的阶段说明已被本节覆盖。

0.35 2026-09-30 演示目录联调基线

正式库目前没有用户评估资料,保留6条带demo:airz-来源标识的演示产品供功能开发;它们不是银行产品,也不表示真实授信条件。匹配引擎按inputVersion=3的资料范围执行,产品自身额度、期限和用途仍仅作为冻结快照展示,已删除的用户需求字段不会生成证据或阻断条件。database/seed_demo_products.php支持显式本机隔离配置,不能用默认.env向正式库写入。

个人/企业三态和缺失边界回归已覆盖,产品目录测试按QA夹具筛选以隔离本机演示目录。正式银行材料仍按local_draft_only阻止上架,收到银行确认后须另建确认版本。

0.33 2026-09-30 待核实地区与发布诊断

产品编辑支持新增默认待核实(SQL NULL)、明确全国([])、指定城市列表;NULL不算旧规则。来源独立展示,真正旧规则未重建时只读查看并保留原JSON。发布前检查返回data.issues字段/问题列表,逐项诊断字段缺失、格式、范围、日期、用途和条件;诊断候选不可保存,无问题时仍走原完整编译器,保存和上架强校验不变。版本冲突、权限/数据范围及历史快照约定保持,无新增表列或迁移。450项PHP、89项真实本机HTTP/浏览器和7项数据完整性检查通过,详见进度0.33;四条公开材料来源及空值正常,仍缺银行确认参数和完整硬条件,全部保持本机草稿。未部署、未改正式库、无模型调用。

0.34 2026-09-30 材料复核与业务验收准备

只读database/review_product_materials.php直接加载纯内存规则和既有字典,不初始化应用或读取.env;按指定日期复核local_draft_only材料,输出字段缺项和待银行问题。formatCheckPassed只表示格式;bankVerification固定pending、mayPublish固定false,不代替签核或发布权限。--output只创建新的复核JSON,拒绝覆盖原材料或已有记录。首批共27项格式缺项,核实表和能力差距见首批核实与验收。38项材料及合成资质匹配检查通过;真实政策、无法自动核验条件的处理和人工业务期望待确认。无需数据库字段/迁移,原输入v3和结果逻辑不变。

0.32 2026-09-30 产品后台与公共目录

PRODUCT-003录入工具已完成:结构化地区/用途/来源/条件编辑、草稿、只读发布检查、事务内_base_version冲突保护及上架/下架。公共GET /api/v1/products已实现会员鉴权、筛选、ID游标分页、当前发布资料投影和no-store,无个人匹配信息;完整口径见产品匹配规则开发契约第6.5及8.4节。未新增数据库字段/权限节点,历史快照及v3资料范围不变;326项PHP及89项本机HTTP/浏览器检查通过。未部署线上、未录入真实产品,真实资料及人工业务验收仍是任务完成门槛。

0.28 2026-09-30 最新资料与评估版本(优先)

最新数据设计、接口、并发与隐私约定统一见评估版本与最新资料。fa_user_info收敛为每用户每类型最新一条,任务移到fa_ai_chat,历史存fa_ai_chat_log.input_data单个JSON;新建增加会话,修改保留会话并增加版本。报告和匹配按版本冻结,成功才切换发布指针;本人编辑接口完整回填,公开展示/PDF/模型上下文仍脱敏,身份资料落库明文。

本轮已授权并完成线上迁移、配套PHP部署及63项维护验收,服务恢复;执行记录/备份/恢复边界在后端database/assessment-revisions.md及开发进度0.30节。此前“重新评估一律新增”“资料表一行一次评估”“身份加密”仅作历史。inputVersion=3的表单范围及resultVersion=2的结果样式继续保留;小程序/H5发行及外网访问恢复尚未完成。

0.27 2026-09-29 恢复原资料表单与报告清理

个人/企业信用融资恢复至2026-09-23 19:04需求扩展之前的采集范围:删除融资金额、融资期限、资金用途、其他用途说明;保留经营月数和原有身份/经营收入/资产负债/资料授权。提交使用inputVersion=3,结果仍为resultVersion=2,保留报告三栏、产品匹配、助手、PDF与行动入口。v3不生成需求事实或匹配规则,不把取消采集的字段列为“未提供/待核实”、补填项或完整度扣分项;产品自身额度、期限、利率和用途资料保留。其他真实缺失或来源未核验仍按既有规则处理。

已按用户授权在111.230.144.231/airz执行:删除报告161/229、关联会话151/219及2条日志;普通助手449及其2条日志保留,会员1个、产品6个保留。fa_user_info删除requested_amount、requested_term_months、purpose_code、purpose_detail四列;input_version、analysis_context属于必要版本和快照元数据,继续保留。两个触发器同步移除需求列校验,输入版本允许1/2/3,接口新建最低3。22张不相关表摘要一致,log_bin_trust_function_creators临时开启后恢复0。备份:D:/AAdesk/202609/airz-backups/restore-profile-20260929-180938/。

PHP十个生产文件已通过宝塔文件页面部署,php-fpm/Redis/airz-analysis恢复active,最后worker PID604113、NRestarts0(后续须重查)。站点仍/www/wwwroot/xctai.cn;代码与nginx备份及临时验收包已归档/root/airz-profile-20260929/。前端改动尚需重新发行并上传微信体验版,H5未发布。

当前外网阻塞:aitest.ychysg.cn已被腾讯云备案检查拦截,HTTP跳转dnspod.qcloud.com/static/webblock.html,外网HTTPS连接重置。服务器本机TLS与应用接口通过,不等于外网可用;体验版联网前需完成域名备案/接入并复测。此前“外网正常”的记录仅代表早先验收时间。

验证:53项资料表单专项、51项匹配兼容、29项PDF、18项助手回复、29项助手金额检查通过;服务器维护窗口22项实际HTTPS与假模型流程通过,测试用户/Token/任务已清理,无收费AI调用。微信最终编译通过;Android编译通过,未覆盖真机。H5通过Playwright受控响应检查个人/企业表单及v3提交、报告和对比;仅用于页面验证,不能代替外网或真实模型验收。

0.26 2026-09-29 宝塔 PHP 部署与域名切换

已按用户要求通过 Playwright 操作宝塔“网站→添加站点”部署 PHP。当前域名 https://aitest.ychysg.cn,API 前缀 /api/v1,后台 /ZYurKboadX.php;旧 xctai.cn 绑定已移除,内部站点名及目录仍 /www/wwwroot/xctai.cn,Web 运行目录为 public。新域名 DNS 指向 111.230.144.231,Let's Encrypt 证书已部署,2026-12-28 到期;HTTP 强制跳转 HTTPS,外网默认信任校验通过。面板续签任务正常、每天04:38执行,尚未经历到期续签。

PHP7.4.33及十项扩展、Redis7.2.16、远程 airz-analysis worker 已运行并开机启动。生产 .env 同机连接既有 MySQL5.7.44/airz,未重新导库;原资料加密/模型配置保留、debug关闭。已停止本机 worker PID1876,当前由远程 systemd 接管,最后 PID566317/NRestarts0;后续重查,禁止直接恢复本机 worker 并跑活动库。

新域名 HTTPS 39项检查通过,含两份历史报告161/229、金额/解密/助手上下文、鉴权HTTP、两份PDF及临时Token撤销;外网公共接口200、匿名401、后台登录页200、敏感路径404。部署包和检查脚本已归档到服务器 /root/airz-deploy-20260929/deployment-artifacts/。本轮未发收费AI调用、未改写报告,不代表H5已发布或真实模型/容量验收。完整运维与恢复见后端 D:/AAdesk/202609/airz/deployment-baota.md。

0.25 2026-09-29 数据库切换至远程MySQL5.7

用户确认迁移并补充root后,后端已连接111.230.144.231:3306/airz,真实版本5.7.44-log。25表184行、2份历史评估/报告及产品快照内容摘要与本机源库一致,列/索引/外键/自增序号核对通过。20个CHECK改为8个触发器,51项实际约束检查与24项应用/HTTP检查通过;不改写历史报告、不调用付费模型。

全局log_bin_trust_function_creators临时设1,创建完成恢复0;私密.env仅database段改变,Redis、资料加密和Token散列配置保留。正式worker恢复PID1876(下轮重新检查)。本机MySQL8保留回退,最终备份D:/AAdesk/202609/airz-backups/mysql57-switch-20260929/prepared-20260929-144304/;远程发生新写入后不能直接回切旧库。后端database/mysql57-switch.md含完整记录;不代表真机、真实AI和生产容量验收。

0.24 2026-09-29 原型07/08/09首屏层级调整

按用户限定范围实施:08上下文默认一行摘要、点击展开,历史入口弱化,问候/机器人/快捷问题/输入区保留;07首屏并排显示三态、额度、期限和年化利率,完整宽表依据按需展开;09压缩编号、日期和导出说明,准备状态采用浅色紧凑卡,改善项前置。ReportExport的compact默认为false,10的导出布局保留。

H5受控合成响应完成360×780、390×844、1280×900视觉与交互验证;08摘要高度41.5px(此前约131px),三态/演示标记/来源链接展开可见。对比失败列重试、当前不可用提示、报告三栏/读取重试、PDF成功与失败反馈通过;最终无浏览器error/warn及框架遮罩。修复报告离页时条件文本重新挂载的H5错误。Android、微信小程序最终编译通过;不等同真机或真实API端到端验收。未改后端/数据库、未调用真实AI,详见进度6.25。

0.23 2026-09-29 原型08金额精度真实复测通过

同一对比会话3次Flash真实请求全部成功保存,连续保持123456.78元=12.345678万元;用户口头改为80000元未覆盖当前报告,三态不变。输入16582、输出971 token,无自动重试。源码未改,精确金额专项限定样例通过,下一步转移动端验收。

新增--money-precision三例验收模式;真实/假模型各11项流程检查、30项金额单测与回放、21项格式解析与回放通过。首条原始JSON有相同内容的重复answer键,已核对现行解析及落库只有一份有效回复,不计为全部格式边界通过。详见真实语义验收记录及进度6.24。CHAT-001—003待验收、CHAT-004开发中;真实产品、跨平台和生产容量未验收。

0.22 2026-09-29 原型08定向复测与金额守卫

追加4次Flash定向调用,演示产品无实际申请流程、口头改金额/自称核验不改原报告的边界通过小样本检查;其中3条将123456.78元写为12.35万元,完整语义验收仍未通过。输入19089、输出988 token,无自动重试。

新增冻结金额白名单与BCMath精确换算提示,带单位的金额不合约则拒绝成功落库、保留用量、不自动重试。76项助手、29项金额单测+2组真实响应回放、22项格式解析/回放和14项定向假模型检查通过;新增精确金额提示词尚未再次真实调用。详见真实语义验收记录和进度6.23。CHAT-001—003待验收、CHAT-004开发中;无前端改动、迁移或新增任务编号。

0.21 2026-09-29 原型08真实模型小样本与回复修复

6次Flash真实助手调用全部返回,覆盖普通2轮、报告1轮、单产品1轮、对比2轮;金额精度、三态、历史承接及拒绝改判核心表现正确。输入16038、输出1432 token;不自动重试。部分演示产品建议容易被理解为真实申请流程,已收紧提示词;修改后的提示词未追加付费复测,完整语义验收仍未通过。

修复正常否定句误拦风险及常见Markdown列表原样显示。70项助手回归、18项解析+6个真实响应离线回放、20项合成流程检查通过。原始真实调用只有6次,离线回放不计真实调用。详见真实语义验收记录和开发进度6.22。CHAT-001—003待验收、CHAT-004开发中,27页、63项任务不变;无前端改动或迁移。

0.20 2026-09-28 原型09报告PDF导出

REPORT-005完成本地实施,状态待验收。09报告顶部与10行动页接入同一下载组件;用户点击后才以Bearer请求GET /api/v1/assessments/:id/report.pdf,不提供永久公开链接、不重跑模型、不修改已存报告或产品。27页、63项任务不变。

后端复用本人成功报告与全部冻结匹配快照,模板包含需求、概况、结构化事实、完整度/准备状态、匹配三态/产品理由、建议、版本、时间和免责声明;旧v1不补造v2指标。排除身份、联系方式、企业名和自由填写内容,纯文本转义;引擎禁止远程资源、脚本和任意文件读取。精确元字符串转万元,PDF中文字体嵌入,页脚编号、长理由分页。

导出引擎Dompdf3.1.6及传递依赖单独锁定在后端extend/report-pdf,中文Noto Sans SC Sans2.004固定400字重、字体来源/哈希/许可入库;根依赖不变,无迁移。成功响应application/pdf、no-store/private、安全文件名;401/404/409/503为JSON。引擎缺失/关闭明确503,不生成空文件。

H5检查状态、MIME及PDF首尾标识后创建Blob下载;失败可重试且保留报告,离页取消、换账号拒绝迟到文件并清空旧报告,401白名单回登录。首版普通H5开放;微信内浏览器提示“在浏览器打开并重新登录下载”,App/小程序明确未开放,不假报成功。真实Safari/微信/原生下载未验收。

29项PDF检查、20项真实HTTP检查、24项浏览器检查及Android/微信编译通过,样本渲染和文字提取通过;证据与局限见开发进度6.21。下一步为08真实多轮语义、真实产品样例及跨浏览器/真机验收,生产导出容量仍需评估。

0.19 2026-09-28 原型10下一步行动

REPORT-006页面与入口已完成本地联调,状态待验收。新增packages/finance/next-step/next-step,当前27个页面、63项稳定任务。界面按原型采用白底、蓝色图标、四个行动行、重要提示和首页按钮;关键守卫与业务边界有中文注释。

本人成功报告与冻结产品只读展示;仅eligible且当前available展示申请准备材料,进入/返回/刷新重新读取状态,快照不一致时关闭准备。未选产品回本次匹配,不符/待核实/不可用可查看报告、优化资料与咨询。材料与来源使用冻结数据,渠道未提供时明确说明,不提交银行申请、不增加PDF假操作。

优化资料先展示待补/待核实项与已存建议,再清空流程内存进入同类型空白表单;不覆盖历史。AI咨询携带评估和可选产品,进入不发送。支持白名单登录返回、归属复验、离页清空及迟到响应隔离;冷启动返回本次报告,首页reLaunch。

H5 Chromium手机/桌面38项检查与最终Android/微信编译通过;详见进度6.20。复用已有API,未改后端业务、未迁移、未调用收费模型。下一步为09 PDF;08真实多轮语义、真实产品、微信内H5/Safari和真机仍未验收。

0.18 2026-09-28 原型08上下文AI助手

CHAT-001—003已实现持久会话、消息分页、固定评估/产品上下文、异步回复、原键重试和页面接入,状态待验收;CHAT-004本地异常/额度检查通过,整体仍开发中。普通问答及04/05产品、07对比、09报告入口已接通,进入页面不调用模型,快捷问题只填入输入框。关键实现增加中文注释,保留26个页面和63项任务。

经本轮用户明确授权,后端fa_ai_chat新增context_assessment_id/context_data及归属约束,正式assessment_id/analysis_context和已有报告不改写。模型调用默认Flash,复用analysis:work,助手/报告/产品解释共用每日预留额度。完整接口、重试、迁移恢复和验证见上下文AI助手开发契约。下一步为原型10及09 PDF;08真实多轮语义/真机与生产容量仍需验收。

0. 2026-09-22 实施更新

  • 用户最新决定:删除fa_user_token,会员Token仅存Redis;已备份并删除本地表,当前25张表。fa_user和各业务关系保持不变。运行配置不再依赖MySQL Token驱动。
  • 已接通Bearer、FastAdmin响应解包、业务错误/401处理;新增v1密码登录、本人资料读取、退出、原密码改密。短信接口返回明确未配置状态。
  • 前端开发环境指向本地真实接口,按稳定userId隔离本机缓存;测试/生产地址、旧草稿已清理且不导入;生产缓存策略仍待验收。内容等尚未开发模块仍存在原型数据,不能判一期已完成。
  • Redis驱动使用独立前缀、摘要Token键、TTL和Lua原子索引/撤销。登录和改密按用户行锁串行,Redis故障不降级到MySQL。
  • 短信服务商和首批真实产品资料未具备;DeepSeek两个指定模型已通过真实连通性验证,自填资料分析已接入;不创建模拟凭证、不伪造AI结果或导入演示产品充当真实资料。
  • 开发任务编号及原69–117人日估算基线保留,尚未填写实际耗时,不凭实施条目推算剩余工期。最新状态与证据见进度文档第0章。

0.1 最新范围调整与账户实施(2026-09-22)

  • 取消评估草稿功能:不提供云端创建/更新草稿API,不在本机持久化未提交表单,不提供保存、续填或旧草稿导入。填写页→确认页只传递内存对象;退出账户、离开流程、刷新后清空。正式提交成功才保存fa_user_info及关联评估会话;该接口已于2026-09-23接通,当前边界见0.2。
  • 账户GET/PUT profile、POST avatar已实现;头像限制500KB,校验真实图片类型和尺寸、重新编码PNG,附件归属校验。昵称和头像从服务端读取,恢复默认头像传avatarId=null。
  • 退出、过期及401清理对应userId账户缓存及临时表单;启动时清理旧草稿缓存键。其他用户的普通缓存不做全局清空。
  • fa_user_info仅新增city_code和operating_months标准字段。中途草稿专用revision/client_draft_id及唯一索引已备份撤回,没有新增评估表。原draft状态仅保留为既有内部生命周期兼容,不表示提供用户草稿功能;后续正式提交须在同一事务完成建记录和转processing。
  • DeepSeek通过腾讯云TokenHub官方文档所述OpenAI兼容接口接入:https://tokenhub.tencentmaas.com/v1/chat/completions,Bearer认证。模型按用户指定使用deepseek-v4-pro-0813、deepseek-v4-flash-0731,不自动更换别名。密钥仅在后端忽略的.env中,application/extra/deepseek.php读取;2026-09-23两个指定模型真实请求通过;Flash已生成个人/企业自填分析,商业预算及供应商余额仍待运营确认。
  • 任务编号保留,ASSESS-002改为正式评估历史读取。69–117人日保留为原估算基线,取消草稿后尚未重新估算,不将其表述为最新剩余工时。

0.2 2026-09-23 正式评估提交与历史查询(当前实现)

  • 新增POST /assessments及GET列表、详情、状态;无新增表、字段或迁移。复用fa_user_info、fa_ai_chat、uk_user_request与现有生命周期。
  • 同一事务保存完整输入、唯一评估会话和最终状态;在用户行锁内检查幂等键,比较规范化冻结字段(身份证仅内部解密比较,不下发)。响应为HTTP201、{assessmentId,submissionStatus:"accepted"},不把未来变化的taskId或分析状态放入固定提交回执。旧键异内容/已删除记录返回409。
  • 分析Job/DeepSeek尚未接通时,当前正式记录为failed,errorCode=ANALYSIS_NOT_CONFIGURED,显示“资料已保存,分析服务尚未开放”。这是此前关闭分析的行为;当前报告/retry已接入,匹配仍待开发,最新状态见下文“DeepSeek与可靠任务实施”。
  • 前端提交前精确把万元换成元字符串,空值转null;后端严格白名单并拒绝数值型金额、超范围或多余字段。文字选项映射稳定枚举;五个现有城市使用已核实代码,自填城市代码为null;经营月数/计数0与未知null分开。
  • 私有附件及正式外部授权未接通,documents、consentIds当前只接受空数组;选图/勾选仍是本次流程内存,提交时明确阻止而非丢弃。身份证仅格式校验,不代表实名认证。
  • 历史列表使用id游标,最多50条,默认20条;详情只读且敏感字段脱敏;不存在、内部draft、软删除与越权均不公开。前端具有空态、错误重试、加载更多和按编号刷新详情。
  • 无草稿原则继续有效;幂等键只存在当前填写流程内存,网络失败重试不换键、内容变化才换键。刷新后未提交内容丢弃;若怀疑上一请求已保存,先查历史,不承诺跨刷新恢复提交键。
  • 测试和任务证据见开发进度2026-09-23记录;任务剩余工时仍保留原基线,未据此推算完成率。

DeepSeek与可靠任务实施(2026-09-23,当前实现)

  • 默认模型为 deepseek-v4-flash-0731;deepseek-v4-pro-0813 已通过真实连通性验证,可配置选用,不自动回退或换模型。官方协议使用 thinking:{type:"disabled"}、response_format:{type:"json_object"},后端Bearer调用。前端不保存密钥。
  • 正式提交在事务内创建评估、会话及调用预留,事务提交后投Redis队列 airz-analysis-v1。队列只携带 assessmentId/taskId,任务事实保存在数据库。stage从queued→running→completed/failed;整体status仍为processing/succeeded/failed。
  • 新增任务字段均在fa_user_info:task_requests JSON、task_stage、attempt_count、lease_until、dispatched_at及idx_task_dispatch索引。没有新增评估/报告/匹配表。迁移工具 database/migrate_analysis_tasks.py --apply 已在本地执行,执行前评估表0行;备份 D:/AAdesk/202609/airz-backups/analysis-tasks-20260923-172957-846359/user_info.sql。
  • running通过行锁和taskId抢占。漏投、Redis丢消息及消费前崩溃由queued扫描补投;执行租约过期记AI_TASK_INTERRUPTED,不自动重复调用收费模型。迟到结果不得覆盖新taskId或报告,但原调用用量仍计入原日志。外部服务未提供幂等保证时,无法承诺重试零重复计费。
  • 默认开发配额:每用户自然日20次预留,单评估最多3次(首次+2次重试);用户行锁串行化预留,失败也占一次。按PRC时区计日;待定的商业收费/月预算仍属DEC-AI。超时未知tokens记录null,绝不能当作0或免收费。fa_ai_chat_log记录模型快照、状态、tokens、耗时及固定错误码,不保存密钥/供应商错误原文。
  • 报告输入仅白名单数值事实和个人/企业类型,不发送姓名、手机号、身份证、企业名称、雇主、自由文本或附件。数值由服务端提供,未知字段为null;模型解释只作定性分析。禁止正文复述阿拉伯/全角数字及中文金额、期限、比例,结构/引用/长度不合格即失败。此校验不替代人工评估模型语义。
  • 当前reportType=self_reported_analysis,overallScore=null;facts每项包含id/label/value:string或null/unit:yuan或month或count/source:self_reported。客户端金额统一精确转换万元。observations引用已知factId;无评分规则时不展示固定分数/雷达。match_result=[]且matchingStatus=unavailable,明确“未执行匹配”,不能误称“匹配后没有产品”。模型和报告内容作为历史快照保存。
  • 分析页每5秒读取状态,可离开后从档案恢复;失败时提供重试,网络失败复用该次requestId,taskId变化后生成下一键。成功后由用户打开绑定assessmentId的报告。档案和个人中心报告入口均指向真实记录;页面离开清报告,账户切换拒绝旧请求回写。无草稿、无新增页面。

运行与恢复(在后端目录执行,需PHP Redis/cURL/BCMath/mbstring及MySQL/Redis就绪):

php think analysis:work
php think analysis:work --once
php think analysis:work --recover-only

本地私密.env已开启deepseek.enabled;示例配置默认false。修改模型/配置/任务代码需重启常驻worker。开发终端进程不等同生产守护;生产Supervisor/systemd、告警及备份恢复仍由RELEASE/ADMIN验收。关闭开关后新提交仍保存资料,状态为failed/ANALYSIS_NOT_CONFIGURED,可在服务恢复后手动重试。

新增错误码:AI_TIMEOUT、AI_NETWORK、AI_AUTH、AI_CONFIGURATION、AI_BALANCE、AI_RATE_LIMIT、AI_PROVIDER_ERROR、AI_INVALID_RESPONSE、AI_INVALID_REPORT、AI_TASK_INTERRUPTED、AI_DAILY_LIMIT、AI_ATTEMPT_LIMIT;客户端只显示安全中文信息。401/404维持账户鉴权和归属语义。任务运行失败不改变原始提交的HTTP201固定回执。

测试:先停全部analysis worker,再执行 php tests/analysis_tasks.php --worker-stopped(29项,假模型);php tests/analysis_http.php --worker-stopped(15项,随机本机HTTP端口及测试队列)。恢复扫描以数据库为准,仅隔离Redis队列不能阻止常驻worker发现测试行,因此必须停worker;测试会清理合成用户/记录。--live仅在任务测试中额外真实调用一次;php tests/deepseek_smoke.php --live会真实调用两个模型。原tests/api_assessments.php为分析关闭分支回归,开关开启时主动SKIP,禁止忽略该提示当作通过。

验证边界:已完成个人合成资料真实分析、企业H5失败重试→队列worker→真实报告→刷新恢复;Chrome普通H5与Android编译通过,不代表微信内H5、Safari、原生真机或生产已验收。真实产品与评分规则、外部查询/私有授权尚未具备,因此REPORT-003/004完整范围保持未验收。

0.4 2026-09-23 需求与评估结果契约补充(历史阶段,仅文档)

已根据用户补充的原型和旧开发说明书,新增需求与评估结果数据契约,作为融资需求、完整度/准备等级、匹配解释三个范围的具体规范。其新增定义优先于本文中同名目标类型的简略说明;“当前实现”段落仍只代表已经运行的v1能力。

  • 新输入inputVersion=2,计划补requestedAmountYuan、requestedTermMonths、purposeCode、purposeDetail;数据库存元的DECIMAL(11,2),客户端万元,不恢复草稿。
  • 完整度由版本化字段清单计算;准备等级是资料状态,规则需DEC-READINESS发布。未发布不展示分数或等级;与授信/审批概率严格区分。
  • 产品硬准入pass/fail/unknown合并为eligible/ineligible/unknown,保留证据;score可空,理由按事实最多展示三条,不凑数。未执行、零候选、执行失败分别表达。
  • 结果resultVersion=2计划新增,v1历史不重算;提交事务冻结输入/用途字典依据,worker首次抢占后、外部调用前补入计算策略/产品快照,重试复用。新输入列及fa_ai_chat.analysis_context仅为迁移设计,本次没有执行迁移。
  • 新增DEC-DEMAND、DEC-READINESS决策项;DEC-MATCH继续确认产品规则与排序。字段字典建议、完整度字段集合和准备等级建议尚未发布,不写成已确认商业规则。
  • 本次仅补文档,相关业务子项均未开始。保持原60个任务编号并同步扩展范围;原工时为历史基线,增量待重估。本次不自动纳入渠道、注销、RAG、对比或PDF开发。

0.5 2026-09-24 融资需求v2实施(历史阶段,报告版本以0.6为准)

  • DEC-DEMAND按用户授权采用契约用途字典及必填规则,已发布 financing-purposes-20260923-v1。个人/企业在原第2步录入金额、整数月期限、资金用途及other说明;确认页独立展示,历史详情按冻结标签回显,旧v1显示“当时未采集”。无草稿,刷新/离开清空未提交输入。
  • GET /api/v1/dictionaries 已公开实现,返回支持输入版本、最低新建版本、带版本的用途项;响应no-store。当前只发布融资用途及输入版本,不宣称地区等全部字典已动态化。配置位于后端 application/extra/assessment.php;修改用途须提升字典版本,移除条目即停止新建使用,旧回放读取冻结内容;后台编辑尚未实现。
  • POST /assessments 新建最低inputVersion=2。需求金额使用元两位十进制字符串(0.01—999999999.99),前端万元字符串精确转换;期限1—9999整数月。用途按个人/企业区分;other说明trim后2—200字,非other只接受null/缺省;信用卡已用大于总额返回422 FIELD_INCONSISTENT。
  • 已有请求先按原版本和冻结字典比较:同内容HTTP201原回执,合法内容或版本改变409,非法格式422;v1原键可重放,新v1键422 INPUT_VERSION_UNSUPPORTED。详情只返回本人脱敏资料;用途字典/哈希失效明确503,不套当前配置猜历史含义。
  • 本地2026-09-23已执行 database/migrate_assessment_demand.py --apply:fa_user_info增加input_version及需求四列,fa_ai_chat增加analysis_context,新增3个CHECK;共9项变更,无新表。迁移前两表均0行,复跑预检0项DDL。恢复点:D:/AAdesk/202609/airz-backups/assessment-demand-20260923-195131-493172/before.sql。默认只预检,禁止把备份覆盖后续业务数据;优先保留兼容列回退代码。
  • 提交事务冻结 input_snapshot={inputVersion,normalizationVersion,purposeDictionary},字典保存完整内容,规范排序JSON后计算inputHash。基础字段校验仍由固定normalizationVersion代码解释,未冻结全部字段规则全文;后续修改必须保留旧版本处理。execution_snapshot、executionHash、contentHash当前为null,执行策略/产品快照仍待REPORT-002实施。
  • 输入版本与报告版本独立:新v2输入继续生成resultVersion=1自填报告。本轮需求未进入模型事实、准备等级或产品匹配;自由用途说明不外发。REPORT-003/004及DEC-READINESS/DEC-MATCH保持未完成,不把本次录入闭环称为报告v2。
  • 验证:2026-09-24专项76项通过;2026-09-23基础41项、任务29项、隔离HTTP15项通过。个人/企业H5提交及历史刷新、金额精度、旧未采集、用途失败恢复与无草稿已验证;Web/Android本地编译通过,未验收微信内H5、Safari或真机。此次未调用真实模型,完整证据见开发进度0.5与6.5。

0.6 2026-09-24 资料完整度、准备状态与报告v2(实施记录)

  • 根据用户继续下一步的授权,采用专项契约首版等权字段集和三种资料准备状态;DEC-READINESS开发版发布为 self-reported-base-20260924-v1。个人14项、企业9项,other各加1;有效零值/none计已填写。缺失、无效、不适用分开记录,按整数四舍五入计算百分比;invalid或一致性问题优先“需核实资料”,其次“待完善资料”,全部填写为“可进入资料核对”。这是自填资料准备状态,不是信用或授信等级。
  • 策略配置在 application/extra/readiness.php,引擎版本 equal-fields-v1 固定定义字段类型、范围、条件项、计数和优先级;字段定义、适用清单、条件规则、标签及版本完整复制至execution_snapshot。变更业务含义须提升策略版本;变更算法/类型须提升引擎版本并保留旧版处理,不能原地改变历史策略含义。
  • 新提交input_snapshot冻结targetResultVersion=2;升级前缺该标记或标记1的评估继续生成v1报告,已有成功报告不重算。本轮没有迁移或改写原业务记录。首次worker抢占后、外部调用前持有评估行锁,写入执行策略、evaluatedAt、目标报告版本和明确的匹配unavailable原因,生成executionHash/contentHash;失败重试沿用原快照。策略异常/分母为0报ASSESSMENT_POLICY_INVALID,快照损坏报ASSESSMENT_CONTEXT_UNAVAILABLE,均在模型调用前失败。
  • GET /assessments/:id/report 现按resultVersion支持v1/v2;v2为financing_needs_analysis,包含demand、带类型/单位/来源的facts、completeness、readiness、consistencyIssues、matching、policyVersions以及AI定性区块。服务端固定提示另存systemWarnings:string[],不混作AI证据。completeness.items额外提供label;事实可带state,异常原值保留评估资料、报告value置null并显示需核实。
  • DeepSeek v2仅接数值/枚举白名单事实与确定性准备依据,不发姓名、证件、手机、企业名、城市/职业自由文本或用途说明。仅接受summary/strengths/improvements/riskWarnings四个模型字段;数组条目必须引用已外发的fact或readiness依据,拒绝无效/重复/空引用、数值改写、HTML及明确审批承诺。模型无权覆盖金额、完整度和准备状态;语义正确性仍需真实模型与人工样例验收。
  • 报告页已展示需求、完整度逐项状态、准备依据、优势/建议/风险及证据标签;金额万元,期限/月数整数。未发布策略不显示0分,旧v1不事后添分。缺少真实产品时matching.status=unavailable、计数null、match_result=[];产品集合/匹配规则/排序快照仅保留明确不可用状态,真实匹配和产品解释仍待PRODUCT实施。
  • 本轮验证:54项报告专项、76项需求、41项基础、15项HTTP检查通过;Chromium手机/桌面报告和历史刷新通过,Web及Android本地编译通过。用合成数据/假模型,未调用真实DeepSeek;v2提示词真实语义、微信内H5、Safari、真机和生产守护未验收。REPORT-002/004整体开发中,REPORT-003完整产品/外部数据范围仍阻塞,不能把内部报告支线记为一期完成。

0.7 2026-09-24 真实DeepSeek报告v2输出验证

Flash/Pro真实样例已验证,见验证记录。初始两例被引用校验拒绝后,提示词补明确的allowedEvidenceRefs、单主题引用、不把自填事实推断为信用/受理资格、只补实际缺失/异常项;不再发送完整度的计数/百分比,正文新增中文项数和“为零”等数值复述拦截。接口仍最多5个引用,提示词建议1—3个,不放松硬校验。修正后Flash三例及Pro一例通过,58项本地报告回归通过;仅有限合成样例,不代表生产稳定性或业务签收。

后端 tests/deepseek_report_v2_live.php --live --model=flash --case=personal_missing --output=<已有目录> 每次仅一次真实请求,不读取会员/任务、不入队、不自动重试。支持另外enterprise_complete、personal_inconsistent、enterprise_other及model=pro。测试保留安全用量与合成输出,禁止打印密钥/供应商原始错误。6次实际调用含首轮失败,共输入9369/输出2373 tokens,费用以账单为准。

0.8 2026-09-24 异常流程与等待状态

状态、详情和历史列表共用服务端状态文案:processing/queued显示“排队中”,processing/running显示“分析中”。排队满60秒、运行满90秒时返回等待较长提示,提醒资料已保存、无需重复提交、可从档案查看。以任务阶段update_time计算,补投不重置、重试重新计时;不新增字段或数据库状态,不凭等待时间判定失败,也不自动重复调用模型。

分析页重试提交期间禁止手动刷新竞争;状态查询失败清除旧重试/报告按钮,保留手动刷新入口。失败重试回执丢失时保留请求键,下一次点击仍返回原taskId。已验证两独立进程并发重试只预留一次调用、旧请求键回放、模型超时/非法报告、租约回收、迟到结果、报告归属及退出后重新登录读取。

本轮31项任务、36项v2 HTTP、76项需求、58项报告检查通过;使用合成数据和假模型,无真实供应商调用。普通Chromium H5完成排队/运行/失败提示、状态查询失败恢复、重试双击与回执丢失、报告刷新及历史入口;Web/Android编译通过。详细证据和边界见开发进度6.9节,生产守护和微信内H5/Safari/真机仍未验收。

0.9 2026-09-24 原型04—10页面范围补齐

用户明确要求先补页面改造清单与跳转关系,再进入匹配开发,详见原型04—10方案。04/05/06复用产品详情三栏与结果状态;新增07对比和10行动两页;08接本次评估/产品问答上下文,09改三栏并增加PDF。所有个性化路由以assessmentId绑定冻结快照,公共产品与个人结果分开。

本次正式新增PRODUCT-005、REPORT-005、REPORT-006,任务数由历史60项扩为63项,新增独立工作量5—8.5人日。当前仍25个注册页面,目标27页;旧69—117人日是历史基线,不能当成当前剩余工期。此前章节“对比/PDF另行排期”是历史范围,本节明确将其纳入一期开发任务。

先采用已有契约的三态、单产品覆盖、无评分和productId升序作为开发口径,不显示原型固定百分比或B+;真实产品及业务样例签收仍待完成。本轮已实现纯规则计算基础并通过64项内存测试,见规则开发契约;未接正式worker、未改历史报告,未发布合成产品。图片确有需要时按用户指定 C:\Users\JUN\Desktop\img2-right.py 的异步生图方法;本轮不调用生图服务。

0.10 2026-09-24 产品发布预检与规则编译

ProductPublication已接入Product模型,覆盖新增上架、已上架产品修改及批量保存;按最新锁定记录合并局部变更后校验,版本由服务端递增。产品必须具备名称/类型/机构、金额/期限/利率范围、有效期、对象、地区及来源/用途依据。草稿可不完整,旧不完整产品可下架;不迁移旧JSON、不发布合成产品。

eligibility_rules完整格式、字段映射与发布限制见产品规则契约第6节。只支持全国或现有5城市精确代码,混合产品按个人/企业分支编译,保留不适用依据,不允许补充规则覆盖独立字段;缺少事实渠道的年龄硬条件拒绝发布。来源格式校验不代表真实性已核实。

本轮194项检查通过:发布/编译73、模型事务16、规则64、基础41。合成数据回滚,原产品记录保持;模型路径覆盖不等于后台浏览器验收。PRODUCT-003进入开发中,真实资料及正式发布验收仍受DEC-PRODUCT阻塞;公共接口和结构化条件编辑尚未完成。下一步实现目录筛选/冻结、稳定排序、理由模板及正式评估集成,再按04—10方案接页面。

0.11 2026-09-24 正式匹配任务与本地演示产品

根据用户明确要求,6条合成产品直接写入当前本地fa_product并上架,ID22—27,产品名称、机构和来源注明演示;不局限于测试目录。样例及可重复录入脚本在后端database/demo_products.json、seed_demo_products.php,不覆盖原记录或已编辑演示产品。真实机构资料及业务签收仍待补充。

新执行引擎needs-report-v2-match-v1已接通目录冻结、产品ID稳定排序和证据理由模板;匹配结果写fa_ai_chat.match_result,报告与结果同事务提交。快照保存产品版本/参数/规则/字典,重试复用,旧引擎报告不补算。支持合法null rank/score、不适用条件和unknown,不把自填收入当外部核验。配置损坏使任务失败且不调用模型。

报告页已从固定“未执行匹配”改为读取后端统计与演示提示。匹配列表/详情API、公共查询、单产品AI解释及04—10整体改造仍未交付,不能跳转现有模拟匹配页当真实结果。465项PHP检查通过,Web/Android编译通过,H5报告统计/刷新/历史导航通过;细节见台账6.12与规则契约第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。

0.17 2026-09-28 原型04/05与单产品AI解释

本轮优先完成04、05,复用product/product的eligible/ineligible/unknown三种状态。按原型恢复紧凑机构信息、AI解释/产品详情/申请条件三栏、绿色序号理由、橙色注意事项和底部双按钮;额度/年化/期限移入产品详情。每组默认最多三条,可展开全部和逐条依据。非候选的绿色区域称“已满足的条件”,不把部分满足理解为推荐。无真实Logo时沿用通用机构图标,演示产品保留标记。

新增已实现POST /api/v1/assessments/:id/matches/:productId/explanation,Bearer鉴权,JSON体仅requestId:string(8—64位字母/数字/下划线/短横线);HTTP200回传与GET匹配详情相同的data,异步状态为queued/running/completed/failed,首次未请求为not_requested。GET只读;仅点击生成/重试调用POST,不自动重跑评估。状态和逐条解释保存在fa_ai_chat.match_result,fa_ai_chat_log预留并记录调用,无新表和迁移。完整接口与故障边界见产品匹配契约第9节。

复用analysis:work消费持久调用日志;同产品并发/成功缓存/相同请求键重放不重复调用,每评估每产品最多三次尝试,与报告共用每日用户调用额度。租约失效明确失败,手动新键重试;旧回复只补用量,不覆盖新任务。DeepSeek仅解释该产品冻结理由,逐条引用由服务端绑定;模型输出允许调整顺序,按理由ID校验无缺失/重复/外来项后恢复规则顺序。禁止模型输出数值与授信承诺。

已完成本地验证,PRODUCT-004整体仍开发中;原工时/依赖与63个任务编号不变。原型08上下文咨询和10行动页未完成,当前底部为产品对比、产品详情及资料准备说明,不提供假咨询/假申请。真实产品/人工业务金标准、微信内H5/Safari及真机仍待验收。

1. 项目目标与现状

1.1 已确认范围

一期将现有 25 个页面全部接入真实业务,H5 优先首发。包含手机号/密码/微信/一键登录、个人与企业评估、私有资料、正式授权、外部征信或数据查询、产品匹配、DeepSeek 报告、历史档案、AI 助手、新闻、图文课堂、搜索、消息、积分邀请、帮助反馈及人工客服。相关运营后台一并验收。

按 1 人全栈+AI 辅助排期。AI 服务商确定为 DeepSeek;模型为deepseek-v4-pro-0813和deepseek-v4-flash-0731,密钥已收妥;真实权限已验证,预算和可用余额待运营确认。短信、号码认证、外部数据、客服、存储等渠道待选型。微信内网页与普通 H5 的登录方式分别核实平台能力。一期必做渠道未接通时保持未验收,不以模拟成功替代。

微信小程序、Android、iOS 的平台适配、真机、签名和发布列入后续里程碑,不计入本期 69–117 人日。保留现有跨端代码结构。贷款功能止于申请准备和资料引导;当前范围不包含金融机构受理、授信、放款、支付或资金交易。课堂保持图文形式。

1.2 代码与数据依据

项目 当前事实 规划用途
前端 uni-app x / Vue 3 / UTS,27 页,无独立 npm 构建入口 沿用 HBuilderX 和现有分包,不重新搭建前端
后端 FastAdmin / ThinkPHP 5.0.28 / PHP 7.4 复用认证、后台、模型与队列依赖,新增业务 API/服务
数据库 MySQL 8.0.44,删除空 Token 表后实际 25 张 InnoDB 表 已核对本地库并更新结构快照;恢复点见进度第0节
当前前端模式 开发环境已连接本地 v1 API,模拟请求开关关闭 密码账户流程已接入,内容与产品匹配等页面仍有原型数据,不按页面数计算完成度
当前后端能力 评估生命周期、加密、密码兼容、产品后台等基础已存在 内部服务不等于已暴露并联调的业务 API
第三方接入 DeepSeek自填分析已真实验证;短信、外部查询、客服闭环未验收 各渠道独立记录测试环境与验收证据

源代码位置:

1.3 已有基础与首要缺口

已有基础:万元与元精确转换、个人/企业分步填写交互、产品范围字段和版本、评估提交/完成/失败/重试内部服务、敏感字段加密、旧密码兼容、Token Redis切换(早期曾恢复表,现已删除)、日志脱敏及基础验证。

首要缺口:

  1. Bearer、FastAdmin响应解析和401处理已接通;全量字段字典、requestId日志关联、生产环境配置仍待完成。
  2. assessmentId已贯穿提交、真实分析、报告和历史;需求金额/期限/用途、完整度/准备等级及确定性产品匹配仍待按新增契约实现。
  3. 账户缓存已按userId隔离并在退出时清理;评估只使用当前流程内存。学习进度、签到和消息的服务端业务仍待接入。
  4. 产品准入和其他业务API待开发;评估队列、DeepSeek自填报告及读取API已接通。
  5. 通用公共上传不能直接存正式证件;授权勾选和插件钩子不代表第三方服务已接入。

2. 页面与功能覆盖

路由以 pages.json 为准。以下覆盖现有全部 27 页;反馈表单、历史列表等优先补入所属现有页面,若交互确需新增页面,在所属分包注册并同步台账。

原型07路由packages/finance/compare/compare(PRODUCT-005)与10路由packages/finance/next-step/next-step(REPORT-006)均已注册,现共27页。04/05/06均复用product/product,报告PDF不另加页面。参数与返回矩阵见专项页面方案第3节。

序号 页面路由 功能职责 主要任务
1 pages/home/home 首页、融资入口、推荐、消息红点 BASE-004、CONTENT-002、MSG-003
2 packages/finance/entry/entry 个人/企业融资入口 ASSESS-004
3 packages/finance/assessment/assessment 分步填写、上传及授权 ASSESS-001、ASSESS-002、FILE-004、DATA-004
4 packages/finance/confirm/confirm 确认资料、幂等提交 ASSESS-003、ASSESS-004
5 packages/finance/analyzing/analyzing 真实分析状态、失败重试 REPORT-002、REPORT-004
6 packages/finance/report/report 真实报告、维度与结论 REPORT-003、REPORT-004
7 packages/finance/matches/matches 当前评估匹配、排序、无结果说明 PRODUCT-004
8 packages/finance/product/product 产品范围、快照、当前可用性与申请准备 PRODUCT-003、PRODUCT-004
9 packages/finance/assistant/assistant 持久会话、报告解读 CHAT-001、CHAT-002、CHAT-003、CHAT-004
10 packages/finance/archive/archive 已提交评估历史、开始新评估 ASSESS-002、ASSESS-004、REPORT-004
11 packages/account/index/index 启动引导及登录回跳 BASE-003、BASE-004
12 packages/account/login/login 手机号、密码、微信、一键登录 AUTH-001、AUTH-002、LOGIN-001、LOGIN-002、LOGIN-003、LOGIN-004
13 packages/account/profile/profile 用户信息、档案、入口和退出 AUTH-002、AUTH-003、ASSESS-004
14 packages/account/edit-profile/edit-profile 昵称与头像 AUTH-003
15 packages/account/security/security 账户安全状态及入口 AUTH-004
16 packages/account/password/password 原密码/验证码修改密码 AUTH-004
17 packages/account/change-phone/change-phone 原新手机号验证与换绑 AUTH-004
18 packages/account/points/points 签到、流水、任务及邀请 POINT-001、POINT-002、POINT-003、POINT-004
19 packages/account/messages/messages 消息与未读管理 MSG-001、MSG-002、MSG-003、MSG-004
20 packages/content/search/search 新闻和课程搜索 CONTENT-004
21 packages/content/help/help FAQ、反馈、人工客服 CONTENT-004、SUPPORT-001、SUPPORT-002、SUPPORT-003、SUPPORT-004
22 packages/content/news/news 资讯分类与列表 CONTENT-002
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
27 packages/finance/next-step/next-step 材料准备、已存报告、资料优化及同类型新评估、上下文AI与首页 REPORT-006

3. 数据与架构约定

3.1 评估、报告、会话

  • fa_user_info 一行代表一次评估;再次评估新建记录,可从本人既往输入复制。提交后的输入不可被前端或后台 CRUD 改写。
  • fa_ai_chat 的 scene=assessment 必须关联唯一 assessment_id;report_data 保存报告对象,match_result 保存有序匹配数组。不新增独立评估、报告或匹配结果表。
  • scene=assistant 时 assessment_id 必须为 NULL。助手要引用某次评估时,计划增加单独的 context_assessment_id,并校验同一用户;它不承担正式报告唯一关系,也不改变已有 scene 约束。
  • fa_ai_chat_log 的角色为 system/user/assistant/tool;状态为 pending/streaming/completed/failed。会话内序号唯一;(chat_id,request_id,role) 保证消息级幂等。一期普通助手默认异步完整回复,不要求流式传输。
  • 评估状态为 draft → processing → succeeded 或 failed;仅 failed 可重试并进入 processing。填写步骤 step=0–4 与状态分离。排队、数据查询、匹配、生成报告属于任务阶段,不擅自加入现有 status 枚举。
  • requestId 使用 8–64 位字母、数字、下划线或横线,作为用户内提交幂等键。taskId 为服务端每次尝试生成的标识;重试更换,旧任务禁止覆盖新任务。
  • 内部submit/complete/fail/retry只供服务端使用;外部提交返回固定assessmentId/submissionStatus,重试通过task_requests保存每个键的原taskId与回执。初次提交比较规范化冻结输入,同键异内容409;重试仅接受requestId。映射和状态变更同事务锁定用户/评估行,最新状态另查status。可靠派发、租约及失败恢复已接入,不提供用户草稿版本。
  • result_version 是结果 JSON 结构版本,rule_version 是规则版本字符串,product.version 是产品整数版本。当前分析任务已显式写入 result_version=1;产品快照部分随REPORT-003继续补齐。
  • 外部查询结果不回写已提交表单。使用单独查询流水保存来源、授权和标准化结果,任务在生成报告前冻结所用结果集合/截止时间;最终报告保存引用、来源及必要摘要。后到结果不得悄悄重写历史报告。

3.2 金额、产品与数据字典

数据 客户端/API/数据库口径
业务金额 客户端万元;API 元的两位小数字符串;DB DECIMAL(11,2),非负范围 0–999999999.99
精度 0.800001 万元 → 8000.01 元;万元最多6位小数,上限99999.999999;不使用二进制浮点乘除形成入库金额
未填写 API使用null,适配器将表单空字符串转null;不把未知金额/计数当0
利率 年化百分数,3.85表示3.85%;API建议十进制字符串,禁止误作0.0385
期限 整数月;产品 term_min_months/term_max_months
评估类型 API personal/enterprise → DB type=1/2
婚姻 API已定义枚举 → DB 1已婚、2未婚、3离异、4丧偶;未知NULL
房/车 当前API yes/no/null → DB house/vehicle=1/0/NULL;界面“有/无”在适配层转换
产品对象 DB object 为 SET,可同时适用于个人和企业;不是单一类型值
产品状态 switch=0草稿、1上架、2下架;还需检查有效期
地区 使用统一版本的地区代码;regions=[]才表示全国,NULL视为未配置并阻止上架
经营时间 用户明确填写经营月数;旧operatingYears文字无法确定时要求补填,不猜测
日期时间 API事件时间ISO 8601带时区;有效期为YYYY-MM-DD;业务签到时区Asia/Shanghai;数据库现有int/datetime由DTO转换

产品额度上下限、期限上下限、年化利率上下限、发布状态、有效期、版本及稳定准入字段保持独立列。regions 为地区代码数组;eligibility_rules 为带版本的补充规则对象。现有 condition/grade/information/recommendation/deprecated/other 保留文本用途;公共 recommendation 不保存用户个性化理由。

硬准入、未知值策略、评分权重、维度和样例在 PRODUCT-001 / DEC-MATCH 定稿。AI不决定产品是否满足硬条件,不编造审批概率或外部征信结论。无可靠依据时报告维度和总分可以为空并说明资料不足,不能继续展示固定85分。

3.3 前后端字段映射

以下为目标DTO主要映射,BASE-001和ASSESS-001补齐校验器与兼容适配;不直接把前端payload整包入库。

前端/目标API字段 数据库字段或目标处理 说明
type fa_user_info.type personal/enterprise转1/2
name / idCard / phone name / card_no / mobile card_no加密;只向所属用户按必要范围回显
city / cityCode city / city_code(已增) 保留展示名,匹配使用标准代码;不恢复fa_area
maritalStatus marriage 文字转稳定枚举,再映射数字
occupation / company profession / employer 企业occupation表示行业
monthlyIncome / annualRevenue monthly_income / year_income 元字符串;分别用于个人/企业
socialSecurity / housingFund social_security / housing_provident_fund 统一枚举,区分无、未知与未填写
house / car house / vehicle 当前API yes/no/null;不混用布尔值
creditLoanCount / totalDebtBalance credit_num / credit_total_money 笔数整数,金额元
monthlyLoanPayment credit_month_still_money 元
creditCardCount / creditCardTotalLimit / creditCardUsedLimit credit_card_num / credit_card_quota / credit_card_use_quota 已用不得大于总额;未知不填0
enterpriseName / businessCode enterprise_name / business_code 企业名称、统一社会信用代码
operatingMonths operating_months(已增) 保留旧operating_years供兼容,稳定准入只用规范月数
inputVersion 已增input_version,默认1 已实现v2;历史保持1,新建版本与幂等回放分开处理
requestedAmountYuan 已增requested_amount DECIMAL(11,2) NULL v2必填,元字符串且>0;不是负债或收入
requestedTermMonths 已增requested_term_months SMALLINT UNSIGNED NULL v2必填整数月1—9999,产品规则另行限制
purposeCode / purposeDetail 已增purpose_code / purpose_detail 已发布版本化用途字典,other时才要求说明;自由说明不进入AI/规则
documents documents JSON 类型、attachmentId、元信息;不接受name/path临时文件作为持久资料
consentIds consent_data快照 服务端读取授权事件并形成快照,不相信客户端时间或协议正文
savings / creditCard / otherAssets 拟增supplementary_data JSON 保存旧表单补充输入,标明来源和版本,不据此猜测精确金额或准入事实
step step 仅当前页面步骤;不保存草稿版本或续填进度

当前流程金额以moneyUnit=wan表示,正式提交与数据库使用moneyUnit=yuan。旧草稿不恢复,无revision契约。

3.4 增量数据设计工作

以下按已实现和计划增量区分;本轮已补city_code、operating_months,其他增量仍待对应任务实施。所有新增关系都采用服务端所有者校验;必要唯一索引以数据库保证并发一致性。

需求 复用位置 计划增量与约束 负责任务
标准字段、补充输入 fa_user_info city_code、operating_months已新增;supplementary_data按正式提交字段需求补充;不增加草稿版本或创建草稿键;正式提交后输入冻结 ASSESS-001、ASSESS-002
任务可靠执行 fa_user_info及现有生命周期 task_requests JSON保存重试键→原taskId及接受回执;初次提交仍用request_id和冻结输入比较;task_stage、attempt_count、lease_until、dispatched_at已补齐,按task_id抢占和补投;不改已冻结输入 ASSESS-003、REPORT-002
融资需求v2 fa_user_info input_version、requested_amount、requested_term_months、purpose_code、purpose_detail;历史需求NULL;新版本与原键幂等回放见专项契约第7节 ASSESS-001、ASSESS-003
输入/计算依据快照与报告v2 fa_ai_chat 已增analysis_context JSON并冻结input_snapshot;新目标v2首次抢占后且外部调用前已补入execution_snapshot;真实产品/匹配快照仍待接,两个部分均不可覆盖;report_data、match_result仍复用原字段,不新建报告表 ASSESS-003、REPORT-002、REPORT-003、PRODUCT-002
私有附件 fa_attachment 存储可见性、文件用途、存储键、生命周期状态;路径不作为权限依据 FILE-001、FILE-002
协议与授权事件 fa_acticle + fa_user_info.consent_data 协议版本不可变修订;拟增fa_user_consent保存范围、版本、授权与撤销事件,再复制评估快照 FILE-003
第三方身份 fa_user + token 拟增fa_user_identity,以provider+app_id+subject唯一;不能只靠单个openid列覆盖所有微信应用 LOGIN-001
外部查询审计 fa_user_info关联 拟增fa_data_query:用户/评估/授权、渠道、请求和渠道单号、状态、受保护结果引用、来源时间、错误/费用状态 DATA-002、DATA-003
普通助手引用报告 fa_ai_chat 计划新增context_assessment_id和context_data,保存本人评估/产品ID及快照摘要引用;当前无这两列;历史普通会话默认NULL,assistant.assessment_id仍NULL,迁移前检查归属/索引并备份 CHAT-001
课程内容与进度 fa_finance 课程章节JSON带稳定chapterId/版本;拟增fa_user_lesson_progress,唯一(user_id,lesson_id,chapter_id) CONTENT-001、CONTENT-003
FAQ与发布资料 fa_acticle 扩展明确定义的FAQ类型、展示分类/排序;增加标题之外所需摘要/封面字段 CONTENT-001
消息去重 fa_user_message 新增事件键;按用户+事件键唯一,批量已读按请求时的最大ID水位更新 MSG-001、MSG-002
签到与邀请 fa_user、fa_user_score_log 流水写入business_type/business_id;share_code去重后加唯一索引;拟增fa_user_invitation,受邀用户仅绑定一次,禁止自邀 POINT-002、POINT-003
反馈处理与客服 fa_feedback 处理状态、回复、处理人/时间;客服历史优先使用供应商能力,只保存必要关联标识 SUPPORT-002、SUPPORT-003

变更只追加有明确业务目的的字段或关系。新增这些支撑表不改变“不新增独立评估、报告、匹配表”的约定。详细DDL在对应数据任务内提交审阅;已有数据需先预检、备份、回填验证,再收紧约束。不能直接重跑原空业务表限定的迁移脚本。

3.5 需求与评估结果详细契约

融资需求字段及校验、完整度字段集和公式、准备等级发布闸门、规则证据、三态结果、报告v2及历史迁移以专项契约第2—8节为准。需求输入、完整度、准备状态及报告v2自填支线已实现;真实产品匹配及其证据仍为计划增量。输入版本、结果版本、业务策略与产品版本分别保存。

4. 模块开发任务

任务编号与开发进度一一对应;每个模块4项,共60项。工时保留初始工程人日基线(本轮取消草稿后尚待重估),含模块内开发者测试,不含外部审核等待。任务级验收是具体交付条件,模块整体还需通过M4的真实联调。

4.1 BASE|基础接口与环境

目标: 建立所有模块共用且可联调的网络、会话和环境基础。 阶段: M0。剩余: 3–5人日。

  • 现状: 页面、导航、安全区已有;共享请求已接本地API,处理Bearer、业务失败与401;全量契约、requestId及生产配置仍待完成。
  • 前端: 统一请求与账户专用请求,处理认证、业务错误、重复点击、加载/空态、401回跳;首页聚合公共内容与登录后状态。
  • 后端: 新路由显式绑定控制器和方法;解析JSON并逐字段校验,不能对结构化输入机械套用HTML转义;兼容旧Token入口但新客户端只发送Bearer。
  • 数据: 以userId建立账户缓存命名空间;旧草稿键清理,不提供导入;未提交内容只在当前流程内存中传递。
  • 接口: GET /home、GET /dictionaries,以及所有接口共用协议。 具体方法和字段见第5章;匹配分页/详情、公共产品详情已实现,公共产品列表仍计划新增。
  • 异常与边界: 生产缺API地址直接报配置错误;禁止静默降级成demo。断网不删除服务端事实。
任务编号 任务与交付范围 优先级 前置任务/外部条件 验收条件 人日
BASE-001 接口契约与字段字典:定义版本路由、响应、错误、分页、ID、金额、时间及接口状态;确认前后端字段映射。 P0 无 接口样例可同时被 PHP 和 UTS 解析;区分占位接口与后端现有实现。 0.5–1
BASE-002 统一请求与认证适配:统一共享/账户请求;后端识别 Bearer;解析业务失败和401;限定 CORS;记录 requestId。 P0 BASE-001 HTTP 200 中业务失败不判成功;过期 Token 清会话;普通业务按所有者鉴权。 1–1.5
BASE-003 环境与用户缓存隔离:开发/测试/生产配置;生产禁用 mock;会话等账户缓存按不可变 userId 隔离;未提交表单只存当前流程内存。 P0 BASE-002 切换账户无串数据;旧草稿键清理且不恢复;退出清理敏感缓存和临时填写内容。 1–1.5
BASE-004 首页和联调骨架:首页接入聚合数据、加载/空态/失败重试及登录回跳;建立接口冒烟入口。 P1 BASE-002、BASE-003 深链接与刷新正确恢复;首页无硬编码账户数据;真实未读数后续由 MSG 接入。 0.5–1

4.2 AUTH|账户与短信安全

目标: 让账户身份、个人资料和安全操作形成真实服务端闭环。 阶段: M1。剩余: 5–8人日。

  • 现状: 密码登录、本人资料读取、退出和原密码改密已接Redis会话;资料修改与头像上传已完成本地验证;短信注册/登录、换绑仍待完成,本机资料仅作回显缓存。
  • 前端: 接通短信/密码登录,读取profile;头像独立上传;安全操作成功后重新登录。
  • 后端: 验证码用途、用户和手机号绑定;换绑核验当前及新号码;修复旧免登录改绑声明;修改密码/手机号撤销全部会话。
  • 数据: 复用fa_user/fa_sms;会话改用Redis;手机号冲突由唯一约束兜底;昵称不覆盖实名。
  • 接口: /auth/sms-code、/auth/sms-login、/auth/password-login、/auth/logout、/account/profile、/account/avatar、/account/password、/account/phone。已实现与计划范围见第5章;短信仅返回未配置状态,不代表渠道已实现。
  • 异常与边界: 验证码重复/过期、账户禁用、号码占用、原手机号不可用分别返回可操作提示;失去原号需进入人工核验流程,不能跳过身份证明。
任务编号 任务与交付范围 优先级 前置任务/外部条件 验收条件 人日
AUTH-001 短信接入与验证码服务:供应商适配、签名模板、验证码用途/有效期/频控/核销、测试发送。 P0 BASE-002、EXT-SMS 发送成功才倒计时;验证码过期、复用、跨用途和频繁发送均拒绝。 1–2
AUTH-002 真实登录与会话:短信登录/首次注册、密码登录、资料读取、登出、禁用账户、旧密码散列升级。 P0 AUTH-001、BASE-003 真实账户登录成功;登录失败无假 Token;登出撤销当前 Token;旧散列兼容。 1.5–2
AUTH-003 资料与头像持久化:昵称、头像 API 和文件校验;以服务端 profile 为准,迁移本机回显逻辑。 P1 AUTH-002 不同设备资料一致;昵称不覆盖评估实名;头像不依赖临时路径。 1–2
AUTH-004 改密与手机换绑:登录校验、原/新手机双挑战、号码占用、事务及全部会话撤销;修复旧改绑免登录声明。 P0 AUTH-002 跨账户或单个验证码不能换绑;修改后旧 Token 全失效;新密码8–32位且含字母和数字。 1.5–2

4.3 LOGIN|微信与一键登录

目标: 使微信和运营商号码认证在获批H5场景真正可用。 阶段: M1。剩余: 5–10人日。

  • 现状: 两个入口均只弹出未开放提示;User::third仅有插件调用骨架。
  • 前端: 按微信内/普通浏览器/桌面浏览器展示受支持登录方式,处理跳出返回、取消和短信回退。
  • 后端: 服务端code/credential交换,state和回调防重放;已有账户绑定需账户证明,禁止按昵称自动合并。
  • 数据: 独立第三方身份关系以provider/appId/subject唯一;unionid仅在取得并验证适用范围后辅助绑定。
  • 接口: GET /auth/wechat/authorize、GET /auth/wechat/callback、POST /auth/oneclick、POST /auth/bind-phone。 具体方法和字段见第5章;匹配分页/详情、公共产品详情已实现,公共产品列表仍计划新增。
  • 异常与边界: 渠道授权失败不创建半登录会话;不支持的网络或浏览器回到短信;只有支持矩阵中场景通过才记完成。
任务编号 任务与交付范围 优先级 前置任务/外部条件 验收条件 人日
LOGIN-001 登录渠道能力与身份方案:确认微信内/普通H5方式、号码认证H5能力;定义渠道身份与手机号账户绑定方案。 P0 BASE-001、EXT-WX、EXT-ONE 形成渠道支持矩阵、回调和身份唯一键方案;不以昵称/openid跨应用猜测同一账户。 1–2
LOGIN-002 微信登录接入:授权发起、state校验、code服务端交换、首次手机号绑定与已有账户冲突处理。 P0 LOGIN-001、AUTH-002、EXT-WX 授权取消和重放安全失败;绑定现有账户需原账户证明;获批H5场景真机通过。 1.5–3
LOGIN-003 一键登录接入:号码认证SDK/网页流程、服务端验证、能力检测、账号绑定、短信回退。 P0 LOGIN-001、AUTH-002、EXT-ONE 按渠道支持的网络/运营商/浏览器验收;客户端自报手机号不能登录。 1.5–3
LOGIN-004 身份渠道联调:微信内、普通移动H5和桌面H5分别验证;解绑/冲突与失败恢复按已选渠道能力实现。 P0 LOGIN-002、LOGIN-003 身份关联不误合并账户;重放无效;不支持场景有清晰短信回退。 1–2

4.4 FILE|资料与授权

目标: 资料可安全持久化,授权可追溯且可以撤销。 阶段: M1。剩余: 4–7人日。

  • 现状: 前端仅本机预览;documents和consent_data已预留;现有上传默认公共用途。
  • 前端: 资料类型、上传进度/失败重试、已上传列表、协议全文、授权状态和撤销入口。
  • 后端: 私有文件服务、归属/MIME/内容/大小校验、鉴权下载、协议版本和授权事件;评估提交时由服务端形成快照。
  • 数据: 复用附件表与评估JSON;协议修订和独立授权事件保留历史;文件保留/删除期限在DEC-PRIVACY定稿。
  • 接口: POST /documents、GET/DELETE /documents/:id、GET /agreements/:code、GET/POST /consents、POST /consents/:id/revoke。 具体方法和字段见第5章;匹配分页/详情、公共产品详情已实现,公共产品列表仍计划新增。
  • 异常与边界: 临时路径、他人附件、无效授权全部拒绝;可选资料不强迫提交;撤销后停止新查询,历史留存按已确认规则处理。
任务编号 任务与交付范围 优先级 前置任务/外部条件 验收条件 人日
FILE-001 私有资料存储方案:区分公开头像与私有证件;确定文件白名单、大小限制、存储密钥、附件元数据与保留策略。 P0 BASE-001、EXT-STORAGE、DEC-PRIVACY 私有文件不在公开web目录;形成文件用途/权限/生命周期配置清单。 1–1.5
FILE-002 私有上传与下载:持久附件ID、归属校验、大小/MIME/内容校验、鉴权读取、失败重试和删除策略。 P0 FILE-001、AUTH-002 无登录/跨用户不能读取;客户端临时路径不能提交为附件;失效链接不可访问。 1–2
FILE-003 协议与授权版本:协议全文展示、同意/撤销事件、范围与协议版本、历史快照及外部授权凭据边界。 P0 FILE-001、AUTH-002、DEC-PRIVACY 提交可追溯所见协议版本;撤销阻止新查询;前端布尔勾选不冒充第三方授权。 1–2
FILE-004 资料授权页面联调:替换选图预览和占位协议;展示上传/授权状态;拒绝、取消、断网恢复。 P0 FILE-002、FILE-003 仅已上传且有权访问的附件入评估;拒绝可选授权仍可自填,不显示已查询。 1–1.5

4.5 ASSESS|评估与融资档案

目标: 个人与企业评估正式提交后持久保存,可重复评估并查看只读历史;不提供草稿。 阶段: M2。剩余: 5–8人日。

  • 现状: 无草稿;需求v2录入/确认/提交、v1/v2历史分页与详情已接通。分析任务和重试继续生成v1自填报告;准备状态和报告v2自填支线已实现;真实产品匹配待实施。
  • 前端: 字段映射、服务端校验错误定位;确认前只保留内存,正式提交返回assessmentId后贯穿所有后续路由。
  • 后端: 认证用户正式提交后,同一事务创建评估和接受任务;完整校验、请求幂等;提交后不可修改,修改需求转新评估。
  • 数据: 使用fa_user_info和唯一评估会话;不新增草稿版本字段;taskId用于任务尝试。
  • 接口: POST/GET /assessments、GET /assessments/:id、GET /assessments/:id/status、POST /assessments/:id/retry均已实现自填支线;具体版本与字段见第5章。附件和正式授权待接。
  • 异常与边界: 未提交内容不恢复;重复正式提交返回同一接受回执;跨用户记录统一404;失败重试保持原输入。
任务编号 任务与交付范围 优先级 前置任务/外部条件 验收条件 人日
ASSESS-001 评估字段与增量模型:统一现有字典并补融资需求四字段、inputVersion及增量列;用途字典/必填规则按专项契约确认,保留附件和授权映射。 P0 BASE-001、DEC-DEMAND 现有与v2字段映射明确,元字符串/整数月/用途条件校验;历史新字段NULL,不新建评估表。 1–2
ASSESS-002 正式评估记录与历史:本人历史分页/只读详情及用户隔离;补v1/v2需求回显与旧未采集提示,无草稿保存或续填。 P0 ASSESS-001、AUTH-002 同用户可多次评估;越权拒绝;历史v1不回填需求、不重算,v2显示冻结需求且不可编辑。 1–2
ASSESS-003 提交与生命周期API:保留提交201及重试202幂等;补inputVersion切换、新需求校验、输入字典冻结、同键全字段比较和旧请求重放兼容。 P0 ASSESS-002、FILE-004 同键同内容原回执,合法需求或版本变化409、非法格式422;最低新建版本2或用途停用不阻断原键回放;旧重试返回原taskId。 1.5–2
ASSESS-004 评估全页面联调:评估/确认/分析/报告/档案贯穿assessmentId;新增资金需求分组和只读展示,保留金额、清理与并发回归。 P0 ASSESS-003 个人/企业需求均能提交及回显;12.345678万元=123456.78元;无草稿,历史不串账户,处理中无假报告。 1.5–2

4.6 DATA|外部征信或数据查询

目标: 把已授权的真实外部数据纳入评估,且来源与查询过程可追溯。 阶段: M2。剩余: 6–12人日。

  • 现状: 只有授权意向和预留JSON;尚无真实数据服务。
  • 前端: 展示实际可用查询种类、授权状态、查询中/成功/失败/拒绝/撤销,不把选择框当查询完成。
  • 后端: 服务商适配、签名、异步状态、回调验签/去重、对账、费用状态;原始证件标识只在必要服务端流程使用。
  • 数据: 查询记录与评估/用户/授权绑定;必要结果加密或私有存储;输入冻结后只追加查询事件。
  • 接口: GET/POST /assessments/:id/data-queries、GET /data-queries/:id、POST /callbacks/data/:provider。 具体方法和字段见第5章;匹配分页/详情、公共产品详情已实现,公共产品列表仍计划新增。
  • 异常与边界: 超时收费不明先查渠道状态;未取得或已撤销授权不新调用;缺失数据标未知,不能伪装征信正常。
任务编号 任务与交付范围 优先级 前置任务/外部条件 验收条件 人日
DATA-001 查询渠道与范围定稿:确认实际可开通数据产品、个人/企业范围、授权凭证、测试样例、计费与返回解释。 P0 BASE-001、EXT-DATA、DEC-QUERY 每种首发授权都有明确数据来源和支持范围;缺失渠道记阻塞并更新估算。 1–2
DATA-002 授权查询适配与记录:服务端发起、请求唯一键、渠道凭证隔离、查询事件持久化及assessmentId绑定。 P0 DATA-001、FILE-003、ASSESS-003 无有效授权不调用;重复发起不重复建本地请求;不得将他人结果用于本次评估。 2–4
DATA-003 回调与结果标准化:验签、防重放、回调幂等、主动查询对账、结果字段/来源/时间映射与受限留存。 P0 DATA-002 伪造/过期回调拒绝;迟到结果不覆盖冻结输入;查询失败不转换成零风险。 2–4
DATA-004 异常与渠道端到端验收:超时、撤销、拒绝、余额不足、重复回调、重查和H5往返恢复。 P0 DATA-003 成功和失败均可追踪;超时收费不明先对账;各已承诺首发场景有真实渠道证据。 1–2

4.7 PRODUCT|产品库与匹配规则

目标: 可运营的产品库与可解释、可复现的个性化匹配。 阶段: M2。工作量: 原6–9人日为历史基线,新增对比1.5–2.5人日;不是当前剩余工期,已有任务页面扩展另需复估。

  • 现状: ProductMatchRules计算、ProductPublication预检/编译、ProductMatching目录冻结/排序/理由已接通正式评估并持久化。6条演示产品在本地上架,报告已显示统计;匹配列表/详情API、公共查询、结构化编辑和04—10页面待完成,真实产品资料未提供。
  • 前端: 拆Product与MatchResult;显示范围而非单点额度/利率;保持历史快照并提示当前产品状态。
  • 后端: 确定性规则、白名单操作符、类型校验、版本化排序;只推荐状态/有效期/地区及硬条件满足的产品。
  • 数据: 产品独立字段+regions/eligibility_rules;个性化分数和理由放match_result,快照含产品版本。
  • 接口: GET /products、GET /products/:id、GET /assessments/:id/matches;后台沿用产品CRUD并补运营校验。 具体方法和字段见第5章;匹配分页/详情、公共产品详情已实现,公共产品列表仍计划新增。
  • 异常与边界: 暂无匹配是合法完成结果;规则未知不执行任意表达式;产品下架不删除历史快照。
任务编号 任务与交付范围 优先级 前置任务/外部条件 验收条件 人日
PRODUCT-001 规则字典与评分口径:确定准入三态、来源要求、单产品需求覆盖、用途规则、证据结构和版本化排序;评分未发布时null。 P0 ASSESS-001、DEC-MATCH 发布规则与人工样例可审阅;非法字段/操作符阻止发布;fail优先于unknown,匹配指标不作为审批概率。 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 每条解释可追溯且不凑三正三反;当前产品变化不改历史;跨账户拒绝;unavailable/零候选/failed不混淆。 1–2
PRODUCT-005 同类产品对比:新增compare页,同评估2—3项冻结产品、状态/范围/条件对照、补选与返回、刷新恢复。 P1 PRODUCT-004 不跨评估/混用现价;缺值不同于0;手机横向表格可读,单项失败明确;不重跑模型。 1.5–2.5

4.8 REPORT|AI任务、报告与历史

目标: 把真实输入、查询依据和产品匹配生成可追溯的DeepSeek报告。 阶段: M2,行动与助手联调延伸至M3。工作量: 原8–12人日为历史基线,新增PDF及行动页3.5–6人日;不是当前剩余工期。

  • 现状: v1自填报告已真实模型联调;v2需求、完整度、准备状态和冻结策略已完成假模型与页面联调。v2有限真实模型样例已通过;大样本语义、产品证据/解释及外部渠道仍待验收。
  • 前端: 轮询真实状态、刷新恢复、失败重试;渲染数据驱动维度、来源时间和版本;查看历史。
  • 后端: DeepSeek适配、结构校验、任务抢占/超时/漏投补偿、输入最小化、用量记录;在事务中同时落报告、匹配和成功状态。
  • 数据: result_version/rule_version/model与产品快照分别记录;模型输出不能覆盖金额、硬准入或数据来源。
  • 接口: GET /assessments/:id/status、GET /assessments/:id/report;内部worker调用complete/fail,不公开完成接口。 具体方法和字段见第5章;匹配分页/详情、公共产品详情已实现,公共产品列表仍计划新增。
  • 异常与边界: 模型输出错误/配额不足/队列故障进入可追踪失败;重试不允许旧taskId回写;供应商超时可能计费,不承诺外部零重复收费。
任务编号 任务与交付范围 优先级 前置任务/外部条件 验收条件 人日
REPORT-001 DeepSeek适配与配额:配置模型标识、服务端密钥读取、超时、结构化输出校验、配额预留和消耗记录。 P0 BASE-002、EXT-AI、DEC-AI 模型可配置;密钥不下发;失败与使用量可追踪;数值事实不被模型改写。 1.5–2
REPORT-002 异步任务与补偿:保留Redis派发、补投、租约和taskId隔离;沿用提交时input_snapshot,一次性补入execution_snapshot并在重试时复用,支持跨部署v1/v2任务。 P0 ASSESS-003、REPORT-001 漏投/中断可恢复或明确失败;旧任务不可回写;输入/目标结果/策略/产品快照重试不隐式变化。 2.5–4
REPORT-003 报告生成与持久化:保留v1自填报告;补v2需求、完整度/准备等级、规则证据及定性AI区块;版本快照和正式结果原子落库。 P0 REPORT-002、DATA-004、PRODUCT-002、PRODUCT-003、DEC-MATCH、DEC-READINESS 完整度按发布字段集复算,等级有依据且非审批;null rank/score按状态验证;格式错误不成功,产品/规则更新不改旧报告。 2–3
REPORT-004 分析报告历史联调:保留轮询/重试和v1历史;接v2需求、完整度、准备等级、三态匹配及证据解释,不显示无规则分数/雷达。 P0 REPORT-003、PRODUCT-004、ASSESS-004 个人/企业真实链路按版本展示;未发布无分或等级,100%不等于授信;旧报告不重算;新复评新assessmentId。 2–3
REPORT-005 报告PDF导出:鉴权流式下载、受控中文模板、报告与产品冻结快照、H5保存与失败提示。 P1 REPORT-004 本人成功报告可导出;金额/理由与历史一致;不重跑模型/泄露身份;中文分页可读,JSON错误不保存成PDF。 2.5–4
REPORT-006 下一步行动:新增next-step页,准备材料、查看已存报告、优化资料、新评估、咨询及首页导航。 P1 PRODUCT-004、REPORT-004、CHAT-003 根据判定及当前可用性开放行动;无银行申请提交;新评估不改历史、无草稿;上下文和返回正确。 1–2

4.9 CHAT|AI助手

目标: 可恢复、隔离且能基于本人评估解释的AI会话。 阶段: M3。剩余: 4–7人日。

  • 现状: 页面消息仅内存,回复固定;消息结构、序号和用量字段已预留。
  • 前端: 创建/切换/恢复会话、分页历史、发送状态、异步回复轮询与重试;保留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章;匹配分页/详情、公共产品详情已实现,公共产品列表仍计划新增。
  • 异常与边界: 失败消息保留错误和可重试状态;切换账号不带上旧会话;渠道取消不能保证停止已发生计费,一期不要求生成中强制取消。
任务编号 任务与交付范围 优先级 前置任务/外部条件 验收条件 人日
CHAT-001 会话与消息API:普通会话创建/列表/消息分页/归属;明确可引用评估上下文且不占用正式assessment_id。 P1 AUTH-002、BASE-001 用户只能读自身会话;评估会话与普通会话分离;重进恢复历史。 1–1.5
CHAT-002 DeepSeek对话调用:上下文裁剪、敏感信息最小化、消息幂等、异步回复与本地配额记录。 P1 CHAT-001、REPORT-001、REPORT-002 同请求不重复建消息或记本地消耗;错误回复不标成功;不会发送无关证件资料。 1–2
CHAT-003 助手页面接入:chatId/requestId、历史加载、发送状态、失败重试、由报告进入解释上下文。 P1 CHAT-002、REPORT-004 切换会话不串上下文;超时保留可重试消息;重进页面能继续。 1–2
CHAT-004 对话异常与额度验收:并发消息、重复点击、额度耗尽、供应商超时及失效会话。 P1 CHAT-003 配额并发不超扣;供应商计费不明可对账;仅真实成功回复显示完成。 1–1.5

4.10 CONTENT|内容、课堂、搜索与FAQ

目标: 后台发布的内容、图文课程和FAQ可被前端检索阅读,进度跨设备一致。 阶段: M3。剩余: 4–6人日。

  • 现状: 前端本地资讯/课程/FAQ,课程进度为设备级键;后台存在表和CRUD但发布流程不完整。
  • 前端: 新闻、文章、课堂、课程页接真实分页/详情;处理404/下架,搜索竞态和章节完成状态。
  • 后端: 发布/下架、富文本清洗、分类与首页推荐、搜索和FAQ;稳定章节ID与进度幂等。
  • 数据: 复用fa_acticle/fa_finance;章节数据结构化;用户章节完成关系独立存储;不引入视频和付费课程。
  • 接口: /content/articles、/content/lessons、/content/lessons/:id/progress、/content/search、/help/faqs。 具体方法和字段见第5章;匹配分页/详情、公共产品详情已实现,公共产品列表仍计划新增。
  • 异常与边界: 未发布内容不可访问;新增/重排章节不沿用索引作为进度ID;搜索慢响应不得覆盖新查询。
任务编号 任务与交付范围 优先级 前置任务/外部条件 验收条件 人日
CONTENT-001 内容模型与发布后台:补齐文章/课程结构、稳定章节ID、分类、封面/摘要、发布状态、FAQ类型及协议入口。 P1 BASE-001 后台可发布/下架;章节重排不换ID;草稿不可公开;FAQ可维护。 1–1.5
CONTENT-002 列表详情与首页推荐:新闻/文章/课堂/详情真实API、分页、富文本清洗、缺失内容与首页推荐接入。 P1 CONTENT-001、BASE-004 首页/列表/详情ID一致;无模拟兜底内容;下架详情有明确不可用状态。 1–1.5
CONTENT-003 云端课程进度:按用户/课程/章节记录完成,章节版本兼容、跨设备恢复和本机缓存策略。 P1 CONTENT-002、AUTH-002 用户隔离;重复完成幂等;章节排序变化不串进度;跨设备一致。 1–1.5
CONTENT-004 搜索与FAQ联调:真实全文字段检索、分类/分页、请求竞态、FAQ读取、无结果和断网恢复。 P1 CONTENT-002 旧搜索响应不覆盖新关键词;返回ID可开详情;FAQ与实际业务行为一致。 1–1.5

4.11 MSG|消息中心

目标: 将真实业务通知、阅读状态与首页红点保持一致。 阶段: M3。剩余: 2–4人日。

  • 现状: 前端静态通知和本机已读;表含read_at与业务引用,没有用户端业务API。
  • 前端: 分类分页、未读数、已读/全部已读、与正确评估记录跳转。
  • 后端: 在业务事务完成后可靠生成通知,事件唯一键去重;读取和更新均限定当前用户。
  • 数据: 复用fa_user_message,补事件唯一键;is_read和read_at同步;全部已读采用最大ID水位。
  • 接口: GET /messages、GET /messages/unread-count、POST /messages/:id/read、POST /messages/read-all。 具体方法和字段见第5章;匹配分页/详情、公共产品详情已实现,公共产品列表仍计划新增。
  • 异常与边界: 队列重试不重复通知;全部已读期间新增消息仍未读;本期站内消息不等同App推送。
任务编号 任务与交付范围 优先级 前置任务/外部条件 验收条件 人日
MSG-001 通知事件与去重:定义评估结果等事件、通知去重键及写入时机,补齐唯一性保障。 P1 BASE-001、REPORT-004 重复任务不会重复通知;成功/失败通知关联正确assessmentId。 0.5–1
MSG-002 消息读写API:当前用户分页/分类/未读数/单条已读/全部已读,read_at与is_read一致。 P1 MSG-001、AUTH-002 跨用户读写拒绝;已读重复操作幂等;列表/计数一致。 0.5–1
MSG-003 消息页面与首页红点:替换静态通知与固定红点,处理业务跳转、空态、刷新及批量已读。 P1 MSG-002、BASE-004 换设备状态一致;打开通知到对应历史;关联记录不可用有提示。 0.5–1
MSG-004 事件消息验收:事件重复、失败重试、分页期间新通知和并发全部已读测试。 P1 MSG-003 全部已读不误吞操作后新增消息;通知去重和未读数通过数据库核对。 0.5–1

4.12 POINT|积分、任务与邀请

目标: 积分与真实任务事件一致,邀请可归因且奖励不会重复发放。 阶段: M3。剩余: 4–7人日。

  • 现状: 本机签到+10,固定体验邀请码;底层score方法未使用业务唯一键。
  • 前端: 真实积分、流水、服务端签到状态、邀请码和任务进度,显示已发布规则版本。
  • 后端: 积分事务和并发锁、日期与任务幂等、防自邀、可信事件奖励;错误需向业务层传播。
  • 数据: 复用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章;匹配分页/详情、公共产品详情已实现,公共产品列表仍计划新增。
  • 异常与边界: 默认保留每日签到10分作为待业务确认建议;其他奖励金额不编造。复制文案或客户端上报完成不直接发积分。
任务编号 任务与交付范围 优先级 前置任务/外部条件 验收条件 人日
POINT-001 积分规则定稿:确认签到、资料完成、邀请奖励的条件/次数/额度、业务时区和权益范围。 P1 BASE-001、DEC-POINT 形成版本化活动规则;复制/分享不等于奖励;未确认奖励规则不得上线。 0.5–1
POINT-002 积分账户与签到:事务更新score与流水、业务唯一键、服务端日期签到、余额/流水查询。 P1 POINT-001、AUTH-002 同用户同日并发只加一次;流水与积分一致;错误不静默吞掉。 1.5–2
POINT-003 邀请码与邀请关系:生成唯一邀请码、首次有效绑定、防自邀、可信奖励事件与发放幂等。 P1 POINT-002 客户端不能自报完成奖励;重复/自邀拒绝;已有关系不随分享覆盖。 1–2
POINT-004 任务积分页面联调:真实余额、流水、签到状态、个人邀请码、任务状态和规则说明。 P1 POINT-003、ASSESS-004 真实到账后才提示成功;跨账户/跨设备一致;邀请复制不立即发奖励。 1–2

4.13 SUPPORT|反馈与人工客服

目标: 帮助页既能提交可追踪反馈,也能真实到达人工服务。 阶段: M3。剩余: 3–6人日。

  • 现状: FAQ可展开,客服仅未开放提示,反馈表有基础CRUD。
  • 前端: 反馈表单/附件/记录/回复;客服在线/排队/离线状态及失败回退。
  • 后端: 反馈归属与后台处理、服务端访客签名、客服会话关联;外部系统消息遵循渠道身份规则。
  • 数据: 复用fa_feedback补处理结果;不把反馈图片当公共文件;客服历史优先由供应商维护。
  • 接口: POST/GET /feedback、GET /feedback/:id、POST /support/session。 具体方法和字段见第5章;匹配分页/详情、公共产品详情已实现,公共产品列表仍计划新增。
  • 异常与边界: 无坐席能留言且后台有责任人;SDK失败提示可使用站内反馈;退出切换账号清理客服身份。
任务编号 任务与交付范围 优先级 前置任务/外部条件 验收条件 人日
SUPPORT-001 客服方案与运营准备:选定H5客服、身份签名、坐席/工作时间、离线策略、反馈状态及责任人。 P0 BASE-001、EXT-CS 具有可测试坐席和离线处理渠道;确认SDK/隐私及首发支持范围。 0.5–1
SUPPORT-002 反馈提交与处理闭环:帮助页增加反馈表单/记录;附件权限、后台状态/回复、用户查看处理结果。 P1 AUTH-002、FILE-002 反馈可提交到后台并回复;仅当前用户可查;附件无越权。 1–2
SUPPORT-003 H5人工客服接入:服务端签发访客身份、前端打开客服、在线/排队/离线、失败回退。 P0 SUPPORT-001、AUTH-002、EXT-CS 真实到达人工坐席;不由前端伪造用户身份;离线可留言并有处理路径。 1–2
SUPPORT-004 客服反馈联调:普通/微信内H5、账户切换、关闭重开、无坐席、SDK失败和消息记录。 P0 SUPPORT-002、SUPPORT-003、CONTENT-004 会话无跨账户泄漏;客户可获回复;供应商不支持项准确提示。 0.5–1

4.14 ADMIN|后台运营与排障

目标: 让运营人员能管理业务、定位故障并执行受控操作。 阶段: M3。剩余: 3–5人日。

  • 现状: 通用管理员权限和业务CRUD基础已有;不能据此认为完整运营流程已完成。
  • 前端: FastAdmin后台增加任务、模型额度、查询状态和运营入口,非移动端新增主导航。
  • 后端: 角色授权、敏感字段掩码、任务/查询定位、受控重试和审计;不允许手改已提交评估输入及正式结果。
  • 数据: 复用管理员fa_auth_*;保留被删除会员组/规则表的删除状态;不恢复历史无关业务表。
  • 接口: 沿用后台路由与权限体系;不将管理查询、complete/fail或密钥管理暴露到用户API。 具体方法和字段见第5章;匹配分页/详情、公共产品详情已实现,公共产品列表仍计划新增。
  • 异常与边界: 权限不足不可越权;重试需要有效状态和当前taskId;日志不得输出证件或模型密钥。
任务编号 任务与交付范围 优先级 前置任务/外部条件 验收条件 人日
ADMIN-001 菜单与角色权限:将新增运营能力纳入现有管理员权限;明确运营/客服/技术可见字段。 P0 BASE-001 管理员权限最小化;无需恢复已删除会员组/规则;敏感字段继续掩码。 0.5–1
ADMIN-002 任务与查询排障:按assessmentId/taskId/requestId查进度/错误、人工重试/对账入口及操作审计。 P1 REPORT-004、DATA-004、ADMIN-001 可定位失败原因;重试仍走生命周期和幂等;不允许后台手改正式结果。 1–1.5
ADMIN-003 模型额度与服务检查:DeepSeek配置、密钥状态、用户额度、调用消耗、队列/存储/短信状态检查。 P1 REPORT-001、CHAT-004、ADMIN-001 密钥不回显;配置失败可定位;本地消耗与渠道对账有入口。 1–1.5
ADMIN-004 运营交接验收:真实产品、内容、课程、积分、消息、反馈及客服操作演练,形成操作说明。 P1 ADMIN-002、ADMIN-003、CONTENT-004、MSG-004、POINT-004、SUPPORT-004 运营可独立发布/下架/处理反馈及定位异常;业务字段无占位数据。 0.5–1

4.15 RELEASE|联调、测试与发布

目标: 使一期全量范围在真实H5和实际服务渠道完成可复验发布。 阶段: M4。剩余: 7–11人日。

  • 现状: 此前基础测试与Web/Android编译通过,仅证明对应基础范围;未有全业务上线验收。
  • 前端: 普通桌面/手机/微信内H5、上传/键盘/回跳/弱网、深链接和版本更新回归。
  • 后端: 全链路、并发、权限、真实渠道、迁移和恢复;部署队列守护及错误/费用监控。
  • 数据: 使用脱敏测试数据与独立环境;新增迁移先预检/备份/演练;禁止用旧备份覆盖新业务数据。
  • 接口: 对本章所有一期API及渠道执行自动与手动验收,记录版本、环境和证据。 具体方法和字段见第5章;匹配分页/详情、公共产品详情已实现,公共产品列表仍计划新增。
  • 异常与边界: 未完成任一必做能力不能标首发完成;生产配置不允许模拟Token、固定报告和占位协议。
任务编号 任务与交付范围 优先级 前置任务/外部条件 验收条件 人日
RELEASE-001 核心与权限回归:完整个人/企业流程、跨用户攻击、金额边界、幂等、产品变更及并发用例。 P0 REPORT-004、LOGIN-004、AUTH-004、ADMIN-004 关键用例通过且有证据;无阻断或高危未解决缺陷;所有一期模块进入验收。 2–3
RELEASE-002 H5与第三方真实验收:普通手机/桌面/微信内浏览器,键盘/上传/回跳/断网/弱网及全部渠道成功失败验证。 P0 RELEASE-001 真实渠道与目标浏览器矩阵通过;不是仅编译通过或mock成功。 2–3
RELEASE-003 部署与恢复演练:分环境配置、增量迁移预检、HTTPS、队列守护/告警、备份恢复、发布回滚手册。 P0 RELEASE-001、ADMIN-003、EXT-DEPLOY 干净测试环境可部署;有数据环境升级可恢复;不重跑旧空表限定迁移。 1.5–2.5
RELEASE-004 首发验收与发布记录:核对范围/外部依赖/验收证据,正式发布检查,发布后冒烟及回退条件。 P0 RELEASE-002、RELEASE-003 所有一期必做项已验收;生产无demo数据/占位协议/模拟Token;记录实际版本和时间。 1.5–2.5

5. 目标 API 契约

5.1 实现状态与通用规则

本章区分已实现与目标契约;已实现密码登录、本人资料读取/更新、头像上传、退出、原密码改密、正式评估提交/历史/详情/状态。短信仅实现503未配置响应,其余仍待开发。 已有FastAdmin通用控制器,现使用api/controller/v1/Base.php、Session.php和Assessments.php;未列为已实现的前端同名方法仍是接口占位。AUTH可复用通用服务实现,其他模块需新增业务控制器及路由。旧接口保留兼容,新H5统一走版本前缀;管理后台保持原路由。

方法与路径(省略/api/v1) 当前实现状态 本轮边界
POST /auth/password-login 已实现并本地联调 既有手机号账户、密码验证、旧散列升级、Redis会话;沿用账户失败次数限制,IP级频控待补
GET /account/profile 已实现并HTTP验证 返回userId/nickname/avatarUrl/phoneMasked;完整security字段待补
POST /auth/logout 已实现并本地联调 撤销当前Token;成功或已401清本机会话,网络失败保留以便重试撤销
PUT /account/password 原密码方式已实现并验证 verification=password;成功撤销全部会话;sms方式返回503
POST /auth/sms-code、/auth/sms-login 仅未配置响应 HTTP 503、data.errorCode=SMS_NOT_CONFIGURED,无短信发送或注册
PUT /account/profile、POST /account/avatar 已实现并本地验证 昵称持久化、头像校验上传与附件归属;avatarId=null恢复默认
POST /assessments、GET /assessments、GET /assessments/:id、GET /assessments/:id/status 已实现并本地联调 已支持v2需求提交及v1/v2只读历史;自填报告/任务/retry已接,产品匹配待开发
GET /dictionaries 已实现并本地验证 公开用途字典及输入版本,no-store,地区等字典仍待补
POST /assessments/:id/retry、GET /assessments/:id/report 已实现并本地联调 幂等重试及resultVersion=1/2自填报告;真实产品/外部数据支线待开发
其余本章接口 计划新增 当前未配置的v1路由返回JSON 404,不判业务成功
项目 约定
API根地址 环境配置为https://业务域名/api/v1;前端服务函数只传后缀路径
鉴权 Authorization: Bearer会话令牌;用户ID来自认证上下文;管理端继续使用管理员权限
请求体 普通写请求application/json;文件multipart/form-data;回调按供应商要求读取原始体后验签
ID API统一字符串;DB仍用原主键类型;客户端不对ID做数值运算
成功包装 {code:1,msg:string,time:Unix秒,data:对象或数组};HTTP 200/201/202与实际行为一致
失败包装 code非1;data包含errorCode、可选fieldErrors、requestId;前端不把HTTP 200业务失败当成功
HTTP错误 400格式错误,401登录失效,403操作无权限,404记录不存在/不属于本人,409状态/版本冲突,422字段错误,429频控,503依赖不可用
错误实现 FastAdmin默认状态推导不足时显式传statuscode;兼容旧接口错误体但新接口使用稳定errorCode
分页 默认目标为page/pageSize;已实现评估历史使用cursor/limit和items/hasMore/nextCursor,默认20最大50,以第5.4节为准
列表范围 公开列表只取已发布有效内容;用户列表查询始终带user_id
金额与比例 元字符串两位小数;利率为百分数;月数整数;展示时通过统一金额服务换算
幂等 表格注明业务键;同键不同业务参数返回409;成功重复调用返回同一业务结果;前端显式重试复用原键
日志 可关联requestId/assessmentId/taskId;禁止输出令牌、密码、身份证、证件路径和模型密钥

写接口不采用“遇到任何超时自动重发”。只有明确具有幂等键或条件更新保障的操作可以安全重试;短信、授权交换和收费查询需确认服务端/供应商状态。

成功示例(模拟标识仅用于说明字段,不是实际测试数据):

{
  "code": 1,
  "msg": "评估已提交",
  "time": 1790000000,
  "data": {
    "assessmentId": "123",
    "taskId": "0123456789abcdef0123456789abcdef",
    "status": "processing",
    "stage": "queued"
  }
}

失败示例:

{
  "code": 0,
  "msg": "请检查填写内容",
  "time": 1790000000,
  "data": {
    "errorCode": "VALIDATION_ERROR",
    "fieldErrors": {"monthlyIncome": "金额必须大于0,单位为元"},
    "requestId": "req_example_0001"
  }
}

统一错误至少覆盖:VALIDATION_ERROR、AUTH_REQUIRED、RESOURCE_NOT_FOUND、STATE_CONFLICT、REVISION_CONFLICT、IDEMPOTENCY_CONFLICT、CONSENT_REQUIRED、ATTACHMENT_FORBIDDEN、RATE_LIMITED、QUOTA_EXCEEDED、PROVIDER_UNAVAILABLE、PROVIDER_RESULT_INVALID。面向用户的message使用中文;内部异常堆栈不直接返回。

5.2 主要数据类型

类型 字段与约束
Session token:string、userId:string、expiresAt:ISO时间、profile:Profile;令牌只在认证响应出现
Profile userId、nickname:string(2–20字符)、avatarUrl:string或null、phoneMasked、security状态;手机号完整值仅在必要且认证的操作中使用
AssessmentInput 已有v1字段保留;已实现inputVersion=2及需求四字段,详见专项契约第2节;新建最低版本2,旧v1仅原键重放;新建与历史重放版本策略见第7节
AssessmentStatus 已实现assessmentId、type、status:processing/succeeded/failed、statusLabel、message、submittedAt、city、errorCode;现已返回taskId:string、stage:queued/running/completed/failed、attemptCount:int、canRetry:boolean;completedAt暂不返回
Document attachmentId、type、name、mime、sizeBytes、status、createdAt;无永久公开证件URL
Consent consentId、scope、agreementCode、agreementVersion、grantedAt、revokedAt;第三方授权完成状态独立于本地意向
Product id、name、bankName、objects数组、amountMinYuan/amountMaxYuan:string、termMinMonths/termMaxMonths:int、annualRateMin/annualRateMax:string、regions、version、说明字段、当前可用状态
MatchResult(计划v2) productId/productVersion、eligibility、rank:int或null、score:number或null、positiveReasons/blockingReasons/cautions、evidence、aiExplanation、productSnapshot;当前complete的rank/score非空校验需升级,详见专项契约第5节
ProductSnapshot 产品ID/名称/版本、额度元字符串、期限月、年化百分数及必要准入说明;不可用当前产品字段覆盖
Report(已有自填版本) resultVersion:1、reportType:self_reported_analysis、assessmentId:string、generatedAt:ISO、modelCode:string、overallScore:null、facts数组、summary:string、observations:[{factId,text}]、suggestions:string[]、dataGaps:string[]、matchingStatus:unavailable、matchingMessage、disclaimer;有规则评分及产品快照版本仍计划新增
Report(已有v2自填支线) resultVersion:2、reportType:financing_needs_analysis、inputVersion、demand、facts、completeness、readiness、consistencyIssues、matching、summary/strengths/improvements/riskWarnings、policyVersions、systemWarnings、disclaimer;见专项契约第6节,matching当前只支持unavailable
Completeness / Readiness 服务器计算,均含status/policyVersion;未发布规则时计数/percent或code为null,不由模型生成;详见专项契约第3—4节
ReportDimension code、label、score:number或null、explanation、evidenceRefs;数据不足明确null,区分用户自填和渠道核验
Chat chatId、title、scene:assistant、contextAssessmentId:string或null、updatedAt
ChatMessage messageId、chatId、sequence:int、role、status、text、requestId、errorCode、createdAt;模型用量按权限返回摘要
Article/Lesson id、title、summary、imageUrl、category、publishedAt、version;课程chapters包含稳定chapterId、title、body
Message id、type、title、content、isRead、readAt、createdAt、target:{type,id}或null
PointsLedger id、delta:int、before:int、after:int、businessType、businessId、memo、createdAt
Feedback id、content、attachmentIds、status、reply、createdAt、handledAt;用户端不暴露无关管理信息

数据库JSON采用已有snake_case字段时,由DTO统一转换为camelCase;文档中的API对象不是直接暴露数据库行。当前match_result结构使用product_id/rank/score/reasons/product_snapshot;计划v2补eligibility、positive_reasons/blocking_reasons/cautions及evidence等字段,具体映射见专项契约第5.3节,不沿用单一reasons表达所有类型的解释。

5.3 基础、账户与第三方登录接口

以下表格均省略 /api/v1 前缀。公开表示可匿名,其他接口须登录,回调须通过指定渠道校验。

方法与路径 权限 入参 data响应 错误/幂等要点
GET /home 公开,登录后附本人摘要 无 banners、recommendations、assessmentSummary、unreadCount 未登录的个人字段null;内部聚合失败不伪造数据
GET /dictionaries 公开 无 assessmentInputVersions:int[]、minNewAssessmentInputVersion:int、financingPurposes:{version,items} 已实现;no-store;用途项type/code/label:string、requiresDetail/enabled:boolean;地区等字典待补,不读取已删除fa_area
POST /auth/sms-code 公开;绑定用途需有效bindingTicket phone:string、purpose:login/bind-phone、bindingTicket仅绑定时必填、requestId challengeId、retryAfterSeconds 频控;同requestId不重复发送;绑定挑战关联bindingTicket与目标手机号,登录验证码不可用于绑定
POST /auth/sms-login 公开 phone、challengeId、code:string Session 验证码核销;手机号唯一;错误不暴露账户细节
POST /auth/password-login 公开 phone、password:string Session 限流;旧密码登录遵循原验证,成功后升级散列
POST /auth/logout 登录 无 空对象 撤销当前Token;成功或已401清本机会话,网络失败保留并提示重试
GET /account/profile 登录 无 Profile 只能当前账户
PUT /account/profile 登录 nickname、avatarId可选 Profile 头像需归属当前用户;不再传任意data URL直接落资料字段
POST /account/avatar 登录 file attachmentId、avatarUrl 仅支持白名单图片,按现有500KB约束起步并服务端复核
POST /account/security/sms-code 登录 purpose:password/phone-current/phone-new、newPhone可选、requestId challengeId、retryAfterSeconds 当前手机号从账户取;新号码验证绑定当前用户与目标号码
PUT /account/password 登录 verification:password/sms、oldPassword或challengeId+code、newPassword reLoginRequired:true 新密码8–32位可打印ASCII、含字母和数字、无空格;撤销全部Token
PUT /account/phone 登录 newPhone、currentChallengeId/currentCode、newChallengeId/newCode reLoginRequired:true 两组挑战同事务核销;唯一约束冲突409;不能仅验新号码
GET /auth/wechat/authorize 公开 scene、returnPath白名单路径 authorizeUrl、flowId state服务端生成绑定流程;禁止开放跳转
GET /auth/wechat/callback 渠道回调 code、state 受控重定向至前端的一次性ticket 核销state;不把Token放URL
POST /auth/wechat/exchange 公开 flowId、ticket Session或bindingRequired+bindingTicket ticket一次性使用,过期拒绝
POST /auth/oneclick/init 公开 scene、requestId flowId、expiresAt、必要的短期SDK初始化配置 独立生成并绑定当前浏览器流程,不复用微信flowId;不返回渠道私钥;同键复用未过期流程
POST /auth/oneclick 公开 flowId、providerCredential Session或bindingRequired+bindingTicket 验证独立流程未过期并核销;服务端向供应商验证号码,不接受自报手机号;重复交换不得创建多个绑定
POST /auth/bind-phone 公开短期绑定凭证 bindingTicket、phone、challengeId、code Session 验证bind-phone用途及凭证/手机号绑定,同事务核销;现有账户必须证明所有权,冲突禁止自动合并

5.4 资料、评估、查询与报告接口

方法与路径 权限 入参 data响应 错误/幂等要点
POST /documents 登录 file、type、requestId Document 用户+requestId复用已成功附件;MIME/大小/内容/用途校验
GET /documents/:id 所有者 无 Document及短期访问凭证或鉴权文件响应 所有者检查;凭证过期;不提供公开证件URL
DELETE /documents/:id 所有者 无 删除状态 重复删除幂等;已被冻结评估引用的资料按留存规则处理
GET /agreements/:code 公开 version可选 code、version、title、content、effectiveAt 请求指定版本必须得到同一正文
GET /consents 登录 scope可选 Consent列表 仅当前用户
POST /consents 登录 scope、agreementCode、agreementVersion、requestId Consent 服务端记录时间;协议版本与展示一致;业务键幂等
POST /consents/:id/revoke 所有者 requestId Consent 重复撤销返回既有时间;停止新查询,保留历史证据
POST /assessments 登录 当前v2:type、requestId、form、documents:[]、consentIds:[]、moneyUnit:yuan;必填inputVersion=2及form.requestedAmountYuan/requestedTermMonths/purposeCode/purposeDetail assessmentId、submissionStatus:accepted v1原键回放与v2新建均HTTP201;v2已按专项契约校验元字符串/整数月/用途字典并冻结输入依据;同键同规范化内容同回执,异内容409,非法格式422;仅确认资料持久保存,不等于已派发分析任务
GET /assessments 登录 type/status可选、cursor:string可选、limit:string默认20上限50 items、hasMore:boolean、nextCursor:string或null 已实现;只本人且未软删除、非draft;id倒序且后页id小于cursor,避免新增记录挤动页码
GET /assessments/:id 所有者 无 AssessmentStatus + moneyUnit:yuan + form;已返回inputVersion、四个需求字段及冻结purposeLabel(金额元字符串) 已实现v1/v2只读;旧v1需求字段为null并标注未采集,v2已提交需求不可编辑;手机号掩码、身份证仅已提供标记,无密文/完整号码;越权与不存在均404
GET /assessments/:id/status 所有者 无 AssessmentStatus 已实现;仅processing时每5秒轮询,离开停止;不自动跳转原型报告
POST /assessments/:id/retry 所有者 requestId:string,8–64位字母/数字/下划线/短横线 assessmentId:string、taskId:string、status:processing、stage:queued 已实现HTTP202;仅failed创建新尝试;同键始终回放原尝试;不同用户404、状态/次数上限409、日额度429、配置未开放503;不覆盖输入
GET /assessments/:id/data-queries 所有者 无 查询列表及来源摘要 原始敏感结果不直接下发
POST /assessments/:id/data-queries 所有者 scope、consentId、requestId queryId、status 服务端按状态与渠道限制发起;有效授权+业务键;HTTP202
GET /data-queries/:id 所有者 无 queryId、status、source、sourceAt、errorCode、可显示摘要 费用/权限错误有明确状态;不返回渠道凭据
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节和规则契约第8节
GET /assessments/:id/matches/:productId 所有者 无 该次匹配结果、理由、证据和快照 已实现;只读本次已评估项;越权/快照无该产品404;不从当前公共产品拼历史
GET /products 公开 type/regionCode可选、page/pageSize Product分页 仅当前有效上架产品;不返回用户分数
GET /products/:id 会员Bearer 无 公共产品DTO 已实现;公共指不含个人结果,并非匿名;下架/过期404;历史快照从本人匹配接口读取

当前已实现自填分析支线(提交→数据库queued→Redis→DeepSeek→报告);以下授权查询和产品规则主流程仍待实现:提交后检查授权 → 获取选定的外部结果 → 冻结查询引用 → 规则匹配 → DeepSeek解释 → 原子保存正式结果。未选择可选外部授权时使用自填资料并标记来源;已选择查询但失败时是否允许降级到自填,需要DEC-QUERY形成明确规则。该规则未定稿前,相应错误按失败处理,不静默忽略。

分析页当前只对processing每5秒轮询,离开页面停止前端轮询但不取消服务端任务;重新进入按assessmentId恢复。供应商总超时90秒、连接超时10秒,执行租约至少180秒、Redis reserved到期240秒,不按前端10秒请求超时推断AI执行失败。

statusLabel和message按服务端阶段返回:queued为“排队中”、running为“分析中”;排队60秒/运行90秒起显示耗时较长提示。接口状态仍为processing,canRetry仍为false;该提示不等同任务失效。状态查询失败时前端停止本次轮询并提供手动刷新,不显示旧的重试或报告按钮;重试请求进行中不并发刷新,回执丢失保留requestId以安全回放。

当前v2正式提交示例(所有路径前缀/api/v1,Bearer必填)

{"inputVersion":2,"type":"enterprise","requestId":"submission_example_001","moneyUnit":"yuan","form":{"name":"示例联系人","phone":"19900000001","city":"深圳市","cityCode":"440300","enterpriseName":"示例企业","businessCode":"91440300123456789A","annualRevenue":"1201234.56","operatingMonths":18,"creditLoanCount":0,"totalDebtBalance":null,"requestedAmountYuan":"123456.78","requestedTermMonths":12,"purposeCode":"working_capital","purposeDetail":null},"documents":[],"consentIds":[]}

成功HTTP201:{code:1,msg:"评估资料已保存",time:<Unix秒>,data:{assessmentId:"123",submissionStatus:"accepted"}}。同键相同规范化内容重复返回相同data。GET /assessments?limit=20&cursor=123继续读取更小ID;data为{items:[AssessmentStatus],hasMore:boolean,nextCursor:string|null}。详情额外含form,金额始终是元字符串或null,客户端转万元。当前新建最低版本为2,示例已包含需求四字段;历史v1原键回放仍保留。

422 VALIDATION_ERROR表示字段、枚举、金额或分页错误;422 ASSESSMENT_ATTACHMENTS_UNAVAILABLE表示携带尚不支持的附件/授权;401 AUTH_REQUIRED表示未登录;404 ASSESSMENT_NOT_FOUND不区分越权与不存在;409 REQUEST_CONFLICT表示同键异内容或记录已移除。草稿路径及修改已提交资料未开放;retry已按上表实现;路由采用完整匹配。

当前枚举:maritalStatus=married/single/divorced/widowed;house/car=yes/no;socialSecurity/housingFund=six_months_plus/under_six_months/none,均允许null。计数字段creditLoanCount/creditCardCount/operatingMonths是0–9999的整数或null。个人必填name/idCard/phone/city/monthlyIncome>0,企业必填name/phone/city/enterpriseName/businessCode/annualRevenue>0;类型专属字段不得交叉混入。

5.5 助手、内容、消息、积分与客服接口

方法与路径 权限 入参 data响应 错误/幂等要点
POST /assistant/chats 登录 title可选、contextAssessmentId可选、requestId Chat 创建键幂等;引用评估须本人;scene由服务端固定
GET /assistant/chats 登录 page/pageSize Chat分页 当前用户普通会话
GET /assistant/chats/:id/messages 所有者 beforeSequence可选、pageSize items、nextBeforeSequence 序号稳定;不泄露内部system提示词和密钥
POST /assistant/chats/:id/messages 所有者 message:string、requestId userMessageId、assistantMessageId、status:pending HTTP202;会话+请求+角色唯一;文本长度限制在CHAT-001冻结
GET /assistant/messages/:id 所有者 无 ChatMessage 用于异步回复轮询
POST /assistant/messages/:id/retry 所有者 requestId assistantMessageId、status 仅失败回复;保留历史尝试信息,成功消息不重复调用模型
GET /content/articles 公开 category、page/pageSize Article分页 仅已发布;分类白名单
GET /content/articles/:id 公开 无 Article及正文 下架/不存在返回404
GET /content/lessons 公开 category、page/pageSize Lesson分页 图文课程
GET /content/lessons/:id 公开 无 Lesson及chapters 稳定章节ID
GET /content/lessons/:id/progress 登录 无 completedChapterIds、lessonVersion 只当前用户
PUT /content/lessons/:id/progress 登录 chapterId、lessonVersion、completed:true 最新进度 重复完成幂等;不存在章节拒绝
GET /content/search 公开 keyword、type:all/news/lesson、page/pageSize items及分页 仅已发布;多词AND沿用现有体验;长度/频率限制
GET /help/faqs 公开 category可选 items:{id,category,question,answer}[] 后台可维护,实际行为变更时同步文案
GET /messages 登录 type、page/pageSize Message分页 当前用户;排序稳定
GET /messages/unread-count 登录 无 count:int 与列表读状态一致
POST /messages/:id/read 所有者 无 Message 幂等,不重复改首次readAt
POST /messages/read-all 登录 upToId affected、unreadCount 仅更新水位及之前消息,防误读并发新增通知
GET /points 登录 无 balance:int、signedToday、ruleVersion 服务端账本为准
GET /points/ledger 登录 page/pageSize PointsLedger分页 只本人
POST /points/check-in 登录 requestId delta、balance、signedDate 唯一业务键=用户+签到日期;服务端时区
GET /points/tasks 登录 无 任务规则、状态、奖励条件 状态来源真实业务事件
GET /invitations 登录 无 personalCode、shareUrl、统计摘要 真实唯一邀请码,隐去受邀人敏感信息
POST /invitations/bind 登录 inviteCode、requestId bindStatus 首次绑定、禁止自邀、已有关系不覆盖
POST /feedback 登录 content、attachmentIds、requestId Feedback 非空且当前表内容最长255字符;附件归属;幂等
GET /feedback 登录 page/pageSize Feedback分页 只本人
GET /feedback/:id 所有者 无 Feedback 处理回复可读
POST /support/session 登录 scene、returnPath可选 客服渠道、短期会话配置、online/offline状态 服务端身份签名;不下发供应商私钥;会话复用策略按供应商核验

5.6 对现有占位接口的迁移

  • POST /assessments仅负责正式提交,不创建可续填草稿;确认页必须保存返回assessmentId。
  • 原GET /matches替换为GET /assessments/:id/matches,避免读取不明确的“最近结果”。
  • 原POST /assistant/messages的message→reply同步接口,替换为会话消息异步接口,避免前端超时导致重复请求模型。
  • 原FinanceProduct同时承载公共信息和score的结构,拆成Product与MatchResult;旧amount万元兼容仅在过渡适配器,正式API始终返回amountMinYuan/amountMaxYuan。
  • 账户修改资料从data URL改为上传得到avatarId;安全短信增加challengeId并绑定用途/目标,旧客户端占位字段同步修改。
  • news/lesson/search必须同时替换数据源,防止搜索返回真实ID但详情仍查本机数组。
  • 模拟与真实模式在开发环境显式区分;生产构建禁止缺配置时回退模拟。

6. 工时、里程碑与实施顺序

6.1 初始工程量基线(当前剩余量待重估)

模块 功能板块 阶段 基线人日
BASE 基础接口与环境 M0 3–5
AUTH 账户与短信安全 M1 5–8
LOGIN 微信与一键登录 M1 5–10
FILE 资料与授权 M1 4–7
ASSESS 评估与融资档案 M2 5–8
DATA 外部征信或数据查询 M2 6–12
PRODUCT 产品库与匹配规则 M2 6–9
REPORT AI任务、报告与历史 M2 8–12
CHAT AI助手 M3 4–7
CONTENT 内容、课堂、搜索与FAQ M3 4–6
MSG 消息中心 M3 2–4
POINT 积分、任务与邀请 M3 4–7
SUPPORT 反馈与人工客服 M3 3–6
ADMIN 后台运营与排障 M3 3–5
RELEASE 联调、测试与发布 M4 7–11
合计 15模块、60任务 M0–M4 69–117

每周按5个工程工作日计算,约14–24个工作周。AI辅助效率已经纳入估算,不再乘额外提速系数。该区间不是承诺发布日期,未包括供应商商务、资质、短信模板、域名、审核和运营资料等待。

每类渠道暂按一个服务商、一次首发H5方案计。若个人/企业数据需要多个供应商、更多独立授权或首次方案不支持目标浏览器,必须据实调整DATA/LOGIN相关任务与总量。模块工时包含自身开发者测试,RELEASE为跨模块真实联调和发布演练;历史数据库优化不重复计量。

6.2 阶段门槛

阶段 交付目标 工程人日 累计人日 退出门槛
M0 契约与接入准备 BASE;同时启动各供应商与业务规则准备 3–5 3–5 统一契约可解析,环境与用户隔离方案可联调;依赖清单有责任人
M1 账户与资料 AUTH、LOGIN、FILE 14–25 17–30 真实账户、支持场景的第三方登录、私有资料和正式授权通过
M2 融资核心 ASSESS、DATA、PRODUCT、REPORT 25–41 42–71 个人/企业真实评估→查询→匹配→DeepSeek报告→历史各完成闭环
M3 全部页面业务化 CHAT、CONTENT、MSG、POINT、SUPPORT、ADMIN 20–35 62–106 所有功能有真实数据与后台操作,助手/人工客服可用
M4 H5首发 RELEASE 7–11 69–117 所有一期必做项验收、恢复演练、发布后冒烟与证据完整

M0启动其他模块的渠道申请不重复计算其工程工时;设计和等待可提前,实施工时仍记对应任务。单人不能按多人并行把独立模块时长直接减半。受阻时优先穿插CONTENT/产品规则/后台等具备前置条件的工作,不把一期项目降为二期。

flowchart LR
    A["M0 接口、环境与渠道准备"] --> B["M1 账户、身份与私有资料"]
    B --> C["M2 评估与授权查询"]
    P["产品资料与版本化规则"] --> D["匹配与 DeepSeek 报告"]
    C --> D
    D --> E["M3 助手、消息与运营"]
    F["内容、课堂、积分、客服"] --> E
    E --> G["M4 H5 全量验收"]
    T["所有第三方真实接入证据"] --> G

后续多端单独开里程碑:微信小程序的AppID/合法域名/包体/平台授权与审核,Android签名与真机上传/登录能力,iOS的macOS/Xcode/签名与审核。继续保留跨端编译回归,但不把Windows生成iOS源码视为真机或IPA验证。

7. 外部依赖与必须定稿的规则

下表只记录准备要求,不收集密钥。具体状态、责任人、预计解除时间和证据维护在开发进度第5章。未选供应商不影响文档交付,但会阻塞真实接入及全量上线。

编号 当前状态 需要取得的条件 对应任务
EXT-SMS 待选型 服务商、签名模板、用途、测试号码、频控及发送回执 AUTH-001
EXT-WX 待确认产品和平台资源 公众号/开放平台类型、适用H5场景、回调域名、授权和身份字段能力 LOGIN-001、LOGIN-002
EXT-ONE 待选型 H5号码认证产品、运营商/网络/浏览器矩阵、SDK与服务端校验、测试环境 LOGIN-001、LOGIN-003
EXT-STORAGE 待选型 私有存储方案、访问控制、文件限制、备份与生命周期 FILE-001
EXT-DATA 待选型 实际可开通数据产品、个人/企业接口、授权要求、样例、回调/查询和费用状态 DATA-001
EXT-AI 两个指定模型已真实可用,Flash自填分析通过 JSON输出及tokens/耗时已核实;供应商余额、价格对账、商业预算仍待确认 REPORT-001
EXT-CS 待选型 H5接入、访客身份、坐席、在线/离线、历史与附件能力、工作时间 SUPPORT-001、SUPPORT-003
EXT-DEPLOY 待确认 测试/生产资源、域名/HTTPS、Redis/worker守护、备份与监控 RELEASE-003
编号 需确认内容 定稿任务及产物
DEC-PRIVACY 资料用途、可选项、正式协议正文与版本、保留期限、撤销后处置、第三方必要字段 FILE-001、FILE-003:协议和数据生命周期清单
DEC-QUERY 首发数据查询种类与个人/企业范围、拒绝/失败后的自填路径、重查与费用归属 DATA-001:页面授权到数据产品映射及失败策略
DEC-DEMAND 已确认并于本地发布:用途字典、other说明、v2新建必填及最低版本2;见0.5 ASSESS-001:发布的需求字典、校验样例与兼容计划;见专项契约第2/7节
DEC-READINESS 已按用户授权采用首版并发布开发版:等权字段集/条件项、准备状态及一致性规则;生产业务验收待完成 REPORT-003:发布策略、策略版本与人工样例;未发布返回policy_unconfirmed
DEC-MATCH 开发口径已采用既有三态、来源门槛、单产品覆盖、无评分和productId升序;真实产品规则及人工金标准待签收 PRODUCT-001、REPORT-003:规则编译/冻结、业务样例与正式发布验收
DEC-PRODUCT 首发真实产品及金额/期限/利率/地区/准入依据、有效期和运营责任人 PRODUCT-003:可发布产品资料与运营确认记录
DEC-AI 模型已确定;单用户/评估额度、超时重试、成本预算与超额策略待定 REPORT-001:配置及额度规则
DEC-POINT 签到/资料/邀请奖励数额、次数、可信达成条件、权益/有效期 POINT-001:活动规则及正反样例

技术默认项:每类服务商首期一个;站内消息优先;课堂为图文;助手先异步完整回复;时间业务口径Asia/Shanghai;列表pageSize=20、上限50。业务分数、奖励数额、查询费用、模型名和数据保留期限不擅自定为上线规则。

DeepSeek已通过真实请求与自填报告验证,但不代表供应商余额充足或生产容量已验收。一键登录也不能依据“原生App有SDK”推断H5全场景可用;若渠道不支持已承诺场景,先形成能力差异和影响,再记录用户的范围决定,不能静默删项。

8. 验证、发布与文档维护

8.1 测试分层与验收条件

  1. 纯逻辑/服务测试:金额边界、字段映射、规则执行、版本快照、密码兼容、授权状态和评分人工样例。
  2. 数据库/API集成:两个以上账户进行越权读写;并发提交/重试/积分;鉴权、业务错误、附件归属、事务和幂等。
  3. 故障与渠道测试:短信失败、OAuth取消/重放、查询拒绝/超时/回调伪造、DeepSeek无效输出/配额不足、队列漏投和worker中断、客服离线。
  4. H5端到端:个人和企业各完成真实流程;刷新恢复、历史报告、产品更新、助手、课程跨设备、消息、积分邀请、反馈与人工坐席。
  5. 发布恢复:干净环境初始化、有数据增量升级、备份恢复、密钥恢复、队列守护、回退后数据保全及发布冒烟。

必须覆盖的具体结果:

场景 必须满足的结果 归属
金额换算 0.800001万元=8000.01元;最大值、超限、负数、空值、0和精度均校验;不重复换算 ASSESS-004、PRODUCT-004
身份与越权 用户A不能读取/修改B的评估、证件、报告、会话、消息和反馈;改密/换绑后旧Token失效 AUTH-004、RELEASE-001
重复提交/历史重试回放 相同requestId只一条正式会话;多次重试后重放任一旧键仍返回其原taskId、不再次执行;同键参数冲突拒绝 ASSESS-003
任务故障 派发失败、重复消费、worker退出、旧taskId回写均可恢复或安全拒绝 REPORT-002
历史稳定 同类型多次评估分别保留;产品改价/下架不改变历史快照 PRODUCT-004、REPORT-004
缺失事实 未知字段不当0,渠道失败不当无风险;AI不得创造不存在的额度/审批承诺 PRODUCT-002、REPORT-003
融资需求v2 金额/期限/用途校验、版本切换和旧键重放通过;历史NULL不补造需求 ASSESS-001、ASSESS-003、ASSESS-004
完整度与准备等级 0与null、条件分母、四舍五入和一致性分开;未发布无分/等级;不等同授信 REPORT-003、REPORT-004
匹配解释v2 fail+unknown不推荐,证据可复算;不凑理由;配置错误不变用户不符;null rank/score合法 PRODUCT-001、PRODUCT-002、PRODUCT-004、REPORT-003
私有资料 无登录/跨用户无法读取,撤销后不新增查询;授权版本可追溯 FILE-004、DATA-004
课程进度 章节重排不串记录,重复完成幂等,换设备一致 CONTENT-003
积分并发 同日并发只奖励一次,流水与余额一致;复制/分享不视为实际邀请成功 POINT-004
消息一致 重复事件只一条通知,全部已读不吞之后的新通知 MSG-004
第三方登录/客服 真实支持场景成功与失败都验证;真人接待/离线留言有证据 LOGIN-004、SUPPORT-004
上线完整性 25页均有真实数据来源;无模拟Token、固定报告或占位协议;必做渠道全验收 RELEASE-004

完整执行台账见开发进度第6章。每条实际记录需包含日期、环境/构建版本、前置测试数据、操作、预期/实际、脱敏证据、缺陷和验收人。文档中的“待执行”不能自动转为通过。

8.2 已有验证与后续命令

前序任务记录:2026-09-22,41项基础测试通过、Web与Android本地编译通过、金额相关浏览器检查通过。它们不覆盖本章真实业务;初始文档交付未重跑;实施后的验证另见进度文档第0章。测试脚本存在可复核,前序浏览器/编译独立日志未归档,不能补写不存在的证据路径。

后续业务实施可使用下列现有命令。PHP基础测试会操作数据库并在外层事务回滚,应在核对后的测试环境执行;当前文档任务不执行它。HBuilderX命令是运行/本地编译,不是正式发布。

# 后端基础回归:在后端目录,确认使用测试数据库后执行
Set-Location 'D:\AAdesk\202609\airz'
& 'D:\Develop\phpstudy_pro\Extensions\php\php7.4.3nts\php.exe' tests/finance.php

# 前端:在HBuilderX中运行及本地编译
Set-Location 'D:\WorkSpace\cyun\ai融资'
& 'D:\Develop\HBuilderX\cli.exe' open
& 'D:\Develop\HBuilderX\cli.exe' launch web --project 'D:\WorkSpace\cyun\ai融资' --compile false --continue-on-error false
& 'D:\Develop\HBuilderX\cli.exe' launch app-android --project 'D:\WorkSpace\cyun\ai融资' --compile true --continue-on-error false

目标H5矩阵包括桌面Chrome/Edge、Android主流浏览器、iOS Safari及微信内置浏览器。具体版本/设备在RELEASE-002记录;iOS Safari的H5验证与iOS原生App构建是两件事。共享UTS修改后保留Android编译回归,正式App发布另计。

8.3 部署、迁移与恢复

  • 部署材料需说明前端静态资源/路由回退、后端入口、HTTPS/CORS、环境变量、私有文件存储和数据库版本。
  • Redis与think-queue配置存在不代表worker已运行;配置守护、重启、积压/失败/超时告警及失联任务补偿。
  • 新环境初始化需依赖顺序、管理员/配置等必要种子数据;现有schema.sql是结构快照,不能当完整安装包直接导入。
  • 增量迁移记录前置版本、数据预检、备份、回填、约束验证和失败恢复;已有业务数据环境禁止盲目重跑旧空表限定迁移。
  • 回滚需保留上线后新增业务数据;数据库DDL不能当作整批事务可回滚。密文恢复依赖对应加密密钥,备份恢复演练须包含密钥恢复且不将其写入文档。
  • 监控至少记录任务积压/耗时/失败、短信和查询失败、DeepSeek消耗/预算、文件访问拒绝和接口错误,并通过业务ID关联排障。
  • 发布前所有一期必做任务有验收证据;上线后完成登录、个人/企业评估、历史、内容及客服冒烟。实际发布是后续RELEASE任务;当前仅在本地实施与验证,未发布。

8.4 两份文档的维护方式

开发文档维护“要做什么、接口和验收是什么”;进度文档维护“做到哪里、依据是什么、谁来处理阻塞”。任务新增/拆分保留旧编号和变更理由,工时与依赖在两份文档同步。维护者每次任务结束更新状态、实际证据、日期和下一步。

初始文档交付验收清单:25页覆盖、60任务编号和字段一致、所有内部依赖存在且无环、模块与总工时相符、互链和源码链接有效、UTF-8无BOM、无凭据/个人数据。初次交付仅新增两份Markdown;后续代码与本地数据库变更见第0节及进度台账。文档完成不计为业务任务完成。