Project

General

Profile

Actions

QA验收 #26

open
RA

CNB Backend #97|销售激励三项改进|测试环境验收与图文手册

QA验收 #26: CNB Backend #97|销售激励三项改进|测试环境验收与图文手册

Added by Redmine Admin 16 days ago. Updated 15 days ago.

Status:
新建
Priority:
普通
Assignee:
-
Start date:
10/26/2026
Due date:
% Done:

50%

Estimated time:
(Total: 0:00 h)

Description

范围:无Task有效预付Invoice净基数当季4%;回款激励开关默认开启及销售自定义比例;每销售每季度Excel汇总单。用户授权实现、发布测试、失败修复重测和图文手册,禁止生产部署。不新增逐笔实发台账,不改变年终结算安排。共享证据索引:outputs/sales-incentive-20261026/index.md。QA须绑定精确候选和实际测试版本,使用独立合成fixture及专用测试账号,隔离真实开票、通知、审批、付款和录制。按逻辑轮次记录每条用例结果并批量回写读回,最终手册使用真实通过截图并完成UI及业务复核。关联需求:https://cnb.cool/mindsetech/NDB/backend/-/issues/97。当前处于开发中,尚未正式验收。


Subtasks 2 (1 open — 1 closed)

缺陷 #27: QA97:回款新建/编辑空客户搜索HTTP500且错误提示无文字已关闭10/26/2026

Actions
QA验收 #28: 销售激励Excel工作表及季度年终差额展示|BE1.20.10b0测试验收新建10/27/2026

Actions

RA Updated by Redmine Admin 16 days ago Actions #1

  • Subtask #27 added

RA Updated by Redmine Admin 16 days ago Actions #2

QA97-R1 测试站结果 — 2026-10-26 Asia/Shanghai

Redmine26 / CNB Backend97;只测试tcrm/tcrm-api;不生产。

  • 候选:BE1.20.9b0 release18049842be8b733e76d1c4112fed82cf45772180;FE2.16.7-beta.0 release71302bdb0dffd036d78ebccb9d042136dd3e7ee7。消费Ops ops-execution.json#2026-10-25T22:35:33.283Z一次runtime证据,0020已应用、staging路由及environmentWritesStopped true。
  • 角色:admin20准备;finance19主链/页面;PM16和匿名拒绝;凭据BW进程内,不落盘。Space21保留并已退出登录,供局部补丁复测。
  • 汇总:20 Pass / 1 Fail / 1 Blocked / 0 Skipped。Fail=#27;Blocked为未执行新建UI实际提交。不是全量验收通过。
  • 原PG171、前端59/显示14/mock5是本地适用证据复用,不加进真实站Pass数。负补结/跨年/并发/锁/迁移回退均保持其隔离层级,不加共享确认锁。影响分析backend-impact-regression.md I97-01..07,契约backend-contract.md;最终Ops已核12/13文件与冻结候选,未改算法/契约部分按qa-coverage-review.md复用。

确切fixture与最终状态

RUN QA97-20261026;company14,taxed contract21/untaxed22,invoiceCompany14,project95/initial requirement30,no-expert Task147 finished;Invoice69→Task147 link67,Invoice70仍无Task;payment24(no372876110305824768)106RMB→Invoice69,payment25(no372876112075821056)100RMB→Invoice70;enabled true,shares24=30/70、25=50/50。合同2/Invoice2/付款2,无专家/联系人/成本/新账号/角色写。Task前后无expert、is_recorded=false、recording_schedule=null及无会议;未触settlement/审批/通知/实际付款。fixture保留,不清理他人数据。

逐项结果

