M parser/all/all.go => parser/all/all.go +1 -0
@@ 4,5 4,6 @@ import (
_ "git.sr.ht/~mendelmaleh/pfin/parser/amex"
_ "git.sr.ht/~mendelmaleh/pfin/parser/bofa"
_ "git.sr.ht/~mendelmaleh/pfin/parser/capitalone"
+ _ "git.sr.ht/~mendelmaleh/pfin/parser/chase"
_ "git.sr.ht/~mendelmaleh/pfin/parser/personal"
)
A parser/chase/interface.go => parser/chase/interface.go +44 -0
@@ 0,0 1,44 @@
+package chase
+
+import (
+ "time"
+
+ "git.sr.ht/~mendelmaleh/pfin"
+ "git.sr.ht/~mendelmaleh/pfin/util"
+)
+
+var _ = pfin.Transaction(Transaction{})
+
+func (tx Transaction) Date() time.Time {
+ return tx.Raw.TransactionDate.Time
+}
+
+func (tx Transaction) Amount() float64 {
+ return tx.Raw.Amount
+}
+
+func (tx Transaction) Name() string {
+ return tx.Raw.Description
+}
+
+func (tx Transaction) Category() string {
+ return tx.Raw.Category
+}
+
+// not implemented
+func (tx Transaction) Card() string {
+ return ""
+}
+
+func (tx Transaction) User() string {
+ return tx.Fields.User
+}
+
+func (tx Transaction) Account() string {
+ return tx.Fields.Account
+}
+
+// should be util.FormatTx
+func (tx Transaction) String() string {
+ return util.FormatTx(tx, " ")
+}
A parser/chase/parser.go => parser/chase/parser.go +39 -0
@@ 0,0 1,39 @@
+package chase
+
+import (
+ "git.sr.ht/~mendelmaleh/pfin"
+ "github.com/jszwec/csvutil"
+)
+
+func init() {
+ pfin.Register("chase", Parser{})
+}
+
+type Parser struct{}
+
+func (Parser) Parse(acc pfin.Account, filename string, data []byte) (txns []pfin.Transaction, err error) {
+ var raw []Transaction
+ if err = csvutil.Unmarshal(data, &raw); err != nil {
+ return
+ }
+
+ length := len(raw)
+ txns = make([]pfin.Transaction, length)
+
+ // reverse order
+ for i := 0; i < length; i++ {
+ v := raw[length-i-1]
+
+ // default user
+ v.Fields.User = acc.User("")
+ v.Fields.Account = acc.Name
+
+ txns[i] = v
+ }
+
+ return
+}
+
+func (Parser) Filetype() string {
+ return "csv"
+}
A parser/chase/types.go => parser/chase/types.go +23 -0
@@ 0,0 1,23 @@
+package chase
+
+import "git.sr.ht/~mendelmaleh/pfin/parser/util"
+
+type Transaction struct {
+ Fields
+ Raw
+}
+
+type Fields struct {
+ User string
+ Account string
+}
+
+type Raw struct {
+ TransactionDate util.DateUS `csv:"Transaction Date"`
+ PostDate util.DateUS `csv:"Post Date"`
+ Description string `csv:"Description"`
+ Category string `csv:"Category"`
+ Type string `csv:"Type"`
+ Amount float64 `csv:"Amount"`
+ Memo string `csv:"Memo"`
+}