No description
  • TypeScript 91.1%
  • CSS 8.7%
  • Dockerfile 0.1%
  • JavaScript 0.1%
Find a file
Cheng Yao 9cbfa17db1 Add local scripts to trial and apply identity recognition.
The trial writes a report from a database copy. The apply script updates the database you pass in.
2026-10-08 22:01:44 +08:00
docs Record counterparty identity as the mapping key. 2026-10-08 22:01:43 +08:00
e2e Search categories while reviewing a transaction. 2026-10-08 22:01:44 +08:00
scripts Add local scripts to trial and apply identity recognition. 2026-10-08 22:01:44 +08:00
src Search categories while reviewing a transaction. 2026-10-08 22:01:44 +08:00
tests Remember a correction as that identity's default. 2026-10-08 22:01:44 +08:00
.dockerignore fin 2026-09-06 12:32:46 +08:00
.gitignore fin 2026-09-06 12:32:46 +08:00
AGENTS.md fin 2026-09-06 12:32:46 +08:00
CONTEXT.md Record counterparty identity as the mapping key. 2026-10-08 22:01:43 +08:00
docker-compose.yml fin 2026-09-06 12:32:46 +08:00
Dockerfile fin 2026-09-06 12:32:46 +08:00
drizzle.config.ts fin 2026-09-06 12:32:46 +08:00
eslint.config.mjs fin 2026-09-06 12:32:46 +08:00
next-env.d.ts fin 2026-09-06 12:32:46 +08:00
next.config.ts fin 2026-09-06 12:32:46 +08:00
package-lock.json fin 2026-09-06 12:32:46 +08:00
package.json Add local scripts to trial and apply identity recognition. 2026-10-08 22:01:44 +08:00
playwright.config.ts fin 2026-09-06 12:32:46 +08:00
README.md fin 2026-09-06 12:32:46 +08:00
tsconfig.json fin 2026-09-06 12:32:46 +08:00
vitest.config.ts fin 2026-09-06 12:32:46 +08:00

Statement Insights

A private, localhost-only UOB One Account statement analyzer. It imports monthly PDF statements, verifies every running balance, supports manual recognition corrections, and generates monthly income and expense reports without external services.

Requirements

  • Node.js 22+
  • Text-based, unencrypted UOB One Account PDF statements

Run locally

npm install
npm run dev

Open http://127.0.0.1:3000. Application data is stored under ./data by default. Override it with STATEMENT_INSIGHTS_DATA_DIR=/path/to/data.

For a production-mode local process:

npm run build
npm start

Run with Docker

docker compose up --build

The port is bound to 127.0.0.1 and the database/PDFs are stored in a named volume. Do not expose the service remotely without adding authentication and TLS.

Validate

npm test
npm run typecheck
npm run build
npm run test:e2e

When the private PDFs exist under examples/, the unit suite also validates all six statements locally. Those files are ignored by Git and must never be committed.

Privacy

  • No runtime calls to cloud APIs, telemetry, CDNs, or remote fonts
  • Full account number and holder contact details are not stored as structured data
  • Original PDFs remain in the local data directory
  • Backup ZIPs are not encrypted; handle them as sensitive financial files

V1 boundaries

Only SGD UOB One Account statements matching the supplied text-based format are supported. Scanned and password-protected PDFs, annual reports, budgets, transaction splitting, and remote hosting are outside v1.