Skip to content

[simbank-kg] add Simbank Kyrgyzstan statement-import plugin#1078

Open
kbereza wants to merge 1 commit into
zenmoney:masterfrom
kbereza:simbank-kg
Open

[simbank-kg] add Simbank Kyrgyzstan statement-import plugin#1078
kbereza wants to merge 1 commit into
zenmoney:masterfrom
kbereza:simbank-kg

Conversation

@kbereza

@kbereza kbereza commented Jun 21, 2026

Copy link
Copy Markdown

Summary

Adds a Simbank (Kyrgyzstan, brand of ОАО "Дос-Кредобанк") plugin that imports the bank's card-statement PDF and converts it into ZenMoney accounts and transactions. File-import only — runs entirely on-device, no network or credentials. The statement is exported from the Simbank mobile app: card settings → «Выписка по карте».

Features

  • Parses the Simbank card-statement PDF; statements in Russian, Kyrgyz and English are all supported, detected by content (not by file name)
  • Models credit cards as ccard with credit limit and amount due; the own-funds balance (negative = debt) is read from the running-balance column
  • Handles pdfjs text-extraction quirks: U+202F narrow-no-break-space thousands separators, letter-spaced glyph runs, and the credit-fee column
  • Deduplicates re-imports and the same statement imported in different languages (stable per-row id)
  • Fails loudly instead of silently dropping an unparsable row
  • Supports selecting several statement files at once (merged per card)

Testing

  • yarn test simbank-kg — ts-standard + tsc + jest (43 tests), all pass
  • Verified end-to-end against real ru/ky/en statements (one card → 628 transactions each, balances reconcile, ids unique; a second card → checking account). Real PDFs contain personal data and are not committed — tests use anonymized inline fixtures

Imports Simbank (КР, brand of ОАО "Дос-Кредобанк") card-statement PDFs in
Russian/Kyrgyz/English entirely on-device and converts them to Zenmoney
accounts/transactions.

- pdfjs text parsing handles U+202F thousands separators, letter-spaced glyph
  runs, and the credit-fee column; fail-loud (never silently drops a row)
- credit cards modeled with creditLimit/totalAmountDue; own-funds balance read
  from the running-balance column (language-independent)
- language detected by content (brand + masked PAN), not filename; labels in
  ru/ky/en; cross-language dedup so the same statement imported in two languages
  doesn't duplicate transactions
- user instructions (card settings -> "Выписка по карте") in the manifest and
  the file-picker prompt
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant