held while it waits for approval: posted when it is approved, voided when it is turned down
How each refusal comes about
refund.hold: refund_exceeds_sale
1 refund.hold(request: request-1, order: order-2, amount: 0.01) refused: refund_exceeds_sale (move 1 takes 0.01 from refundable(order-2): posted 0.00, held out 0.00)
refund.hold: key_conflict
1 sale.do(order: order-1, amount: 0.01) done
2 refund.hold(request: request-2, order: order-1, amount: 0.01) done
3 refund.hold(request: request-2, order: order-1, amount: 0.02) refused: key_conflict
refund.hold: already_refused
1 refund.hold(request: request-1, order: order-2, amount: 0.01) refused: refund_exceeds_sale (move 1 takes 0.01 from refundable(order-2): posted 0.00, held out 0.00)
2 refund.hold(request: request-1, order: order-2, amount: 0.01) refused: already_refused
refund.post: key_conflict
1 sale.do(order: order-1, amount: 0.02) done
2 refund.hold(request: request-2, order: order-1, amount: 0.02) done
3 refund.post(request: request-2) done
4 refund.post(request: request-2, amount: 0.01) refused: key_conflict
refund.post: already_voided
1 sale.do(order: order-1, amount: 0.02) done
2 refund.hold(request: request-2, order: order-1, amount: 0.02) done
3 refund.void(request: request-2) done
4 refund.post(request: request-2) refused: already_voided
refund.post: expired
1 sale.do(order: order-1, amount: 0.02) done
2 refund.hold(request: request-2, order: order-1, amount: 0.02) done
3 pass 7 days refund(request-2) expired
4 refund.post(request: request-2) refused: expired
refund.post: over_hold
1 sale.do(order: order-1, amount: 0.02) done
2 refund.hold(request: request-2, order: order-1, amount: 0.02) done
3 refund.post(request: request-2, amount: 0.03) refused: over_hold
refund.post: no_such_hold
1 refund.post(request: request-1) refused: no_such_hold
refund.void: already_posted
1 sale.do(order: order-1, amount: 0.02) done
2 refund.hold(request: request-2, order: order-1, amount: 0.02) done
3 refund.post(request: request-2) done
4 refund.void(request: request-2) refused: already_posted
refund.void: expired
1 sale.do(order: order-1, amount: 0.02) done
2 refund.hold(request: request-2, order: order-1, amount: 0.02) done
3 pass 7 days refund(request-2) expired
4 refund.void(request: request-2) refused: expired
refund.void: no_such_hold
1 refund.void(request: request-1) refused: no_such_hold