From 46169ec3eb38e177cafd7faf6338d36c6a9e3971 Mon Sep 17 00:00:00 2001 From: Rutger Broekhoff Date: Thu, 27 Nov 2025 23:35:08 +0100 Subject: Whatever all of this is --- lib/convert.ml | 90 ++++++++++++++++++++-------------------------------------- 1 file changed, 31 insertions(+), 59 deletions(-) (limited to 'lib/convert.ml') diff --git a/lib/convert.ml b/lib/convert.ml index 5afc95e..5411fcc 100644 --- a/lib/convert.ml +++ b/lib/convert.ml @@ -12,6 +12,18 @@ type convert_err = Nonpositive_amount | Other of Tx.error let cents n = Amount (Money.of_z n) let tx_from_current_acc euc_id (Ingcsv.Tx (base, spec)) = + let make_tx_entries ~on_checking = + Account_id_map.of_alist_exn + [ + ( virt_checking_acc, + ( on_checking, + cents base.amount, + Some (Money.of_z base.resulting_balance) ) ); + ( virt_counterparty, + (Debit_credit.opposite on_checking, cents base.amount, None) ); + ] + and base_labels = Labels.singleton (Iban_label Account_tag) base.account in + if Z.(lt base.amount ~$0) then Error Nonpositive_amount else Result.map_error ~f:(fun e -> Other e) @@ -19,14 +31,10 @@ let tx_from_current_acc euc_id (Ingcsv.Tx (base, spec)) = match spec with | Payment_terminal_payment details -> Tx.make ~cleared:(Some base.date) ~commodity_id:euc_id - ~credit: - (Account_id_map.singleton virt_checking_acc @@ cents base.amount) - ~debit: - (Account_id_map.singleton virt_counterparty @@ cents base.amount) + ~entries:(make_tx_entries ~on_checking:Debit_credit.Credit) ~labels: Labels.( - empty - |> add (Iban_label Account_tag) base.account + base_labels |> add (String_label Counterparty_name_tag) details.counterparty_name |> add (String_label Card_seq_no_tag) details.card_sequence_no @@ -38,14 +46,10 @@ let tx_from_current_acc euc_id (Ingcsv.Tx (base, spec)) = else Fn.id) | Payment_terminal_cashback details -> Tx.make ~cleared:(Some base.date) ~commodity_id:euc_id - ~debit: - (Account_id_map.singleton virt_checking_acc @@ cents base.amount) - ~credit: - (Account_id_map.singleton virt_counterparty @@ cents base.amount) + ~entries:(make_tx_entries ~on_checking:Debit_credit.Debit) ~labels: Labels.( - empty - |> add (Iban_label Account_tag) base.account + base_labels |> add (String_label Counterparty_name_tag) details.counterparty_name |> add (String_label Card_seq_no_tag) details.card_sequence_no @@ -54,14 +58,10 @@ let tx_from_current_acc euc_id (Ingcsv.Tx (base, spec)) = |> add Timestamp_label details.timestamp) | Online_banking_credit details -> Tx.make ~cleared:(Some base.date) ~commodity_id:euc_id - ~debit: - (Account_id_map.singleton virt_checking_acc @@ cents base.amount) - ~credit: - (Account_id_map.singleton virt_counterparty @@ cents base.amount) + ~entries:(make_tx_entries ~on_checking:Debit_credit.Debit) ~labels: Labels.( - empty - |> add (Iban_label Account_tag) base.account + base_labels |> add (String_label Counterparty_name_tag) details.counterparty_name |> add (Iban_label Counterparty_iban_tag) @@ -70,14 +70,10 @@ let tx_from_current_acc euc_id (Ingcsv.Tx (base, spec)) = |> add Timestamp_label details.timestamp) | Online_banking_debit details -> Tx.make ~cleared:(Some base.date) ~commodity_id:euc_id - ~debit: - (Account_id_map.singleton virt_counterparty @@ cents base.amount) - ~credit: - (Account_id_map.singleton virt_checking_acc @@ cents base.amount) + ~entries:(make_tx_entries ~on_checking:Debit_credit.Credit) ~labels: Labels.( - empty - |> add (Iban_label Account_tag) base.account + base_labels |> add (String_label Counterparty_name_tag) details.counterparty_name |> add (Iban_label Counterparty_iban_tag) @@ -85,14 +81,10 @@ let tx_from_current_acc euc_id (Ingcsv.Tx (base, spec)) = |> add (String_label Desc_tag) details.description) | Recurrent_direct_debit details -> Tx.make ~cleared:(Some base.date) ~commodity_id:euc_id - ~debit: - (Account_id_map.singleton virt_counterparty @@ cents base.amount) - ~credit: - (Account_id_map.singleton virt_checking_acc @@ cents base.amount) + ~entries:(make_tx_entries ~on_checking:Debit_credit.Credit) ~labels: Labels.( - empty - |> add (Iban_label Account_tag) base.account + base_labels |> add (Iban_label Counterparty_iban_tag) details.counterparty_iban |> add (String_label Counterparty_name_tag) @@ -108,24 +100,18 @@ let tx_from_current_acc euc_id (Ingcsv.Tx (base, spec)) = add (String_label Other_party_tag) other_party) | Rounding_savings_deposit details -> Tx.make ~cleared:(Some base.date) ~commodity_id:euc_id - ~debit: - (Account_id_map.singleton virt_counterparty @@ cents base.amount) - ~credit: - (Account_id_map.singleton virt_checking_acc @@ cents base.amount) + ~entries:(make_tx_entries ~on_checking:Debit_credit.Credit) ~labels: Labels.( - empty + base_labels |> add (Unit_label Auto_round_savings_tag) () |> add (String_label Savings_account_tag) details.savings_account) | Deposit details -> Tx.make ~cleared:(Some base.date) ~commodity_id:euc_id - ~debit: - (Account_id_map.singleton virt_checking_acc @@ cents base.amount) - ~credit: - (Account_id_map.singleton virt_counterparty @@ cents base.amount) + ~entries:(make_tx_entries ~on_checking:Debit_credit.Debit) ~labels: Labels.( - empty + base_labels |> add (Iban_label Counterparty_iban_tag) details.counterparty_iban |> add (String_label Counterparty_name_tag) @@ -134,13 +120,10 @@ let tx_from_current_acc euc_id (Ingcsv.Tx (base, spec)) = |> add (String_label Reference_tag) details.reference) | Ideal_debit details -> Tx.make ~cleared:(Some base.date) ~commodity_id:euc_id - ~debit: - (Account_id_map.singleton virt_counterparty @@ cents base.amount) - ~credit: - (Account_id_map.singleton virt_checking_acc @@ cents base.amount) + ~entries:(make_tx_entries ~on_checking:Debit_credit.Credit) ~labels: Labels.( - empty + base_labels |> add (Iban_label Counterparty_iban_tag) details.counterparty_iban |> add (String_label Counterparty_name_tag) @@ -150,13 +133,10 @@ let tx_from_current_acc euc_id (Ingcsv.Tx (base, spec)) = |> add Timestamp_label details.timestamp) | Batch_payment details -> Tx.make ~cleared:(Some base.date) ~commodity_id:euc_id - ~debit: - (Account_id_map.singleton virt_counterparty @@ cents base.amount) - ~credit: - (Account_id_map.singleton virt_checking_acc @@ cents base.amount) + ~entries:(make_tx_entries ~on_checking:Debit_credit.Debit) ~labels: Labels.( - empty + base_labels |> add (Iban_label Counterparty_iban_tag) details.counterparty_iban |> add (String_label Counterparty_name_tag) @@ -164,14 +144,6 @@ let tx_from_current_acc euc_id (Ingcsv.Tx (base, spec)) = |> add (String_label Desc_tag) details.description |> add (String_label Reference_tag) details.reference) -let ba_from_current_acc (Ingcsv.Tx (base, _)) = - { - account = virt_checking_acc; - amount = Money.of_z base.resulting_balance; - labels = Labels.(empty |> add (Iban_label Account_tag) base.account); - } - let les_from_current_acc euc_id tx = let%map tx' = tx_from_current_acc euc_id tx in - let ba = ba_from_current_acc tx in - [ Bal_assert_item ba; Tx_item tx' ] + [ Tx_item tx' ] -- cgit v1.2.3