matyasstoch/david-skills/bank-statement-reconciliation
Claude Code and agent skill by matyasstoch/david-skills
- community
Checking that the SKILL.md file is still in the repository.
Verify a bank's monthly CSV and PDF exports agree before trusting either for bookkeeping. Use when reconciling bank statements, importing monthly bank exports, or building a local ledger from raw bank data.
Install
npx vskill@latest install matyasstoch/david-skills/bank-statement-reconciliationSKILL.md
Bank Statement Reconciliation
When a bank gives you both a CSV and a PDF for the same statement period, never trust either in isolation. Verify they agree on three things before using them downstream.
When to use
- New monthly bank statement files land in
data/imports/<bank>/ - About to import bank data into Zoho / Xero / a local ledger
- Diffing annual vs monthly exports for the same bank
- Wio Business specifically — see
references/wio-business.md
The 3-point verification
For each (CSV, PDF) pair:
- Row count match.
len(csv_rows) == count(date-prefixed lines in PDF). Mismatch ≠ automatic fail (PDF text-extraction can double-count wrapped descriptions), but flag it for manual eyeball. - Closing balance match. Extract from PDF header (regex:
CLOSING BALANCE.*?([\d,]+\.\d{2})\s*AED). Must equal the lastBalancecolumn value in the CSV to the cent. - Chain integrity. This month's opening balance = previous month's closing balance. Computed:
csv_rows[0].Balance - csv_rows[0].Amount. Off-by-cent = real gap.
If 2 and 3 pass but 1 doesn't, the data is usable. If 2 or 3 fails, stop and investigate.
Standard recipe (Python)
Pitfalls
- Annual / lumped exports lie. Many banks' "full year" CSV silently drops rows that exist in the monthly exports. Always prefer monthly. If you only have a lumped file, treat it as untrusted until proven otherwise.
- PDF date-regex false positives. Multi-line transaction descriptions can produce 2nd/3rd lines that start with a date-shaped string. Off-by-1-or-2 row counts are usually this, not real gaps.
- CSV header names vary. Wio uses
Balancefor the running balance column; some banks useRunning BalanceorClosing Balance. Don't hardcode — useheader.index(...)with a fallback. - File-naming from bank apps is ugly. Mobile-app exports often land as
statement(Mon DD, YYYY - Mon DD, YYYY.csvwith a typo'd year (Wio's puts "2025" on a 2024 export). Rename toYYYY-MM.csv/YYYY-MM.pdfimmediately, before analysis.
Bank-specific notes
- Wio Business — see
references/wio-business.mdfor filename pattern, account filter, and the documented annual-CSV row-drop bug.
Security
- Security scanPassed, 100 of 100Pattern checks on the skill's files.
- Model reviewNot runA model review is scheduled for the next rescan.
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingskills/productivity/bank-statement-reconciliation/SKILL.md
Popularity
- Repository stars
- 61
- Repository forks
- 11
- 7-day trend score
- 0
Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/matyasstoch/david-skills/bank-statement-reconciliation)