- vision/document.py: pad_quad() expands the detected quad outward
before warping so a straight-line contour fit doesn't clip the first
character of every line on a slightly curled/wrinkled receipt
- ocr/extract.py + llm/vision.py: extract transaction time (HH:MM) so
same-day repeat visits to a vendor get distinct filenames
(2023-03-20_1525_walmart.pdf vs. a later same-day trip)
- vision/orient.py: downscale before Tesseract OSD/confidence-sweep
rotation detection — this was the dominant cost in the detection
phase (7x speedup: 472s -> 67s on a 36s test video)