paisa
paisa copied to clipboard
Add rules to predict account based on regex patterns
Account Rules Feature
This implementation adds regex-based account prediction rules to Paisa's import system.
Overview
The new feature provides:
- Account Rules Management UI: Located at
/more/account-rules - New Template Helper:
predictAccountWithRulesfunction for import templates - API Endpoints: For managing account rules in the configuration
How to Use
1. Create Account Rules
- Navigate to More > Account Rules in the Paisa interface
- Click "New Rule" to create a rule
- Fill in the rule details:
- Name: A descriptive name (e.g., "Amazon Purchases")
- Pattern: A regex pattern (e.g.,
AMAZON.*|AMZ.*) - Account: Target account (e.g.,
Expenses:Shopping:Online) - Description: Optional description
- Enabled: Toggle to enable/disable the rule
2. Update Import Templates
Replace predictAccount with predictAccountWithRules in your import templates:
Before:
{{date ROW.A "DD/MM/YYYY"}} {{predictAccount ROW.B ROW.C prefix="Expenses:"}} {{amount ROW.D}}
Assets:Checking:SBI {{negate (amount ROW.D)}}
After:
{{date ROW.A "DD/MM/YYYY"}} {{predictAccountWithRules ROW.B ROW.C prefix="Expenses:"}} {{amount ROW.D}}
Assets:Checking:SBI {{negate (amount ROW.D)}}
3. How It Works
predictAccountWithRulesfirst tries to match transaction data against your regex rules- If a rule matches, it returns the configured account
- If no rules match, it falls back to the original TF-IDF based prediction
- Rules are processed in order - first match wins
- Rules respect the
prefixparameter if provided
Example Rules
E-commerce
- Pattern:
AMAZON.*|AMZ.*→ Account:Expenses:Shopping:Online - Pattern:
FLIPKART|FKRT.*→ Account:Expenses:Shopping:Online
Transportation
- Pattern:
UBER|LYFT|OLA→ Account:Expenses:Transportation:Rideshare - Pattern:
METRO|SUBWAY→ Account:Expenses:Transportation:Public
Utilities
- Pattern:
ELECTRIC.*|POWER.*→ Account:Expenses:Utilities:Electric - Pattern:
WATER.*|H2O→ Account:Expenses:Utilities:Water
Banking
- Pattern:
ATM.*FEE|WITHDRAWAL.*FEE→ Account:Expenses:Banking:Fees - Pattern:
INTEREST.*CREDIT→ Account:Income:Interest:Bank
Technical Details
Configuration Storage
Rules are stored in the paisa.yaml configuration file under account_rules:
account_rules:
- name: "Amazon Purchases"
pattern: "AMAZON.*"
account: "Expenses:Shopping:Online"
description: "Amazon purchases"
enabled: true
API Endpoints
GET /api/account-rules- List all rulesPOST /api/account-rules/upsert- Create/update a rulePOST /api/account-rules/delete- Delete a rule
Function Signature
predictAccountWithRules(...args, options)
Same parameters as predictAccount, with the added regex matching logic.
Benefits
- Precise Matching: Regex patterns allow exact matching of transaction descriptions
- Fallback Support: Falls back to ML-based prediction when no rules match
- Easy Management: Web UI for creating and managing rules
- Backward Compatible: Existing
predictAccounttemplates continue to work - Configurable: Rules can be enabled/disabled without deletion
Have you tried the match function, which more or less does what you want.
{{#if (isDate ROW.B "DD/MM/YYYY")}}
{{date ROW.B "DD/MM/YYYY"}} {{ROW.D}}
{{#if (or (eq (trim ROW.I) "0.00") (isBlank (trim ROW.I)))}}
{{or (match ROW.D Expenses:Food="ZOMATO" Expenses:Groceries="paytm" Liabilities:CreditCard:UB="POS")
"Expenses:Unknown"}} {{trim ROW.H}} INR
Assets:Checking:Union
{{else}}
Assets:Checking:Union
{{predictAccount prefix="Income"}} -{{trim ROW.I}} INR
{{/if}}
{{/if}}