.claude/skills/sync-sol/SKILL.md
Export Banco Sol transactions, categorize with AI, and import to YNAB
npx skillsauth add israellias/betterynab-sync sync-solInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
All python commands MUST use .venv/bin/python (not python or python3).
When the user runs this skill:
Run the export + convert pipeline:
.venv/bin/python -m sol --dry-run [--since-date YYYY-MM-DD if provided]
(This opens the browser, exports PDF, converts transactions, saves to sol/transactions.json)
Load the converted transactions:
.venv/bin/python -c "import json; from sol import load_pending_transactions; print(json.dumps(load_pending_transactions()))"
Check if sol/rules.md exists:
Pattern (in memo) | Payee | Category for when a memo pattern should set both payee and categorysol/rules.md with proper markdown formatting, then continueFetch BOB Budget categories (returns [{"id": "uuid", "name": "Category Name"}, ...]):
.venv/bin/python -c "import json; from sol import get_bob_categories; print(json.dumps(get_bob_categories()))"
For each transaction:
a. Apply payee+category rules from sol/rules.md (pattern matching on memo)
b. Apply transfer rules (detect own-account transfers)
c. For unmatched: use AI judgment based on memo text + detail (recipient, glosa) + AI Guidance section in sol/rules.md
d. Fuzzy-match the rule's category name against actual YNAB category names (ignore emojis)
e. Set category_id on the transaction using the matched category's id (YNAB requires the UUID, not a name)
If --auto-accept was passed: skip to step 8
Show the user a table:
Date | Amount | Payee | Category | Memo (truncated) | Source (rule/AI)
Ask user to approve or adjust
Write the final categorized transactions back to sol/transactions.json, then import to YNAB:
.venv/bin/python -c "import json, sys; from sol import import_to_ynab; txns = json.loads(sys.stdin.read()); result = import_to_ynab(txns); print(json.dumps(result))" (pipe the JSON via stdin)
tools
Sync BOB Budget transactions to USD Budget with exchange rate conversion
development
Export BISA transactions, categorize with AI, and import to YNAB
development
Export Baneco transactions, categorize with AI, and import to YNAB
testing
Sync all bank pipelines and reconcile balances against YNAB