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") }