ID 影响/层级 预期、实际检查与证据 状态
Q97-default-readback-taxed I97-01/02 / test API 含税106回款创建省略enabled为true,35/65及核销106、未分配0持久化;证据 qa-live-state.json results/attempts; exact payment24/25, company14 Pass
Q97-default-readback-untaxed I97-01/02 / test API 非含税100创建默认true,原IDs等分50/50,核销100、未分配0;证据 qa-live-state.json results/attempts; exact payment24/25, company14 Pass
Q97-prepaid-net-quarter-baseline-delta I97-03/05 / test API 106/1.06净100与非含税100各当季4元,owner基线delta3.40/4.60;证据 qa-live-state.json results/attempts; exact payment24/25, company14 Pass
Q97-same-ID-share-change I97-01/02 / test API 同集合改30/70,核销余额不变,owner delta3.20/4.80;证据 qa-live-state.json results/attempts; exact payment24/25, company14 Pass
Q97-switch-off-on-and-legacy-ID-preserve I97-01/02 / test API false保留30/70及核销,省略flag仍false,旧同IDs保留shares,再开恢复3.20/4.80;证据 qa-live-state.json results/attempts; exact payment24/25, company14 Pass
Q97-atomic-reject-sum I97-01/02 / test API 合法本轮回款前置下拒绝非法sum,独立GET证明核心/快照/核销无部分变化;证据 qa-live-state.json results/attempts; exact payment24/25, company14 Pass
Q97-atomic-reject-precision I97-01/02 / test API 合法本轮回款前置下拒绝非法precision,独立GET证明核心/快照/核销无部分变化;证据 qa-live-state.json results/attempts; exact payment24/25, company14 Pass
Q97-atomic-reject-duplicate I97-01/02 / test API 合法本轮回款前置下拒绝非法duplicate,独立GET证明核心/快照/核销无部分变化;证据 qa-live-state.json results/attempts; exact payment24/25, company14 Pass
Q97-atomic-reject-share-type I97-01/02 / test API 合法本轮回款前置下拒绝非法share-type,独立GET证明核心/快照/核销无部分变化;证据 qa-live-state.json results/attempts; exact payment24/25, company14 Pass
Q97-atomic-reject-flag-type I97-01/02 / test API 合法本轮回款前置下拒绝非法flag-type,独立GET证明核心/快照/核销无部分变化;证据 qa-live-state.json results/attempts; exact payment24/25, company14 Pass
Q97-atomic-reject-PM I97-01/02 / test API 合法本轮回款前置下拒绝非法PM,独立GET证明核心/快照/核销无部分变化;证据 qa-live-state.json results/attempts; exact payment24/25, company14 Pass
Q97-atomic-reject-anonymous I97-01/02 / test API 合法本轮回款前置下拒绝非法anonymous,独立GET证明核心/快照/核销无部分变化;证据 qa-live-state.json results/attempts; exact payment24/25, company14 Pass
Q97-link-finished-task-no-double-advance I97-03/05 / test API 仅Invoice69/tasks绑定finished Task147;季度owner值及重复GET不变;证据 qa-live-state.json results/attempts; exact payment24/25, company14 Pass
Q97-XLS-REAL I97-04 / real test browser/Excel 实际API下载和页面点击下载分别解析:4条本RUN owner分摊行、8个季度全量数值与dashboard一致;季度年终留空、独立年度每人1条;Task147重算7.20-预发4=差3.20;证据 qa-xlsx-results.json; qa-ui-xlsx-results.json; original two xlsx Pass
Q97-UI-INVALID-TOTAL I97-01/02 / real test browser/Excel 编辑回款24填20/70后提交,合计90%仍保留输入;业务写0;证据 qa-ui-results.json.invalidTotal Pass
Q97-UI-SAME-OWNERS I97-01/02 / real test browser/Excel 页面同人选30/70→35/65,提交后完整reload仍35/65;正常改回30/70,reload及公司14过滤列表正确;证据 qa-ui-results.json.shareOnlySave/shareOnlyRestore Pass
Q97-UI-NEW-DEFAULT I97-01/02 / real test browser/Excel 新建页面默认enabled是;搜索本RUN客户14后自动归属16/20、50/50;证据 qa-ui-results.json.newDefaults Pass
Q97-UI-CANCEL I97-01 / real test browser/Excel 新建未提交返回列表,XHR业务写计数0,未新建第三笔回款;证据 qa-ui-results.json.newCancel Pass
Q97-UI-LIST-DETAIL-REFRESH I97-02 / real test browser/Excel 公司14筛选共2条,24为30/70、25为50/50,详情刷新相同;106/100核销及未分配0;证据 03-own-payment-list.png;01-payment24-detail.png Pass
Q97-UI-ANNUAL-DOWNLOAD I97-03/04 / real test browser/Excel 年度说明涵盖预付4%、后关联抵扣、实发空白/0;正常按钮下载真实xlsx,未登记实发;证据 qa-ui-results.json.annual;04-annual-guidance.png;qa-annual-ui-2026.xlsx Pass
Q97-UI-EMPTY-COMPANY adjacent company GET used by payment forms / real test browser/Excel finance19新建/编辑初始化GET /v1/companies?is_signed=true&name=&page_size=50 返回500 text/html、无JSON业务code/message;UI空白错误提示,定向RUN搜索成功。Ops/Backend定位既有serializer property=null.get;补丁待部署;证据 qa-company-options-diagnostic.json; Redmine27 Fail
Q97-UI-CREATE-SUBMIT I97-01 / real test browser/Excel 未执行第三笔UI提交;初始化500定位期按统筹指令不扩大业务写/不改fixture绕过。两笔公开API创建Pass不替代UI提交。已有Invoice69/70均paid;若后续必须UI实际提交需在原预算第三Invoice/第三回款内由统筹确认恢复该链;证据 Redmine27; latest coordinator stop on new business writes Blocked

