feat: add ERP agent pet bridge and startup guide
This commit is contained in:
@@ -0,0 +1,708 @@
|
||||
{
|
||||
"schemaVersion": "1.0",
|
||||
"packageType": "workflow_write_uat_case_catalog",
|
||||
"safety": {
|
||||
"productionUseProhibited": true,
|
||||
"automaticDatabaseOrConfigurationChanges": false,
|
||||
"approvedRestorePointRequired": true,
|
||||
"containsCredentials": false,
|
||||
"containsBusinessIdentifiers": false,
|
||||
"executableInstructionsIncluded": false
|
||||
},
|
||||
"workflows": [
|
||||
{
|
||||
"workflow": "purchase",
|
||||
"caseCount": 13,
|
||||
"cases": [
|
||||
{
|
||||
"sequence": 1,
|
||||
"caseCode": "purchase_unique_match_commit",
|
||||
"title": "唯一来源匹配并创建采购业务单据",
|
||||
"commandName": "purchase.invoice.create",
|
||||
"captureMode": "execute",
|
||||
"expectedResultCode": "purchase_document_created",
|
||||
"expectedIssueCode": null,
|
||||
"expectedMutationPolicy": "positive",
|
||||
"nativeConfirmationPolicy": "required",
|
||||
"minimumAuditEventCount": 2,
|
||||
"sourceDocumentProofRequired": true,
|
||||
"primaryRole": "qa_operator",
|
||||
"supportingRoles": ["business_fixture_owner", "dba_readonly_reviewer"],
|
||||
"fixtureCode": "purchase_unique_open_source",
|
||||
"preconditions": [
|
||||
"可恢复非生产库中存在唯一开放来源,供应商、币种、物料、单位、数量、单价、税率和行级范围均已审批。",
|
||||
"必须上传至少一份脱敏电子 PDF 发票或明细;该 PDF 必须由随包 PDFium 安全渲染器逐页处理并经 MiniMax 视觉识别,来源、分页和提取摘要及 pdfium_minimax_pages_v1 契约均由可信上传链生成。"
|
||||
],
|
||||
"operatorSteps": [
|
||||
"记录创建前业务行、命令审计和来源附件审计基线。",
|
||||
"生成预览,逐项核对来源行、金额、税额、附件数量和集合摘要后完成桌宠及 ERP 原生双重确认。",
|
||||
"同次采集必须同时生成 purchase_audit_correlated 证据。"
|
||||
],
|
||||
"dbaReadOnlyChecks": [
|
||||
"确认只新增一张目标业务单据,事务证据、业务审计和命令关联 ID 完整。",
|
||||
"确认来源文件摘要、提取摘要和 pdfium_minimax_pages_v1 预处理契约同时进入 XML v3 写入载荷及同一审计链。"
|
||||
],
|
||||
"cleanupSteps": ["保留该记录作为重放、冲突和审计关联用例的受控依赖,完成整组后再按恢复方案清理。"],
|
||||
"retryPolicy": "single_success_then_relationship_cases_only"
|
||||
},
|
||||
{
|
||||
"sequence": 2,
|
||||
"caseCode": "purchase_ambiguous_match_blocked",
|
||||
"title": "两个来源同等匹配时阻断",
|
||||
"commandName": "purchase.invoice.create",
|
||||
"captureMode": "plan_only",
|
||||
"expectedResultCode": "purchase_match_invalid",
|
||||
"expectedIssueCode": null,
|
||||
"expectedMutationPolicy": "zero",
|
||||
"nativeConfirmationPolicy": "prohibited",
|
||||
"minimumAuditEventCount": 1,
|
||||
"sourceDocumentProofRequired": false,
|
||||
"primaryRole": "business_fixture_owner",
|
||||
"supportingRoles": ["qa_operator", "dba_readonly_reviewer"],
|
||||
"fixtureCode": "purchase_two_equal_sources",
|
||||
"preconditions": ["准备两个对同一发票行具有相同确定性匹配条件的开放来源,且均位于当前用户已审批范围。"],
|
||||
"operatorSteps": ["仅生成计划,确认返回候选差异且 executionAllowed=false,不进入确认或执行。"],
|
||||
"dbaReadOnlyChecks": ["确认目标业务表零新增,两个来源均未被占用。"],
|
||||
"cleanupSteps": ["按测试数据台账移除或恢复第二个歧义来源。"],
|
||||
"retryPolicy": "new_capture_allowed_while_authorization_active"
|
||||
},
|
||||
{
|
||||
"sequence": 3,
|
||||
"caseCode": "purchase_overallocation_blocked",
|
||||
"title": "发票累计数量超过开放来源余量时阻断",
|
||||
"commandName": "purchase.invoice.create",
|
||||
"captureMode": "plan_only",
|
||||
"expectedResultCode": "purchase_match_invalid",
|
||||
"expectedIssueCode": null,
|
||||
"expectedMutationPolicy": "zero",
|
||||
"nativeConfirmationPolicy": "prohibited",
|
||||
"minimumAuditEventCount": 1,
|
||||
"sourceDocumentProofRequired": false,
|
||||
"primaryRole": "business_fixture_owner",
|
||||
"supportingRoles": ["qa_operator", "dba_readonly_reviewer"],
|
||||
"fixtureCode": "purchase_aggregate_overallocation",
|
||||
"preconditions": ["准备多行发票输入,使相同来源明细的累计数量严格大于只读查询得到的剩余数量。"],
|
||||
"operatorSteps": ["仅生成计划,核对稳定阻断码并确认没有可执行计划。"],
|
||||
"dbaReadOnlyChecks": ["确认来源余量和目标业务表均未变化。"],
|
||||
"cleanupSteps": ["无需数据库清理;销毁本场景脱敏输入。"],
|
||||
"retryPolicy": "new_capture_allowed_while_authorization_active"
|
||||
},
|
||||
{
|
||||
"sequence": 4,
|
||||
"caseCode": "purchase_permission_denied",
|
||||
"title": "ERP 命令权限不足时在计划前阻断",
|
||||
"commandName": "purchase.invoice.create",
|
||||
"captureMode": "plan_only",
|
||||
"expectedResultCode": "command_access_denied",
|
||||
"expectedIssueCode": null,
|
||||
"expectedMutationPolicy": "zero",
|
||||
"nativeConfirmationPolicy": "prohibited",
|
||||
"minimumAuditEventCount": 1,
|
||||
"sourceDocumentProofRequired": false,
|
||||
"primaryRole": "erp_security_admin",
|
||||
"supportingRoles": ["qa_operator", "dba_readonly_reviewer"],
|
||||
"fixtureCode": "purchase_command_permission_removed",
|
||||
"preconditions": ["使用专用 UAT 用户,按客户变更流程临时移除采购创建命令所需的原 ERP 权限,不改变其他用例账号。"],
|
||||
"operatorSteps": ["尝试生成计划,确认能力不可见或返回 command_access_denied,且不出现确认按钮。"],
|
||||
"dbaReadOnlyChecks": ["确认零业务变更并存在一条脱敏权限拒绝审计。"],
|
||||
"cleanupSteps": ["由 ERP 安全管理员恢复并复核原权限,重新登录后再继续其他用例。"],
|
||||
"retryPolicy": "new_capture_allowed_while_authorization_active"
|
||||
},
|
||||
{
|
||||
"sequence": 5,
|
||||
"caseCode": "purchase_database_permission_recheck_denied",
|
||||
"title": "数据库写权限复核拒绝并回滚",
|
||||
"commandName": "purchase.invoice.create",
|
||||
"captureMode": "execute",
|
||||
"expectedResultCode": "purchase_write_permission_denied",
|
||||
"expectedIssueCode": null,
|
||||
"expectedMutationPolicy": "zero",
|
||||
"nativeConfirmationPolicy": "required",
|
||||
"minimumAuditEventCount": 2,
|
||||
"sourceDocumentProofRequired": false,
|
||||
"primaryRole": "customer_dba",
|
||||
"supportingRoles": ["erp_security_admin", "qa_operator", "dba_readonly_reviewer"],
|
||||
"fixtureCode": "purchase_database_write_grant_denied",
|
||||
"preconditions": ["命令权限允许生成有效预览,但客户批准的数据库写权限复核行对当前用户明确拒绝或已失效。"],
|
||||
"operatorSteps": ["完成双重确认并执行,确认数据库过程返回固定权限拒绝码。"],
|
||||
"dbaReadOnlyChecks": ["确认事务零业务变更、幂等结果未记为成功,计划和执行审计均存在。"],
|
||||
"cleanupSteps": ["由 DBA 恢复经过审批的 UAT 写权限复核行并重新验证哈希。"],
|
||||
"retryPolicy": "new_plan_and_new_key_required"
|
||||
},
|
||||
{
|
||||
"sequence": 6,
|
||||
"caseCode": "purchase_currency_field_missing_blocked",
|
||||
"title": "目标币种字段未配置时执行阻断",
|
||||
"commandName": "purchase.invoice.create",
|
||||
"captureMode": "execute",
|
||||
"expectedResultCode": "purchase_currency_field_not_configured",
|
||||
"expectedIssueCode": null,
|
||||
"expectedMutationPolicy": "zero",
|
||||
"nativeConfirmationPolicy": "required",
|
||||
"minimumAuditEventCount": 2,
|
||||
"sourceDocumentProofRequired": false,
|
||||
"primaryRole": "low_code_config_admin",
|
||||
"supportingRoles": ["customer_dba", "qa_operator", "dba_readonly_reviewer"],
|
||||
"fixtureCode": "purchase_currency_target_field_unavailable",
|
||||
"preconditions": ["在可恢复 UAT 配置中使目标单据币种字段未暴露或未映射,同时保留可生成预览的其他字段。"],
|
||||
"operatorSteps": ["完成双重确认并执行,确认固定币种字段配置错误,不允许降级为本位币。"],
|
||||
"dbaReadOnlyChecks": ["确认目标业务表零新增且事务完整回滚。"],
|
||||
"cleanupSteps": ["恢复已审核字段映射并重新生成画像及相关哈希后再继续。"],
|
||||
"retryPolicy": "new_plan_and_new_key_required"
|
||||
},
|
||||
{
|
||||
"sequence": 7,
|
||||
"caseCode": "purchase_currency_crosswalk_unapproved_blocked",
|
||||
"title": "币种换算关系未审批时阻断",
|
||||
"commandName": "purchase.invoice.create",
|
||||
"captureMode": "execute",
|
||||
"expectedResultCode": "purchase_currency_crosswalk_not_approved",
|
||||
"expectedIssueCode": null,
|
||||
"expectedMutationPolicy": "zero",
|
||||
"nativeConfirmationPolicy": "required",
|
||||
"minimumAuditEventCount": 2,
|
||||
"sourceDocumentProofRequired": false,
|
||||
"primaryRole": "customer_dba",
|
||||
"supportingRoles": ["finance_fixture_owner", "qa_operator", "dba_readonly_reviewer"],
|
||||
"fixtureCode": "purchase_currency_crosswalk_expired",
|
||||
"preconditions": ["使用需要换算的测试币种,并使对应 UAT 换算审批不存在、过期或审批哈希不匹配。"],
|
||||
"operatorSteps": ["完成双重确认并执行,确认未审批换算绝不自动选取汇率。"],
|
||||
"dbaReadOnlyChecks": ["确认目标业务表和来源占用均为零变化。"],
|
||||
"cleanupSteps": ["恢复经财务批准的换算关系及审批哈希。"],
|
||||
"retryPolicy": "new_plan_and_new_key_required"
|
||||
},
|
||||
{
|
||||
"sequence": 8,
|
||||
"caseCode": "purchase_row_scope_denied",
|
||||
"title": "组织部门采购员行级范围拒绝",
|
||||
"commandName": "purchase.invoice.create",
|
||||
"captureMode": "execute",
|
||||
"expectedResultCode": "purchase_row_scope_denied",
|
||||
"expectedIssueCode": null,
|
||||
"expectedMutationPolicy": "zero",
|
||||
"nativeConfirmationPolicy": "required",
|
||||
"minimumAuditEventCount": 2,
|
||||
"sourceDocumentProofRequired": false,
|
||||
"primaryRole": "customer_dba",
|
||||
"supportingRoles": ["erp_security_admin", "qa_operator", "dba_readonly_reviewer"],
|
||||
"fixtureCode": "purchase_row_scope_not_approved",
|
||||
"preconditions": ["目标来源属于未对当前 UAT 用户审批的组织、部门、采购员精确元组。"],
|
||||
"operatorSteps": ["执行已确认计划,确认行级范围复核拒绝且响应不泄露未授权来源标识。"],
|
||||
"dbaReadOnlyChecks": ["确认未授权来源未被占用、目标业务表零新增,权限拒绝审计不含业务原值。"],
|
||||
"cleanupSteps": ["恢复该用户原行级范围审批状态。"],
|
||||
"retryPolicy": "new_plan_and_new_key_required"
|
||||
},
|
||||
{
|
||||
"sequence": 9,
|
||||
"caseCode": "purchase_runtime_recheck_blocked",
|
||||
"title": "预览后采购来源变化时执行复核阻断",
|
||||
"commandName": "purchase.invoice.create",
|
||||
"captureMode": "execute",
|
||||
"expectedResultCode": "purchase_source_changed",
|
||||
"expectedIssueCode": null,
|
||||
"expectedMutationPolicy": "zero",
|
||||
"nativeConfirmationPolicy": "required",
|
||||
"minimumAuditEventCount": 2,
|
||||
"sourceDocumentProofRequired": false,
|
||||
"primaryRole": "business_fixture_owner",
|
||||
"supportingRoles": ["customer_dba", "qa_operator", "dba_readonly_reviewer"],
|
||||
"fixtureCode": "purchase_source_changed_after_plan",
|
||||
"preconditions": ["准备可生成唯一有效预览的来源,并预先批准一项可恢复的计划后变化动作。"],
|
||||
"operatorSteps": ["使用 PauseAfterPlanForOperatorStaging 生成并固定计划。", "暂停期间由授权人员改变来源单号、余量、单价、税率、汇率或状态之一,再输入精确阶段确认口令继续。"],
|
||||
"dbaReadOnlyChecks": ["确认执行返回 purchase_source_changed,目标业务表零新增且来源只保留已批准的测试变化。"],
|
||||
"cleanupSteps": ["按恢复点还原来源测试行并由第二人只读复核。"],
|
||||
"retryPolicy": "new_plan_and_new_key_required"
|
||||
},
|
||||
{
|
||||
"sequence": 10,
|
||||
"caseCode": "purchase_transaction_rollback",
|
||||
"title": "原 ERP 保存链失败时事务完整回滚",
|
||||
"commandName": "purchase.invoice.create",
|
||||
"captureMode": "execute",
|
||||
"expectedResultCode": "purchase_legacy_create_failed",
|
||||
"expectedIssueCode": null,
|
||||
"expectedMutationPolicy": "zero",
|
||||
"nativeConfirmationPolicy": "required",
|
||||
"minimumAuditEventCount": 2,
|
||||
"sourceDocumentProofRequired": false,
|
||||
"primaryRole": "customer_dba",
|
||||
"supportingRoles": ["legacy_erp_owner", "qa_operator", "dba_readonly_reviewer"],
|
||||
"fixtureCode": "purchase_controlled_save_failure",
|
||||
"preconditions": ["客户 DBA 已审批一个仅在可恢复 UAT 生效、可确定触发原 ERP 保存失败的测试夹具。"],
|
||||
"operatorSteps": ["记录事务前基线,完成双重确认并触发受控保存失败。"],
|
||||
"dbaReadOnlyChecks": ["确认主表、明细、来源占用、业务审计、来源附件和成功幂等结果均未部分提交;失败命令审计仍存在。"],
|
||||
"cleanupSteps": ["立即停用受控失败夹具,并复核后续正常事务不受影响。"],
|
||||
"retryPolicy": "new_plan_and_new_key_required"
|
||||
},
|
||||
{
|
||||
"sequence": 11,
|
||||
"caseCode": "purchase_idempotency_replay",
|
||||
"title": "同键同输入重放返回原结果且不重复创建",
|
||||
"commandName": "purchase.invoice.create",
|
||||
"captureMode": "execute",
|
||||
"expectedResultCode": "purchase_document_created",
|
||||
"expectedIssueCode": null,
|
||||
"expectedMutationPolicy": "zero",
|
||||
"nativeConfirmationPolicy": "required",
|
||||
"minimumAuditEventCount": 2,
|
||||
"sourceDocumentProofRequired": true,
|
||||
"primaryRole": "qa_operator",
|
||||
"supportingRoles": ["dba_readonly_reviewer"],
|
||||
"fixtureCode": "purchase_replay_commit_relationship",
|
||||
"preconditions": ["唯一提交用例已使用脱敏电子 PDF 成功,保留其精确业务输入、附件集合、pdfium_minimax_pages_v1 契约和受控幂等键;重新取得有效解析凭证并生成新计划。"],
|
||||
"operatorSteps": ["以与提交用例相同的业务输入和幂等键执行新计划,完成双重确认。"],
|
||||
"dbaReadOnlyChecks": ["确认返回原记录、事务和业务审计关系,replayed=true,业务变更数为零且没有第二张单据。"],
|
||||
"cleanupSteps": ["继续保留依赖记录直至幂等冲突用例完成。"],
|
||||
"retryPolicy": "dependency_key_relationship_required"
|
||||
},
|
||||
{
|
||||
"sequence": 12,
|
||||
"caseCode": "purchase_idempotency_conflict",
|
||||
"title": "同键不同输入必须拒绝",
|
||||
"commandName": "purchase.invoice.create",
|
||||
"captureMode": "execute",
|
||||
"expectedResultCode": "idempotency_key_conflict",
|
||||
"expectedIssueCode": null,
|
||||
"expectedMutationPolicy": "zero",
|
||||
"nativeConfirmationPolicy": "required",
|
||||
"minimumAuditEventCount": 2,
|
||||
"sourceDocumentProofRequired": false,
|
||||
"primaryRole": "qa_operator",
|
||||
"supportingRoles": ["dba_readonly_reviewer"],
|
||||
"fixtureCode": "purchase_conflict_commit_relationship",
|
||||
"preconditions": ["唯一提交用例已成功;准备一个业务输入指纹确定不同但仍可生成有效计划的脱敏输入。"],
|
||||
"operatorSteps": ["使用提交用例的同一幂等键执行不同输入的新计划。"],
|
||||
"dbaReadOnlyChecks": ["确认返回 idempotency_key_conflict,零业务变化且原成功幂等结果未被覆盖。"],
|
||||
"cleanupSteps": ["按整组恢复方案清理采购 UAT 记录、来源和临时审批。"],
|
||||
"retryPolicy": "dependency_key_relationship_required"
|
||||
},
|
||||
{
|
||||
"sequence": 13,
|
||||
"caseCode": "purchase_audit_correlated",
|
||||
"title": "采购提交的审计链关联证明",
|
||||
"commandName": "purchase.invoice.create",
|
||||
"captureMode": "derived_audit",
|
||||
"expectedResultCode": "purchase_document_created",
|
||||
"expectedIssueCode": null,
|
||||
"expectedMutationPolicy": "zero",
|
||||
"nativeConfirmationPolicy": "inherited_required",
|
||||
"minimumAuditEventCount": 2,
|
||||
"sourceDocumentProofRequired": true,
|
||||
"primaryRole": "dba_readonly_reviewer",
|
||||
"supportingRoles": ["qa_operator"],
|
||||
"fixtureCode": "purchase_audit_derived_from_commit",
|
||||
"preconditions": ["唯一提交采集必须已在同一次执行中请求关联审计输出。"],
|
||||
"operatorSteps": ["不得再次执行数据库写操作;只复核由提交响应离线派生的独立审计用例令牌绑定。"],
|
||||
"dbaReadOnlyChecks": ["确认记录、事务、业务审计、幂等键、计划、附件集合和 pdfium_minimax_pages_v1 契约均与唯一提交一致。"],
|
||||
"cleanupSteps": ["无需单独清理;随采购整组证据归档。"],
|
||||
"retryPolicy": "derived_with_dependency_only"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"workflow": "leave",
|
||||
"caseCount": 19,
|
||||
"cases": [
|
||||
{
|
||||
"sequence": 1,
|
||||
"caseCode": "leave_natural_language_resolution",
|
||||
"title": "单日自然语言请假唯一解析",
|
||||
"commandName": "hr.leave.resolve",
|
||||
"captureMode": "plan_only",
|
||||
"expectedResultCode": "leave_intent_resolved",
|
||||
"expectedIssueCode": null,
|
||||
"expectedMutationPolicy": "zero",
|
||||
"nativeConfirmationPolicy": "prohibited",
|
||||
"minimumAuditEventCount": 1,
|
||||
"sourceDocumentProofRequired": false,
|
||||
"primaryRole": "qa_operator",
|
||||
"supportingRoles": ["hr_fixture_owner", "dba_readonly_reviewer"],
|
||||
"fixtureCode": "leave_single_day_unique_resolution",
|
||||
"preconditions": ["当前 ERP 用户已绑定唯一员工、唯一可用假别、唯一有效流程类别和已知员工日历;选择测试时尚未过去的本周星期或下周星期。"],
|
||||
"operatorSteps": ["使用包含本人、本周X或下周X、明确上午下午全天和原因的自然语言,仅生成解析计划;确认 AstrBot 原样传递 dateExpression。", "核对星期由 ERP 当前本地时间按周一为周首解析、resolvedCommand=hr.leave.create、工时来自员工日历且 executionAllowed=false。"],
|
||||
"dbaReadOnlyChecks": ["确认零请假记录变化并保留一条解析审计。"],
|
||||
"cleanupSteps": ["无需数据库清理;销毁脱敏自然语言输入。"],
|
||||
"retryPolicy": "new_capture_allowed_while_authorization_active"
|
||||
},
|
||||
{
|
||||
"sequence": 2,
|
||||
"caseCode": "leave_multi_day_calendar_resolution",
|
||||
"title": "跨日请假按员工日历解析",
|
||||
"commandName": "hr.leave.resolve",
|
||||
"captureMode": "plan_only",
|
||||
"expectedResultCode": "leave_intent_resolved",
|
||||
"expectedIssueCode": null,
|
||||
"expectedMutationPolicy": "zero",
|
||||
"nativeConfirmationPolicy": "prohibited",
|
||||
"minimumAuditEventCount": 1,
|
||||
"sourceDocumentProofRequired": false,
|
||||
"primaryRole": "hr_fixture_owner",
|
||||
"supportingRoles": ["qa_operator", "dba_readonly_reviewer"],
|
||||
"fixtureCode": "leave_multi_day_known_calendar_hours",
|
||||
"preconditions": ["准备两个未来月日、两端明确时段和经 HR 只读核对的预期总工时;允许跨年但不得超过未来 366 天。"],
|
||||
"operatorSteps": ["使用“M月D日上午到M月D日下午”形式输入跨日自然语言及明确工时断言,仅生成解析计划;核对未写年份的月日由 ERP 本地时间解析到尚未过去的最近日期,并核对起止本地时间和总工时。"],
|
||||
"dbaReadOnlyChecks": ["确认解析使用当前员工日历且零请假记录变化。"],
|
||||
"cleanupSteps": ["无需数据库清理。"],
|
||||
"retryPolicy": "new_capture_allowed_while_authorization_active"
|
||||
},
|
||||
{
|
||||
"sequence": 3,
|
||||
"caseCode": "leave_resolution_proof_bypass_blocked",
|
||||
"title": "绕过解析或伪造解析凭证时阻断",
|
||||
"commandName": "hr.leave.create",
|
||||
"captureMode": "plan_only",
|
||||
"expectedResultCode": "leave_resolution_invalid",
|
||||
"expectedIssueCode": null,
|
||||
"expectedMutationPolicy": "zero",
|
||||
"nativeConfirmationPolicy": "prohibited",
|
||||
"minimumAuditEventCount": 1,
|
||||
"sourceDocumentProofRequired": false,
|
||||
"primaryRole": "qa_operator",
|
||||
"supportingRoles": ["dba_readonly_reviewer"],
|
||||
"fixtureCode": "leave_forged_or_missing_resolution_proof",
|
||||
"preconditions": ["准备缺少、伪造、过期或与当前会话范围不一致的创建输入,不使用服务器自动续接结果。"],
|
||||
"operatorSteps": ["直接请求创建计划,确认在读取请假业务数据和生成确认前返回 leave_resolution_invalid。"],
|
||||
"dbaReadOnlyChecks": ["确认零业务查询副作用、零请假记录变化且拒绝审计不含凭证明文。"],
|
||||
"cleanupSteps": ["销毁伪造输入,禁止复制任何真实 resolutionProof。"],
|
||||
"retryPolicy": "new_capture_allowed_while_authorization_active"
|
||||
},
|
||||
{
|
||||
"sequence": 4,
|
||||
"caseCode": "leave_ambiguous_type_blocked",
|
||||
"title": "假别名称多候选时阻断",
|
||||
"commandName": "hr.leave.resolve",
|
||||
"captureMode": "plan_only",
|
||||
"expectedResultCode": "leave_resolution_invalid",
|
||||
"expectedIssueCode": "leave_type_ambiguous",
|
||||
"expectedMutationPolicy": "zero",
|
||||
"nativeConfirmationPolicy": "prohibited",
|
||||
"minimumAuditEventCount": 1,
|
||||
"sourceDocumentProofRequired": false,
|
||||
"primaryRole": "hr_fixture_owner",
|
||||
"supportingRoles": ["qa_operator", "dba_readonly_reviewer"],
|
||||
"fixtureCode": "leave_two_enabled_type_aliases",
|
||||
"preconditions": ["在可恢复 UAT 配置中准备两个对相同用户输入同等有效的启用假别或别名。"],
|
||||
"operatorSteps": ["仅生成解析计划,确认返回候选和 leave_type_ambiguous,不自动选择。"],
|
||||
"dbaReadOnlyChecks": ["确认零请假记录变化。"],
|
||||
"cleanupSteps": ["恢复假别别名唯一性并由 HR 复核。"],
|
||||
"retryPolicy": "new_capture_allowed_while_authorization_active"
|
||||
},
|
||||
{
|
||||
"sequence": 5,
|
||||
"caseCode": "leave_ambiguous_flow_type_blocked",
|
||||
"title": "流程类别多候选时阻断",
|
||||
"commandName": "hr.leave.resolve",
|
||||
"captureMode": "plan_only",
|
||||
"expectedResultCode": "leave_resolution_invalid",
|
||||
"expectedIssueCode": "leave_flow_type_ambiguous",
|
||||
"expectedMutationPolicy": "zero",
|
||||
"nativeConfirmationPolicy": "prohibited",
|
||||
"minimumAuditEventCount": 1,
|
||||
"sourceDocumentProofRequired": false,
|
||||
"primaryRole": "low_code_config_admin",
|
||||
"supportingRoles": ["hr_fixture_owner", "qa_operator", "dba_readonly_reviewer"],
|
||||
"fixtureCode": "leave_two_active_flow_types",
|
||||
"preconditions": ["准备两个同时符合当前员工、假别、岗位和工时条件的有效流程类别。"],
|
||||
"operatorSteps": ["仅生成解析计划,确认返回候选和 leave_flow_type_ambiguous,不按名称或顺序选第一项。"],
|
||||
"dbaReadOnlyChecks": ["确认零请假记录变化。"],
|
||||
"cleanupSteps": ["恢复流程类别唯一性并重新签署配置画像。"],
|
||||
"retryPolicy": "new_capture_allowed_while_authorization_active"
|
||||
},
|
||||
{
|
||||
"sequence": 6,
|
||||
"caseCode": "leave_time_segment_required_blocked",
|
||||
"title": "缺少上午下午全天时要求补充",
|
||||
"commandName": "hr.leave.resolve",
|
||||
"captureMode": "plan_only",
|
||||
"expectedResultCode": "leave_resolution_invalid",
|
||||
"expectedIssueCode": "leave_time_segment_required",
|
||||
"expectedMutationPolicy": "zero",
|
||||
"nativeConfirmationPolicy": "prohibited",
|
||||
"minimumAuditEventCount": 1,
|
||||
"sourceDocumentProofRequired": false,
|
||||
"primaryRole": "qa_operator",
|
||||
"supportingRoles": ["dba_readonly_reviewer"],
|
||||
"fixtureCode": "leave_missing_day_part",
|
||||
"preconditions": ["使用有效日期但故意不说明上午、下午或全天。"],
|
||||
"operatorSteps": ["仅生成解析计划,确认系统追问且不补全时段。"],
|
||||
"dbaReadOnlyChecks": ["确认零请假记录变化。"],
|
||||
"cleanupSteps": ["无需数据库清理。"],
|
||||
"retryPolicy": "new_capture_allowed_while_authorization_active"
|
||||
},
|
||||
{
|
||||
"sequence": 7,
|
||||
"caseCode": "leave_local_time_zone_rejected",
|
||||
"title": "带时区的本地请假时间输入被 Schema 拒绝",
|
||||
"commandName": "hr.leave.create",
|
||||
"captureMode": "plan_only",
|
||||
"expectedResultCode": "input_schema_violation",
|
||||
"expectedIssueCode": null,
|
||||
"expectedMutationPolicy": "zero",
|
||||
"nativeConfirmationPolicy": "prohibited",
|
||||
"minimumAuditEventCount": 1,
|
||||
"sourceDocumentProofRequired": false,
|
||||
"primaryRole": "qa_operator",
|
||||
"supportingRoles": ["dba_readonly_reviewer"],
|
||||
"fixtureCode": "leave_utc_or_offset_time_input",
|
||||
"preconditions": ["准备 startLocal 或 endLocal 含 Z、UTC 或显式偏移的输入。"],
|
||||
"operatorSteps": ["请求创建计划,确认在业务查询前返回 input_schema_violation。"],
|
||||
"dbaReadOnlyChecks": ["确认零请假记录变化。"],
|
||||
"cleanupSteps": ["销毁无效测试输入。"],
|
||||
"retryPolicy": "new_capture_allowed_while_authorization_active"
|
||||
},
|
||||
{
|
||||
"sequence": 8,
|
||||
"caseCode": "leave_other_employee_denied",
|
||||
"title": "无代申请权限时拒绝其他员工",
|
||||
"commandName": "hr.leave.resolve",
|
||||
"captureMode": "plan_only",
|
||||
"expectedResultCode": "leave_resolution_invalid",
|
||||
"expectedIssueCode": "leave_employee_reference_unsupported",
|
||||
"expectedMutationPolicy": "zero",
|
||||
"nativeConfirmationPolicy": "prohibited",
|
||||
"minimumAuditEventCount": 1,
|
||||
"sourceDocumentProofRequired": false,
|
||||
"primaryRole": "erp_security_admin",
|
||||
"supportingRoles": ["qa_operator", "dba_readonly_reviewer"],
|
||||
"fixtureCode": "leave_other_employee_without_delegation",
|
||||
"preconditions": ["当前 UAT 用户没有代申请权限,并准备一个不属于当前用户的脱敏员工引用。"],
|
||||
"operatorSteps": ["仅生成解析计划,确认返回 leave_employee_reference_unsupported 且不泄露员工资料。"],
|
||||
"dbaReadOnlyChecks": ["确认零请假记录变化和零越权员工业务读取。"],
|
||||
"cleanupSteps": ["无需权限变更或数据库清理。"],
|
||||
"retryPolicy": "new_capture_allowed_while_authorization_active"
|
||||
},
|
||||
{
|
||||
"sequence": 9,
|
||||
"caseCode": "leave_permission_denied",
|
||||
"title": "请假创建命令权限不足时阻断",
|
||||
"commandName": "hr.leave.create",
|
||||
"captureMode": "plan_only",
|
||||
"expectedResultCode": "command_access_denied",
|
||||
"expectedIssueCode": null,
|
||||
"expectedMutationPolicy": "zero",
|
||||
"nativeConfirmationPolicy": "prohibited",
|
||||
"minimumAuditEventCount": 1,
|
||||
"sourceDocumentProofRequired": false,
|
||||
"primaryRole": "erp_security_admin",
|
||||
"supportingRoles": ["qa_operator", "dba_readonly_reviewer"],
|
||||
"fixtureCode": "leave_command_permission_removed",
|
||||
"preconditions": ["使用专用 UAT 用户,临时移除请假创建命令所需的原 ERP 权限。"],
|
||||
"operatorSteps": ["尝试创建计划,确认能力不可见或返回 command_access_denied,且没有确认按钮。"],
|
||||
"dbaReadOnlyChecks": ["确认零业务变更并存在权限拒绝审计。"],
|
||||
"cleanupSteps": ["恢复原权限并重新登录 ERP。"],
|
||||
"retryPolicy": "new_capture_allowed_while_authorization_active"
|
||||
},
|
||||
{
|
||||
"sequence": 10,
|
||||
"caseCode": "leave_database_permission_recheck_denied",
|
||||
"title": "数据库请假写权限复核拒绝并回滚",
|
||||
"commandName": "hr.leave.create",
|
||||
"captureMode": "execute",
|
||||
"expectedResultCode": "leave_write_permission_denied",
|
||||
"expectedIssueCode": null,
|
||||
"expectedMutationPolicy": "zero",
|
||||
"nativeConfirmationPolicy": "required",
|
||||
"minimumAuditEventCount": 2,
|
||||
"sourceDocumentProofRequired": false,
|
||||
"primaryRole": "customer_dba",
|
||||
"supportingRoles": ["erp_security_admin", "qa_operator", "dba_readonly_reviewer"],
|
||||
"fixtureCode": "leave_database_write_grant_denied",
|
||||
"preconditions": ["命令权限和解析允许有效预览,但数据库写权限复核对当前用户明确拒绝或已失效。"],
|
||||
"operatorSteps": ["完成双重确认并执行,确认返回 leave_write_permission_denied。"],
|
||||
"dbaReadOnlyChecks": ["确认零请假记录变化、幂等结果未记为成功,计划和执行审计均存在。"],
|
||||
"cleanupSteps": ["恢复经过审批的 UAT 写权限复核行。"],
|
||||
"retryPolicy": "new_plan_and_new_key_required"
|
||||
},
|
||||
{
|
||||
"sequence": 11,
|
||||
"caseCode": "leave_create_draft_commit",
|
||||
"title": "创建请假草稿且不自动提交",
|
||||
"commandName": "hr.leave.create",
|
||||
"captureMode": "execute",
|
||||
"expectedResultCode": "leave_draft_created",
|
||||
"expectedIssueCode": null,
|
||||
"expectedMutationPolicy": "positive",
|
||||
"nativeConfirmationPolicy": "required",
|
||||
"minimumAuditEventCount": 2,
|
||||
"sourceDocumentProofRequired": false,
|
||||
"primaryRole": "qa_operator",
|
||||
"supportingRoles": ["hr_fixture_owner", "dba_readonly_reviewer"],
|
||||
"fixtureCode": "leave_valid_draft",
|
||||
"preconditions": ["当前员工、假别、流程、日历和时间范围唯一有效且无重叠。"],
|
||||
"operatorSteps": ["核对解析后的本地时段、工时、部门岗位和原因,完成双重确认创建草稿。", "同次采集必须生成 leave_audit_correlated;即使用户表达提交意图,也只接受新的后续提交计划。"],
|
||||
"dbaReadOnlyChecks": ["确认只新增一条草稿、提交计数为零,事务和业务审计完整。"],
|
||||
"cleanupSteps": ["保留草稿作为提交、重放、冲突和审计关联用例的依赖。"],
|
||||
"retryPolicy": "single_success_then_relationship_cases_only"
|
||||
},
|
||||
{
|
||||
"sequence": 12,
|
||||
"caseCode": "leave_submit_separate_confirmation",
|
||||
"title": "请假提交必须经过第二次独立确认",
|
||||
"commandName": "hr.leave.submit",
|
||||
"captureMode": "execute",
|
||||
"expectedResultCode": "leave_submitted",
|
||||
"expectedIssueCode": null,
|
||||
"expectedMutationPolicy": "positive",
|
||||
"nativeConfirmationPolicy": "required",
|
||||
"minimumAuditEventCount": 2,
|
||||
"sourceDocumentProofRequired": false,
|
||||
"primaryRole": "qa_operator",
|
||||
"supportingRoles": ["hr_fixture_owner", "dba_readonly_reviewer"],
|
||||
"fixtureCode": "leave_submit_created_draft",
|
||||
"preconditions": ["草稿创建用例已成功,记录仍为可提交状态且没有自动提交。"],
|
||||
"operatorSteps": ["使用服务器返回的新提交计划、新幂等键和第二次桌宠及 ERP 原生确认完成提交。"],
|
||||
"dbaReadOnlyChecks": ["确认沿用同一草稿记录,但计划、输入指纹、事务、审计和幂等键均与创建不同,提交计数恰好增加一次。"],
|
||||
"cleanupSteps": ["保留记录直至整组关系验证完成。"],
|
||||
"retryPolicy": "dependency_key_relationship_required"
|
||||
},
|
||||
{
|
||||
"sequence": 13,
|
||||
"caseCode": "leave_overlap_blocked",
|
||||
"title": "与已有请假时间重叠时阻断",
|
||||
"commandName": "hr.leave.create",
|
||||
"captureMode": "plan_only",
|
||||
"expectedResultCode": "leave_request_invalid",
|
||||
"expectedIssueCode": null,
|
||||
"expectedMutationPolicy": "zero",
|
||||
"nativeConfirmationPolicy": "prohibited",
|
||||
"minimumAuditEventCount": 1,
|
||||
"sourceDocumentProofRequired": false,
|
||||
"primaryRole": "hr_fixture_owner",
|
||||
"supportingRoles": ["qa_operator", "dba_readonly_reviewer"],
|
||||
"fixtureCode": "leave_existing_overlap",
|
||||
"preconditions": ["准备一条当前员工有效、未删除且与测试时段重叠的请假记录。"],
|
||||
"operatorSteps": ["仅生成创建计划,确认返回 leave_request_invalid 且无可执行计划。"],
|
||||
"dbaReadOnlyChecks": ["确认既有记录未变化且没有新增草稿。"],
|
||||
"cleanupSteps": ["按 HR 测试数据台账恢复或移除重叠记录。"],
|
||||
"retryPolicy": "new_capture_allowed_while_authorization_active"
|
||||
},
|
||||
{
|
||||
"sequence": 14,
|
||||
"caseCode": "leave_stale_flow_type_blocked",
|
||||
"title": "预览后流程类别失效时阻断",
|
||||
"commandName": "hr.leave.create",
|
||||
"captureMode": "execute",
|
||||
"expectedResultCode": "leave_request_changed",
|
||||
"expectedIssueCode": null,
|
||||
"expectedMutationPolicy": "zero",
|
||||
"nativeConfirmationPolicy": "required",
|
||||
"minimumAuditEventCount": 2,
|
||||
"sourceDocumentProofRequired": false,
|
||||
"primaryRole": "low_code_config_admin",
|
||||
"supportingRoles": ["hr_fixture_owner", "qa_operator", "dba_readonly_reviewer"],
|
||||
"fixtureCode": "leave_flow_disabled_after_plan",
|
||||
"preconditions": ["准备可生成有效创建计划的唯一流程类别,并批准可恢复的计划后停用动作。"],
|
||||
"operatorSteps": ["使用 PauseAfterPlanForOperatorStaging 固定计划。", "暂停期间由授权配置人员停用或替换流程类别,再输入精确阶段确认口令继续。"],
|
||||
"dbaReadOnlyChecks": ["确认执行返回 leave_request_changed,零请假记录变化。"],
|
||||
"cleanupSteps": ["恢复流程配置并重新签署客户画像及相关哈希。"],
|
||||
"retryPolicy": "new_plan_and_new_key_required"
|
||||
},
|
||||
{
|
||||
"sequence": 15,
|
||||
"caseCode": "leave_runtime_recheck_blocked",
|
||||
"title": "预览后日历工时或规则变化时阻断",
|
||||
"commandName": "hr.leave.create",
|
||||
"captureMode": "execute",
|
||||
"expectedResultCode": "leave_request_changed",
|
||||
"expectedIssueCode": null,
|
||||
"expectedMutationPolicy": "zero",
|
||||
"nativeConfirmationPolicy": "required",
|
||||
"minimumAuditEventCount": 2,
|
||||
"sourceDocumentProofRequired": false,
|
||||
"primaryRole": "hr_fixture_owner",
|
||||
"supportingRoles": ["customer_dba", "qa_operator", "dba_readonly_reviewer"],
|
||||
"fixtureCode": "leave_calendar_changed_after_plan",
|
||||
"preconditions": ["准备可生成有效创建计划的员工日历,并批准一项最小且可恢复的计划后日历或规则变化。"],
|
||||
"operatorSteps": ["使用 PauseAfterPlanForOperatorStaging 固定计划。", "暂停期间改变测试时段日历工时或其他绑定规则,再输入精确阶段确认口令继续。"],
|
||||
"dbaReadOnlyChecks": ["确认即使仅变化最小工时也返回 leave_request_changed,零请假记录变化。"],
|
||||
"cleanupSteps": ["恢复员工日历和规则并由 HR 第二人复核。"],
|
||||
"retryPolicy": "new_plan_and_new_key_required"
|
||||
},
|
||||
{
|
||||
"sequence": 16,
|
||||
"caseCode": "leave_transaction_rollback",
|
||||
"title": "请假原保存链失败时事务完整回滚",
|
||||
"commandName": "hr.leave.create",
|
||||
"captureMode": "execute",
|
||||
"expectedResultCode": "leave_legacy_create_failed",
|
||||
"expectedIssueCode": null,
|
||||
"expectedMutationPolicy": "zero",
|
||||
"nativeConfirmationPolicy": "required",
|
||||
"minimumAuditEventCount": 2,
|
||||
"sourceDocumentProofRequired": false,
|
||||
"primaryRole": "customer_dba",
|
||||
"supportingRoles": ["legacy_erp_owner", "qa_operator", "dba_readonly_reviewer"],
|
||||
"fixtureCode": "leave_controlled_save_failure",
|
||||
"preconditions": ["客户 DBA 已审批一个仅在可恢复 UAT 生效、可确定触发请假保存失败的测试夹具。"],
|
||||
"operatorSteps": ["记录事务前基线,完成双重确认并触发受控保存失败。"],
|
||||
"dbaReadOnlyChecks": ["确认请假主记录、派生字段、业务审计和成功幂等结果均未部分提交;失败命令审计仍存在。"],
|
||||
"cleanupSteps": ["立即停用受控失败夹具并复测正常事务。"],
|
||||
"retryPolicy": "new_plan_and_new_key_required"
|
||||
},
|
||||
{
|
||||
"sequence": 17,
|
||||
"caseCode": "leave_idempotency_replay",
|
||||
"title": "请假同键同输入重放不重复创建",
|
||||
"commandName": "hr.leave.create",
|
||||
"captureMode": "execute",
|
||||
"expectedResultCode": "leave_draft_created",
|
||||
"expectedIssueCode": null,
|
||||
"expectedMutationPolicy": "zero",
|
||||
"nativeConfirmationPolicy": "required",
|
||||
"minimumAuditEventCount": 2,
|
||||
"sourceDocumentProofRequired": false,
|
||||
"primaryRole": "qa_operator",
|
||||
"supportingRoles": ["dba_readonly_reviewer"],
|
||||
"fixtureCode": "leave_replay_draft_relationship",
|
||||
"preconditions": ["草稿创建用例已成功,保留相同业务输入和幂等键;重新解析取得有效凭证并生成新计划。"],
|
||||
"operatorSteps": ["以相同业务输入和幂等键执行新计划并完成双重确认。"],
|
||||
"dbaReadOnlyChecks": ["确认返回原草稿关系、replayed=true、业务变更数为零且没有第二条草稿。"],
|
||||
"cleanupSteps": ["继续保留依赖记录直至冲突用例完成。"],
|
||||
"retryPolicy": "dependency_key_relationship_required"
|
||||
},
|
||||
{
|
||||
"sequence": 18,
|
||||
"caseCode": "leave_idempotency_conflict",
|
||||
"title": "请假同键不同输入必须拒绝",
|
||||
"commandName": "hr.leave.create",
|
||||
"captureMode": "execute",
|
||||
"expectedResultCode": "idempotency_key_conflict",
|
||||
"expectedIssueCode": null,
|
||||
"expectedMutationPolicy": "zero",
|
||||
"nativeConfirmationPolicy": "required",
|
||||
"minimumAuditEventCount": 2,
|
||||
"sourceDocumentProofRequired": false,
|
||||
"primaryRole": "qa_operator",
|
||||
"supportingRoles": ["dba_readonly_reviewer"],
|
||||
"fixtureCode": "leave_conflict_draft_relationship",
|
||||
"preconditions": ["草稿创建用例已成功;准备一个业务输入指纹确定不同但仍能生成有效计划的脱敏请假输入。"],
|
||||
"operatorSteps": ["使用草稿创建用例的同一幂等键执行不同输入的新计划。"],
|
||||
"dbaReadOnlyChecks": ["确认返回 idempotency_key_conflict,零业务变化且原成功幂等结果未被覆盖。"],
|
||||
"cleanupSteps": ["按整组恢复方案清理请假 UAT 记录、日历、流程和临时权限。"],
|
||||
"retryPolicy": "dependency_key_relationship_required"
|
||||
},
|
||||
{
|
||||
"sequence": 19,
|
||||
"caseCode": "leave_audit_correlated",
|
||||
"title": "请假草稿创建的审计链关联证明",
|
||||
"commandName": "hr.leave.create",
|
||||
"captureMode": "derived_audit",
|
||||
"expectedResultCode": "leave_draft_created",
|
||||
"expectedIssueCode": null,
|
||||
"expectedMutationPolicy": "zero",
|
||||
"nativeConfirmationPolicy": "inherited_required",
|
||||
"minimumAuditEventCount": 2,
|
||||
"sourceDocumentProofRequired": false,
|
||||
"primaryRole": "dba_readonly_reviewer",
|
||||
"supportingRoles": ["qa_operator"],
|
||||
"fixtureCode": "leave_audit_derived_from_draft",
|
||||
"preconditions": ["草稿创建采集必须已在同一次执行中请求关联审计输出。"],
|
||||
"operatorSteps": ["不得再次执行数据库写操作;只复核由草稿创建响应离线派生的独立审计用例令牌绑定。"],
|
||||
"dbaReadOnlyChecks": ["确认记录、事务、业务审计、幂等键和计划均与草稿创建用例一致。"],
|
||||
"cleanupSteps": ["无需单独清理;随请假整组证据归档。"],
|
||||
"retryPolicy": "derived_with_dependency_only"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user