tractatus/docs/stripe-analysis/STRIPE_BANK_ACCOUNT_BUG_2025-10-21.md
TheFlow 9ce02a01ad chore(docs): archive historical session and analysis documents
- Archived 44 session handoffs to .claude/session-archive/
- Archived 7 Stripe analyses to docs/stripe-analysis/
- Archived Economist analyses to docs/economist-analysis/
- Archived framework incidents to docs/framework-incidents/
- Archived deployment logs to docs/deployment-logs/
- Created ARCHIVE_SUMMARY_2025-10-21.md with full index
- Created OPTIMAL_NEXT_SESSION_STARTUP_PROMPT_2025-10-21.md

Result: Root directory reduced from 70+ to 25 essential docs

🤖 Generated with Claude Code
Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-21 11:58:15 +13:00

7.7 KiB

CRITICAL: Stripe Bank Account Configuration Bug

Date: 2025-10-21
Priority: 🚨 CRITICAL
Impact: Payouts to incorrect bank account
Status: Investigation in progress


Issue Summary

User Report:

  • Correct bank account: 15-3959-xxxxx36-085
  • Stripe displays: ••••0085 / 153959
  • Problem: Extra '0' added (should be 085 not 0085)
  • Cannot confirm edit in Stripe Dashboard

Impact:

  • Payouts may fail or go to wrong account
  • User's $5 test transaction already processed
  • Payout scheduled but may fail due to incorrect account number

Root Cause Analysis

Where This Configuration Lives

NOT in your website code - Bank account configuration is stored in:

  • Stripe Dashboard → Settings → Bank accounts and scheduling
  • This is configured directly in Stripe's system
  • Your website code (Koha) doesn't touch this

How the Bug Likely Occurred

NZ Bank Account Format: XX-XXXX-XXXXXXX-XXX

  • Branch: 15
  • Account: 3959
  • Suffix: (hidden in your report)
  • Last digits: 085

Stripe's Interpretation:

  • Stripe may have parsed: 153959xxxxx36085
  • Then formatted as: 153959 / 0085 (added leading zero)
  • This is a Stripe dashboard parsing bug for NZ bank accounts

Why Edit Doesn't Work

When you click [Edit] in Stripe Dashboard:

  1. Form opens with current (incorrect) value
  2. You enter correct value
  3. Form saves and returns to summary
  4. But: No visual confirmation that edit was saved
  5. And: Stripe may be re-parsing the number incorrectly again

Immediate Action Required

Step 1: Verify Current Bank Account in Stripe

Log into Stripe Dashboard:

  1. Go to https://dashboard.stripe.com
  2. Navigate to: Settings → Bank accounts and scheduling
  3. Check what Stripe has on file

Expected to see:

Bank: TSB Bank
Account: ••••0085 / 153959

Need to verify:

  • Is the routing number (153959) correct?
  • Is the account number suffix (0085 vs 085) correct?

Step 2: Correct Format for NZ Bank Accounts

NZ Bank Account Components:

Bank code: 15 (TSB Bank)
Branch: 3959
Account base: xxxxx36
Suffix: 085

Stripe Format (varies by country):

  • Routing number: Typically bank-branch (15-3959 = 153959)
  • Account number: Typically base-suffix (xxxxx36-085)

Your issue: Suffix should be 085 not 0085

Step 3: Fix in Stripe Dashboard

Method 1: Edit Existing

  1. Stripe Dashboard → Settings → Bank accounts
  2. Click "Edit" on the TSB Bank account
  3. Carefully enter:
    • Bank code: 15
    • Branch: 3959
    • Account number: xxxxx36
    • Suffix: 085 (NOT 0085)
  4. Click "Save"
  5. Verify: Does it show correctly after save?

Method 2: Delete and Re-add

  1. Delete the incorrect bank account
  2. Click "Add bank account"
  3. Select country: New Zealand
  4. Bank: TSB Bank
  5. Enter account number in NZ format: 15-3959-xxxxx36-085
  6. Let Stripe parse it
  7. Verify before saving: Check preview is correct

Step 4: Test Payout (Critical)

After correcting:

  1. Stripe Dashboard → Balance → Manual payout
  2. Request payout of small amount (e.g., $1)
  3. Monitor: Does it arrive in correct account within 2-3 business days?
  4. If it fails: Stripe will email you with error details

Why This is Critical

Current Situation

