summaryrefslogtreecommitdiffstats
path: root/lib/convert.ml
diff options
context:
space:
mode:
Diffstat (limited to 'lib/convert.ml')
-rw-r--r--lib/convert.ml164
1 files changed, 164 insertions, 0 deletions
diff --git a/lib/convert.ml b/lib/convert.ml
new file mode 100644
index 0000000..cbdb90f
--- /dev/null
+++ b/lib/convert.ml
@@ -0,0 +1,164 @@
1open Core
2open Ledger
3
4let virt_checking_acc = [ "Unfiled"; "Checking" ]
5let virt_savings_acc = [ "Unfiled"; "Savings" ]
6let virt_counterparty = [ "Unfiled"; "Counterparty" ]
7
8(* TODO: clean up *)
9type convert_err = Nonpositive_amount | Other of Tx.error
10
11let cents n = Amount (Money.of_z n)
12
13let tx_from_current_acc euc_id (Ingcsv.Tx (base, spec)) =
14 if Z.(lt base.amount ~$0) then Error Nonpositive_amount
15 else
16 Result.map_error ~f:(fun e -> Other e)
17 @@
18 match spec with
19 | Payment_terminal_payment details ->
20 Tx.make ~cleared:(Some base.date) ~commodity_id:euc_id
21 ~credit:
22 (Account_id_map.singleton virt_checking_acc @@ cents base.amount)
23 ~debit:
24 (Account_id_map.singleton virt_counterparty @@ cents base.amount)
25 ~labels:
26 Labels.(
27 empty
28 |> add (Iban_label Account_tag) base.account
29 |> add (String_label Counterparty_name_tag)
30 details.counterparty_name
31 |> add (String_label Card_seq_no_tag) details.card_sequence_no
32 |> add (String_label Terminal_tag) details.terminal
33 |> add (String_label Transaction_tag) details.transaction
34 |> add Timestamp_label details.timestamp
35 |>
36 if details.google_pay then add (Unit_label Google_pay_tag) ()
37 else Fn.id)
38 | Payment_terminal_cashback details ->
39 Tx.make ~cleared:(Some base.date) ~commodity_id:euc_id
40 ~debit:
41 (Account_id_map.singleton virt_checking_acc @@ cents base.amount)
42 ~credit:
43 (Account_id_map.singleton virt_counterparty @@ cents base.amount)
44 ~labels:
45 Labels.(
46 empty
47 |> add (Iban_label Account_tag) base.account
48 |> add (String_label Counterparty_name_tag)
49 details.counterparty_name
50 |> add (String_label Card_seq_no_tag) details.card_sequence_no
51 |> add (String_label Terminal_tag) details.terminal
52 |> add (String_label Transaction_tag) details.transaction
53 |> add Timestamp_label details.timestamp)
54 | Online_banking_credit details ->
55 Tx.make ~cleared:(Some base.date) ~commodity_id:euc_id
56 ~debit:
57 (Account_id_map.singleton virt_checking_acc @@ cents base.amount)
58 ~credit:
59 (Account_id_map.singleton virt_counterparty @@ cents base.amount)
60 ~labels:
61 Labels.(
62 empty
63 |> add (Iban_label Account_tag) base.account
64 |> add (String_label Counterparty_name_tag)
65 details.counterparty_name
66 |> add (Iban_label Counterparty_iban_tag)
67 details.counterparty_iban
68 |> add (String_label Desc_tag) details.description
69 |> add Timestamp_label details.timestamp)
70 | Online_banking_debit details ->
71 Tx.make ~cleared:(Some base.date) ~commodity_id:euc_id
72 ~debit:
73 (Account_id_map.singleton virt_counterparty @@ cents base.amount)
74 ~credit:
75 (Account_id_map.singleton virt_checking_acc @@ cents base.amount)
76 ~labels:
77 Labels.(
78 empty
79 |> add (Iban_label Account_tag) base.account
80 |> add (String_label Counterparty_name_tag)
81 details.counterparty_name
82 |> add (Iban_label Counterparty_iban_tag)
83 details.counterparty_iban
84 |> add (String_label Desc_tag) details.description)
85 | Recurrent_direct_debit details ->
86 Tx.make ~cleared:(Some base.date) ~commodity_id:euc_id
87 ~debit:
88 (Account_id_map.singleton virt_counterparty @@ cents base.amount)
89 ~credit:
90 (Account_id_map.singleton virt_checking_acc @@ cents base.amount)
91 ~labels:
92 Labels.(
93 empty
94 |> add (Iban_label Account_tag) base.account
95 |> add (Iban_label Counterparty_iban_tag)
96 details.counterparty_iban
97 |> add (String_label Counterparty_name_tag)
98 details.counterparty_name
99 |> add (String_label Desc_tag) details.description
100 |> add (String_label Reference_tag) details.reference
101 |> add (String_label Mandate_id_tag) details.mandate_id
102 |> add (String_label Creditor_id_tag) details.creditor_id
103 |>
104 match details.other_party with
105 | None -> Fn.id
106 | Some other_party ->
107 add (String_label Other_party_tag) other_party)
108 | Rounding_savings_deposit details ->
109 Tx.make ~cleared:(Some base.date) ~commodity_id:euc_id
110 ~debit:
111 (Account_id_map.singleton virt_counterparty @@ cents base.amount)
112 ~credit:
113 (Account_id_map.singleton virt_checking_acc @@ cents base.amount)
114 ~labels:
115 Labels.(
116 empty
117 |> add (Unit_label Auto_round_savings_tag) ()
118 |> add (String_label Savings_account_tag) details.savings_account)
119 | Deposit details ->
120 Tx.make ~cleared:(Some base.date) ~commodity_id:euc_id
121 ~debit:
122 (Account_id_map.singleton virt_checking_acc @@ cents base.amount)
123 ~credit:
124 (Account_id_map.singleton virt_counterparty @@ cents base.amount)
125 ~labels:
126 Labels.(
127 empty
128 |> add (Iban_label Counterparty_iban_tag)
129 details.counterparty_iban
130 |> add (String_label Counterparty_name_tag)
131 details.counterparty_name
132 |> add (String_label Desc_tag) details.description
133 |> add (String_label Reference_tag) details.reference)
134 | Ideal_debit details ->
135 Tx.make ~cleared:(Some base.date) ~commodity_id:euc_id
136 ~debit:
137 (Account_id_map.singleton virt_counterparty @@ cents base.amount)
138 ~credit:
139 (Account_id_map.singleton virt_checking_acc @@ cents base.amount)
140 ~labels:
141 Labels.(
142 empty
143 |> add (Iban_label Counterparty_iban_tag)
144 details.counterparty_iban
145 |> add (String_label Counterparty_name_tag)
146 details.counterparty_name
147 |> add (String_label Desc_tag) details.description
148 |> add (String_label Reference_tag) details.reference
149 |> add Timestamp_label details.timestamp)
150 | Batch_payment details ->
151 Tx.make ~cleared:(Some base.date) ~commodity_id:euc_id
152 ~debit:
153 (Account_id_map.singleton virt_counterparty @@ cents base.amount)
154 ~credit:
155 (Account_id_map.singleton virt_checking_acc @@ cents base.amount)
156 ~labels:
157 Labels.(
158 empty
159 |> add (Iban_label Counterparty_iban_tag)
160 details.counterparty_iban
161 |> add (String_label Counterparty_name_tag)
162 details.counterparty_name
163 |> add (String_label Desc_tag) details.description
164 |> add (String_label Reference_tag) details.reference)