# Feature List (Flutter) Structured log of shipped features, updated by the `n`/`next` workflow (see [AGENTS.md](../AGENTS.md)) whenever a task is marked `[DONE]`. Organize entries under a heading per module/section, matching `plans/next-enhancements.md`. Scoped to **Flutter only** as of 2026-07-08 (see `AGENTS.md`'s "Scope: excludes `backend/`") — the Backend sections below are a frozen historical record; the active backend feature log now lives at [backend/docs/feature-list.md](../backend/docs/feature-list.md), driven by `backend/AGENTS.md` Part B. ## Format ``` ##
- **** — shipped ``` --- ## Existing Features (pre-kit) Backfilled 2026-07-08 during adoption of this kit — these predate the `e`/`n` workflow and have no task numbers; see `git log` for real dates/history. ### Flutter — Auth & Splash - Login screen with client-side validation; JWT session persisted via Hive; splash auto-navigates based on session state. ### Flutter — Camera Capture & Geotagging - Laplacian-variance blur detection with a pass/fail badge before upload. - IMU stillness lock (linear/angular thresholds) gating the shutter. - GPS geotagging on both camera capture and gallery picks. ### Flutter — Pending Documents Queue - In-memory upload queue with per-item status (uploading/processing/success/error), retry (preserving original GPS), delete, and search filter. ### Flutter — Document Editor & PDF Receipt - Header field validation (date, PO/SO number formats), item CRUD validated against the master SKU registry, signature + confirmation submission, local PDF receipt printing. ### Backend — Next.js API Gateway - Upload/parse/documents CRUD routes, GPU status endpoint, vLLM proxy, manual-label review tool. ### Backend — OCR Pipeline & Accuracy - PaddleOCR + vLLM classification pipeline with DB layout caching, table column-shift correction, date normalization, and an accuracy regression harness (`backend/pfm-web-app/scripts/accuracy-check.mts`) currently at ~89.4% overall (target 95% — see `backend/CLAUDE.md`). ### Backend — Postgres Data Layer - Schema/init in `backend/pfm-web-app/src/db/init.ts`, served via the canonical root `docker-compose.yml` stack. ### DevOps — Docker & Dev Tunnel - Root `docker-compose.yml` (dev, hot-reload) and `docker-compose.demo.yml` (production-mode override); `start-dev-tunnel.ps1` syncs the host LAN IP into the Flutter app config and starts an ngrok tunnel. *(New features shipped via `n`/`next` go below, organized the same way, with task numbers.)* ## Flutter — Pending Documents Queue - **3.1** Persisted the pending documents queue to a new Hive box (`lib/core/storage/local_storage.dart`) instead of holding it in memory only — an OS-level app kill mid-upload no longer silently loses the document. On next launch, `PendingDocumentsNotifier` reloads the queue and resumes anything left non-terminal: re-uploads a fresh capture from scratch (safe due to server-side file-hash dedup) or resumes polling for one whose upload already completed. Storage failures degrade gracefully to the old in-memory-only behavior rather than crashing the app — shipped 2026-07-08. ## Backend — Postgres Data Layer - **7.1** Wrapped the `ocr_items` delete-then-reinsert in `/api/parse` and `/api/v1/documents/[id]` PUT inside a DB transaction (`withTransaction` helper, `backend/pfm-web-app/src/db/index.ts`) — a mid-loop insert failure now rolls back to the previous item set instead of leaving a document with a correct header but partial/missing items — shipped 2026-07-08.