From e66b06ede31f2aa19f1e1e8e934fc824f0a9b5d4 Mon Sep 17 00:00:00 2001 From: Aaron Fiore Date: Tue, 19 Mar 2024 17:11:12 -0700 Subject: [PATCH] hledger-flow: add support for AdaLite --- .../accounts/adalite/adalite-shared.bash | 79 +++++++++++++++++++ .../accounts/adalite/adalite-shared.rules | 48 +++++++++++ .../adalite/template/adalite-shared.bash | 23 ++++++ .../adalite/template/adalite-shared.rules | 20 +++++ .../1-in/mockup/2022/transactions.csv | 3 + .../1-in/mockup/2023/transactions.csv | 3 + .../1-in/mockup/2024/transactions.csv | 3 + .../subaccount-1/adalite-subaccount-1.rules | 20 +++++ .../template/adalite/subaccount-1/preprocess | 1 + 9 files changed, 200 insertions(+) create mode 100755 container/src/hledger-flow/accounts/adalite/adalite-shared.bash create mode 100644 container/src/hledger-flow/accounts/adalite/adalite-shared.rules create mode 100755 container/src/hledger-flow/accounts/adalite/template/adalite-shared.bash create mode 100644 container/src/hledger-flow/accounts/adalite/template/adalite-shared.rules create mode 100644 container/src/hledger-flow/accounts/adalite/template/adalite/subaccount-1/1-in/mockup/2022/transactions.csv create mode 100644 container/src/hledger-flow/accounts/adalite/template/adalite/subaccount-1/1-in/mockup/2023/transactions.csv create mode 100644 container/src/hledger-flow/accounts/adalite/template/adalite/subaccount-1/1-in/mockup/2024/transactions.csv create mode 100644 container/src/hledger-flow/accounts/adalite/template/adalite/subaccount-1/adalite-subaccount-1.rules create mode 120000 container/src/hledger-flow/accounts/adalite/template/adalite/subaccount-1/preprocess diff --git a/container/src/hledger-flow/accounts/adalite/adalite-shared.bash b/container/src/hledger-flow/accounts/adalite/adalite-shared.bash new file mode 100755 index 0000000..e6d10b0 --- /dev/null +++ b/container/src/hledger-flow/accounts/adalite/adalite-shared.bash @@ -0,0 +1,79 @@ +#!/usr/bin/env bash + +# docker-finance | modern accounting for the power-user +# +# Copyright (C) 2024 Aaron Fiore (Founder, Evergreen Crypto LLC) +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# +# "Libraries" +# + +[ -z "$DOCKER_FINANCE_CONTAINER_REPO" ] && exit 1 +source "${DOCKER_FINANCE_CONTAINER_REPO}/src/hledger-flow/lib/lib_preprocess.bash" "$1" "$2" + +# +# Implementation +# + +[ -z "$global_year" ] && exit 1 +[ -z "$global_subaccount" ] && exit 1 + +[ -z "$global_in_path" ] && exit 1 +[ -z "$global_out_path" ] && exit 1 + +function parse() +{ + lib_preprocess::assert_header "Date,Transaction ID,Type,Received from (disclaimer: may not be accurate - first sender address only),Received amount,Received currency,Sent amount,Sent currency,Fee amount,Fee currency," + + gawk -v global_year="$global_year" -v global_subaccount="$global_subaccount" \ + '{ + if (NR<2 || $1 !~ global_year) + next + + # Format: MM/DD/YYYY HH:MM PM UTC + timestamp=substr($1, 1, 19) # Remove tail ("UTC") + sub(/ /, "Z", timestamp) # Replace first space + sub(/ /, "", timestamp) # Remove remaining space + + # Get/set date format + cmd = "date \"+%F %T %z\" --utc --date="timestamp | getline date + + printf date OFS # Date (timestamp) + printf $2 OFS # Transaction ID + printf $3 OFS # Type + printf $4 OFS # Received from (disclaimer: may not be accurate - first sender address only) + printf $5 OFS # Received amount + printf $6 OFS # Received currency + printf $7 OFS # Sent amount + printf $8 OFS # Sent currency + printf $9 OFS # Fee amount + printf $10 OFS # Fee currency + + printf ($7 ~ /[1-9]/ ? "OUT" : "IN") OFS # Direction + printf global_subaccount + + printf "\n" + }' FS=, OFS=, "$global_in_path" | tac >"$global_out_path" +} + +function main() +{ + parse +} + +main "$@" + +# vim: sw=2 sts=2 si ai et diff --git a/container/src/hledger-flow/accounts/adalite/adalite-shared.rules b/container/src/hledger-flow/accounts/adalite/adalite-shared.rules new file mode 100644 index 0000000..1fec1b0 --- /dev/null +++ b/container/src/hledger-flow/accounts/adalite/adalite-shared.rules @@ -0,0 +1,48 @@ +# docker-finance | modern accounting for the power-user +# +# Copyright (C) 2024 Aaron Fiore (Founder, Evergreen Crypto LLC) +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +fields timestamp,txid,type,from_address,from_amount,from_currency,to_amount,to_currency,fee_amount,fee_currency,direction,subaccount + +date-format %Y-%m-%d %H:%M:%S %z +date %timestamp + +description %timestamp + +comment type:%type, txid:%txid, direction:%direction + +# Default equity transfer +if %direction ^IN$ + account1 assets:adalite:%subaccount:%from_currency + amount %from_amount %from_currency + account2 equity:adalite:%subaccount:withdrawal:%from_currency + +# Default expense +if %direction ^OUT$ + account1 assets:adalite:%subaccount:%to_currency + amount -%to_amount %to_currency + account2 expenses:adalite:%subaccount:%to_currency + +if %direction ^OUT$ +& %fee_amount [1-9] + account3 assets:adalite:%subaccount:%fee_currency + amount3 -%fee_amount %fee_currency + account4 expenses:adalite:%subaccount:fees:%fee_currency + comment type:%type, txid:%txid, direction:%direction, taxed_as:SPEND + comment3 %timestamp,SPEND,adalite,%fee_currency,%fee_amount,USD,,FEE +# Using comment3 so a comment2 SPEND isn't overwritten (when applicable) + +# vim: sw=2 sts=2 si ai et diff --git a/container/src/hledger-flow/accounts/adalite/template/adalite-shared.bash b/container/src/hledger-flow/accounts/adalite/template/adalite-shared.bash new file mode 100755 index 0000000..373e20d --- /dev/null +++ b/container/src/hledger-flow/accounts/adalite/template/adalite-shared.bash @@ -0,0 +1,23 @@ +#!/usr/bin/env bash + +# docker-finance | modern accounting for the power-user +# +# Copyright (C) 2024 Aaron Fiore (Founder, Evergreen Crypto LLC) +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +[ -z "$DOCKER_FINANCE_CONTAINER_REPO" ] && exit 1 +source "${DOCKER_FINANCE_CONTAINER_REPO}/src/hledger-flow/accounts/adalite/adalite-shared.bash" + +# vim: sw=2 sts=2 si ai et diff --git a/container/src/hledger-flow/accounts/adalite/template/adalite-shared.rules b/container/src/hledger-flow/accounts/adalite/template/adalite-shared.rules new file mode 100644 index 0000000..0aa27dd --- /dev/null +++ b/container/src/hledger-flow/accounts/adalite/template/adalite-shared.rules @@ -0,0 +1,20 @@ +# docker-finance | modern accounting for the power-user +# +# Copyright (C) 2024 Aaron Fiore (Founder, Evergreen Crypto LLC) +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +include ../../../../../src/accounts/adalite/adalite-shared.rules + +# vim: sw=2 sts=2 si ai et diff --git a/container/src/hledger-flow/accounts/adalite/template/adalite/subaccount-1/1-in/mockup/2022/transactions.csv b/container/src/hledger-flow/accounts/adalite/template/adalite/subaccount-1/1-in/mockup/2022/transactions.csv new file mode 100644 index 0000000..dc019c3 --- /dev/null +++ b/container/src/hledger-flow/accounts/adalite/template/adalite/subaccount-1/1-in/mockup/2022/transactions.csv @@ -0,0 +1,3 @@ +Date,Transaction ID,Type,Received from (disclaimer: may not be accurate - first sender address only),Received amount,Received currency,Sent amount,Sent currency,Fee amount,Fee currency, +02/02/2023 12:34 PM UTC,XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX1,Sent,,,,12.345678,ADA,0.123456,ADA, +02/02/2023 01:23 AM UTC,XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX0,Received,addr1qXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX,101.234567,ADA,,,,, diff --git a/container/src/hledger-flow/accounts/adalite/template/adalite/subaccount-1/1-in/mockup/2023/transactions.csv b/container/src/hledger-flow/accounts/adalite/template/adalite/subaccount-1/1-in/mockup/2023/transactions.csv new file mode 100644 index 0000000..dc019c3 --- /dev/null +++ b/container/src/hledger-flow/accounts/adalite/template/adalite/subaccount-1/1-in/mockup/2023/transactions.csv @@ -0,0 +1,3 @@ +Date,Transaction ID,Type,Received from (disclaimer: may not be accurate - first sender address only),Received amount,Received currency,Sent amount,Sent currency,Fee amount,Fee currency, +02/02/2023 12:34 PM UTC,XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX1,Sent,,,,12.345678,ADA,0.123456,ADA, +02/02/2023 01:23 AM UTC,XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX0,Received,addr1qXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX,101.234567,ADA,,,,, diff --git a/container/src/hledger-flow/accounts/adalite/template/adalite/subaccount-1/1-in/mockup/2024/transactions.csv b/container/src/hledger-flow/accounts/adalite/template/adalite/subaccount-1/1-in/mockup/2024/transactions.csv new file mode 100644 index 0000000..dc019c3 --- /dev/null +++ b/container/src/hledger-flow/accounts/adalite/template/adalite/subaccount-1/1-in/mockup/2024/transactions.csv @@ -0,0 +1,3 @@ +Date,Transaction ID,Type,Received from (disclaimer: may not be accurate - first sender address only),Received amount,Received currency,Sent amount,Sent currency,Fee amount,Fee currency, +02/02/2023 12:34 PM UTC,XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX1,Sent,,,,12.345678,ADA,0.123456,ADA, +02/02/2023 01:23 AM UTC,XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX0,Received,addr1qXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX,101.234567,ADA,,,,, diff --git a/container/src/hledger-flow/accounts/adalite/template/adalite/subaccount-1/adalite-subaccount-1.rules b/container/src/hledger-flow/accounts/adalite/template/adalite/subaccount-1/adalite-subaccount-1.rules new file mode 100644 index 0000000..c9f0fb9 --- /dev/null +++ b/container/src/hledger-flow/accounts/adalite/template/adalite/subaccount-1/adalite-subaccount-1.rules @@ -0,0 +1,20 @@ +# docker-finance | modern accounting for the power-user +# +# Copyright (C) 2024 Aaron Fiore (Founder, Evergreen Crypto LLC) +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +include ../../adalite-shared.rules + +# vim: sw=2 sts=2 si ai et diff --git a/container/src/hledger-flow/accounts/adalite/template/adalite/subaccount-1/preprocess b/container/src/hledger-flow/accounts/adalite/template/adalite/subaccount-1/preprocess new file mode 120000 index 0000000..ce1912e --- /dev/null +++ b/container/src/hledger-flow/accounts/adalite/template/adalite/subaccount-1/preprocess @@ -0,0 +1 @@ +../../adalite-shared.bash \ No newline at end of file