Skip to content

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.


  • Statement Parser — what consumes these files
  • Statements Tab — the dashboard's own upload form, which parses synchronously instead of going through NFS