docs(归档): 归档代理自充支付方式与员工代收款路由前缀两个变更
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 53s

- add-agent-self-recharge-payment-methods 归档为 2026-09-11-add-agent-self-recharge-payment-methods,delta 应用后主规格 agent-funds-commission 完成 1 条 Requirement 改名并新增 4 条 Requirement
- 在可达操作索引补充代理自充支付方式配置与付款凭证识别共 3 个端点
- 同步 requirement-evidence.json 与 entry-capability-requirement-matrix.json 证据链
- fix-employee-collection-route-prefix 归档为 2026-09-11-fix-employee-collection-route-prefix 并勾选任务 2.5

门禁:context-health 通过、openspec validate --all 40 passed / 0 failed、doctor healthy
This commit is contained in:
2026-09-11 15:49:17 +08:00
parent 5ee8e3cb4a
commit 315a7de3e4
12 changed files with 304 additions and 21 deletions

View File

@@ -199,7 +199,8 @@
"requirements": [
"agent-funds-commission::充值边界",
"identity-access::数据范围拒绝",
"order-payment-wallet::金额单位"
"order-payment-wallet::金额单位",
"agent-funds-commission::线下预存款审批收款方式、其他凭证与交易流水号"
],
"classification": "behavior"
},
@@ -211,7 +212,7 @@
"agent-funds-commission::充值边界",
"identity-access::数据范围拒绝",
"order-payment-wallet::金额单位",
"agent-funds-commission::代理在线充值可用支付方式按支付配置判定"
"agent-funds-commission::代理在线充值可用支付方式按允许范围与可用商户池判定"
],
"classification": "behavior"
},
@@ -222,7 +223,8 @@
"requirements": [
"agent-funds-commission::充值边界",
"identity-access::数据范围拒绝",
"order-payment-wallet::金额单位"
"order-payment-wallet::金额单位",
"agent-funds-commission::线下预存款审批收款方式、其他凭证与交易流水号"
],
"classification": "behavior"
},
@@ -1770,7 +1772,8 @@
"identity-access::数据范围拒绝",
"order-payment-wallet::金额单位",
"external-integration::富友主扫统一下单与订单查询",
"merchant-payment-routing::新支付商户快照与历史兼容"
"merchant-payment-routing::新支付商户快照与历史兼容",
"agent-funds-commission::线下预存款审批收款方式、其他凭证与交易流水号"
],
"classification": "behavior"
},
@@ -3797,7 +3800,8 @@
"entry": "PUT /api/admin/employee-collection-payment-methods/{id}",
"capability": "employee-collection-bill",
"requirements": [
"employee-collection-bill::收款方式字典、退款联动与可追溯性"
"employee-collection-bill::收款方式字典、退款联动与可追溯性",
"agent-funds-commission::线下收款方式字典对代理充值引用的可见性"
],
"classification": "behavior"
},
@@ -3806,7 +3810,8 @@
"entry": "DELETE /api/admin/employee-collection-payment-methods/{id}",
"capability": "employee-collection-bill",
"requirements": [
"employee-collection-bill::收款方式字典、退款联动与可追溯性"
"employee-collection-bill::收款方式字典、退款联动与可追溯性",
"agent-funds-commission::线下收款方式字典对代理充值引用的可见性"
],
"classification": "behavior"
},
@@ -3884,5 +3889,33 @@
"employee-collection-bill::核销申请审批、重提与幂等"
],
"classification": "behavior"
},
{
"entry_type": "http",
"entry": "GET /api/admin/agent-self-recharge-payment-methods",
"capability": "agent-funds-commission",
"requirements": [
"agent-funds-commission::代理在线充值可用支付方式按允许范围与可用商户池判定",
"agent-funds-commission::代理自充允许方式配置可审计"
],
"classification": "behavior"
},
{
"entry_type": "http",
"entry": "PUT /api/admin/agent-self-recharge-payment-methods",
"capability": "agent-funds-commission",
"requirements": [
"agent-funds-commission::代理自充允许方式配置可审计"
],
"classification": "behavior"
},
{
"entry_type": "http",
"entry": "POST /api/admin/agent-recharges/payment-voucher-ocr",
"capability": "agent-funds-commission",
"requirements": [
"agent-funds-commission::付款凭证识别仅作交易流水号预填"
],
"classification": "behavior"
}
]

