Approved refund is issued correctly
5 checks · within 2 minutes after resolution
3 policy decisions are unrecorded for approved version 1. Approval is retained; review before renewed approval.
What retained approval means
This retained or seeded approval does not prove that a person accepted its policy assumptions. Existing approval has been preserved without inventing decisions. New approval still requires acceptance on the version being approved.
Approved policy
- When
- A refund ticket is resolved after the agent approves the request.
- Verify
- Succeeded refunds on the named payment equal the requested amount
- Without a requested amount, the payment is refunded in full
- The payment's currency matches the requested currency
- At most one refund was issued against the payment
- No other payment of the customer was refunded for this request
4 checks are conditional. Their applicability is defined under Accepted alternatives.
- Within
- 2 minutes after the ticket is resolved. Observed unmet conditions become violated at that deadline; condition evidence still unknown after the deadline is indeterminate.
- Missing evidence handling
- Use the order explicitly named in the ticket. If that reference cannot be resolved, the result is indeterminate and needs review. No match is inferred from email or recency.
- Accepted alternatives
When the 4 conditional checks apply
- Succeeded refunds on the named payment equal the requested amount
Check only when a payment is present and the requested refund amount is specified. Otherwise this check is not applicable.
- Without a requested amount, the payment is refunded in full
Check only when a payment is present and the requested refund amount is not specified. Otherwise this check is not applicable.
- The payment's currency matches the requested currency
Check only when a payment is present and the requested currency is specified. Otherwise this check is not applicable.
- At most one refund was issued against the payment
Check only when a payment is present. Otherwise this check is not applicable.
- Succeeded refunds on the named payment equal the requested amount
Policy decisions
3 need acceptance on version 1Accept, request a change, or defer. Each decision records who decided and which version it applies to.
- A request without a structured amount means a full refund of the payment.Undecided
Source and effect on the rule
Source: policy document Approved refund workflowNo historical sample behind itGoverns: refund_full_when_unspecified, refund_amount_correctChanging it touches condition "Without a requested amount, the payment is refunded in full" (refund_full_when_unspecified, applies only when charge.exists eq true and ticket.requestedAmountMinor eq null); condition "Succeeded refunds on the named payment equal the requested amount" (refund_amount_correct, applies only when charge.exists eq true and ticket.requestedAmountMinor neq null). Recording a change does not alter monitoring: v1 keeps being enforced as written until the conditions are edited, which creates v2 and resets approval.
- Split refunds are not allowed: at most one refund per payment per request.Undecided
Source and effect on the rule
Source: policy document Approved refund workflowNo historical sample behind itGoverns: refund_singleChanging it touches condition "At most one refund was issued against the payment" (refund_single, applies only when charge.exists eq true). Recording a change does not alter monitoring: v1 keeps being enforced as written until the conditions are edited, which creates v2 and resets approval.
- Tickets resolved without agent approval (declined or escalated requests) are not monitored.Undecided
Source and effect on the rule
Source: policy document Approved refund workflowNo historical sample behind itField: trigger.requiresAgentApprovalChanging it touches the trigger (currently only tickets the agent approved are monitored). Recording a change does not alter monitoring: v1 keeps being enforced as written until the conditions are edited, which creates v2 and resets approval.
Edit rule and preview changes
Changes create a new unapproved version. Read the preview before saving; historical executions keep their original policy.
Rule sources and technical definition
When the support agent approves a refund request and resolves the ticket, the payment for the order named in the ticket must carry a succeeded refund for exactly the requested amount, in the requested currency, within two minutes. Refunds on other payments of the same customer do not count.
- onboarding instruction · customer request
Approved refunds must land on the named payment for exactly the requested amount.
- Approved refund workflow · policy document
issues one refund for the requested amount (minor units, requested currency) against that charge
- Support API (requestedAmountMinor, requestedCurrency), Payments API · api schema
Advanced rule definition (JSON)
{
"id": "ctr_refund_executed_yc-recording-v1",
"tenantId": "yc-recording-v1",
"name": "Approved refund is issued correctly",
"description": "When the support agent approves a refund request and resolves the ticket, the payment for the order named in the ticket must carry a succeeded refund for exactly the requested amount, in the requested currency, within two minutes. Refunds on other payments of the same customer do not count.",
"version": 1,
"trigger": {
"object": "ticket",
"categories": [
"refund"
],
"status": "resolved",
"requiresAgentApproval": true
},
"identifiers": {
"order": {
"source": "ticket.orderRef",
"required": true
}
},
"conditions": [
{
"path": "refunds.succeededMinor",
"op": "eq",
"ref": "ticket.requestedAmountMinor",
"id": "refund_amount_correct",
"description": "Succeeded refunds on the named payment equal the requested amount",
"applicableWhen": [
{
"path": "charge.exists",
"op": "eq",
"value": true
},
{
"path": "ticket.requestedAmountMinor",
"op": "neq",
"value": null
}
]
},
{
"path": "refunds.succeededMinor",
"op": "eq",
"ref": "charge.amountMinor",
"id": "refund_full_when_unspecified",
"description": "Without a requested amount, the payment is refunded in full",
"applicableWhen": [
{
"path": "charge.exists",
"op": "eq",
"value": true
},
{
"path": "ticket.requestedAmountMinor",
"op": "eq",
"value": null
}
]
},
{
"path": "charge.currency",
"op": "eq",
"ref": "ticket.requestedCurrency",
"id": "refund_currency_matches",
"description": "The payment's currency matches the requested currency",
"applicableWhen": [
{
"path": "charge.exists",
"op": "eq",
"value": true
},
{
"path": "ticket.requestedCurrency",
"op": "neq",
"value": null
}
]
},
{
"path": "refunds.count",
"op": "lte",
"value": 1,
"id": "refund_single",
"description": "At most one refund was issued against the payment",
"applicableWhen": [
{
"path": "charge.exists",
"op": "eq",
"value": true
}
]
},
{
"path": "siblingRefunds.sinceTicketMinor",
"op": "eq",
"value": 0,
"id": "no_refund_on_other_payments",
"description": "No other payment of the customer was refunded for this request",
"applicableWhen": []
}
],
"instance": {
"eventTypes": [
"ticket.resolved"
],
"initialRetrySeconds": 30,
"maxRetrySeconds": 600,
"maxAgeSeconds": 86400
},
"deadlineSeconds": 120,
"severity": "high",
"approved": true,
"approvedAt": "2026-10-30T14:32:32.938Z",
"enabled": true,
"draftedBy": "template",
"provenance": {
"sources": [
{
"kind": "customer_request",
"ref": "onboarding instruction",
"excerpt": "Approved refunds must land on the named payment for exactly the requested amount."
},
{
"kind": "policy_document",
"ref": "Approved refund workflow",
"excerpt": "issues one refund for the requested amount (minor units, requested currency) against that charge"
},
{
"kind": "api_schema",
"ref": "Support API (requestedAmountMinor, requestedCurrency), Payments API"
}
],
"assumptions": [
"A request without a structured amount means a full refund of the payment.",
"Split refunds are not allowed: at most one refund per payment per request.",
"Tickets resolved without agent approval (declined or escalated requests) are not monitored."
]
},
"createdAt": "2026-10-30T14:32:32.938Z",
"updatedAt": "2026-10-30T14:32:32.938Z"
}Recorded outcomes (8)
- Ticket tkt_mvv2neqm52n5a1b6Evaluated version 1 · Demo time · Oct 30, 14:38 UTCPending
- Ticket tkt_mvv2neek4ub7m582Evaluated version 1 · Demo time · Oct 30, 14:38 UTCNeeds review
- Ticket tkt_mvv2nb3p34qkh0snEvaluated version 1 · Demo time · Oct 30, 14:38 UTCViolated
- Ticket tkt_mvv2n6k010qple5vEvaluated version 1 · Demo time · Oct 30, 14:35 UTCViolated
- Ticket tkt_mvv2n681ss5hn6aEvaluated version 1 · Demo time · Oct 30, 14:32 UTCVerified
- Ticket tkt_mvv2n5vrkv3eugqEvaluated version 1 · Demo time · Oct 30, 14:32 UTCVerified
- Ticket tkt_mvv2n5jlcblys3mEvaluated version 1 · Demo time · Oct 30, 14:32 UTCVerified
- Ticket tkt_mvv2n56f41vz1bbEvaluated version 1 · Demo time · Oct 30, 14:32 UTCVerified
Version and policy decision history
Rule versions
- Version 1
5 checks · 2 minutes · 3 h ago · 8 recorded executions
Policy decisions
No human policy decisions recorded. Approval alone is not retrofitted as acceptance.