Vault Transaction Upload Documentation
Overview
The Vault Transaction Upload feature allows users to upload CSV files containing transaction data directly from the Document Vault interface. This provides a unified experience where users can manage both their documents and financial transactions from a single location.Architecture
Component Structure
The transaction upload functionality is built using a reusable approach that leverages existing transaction CSV processing logic:Key Design Decisions
- Component Reusability: Rather than duplicating CSV processing logic, the component reuses the same parsing and validation functions used in the main transactions page
- Separation of Concerns: Document uploads and transaction uploads are kept as separate dialogs for clarity
- User Experience: The upload process provides immediate feedback and clear progress indicators
- No Folder Dependency: Transaction uploads don’t require folder selection, simplifying the workflow
User Flow
Step 1: Initiate Upload
- User clicks “Upload Transactions” button in the Vault page header
- Button is always enabled (unlike document upload which requires folder selection)
- PostHog analytics event
vault_transactions_upload_clickedis tracked
Step 2: File Upload
- User selects a CSV file containing transaction data
- File validation ensures only CSV files are accepted
- Supported CSV formats:
- Standard bank export formats
- Custom formats with manual column mapping
Step 3: Column Mapping
- System attempts to auto-detect columns:
- Date
- Description/Merchant
- Amount
- Category (optional)
- User can manually map columns if auto-detection fails
- Preview of first few rows displayed for verification
Step 4: Category Mapping
- Automatic category assignment using:
- Exact match against existing transaction categories
- AI-powered categorization for unmatched transactions
- User can review and modify suggested categories
- Unknown categories are flagged for manual review
Step 5: Preview and Confirmation
- Display summary of transactions to be imported
- Show count and total amount
- Allow final review before import
Step 6: Import Execution
- Transactions are imported to the database
- Progress indicator shows import status
- Success toast notification displayed
- User redirected or prompted to view transactions
Component Implementation
Main Component: UploadTransactionsVault
Located at:app/vault/components/upload-transactions-vault.tsx
Key Features
State Management
CSV Processing
The component leverages existing CSV parsing logic:Integration with Vault Page
Located at:app/vault/page.tsx
API Integration
Endpoints Used
- Parse CSV: Client-side parsing using Papa Parse library
- Import Transactions:
/api/transactions/import(existing endpoint) - AI Categorization:
/api/transactions/categorize(existing endpoint)
Data Flow
Comparison: Vault Upload vs. Transactions Page Upload
Similarities
- Both use the same CSV parsing logic
- Both support automatic category mapping with AI
- Both provide preview before import
- Both handle the same transaction data formats
Differences
Error Handling
Common Errors and Solutions
-
Invalid CSV Format
- Error: “Invalid CSV file format”
- Solution: Ensure file is properly formatted CSV with headers
- Recovery: User can re-upload a corrected file
-
Missing Required Columns
- Error: “Required columns not found: Date, Amount”
- Solution: Manual column mapping interface
- Recovery: User maps columns explicitly
-
Invalid Date Format
- Error: “Unable to parse dates in column”
- Solution: Suggest common date formats
- Recovery: User selects correct date format
-
Duplicate Transactions
- Warning: “X transactions appear to be duplicates”
- Solution: Show duplicate detection with option to skip
- Recovery: User can review and deselect duplicates
-
Import Failure
- Error: “Failed to import transactions”
- Solution: Log detailed error and show user-friendly message
- Recovery: User can retry import or contact support
Analytics Tracking
Events Tracked
Future Enhancements
Planned Features
-
Template Support
- Save column mappings as templates
- Quick import with saved templates
- Share templates across organization
-
Batch Processing
- Import multiple CSV files at once
- Progress tracking for large imports
- Background processing for very large files
-
Advanced Validation
- Balance reconciliation checks
- Duplicate detection across files
- Spending pattern anomaly detection
-
Integration with Document Vault
- Link imported transactions to source documents
- Attach receipts or invoices to transactions
- Track document-to-transaction relationships
-
Export Capabilities
- Export filtered transactions back to CSV
- Generate reports from imported data
- Format conversions (QFX, OFX, etc.)
Best Practices
For Developers
- Component Reusability: Always check if existing logic can be reused before implementing new parsing/validation
- Error Handling: Provide clear, actionable error messages
- Analytics: Track key user actions for product insights
- Testing: Test with various CSV formats and edge cases
- Documentation: Keep this doc updated with any changes
For Users
- CSV Format: Ensure CSV has clear headers for Date, Description, and Amount
- Data Review: Always review the preview before importing
- Category Mapping: Review AI-suggested categories for accuracy
- Backup: Keep original CSV files as backup
- Regular Imports: Import transactions regularly to maintain accurate records
Troubleshooting
Debug Mode
Enable debug logging for troubleshooting:Common Issues
-
Component Not Showing
- Check if dialog state is properly managed
- Verify button onClick handler
- Check for z-index conflicts
-
CSV Not Parsing
- Verify file type is CSV
- Check for encoding issues (UTF-8 recommended)
- Inspect Papa Parse configuration
-
Import Failing Silently
- Check browser console for errors
- Verify API endpoint is accessible
- Check authentication tokens
Conclusion
The Vault Transaction Upload feature provides a seamless way for users to import financial data while managing their documents. By reusing existing CSV processing logic and providing clear user feedback, the feature enhances the overall vault experience without adding unnecessary complexity. For questions or issues, refer to the main vault documentation atdocs/vault-architecture.md or the transaction processing documentation.