Update Home

2025-07-19 11:00:33 +00:00
parent 2d72abbf6b
commit fbf66d489a

179
Home.md

@@ -3,35 +3,84 @@
``` ```
#!/bin/bash #!/bin/bash
YEAR_START="2025-01-01" #!/bin/bash
MONTH_START="2025-02-01"
BEGIN="2025-01-01"
function bsheet() { function bsheet() {
cat <<EOS cat <<EOS
SELECT * SELECT *
FROM ( FROM (
SELECT SELECT
entry.name AS name, SPLIT(entry.name, 0) AS name_,
SUM(journal.amount) AS volume SUM(journal.amount) AS volume
FROM journal RIGHT JOIN entry ON journal.entry=entry.id FROM journal RIGHT JOIN entry ON journal.entry=entry.id
WHERE entry.type='$1' WHERE entry.type='$1'
GROUP BY entry.name GROUP BY name_
) )
WHERE volume != 0; WHERE volume != 0;
EOS EOS
} }
function bsheet_trans() { function bsheet_sub() {
cat <<EOS
SELECT *
FROM (
SELECT
SUBSTR(entry.name, LENGTH('$2/')+1) AS name_,
SUM(journal.amount) AS volume
FROM journal RIGHT JOIN entry ON journal.entry=entry.id
WHERE entry.type='$1' AND SPLIT(entry.name, 0)='$2'
GROUP BY name_
)
WHERE volume != 0;
EOS
}
function pl() {
cat <<EOS
SELECT
SPLIT(entry.name, 0) AS name_,
SUM(journal.amount) AS sum
FROM journal
RIGHT JOIN entry ON journal.entry=entry.id
RIGHT JOIN tx ON journal.tx =tx.id
WHERE tx.date >= '$2' AND entry.type='$1'
GROUP BY entry.type, name_;
EOS
}
function pl_sub() {
cat <<EOS
SELECT
SUBSTR(entry.name, LENGTH('$3/')+1) AS name_,
SUM(journal.amount) AS sum
FROM journal
RIGHT JOIN entry ON journal.entry=entry.id
RIGHT JOIN tx ON journal.tx =tx.id
WHERE tx.date >= '$2' AND entry.type='$1' AND SPLIT(entry.name, 0)='$3'
GROUP BY entry.type, name_;
EOS
}
function asset_trans() {
cat <<EOS cat <<EOS
SELECT SELECT
date, date,
SUM(sum) SUM(asset_sum)
OVER(ORDER BY date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),
SUM(realnet_sum)
OVER(ORDER BY date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),
SUM(risked_sum)
OVER(ORDER BY date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) OVER(ORDER BY date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
FROM ( FROM (
SELECT SELECT
tx.date AS date, tx.date AS date,
SUM(
CASE WHEN entry.type="A" THEN journal.amount ELSE 0 END
) AS asset_sum,
SUM( SUM(
CASE WHEN entry.type="A" THEN journal.amount ELSE -journal.amount END CASE WHEN entry.type="A" THEN journal.amount ELSE -journal.amount END
) AS sum ) AS realnet_sum,
SUM(
CASE WHEN entry.type="A" AND SPLIT(entry.name, 0)="investment" THEN journal.amount ELSE 0 END
) AS risked_sum
FROM journal FROM journal
RIGHT JOIN entry ON journal.entry=entry.id RIGHT JOIN entry ON journal.entry=entry.id
RIGHT JOIN tx ON journal.tx =tx.id RIGHT JOIN tx ON journal.tx =tx.id
@@ -40,89 +89,47 @@ function bsheet_trans() {
); );
EOS EOS
} }
function pl() {
cat <<EOS
SELECT
entry.name AS name,
SUM(journal.amount) AS sum
FROM journal
RIGHT JOIN entry ON journal.entry=entry.id
RIGHT JOIN tx ON journal.tx =tx.id
WHERE tx.date >= '$2' AND entry.type='$1'
GROUP BY entry.type, entry.name;
EOS
}
function pl_trans() {
cat <<EOS
SELECT
STRFTIME('$2', tx.date) AS period,
SUM(amount) AS sum
FROM journal
RIGHT JOIN entry ON journal.entry=entry.id
RIGHT JOIN tx ON journal.tx =tx.id
WHERE tx.date >= '$2' AND tx.date >= '$YEAR_START' AND entry.type='$1'
GROUP BY period;
EOS
}
touch ./db.sqlite
python -m bookeeper ./db.sqlite \ python -m bookeeper ./db.sqlite \
--read tx.txt \ --read tx.txt \
--output dst/financials.txt \
\ \
--output dst/bsheet-asset.txt \ --text "# ASSET" \
--sql "$(bsheet A)" \ --sql "$(bsheet A)" \
\ --text "
--output dst/bsheet-debt.txt \ " \
--text "# ASSET (INVESTMENT)" \
--sql "$(bsheet_sub A investment)" \
--text "
" \
--text "# DEBT" \
--sql "$(bsheet D)" \ --sql "$(bsheet D)" \
\ --text "
--output dst/bsheet-net.txt \ " \
--text "# NET" \
--sql "$(bsheet N)" \ --sql "$(bsheet N)" \
\ --text "
--output dst/bsheet-trans.txt \ " \
--sql "$(bsheet_trans)" \ --text "# EXPENSE" \
\ --sql "$(pl E $BEGIN)" \
--output dst/pl-expense-1m.txt \ --text "
--sql "$(pl E $MONTH_START)" \ " \
\ --text "# REVENUE" \
--output dst/pl-expense-1y.txt \ --sql "$(pl R $BEGIN)" \
--sql "$(pl E $YEAR_START)" \ --text "
\ " \
--output dst/pl-revenue-1m.txt \ --text "# EXPENSE (FOODS)" \
--sql "$(pl R $MONTH_START)" \ --sql "$(pl_sub E $BEGIN food)" \
\ --text "
--output dst/pl-revenue-1y.txt \ " \
--sql "$(pl R $YEAR_START)" \ --text "# EXPENSE (INVESTMENTS)" \
\ --sql "$(pl_sub E $BEGIN investment)" \
--output dst/pl-trans-expense-1m.txt \ --text "
--sql "$(pl_trans E '%Y-%m')" \ " \
\ --text "# REVENUES (INVESTMENTS)" \
--output dst/pl-trans-expense-1d.txt \ --sql "$(pl_sub R $BEGIN investment)" \
--sql "$(pl_trans E '%Y-%m-%d')" \ --text "
\ " \
--output dst/pl-trans-revenue-1m.txt \ --text "# ASSET TRANS (ALL TIME)" \
--sql "$(pl_trans R '%Y-%m')" \ --sql "$(asset_trans)"
\
--output dst/pl-trans-revenue-1d.txt \
--sql "$(pl_trans R '%Y-%m-%d')"
function categorize() {
cat - | awk -F, '{split($1, terms, "/"); a[terms[1]]+=$2} END {for (y in a) printf "%s,%d\n", y, a[y]}'
}
categorize < dst/pl-expense-1m.txt > dst/pl-expense-1m-categorized.txt
categorize < dst/pl-expense-1y.txt > dst/pl-expense-1y-categorized.txt
sed -i '1s|^|name, volume\n|' dst/bsheet-asset.txt
sed -i '1s|^|name, volume\n|' dst/bsheet-debt.txt
sed -i '1s|^|name, volume\n|' dst/bsheet-net.txt
sed -i '1s|^|date, volume\n|' dst/bsheet-trans.txt
sed -i '1s|^|name, volume\n|' dst/pl-expense-1m.txt
sed -i '1s|^|name, volume\n|' dst/pl-expense-1m-categorized.txt
sed -i '1s|^|name, volume\n|' dst/pl-revenue-1m.txt
sed -i '1s|^|name, volume\n|' dst/pl-expense-1y.txt
sed -i '1s|^|name, volume\n|' dst/pl-expense-1y-categorized.txt
sed -i '1s|^|name, volume\n|' dst/pl-revenue-1y.txt
sed -i '1s|^|date, volume\n|' dst/pl-trans-expense-1m.txt
sed -i '1s|^|date, volume\n|' dst/pl-trans-revenue-1m.txt
sed -i '1s|^|date, volume\n|' dst/pl-trans-expense-1d.txt
sed -i '1s|^|date, volume\n|' dst/pl-trans-revenue-1d.txt
``` ```