feat: 支持评估版本隔离的报告、匹配及PDF导出功能
新增revisionId参数到路由、服务及导出接口,实现不同评估版本的隔离访问。删除已废弃的需求相关服务文件,移除取消采集的融资金额、期限和用途字段,更新相关页面提示文本。同时更新文档,说明评估版本、最新资料及产品展示规则的调整,支持前台正常业务名称显示,去除环境标签。
This commit is contained in:
+45
-3
@@ -1,6 +1,20 @@
|
||||
# 产品匹配规则开发契约
|
||||
|
||||
版本:1.3。日期:2026-09-24。关联PRODUCT-001、PRODUCT-002、PRODUCT-003。页面消费方式见[04—10方案](原型04-10页面改造与跳转方案.md),完整产品判定/快照/接口语义仍以[数据契约](需求与评估结果数据契约.md)第5节为准。
|
||||
2026-09-30最新展示约定:按用户要求,当前六条产品使用正常业务名称及资料,前台/PDF不展示“演示、非真实”等环境标签;内部source reference、isDemo及containsDemoProducts继续保存,用于追溯既有产品。正式ID22—27已同步文案并增加版本,金融参数/条件不变,历史快照不改写。下文强制显示环境标签的表述仅作阶段记录,本次展示规则优先;部署状态和验证见[开发进度0.36](开发进度.md)。
|
||||
|
||||
## 2026-09-29 最新覆盖约定(inputVersion=3)
|
||||
|
||||
个人/企业信用融资恢复至2026-09-23 19:04需求扩展之前的采集范围:删除融资金额、融资期限、资金用途、其他用途说明;保留经营月数和原有身份/经营收入/资产负债/资料授权。提交使用inputVersion=3,结果仍为resultVersion=2,保留报告三栏、产品匹配、助手、PDF与行动入口。v3不生成需求事实或匹配规则,不把取消采集的字段列为“未提供/待核实”、补填项或完整度扣分项;产品自身额度、期限、利率和用途资料保留。其他真实缺失或来源未核验仍按既有规则处理。
|
||||
|
||||
资质匹配快照标记profileOnly=true并纳入摘要;编译产品规则时移除requestedAmountYuan、requestedTermMonths、purposeCode相关条件。新准备策略self-reported-profile-20260929-v2,个人11项/企业6项,不含需求条件项。旧输入1/2不再接受新建;保留旧报告解析分支仅供归档兼容。
|
||||
|
||||
已按用户授权在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/。
|
||||
|
||||
下文v2字段、用途字典、需求覆盖与旧保留历史约定为历史设计,不可据此恢复采集或重跑旧迁移;其他冻结、鉴权、幂等、三态、金额精度要求继续适用。
|
||||
|
||||
---
|
||||
|
||||
版本:1.4。日期:2026-09-30。关联PRODUCT-001、PRODUCT-002、PRODUCT-003。页面消费方式见[04—10方案](原型04-10页面改造与跳转方案.md),完整产品判定/快照/接口语义仍以[数据契约](需求与评估结果数据契约.md)第5节为准。
|
||||
|
||||
## 1. 本轮实现边界
|
||||
|
||||
@@ -142,7 +156,7 @@ source为整份产品条件的共同来源:publisher为发布机构(最长10
|
||||
|
||||
Product模型保存事务覆盖行锁、预检和写入;编辑合并锁定的最新记录与实际变更字段后验证,避免部分更新漏掉上架状态或使用旧值校验。新增version固定1,更新以最新version加1,不能从表单指定版本。默认后台add/edit/multi均使用模型save;multi任一条失败整批回滚。SQL/Db直写不触发模型事件,未来导入服务必须走模型或同一预检,不得当作发布接口。
|
||||
|
||||
草稿允许未齐资料和旧`{"version":1,"rules":[]}`。旧不完整上架产品再次编辑/上架会被拒绝,可先下架再补齐;下架不要求满足新增完整性门槛。本轮不批量清理或自动下架现有数据。后台表单仍为原JSON文本框,默认旧示例仅能存草稿;正式上架请按本节格式录入,结构化编辑器与帮助展示后续补充。
|
||||
草稿允许未齐资料和旧`{"version":1,"rules":[]}`。旧不完整上架产品再次编辑/上架会被拒绝,可先下架再补齐;下架不要求满足新增完整性门槛。不批量清理或自动下架现有数据。后台结构化编辑最新实现见第6.5节,原JSON文本框为历史状态。
|
||||
|
||||
compile(product,dictionary)不读当前时间,返回来源、字典、规范化范围、有效期、地区模式、两类规则及notApplicableByApplicantType。assertPublishable额外按传入日期检查过期和未来核对日期。全国声明由regionMode/regions/source保留,不生成空in;不适用记录包含ruleId和APPLICANT_TYPE_NOT_APPLICABLE,但尚未转换为正式报告证据。
|
||||
|
||||
@@ -154,6 +168,20 @@ compile(product,dictionary)不读当前时间,返回来源、字典、规范
|
||||
|
||||
新模型测试及基础回归在事务内生成合成数据后回滚,测试Redis会话清理;产品前后全量记录比较一致。没有真实产品发布、数据库迁移、外部模型或生图调用。未修改模板或前端页面,未将模型路径测试描述为后台浏览器端到端验收。正式worker保持运行;本次脚本没有全库任务恢复扫描或评估任务入队。
|
||||
|
||||
### 6.5 结构化编辑及真实发布流程(2026-09-30本地完成)
|
||||
|
||||
新增/编辑共用表单:基本参数与有效期、待核实/全国/指定城市、个人/企业各自用途、source四字段及最多44条动态准入条件。新增默认待核实,SQL NULL表示尚未确认;全国必须明确选择并保存[];指定城市必须至少选择一个现有城市代码。NULL地区不是旧规则,但不能上架。补充字段来自既有白名单,数字支持eq/gte/lte/between/in,枚举支持eq/in;金额单位元、不转浮点,in数字集合逗号分隔,枚举多选。经营月数使用独立列,无年龄控件。条件编号保持稳定、全产品唯一、禁止base_前缀;切换字段/运算符保留各自已输入阈值,对象不一致明确提示并拒绝保存。
|
||||
|
||||
不支持的旧JSON、未知字段/用途/地区代码、错误JSON结构或年龄条件标为旧规则,普通保存保留原JSON和年龄。地区JSON文本null不等于SQL NULL,仍视为错误结构。已有来源单独提取,真正旧规则未重建时来源控件可见但禁用。运营明确勾选重建后才替换地区/来源/用途/条件,并清除旧年龄;无自动推断或迁移。来源/用途/条件实质变化递增规则JSON版本,选择顺序变化或单纯地区编辑不增加此版本;产品行版本每次保存仍递增。草稿允许空来源或用途,上架必须完整;空阈值或非法条件不能被静默丢弃。
|
||||
|
||||
POST后台product/preview只读预检当前表单,不修改产品/版本或上架;复用product/add或product/edit权限并检查数据范围。资料检查失败使用FastAdmin code=0,data.issues为[{field,message}],一次收集独立字段缺失/格式/范围/日期/用途及逐条条件问题;可选经营月数空值不列为必填。格式错误的诊断候选只在内存中使用,不能作为保存或上架输入;无问题时仍调用原完整编译器。版本冲突先拒绝预检,不拿旧版本生成通过回执。后台add/edit固定走结构化映射,编辑提交_base_version;服务端事务内锁定最新行核对,冲突拒绝整次写入,不能删除隐藏标记绕过。上架/下架按钮复用product/multi权限和模型,确认后整批事务,任一不完整产品导致全批回滚。无需新增数据库字段或权限节点。
|
||||
|
||||
真实发布顺序:运营提供实际机构材料和责任人 → 核对参数、城市/全国、用途、全部硬条件、有效期与来源索引 → 保存草稿 → 只读发布检查 → 人工核对来源并在获得发布授权后上架 → 用人工金标准验证三态及来源门槛。检查通过只证明格式与完整性,不访问来源地址、不证明真实有效,也不代表银行审批。材料不能包含用户身份资料或私密链接令牌;禁止将演示参数改名当真实产品。
|
||||
|
||||
代码在ProductEditor、admin Product控制器/模型、product/form.html及backend/product.js。本轮326项PHP、89项本机HTTP/浏览器检查通过,桌面/手机尺寸均无新增console/pageerror;正式产品材料、生产部署、真机与业务金标准仍待完成。
|
||||
|
||||
后续待核实与诊断改进:450项PHP、89项HTTP/浏览器、7项清理/完整性检查通过,四条真实公开材料仅存隔离库草稿。具体证据见开发进度0.33节;尚未部署,仍需受理银行确认当前政策和完整硬条件。
|
||||
|
||||
## 7. 目录冻结、结果持久化与本地演示产品(最新)
|
||||
|
||||
### 7.1 执行版本与冻结边界
|
||||
@@ -232,7 +260,7 @@ MatchResult沿用数据契约第5节:productId、productVersion、eligibility
|
||||
|
||||
productSnapshot包含产品ID/版本/名称/机构/类型,amountMinYuan、amountMaxYuan(元的两位小数字符串)、termMinMonths/termMaxMonths(整数月)、annualRateMinPercent/annualRateMaxPercent(百分数字符串)、isDemo、applicantTypes、regions(空数组表示全国)、validFrom/validUntil(日期)、capturedAt、source(publisher/title/reference/checkedOn)、rules、information/condition及创建/更新时间。客户端仅在显示时转万元,例如`"123456.78"`元显示`12.345678 万元`;个人事实金额也按此规则。
|
||||
|
||||
公共DTO使用当前发布条件rulesByApplicantType按主体分组,不返回eligibility、rank、score、个人理由/事实/证据。repaymentMethod、channel、approvalDuration在两种产品DTO均为null,当前页面显示“未提供”;不得从演示或自由文本猜值。公共详情不等于公共产品列表,GET /products尚未实现。
|
||||
公共DTO使用当前发布条件rulesByApplicantType按主体分组,不返回eligibility、rank、score、个人理由/事实/证据。repaymentMethod、channel、approvalDuration在两种产品DTO均为null,当前页面显示“未提供”;不得从演示或自由文本猜值。公共详情保留;GET /products当前列表实现见8.4节。
|
||||
|
||||
当前可用性通过一次受限ID集合查询读取,避免逐项查询。下架、删除、未到生效日或过期为unavailable;目录查询异常为unknown;历史快照仍可读。不会把产品当前版本/额度拼回历史详情。AI解释目前not_requested,前端明确提示尚未生成,保留完整确定性规则理由;失败时的提示分支已预留,真实生成与计费/重试待后续任务。
|
||||
|
||||
@@ -242,6 +270,20 @@ productSnapshot包含产品ID/版本/名称/机构/类型,amountMinYuan、amou
|
||||
|
||||
本轮`tests/match_records.php --worker-stopped`62项验证接口身份/方法、三组、游标分页和篡改、快照归属、未知键投影、损坏数据、下架/过期/删除/改价后历史、旧版报告、重复读取无副作用。产品变化只在测试连接事务内发生并回滚,随机账户及队列清理;停止正式worker以避免恢复扫描拾取合成评估。浏览器结果及截图见开发进度6.13。
|
||||
|
||||
### 8.4 当前公共产品列表(2026-09-30本地完成)
|
||||
|
||||
GET /api/v1/products要求会员Bearer,返回code/msg/time/data,data为items、nextCursor(末页null)与asOfDate(Asia/Shanghai业务日期)。items复用第8.2节公共Product DTO及现有详情投影,无个人事实/三态/评分/排名。不新增小程序列表页面,本阶段用于目录服务和后续页面接入。
|
||||
|
||||
| 参数 | 规则 |
|
||||
| --- | --- |
|
||||
| type | 可空;personal或enterprise,按产品适用对象过滤 |
|
||||
| cityCode | 可空;现有5城市代码,匹配全国或明确含该城市的产品 |
|
||||
| q | 可空;产品名或机构名,最长100字,拒绝控制字符;%和_按字面查询 |
|
||||
| limit | 默认20;1—50的字符串整数 |
|
||||
| cursor | 服务端返回的不透明游标,长度不超过2048;不能自行拼接 |
|
||||
|
||||
ID升序keyset分页,一次查询整页及下一项,不逐项查询详情。只读当前有效上架产品;草稿、下架、未生效或过期不返回。列表不是冻结历史,分页期间目录可能变化,从首屏重读才能获取最新集合。游标使用既有AES-GCM,绑定会员、全部筛选(包括limit)及业务日期;跨账号、换条件、跨天或篡改返回400 PRODUCT_CURSOR_INVALID。参数不合法422 VALIDATION_ERROR、未登录401、命中的发布资料损坏409 PRODUCT_CONFIGURATION_INVALID;不将损坏目录伪装为零产品。所有响应no-store,既有GET /products/:id DTO保持一致。
|
||||
|
||||
## 9. 单产品解释任务与原型04/05(2026-09-28已实现,覆盖第7/8节的未接入状态)
|
||||
|
||||
### 9.1 接口与状态
|
||||
|
||||
Reference in New Issue
Block a user