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 0000000000000000000000000000000000000000..ea4901d36812ed956025126a7c49d5b504c2f859 --- /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 edd472d2ab0eb2c022533a19f7c25480b4519a54..345d098027e68e2fc92a61c354d165c8c3a384b4 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 ef7df445177ebcacbccc1e67f8ce41fba6eafd5d..03c34f076b539f08ae9b281542adfce71852c0ad 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 0000000000000000000000000000000000000000..cf6ee5c5fb1b7eeb2c1a834206277d85f36521c1 --- /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