失败、原始轨迹与边界

  • #27原500保留,GET时间2026-10-26 06:42:16.911上海;HTTP500/text/html无业务信封,未保存原HTML。合同21/22 active_at及contract_amount null、list active true是实际projection,不据此猜根因;后续Ops栈由统筹确认property=null.get,需Backend最小修复。没有更改fixture/历史null字段绕过。
  • 早期TAX_CONTRACT_READBACK是runner错误要求detail.is_active;detail不返回、list明确true。绑定也曾错读Invoice tasks.id=67为TaskID,实际task_id147。原停止/Fail轨迹仍在,归类runner-assertion-error;成功POST不重放,只补独立只读核验后Pass。两者不伪称产品回归缺陷。
  • UI监控记录第一次有效PUT;完整reload后注入未持续,第二次恢复保存靠详情reload/公司14过滤列表证明,不宣称精确两请求计数。新建取消的单独XHR计数0有效。API诊断fresh finance登录使先前浏览器token失效,随后同账号正常登录恢复;不是未经证实的会话过期缺陷。
  • 页面/Excel通过不宣称真实供应商、外部开票审批/付款、共享期间确认或生产通过。未测场景按上表/本地层级记录。

手册冻结与后续

docs/user-manual/frontend/sales-incentive-quarterly.md;sha256 422fb669fcee8681b0ed4453c61ca6d69146fb06d70a365e37d87f194951c28b;6张真实图,截图来源BEb0/FEbeta.0;qa-manual-freeze.json。待统筹UI/Backend/Web定向复核,不把草稿/审阅当上线门禁。

业务写已停止、pending null;等待局部公司GET投影补丁的Ops收据后,只复测空名称与定向搜索、两表单初始化和反馈。原金额/比例/关联/Excel相关bytes契约无变化时复用,不重建fixture、不重跑主链。用户账号保持active、无commit/push/部署/生产操作由QA执行。

RA Updated by Redmine Admin 16 days ago Actions #3