View File

@@ -1611,16 +1611,19 @@
},
{
"capability": "agent-funds-commission",
"requirement": "代理在线充值可用支付方式按支付配置判定",
"requirement": "代理在线充值可用支付方式按允许范围与可用商户池判定",
"spec": "openspec/specs/agent-funds-commission/spec.md",
"entries": [
"GET /api/admin/agent-recharges/payment-methods"
"GET /api/admin/agent-recharges/payment-methods",
"GET /api/admin/agent-self-recharge-payment-methods",
"POST /api/admin/agent-recharges"
],
"handler_consumer_job": [
"internal/handler/admin/agent_recharge.go:AgentRechargeHandler.PaymentMethods"
],
"application_service_query": [
"internal/application/agentrecharge/online_creation.go:OnlineCreationService.AvailablePaymentMethods"
"internal/application/agentrecharge/online_creation.go:OnlineCreationService.AvailablePaymentMethods",
"internal/application/agentrecharge/online_payment_policy.go:OnlinePaymentMethodPolicy.AllowedMethods"
],
"domain_state_amount": [
"internal/model/agent_wallet.go:AgentRechargeRecord.PaymentMethod/PaymentChannel"
@@ -1629,9 +1632,9 @@
"internal/application/agentrecharge/online_creation.go:adapter.Available"
],
"verification": {
"command": "python3 -c 'from pathlib import Path; checks=[('\"'\"'internal/handler/admin/agent_recharge.go'\"'\"', '\"'\"'AvailablePaymentMethods'\"'\"'), ('\"'\"'internal/application/agentrecharge/online_creation.go'\"'\"', '\"'\"'adapter.Available(config)'\"'\"'), ('\"'\"'internal/model/agent_wallet.go'\"'\"', '\"'\"'PaymentChannel'\"'\"')]; negative=[]; missing=[f'\"'\"'{p}:{t}'\"'\"' for p,t in checks if t not in Path(p).read_text()]; present=[f'\"'\"'{p}:{t}'\"'\"' for p,t in negative if t in Path(p).read_text()]; assert not missing and not present, {'\"'\"'missing'\"'\"': missing, '\"'\"'present'\"'\"': present}; print('\"'\"'OK: agent-funds-commission::代理在线充值可用支付方式按支付配置判定'\"'\"')'",
"command": "python3 -c 'from pathlib import Path; checks=[(\"internal/application/agentrecharge/online_creation.go\", \"allowed, err := s.policy.AllowedMethods(ctx)\"), (\"internal/application/agentrecharge/online_creation.go\", \"adapter.Available(config)\"), (\"internal/application/agentrecharge/online_payment_policy.go\", \"func (p *OnlinePaymentMethodPolicy) AllowedMethods(\"), (\"internal/application/agentrecharge/online_payment_policy.go\", \"func (p *OnlinePaymentMethodPolicy) IsAllowed(\"), (\"internal/handler/admin/agent_recharge.go\", \"func (h *AgentRechargeHandler) SelfRechargePaymentMethods(\")]; negative=[]; missing=[f\"{p}:{t}\" for p,t in checks if t not in Path(p).read_text()]; present=[f\"{p}:{t}\" for p,t in negative if t in Path(p).read_text()]; assert not missing and not present, {\"missing\": missing, \"present\": present}; print(\"OK: agent-funds-commission::代理在线充值可用支付方式按允许范围与可用商户池判定\")'",
"literal_output": [
"OK: agent-funds-commission::代理在线充值可用支付方式按支付配置判定"
"OK: agent-funds-commission::代理在线充值可用支付方式按允许范围与可用商户池判定"
],
"exit_status": 0
}
@@ -2862,5 +2865,116 @@
],
"exit_status": 0
}
},
{
"capability": "agent-funds-commission",
"requirement": "代理自充允许方式配置可审计",
"spec": "openspec/specs/agent-funds-commission/spec.md",
"entries": [
"GET /api/admin/agent-self-recharge-payment-methods",
"PUT /api/admin/agent-self-recharge-payment-methods"
],
"handler_consumer_job": [
"internal/routes/agent_self_recharge_payment_method.go",
"internal/handler/admin/agent_recharge.go"
],
"application_service_query": [
"internal/application/agentrecharge/online_payment_policy.go"
],
"domain_state_amount": [
"pkg/constants/system_config.go"
],
"store_migration_config": [
"internal/bootstrap/payment_method_config.go"
],
"verification": {
"command": "python3 -c 'from pathlib import Path; checks=[(\"pkg/constants/system_config.go\", \"SystemConfigAgentSelfRechargeAllowedMethods\"), (\"pkg/constants/system_config.go\", \"AgentSelfRechargeAllowedBoth\"), (\"internal/bootstrap/payment_method_config.go\", \"DefaultValue: constants.AgentSelfRechargeAllowedBoth\"), (\"internal/bootstrap/payment_method_config.go\", \"EnumValues: []string{constants.AgentSelfRechargeAllowedWechatOnly\"), (\"internal/handler/admin/agent_recharge.go\", \"func (h *AgentRechargeHandler) UpdateSelfRechargePaymentMethods(\"), (\"internal/routes/agent_self_recharge_payment_method.go\", \"仅超级管理员可以修改代理自充允许范围\")]; negative=[]; missing=[f\"{p}:{t}\" for p,t in checks if t not in Path(p).read_text()]; present=[f\"{p}:{t}\" for p,t in negative if t in Path(p).read_text()]; assert not missing and not present, {\"missing\": missing, \"present\": present}; print(\"OK: agent-funds-commission::代理自充允许方式配置可审计\")'",
"literal_output": [
"OK: agent-funds-commission::代理自充允许方式配置可审计"
],
"exit_status": 0
}
},
{
"capability": "agent-funds-commission",
"requirement": "线下预存款审批收款方式、其他凭证与交易流水号",
"spec": "openspec/specs/agent-funds-commission/spec.md",
"entries": [
"POST /api/admin/agent-recharges"
],
"handler_consumer_job": [
"internal/handler/admin/agent_recharge.go",
"internal/application/agentrecharge/offline_creation.go"
],
"application_service_query": [
"internal/application/agentrecharge/offline_creation.go"
],
"domain_state_amount": [
"internal/model/agent_wallet.go"
],
"store_migration_config": [
"migrations/000213_add_agent_recharge_offline_fields.up.sql"
],
"verification": {
"command": "python3 -c 'from pathlib import Path; checks=[(\"internal/application/agentrecharge/offline_creation.go\", \"func loadEnabledOfflinePaymentMethod(\"), (\"internal/application/agentrecharge/offline_creation.go\", \"func validateRechargeTransactionNo(\"), (\"internal/application/agentrecharge/offline_creation.go\", \"func validateVoucherKeys(\"), (\"migrations/000213_add_agent_recharge_offline_fields.up.sql\", \"external_transaction_no varchar(128)\"), (\"migrations/000213_add_agent_recharge_offline_fields.up.sql\", \"other_voucher_keys jsonb\"), (\"internal/model/agent_wallet.go\", \"column:external_transaction_no\"), (\"internal/model/agent_wallet.go\", \"column:offline_payment_method_code\"), (\"internal/application/wecom/scene.go\", \"constants.ApprovalFieldExternalTransactionNo\"), (\"internal/application/wecom/scene.go\", \"constants.ApprovalFieldOtherVoucherKey\")]; negative=[]; missing=[f\"{p}:{t}\" for p,t in checks if t not in Path(p).read_text()]; present=[f\"{p}:{t}\" for p,t in negative if t in Path(p).read_text()]; assert not missing and not present, {\"missing\": missing, \"present\": present}; print(\"OK: agent-funds-commission::线下预存款审批收款方式、其他凭证与交易流水号\")'",
"literal_output": [
"OK: agent-funds-commission::线下预存款审批收款方式、其他凭证与交易流水号"
],
"exit_status": 0
}
},
{
"capability": "agent-funds-commission",
"requirement": "付款凭证识别仅作交易流水号预填",
"spec": "openspec/specs/agent-funds-commission/spec.md",
"entries": [
"POST /api/admin/agent-recharges/payment-voucher-ocr"
],
"handler_consumer_job": [
"internal/handler/admin/agent_recharge.go",
"internal/routes/agent_recharge.go"
],
"application_service_query": [
"internal/application/agentrecharge/payment_voucher_ocr.go"
],
"domain_state_amount": [],
"store_migration_config": [
"internal/gateway/payment_voucher.go"
],
"verification": {
"command": "python3 -c 'from pathlib import Path; checks=[(\"internal/gateway/payment_voucher.go\", \"func (c *Client) ExtractPaymentVoucherOrderNumber(\"), (\"internal/application/agentrecharge/payment_voucher_ocr.go\", \"func (s *PaymentVoucherOCRService) Recognize(\"), (\"internal/application/agentrecharge/payment_voucher_ocr.go\", \"ExternalTransactionNo string\"), (\"internal/handler/admin/agent_recharge.go\", \"func (h *AgentRechargeHandler) PaymentVoucherOCR(\"), (\"internal/routes/agent_recharge.go\", \"/payment-voucher-ocr\")]; negative=[(\"internal/application/agentrecharge/payment_voucher_ocr.go\", \"AmountCent\"), (\"internal/application/agentrecharge/payment_voucher_ocr.go\", \"Payee\"), (\"internal/application/agentrecharge/payment_voucher_ocr.go\", \"PaymentTime\")]; missing=[f\"{p}:{t}\" for p,t in checks if t not in Path(p).read_text()]; present=[f\"{p}:{t}\" for p,t in negative if t in Path(p).read_text()]; assert not missing and not present, {\"missing\": missing, \"present\": present}; print(\"OK: agent-funds-commission::付款凭证识别仅作交易流水号预填\")'",
"literal_output": [
"OK: agent-funds-commission::付款凭证识别仅作交易流水号预填"
],
"exit_status": 0
}
},
{
"capability": "agent-funds-commission",
"requirement": "线下收款方式字典对代理充值引用的可见性",
"spec": "openspec/specs/agent-funds-commission/spec.md",
"entries": [
"PUT /api/admin/employee-collection-payment-methods/{id}",
"DELETE /api/admin/employee-collection-payment-methods/{id}"
],
"handler_consumer_job": [
"internal/handler/admin/employee_collection.go"
],
"application_service_query": [
"internal/application/employeecollection/payment_method.go"
],
"domain_state_amount": [
"internal/domain/employeecollection/payment_method.go"
],
"store_migration_config": [
"internal/model/agent_wallet.go"
],
"verification": {
"command": "python3 -c 'from pathlib import Path; checks=[(\"internal/application/employeecollection/payment_method.go\", \"func countPaymentMethodReferences(\"), (\"internal/application/employeecollection/payment_method.go\", \"model.AgentRechargeRecord{}\"), (\"internal/application/employeecollection/payment_method.go\", \"offline_payment_method_id = ?\"), (\"internal/application/employeecollection/payment_method.go\", \"线下收款方式已被核销申请或代理充值申请引用,不能修改稳定编码\")]; negative=[]; missing=[f\"{p}:{t}\" for p,t in checks if t not in Path(p).read_text()]; present=[f\"{p}:{t}\" for p,t in negative if t in Path(p).read_text()]; assert not missing and not present, {\"missing\": missing, \"present\": present}; print(\"OK: agent-funds-commission::线下收款方式字典对代理充值引用的可见性\")'",
"literal_output": [
"OK: agent-funds-commission::线下收款方式字典对代理充值引用的可见性"
],
"exit_status": 0
}
}
]