6.2 KiB
6.2 KiB
Smart Recurring Expense Detection & Subscription Management
Overview
FINA now includes intelligent recurring expense detection that automatically identifies subscription patterns and suggests them to users. This feature helps users track and manage their recurring expenses more effectively.
Features Implemented
1. Smart Detection Algorithm
- Analyzes expense history to find recurring patterns
- Detects frequencies: Weekly, Bi-weekly, Monthly, Quarterly, Yearly
- Considers:
- Amount similarity (5% tolerance)
- Description matching (fuzzy matching)
- Time intervals (consistent payment dates)
- Category grouping (same category)
- Generates confidence score (0-100%) for each detection
- Minimum 3 occurrences required for pattern detection
2. Subscription Management
- Track active subscriptions with payment schedules
- Add subscriptions manually or accept AI suggestions
- View total costs (monthly and yearly)
- Pause/Resume subscriptions without deleting
- Upcoming payments widget on dashboard
- Notes field for additional context
3. Smart Suggestions
- AI-detected patterns shown as suggestions
- Confidence score indicates reliability
- Shows occurrence count and time period
- Accept to convert to subscription
- Dismiss to hide unwanted suggestions
- Visual indicators for high-confidence matches
4. Dashboard Integration
- Upcoming subscriptions widget (next 30 days)
- Notification badge for new suggestions
- Quick link to subscription management
- Real-time payment reminders
Usage
Running Detection
- Navigate to Subscriptions page
- Click 🔍 Detect Recurring button
- Algorithm analyzes your expense history
- Suggestions appear with confidence scores
Managing Suggestions
- ✅ Accept: Converts pattern to tracked subscription
- ❌ Dismiss: Hides the suggestion
- View details: Amount, frequency, occurrences, time range
Adding Subscriptions
- Manual Entry: Click "➕ Add Subscription"
- Fill in: Name, Amount, Frequency, Category, Next Payment Date
- Add optional notes
Tracking Payments
- View all active subscriptions
- See monthly and annual costs
- Check upcoming payment dates
- Edit or pause anytime
API Endpoints
/subscriptions/detect (POST)
Runs detection algorithm for current user
/subscriptions/api/upcoming (GET)
Returns upcoming subscriptions as JSON
- Query param:
days(default: 30)
/subscriptions/suggestion/<id>/accept (POST)
Converts detected pattern to subscription
/subscriptions/suggestion/<id>/dismiss (POST)
Dismisses a suggestion
Detection Algorithm Details
Pattern Matching
# Amount tolerance: 5% or $5 (whichever is larger)
tolerance = max(amount * 0.05, 5.0)
# Description normalization
- Removes dates, transaction numbers
- Lowercases and strips whitespace
- Checks word overlap (60% threshold)
# Interval analysis
- Calculates average days between transactions
- Checks variance (lower = higher confidence)
- Maps to standard frequencies
Confidence Scoring
Base confidence starts at 50-70% depending on interval consistency:
- +15% for monthly patterns (most common)
- +10% for weekly patterns
- +10% if amount variance < 5%
- -10% if amount variance > 20%
- -10% for less common intervals
Database Schema
Subscriptions Table
name: Subscription name (e.g., "Netflix")amount: Payment amountfrequency: weekly | biweekly | monthly | quarterly | yearlycategory_id: Linked categorynext_due_date: Next payment dateis_active: Active/paused statusis_confirmed: User confirmed (vs AI suggestion)auto_detected: Created from AI detectionconfidence_score: Detection confidence (0-100)notes: User notes
Recurring Patterns Table
- Stores detected patterns before user confirmation
- Links to original expense IDs (JSON array)
- Tracks acceptance/dismissal status
- Prevents duplicate suggestions
Multi-Language Support
All subscription features fully translated:
- 🇬🇧 English
- 🇷🇴 Romanian
- 🇪🇸 Spanish
Translation keys added:
subscription.*- All subscription-related text- Frequency labels (weekly, monthly, etc.)
- Dashboard widgets
- Action buttons
Best Practices
For Users
- Add expenses regularly - More data = better detection
- Use consistent descriptions - Helps pattern matching
- Run detection monthly - Catch new subscriptions
- Review suggestions carefully - Check confidence scores
- Add notes - Remember renewal terms, cancellation dates
For Developers
- Run detection as background job - Don't block UI
- Cache detection results - Expensive operation
- Adjust confidence thresholds - Based on user feedback
- Monitor false positives - Track dismissal rates
- Extend pattern types - Add custom frequencies
Future Enhancements
- Email/push notifications for upcoming payments
- Category-based insights (subscription spending)
- Price change detection
- Cancellation reminders
- Bulk operations
- Export subscription list
- Recurring expense auto-entry
- Integration with calendar apps
Testing
# Rebuild with new models
docker compose down
docker compose up --build -d
# Access app
http://localhost:5001/subscriptions
# Test detection
1. Add similar expenses (3+) with regular intervals
2. Click "Detect Recurring"
3. Check suggestions appear with confidence scores
4. Accept or dismiss suggestions
5. View on dashboard
Troubleshooting
No patterns detected:
- Need minimum 3 similar transactions
- Check amount similarity (within 5%)
- Ensure consistent time intervals
- Verify same category used
Low confidence scores:
- Irregular payment dates
- Varying amounts
- Different descriptions
- Try manual entry instead
Missing upcoming payments:
- Check
next_due_dateis set - Verify subscription is active
- Ensure date within 30 days
Architecture
User Actions
↓
Routes (subscriptions.py)
↓
Smart Detection (smart_detection.py)
↓
Models (subscription.py)
↓
Database (SQLite)
Pattern detection is stateless and can run independently. Results stored in recurring_patterns table until user action.