From 76cbd44c754502ac6b05aaa2c7ff4d611da60a73 Mon Sep 17 00:00:00 2001 From: Attila Kerekes <439392+keriati@users.noreply.github.com> Date: Wed, 6 Mar 2024 17:42:41 +0100 Subject: [PATCH] fix ofx amount parsing for longer decimal places (#2421) --- .../src/mocks/files/data-multi-decimal.ofx | 64 +++++++++++++++++++ .../src/server/accounts/parse-file.test.ts | 12 ++++ .../src/server/accounts/parse-file.ts | 2 +- upcoming-release-notes/2421.md | 6 ++ 4 files changed, 83 insertions(+), 1 deletion(-) create mode 100644 packages/loot-core/src/mocks/files/data-multi-decimal.ofx create mode 100644 upcoming-release-notes/2421.md diff --git a/packages/loot-core/src/mocks/files/data-multi-decimal.ofx b/packages/loot-core/src/mocks/files/data-multi-decimal.ofx new file mode 100644 index 000000000..ea4901d36 --- /dev/null +++ b/packages/loot-core/src/mocks/files/data-multi-decimal.ofx @@ -0,0 +1,64 @@ +OFXHEADER:100 +DATA:OFXSGML +VERSION:102 +SECURITY:NONE +ENCODING:USASCII +CHARSET:1252 +COMPRESSION:NONE +OLDFILEUID:NONE +NEWFILEUID:NONE + +<OFX> + <SIGNONMSGSRSV1> + <SONRS> + <STATUS> + <CODE>0 + <SEVERITY>INFO + </STATUS> + <DTSERVER>20190124212851.000[0:UTC] + <LANGUAGE>ENG + <DTACCTUP>20190124212851.000[0:UTC] + <FI> + <ORG>Bank of America + <FID>5959 + </FI> + <INTU.BID>6526 + <INTU.USERID>jlongster03 + </SONRS> + </SIGNONMSGSRSV1> + <BANKMSGSRSV1> + <STMTTRNRS> + <TRNUID>0 + <STATUS> + <CODE>0 + <SEVERITY>INFO + </STATUS> + <STMTRS> + <CURDEF>USD + <BANKACCTFROM> + <BANKID>012345678 + <ACCTID>123456789123 + <ACCTTYPE>CHECKING + </BANKACCTFROM> + <BANKTRANLIST> + <DTSTART>20190119120000 + <DTEND>20190124120000 + <STMTTRN> + <TRNTYPE>DEBIT + <DTPOSTED>20190123120000 + <TRNAMT>-30.000 + <FITID>00092990122-30.00019012312798.01 + <NAME>PATIENT FIRST TOKEN 01/22 PURCHA + </STMTTRN> + <STMTTRN> + <TRNTYPE>DEBIT + <DTPOSTED>20190123120000 + <TRNAMT>-3.77000 + <FITID>00092990121-3.77019012312828.01 + <NAME>STARBUCKS STORE 07604 01/21 PURC + </STMTTRN> + </BANKTRANLIST> + </STMTRS> + </STMTTRNRS> + </BANKMSGSRSV1> +</OFX> diff --git a/packages/loot-core/src/server/accounts/parse-file.test.ts b/packages/loot-core/src/server/accounts/parse-file.test.ts index edd472d2a..345d09802 100644 --- a/packages/loot-core/src/server/accounts/parse-file.test.ts +++ b/packages/loot-core/src/server/accounts/parse-file.test.ts @@ -84,6 +84,18 @@ describe('File import', () => { expect(await getTransactions('one')).toMatchSnapshot(); }, 45000); + test('ofx import works with multiple decimals in amount', async () => { + const ofxFile = __dirname + '/../../mocks/files/data-multi-decimal.ofx'; + + const { transactions } = (await parseFile(ofxFile)) as { + transactions: { amount: number }[]; + }; + + expect(transactions).toHaveLength(2); + expect(transactions[0].amount).toBe(-30.0); + expect(transactions[1].amount).toBe(-3.77); + }, 45000); + test('ofx import works (credit card)', async () => { prefs.loadPrefs(); await db.insertAccount({ id: 'one', name: 'one' }); diff --git a/packages/loot-core/src/server/accounts/parse-file.ts b/packages/loot-core/src/server/accounts/parse-file.ts index ef7df4451..03c34f076 100644 --- a/packages/loot-core/src/server/accounts/parse-file.ts +++ b/packages/loot-core/src/server/accounts/parse-file.ts @@ -132,7 +132,7 @@ async function parseOFX( errors, transactions: data.transactions.map(trans => { return { - amount: trans.amount, + amount: Number(trans.amount), imported_id: trans.fitId, date: trans.date, payee_name: trans.name || (useMemoFallback ? trans.memo : null), diff --git a/upcoming-release-notes/2421.md b/upcoming-release-notes/2421.md new file mode 100644 index 000000000..cf6ee5c5f --- /dev/null +++ b/upcoming-release-notes/2421.md @@ -0,0 +1,6 @@ +--- +category: Bugfix +authors: [keriati] +--- + +Fix OFX import amount when more than 2 decimal places are provided -- GitLab