Your $5 test transaction:

  • Status: Succeeded (Oct 18)
  • Stripe balance: $4.56 (after fees)
  • Payout: Scheduled but delayed by Labour Day bank holiday
  • Risk: Will attempt payout to account 0085 instead of 085

If Payout Fails

Stripe will:

  1. Return funds to Stripe balance
  2. Email you about failed payout
  3. Mark bank account as "verification needed"
  4. Require you to fix and retry

If Payout Succeeds to Wrong Account

This is unlikely because:

  • Invalid account numbers usually get rejected by bank
  • Bank will return funds to Stripe
  • But: Small risk of funds going to wrong account if 0085 exists

How to Verify the Fix Worked

After Editing Bank Account

  1. Visual Check (Stripe Dashboard):

    • Settings → Bank accounts
    • Should show: ••••085 / 153959 (NOT ••••0085)
  2. Micro-Deposit Test (if Stripe offers it):

    • Some regions: Stripe sends 2 small deposits to verify
    • You confirm amounts to verify account ownership
    • Not always available in NZ
  3. Small Payout Test:

    • Request manual payout of $1-5
    • Check it arrives in your TSB account
    • Confirms routing and account number are correct

Long-Term Fix

For Future Transactions

  1. Correct bank account in Stripe Dashboard
  2. Test with small payout before large transactions
  3. Monitor email for Stripe payout notifications
  4. Enable 2FA on Stripe account (prevents unauthorized changes)

For This Transaction

Your $5 test payment:

  • Already succeeded (money left your card)
  • Payout to bank scheduled
  • Watch for:
    • Payout success email from Stripe
    • Money arriving in TSB account
    • Or: Payout failure email (then you know to fix)

Technical Details (For Developers)

NZ Bank Account Format

Standard: XX-XXXX-XXXXXXX-XXX

  • Bank (2 digits): 15 = TSB Bank
  • Branch (4 digits): 3959
  • Base (7 digits): xxxxx36
  • Suffix (3 digits): 085

Stripe expects (varies by integration):

  • Routing number: 153959 (bank + branch)
  • Account number: xxxxx36085 (base + suffix)

Leading Zero Issue:

  • Suffix 085 should NOT become 0085
  • Stripe dashboard may be adding leading zero incorrectly
  • This is a Stripe parsing bug for NZ accounts

Not a Code Issue

Your website code (Koha donation form) does NOT:

  • Store bank account numbers
  • Configure payout settings
  • Handle bank account validation

Stripe API handles:

  • Creating checkout sessions (what Koha does)
  • Processing payments (Stripe's responsibility)
  • Sending payouts (configured in Stripe Dashboard)

This bug is in Stripe's dashboard configuration, not your code.


Immediate Checklist

  • Log into Stripe Dashboard
  • Navigate to Settings → Bank accounts
  • Click "Edit" on TSB Bank account
  • Verify suffix is 085 not 0085
  • If wrong: Correct to 085
  • Save and verify change persists
  • Request test payout of $1
  • Monitor for payout arrival (2-3 business days)
  • Enable 2FA on Stripe account
  • Enable payout notification emails

Support Resources

If you can't fix in dashboard:

  1. Contact Stripe Support: https://support.stripe.com
  2. Chat with Stripe: Dashboard → Help → Chat
  3. Explain: "NZ bank account suffix showing 0085 instead of 085"
  4. Reference: TSB Bank account ending in 085

Stripe Support can:

  • Manually correct your bank account details
  • Verify the account format is correct
  • Help process test payout to verify
  • Investigate why edit doesn't persist

Status Updates

2025-10-21 (Initial Report):

  • Issue identified by user
  • Bank account number has extra '0'
  • Cannot confirm edit in Stripe Dashboard
  • $5 test transaction already processed
  • Payout scheduled but may fail

Next Steps:

  1. User logs into Stripe Dashboard
  2. User attempts to correct bank account
  3. User reports back if edit persists or fails
  4. If edit fails: Contact Stripe Support immediately
  5. If edit succeeds: Request test payout to verify

Risk Assessment

Current Risk: 🟡 MODERATE TO HIGH

  • Payout amount: Small ($4.56)
  • Payout timing: Delayed by Labour Day (gives time to fix)
  • Account error: May cause rejection (funds return to Stripe)
  • Wrong account: Unlikely (invalid accounts get rejected)

Action Required: Fix bank account configuration in next 24-48 hours


Prepared by: Claude Code (Autonomous Security & Bug Investigation)
Status: Awaiting user action in Stripe Dashboard
Priority: CRITICAL - Affects real money payouts