Commit Graph

1668 Commits

Author SHA1 Message Date
Juan José Mata
a790009290 Display provider merchants alongside family merchants (#418)
* Display provider merchants alongside family merchants

* Styling

* Rabbit suggestion
2025-12-05 22:15:07 +01:00
LPW
a91a4397e9 Simplefin liabilities recording fix (#410)
* Add tests and logic for Simplefin account balance normalization

- Introduced `SimplefinAccountProcessorTest` to verify balance normalization logic.
- Updated `SimplefinAccount::Processor` to invert negative balances for liability accounts (credit cards and loans) while keeping asset balances unchanged.
- Added comments to clarify balance conventions and sign normalization rules.

* Refactor balances-only sync logic and improve tests for edge cases

- Updated `SimplefinItem::Importer` and `SimplefinItem::Syncer` to ensure `last_synced_at` remains nil during balances-only runs, preserving chunked-history behavior for full syncs.
- Introduced additional comments to clarify balances-only implications and syncing logic.
- Added test case in `SimplefinAccountProcessorTest` to verify correct handling of overpayment for credit card liabilities.
- Refined balance normalization in `SimplefinAccount::Processor` to always invert liability balances for consistency.

---------

Co-authored-by: Josh Waldrep <joshua.waldrep5+github@gmail.com>
2025-12-03 18:40:37 +01:00
soky srm
1727b772ed Mobile drag and re-order fixes (#408)
* FIX mobile scroll and drag

* reorder fixes

* Add hold delay for mobile
2025-12-02 17:10:55 +01:00
Copilot
888fa3684a Include subcategories in transaction search filters (#401)
* Initial plan

* Fix subcategory filtering in transaction search

Co-authored-by: jjmata <187772+jjmata@users.noreply.github.com>

* Address code review: scope category lookup to family for security

Co-authored-by: jjmata <187772+jjmata@users.noreply.github.com>

* Make sure parent categories are not NULL.

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: jjmata <187772+jjmata@users.noreply.github.com>
Co-authored-by: Juan José Mata <juanjo.mata@gmail.com>
2025-12-01 23:38:48 +01:00
soky srm
54d041c4bb Merge pull request #404 from alessiocappa/FIX-EnableBankingBookedTransactions
Retrieve only accounted transactions from Enable Banking API
2025-12-01 20:01:30 +01:00
Alessio Cappa
4dbe1d8df6 fix: retrieve only accounted transactions to avoid duplicates 2025-12-01 19:37:52 +01:00
soky srm
ee39bcf62e Fix test (#399) 2025-12-01 13:08:48 +01:00
Juan José Mata
2eb89af0a2 Prepare the v0.6.6 alpha train
Signed-off-by: Juan José Mata <juanjo.mata@gmail.com>
2025-12-01 13:08:06 +01:00
soky srm
8ba1e7b14b Merge pull request #394 from alessiocappa/FEAT-IncludeNotesInLLMData
Include transaction notes in LLM data for merchant/category determination
2025-12-01 09:14:58 +01:00
soky srm
d4381dcdf0 Merge pull request #393 from alessiocappa/FIX-EnableBankingSyncDateDetermination
Fix Enable Banking sync date determination
2025-12-01 09:14:05 +01:00
Alessio Cappa
31b75dbc05 feat: Include transaction notes in LLM data for merchant/category determination 2025-11-30 19:16:23 +01:00
Alessio Cappa
35f4b11872 fix: Fix Enable Banking sync date determination 2025-11-30 17:58:29 +01:00
soky srm
4a29d030af Initial enable banking implementation (#382)
* Initial enable banking implementation

* Handle multiple connections

* Amount fixes

* Account type mapping

* Add option to skip accounts

* Update schema.rb

* Transaction fixes

* Provider fixes

* FIX account identifier

* FIX support unlinking

* UI style fixes

* FIX safe redirect and brakeman issue

* FIX

- pagination max fix
- wrap crud in transaction logic

* FIX api uid access

- The Enable Banking API expects the UUID (uid from the API response) to fetch balances/transactions, not the identification_hash

* FIX add new connection

* FIX erb code

* Alert/notice box overflow protection

* Give alert/notification boxes room to grow (3 lines max)

* Add "Enable Banking (beta)" to `/settings/bank_sync`

* Make Enable Banking section collapsible like all others

* Add callback hint to error message

---------

Co-authored-by: Juan José Mata <juanjo.mata@gmail.com>
v0.6.5
2025-11-29 13:31:08 +01:00
soky srm
ba266986d4 FIX pull fresh accounts from API (#385)
* FIX pull fresh accounts from API

* FIX in memory accouts
2025-11-28 20:42:57 +01:00
Juan José Mata
9361ce6d88 Change offline page title from 'Maybe' to 'Sure'
LLMs still think this is "Maybe"

Signed-off-by: Juan José Mata <juanjo.mata@gmail.com>
2025-11-28 12:46:40 +01:00
soky srm
84f1e18a79 Lunchflow UI fixes (#384)
* FIX transaction name was too long

* FIX some more nicer things

* FIX linter
2025-11-27 15:24:34 +01:00
Juan José Mata
1a78110af2 New "last month" period and clarify "30D" label
Signed-off-by: Juan José Mata <juanjo.mata@gmail.com>
2025-11-27 10:59:33 +01:00
Juan José Mata
bd55f6656b Nightlies are 0.6.5-alpha.14 now
Signed-off-by: Juan José Mata <juanjo.mata@gmail.com>
2025-11-26 23:11:41 +01:00
Juan José Mata
c138d8e367 Expose pg port 5432 again
Signed-off-by: Juan José Mata <juanjo.mata@gmail.com>
2025-11-26 21:45:01 +01:00
Juan José Mata
7053e317b9 Update version to 0.6.5-alpha.13
Signed-off-by: Juan José Mata <juanjo.mata@gmail.com>
2025-11-26 18:28:45 +01:00
soky srm
db8353e895 Initial implementation of collapsible sections and re-order feature (#355)
* Initial implementation

* Add support for reports section too

* UI Improvement

now it looks a lot nicer :)

* Remove duplicate section titles

* FIX malformed DIV

* Add accessibility and touch support

WCAG 2.1 Level AA Compliant
  - Keyboard operable (Success Criterion 2.1.1)
  - Focus visible (Success Criterion 2.4.7)
  - Name, Role, Value (Success Criterion 4.1.2)

 Screen Reader Support
  - Clear instructions in aria-label
  - Proper semantic roles
  - State changes announced via aria-grabbed

* Add proper UI for tab highlight

* Add keyboard support to collapse also

* FIX js errors

* Fix rabbit

* FIX we don't need the html

* FIX CSRF and error handling

* Simplify into one single DB migration

---------

Co-authored-by: Juan José Mata <juanjo.mata@gmail.com>
2025-11-26 17:51:38 +01:00
soky srm
6e6fce1737 Merge pull request #367 from luckyPipewrench/improved-holdings
Materialize holdings and refresh post‑import balances (credit/investment)
2025-11-26 10:47:26 +01:00
soky srm
91a91c3834 Improvements (#379)
* Improvements

- Fix button visibility in reports on light theme
- Unify logic for provider syncs
- Add default option is to skip accounts linking ( no op default )

* Stability fixes and UX improvements

* FIX add unlinking when deleting lunch flow connection as well

* Wrap updates in transaction

* Some more improvements

* FIX proper provider setup check

* Make provider section collapsible

* Fix balance calculation

* Restore focus ring

* Use browser default focus

* Fix lunch flow balance for credit cards
2025-11-25 20:21:29 +01:00
Juan José Mata
97a8cb9407 Fix /design-system for tabs 2025-11-25 14:11:50 +00:00
soky srm
b4331f3c86 Merge pull request #370 from we-promise/copilot/fix-custom-range-error
Fix 500 error when custom date range end date precedes start date
2025-11-25 09:24:16 +01:00
soky srm
226207e2f7 Provider optimisation (#375)
* Implement a provider configured account type

* Fix for SimpleFIN

* FIX tests and linter
2025-11-24 19:52:34 +01:00
soky srm
4cd575fa23 Rate exchange fix (#377)
* FIX cache hit issue

* Change to proper method

* FIX cache is read heavy, so change to find
2025-11-24 17:54:18 +01:00
soky srm
0270363f0a Merge pull request #372 from Valeron-T/average-cost-calculation-fix
Fixed average cost calculation
2025-11-24 15:19:50 +01:00
LPW
cf5e7de65f UI Suggestions for Account Types in Setup Modal + Stats-Based Inactive Handling (#368)
* - Add tests for `Simplefin::AccountTypeMapper` and `AccountSimplefinCreation`
- Implement `Simplefin::AccountTypeMapper` for account type inference with fallback-only logic
- Enhance inactive state handling for `SimplefinItem::Importer`
- Improve subtype selection handling in views with confidence-based inference

* Remove unnecessary `.presence` check for `openai_uri_base` in hostings settings

* Refine zero balance detection logic in `SimplefinItem::Importer` and add regression test for missing balances scenario

* Enhance account type and subtype inference logic with explicit investment subtype mapping, improved regex handling, and institution-based credit card detection

* Refine retirement subtype mapping in `AccountTypeMapper` tests with explicit case-based assertions

* Expand `AccountTypeMapper` investment subtype mapping to include `403b` and `tsp` with updated regex definitions

* Remove unused `retirement_hint?` method in `AccountTypeMapper` to simplify codebase

---------

Co-authored-by: Josh Waldrep <joshua.waldrep5+github@gmail.com>
2025-11-24 14:07:14 +01:00
bzoicas
eb4b978a97 Add RO locales (#359)
* Add RO locales

* Fixed some missing translations, added ro to SUPPORTED_LOCALES in languages_helper.rb

* Fixed a typo

---------

Co-authored-by: bzo <bzo@bzo.zresidence.lan>
2025-11-24 00:29:03 +01:00
Juan José Mata
7bcfaa24c6 Linter noise 2025-11-23 23:19:44 +00:00
Valeron
83bbabdc2d Fixed average cost calculation 2025-11-23 20:43:55 +05:30
copilot-swe-agent[bot]
da6bae2e84 Refactor date validation to DRY and improve test robustness
Co-authored-by: jjmata <187772+jjmata@users.noreply.github.com>
2025-11-23 10:49:59 +00:00
copilot-swe-agent[bot]
80603bb30f Add German translation for invalid date range message
Co-authored-by: jjmata <187772+jjmata@users.noreply.github.com>
2025-11-23 10:46:45 +00:00
copilot-swe-agent[bot]
4e5b0957bf Add validation and flash message for invalid date range in Reports
Co-authored-by: jjmata <187772+jjmata@users.noreply.github.com>
2025-11-23 10:45:52 +00:00
copilot-swe-agent[bot]
062f8783de Initial plan 2025-11-23 10:39:02 +00:00
Josh Waldrep
28350a6c90 Add tests and logic for adopting unowned holdings during provider imports
- Introduced `Account::ProviderImportAdapterUnownedAdoptionTest` to verify adoption of unowned holdings on collision.
- Updated `ProviderImportAdapter` to claim unowned holdings by updating attributes, attaching external_id, and setting account_provider_id.
- Ensured idempotency in subsequent imports for the same unowned holding.
2025-11-22 15:41:09 -05:00
Josh Waldrep
5de091b14c Add tests for cross-provider holding isolation and enhance fallback logic
- Introduced `Account::ProviderImportAdapterCrossProviderTest` to validate no cross-provider claiming of holdings.
- Updated `ProviderImportAdapter` to scope fallback matching by `account_provider_id`.
- Added early conflict guard and rescue for unique index violations during imports.
- Simplified rake task usage feedback.
2025-11-22 15:24:12 -05:00
Josh Waldrep
195dd18a52 Add tests and refactor for Simplefin holdings import and processing
- Introduced tests for importer post-import logic and `SimplefinHoldingsApplyJob`.
- Refactored `ProviderImportAdapter` to improve holding resolution strategy.
- Added handling of investment and crypto holdings in importer with debounce logic for job enqueuing.
- Updated rake task to use `SimplefinHoldingsApplyJob` for holding materialization.
2025-11-22 14:41:21 -05:00
LPW
3fe9768d72 Remove SimpleFIN sync errors modal and related routes, methods, and logic. (#365)
- Removed the `errors` modal and its associated view.
- Eliminated references to `errors` route and controller methods.
- Consolidated error handling into the `register_error` method to improve error tracking and de-duplication.
- Enhanced logging and introduced instrumentation for better observability.

Co-authored-by: Josh Waldrep <joshua.waldrep5+github@gmail.com>
2025-11-22 14:08:43 +01:00
Juan José Mata
f491916411 Track failed LLM API calls in llm_usages table (#360)
* Track failed LLM API calls in llm_usages table

This commit adds comprehensive error tracking for failed LLM API calls:

- Updated LlmUsage model with helper methods to identify failed calls
  and retrieve error details (failed?, http_status_code, error_message)

- Modified Provider::Openai to record failed API calls with error metadata
  including HTTP status codes and error messages in both native and
  generic chat response methods

- Enhanced UsageRecorder concern with record_usage_error method to support
  error tracking for auto-categorization and auto-merchant detection

- Updated LLM usage UI to display failed calls with:
  - Red background highlighting for failed rows
  - Error indicator icon with "Failed" label
  - Interactive tooltip on hover showing error message and HTTP status code

Failed calls are now tracked with zero tokens and null cost, storing
error details in the metadata JSONB column for visibility and debugging.

* Dark mode fixes

---------

Co-authored-by: Claude <noreply@anthropic.com>
2025-11-22 02:15:20 +01:00
soky srm
be0b20dfd9 Lunchflow settings family (#363)
* Move provider config to family

* remove global settings

* Remove turbo auto  submit

* Fix flash location

* Fix mssing syncer for lunchflow

* Update schema.rb

* FIX tests and encryption config

* FIX make rabbit happy

* FIX run migration in SQL

* FIX turbo frame modal

* Branding fixes

* FIX rabbit

* OCD with product names

* More OCD

* No other console.log|warn in codebase

---------

Co-authored-by: Juan José Mata <juanjo.mata@gmail.com>
2025-11-22 02:14:29 +01:00
Juan José Mata
983fb177fc Preparing for v0.6.5-alpha.12
Signed-off-by: Juan José Mata <juanjo.mata@gmail.com>
2025-11-22 01:03:29 +01:00
Juan José Mata
51d1cea51d Keep disabled accounts visible for toggling (#361) 2025-11-21 20:02:25 +01:00
LPW
25ac345f0b Handle partial SimpleFIN import failures by recording errors without halting accounts processing. (#362)
Co-authored-by: Josh Waldrep <joshua.waldrep5+github@gmail.com>
2025-11-21 19:58:57 +01:00
soky srm
0192d0638c Merge pull request #356 from jakubkottnauer/cross-rates-twelve-date
Use TwelveData cross API for exotic exchange rates
2025-11-21 15:58:11 +01:00
Juan José Mata
d6cbf300c7 Add scheduled job to sync all accounts every 24 hours (#330)
* Add scheduled job to sync all accounts every 30 minutes

Signed-off-by: Nikhil Badyal <nikhill773384@gmail.com>

* Change job queue from default to scheduled

Signed-off-by: Juan José Mata <juanjo.mata@gmail.com>

* Flatten job into single directory

* Every 30 minutes is a bit much and will trigger Sentry warnings

* Locking and logging improvements

* Add support for extra Sidekiq goodies

---------

Signed-off-by: Nikhil Badyal <nikhill773384@gmail.com>
Signed-off-by: Juan José Mata <juanjo.mata@gmail.com>
Co-authored-by: Nikhil Badyal <nikhill773384@gmail.com>
2025-11-20 20:58:14 +01:00
Jakub Kottnauer
e50a5792a0 Fetch reciprocal exchange rates when syncing market data (#358)
* Fetch reciprocal exchange rates in sync

* Fix variable
2025-11-20 19:50:22 +01:00
LPW
6decd6eaca - Handle blank series in trend method to avoid nil errors (#357)
- Add Turbo Stream rendering for SimpleFIN items to address missing content
- Update dashboard view to render correctly when trend data is unavailable

Co-authored-by: Josh Waldrep <joshua.waldrep5+github@gmail.com>
2025-11-20 08:31:03 +01:00
Jakub Kottnauer
153e7184fb Use TwelveData cross API for exotic currency pairs 2025-11-19 22:26:21 +01:00