From 68121e3b1260a364f847d2f5e9641dc51dce6642 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Cie=C5=9Blar?= Date: Mon, 13 Jan 2025 09:39:27 +0100 Subject: [PATCH] add currency details to transaction.rb --- lib/camt_parser/general/transaction.rb | 16 +++++++++++++++ spec/fixtures/053/valid_example_v8.xml | 16 +++++++++++---- .../camt_parser/general/transaction_spec.rb | 20 +++++++++++++++++++ 3 files changed, 48 insertions(+), 4 deletions(-) diff --git a/lib/camt_parser/general/transaction.rb b/lib/camt_parser/general/transaction.rb index d1b6662..06941bf 100644 --- a/lib/camt_parser/general/transaction.rb +++ b/lib/camt_parser/general/transaction.rb @@ -80,6 +80,18 @@ def reference @reference ||= xml_data.xpath('Refs/InstrId/text()').text end + def original_currency_amount # May be missing + @original_currency_amount ||= CamtParser::Misc.to_amount(parse_original_currency_amount) + end + + def original_currency # May be missing + @original_currency ||= xml_data.xpath('AmtDtls/InstdAmt/Amt/@Ccy').text + end + + def exchange_rate # May be missing + @exchange_rate ||= xml_data.xpath('AmtDtls/TxAmt/CcyXchg/XchgRate/text()').text + end + def bank_reference # May be missing @bank_reference ||= xml_data.xpath('Refs/AcctSvcrRef/text()').text end @@ -118,6 +130,10 @@ def reason_code # May be missing private + def parse_original_currency_amount + xml_data.xpath('AmtDtls/InstdAmt/Amt/text()').text + end + def parse_amount if xml_data.xpath('Amt').any? xml_data.xpath('Amt/text()').text diff --git a/spec/fixtures/053/valid_example_v8.xml b/spec/fixtures/053/valid_example_v8.xml index 49a6ef0..3d84b0e 100644 --- a/spec/fixtures/053/valid_example_v8.xml +++ b/spec/fixtures/053/valid_example_v8.xml @@ -257,7 +257,7 @@ Credit Creditor Reference - 19.69 + 20.97 DBIT BOOK @@ -286,7 +286,11 @@ 19.69 - 19.69 + 20.97 + + CHF + 0.9433 + @@ -298,14 +302,18 @@ 373502949-1208481 1208481 - 19.69 + 20.97 DBIT 19.69 - 19.69 + 20.97 + + CHF + 0.9433 + diff --git a/spec/lib/camt_parser/general/transaction_spec.rb b/spec/lib/camt_parser/general/transaction_spec.rb index 5d68675..935018d 100644 --- a/spec/lib/camt_parser/general/transaction_spec.rb +++ b/spec/lib/camt_parser/general/transaction_spec.rb @@ -100,6 +100,26 @@ specify { expect(ex_transaction.amount_in_cents).to eq(8885) } end + context 'transaction with different currency' do + let(:ex_transaction) { transactions[0] } + let(:ex_entry) { entries[2] } + + context '#amount' do + specify { expect(ex_transaction.amount).to be_kind_of(BigDecimal) } + specify { expect(ex_transaction.amount).to eq(BigDecimal('20.97')) } + specify { expect(ex_transaction.amount_in_cents).to eq(2097) } + end + + context '#original_currency_amount' do + specify { expect(ex_transaction.original_currency_amount).to be_kind_of(BigDecimal) } + specify { expect(ex_transaction.original_currency_amount).to eq(BigDecimal('19.69')) } + end + + specify { expect(ex_transaction.currency).to eq('EUR') } + specify { expect(ex_transaction.original_currency).to eq('CHF') } + specify { expect(ex_transaction.exchange_rate).to eq('0.9433') } + end + specify { expect(ex_transaction.name).to eq("Finanz AG") } specify { expect(ex_transaction.creditor_reference).to eq("RF38000000000000000000552") }