A parser/README.md => parser/README.md +32 -0
@@ 0,0 1,32 @@
+# American Express
+
+1. Login to [americanexpress.com]
+2. Go to the "Statements & Activity" tab
+3. Select "Previous Billing Periods" in the sidebar
+4. Choose the billing period
+5. Click the download icon in the "Transactions" area
+6. Choose "CSV"
+7. Enable additional transaction details
+8. Click the "Download" button.
+
+# Bank of America
+
+1. Login to [bankofamerica.com]
+2. Select the account
+3. Go to the "Activity" tab
+4. Click the "Download" link
+5. Choose the transaction period
+6. Set the file type to "Microsoft Excel Format" (CSV)
+7. Click the "Download transactions" button.
+
+# Capital One
+
+1. Login to [capitalone.com]
+2. Click the account (or click "View More" in the "Recent Transactions" area)
+3. Scroll to your last statement and click "Download Transactions" (or append `/DownloadTransactions` to the URL)
+4. Set the file type to "CSV"
+5. Set the time period "By Statement"
+6. Set the statement
+7. Click the "Export" button.
+
+The filename date will be the download date, not the statement date.
M parser/amex/types.go => parser/amex/types.go +1 -0
@@ 56,6 56,7 @@ func (c *CityState) UnmarshalText(data []byte) error {
c.State = s[1]
}
+ // TODO: won't fail if only one part, expected?
if len(s) > 2 {
return fmt.Errorf("expected two parts for City/State, got %d (%v, %s)", len(s), s, string(data))
}
M parser/personal/parse_test.go => parser/personal/parse_test.go +0 -1
@@ 33,5 33,4 @@ date amount media description
for i, v := range raw {
assert.Equal(txns[i], v)
}
-
}
M parser/util/date.go => parser/util/date.go +2 -0
@@ 14,6 14,7 @@ func (d *DateISO) UnmarshalText(data []byte) error {
}
d.Time = t
+
return nil
}
@@ 28,5 29,6 @@ func (d *DateUS) UnmarshalText(data []byte) error {
}
d.Time = t
+
return nil
}