Raiffeisen Serbia PDF statement parser.
PDF in. Verified CSV/JSON transactions out.
- Deterministic. No LLMs.
- Parse-only. No categories. No accounting guesses.
- Strict. Balance mismatch exits non-zero and writes nothing.
- Supports Raiffeisen Serbia current (
tekući, RSD) and foreign-currency (devizni) statements.
uv tool install izvodFrom a checkout:
uv tool install .One-shot:
uvx izvod -f statement.pdfizvod -f PATH [-o csv|json] [--out-dir DIR] [--stdout] [--lenient] [--force]Examples:
izvod -f 202603_rsd.pdf
izvod -f 202603_eur.pdf -o json --stdout
izvod -f ./statements -o json --out-dir out
izvod -f statement.pdf --force-f, --filename PATH: PDF file, or directory of*.pdffiles.- default output: CSV next to input PDF
- output name:
YYYYMM_<currency>_<account-suffix>.<csv|json> -o, --output csv|json: output format, defaultcsv--out-dir DIR: write files elsewhere--stdout: print data; single PDF only--force: overwrite existing output--lenient: print rows withverified: falseinstead of failing hard; implies--stdout; single PDF only
Exit codes:
0: ok1: parse, layout, or verification failure2: usage error3: output collision without--force
Stdout is data only. Diagnostics go to stderr.
izvod replays the bank running balance with exact decimal arithmetic.
balance[i] == balance[i-1] - payment[i] + deposit[i]
opening + sum(deposit - payment) == closing == last.balance
verified: true means extraction integrity, not merchant/category semantics.