Update Home
179
Home.md
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
|
|
||||||
```
|
```
|
Reference in New Issue
Block a user