tractatus/docs/stripe-analysis/STRIPE_BANK_ACCOUNT_BUG_2025-10-21.md
TheFlow 2298d36bed fix(submissions): restructure Economist package and fix article display
- Create Economist SubmissionTracking package correctly:
  * mainArticle = full blog post content
  * coverLetter = 216-word SIR— letter
  * Links to blog post via blogPostId
- Archive 'Letter to The Economist' from blog posts (it's the cover letter)
- Fix date display on article cards (use published_at)
- Target publication already displaying via blue badge

Database changes:
- Make blogPostId optional in SubmissionTracking model
- Economist package ID: 68fa85ae49d4900e7f2ecd83
- Le Monde package ID: 68fa2abd2e6acd5691932150

Next: Enhanced modal with tabs, validation, export

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-24 08:47:42 +13:00

292 lines
7.7 KiB
Markdown

# 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