feat(billing): implement full wallet/ledger system with hard-stop enforcement
CognxSafeTrack +1: Claude Sonnet 4.6
- Add walletBalance + isHardStopped to Organization schema; WalletTransaction ledger model with full audit trail
- wallet.ts (worker): debitWallet (atomic $transaction), creditWallet (with AuditLog), checkWalletBalance (Redis 30s cache), alert queuing (low/critical/exhausted/restored)
- wallet.ts (api): creditWallet for admin top-up with cache invalidation
- usage-tracker.ts: debitWallet integrated into trackAiUsage, trackAudioUsage, trackWhatsAppSent; BYOK orgs skipped
- BroadcastHandler + CampaignHandler: bulk debit after send (BROADCAST_PER_USER per recipient)
- requireCredits.ts: migrated from aiCreditsUsed/Limit to walletBalance/isHardStopped; shares Redis cache key with worker
- whatsapp-logic.ts: replaced assertCredits/CreditExhaustedError with checkWalletBalance/WalletExhaustedError
- ai.ts: added requireCredits preHandler to all 11 AI routes (was 4)
- billing.ts: /admin/allocate now calls creditWallet(); new GET /wallet route (balance + 20 last txns)
- BillingPage: wallet card…