- 增加账户状态监听定时器,页面切换时自动校验账户归属,避免跨账户操作 - 新增登录回跳路径校验函数,限制仅允许指定页面回跳,防止非法跳转 - 课程页改为整篇连续阅读,底部仅一次标记已读,兼容历史记录 - 完善助手、对比页、资料填写页等多处的账户状态校验逻辑,防止错版数据提交 - 优化账户资料请求逻辑,增加版本校验,避免旧请求覆盖新数据
187 KiB
AI 融资平台开发文档
版本:v1.46 · 基线日期:2026-09-22 · 更新日期:2026-10-05 · 状态:用户确认此前小程序端已发布,版本号/渠道未提供;后端已于10月4日发布,最新记录见交接及后端deployment-baota.md。反馈回复通知、会员反馈原键恢复及后台反馈处理增强为新增源码,尚未配套发布;新前端依赖后端requestId回执,反馈目标需配套更新前端。0.57—0.59的配套文件、顺序、兼容性和回滚准备见反馈与消息发布清单,当前未部署/发行。积分默认关闭、DEC-POINT待确认、原表未迁移;H5未部署、真机及多设备待验收。最新资料/评估版本及会话精简约定保留。
0.59 2026-10-04 反馈回复与站内消息契约
后台处理时 resolved/closed 非空回复为有效通知事件,复用 fa_user_message:type=2,business_type=feedback_replied,business_id=feedback_id。既有 (user_id,business_type,business_id) 唯一索引原子去重,每条反馈首次有效回复通知一次;相同保存、修订回复及后续状态变化不增通知、不重置已读,点击后查看当前回复。处理中、空回复、匿名或已删除会员跳过,不自动补发未修改的历史反馈。通知正文仅提示查看,不包含原文或回复。FeedbackEditor 将回复、审计及通知写入同一事务,通知错误返回503 FEEDBACK_NOTIFICATION_UNAVAILABLE 并回滚全部变更;审计失败同样回滚。
本人消息详情增加 target:{kind:feedback,feedbackId:string};反馈必须仍存在并属于同一鉴权会员,否则 target:null,targetUnavailable:true。旧评估目标契约不变。前端只构造 /packages/content/help/help?feedback=1&feedbackId=<正INT编号>,详情通过已有本人接口单独读取并核对响应ID,不依赖列表首页。帮助页局部错误可重试;退出/换账户清理已显示回复和旧目标,离页拒绝迟到回包。登录白名单只保留合法反馈编号,重新鉴权后再次校验归属。消息旧列表点击、全部已读和弹窗确认均先核对页面所属Token。
无需DDL或新路由。部署时配套更新后台处理服务、UserMessages.php 和消息/反馈/登录前端,旧前端不能解析新增目标;本轮未发布或正式验收。后端142项、页面48项隔离检查及27页面Android/微信编译通过,环境/证据/私密文件保留情况见台账0.59。
0.58 2026-10-04 会员反馈未知提交恢复契约
发送前用当前鉴权会员ID生成 airz:v1:user:<userId>:content.feedback.pending,只保存并回读 {requestId:string, content:string},内容为用户本次确认发送的去首尾空白原文。普通编辑草稿不持久化,待确认记录不含Token、反馈列表或回复。已有未知命令优先恢复,锁定原内容并保留原键;刷新/离页/进程重启不自动发送,须点击“确认上次提交”,列表不可读也不阻止确认。退出/401/会话切换的缓存清理保留该例外,原会员重新鉴权前不能恢复到页面或发送,另一会员不能接管。
后端 Feedback DTO新增 requestId:string|null,历史NULL保持;新提交与原键重放返回相同请求键,重放返回该记录最新处理状态,不重置正文/状态/时间。前端POST回执先核对原键再严格解析,之后比较本机待确认命令才删除;清理失败继续原键确认。确定的400/413/422且业务码为 VALIDATION_ERROR 或 FEEDBACK_ATTACHMENTS_UNAVAILABLE 才弃键并保留可编辑原文,网络/401/服务不可用/409/坏回执继续保留。页面以账户、Token及代次阻止迟到结果回填,存储异常或坏记录阻止新提交并提供“重新读取提交状态”,不得按空记录覆盖。H5读取空值须结合键是否存在判定,删除成功按键不存在核验。
新前端须在后端回执支持 requestId 后或与其配套发行,否则旧后端已入库但前端不能核对成功。此次复用既有请求键列和唯一索引,无新增DDL;本轮未部署/发行、未正式验收。后端67项、页面93项隔离检查、Android/微信编译与环境清理状态见台账0.58及交接最新节。下一开发项为反馈回复与消息通知联动。
0.57 2026-10-04 反馈处理并发保护与事务审计
后台 feedback/edit GET 生成 CSRF 和处理快照 row[expectedVersion],POST业务字段恰好为 row[status/reply/expectedVersion]。SHA-256版本包含原文、状态、回复、处理归属和原始时间,不能用秒级时间单独判定冲突;在反馈行锁内核验,旧页面以 FEEDBACK_VERSION_CONFLICT 拒绝,当前输入保留,须重新打开核对后提交。
FeedbackEditor 在事务内锁定并复核管理员、有效角色及 feedback/edit 权限,复用 FeedbackRecords::handle 保存。成功审计与反馈同事务,FEEDBACK_AUDIT_UNAVAILABLE 表示此次修改未保存;同状态同回复保持处理元数据并不写重复成功审计。成功/拒绝及历史读取均投影安全白名单,回复、原文、CSRF和未知字段省略,不新增表或权限节点。页面/控制器/服务/管理员日志及反馈JS需配套发布,JS将版本冲突持续显示在表单内并保留输入;新控制器拒绝缺版本/CSRF的旧后台表单,小程序会员反馈接口保持原契约。隔离检查结果见台账0.57,不视为正式验收。
0.51 2026-10-02 积分页面恢复与隔离联调
页面按加载所属Token和页面代次隔离请求;账户切换后的规则、任务、分页、签到及明细展开操作先清旧状态并读取新账户。四读取接口先暂存,校验日期、时区、版本、奖励及签到状态一致后统一展示;失败显示不可用与重试,不把读失败显示成零积分或无记录。
按账户保存的未知签到请求优先于今日已完成状态;加载开始即恢复原键,当前规则或流水读取失败仍可POST确认原成功回执。共享 ApiRequestError 提供HTTP状态/错误码,只有服务器明确拒绝且未入账的409日期/规则/已签/请求/余额错误、422参数错误及503规则不可用可弃旧键;网络、写冲突、账本不可用及坏回执保键。成功回执要求delta=1..1000、balanceAfter=0..2147483647、replayed为boolean,并匹配原预期日期和版本;展示当前余额须重新GET,不能用历史balanceAfter覆盖。
隔离Chrome页面主流程98项/127次积分请求通过,123次进入真实本机后端,4次受控故障;两次真实提交后丢响应分别在刷新已签和当前规则损坏状态下用原键确认,流水不重复。覆盖20+7分页、NULL/零/负流水、原子读取、确定拒绝与坏回执、账户切换及迟到401。登录回跳只注入合成认证响应,非真实认证验收。手机/桌面截图、日志及清理证据见台账0.51及仓库外 airz-points-page-20261002 目录;页面开发检查不能代替生产原表迁移、业务规则批准或真机/发布验收。
补充81项/81次积分请求通过,主流程与补充共179项/208次请求(201真实后端、7受控故障),覆盖网络中断、流水503仍确认、分页/展开换账户和实际拒绝分类。共享会话清理仅保留原账户的三字段待确认命令,不含Token/资料;其它缓存与会话照常清除。恢复例外见积分契约v3,不能跨会员迁移、自动确认或替代鉴权。Android/微信最终编译通过,完整证据和边界以台账0.51为准。
401登录清理专项35项通过(15真实积分HTTP、2合成登录),实际丢响应→撤销Token→清会话/资料、留原键→重新登录→原键重放且不重复入账。214项开发检查累计223积分请求,216次真实隔离后端、7次受控故障。临时数据库/Token/runtime/私密配置及服务已精确清理,未发布前端、迁移正式库或调用模型;后台重启本地预览被自动审批拒绝,当前无本轮预览服务。完整复现前须重新建立隔离环境。
0.50 2026-10-02 积分页面真实读取
积分页读取后端 /points、/rules、/tasks、/ledger,按服务端业务日、规则版本及有界流水游标渲染;空账本的 snapshotId=0 和历史 null 元字段按契约保留。移除本机签到天数、固定奖励和体验邀请码,未发布规则显示不可用,不以页面示例值兜底。
签到请求上下文按账户保存 requestId、expectedDate 和 expectedRuleVersion,网络结果不确定时复用原键确认,成功后重新读取余额。页面增加登录回跳、分页、加载/错误/空状态、Token/页面代次守卫;Android 与微信小程序编译通过。积分原表迁移、正式奖励发布、真实设备和开启规则后的到账验收仍待业务确认。
配套台账:开发进度。本文定义范围、接口和验收口径,台账记录实际执行与证据。 文档初始规划后已开始开发;以下更新记录优先于原始基线。除明确列为已实现的部分外,计划接口和增量数据仍待开发。
0.49 2026-10-01 积分协议与隔离开发检查
五个积分接口仅接受显式合法Bearer,不使用Cookie或旧Token头回退。签到须application/json(可选UTF-8 charset)及恰好三个唯一字符串字段,普通与Unicode等价重复JSON键均拒绝;查询校验原始QUERY_STRING、解码键白名单/唯一性及与PHP解析值一致,拒绝重复、NUL、坏编码和空片段。五条精确路由将错误方法交由积分守卫统一405,原始方法与有效方法必须一致、覆盖头拒绝;允许Origin的无令牌OPTIONS由既有Common入口处理。v1框架错误JSON补no-store,未知路由仍404;这一缓存头适用于其它v1框架错误,不改变其状态和错误体。
真实HTTP87请求/1079项检查通过,覆盖草案/发布/暂停/坏规则、跨日/版本冲突、丢弃已提交成功响应后的原键确认、账户停用/删除/撤销、本人快照分页/旧NULL/隐私、余额边界和Redis不可用。HTTP脚本使用独立临时ROOT/RUNTIME、随机ENV_PREFIX、新合成数据库及Redis DB15随机Token作用域,不加载仓库正式.env。测试数据库、Token、临时服务与文件已清理,原fa_user/score_log和原Redis队列摘要一致,无worker/模型调用。
新增非NULL历史流水时间校验(上海四位年份上限253402271999)和正UINT主键校验;NULL时间保留,首次快照坏主键返回POINT_LEDGER_INVALID。主服务238项、HTTP输入190项纯检查通过;23项原表只读预检通过,仍4增量/14类质量计数全0。业务规则未获确认,运行配置false/null,POINT-002保持开发中、POINT-003/004未实施,页面仍本机体验,27页面/63任务不变。下一开发子项可接积分页真实读取和原键确认状态;启用真实奖励、原表迁移及部署仍需明确安排。
迁移纯110项、独立apply/备份/Windows ACL/恢复89项通过。检查只复制共享库两表结构,另建两个随机合成库(2会员4流水);第一库apply4增量、重复apply0,二表完整schema+NDJSON备份恢复到第二库后逐列摘要一致,目录/3文件仅当前用户ACL及读写probe通过。实际演练修复Windows原生备份路径识别及父级路径拒绝,新增纯validateBackupPath检查。两新库、私密INI/备份/probe已按所有权清理,原表保持。安全回执在C:/Users/JUN/AppData/Local/Temp/airz-points-migration-20261001/apply-20261001-115749-d50a5cd87fd5a84a/verification.json;该恢复仅为合成环境检查,不是生产恢复方案执行证据。
0.48 2026-10-01 历史:积分后端基础(默认关闭、未迁移/未部署/未接页面)
新增PointsRules/UserPoints、v1 Points控制器及五条严格路由,复用认证会员身份,提供余额、规则、ID有界流水、每日签到和任务状态。配置安全默认enabled=false,ruleVersion/reward及权益/期限/等级策略为null;损坏或不可读规则固定失败,不能用体验10分兜底。每天10分、不自动过期、level不联动等仍是待确认建议,用户尚未定稿,DEC-POINT/POINT-001保持待确认;POINT-002仅后端基础开发中,POINT-003未做,POINT-004页面仍本机体验。27页面、63任务及编号不变,完整契约见积分规则与开发契约。
签到恰好requestId/expectedRuleVersion/expectedDate三个字段;先锁正常会员,再查成功请求回执,未命中才校验锁后上海业务日、固定当日事件和当前发布规则。余额与一条冻结流水同事务,原成功请求可跨日/暂停重放,回执balanceAfter只代表历史余额;同日异键拒绝,无零分占位。只有1062/1205/1213且明确回滚才返回写冲突,未知提交/回滚为账本不可用。流水只本人、字符串ID游标、历史NULL元数据保留,不返回自由memo;未实施资料/邀请任务为unavailable、reward=null。
旧通用后台score/level直接修改、伪造字段与旧User::score已封闭,原level 0/1初始化保持,不新增管理员积分调整。schema.sql和ScoreLog中文注释增加期望request_id CHAR(36)/rule_version VARCHAR(64),ASCII ascii_bin可空,唯一(user_id,request_id)与idx_user_point_id(user_id,id);原业务键/事件唯一/时间索引复用。新增显式积分迁移脚本,默认只读,apply须精确环境/目标、停写确认和双表完整私密备份;MySQL DDL隐式提交,不自动修复或整表恢复。脚本实际apply和ACL仍未运行,任何原fa_user/score_log未执行迁移。
本轮检查:主服务纯237项、旧写保护纯98项、迁移纯84项、隔离事务45项、只读预检22项及16PHP lint通过。事务检查只在127.0.0.1:3309/airz_product_test_20260930的随机pts_合成表执行,覆盖真正双PHP同键/异键、锁等待跨业务日及trigger故障回滚;原fa_user/score_log结构与数据摘要保持,合成表精确清理。相同精确目标连续两次实际默认只读迁移预检通过:4增量、13类质量计数各项0、applied=false,无backup/apply,原两表读前后结构/数据摘要一致;PDO原生事务追踪已修正。未连接正式库或默认.env,未HTTP/浏览器/Redis/worker/模型调用,未部署或进行运营/真机验收。下一步先确认业务规则、显式隔离迁移验证及HTTP开发检查,再接积分页面;后端源码/合成表测试不能作为页面已到账证据。
0.47 2026-10-01 历史:积分规则与开发方案草案
本轮仅整理积分规则与开发契约及后端积分数据库设计,没有实现API、签到到账、迁移脚本或部署,不执行数据库、运行测试或收费模型调用。POINT-001仍受DEC-POINT待确认阻塞,POINT-002/003/004未实施,任务总数63不变;文档方案不能作为运行能力或业务验收证据。
首阶段建议每日10分、服务端Asia/Shanghai每天一次且不补签,不启用连续加成,资料/邀请奖励关闭。本机体验签到及固定邀请码不导入、不补发;真实余额保留服务端score。奖励额、权益范围、有效期及会员level处理仍须明确确认,未发布配置安全默认停止新入账且奖励为null,不能用页面10分兜底。旧后台绝对值score编辑和User::score吞异常/联动level是实施前门禁,需封闭或统一共同账户锁及事件审计。
拟 POST /points/check-in恰好三个字段requestId/expectedRuleVersion/expectedDate;expectedDate是页面读取的服务端日期预期,不能指定补签,未成功请求必须匹配取得用户锁后的上海当日。成功流水拟保存事件键、请求键、规则版本及before/delta/after冻结回执,原请求可跨日/暂停返回旧回执但不覆盖当前余额,回执后重新GET余额。GET /points/ledger拟改有界snapshotId/beforeId游标,目前无已发布积分API,不涉及分页兼容迁移;具体DTO及固定错误见主契约。
仓库结构已有fa_user_score_log的business_type/business_id、uk_user_business及idx_user_time,不重复添加;首阶段仅拟增加可空request_id/rule_version、唯一(user_id,request_id)及 idx_user_point_id(user_id,id)游标索引,不建独立签到/请求/连续表,邀请关系留后续POINT-003。没有连接目标库或执行DDL,实际实施前仍需显式目标预检/备份/保护所有旧写方。下一步先确认首阶段规则后POINT-002,发布和验收另行安排,不复用历史授权。
本轮文档校验:8个目标文档UTF-8无BOM/无行尾空白,两新方案10处本地链接目标存在、代码围栏配对,两仓库限定文档diff检查通过(仅既有LF/CRLF提示)。只读方案复核已核对已有列/索引,并补清错误优先级、已确认回滚竞争错误与ID分页索引。未连接数据库/Redis/HTTP、未调用模型,也未进行运行测试;POINT-001决定仍未批准,不将文档检查当作开发功能通过。
0.46 2026-10-01 模型运行参数与调用额度受控配置
ADMIN-003 本轮完成独立后台 GET modelconfig/index 与 POST modelconfig/update受控配置子项源码。复用 fa_config 的保留名称 ai_runtime_policy 存 schemaVersion=1 JSON,不新增表或字段;通用配置入口、模型保存/删除和配置文件刷新保护该行,不允许绕过专用入口或落入公开配置文件。只开放四字段:是否接受新调用、新评估使用Flash/Pro、同会员每日评估/产品解释/助手共享次数1–1000、评估最大尝试1–3;助手和产品解释仍固定最多3次,不编辑凭据、供应商地址、timeout、maxTokens或实际环境开关。
环境 deepseek.enabled是硬限制,有效开关为环境启用且运行策略接受调用;页面不能绕过环境禁用。策略无跨操作缓存,三场景在会员锁内一次读取共享锁保护的当前策略快照,预留次数沿既有口径,降低限额不清零已有预留。没有保留行时沿环境配置,记录损坏或数据库不可读时停止接受新模型调用并返回固定错误,不静默启用。新评估按新策略冻结模型,旧调用日志的模型继续使用;正在curl的调用自然收尾,暂停后的未开始任务沿既有禁用路径失败,已有预留不退回,不恢复或清空队列。
保存只接受四字段、64位小写十六进制 expectedVersion、cfg_加32位小写十六进制 requestId、固定 reasonCode 和CSRF。管理员/当前权限重新核验、策略CAS版本比较和成功审计在同事务;审计失败回滚。成功原请求重放返回原回执,不覆盖后续修改;同键改参数或旧版本冲突拒绝,失联后用原键确认结果。拒绝日志只保存安全请求标识/版本/原因/固定码,不记录完整POST、CSRF、凭据或异常原文。
新增 modelconfig、modelconfig/index、modelconfig/update 三节点及独立技术 v5,继承技术v4,旧技术v4/v3/v2/v1、客服v2、运营v1和账号绑定保持。仅隔离库 127.0.0.1:3309/airz_product_test_20260930显式备份应用4项、重复预检0项,不进行生产迁移或换绑。仅本地开发和显式隔离检查,正式库、默认 .env、线上、真实worker和移动端未改,不部署或做运营/真机验收。ADMIN-003仍开发中,供应商账单/余额能力和外部告警方案未确认;维护见服务检查与受控配置及后台权限说明。
开发检查通过:策略纯83项/事务24项、双PHP/双连接并发43项、业务路径纯63项/隔离DB43项、权限97项、审计20项,原服务纯53/用量76/重试39项;服务HTTP207项(95请求)及Chrome Playwright桌面1280×900/手机390×844页面67项通过。首行竞争实测MySQL1213只有一方保存成功,确定1062/1205/1213映射冲突且不自动重试;同键重放、异意图拒绝、审计失败回滚、暂停/旧模型冻结及策略故障安全关闭均覆盖。坏记录禁止编辑,服务返回固定MODEL_RUNTIME_POLICY_INVALID,用量仍保留已预留数,额度/剩余数/最大尝试为NULL。页面覆盖提交已成功但响应丢失→刷新保留原键→同审计/版本重放、另一管理员冲突自动刷新和旧技术v4拒绝配置但可查服务。无未解释console/pageerror、横溢或文字重叠,一条刻意中断响应的网络错误另记。
收尾修复:保存确认关闭动画期间快速响应不再阻断冲突后的自动刷新;服务规范化策略及三个请求元字段的顺序,同值同请求键仅改变POST字段顺序仍返回原回执,不覆盖后续版本或重复审计。乱序幂等新增2项纯检查/1项真实隔离事务检查,6表摘要一致并完整回滚。
0模型/worker调用;并发夹具精确清理、14表摘要一致,HTTP held清理3项通过并复核原13表/Redis原队列;原Config行与site.php摘要保持,凭据JSON和scope私密JSON删除。最终23PHP lint、2JS语法、26源码/测试文件UTF-8无BOM和空白检查通过;原3309/PID19100、8097/PID43340仍仅监听127.0.0.1,无本机analysis:work。证据 C:/Users/JUN/AppData/Local/Temp/airz-admin-runtime-policy-20261001/verification.json、ui-result.json及 saved-desktop.png/saved-mobile.png/invalid-mobile.png。临时页面脚本依赖已删除夹具,不能直接重跑,须新建显式隔离夹具;继续先复查监听与bootstrap,不用默认环境或旧cleanup/reset。本轮不引入供应商余额或外部告警实现承诺。
0.45 2026-10-01 分析进程心跳与进度超时提示
ADMIN-003 本轮完成常驻 analysis:work 进程的只读可观测性子项源码。使用独立Redis JSON观测键,键名按数据库配置和 analysis.queue 派生隔离摘要;不复用队列载荷或数据库业务字段。只观测最近登记的一个常驻进程,新实例可接替旧实例,随机实例标识本次启动;后续进度更新和停止标记原子核验instanceId及startedAt,首次登记响应丢失后也不能重复无条件覆盖新owner。普通进度更新可原子补登记缺失键,停止不复建缺失键。--once 和 --recover-only 不登记,不能被当作常驻服务。
进程在启动、工作边界、空闲、队列降级和退出路径记录 starting/working/idle/degraded/stopped,停止上报不证明任务正常完成。Redis失败采用尽力记录,不能影响任务执行、调用预算、队列租约、业务日志或已有恢复机制;不改 DeepSeekClient,阻塞模型请求期间不虚构持续进度。超时阈值取 max(analysis.heartbeat.stale_after_seconds默认180, deepseek.timeout+60, analysis.lease_seconds, 30);观测TTL为86400秒且须大于实际阈值,超时记录在过期前仍可读取。
后台沿用 GET servicestatus/index 的只读权限,展示最后进度时间、记录年龄和阈值。缺记录、未启用、格式损坏、Redis不可用与进度超时分别返回固定状态,不输出进程/实例标识、环境地址、队列名、路径或原异常。超时只表示超过阈值未记录进度,不能判定操作系统进程死亡、其他worker状态、任务是否一定失败或供应商是否健康;外部告警投递尚未接入。
本子项无新增权限节点/模板或数据库结构;技术 v4 与历史角色绑定沿用,不进行迁移或换绑。仅本地开发和显式隔离检查,正式库、默认 .env、线上及移动端源码未改,不部署、不做运营或真机验收。ADMIN-003 保持开发中,供应商对账和受控配置编辑仍待实施。实现契约、隔离验证和回退边界见后端服务检查维护。
本轮检查通过:心跳纯133项、真实隔离Redis90项、服务纯53项/隔离数据库14项、服务HTTP207项(95请求)及Chrome Playwright 1280×900/390×844页面43项;9个PHP文件lint及JS语法通过。覆盖owner接替/首次响应丢失、丢键补登记、停止不复建、exit/致命错误退出上报、Redis故障和上述9种状态,页面无console/pageerror、文档横溢或文字重叠。0模型调用,合成夹具/观测键/私密JSON及专用PHP8098精确清理,原13表与原队列摘要保持;原3309/8097保留,无真实worker。安全回执与截图 C:/Users/JUN/AppData/Local/Temp/airz-admin-heartbeat-20261001/verification.json、ui-result.json、redis-result.json;0.44的检查数字保留为上一阶段。
下一开发项建议推进模型运行参数和调用额度的受控配置;供应商余额/费用对账仍依赖接口能力确认,外部告警投递方案另定。该建议不授权生产配置修改或发布。
0.44 2026-10-01 只读模型与服务检查、调用用量
ADMIN-003 首个子项新增后台 GET servicestatus/index 和 GET servicestatus/usage。页面分服务检查/调用用量两视图,按会员ID、日期、场景和状态查询,20条分页,支持刷新、重置、空态和失败恢复。加载期间锁定当前查询控件,清除旧指标和分页,避免失败时误读旧结果;桌面和移动表格分别在内部横向滚动。控制器包含超管的所有写入口拒绝,不派发、恢复、消费队列或直接调用模型。
服务检查只读取当前PHP配置、安全布尔值/计数和固定错误码。模型检查启用、运行凭据存在、固定HTTPS来源和模型选择,不请求供应商;数据库为基本读取,队列为配置连接的PING/LLEN/ZCARD,登录存储为Redis PING;本地上传目录仅检查存在/可写,不写探针文件。业务短信尚未接入,分析进程没有心跳,状态明确为待接入/未知,队列为空不能证明进程存活。未输出地址、目录、队列名、凭据或异常原文。
调用查询仅投影已识别评估/产品解释/助手的安全元数据;日期为PHP时区日历日、首尾包含,默认当日,最多31天。已删除记录不进入报表;会员今日额度独立遵循真实预算,统计今日00:00后全部assistant预留,包含失败、软删除、遗留和未来时间记录,不随历史窗口/场景/状态变化。称为已预留次数,不推算收费。Token单值和汇总以十进制字符串保精度,未知为NULL并统计未知记录,已知零为字符串0,不读取正文、输入、报告、匹配或上下文。已登记模型/密钥与用户Token额度尚未参与真实执行,不能当作供应商余额。
新增3个权限节点和独立技术 v4 模板,旧技术 v3/v2/v1、客服 v2、运营 v1 规则及账号绑定保留,不自动扩权。无新增业务表/字段;正式库、默认 .env、线上和移动端源码未改,未部署或开展运营/真机验收。ADMIN-003 保持开发中,供应商余额/费用对账、受控配置编辑和心跳告警仍待开发。接口、显式隔离测试及恢复见服务检查维护。
本轮开发检查通过:服务纯48项/隔离数据库13项、用量纯76项/隔离数据库26项、权限定义90项;服务HTTP203项(95请求)、原后台权限227项(158请求)、Chrome Playwright 1280×900/390×844页面56项。涵盖大整数/未知及零、今日额度与历史筛选分离、真实20条翻页、加载防重复及错误清旧结果、旧角色拒绝和只读超管;无console/pageerror、文档横溢或文字重叠。合成夹具精确清理、凭据JSON删除,13表原有行及Redis原队列摘要保持,0模型调用。安全回执 C:/Users/JUN/AppData/Local/Temp/airz-admin-services-20261001/verification.json;原3309/8097保留、worker未启动。下一开发子项优先补分析进程心跳及失联提示,外部告警投递方案另定。
0.43 2026-10-01 受控人工重试与操作审计
ADMIN-002 继续实施已有评估任务的人工重试。新增 POST assessment/retry,仅接受正文中的评估 ID、CSRF、adm_ 加32位小写十六进制请求键、预期当前版本/任务 ID 和固定原因枚举。详情页有失败版本确认弹窗、重复提交保护、失联后原键确认、接受后的状态刷新和操作日志入口。请求键冻结原重试意图,参数变化或版本/任务变化返回冲突;成功重放返回原任务,不重新增加次数。
管理员、会员、会话和当前输入加锁,复用用户重试的失败状态、尝试上限、每日调用预留和生命周期。成功审计复用 fa_admin_log,与调用预留和回执同事务提交,审计失败全部回滚。提交后才派发;派发失败仍返回已接受的持久回执,原键重放可补投。日志仅保存安全 ID、原因、前后次数和稳定结果,不记录CSRF、资料、报告或模型正文。后台请求命名空间与用户请求分开,排障可按管理员请求 ID 查到原版本与任务。
新增 assessment/retry 只进入独立技术 v3 模板;旧技术 v2、客服 v2、运营 v1 规则及绑定保留,不自动扩权。只在本机隔离库备份应用2项权限增量,复检0项;没有业务表字段迁移。正式库、默认 .env、线上与移动端源码未改,未部署、未做运营或真机验收。ADMIN-002 保持开发中,完整外部查询/对账依赖 DATA-004;下一独立开发项可做 ADMIN-003 服务状态检查。接口、测试与恢复见后端评估排障维护。
本轮开发检查通过:重试服务纯39项/隔离事务45项、审计90项、权限定义82项、诊断纯48项/隔离事务47项;重试HTTP与数据库1016项(91次请求),独立PHP并发、成功及拒绝审计均故障、队列失联/原键补投均覆盖。原排障回归1075项(200次请求)、原权限227项(158次请求)通过。Chrome Playwright桌面1280×900/移动390×844页面38项通过,包括响应丢失后取消/页面内刷新仍保留原请求、CSRF恢复、冲突刷新、原任务/审计重放和旧角色隐藏按钮;仅刻意拦截产生一次预期网络错误,无新增未解释console/pageerror。合成账号、评估、日志、触发器和随机队列精确清理,13表原有行及其他队列摘要一致,0次模型调用。证据在 C:/Users/JUN/AppData/Local/Temp/airz-admin-retry-20261001/verification.json 与 ui-result.json;8098专用PHP已停止,3309与原8097保留。
0.42 2026-10-01 已有评估任务只读排障
ADMIN-002 首个子项源码与隔离开发检查完成。FastAdmin 新增 GET assessment/index 和 GET assessment/detail?ids=<assessmentId>,按评估 ID、任务 ID、请求 ID、会员 ID 精确筛选,并支持类型、状态、阶段及限定排序。列表默认20条、上限100,详情提交版本与调用尝试独立分页。详情展示当前任务、派发/租约、阶段耗时、历史失败尝试和已有 Token/耗时;历史任务和重试请求可关联原版本,不切换到最新结果。接口契约与维护见后端排障说明。
查询服务在数据库中投影 JSON 元数据,不读取或返回提交表单、报告正文、匹配内容、分析上下文、模型正文、供应商异常原文或密钥。产品解释调用排除;无版本关联的遗留调用明确标记,未知用量显示未知,迟到用量更新时间不当作完成时间。配置/额度拦截产生的零调用任务保留诊断;坏版本、错会话指针、缺任务或运行租约分别给稳定提示。所有写入口包含超管均拒绝,不派发、恢复、重试或调用模型。
权限仅新增 assessment、assessment/index、assessment/detail 三节点和独立客服/技术 v2 模板,运营保持 v1。旧客服/技术 v1 及账号绑定保留,不自动扩权;正式分配 v2 前须配套发布排障控制器和后台资源。隔离库增量预检5项、备份应用后复检0项,精确刷新隔离菜单缓存,无业务表/字段变更。
48项纯投影、42项隔离事务及1053项HTTP/数据库检查通过(194次请求);桌面1280×900与移动390×844页面27项交互检查通过,查询、详情弹窗、版本切换、分页、错误及空态可用,无新增控制台错误。截图与临时脚本保存在 C:/Users/JUN/AppData/Local/Temp/airz-admin-assessment-20261001/,浏览器夹具及账号已精确清理,原记录保持,0次模型调用。正式库、默认 .env 与移动端源码未改,未部署或开展运营/真机验收。ADMIN-002 保持开发中,人工重试、操作审计及完整外部查询/对账仍待后续开发,外部查询依赖 DATA-004。
0.41 2026-10-01 后台菜单与角色权限
ADMIN-001 复用现有管理员权限表,新增按规则名称解析实际 ID 的运营/客服/技术模板,包含动作及必要父菜单;不创建账号或自动绑定。运营管理公开产品/内容,客服处理反馈和只读融资资质,技术查看配置及受控启停密钥。user/info/financial 是字段授权节点,不是用户 API 或可调用业务动作;技术不授该节点。各角色均可管理本人配置,未授权仪表盘时首屏进入有权业务页。完整矩阵及增量初始化/缓存/恢复约定见后端权限维护说明。
会员/资料身份保持掩码,资料附件和证件原文不对后台返回;资料与系统消息禁止任何后台写入,超级管理员也不例外。列表及模型关联选择器使用查询/输出白名单,密钥不回显且批量只允许启停、不允许改消耗或所属模型。反馈历史附件不回显,日志写入和历史读取统一脱敏并省略 URL 查询串。通用排序/缓存清理重新执行权限校验,三个业务模板均不授这些系统操作。
源码及隔离开发检查完成,没有生产变更或移动端修改;FAQ、反馈字段/业务和本轮受控后台必须配套发布后才能在正式后台绑定新模板。ADMIN-002 当前只读子项见0.42;ADMIN-003 尚未实现,ADMIN-004 运营验收仍未开展。
0.39 2026-10-01 FAQ服务端化开发
FAQ复用fa_acticle的type=6,正文保存为schemaVersion=1、kind=faq的JSON,包含分类、问题和答案;公开接口为GET /api/v1/help/faqs,只返回已发布且结构有效的内容,支持按分类筛选。新增Faq后台编辑模型、控制器和编辑页,沿用现有状态、管理员权限和版本冲突保护,不新增数据库表或字段。
初始FAQ材料位于database/faq_initial.json,通过database/import_faq.php按显式环境和目标导入,重复按slug保留已有记录,预检默认回滚。前端packages/content/services/help.uts已删除本地FAQ兜底,服务端为空或失败时按现有空态/重试展示。正式数据库、PHP部署和前端发行均未执行。
0.40 反馈提交与处理闭环
会员反馈接口为POST/GET /api/v1/feedback与GET /api/v1/feedback/:id,鉴权会员ID来自Bearer会话。提交体只接受content、attachmentIds、requestId;内容去HTML、保留换行、最多255字,requestId为8—64位ASCII安全字符。同用户同请求键同正文幂等返回记录,不同正文返回409;当前附件服务未开放,attachmentIds必须为空数组。
返回项为id/requestId/content/attachmentIds/status/reply/createdAt/updatedAt/handledAt,其中requestId为0.58新增回执字段,历史记录为null;状态包括pending、processing、resolved、closed。列表只读取当前会员,page/pageSize默认20、上限50;详情严格校验归属。后台反馈编辑白名单仅为status/reply,状态进入处理中或完成状态自动记录handled_by/handled_at,回到待处理则清空;新增、删除、批量更新和导入均拒绝,版本及CSRF要求见0.57。
fa_feedback迁移由database/migrate_feedback.php执行,新增请求键、回复和处理元数据列及唯一索引,历史NULL请求键保留。脚本默认只预检,必须显式--env、--target,写入还需--apply --backup-dir;本轮只在隔离库应用并有完整备份,未执行正式迁移或部署。帮助页的意见反馈使用空附件数组、失败重试复用请求键,并展示本人的处理状态和回复。
0.38 2026-10-01 内容、学习进度与新域名发布
新闻、融资课堂、详情、首页推荐与搜索同步接真实API,列表category/topic及page/pageSize分页,返回items/total/hasMore。搜索type=all/news/lesson、多词AND匹配发布正文并按来源IP限流60次/分钟,不记录原始关键词;未发布、结构不合法或下架内容不公开。前端共享services/content.uts,分包适配保留原型字段/图片,支持空态、断网重试和迟到响应保护,无静态数组兜底。
新闻复用fa_acticle.type=5,课程复用fa_finance;既有content TEXT保存schemaVersion=1 JSON。后台结构化编辑/发布/下架、封面上传、章节排序及版本保护完成,旧协议正文兼容。章节ID固定,新增fa_user_lesson_progress记录当前会员、课程、章节、正文摘要和首次完成时间;重排保留完成,正文更新失效,lessonVersion冲突409,重复完成幂等。现有业务表不增字段;FAQ服务端未实施,CONTENT-001/004保持开发中。
40项隔离数据库、81项内容HTTP/Playwright、13项后台检查及微信/Android开发编译通过,原数据清理复验一致。正式增量维护已新增课程进度表与消息唯一索引、按slug导入4篇新闻/3门课程、限定发布34个PHP/后台资源文件(含产品管理),64项服务器HTTPS/FPM及假模型检查通过、0收费调用,原有数据与私密配置不变,worker/入口恢复。公网内容200、匿名受保护接口401、敏感路径404、HTTP301及TLS校验通过。
正式域名https://airz.hqling.cloud,前端test环境API为/api/v1。小程序需重新发行并设置微信request合法域名;H5未部署,真机、多设备与真实模型未验收。恢复及备份见内容维护说明与开发进度0.38;旧段落中的未部署和HTTPS阻塞为历史状态。
0.37 2026-09-30 站内消息契约(历史本机阶段)
消息页与首页复用共享services/messages.uts,真实读取当前会员消息,支持分类/游标分页、单条/全部已读、原输入版本报告/档案跳转、空态和失败重试。登录恢复、离页/换分类/账户切换拒绝旧响应;分页错误保留在末端,底栏不遮挡列表。所有阅读状态在服务器保存,不复用旧本机静态已读键。微信/Android本地编译及H5手机/桌面联调通过。
复用fa_user_message,唯一键(user_id,business_type,business_id),无新表/列。评估成功/失败事件同事务落库,business_id是system输入日志revisionId,同版每事件最多一条;重试成功新增成功通知,失败重试保持原通知。详情校验会话及日志归属/删除状态,不返回任意URL;原失败版本后来成功时打开该版本报告,不切到会话最新版本。
实际接口及字段见5.5和后端消息维护说明。未读数与全部已读均为全分类;分页固定snapshotId,批量仅更新id<=snapshotId,新消息保持未读。50项隔离数据库、57项HTTP/Playwright及16项迁移恢复检查通过,数据清理25表原摘要一致,无收费调用。MSG-001—004待正式部署/真机验收;本轮索引、PHP及前端尚未发布,用户上一版上传不包含本轮变更。站内消息不包含订阅推送、群发或新的运营后台。
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自填分析已真实验证;短信、外部查询、客服闭环未验收 | 各渠道独立记录测试环境与验收证据 |
源代码位置:
- 前端:README、页面注册、共享请求、金额转换。
- 后端:数据库约定、当前结构、评估生命周期、API 基类。
- 原根目录 airz.sql 是历史导出;不能作为当前库结构依据。双方已有未提交改动属于现状基线,不在文档任务中覆盖或提交。
1.3 已有基础与首要缺口
已有基础:万元与元精确转换、个人/企业分步填写交互、产品范围字段和版本、评估提交/完成/失败/重试内部服务、敏感字段加密、旧密码兼容、Token Redis切换(早期曾恢复表,现已删除)、日志脱敏及基础验证。
首要缺口:
- Bearer、FastAdmin响应解析和401处理已接通;全量字段字典、requestId日志关联、生产环境配置仍待完成。
- assessmentId已贯穿提交、真实分析、报告和历史;需求金额/期限/用途、完整度/准备等级及确定性产品匹配仍待按新增契约实现。
- 账户缓存已按userId隔离并在退出时清理;评估只使用当前流程内存。学习进度、签到和消息的服务端业务仍待接入。
- 产品准入和其他业务API待开发;评估队列、DeepSeek自填报告及读取API已接通。
- 通用公共上传不能直接存正式证件;授权勾选和插件钩子不代表第三方服务已接入。
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、fa_user_lesson_progress | 已实现content JSON带稳定章节ID/版本,进度唯一(user_id,lesson_id,chapter_id),正文摘要判定失效 | CONTENT-001、CONTENT-003 |
| 内容发布与FAQ | fa_acticle | 新闻type=5,FAQ type=6;结构化正文复用content JSON,协议原正文保留 | CONTENT-001 |
| 消息去重 | fa_user_message | 现有user_id/business_type/business_id组合唯一索引,无新列;批量已读按列表snapshotId水位更新,正式已迁移 | MSG-001、MSG-002 |
| 签到与邀请 | fa_user、fa_user_score_log | 已有业务键/事件唯一/时间索引;schema期望request_id/rule_version、用户请求唯一及idx_user_point_id(user_id,id),迁移脚本已编写但原表未迁移;成功流水冻结回执,邀请码唯一和关系表留POINT-003,见积分契约 | 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服务端源码已完成但尚未导入/部署,真机/多设备待验收,见0.39。
- 前端: 新闻、文章、课堂、课程页接真实分页/详情;处理404/下架和搜索竞态。2026-10-07起课程整篇连续阅读,去掉章节目录/折叠/逐节完成/进度条,底部仅一次标记课程已读;状态读取不阻止正文,历史记录与旧接口兼容,详见开发进度0.77。
- 后端: 发布/下架、富文本清洗、分类与首页推荐、搜索和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人日。
- 现状: 当前会员消息/已读API、评估通知与唯一索引已正式部署,页面及首页红点完成;本轮前端需重新发行,见0.38。
- 前端: 分类分页、未读数、已读/全部已读、与正确评估记录跳转。
- 后端: 通知与评估结果/失败状态在同一事务保存,事件唯一键原子去重;读取和更新均限定当前用户及原提交版本。
- 数据: 复用fa_user_message,补事件唯一键;is_read和read_at同步;全部已读采用最大ID水位。
- 接口: GET /messages、GET /messages/unread-count、GET /messages/:id、POST /messages/:id/read、POST /messages/read-all。具体字段见5.5;先生产索引、后PHP、最后前端。
- 异常与边界: 队列重试不重复通知;全部已读期间新增消息仍未读;本期站内消息不等同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人日。
- 现状: POINT-002后端基础开发中,五接口源码、默认关闭配置和旧写方保护完成,原表未迁移、未部署;POINT-001受DEC-POINT阻塞,POINT-003/004未实施。页面仍为设备日期本机签到+10及固定体验邀请码,未接真实积分。
- 前端: 后续接真实余额、流水、服务端签到状态和已发布规则版本;邀请/任务进度按后续POINT-003范围开放,不能把本机记录当服务端到账。
- 后端: 已实现锁正常会员、锁后上海日期、同日业务键/成功请求重放、余额/流水同事务及固定失败;旧后台score/level编辑和User::score封闭。防自邀与可信邀请奖励尚待开发。
- 数据: 复用score及已有业务键/事件唯一/时间索引;schema期望两可空元字段和两索引,迁移脚本已编写,原表未迁移;历史流水不补伪造回执、不重建余额,邀请关系另行设计,见数据库方案。
- 接口: GET /points、GET /points/rules、GET /points/ledger、POST /points/check-in、GET /points/tasks源码及真实HTTP隔离开发检查完成,原表未迁移/未部署,不能视为线上能力;严格Bearer/JSON/query、签到三字段及有界游标见积分契约。邀请读取/绑定仍为后续目标,未实现。
- 异常与边界: 每日10分仅待确认建议,上海每日一次不补签,资料/邀请关闭,权益/期限/level策略待确认;未发布或未知不当作0分/成功,复制分享不发奖,锁后日期防跨午夜误入账。
| 任务编号 | 任务与交付范围 | 优先级 | 前置任务/外部条件 | 验收条件 | 人日 |
|---|---|---|---|---|---|
| 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。剩余: 2–4人日。
- 现状: FAQ服务端读取,文字反馈提交/本人记录/后台处理源码完成但尚未部署;客服仅未开放提示。
- 前端: 反馈文字表单、请求键重试、记录/回复;附件入口保留为空数组,客服在线/排队/离线状态及失败回退待供应商。
- 后端: 反馈归属与后台处理已实现;服务端访客签名、客服会话关联待供应商,外部系统消息遵循渠道身份规则。
- 数据: 复用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人日。
- 现状: ADMIN-001角色模板、字段投影与只读保护、ADMIN-002已有评估排障/受控人工重试/操作审计及ADMIN-003只读服务检查/调用用量/分析进程心跳与进度超时提示/四字段受控运行策略源码完成,尚未部署;完整外部查询、供应商余额/费用对账、外部告警及运营流程仍待能力确认或开发。
- 前端: 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:system/service/activity、title、content、isRead、readAt、createdAt;详情另含target:{kind:report/revision,assessmentId,revisionId,type:personal/enterprise}或null、targetUnavailable |
| PointsLedger | id、delta:int、before:int、after:int、businessType、businessId、memo、createdAt |
| Feedback | id、requestId:string或null(历史记录)、content、attachmentIds、status、reply、createdAt、updatedAt、handledAt;POST回执核对原请求键,用户端不暴露无关管理信息 |
数据库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 | 公开 | topic、page/pageSize | items、total、hasMore | 已实现;图文课程,仅已发布 |
| 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 /content/home | 公开 | 无 | lessons、articles | 已实现;已发布新闻/课程推荐 |
| GET /help/faqs | 公开 | category可选 | items:{id,category,question,answer}[] | 后台可维护,实际行为变更时同步文案 |
| GET /messages | 登录 | type=all/system/service/activity、limit默认20最大50;分页beforeId及snapshotId | items、snapshotId、nextBeforeId、unreadCount | 正式已部署;当前用户ID倒序,分页固定上界 |
| GET /messages/unread-count | 登录 | 无 | unreadCount:int | 正式已部署;全分类未读数 |
| GET /messages/:id | 所有者 | 无 | item、target、targetUnavailable | 正式已部署;原revisionId目标,删除关联后提示不可用 |
| POST /messages/:id/read | 所有者 | JSON {} | id、isRead、readAt、unreadCount | 正式已部署;幂等,保留首次readAt |
| POST /messages/read-all | 登录 | snapshotId:string | updatedCount、snapshotId、unreadCount | 正式已部署;全分类仅更新水位以内,新消息仍未读 |
| GET /points | 登录 | 无 | balance、serverDate、timezone、signedToday、checkInEnabled、ruleVersion、checkInReward、balanceState | 源码/隔离HTTP检查完成,原表未迁移/未部署;一致读取,未知不当零 |
| GET /points/rules | 登录 | 无 | status:draft/published/paused、ruleVersion、checkInReward、timezone、publishedRules | 源码已实现未部署;默认draft、版本/奖励/规则为null,未批准不启用 |
| GET /points/ledger | 登录 | limit默认20最大50;后续beforeId+snapshotId | items、snapshotId、nextBeforeId | 源码已实现未部署;本人有界游标,不返回memo;原表需先显式迁移 |
| POST /points/check-in | 登录 | requestId、expectedRuleVersion、expectedDate,恰好三字段 | ledgerId、delta、balanceAfter、signedDate、ruleVersion、replayed | 源码已实现未部署、默认关闭;锁后当日、历史回执不覆盖当前余额 |
| GET /points/tasks | 登录 | 无 | serverDate、timezone、items:{task,status,reward,ruleVersion}[] | 源码已实现未部署;draft签到及资料/邀请均unavailable、奖励为null,不能客户端自报完成 |
| GET /invitations | 登录 | 无 | personalCode、shareUrl、统计摘要 | 后续POINT-003草案,当前无个人真实码 |
| POST /invitations/bind | 登录 | inviteCode、requestId | bindStatus | 后续POINT-003草案;首次有效绑定/禁止自邀,绑定不直接发奖 |
| POST /feedback | 登录 | content、attachmentIds:[]、requestId | Feedback(含原requestId) | 非空且最长255字符;同会员同键同规范化正文返回原记录当前状态,异正文409;前端回执核对原键,未知结果沿原键确认,见0.58 |
| 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 测试分层与验收条件
- 纯逻辑/服务测试:金额边界、字段映射、规则执行、版本快照、密码兼容、授权状态和评分人工样例。
- 数据库/API集成:两个以上账户进行越权读写;并发提交/重试/积分;鉴权、业务错误、附件归属、事务和幂等。
- 故障与渠道测试:短信失败、OAuth取消/重放、查询拒绝/超时/回调伪造、DeepSeek无效输出/配额不足、队列漏投和worker中断、客服离线。
- H5端到端:个人和企业各完成真实流程;刷新恢复、历史报告、产品更新、助手、课程跨设备、消息、积分邀请、反馈与人工坐席。
- 发布恢复:干净环境初始化、有数据增量升级、备份恢复、密钥恢复、队列守护、回退后数据保全及发布冒烟。
必须覆盖的具体结果:
| 场景 | 必须满足的结果 | 归属 |
|---|---|---|
| 金额换算 | 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节及进度台账。文档完成不计为业务任务完成。