held when the bank transfer starts: posted when the bank confirms it, voided when it fails
How each refusal comes about
payout.hold: insufficient_balance
1 payout.hold(payout_id: payout_id-1, shop: shop-2, amount: 0.01) refused: insufficient_balance (move 1 takes 0.01 from shop_balance(shop-2): posted 0.00, held out 0.00)
payout.hold: key_conflict
1 sale.do(order: order-1, shop: shop-2, to_shop: 0.01, fee: 0.02) done
2 payout.hold(payout_id: payout_id-3, shop: shop-2, amount: 0.01) done
3 payout.hold(payout_id: payout_id-3, shop: shop-2, amount: 0.03) refused: key_conflict
payout.hold: already_refused
1 payout.hold(payout_id: payout_id-1, shop: shop-2, amount: 0.01) refused: insufficient_balance (move 1 takes 0.01 from shop_balance(shop-2): posted 0.00, held out 0.00)
2 payout.hold(payout_id: payout_id-1, shop: shop-2, amount: 0.01) refused: already_refused
payout.post: key_conflict
1 sale.do(order: order-1, shop: shop-2, to_shop: 0.02, fee: 0.03) done
2 payout.hold(payout_id: payout_id-3, shop: shop-2, amount: 0.02) done
3 payout.post(payout_id: payout_id-3) done
4 payout.post(payout_id: payout_id-3, amount: 0.01) refused: key_conflict
payout.post: already_voided
1 sale.do(order: order-1, shop: shop-2, to_shop: 0.02, fee: 0.03) done
2 payout.hold(payout_id: payout_id-3, shop: shop-2, amount: 0.02) done
3 payout.void(payout_id: payout_id-3) done
4 payout.post(payout_id: payout_id-3) refused: already_voided
payout.post: over_hold
1 sale.do(order: order-1, shop: shop-2, to_shop: 0.02, fee: 0.03) done
2 payout.hold(payout_id: payout_id-3, shop: shop-2, amount: 0.02) done
3 payout.post(payout_id: payout_id-3, amount: 0.03) refused: over_hold
payout.post: no_such_hold
1 payout.post(payout_id: payout_id-1) refused: no_such_hold
payout.void: already_posted
1 sale.do(order: order-1, shop: shop-2, to_shop: 0.02, fee: 0.03) done
2 payout.hold(payout_id: payout_id-3, shop: shop-2, amount: 0.02) done
3 payout.post(payout_id: payout_id-3) done
4 payout.void(payout_id: payout_id-3) refused: already_posted
payout.void: no_such_hold
1 payout.void(payout_id: payout_id-1) refused: no_such_hold