About
Dogfitness Invoice App 2.0
Local web application that automates invoice processing for the Dogfitness business. Scans Gmail for invoices, extracts payment data using Claude AI, lets you review and approve each payment, then generates Fio Bank XML payment orders ready for upload.
| Version | 0.13.0 |
| GitHub | ondrejuhlir/df-invoices-app |
| Framework | Flask 3 · Python 3.9 |
| AI model | Claude Sonnet (claude-sonnet-4-6) |
| Gmail API v1 (OAuth2) | |
| Payments | Fio Bank XML — CZK & EUR |
| Runs logged | 0 |
| Trusted suppliers | 0 |
Changelog
v0.10.0
2026-05-23
- New Due Date column: Pending Review and Run Result tables now show the actual Fio Bank payment date (next Friday CZK / next Tuesday EUR) alongside the supplier's original due date
- 'Due Date' column renamed to 'Original Due Date' on Pending Review and Run Result
v0.9.1
2026-05-23
- Fix: DRIVE_FOLDER_ID env var now honoured — upload uses the configured folder ID directly instead of always resolving by name
v0.9.0
2026-05-23
- Drive upload overlay: full-page spinner shown immediately when 'Upload to Drive' is clicked
- Fix: emails with both WFA and WFB labels now receive only 'Zaplaceno' (not also 'Faktura stažena')
- Fix: reply-chain threads no longer show a false 'no PDF' warning on Pending Review
v0.8.0
2026-05-22
- Result page: new 'Invoices Downloaded' stat card for Workflow B runs (hidden when download_count is 0 or absent)
- Result page: section reorder — Google Drive card moved below Generated Files; Downloaded PDFs moved below Drive
v0.7.1
2026-05-22
- Fix: 'Open Fio Bank' button now links to https://ib.fio.cz/ib/login (was bare homepage)
- Fix: IBAN values with spaces (e.g. 'CZ36 5500 ...') are stripped to compact form before storage
v0.7.0
2026-05-22
- Delete run from History: Delete button on each complete/cancelled run (with confirm dialog)
- Deletes run JSON + all associated files (PDFs, XML output, Workflow B downloads)
- Pending Review runs cannot be deleted; suppliers.json is never touched
v0.6.0
2026-05-22
- Bank account / IBAN fixes on Pending Review (Phase 4a)
- Extractor prompt improved: Claude now prefers Czech account format for CZK invoices
- Auto-conversion: Czech IBANs (CZ...) are converted to XXXXXXXXXX/BBBB format automatically
- Inline editable bank account / IBAN field on Pending Review — edit directly in the table
- 'Converted from IBAN' note shown when value was auto-converted
- '⚠ Missing' badge shown when no bank account could be determined
- Edited values are applied to generated XML; original extracted values preserved for auditability
v0.5.0
2026-05-22
- Run cancellation: Cancel button on Pending Review marks run as cancelled, redirects to dashboard
- Cancelled badge on dashboard recent-runs table and History page
- Dashboard last_run stat cards skip cancelled runs
- Bug fix: scans with PDF attachments no longer crash with NameError
- Deferred 'Faktura stažena' label to generate step — cancel never leaves stray Gmail labels
v0.4.0
2026-05-22
- Google Drive upload: 'Upload to Drive' button on result page uploads all invoice PDFs
- Creates or reuses a 'DF Invoices' folder in Google Drive
- Shows folder link and uploaded count after upload; partial failures listed inline
- Second-upload prevention: button replaced by folder link once uploaded
v0.3.0
2026-05-21
- Workflow B: opt-in download of invoices labelled 'Faktura ke stažení'
- Gmail labelling: applies 'Zaplaceno' after payment files are generated
- Download XML directly from the result page (no more file paths)
- History page: full list of all past runs with links
- Suppliers page: view, rename and remove trusted suppliers
v0.2.0
2026-05-21
- New Run flow: scan Gmail, extract with Claude AI, save run JSON
- Pending Review page with trust/skip per supplier
- Result page with totals and file list
- core/gmail.py, core/extractor.py, core/supplier_db.py
- Loading overlay with spinner during scan
- About page, CLAUDE.md, ROADMAP.md, CHANGELOG.md
v0.1.0
2026-05-19
- Flask skeleton with Google-style sidebar layout
- Dashboard with stat cards and recent runs table
- CZK and EUR Fio Bank XML generators
- CSS design system (no framework)
- GitHub repository created
Roadmap
-
FoundationDashboard, CSS, sidebar layout
-
Core run flowScan → Extract → Review → Generate
-
Gmail labellingApply 'Zaplaceno' after approval
-
Download XML in browserDownload button instead of file path
-
History pageFull list of all past runs
-
Suppliers pageView, rename, remove trusted suppliers
-
Workflow BDownload-only invoices (Faktura ke stažení)
-
Payment date fixCZK/EUR: use due_date + correct Friday/Tuesday fallback
-
Google Drive uploadUpload invoice PDFs to Drive after payment files are generated
-
Run cancellationCancel a run at Pending Review; no stray Gmail labels left behind
-
Bank account fixesCZK→Czech format + inline edit on Pending Review
-
Delete runDelete a complete/cancelled run and all its files from History
-
Manual supplier creationAdd suppliers manually from the Suppliers page
-
Enhance Pending ReviewWorkflow B invoice list + per-invoice exclude toggle
-
Enhance Result pageWorkflow B download table + archived invoice count
-
Async scanProgress bar, background thread
-
Error handlingPer-invoice errors, retry button, auth expiry handling
-
Auto-schedulingRun scan automatically every Friday morning
How it works
📧
Scan Gmail
Finds emails labelled "K zaplacení" that aren't yet "Zaplaceno".
Finds emails labelled "K zaplacení" that aren't yet "Zaplaceno".
🤖
Extract with AI
Claude reads each PDF and returns structured payment data (amount, IBAN, due date…).
Claude reads each PDF and returns structured payment data (amount, IBAN, due date…).
👀
Review & approve
You check each invoice. Unknown suppliers are highlighted — trust them once, they're remembered.
You check each invoice. Unknown suppliers are highlighted — trust them once, they're remembered.
💳
Generate & upload
CZK and EUR XML payment orders are generated. Upload them to Fio Bank internet banking.
CZK and EUR XML payment orders are generated. Upload them to Fio Bank internet banking.