Statement Upload¶
URL: https://statements.heezy.info
Internal: http://192.168.1.15:30851
k8s: heezy namespace, deployment statements
Source: heezy-containers/dockerfiles/statements/
Manifests: heezy-k8s/apps/statements/
Last Updated: 2026-08-11
What It Does¶
Lands bank and credit card statement files on the NFS ingest path. No OCR, no parsing. Drop the file, log it, done. The Statement Parser picks it up on its next hourly run.
The split is deliberate: uploading from a phone should not wait on pdfplumber, and a parser crash should not lose the file.
Endpoints¶
| Route | Purpose |
|---|---|
GET / |
Upload form plus recent upload history |
POST /upload |
Accepts the file, writes it to the ingest folder |
GET /log |
Recent uploads |
GET /health |
Liveness |
Accepted extensions: pdf, csv, ofx, qfx, qbo, xls, xlsx, txt, json.
Max file size 50 MB (MAX_FILE_SIZE_MB).
Storage¶
| Property | Value |
|---|---|
| PVC | nfs-statements-ingest (10Gi, NFS, RWX) |
| Mount | /heezy/ingest/raw/statements |
| Ingest folder | /heezy/ingest/raw/statements/new (INGEST_FOLDER) |
| Upload log | /heezy/ingest/raw/statements/upload-log.db, SQLite (LOG_DB) |
The upload log is SQLite on NFS and is separate from the Postgres statement_files_processed table
the parser uses for hash dedupe. A file can appear in one and not the other: this service logs what
arrived, the parser logs what it successfully ingested.
The ingest directory is created on startup if missing.
Access¶
Behind Cloudflare Access via a cloudflared tunnel, with a home-IP bypass policy. There is also an
nginx Ingress with a cert-manager letsencrypt-prod certificate for statements.heezy.info.
Related¶
- Statement Parser — what consumes these files
- Statements Tab — the dashboard's own upload form, which parses synchronously instead of going through NFS