aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2021-01-01 12:33:26 +0100
committerMartin Polden <mpolden@mpolden.no>2021-01-01 12:33:26 +0100
commit7238aa36f5f2b555c663fa37b73c344dc3183daa (patch)
tree574f54614c374813e3534101114db63410106a4a
parent08f544ceab0a8008cbf70f5ebe9d669a45190a0c (diff)
Handle transaction in foreign currency
-rw-r--r--record/komplett/komplett.go19
-rw-r--r--record/komplett/komplett_test.go1
-rw-r--r--record/komplett/testdata/test.json15
3 files changed, 27 insertions, 8 deletions
diff --git a/record/komplett/komplett.go b/record/komplett/komplett.go
index edf0e22..e68560d 100644
--- a/record/komplett/komplett.go
+++ b/record/komplett/komplett.go
@@ -16,8 +16,6 @@ const (
timeLayout = "02.01.2006"
)
-var withdrawalPrefixes = []string{"kr -", "kr\u00a0-"}
-
// Reader implements a reader for Komplett-encoded (JSON) records.
type Reader struct {
rd io.Reader
@@ -85,14 +83,19 @@ func (r *Reader) Read() ([]record.Record, error) {
for _, jr := range jrs {
amount := jr.BillingAmount
if amount == 0 { // New format
- amount = jr.Amount
- // New format does not indicate whether transaction amount is positive or negative, so we guess
- // based on the formatted field.
- for _, withdrawalPrefix := range withdrawalPrefixes {
- if strings.HasPrefix(jr.FormattedAmount, withdrawalPrefix) {
- amount = -amount
+ var b strings.Builder
+ for _, r := range jr.FormattedAmount {
+ if r == '-' {
+ b.WriteRune(r)
+ } else if r >= '0' && r <= '9' {
+ b.WriteRune(r)
}
}
+ if n, err := strconv.ParseInt(b.String(), 10, 64); err == nil {
+ amount = jsonAmount(n)
+ } else {
+ return nil, err
+ }
}
rs = append(rs, record.Record{
Time: time.Time(jr.Time),
diff --git a/record/komplett/komplett_test.go b/record/komplett/komplett_test.go
index 2ba3d92..d2ffb59 100644
--- a/record/komplett/komplett_test.go
+++ b/record/komplett/komplett_test.go
@@ -79,6 +79,7 @@ func TestRead(t *testing.T) {
{date(2019, 10, 30), "Varekjøp", -299000},
{date(2019, 10, 30), "Uttak av bonus", 6000},
{date(2020, 12, 14), "Varekjøp", -9900},
+ {date(2020, 12, 28), "Varekjøp (5,00 EUR / Kurs 10,74000)", -5370},
}
if len(rs) != len(tests) {
t.Fatalf("want %d records, got %d", len(tests), len(rs))
diff --git a/record/komplett/testdata/test.json b/record/komplett/testdata/test.json
index f9864f7..bce8a9e 100644
--- a/record/komplett/testdata/test.json
+++ b/record/komplett/testdata/test.json
@@ -43,5 +43,20 @@
"FormattedAmount": "kr -99,00",
"FormattedPostingDate": "14.12.2020",
"FormattedDefermentExpiryDate": null
+ },
+ {
+ "TransactionId": null,
+ "TransactionRef": null,
+ "DisplayDescription": "Varekjøp (5,00 EUR / Kurs 10,74000)",
+ "EventNarrative": "",
+ "DestinationAccountNumber": null,
+ "Amount": 5.0,
+ "PostingDate": "/Date(1609110000000)/",
+ "CanDefer": false,
+ "IsDeferred": false,
+ "DefermentPeriod": null,
+ "FormattedAmount": "kr -53,70",
+ "FormattedPostingDate": "28.12.2020",
+ "FormattedDefermentExpiryDate": null
}
]