This repository was archived by the owner on Jul 22, 2026. It is now read-only.
Repository navigation
UtilityMate v1.10.0
Security
- Fixed a cross-tenant data leak: creating or updating a budget no longer accepts a
location_id/household_idthat doesn't belong to the current user. - Rate limiting now sees the real client IP instead of the internal nginx address, so login/register/upload throttling applies per client again instead of sharing one global bucket.
- Added rate limiting to the change-password endpoint.
- Adding a household member now validates the referenced user exists before creating the membership.
- Bumped
pyjwt,python-multipart, andstarletteto versions with known CVEs patched.
Improvements
- Invoice and association-statement number parsing now correctly detects US vs. European decimal/thousands separators instead of assuming European formatting whenever both
,and.appear. - Meter-index parsing no longer strips the decimal point, fixing a 100x error on non-integer readings.
- Generic-provider invoice parsing requires a plausible amount label/currency anchor instead of matching the first number near the word "total".
- Parsed invoices with an implausible amount or date are now flagged for review with an explanation instead of being silently accepted.
- PDF parsing for invoices and association statements now runs off the request thread so large uploads no longer block the API.
- PDF text extraction failures (encrypted, corrupted, or genuinely scanned files) are now logged with the actual cause instead of failing silently.
- Association statement imports now show a review screen listing every parsed line item after import.
- The invoice edit screen can now correct amount, invoice date, consumption value, provider, and location — not just status and notes.
- Invoice and association statement uploads now time out and can be cancelled instead of leaving the modal stuck on a hung request; error messages now show the actual backend reason.
- Fixed a memory leak where exported file downloads on the raw data and operations pages never released their object URLs.
Verification
- Backend test suite (18 tests, including new locale/decimal-parsing regression tests) passed inside the production container image against the updated source.
- Frontend TypeScript and production build checks passed.