Closed MatissJanis closed 1 year ago
[RESOLVED]
Some design feedback
2.1. the modal is lacking in visual hierarchy; possibly use a table there? 2.2. account for long account names
[RESOLVED]
One more big item (and IMO super important):
Currently we support only 2-3 banks. However, we should be able to support a much larger set of banks if we provide meaningful defaults. Some work on this: https://github.com/actualbudget/actual-server/pull/144
Basically, if we define a "default bank" integration, we should be able to support the majority of Nordigen supported banks out of the box.
Some might not fully work.. but that's fine - people can always report them as bugs. But at least it will give us like 90% coverage without having to build each bank integration separately.
Pending transactions are not added to the list.
The bank-sync API returns 2x transaction types: pending and complete. Handling of "complete" transactions works as expected. They are added to the transaction table as "cleared" transactions.
However, "pending" transactions do not show up. Ideally they should show up as "not-cleared".
[RESOLVED]
Bug: creating linked accounts should only be available if actual-server
is being used. For local-only installs we should ~not show the "link accounts" option as it will not work~ disable the account linking button, but link to the docs.
[RESOLVED]
Bug: creating linked accounts should only be available if actual-server is being used. For local-only installs we should not show the "link accounts" option as it will not work.
IMO we should show the button as disabled and link to docs (just like we do with e2ee)
Bug: When we finish going through the wizard to add a new account and it disappeared we have a few seconds when nothing happens (in the background the app fetches transactions and processes them). But the user can be confused for a moment -- he should see some spinner or some loading screen with the information that synchronization happening.
Feature: Display information when the requisition for the account will expire.
Bug: Error handling is not sufficient. For example:
Feature: Display information when the requisition for the account will expire.
Could you please expand on this one?
Feature: Display information when the requisition for the account will expire.
Could you please expand on this one?
When we add an account from your bank to Actual we create the Requisition/Agreements on the backend side in Nordigen. This access is valid for 30 days (default). It would be nice to see that our requisition will expire soon and we can expect we will need to re-assign the accounts. Additionally, if we exceeded this time we can just suggest to the user that he has to re-link his accounts linked with the requisition instead of the current behavior -> User clicks the sync button then he receives errors about sync failing, and finally, he can see to re-link button which gives him the possibility to link accounts again.
It's easy to reproduce it by changing passing 1
as a value for accessValidForDays in create-web-token request. And try to sync account next day (after 24h)
[RESOLVED]
Bug: The NordigenAPI access token expires 24h after creation - we should regenerate the token if it's expired (I'm working on the fix). The current workaround is to reset the server.
[RESOLVED]
If you are not using a server, it seems that when you are asked for your country, the app has an internal error, a message is presented to the user saying we have been notified, which isn't true.
Maybe the link bank button should be disabled if there is no server configured?
[RESOLVED]
Bug:
Using it in fly.io doesn't seem to work. After confirming the Nordigen integration in my bank I was redirected to this page:
Update: bank-link worked in the end. One of the tabs was in my budget page. The other was in /nordigen/link?ref=...
and was showing the above error for some reason.
Still need to figure out why.. and what can be done to fix this. But at least we're not fully blocked on setting bank-sync up.
[RESOLVED]
If you are not using a server, it seems that when you are asked for your country, the app has an internal error, a message is presented to the user saying we have been notified, which isn't true.
Maybe the link bank button should be disabled if there is no server configured?
@rich-howell thanks!
We have this bullet for the issue:
----------- v23.3.0 --------------
Linking with Nordigen succeeds, but retrieving transactions fails with Nordigen returning a 400 Bad Request status. According to the logs, Actual requests the following: /api/v2/accounts/.../transactions/?date_from=2024-01-28&date_to=2023-03-10
. Note that date_from
is far in the future.
Presumably this is caused by me having pre-entered transactions with a future date. 2024-01-28 is the date of the second most distant future transaction I've pre-entered.
[RESOLVED]
If you are not using a server, it seems that when you are asked for your country, the app has an internal error, a message is presented to the user saying we have been notified, which isn't true. Maybe the link bank button should be disabled if there is no server configured?
@rich-howell thanks!
We have this bullet for the issue:
* actual (bug): creating linked accounts for non-server installs should not work
also occurred for me, running my own sync instance. Account was linked, but threw error
UI related issue, linked status indicator overlaps with currently active account
[RESOLVED]
Certain accounts seem to work better than others, possibly a difference in how nordigen handles accounts.
One such error is this:
I looked for logs, no joy
Is there any information in your browser’s console?
[RESOLVED]
There is!
I forgot about checking the browser window 😅
When I initially add the accout this is the error
After refreshing the page, the sync account button appears, and pressing it causes the same error to appear. I can try and paste it here for you but a cursory glance and my knowledge of js makes me thing it will be useless.
[RESOLVED] Bug: It's impossible to tell the difference between multiple accounts with different currencies when they share the same IBAN:
I'm not sure if the solution here should be to create a custom integration for Revolut or if this is not specific to Revolut and it may make sense to include the currency in the drop-down list.
Just to note, I checked the server logs to see the difference between the accounts and the only difference that is meaningful to a user is the currency (the other differences are resourceId
, id
, and created
fields which wouldn't help the user to select the proper account).
[RESOLVED]
Bug:
Transactions for -0.00
(common when the merchant tries to verify the card) do not properly import the Payee - Actual tries to use debtorName
rather than creditorName
:
https://github.com/actualbudget/actual/blob/0bae379c17cdfe997ab30a33f78ea2a42315e859/packages/loot-core/src/server/accounts/sync.js#L315-L349
Example transaction (I changed dates and IDs for privacy reasons):
{
"transactionId": "8ae8eec6-565b-e854-cf6b-c6759028107d",
"bookingDate": "2023-03-11",
"valueDate": "2023-03-11",
"bookingDateTime": "2023-03-11T13:54:07.123456Z",
"valueDateTime": "2023-03-11T13:54:07.300108Z",
"transactionAmount":
{
"amount": "-0.00",
"currency": "PLN"
},
"creditorName": "Paypal",
"remittanceInformationUnstructuredArray":
[
"Paypal"
],
"proprietaryBankTransactionCode": "CARD_PAYMENT",
"internalTransactionId": "a64d3c736cb6aef7c879da860181c419"
}
Additionally, I think that the Payee and Notes logic should probably also try to use remittanceInformationUnstructuredArray
when the remittanceInformationUnstructured
field isn't present.
[RESOLVED] Bug: PayPal transactions cannot be imported due to an internal error in devtools console:
Notifications.js:76 Internal error: Error: `date` is required when adding a transaction
at https://my-url.fly.dev/kcab/kcab.worker.88611b7e16db2b62f64b.js:10:106995
at f (https://my-url.fly.dev/kcab/kcab.worker.88611b7e16db2b62f64b.js:10:92890)
at Generator.<anonymous> (https://my-url.fly.dev/kcab/kcab.worker.88611b7e16db2b62f64b.js:10:94227)
at Generator.next (https://my-url.fly.dev/kcab/kcab.worker.88611b7e16db2b62f64b.js:10:93253)
at E (https://my-url.fly.dev/kcab/kcab.worker.88611b7e16db2b62f64b.js:10:98880)
at a (https://my-url.fly.dev/kcab/kcab.worker.88611b7e16db2b62f64b.js:10:99083)
at https://my-url.fly.dev/kcab/kcab.worker.88611b7e16db2b62f64b.js:10:99142
at new Promise (<anonymous>)
at https://my-url.fly.dev/kcab/kcab.worker.88611b7e16db2b62f64b.js:10:99023
at Q (https://my-url.fly.dev/kcab/kcab.worker.88611b7e16db2b62f64b.js:10:108151)
This appears to be caused by Actual only trying to use valueDate
(which, in general, does actually make more sense) while PayPal only provides bookingDate
. I'm not sure if it generally makes sense to fall back to bookingDate
when valueDate
is present or if this should be a PayPal-specific fix.
Example transactions (I changed dates, IDs, and amounts for privacy reasons):
[
{
"transactionId": "CJ7SSK007TVCA16XI",
"bookingDate": "2023-03-11",
"bookingDateTime": "2023-03-11T14:33:05.920799",
"transactionAmount":
{
"amount": "-1.23",
"currency": "PLN"
},
"creditorName": "[CREDITOR NAME HERE]",
"debtorName": "Jakub Kuczys",
"remittanceInformationUnstructured": "billing_agreement_id: B-QN38FJ8VSJ99TV4F6, invoice_number: 9682055026172410815",
"additionalInformation": "PAYMENT",
"internalTransactionId": "d28e4dc9c5ce980d1827c85f2b4c6e29"
},
{
"transactionId": "S8RYLWLBA4QLIXUD9",
"bookingDate": "2023-03-10",
"bookingDateTime": "2023-03-10T14:39:59.127797",
"transactionAmount":
{
"amount": "3.21",
"currency": "USD"
},
"creditorName": "Jakub Kuczys",
"debtorName": "[DEBTOR NAME HERE]",
"additionalInformation": "PAYMENT",
"internalTransactionId": "8675e80448ba62cfcb32379b43054c41"
}
]
Bug: When syncing all accounts (from the all accounts page), some accounts become bolded even though no new transactions or other changes to the balance were made (the image shows an example for sync that hasn't changed any of the 4 accounts that I linked but bolded Revolut and Nest Bank while it didn't bold either of ING Bank accounts):
(Balances were removed from the image for privacy reasons)
I'm not sure how the bold status is determined after sync so I can't really provide more useful information.
I'm not sure if it generally makes sense to fall back to
bookingDate
whenvalueDate
is present or if this should be a PayPal-specific fix.
Some banks only show bookingDate
, and never provide valueDate
. It could explain why @DistroByte and myself are having the same error "date is required when adding transactions". From docker log, I can see valueDate
is never provided.
In Safari, the attempt to open the page for linking the bank trips the popup blocker. This might be due to the create-web-token
request taking too long maybe? Either way we should add a prompt to “Waiting on Nordigen…” with options to reopen the link (synchronously) and/or check the browser UI for blocked popups.
Other issues
- [ ]
actual
: improve error handling: here
I think that 429 part of this issue should be moved to launch-blocking issues as not following rate limits is rather serious and is generally considered being a bad API user. It's probably unlikely that an individual user would run into these enough to be suspended for it (unless they spam the sync button for long time) but it still seems important to fix this. I think that ideally, rate limit being depleted would be tracked per account to avoid repeatedly running into 429s during sync request within the same day when it's already clear that the request can't succeed until the next day.
This documentation is quite informative: https://nordigen.zendesk.com/hc/en-gb/articles/6761006738717-Bank-API-Rate-Limits
----------- v23.3.2 --------------
Feature (kinda):
We need to add a very visible warning that by connecting your Actual account to Nordigen - Nordigen (a 3rd party) will get access to READ all your bank transactions.
[WONTFIX]
Bug:
remittanceInformationUnstructured
is used in the notes field. However, by default it's not an empty string. It's -
value. So all notes fields get the "-" value which is a bit annoying.
Fix: we should remove the default -
value from remittanceInformationUnstructured
(and the array equivalent)
remittanceInformationUnstructured":"-","remittanceInformationUnstructuredArray":["-"]
remittanceInformationUnstructured
is used in the notes field. However, by default, it's not an empty string. It's-
value. So all notes fields get the "-" value which is a bit annoying.
Are you sure this isn't bank-specific? I can't really test for this since all of the transactions returned by my banks seem to always have some value in there and I have yet to encounter a transaction with "-"
/["-"]
or ""
/[]
remittanceInformationUnstructured
is used in the notes field. However, by default, it's not an empty string. It's-
value. So all notes fields get the "-" value which is a bit annoying.Are you sure this isn't bank-specific? I can't really test for this since all of the transactions returned by my banks seem to always have some value in there and I have yet to encounter a transaction with
"-"
/["-"]
or""
/[]
Interesting.. if this is bank-specific, then I'll just close this as a wont-fix as it can also be solved by creating a rule that removes these notes.
FYI: This is how a transfer transaction looks like in Nordigen. Given this - it might not be possible to create a feature that automatically recognises transfers.
However: a workaround is possible. You can create a rule that matches the transaction name and then changes the payee to a transfer. That seems to be working for me.
{
"transactionId": "xxxxxxxxxxx",
"bookingDate": "2023-03-13",
"valueDate": "2023-03-13",
"transactionAmount": {
"amount": "100.0",
"currency": "EUR"
},
"debtorName": "From Other account to Main Account",
"remittanceInformationUnstructured": "From Other account to Main Account",
"remittanceInformationUnstructuredArray": [
"From Other account to Main Account"
],
"bankTransactionCode": "PMNT-RCDT-ESCT",
"internalTransactionId": "xxxxxxxxxxx"
}
This is how a transfer transaction looks like in Nordigen
It actually depends on the bank - some banks provide creditor/debtorAccount
field while others don't. Sadly it doesn't appear to be consistent with Nordigen's spreadsheet though as out of 3 banks I can test from this list (ING, Nest Bank Private, Revolut) that supposedly provide it, only one actually does (though with Revolut its hard to tell since I don't make regular transfer to IBANs with it) - ING. It seems to provide these two fields for all transactions and these fields are in one of two formats:
{"iban": "PLxxxxxxxxxxxxxxxxcxxxxxxxxx"}
{"bban": "xxxxxxxx-xxxxxxx/xxxxx"}
The second format always has the exact same bban number which I imagine is due to these being card transactions.I have a Starling account and for the second time I noticed that the imported transaction gets the wrong payee field...
The Payee in Actual is filled in with the remittanceInformationUnstructured field rather than the creditorName field.
In the log from my browser I can see that both field are correctly populated by nordringen with the correct payee and information.
Let me know if you need more info as I am not sure what to provide.
Edit: The amount being paid is a positive amount (a deposit) and here is a copy of the modified message received in the browser.
1 Object { transactionId: "yyyyyyy", bookingDate: "2023-03-13", valueDate: "2023-03-13", … } transactionId "yyyyyy" bookingDate "2023-03-13" valueDate "2023-03-13" bookingDateTime "2023-03-13T08:10:42Z" valueDateTime "2023-03-13T08:10:42Z" transactionAmount Object { amount: "17.00", currency: "GBP" } creditorName "MR........" remittanceInformationUnstructured "5 ......" proprietaryBankTransactionCode "FASTER_PAYMENTS_IN" internalTransactionId "zzzzzzz"
Happens with using Wise sync
@TheiLLeniumStudios are you using an up-to-date version of Actual? There was a problem such as this one reported previously and fixed in release v23.3.2: https://github.com/actualbudget/actual/issues/724#issuecomment-1464914546
If you are sure that you are using an up-to-date version of Actual, you should check server logs for the raw transaction data and post it here, after potentially stripping it from any private information you don't want to share.
@Jackenmen I am using v23.3.2. Here's what it looks like:
[{"transactionId":"redacted","bookingDate":"2023-03-13","bookingDateTime":"2023-03-13T09:06:35.071Z","transactionAmount":{"amount":"485.00","currency":"EUR"},"debtorName":"STRIPE","debtorAccount":{"bban":"redacted"},"remittanceInformationUnstructured":"redacted","additionalInformation":"redacted","proprietaryBankTransactionCode":"TRANSFER","internalTransactionId":"redacted"},{"transactionId":"redacted","bookingDate":"2023-03-08","bookingDateTime":"2023-03-08T16:38:02Z","transactionAmount":{"amount":"-297.42","currency":"EUR"},"currencyExchange":{"sourceCurrency":"EUR","exchangeRate":"1.0553","targetCurrency":"USD"},"creditorName":"redacted","remittanceInformationUnstructured":"Spent redacted","proprietaryBankTransactionCode":"CARD_TRANSACTION","internalTransactionId":"redacted"},{"transactionId":"redacted","bookingDate":"2023-03-06","bookingDateTime":"2023-03-06T11:12:19.391Z","transactionAmount":{"amount":"202.26","currency":"EUR"},"debtorName":"redacted","debtorAccount":{"bban":"redacted"},"remittanceInformationUnstructured":"redacted","additionalInformation":"redacted","proprietaryBankTransactionCode":"TRANSFER","internalTransactionId":"redacted"},{"transactionId":"redacted","bookingDate":"2023-03-02","bookingDateTime":"2023-03-02T13:43:46.551Z","transactionAmount":{"amount":"0.56","currency":"EUR"},"debtorName":"TransferWise","debtorAccount":{},"remittanceInformationUnstructured":"Received Balance cashback","additionalInformation":"BALANCE CASHBACK","internalTransactionId":"redacted"},{"transactionId":"redacted","bookingDate":"2023-02-27","bookingDateTime":"2023-02-27T11:32:08.674Z","transactionAmount":{"amount":"83.05","currency":"EUR"},"debtorName":"STRIPE","debtorAccount":{"bban":"redacted"},"remittanceInformationUnstructured":"Received STRIPE","additionalInformation":"redacted","proprietaryBankTransactionCode":"TRANSFER","internalTransactionId":"redacted"},{"transactionId":"redacted","bookingDate":"2023-02-24","bookingDateTime":"2023-02-24T08:02:48Z","transactionAmount":{"amount":"-3.35","currency":"EUR"},"creditorName":"Steam","remittanceInformationUnstructured":"Spent Steam","proprietaryBankTransactionCode":"CARD_TRANSACTION","internalTransactionId":"redacted"},{"transactionId":"redacted","bookingDate":"2023-02-23","bookingDateTime":"2023-02-23T10:19:17Z","transactionAmount":{"amount":"-40.00","currency":"EUR"},"creditorName":"redacted","remittanceInformationUnstructured":"redacted","proprietaryBankTransactionCode":"CARD_TRANSACTION","internalTransactionId":"redacted"},{"transactionId":"redacted","bookingDate":"2023-02-20","bookingDateTime":"2023-02-20T08:59:32Z","transactionAmount":{"amount":"-5.00","currency":"EUR"},"creditorName":"redacted","remittanceInformationUnstructured":"redacted","proprietaryBankTransactionCode":"CARD_TRANSACTION","internalTransactionId":"redacted"},{"transactionId":"redacted","bookingDate":"2023-02-20","bookingDateTime":"2023-02-20T08:49:42.461Z","transactionAmount":{"amount":"303.56","currency":"EUR"},"debtorName":"STRIPE","debtorAccount":{"bban":"redacted"},"remittanceInformationUnstructured":"Received STRIPE","additionalInformation":"redacted","proprietaryBankTransactionCode":"TRANSFER","internalTransactionId":"redacted"},{"transactionId":"redacted","bookingDate":"2023-02-19","bookingDateTime":"2023-02-19T06:33:01Z","transactionAmount":{"amount":"-81.09","currency":"EUR"},"creditorName":"redacted","remittanceInformationUnstructured":"redacted","proprietaryBankTransactionCode":"CARD_TRANSACTION","internalTransactionId":"redacted"}]
@Jackenmen this fixes the above issue https://github.com/actualbudget/actual/pull/754
I have a Starling account and for the second time I noticed that the imported transaction gets the wrong payee field...
@ppmt I asked Nordigen support about this and based on the latest response, it seems that you should expect this to get fixed upstream, hopefully in near future:
Great news!
Thanks a lot for your help @Jackenmen
Will report when I see that it has been fixed!
When choosing an "Actual Bank Account" in the Link Accounts screen, it is not currently possible to scroll the list. On a small screen, my list of accounts will not fit and I had to zoom out to select the correct account match. A small thing but scrolling would be a nice UI improvement.
Can't seem to configure actual to use nordigen integration. My first local actualbudget spin-up:
v23.3.2
(via docker)v23.3.2
(via yarn start:browser
)config.json
in the root of the server (next to package.json
) as
{
"nordigen": {
"secretId": "...",
"secretKey": "..."
}
}
id
and key
as env variables
$ printenv | grep ACTUAL
ACTUAL_NORDIGEN_SECRET_ID=...
ACTUAL_NORDIGEN_SECRET_KEY=...
regardless, i keep getting hit by the same
Do i miss smth obvious in my setup? 😅
Solved:
Not sure why config.json
is not loaded and picked up by docker container, but realised that since I am using docker
i need to explore the env to the container. So on the server, docker-compose
adding
...
restart: unless-stopped
environment:
ACTUAL_NORDIGEN_SECRET_ID: ...
ACTUAL_NORDIGEN_SECRET_KEY: ...
fixed it for me
Enable the flag in Settings
, it's an experimental feature. See step 6 in original message in this issue
Thanks @DistroByte. Sorry, forgot to mention - "sync accounts" flag is enabled
@leikoilja did you actually restart the server after changing the configuration and/or env vars so it can start using it? In case of env vars you need to also make sure that the server is started in a context where those env vars set.
BTW, this is more of an issue for sending feedback about the feature than for support - I think it would be better to continue this conversation on Actual's Discord.
@Jackenmen, thanks, figured out that i needed to expose env variable to the docker container (updated my message above). Initially, thought the issue was related to the integration itself, but you re right, it's not the best place for it. (@MatissJanis, feel free to clean it up if you think it's unrelated)
Awesome, now that it works, i have been able to add 3 different Swedish banks (7 accounts) with nearly no problem, thank you, gents! Some minor UI feedback:
Actual:
Edit: new separate issue ticket for point 2: https://github.com/actualbudget/actual/issues/761
Nordigen bank sync is now available in the
v23.3.1+
release as an experimental feature. This issue is to collect bug reports about the feature.If you have bug reports - feel free to post them as comments on this thread and I will aggregate them on this root-level message.
How to test
master
branch foractual
andactual-server
orv23.5.0
actual-server
:yarn start
actual
:yarn start:browser
Priority issues
(we will launch Nordigen as an experimental feature; this list contains issues blocking the full first-party feature launch of the feature)
actual-server
: (bug) Nordigen access token expiring after 24h: here - @fstybelactual-server
: meaningful "default" bank integration: see more here - @MatissJanisactual-server
: create a new endpoint that provides a list of the available banks; use this list in the frontend - @MatissJanisdocs
: we need documentation about how to set-up banksync - how to get the Nordigen keys etc. - @tjfinlinsonactual
: nitpicks in "link you account" modal: here - @MatissJanisactual
: lack of visual hierarchy in "link accounts" modal: here - @MatissJanis #792actual
: "pending" transactions not appearing in transaction table: here - #919actual
(bug): creating linked accounts for non-server installs should not work: here - @MatissJanisactual
: show expiration banner if bank-sync will soon expire: here~ - no reliable solution for this is possible because each bank has its own expiry period and this is not easily accessible - however, if the bank-sync expires - we do have a friendly message allowing the user to easily re-link the accountactual
: allow to easily re-link accounts that have bank-sync expired: here - #1133actual-server
: (tech debt) do not initialise the Nordigen class if the secrets have not been set: here~ - we recently added event-listener logic for updating secret values when the user provides new ones via the new API; given this - conditionally instatiating the class is going to add quite a lot of complexity that I don't think is worth it purely for the cleanliness factoractual-server
: (bug) missing/nordigen/link
page: here - @MatissJanisactual-server
: add currency to account names: here - @MatissJanisactual-server
: fallback tobookingDate
ifvalueDate
is not set: here - @MatissJanisactual
: (bug) negative zero values: here - @Jackenmenactual
: popup blockers: here - #950actual
: add warning about bank-sync privacy implications: here - @MatissJanis #801actual
: (bug) missingvalueDate
when syncing: here - @waseem-hactual-server
: ability to set-up Nordigen credentials via the UI: here - #968actual
: (bug) unable to sync account with no transactions: here~ - not reproducableOther issues
actual
: improve error handling: hereactual-server
: transactions with future date: hereactual
: accounts with no changes get bolded in the UI: hereactual-server
: transfers between accounts get imported incorrectly (as transactions instead of real transfers): here (might not be possible to do)actual
/actual-server
: (bug) incorrectly sorted transactions: here - explanation why this will be very complex to solve