QA97-R2 b1局部修复与原包UI闭环 — 2026-10-26 Asia/Shanghai

  • 仅tcrm/tcrm-api,Redmine26、缺陷27。finance19主链、admin20独立GET,BW凭据仅内存,Space21。
  • BE1.20.9b1 release6aa61f898bd6d1487baeeb065d356aa1e66d229a;FE2.16.7-beta.0 release71302bdb0dffd036d78ebccb9d042136dd3e7ee7。引用Ops ops-fix-execution.json#2026-10-25T22:52:29.528Z一次runtime、migration/noop、environmentWritesStopped收据,不重复同项检查。
  • b1仅改company getter空值兼容/测试/版本;财务树与FE未变,Backend局部15PG为本地支持,不加入测试站Pass。影响分析backend-impact-regression.md/契约backend-contract.md,R1覆盖复核有效。
  • 本轮实际执行 5 Pass / 0 Fail / 0 Blocked / 0 Skipped;复用R1适用Pass 19项(#26 journal289,IDs见qa-r2-cases.json),不当成本轮新执行。最新唯一case 24 Pass / 0 Fail / 0 Blocked。
  • R1原20Pass/1Fail/1Blocked及#27原500不改写;本轮新证据闭环公司初始化和新建UI未执行缺口;runner断言错误/纠正轨迹照存。
ID 影响 操作/预期 实际 状态/证据
Q97-UI-EMPTY-COMPANY #27 / I97-01 adjacent company GET 财务19三种query(空name/省略name/RUN名称)应HTTP200及业务200;新建/编辑初始化应无同源500/空提示 3个API GET均Pass;浏览器4个company GET均200/code200,初始化无错误;保存后明确显示回款创建成功 Pass;qa-company-retest-results.json;qa-ui-r2-results.json companyReads/initialization
Q97-UI-SWITCH I97-01/02 回款24 Web关闭保存→刷新,再打开保存→刷新,只改flag,其他快照/核销不变 2次PUT仅incentive_enabled,均code200;false后历史30/70、106已分配/0未分配;最终恢复true/30-70/106/106/0 Pass;qa-ui-r2-results.json offSave/offReload/onSave/onReload;06-payment24-disabled-b1.png
Q97-UI-CREATE-SUBMIT I97-01/02 第三Invoice71准备后,仅真实Web创建第三笔106RMB回款,默认参与50/50,保存、刷新及独立GET 仅Web POST1,HTTP200/code200/回款创建成功;payment26 no372881007730364416,company14/invoice71,enabledtrue,50/50,amount106 allocated106 unallocated0,paid_at2026-10-01T12:00:00;API未代建回款 Pass;qa-ui-r2-results.json newCreate/newReload;qa-third-fixture-state.json;07/08真实图
Q97-THIRD-QUARTER-DELTA I97-03/05 第三笔前后owner季度基线比较,应新增4元、两人各2,不改实发/锁/汇率 独立GET及整数分/Decimal核对各+2元;最终相对原RUN基线owner16/20为5.20/6.80,总12元;原两笔8元保留为R1阶段 Pass;qa-third-fixture-state.json beforeThird/afterThird;qa-live-state.json baseline
Q97-XLS-REAL I97-04 b1真实UI下载,按3个paymentNo提取6条分摊行,核对新增行与8个季度总数/年度独立差额 6本RUN行/8owner季度均Decimal核对Pass;新26每人原币53/净50/比例50%/提成2;季度年终留空,年度每人1条,原表保留;原24回款差值7.20-4=3.20不变 Pass;qa-r2-ui-annual-2026.xlsx;qa-r2-xlsx-results.json;09实际工作簿局部图

Fixture、状态与边界

保留company14、contracts21/22、invoiceCompany14、project95/requirement30、finished无expert Task147;Invoice69/70/71,payment24/25/26。24→69(Task147 link67)、25→70、26→71;金额106/100/106,均已核销且未分配0;enabledtrue,份额分别30/70、50/50、50/50。没有重建原成功POST,没有第三笔API代建。

三笔预发总12元,owner16/20较原RUN基线新增5.20/6.80。关闭/恢复只动flag;无DB直写、外部审批/开票/通知/资金付款、角色/环境/FX修改、共享期间确认或生产。共享锁/跨年/负补结/并发/迁移回退复用适用隔离PG证据,不提升为共享站或生产验证。

全部业务写已停止、pending=null、未知请求0;Space21已正常退出登录并finish({keep:[]})一次成功;专用admin20/finance19/PM16账号保留active,凭据不落盘。QA未改产品源码、分支、commit/push或部署。

手册

docs/user-manual/frontend/sales-incentive-quarterly.md sha256 e35a4820e2d2b6ac51c15d59d31b74d829912312ed138c3abe8e41aef98acdcc;原b0 6图复用、新b1 5图,11图均目视检查。WMR-01、BMR年度与锁边界已修;diff qa-manual-final-delta.diff。UI/Backend/Web稳定段review复用,最终增量待统筹派定向复核,不自行标最终通过;员工手册review状态与测试技术结果分开。

RA Updated by Redmine Admin 16 days ago Actions #4

QA最终收尾元数据(非新测试轮次):R1 journal289、R2 journal291均已完整读回;R2实际5Pass,复用R1适用19Pass,最新唯一24Pass/0Fail/0Blocked;原R1 Fail/Blocked历史不改。缺陷27修复复测说明journal290已读回,但关闭命令与独立状态不一致,官方allowed_statuses=[],当前仍新建:管理状态转换受限,技术复测Pass,未伪称关闭。正式手册UI/Backend/Web最终增量均通过,审核内容hash e35a4820e2d2b6ac51c15d59d31b74d829912312ed138c3abe8e41aef98acdcc;只改审核元数据后的最终hash 9279b48ee74814a5cbb337611a47e4b0d04de63f1addc11ec3b499c39ba73878,11张图字节不变,复用比较qa-manual-review-metadata.diff及qa-manual-freeze.json。最终报告outputs/sales-incentive-20261026/qa-delivery.md。业务写已停止/pending null/未知0,Space21已退出并finish成功,保留三Invoice/三回款和active测试账号;无生产或真实付款/审批。

RA Updated by Redmine Admin 16 days ago Actions #5

QA97 生产发布源收据审阅 — 2026-10-26 Asia/Shanghai

审阅通过。 Ops已完成Backend 1.20.9/Web 2.16.7生产发布及一次聚焦只读运行核验。此次QA只消费源收据及做本地结构/哈希比较,没有生产请求、登录、业务写、重新测试、创建fixture/账号或重复运行核验。原测试环境24 Pass及已三方审核的11图手册继续适用;不改记为24项生产业务验收。

用户直接授权“允许,立即提交推送并上线生产”,本次立即时间窗口例外。源授权及范围见Ops结构收据directHumanAuthorization;QA不另执行Git/部署。源唯一交付为ops-production-delivery.md,结构收据ops-production-execution.json phase=production-live-verified、environmentWritesStopped=true,完成时间2026-10-26 10:28:04 Asia/Shanghai。共享index与原Ops收据未改。

候选与影响比较

项目 已验收源 / 正式release 本地收据比较结果
Backend de7e3769d7d1426a3ac7cb4477cf2a84b1090356 → 3e40446bce7dc787ba9076409fe3916e2b24ae5e / v1.20.9 14个功能/测试文件path→SHA256与b0财务12文件+b1公司修复2文件完全一致;额外仅api/init.py、.cz.toml、CHANGELOG.md,共17路径。
Web 4fafad9bea1a301f9b66199c8a8d831232815978 → 36c3e8ab41849cada9857727a08fe96d4a15d5e0 / v2.16.7 13个功能/测试文件path→SHA256与验收候选完全一致;额外仅package.json、CHANGELOG.md,共15路径。

比较直接使用实际已验收的ops-execution.json与ops-fix-execution.json源文件manifest,不因新SHA、正式tag或正式元数据制造重测。正式production构建/路由变化按下节Ops证据单独核对;测试业务结果仍属于原测试环境。

原24 Pass来源#26 journals289/291/293(R2实际5、适用R1复用19),影响映射与未测处置见qa-r2-cases.json、backend-impact-regression.md、qa-coverage-review.md。未重跑171PG、补丁15PG、FE59/显示14/mock5,也不把本地支持计入生产结果。功能及契约无新差异,原权限/金额/精确份额/预付后关联抵扣/真实Web创建开关/Excel链证据可复用。

CI正式路由与真实运行收据

  • Backend CI cnb-01m-1k5r096u5:success、sha等于3e40446…,production镜像及部署目标确认成功,staging两阶段skipped;CI镜像digest与实际backendLive.image一致。Ops公开版本核验为1.20.9、5服务同镜像、15运行文件hash与正式runtimeExpectedHashes逐项一致。
  • Web CI cnb-47m-1k5r0d87e:success、sha等于36c3e8…,productionBuildModeConfirmed=true,正式部署目标确认成功,staging两阶段skipped;CI与实际镜像digest一致。Ops公开未登录页版本2.16.7、footerVerified=true/loginSubmitted=false;5个公开入口/功能asset的publicHttpSha256逐项等于容器sha256。
  • 此处“真实运行”均指Ops原一次运行核验,QA没有再次请求生产endpoint、浏览器或运维平台。BE首次version HTTP503 按Ops交付保留为部署中失败观察;未记通过、未重复触发部署,有界等待后才由后续成功收据收口。不抹去初次失败或宣称全程零错误。

迁移与数据边界

生产前置与后置DB/cluster指纹一致,PG14。前置账本132、finance0019已应用、0020未应用、列不存在;后置账本133,onlyExpectedMigrationApplied=true,唯一新增finance.0020_financepayment_incentive_enabled,migrator exit0且日志仅该条OK。columnMetadata为boolean/NO(非空),noManualMigration=true。未新增发布备份、未动现有/定时备份,未人工回填或全库审计。

Ops相关读取为transactionReadOnly,businessRowsRead=false/businessWrites=false;没有生产登录、业务fixture、账号/角色、审批/通知、真实付款或供应商调用。QA未访问生产,因此本报告不声称生产真实资金、实发登记、共享季度/年度确认、跨年/负补结/并发/迁移回退已实测。原适用隔离证据仍保持原层级。现有旧版本回退锚点可用但未执行;逆0020会删除参与flag,不能自动逆迁移丢弃false状态。

Git及历史保护

finalCheck.remoteMain与remoteTagCommit分别精确等于正式release;preview仍BE6aa61f898bd6d1487baeeb065d356aa1e66d229a/Web71302bdb0dffd036d78ebccb9d042136dd3e7ee7。checkout仍feature/sales-incentive-quarterly,源HEAD、本地main/preview/expert-blacklist refs不变,真实index空。Backend原.aoci/baseline.json及.aoci/config.json dirty/hash保留,Web干净;不宣称AOCI全局治理已aligned。

本地复算4份原b0/b1测试Ops收据的SHA256,与immutableTestReceipts全部匹配。历史QA/修复/工具错误/503均保留,未改源收据、手册内容或11图,也未force/reset/clean/切分支/新worktree。

手册、缺陷与交接

手册继续引用测试图源:6张BEb0、5张BEb1,FEbeta.0;UI/Backend/Web已通过,最终正文SHA256 9279b48ee74814a5cbb337611a47e4b0d04de63f1addc11ec3b499c39ba73878,本次重新计算正文及11图hash完全不变。没有把截图标成生产采集,也不因正式版本号重开手册审阅。

#27旧报告“新建/无转换”保留其当时事实;用户后续明确授权后已补工作流并关闭。消费redmine27-closed-receipt.json:status4已关闭、journal294,原技术复测journal290和R1 Fail仍保留。此次QA不改Redmine配置或再关闭一次。

后续CNB97手册附件/评论/指派老张由主统筹另行执行,本报告不声称已上传或已指派。QA终点为本源收据审阅、#26一次逻辑批次追加并全文读回;新业务用例0、复用24,新增环境操作0。生产源收据审阅无未关闭的证据缺口。

本报告及独有qa-production-redmine-readback.json为本次QA产物;不覆盖原qa-delivery.md、qa-redmine-readback.json或共享index。

源收据身份

  • ops-production-delivery.md:2ae29c3850abc626960843bcec23c0823f8ce58bbde415c57972036a7c9518f0
  • ops-production-execution.json:2bfb7a2bdc177f3467318415e1a1f4b32c10caad2f4f8b7c705dc2aa99f23103
  • ops-production-backend-after.json:905876e6f774cc7889251e2ea58d212c32a3e42325c0623470c0fc807d9038a6
  • ops-production-frontend-after.json:64d0eeac1e1f90bd91d0db9774ea47bdf070faeb0b5929c8ad0069c3b0adcb13
  • ops-production-final-check.json:99132e943a3b39e0b6556e5212e36626bd356ccc9596a77444b50eceb7d1eae0
  • redmine27-closed-receipt.json:4fce2e301a06e2bba330fda0cd7e0771a9a845a4bcf0e40341149e28c81a5364

RA Updated by Redmine Admin 15 days ago Actions #6

  • Subtask #28 added
Actions

Also available in: PDF Atom