ref: d023a73dc8bb187bd9161b0b804e8a097ffa8b8c
parent: 982ba593935d007955d7d53f69622af34b3436ab
author: sirjofri <sirjofri@sirjofri.de>
date: Thu Aug 14 07:08:04 EDT 2025
adds first version of the balance script, adds categories to items
--- /dev/null
+++ b/bin/balance
@@ -1,0 +1,111 @@
+#!/bin/rc
+
+rfork en
+ramfs
+
+datafiles=`{ls invoice/*/data.tsv}+cat $datafiles | awk -F '\t' '
+!/^#/ && NF >= 4 {+ number = $1
+ single = $2
+ vat = $3
+ cat = $4
+
+ cats[cat] = number * single
+ vats[vat] += cats[cat]
+}
+END {+ for (c in cats) {+ printf "%s\t%.2f\n", c, cats[c]
+ total += cats[c]
+ }
+ #printf "\t%.2f\n", final
+ for (i in vats) {+ if (i == 0)
+ continue;
+ printf "USt.%d\t%.2f\n", i, vats[i] * i / 100.
+ }
+}
+' > /tmp/in
+
+datafiles=`{ls out/*/*/data.tsv}+cat $datafiles | awk -F '\t' '
+!/^#/ && NF >= 2 {+ cat = $1
+ val = $2
+ sums[cat] += val
+}
+END {+ for (c in sums) {+ printf "%s\t%.2f\n", c, sums[c]
+ }
+}
+' > /tmp/out
+
+awk -F '\t' '
+{+ $2 *= -1
+ printf "%s\t%.2f\n", $1, $2
+}
+' /tmp/out > /tmp/outinv
+
+#################
+
+dumpscript='
+NF == 2 {+ cat = $1
+ val = $2
+ total += val
+ printf "%s\t%.2f EUR\n", cat, val
+}
+END {+ print "_"
+ printf "Summe\t%.2f EUR\n", total
+}'
+
+echo '.TS
+expand linesize(5);
+l s
+l n .
+_
+\fBBetriebseinnahmen\fR
+_'
+
+
+# Einnahmen
+awk -F '\t' $"dumpscript /tmp/in
+
+echo '.T&
+l s
+l n .
+=
+\fBBetriebsausgaben\fR
+_'
+
+# Ausgaben
+awk -F '\t' $"dumpscript /tmp/out
+
+echo '.T&
+l s
+l n .
+=
+\fBErgebnis\fR
+_'
+
+# Ergebnis
+cat /tmp/in /tmp/outinv | awk -F '\t' '
+{+ if ($2 < 0)
+ totalout += $2
+ else
+ totalin += $2
+}
+END {+ printf "Gesamteinnahmen\t%.2f EUR\n", totalin
+ printf "Gesamtausgaben\t%.2f EUR\n", totalout
+ printf "\\fBGewinn vor Steuern\\fR\t\\fB%.2f EUR\\fR\n", totalin + totalout
+}
+'
+
+echo '_
+.TE'
--- a/bin/formatdata.awk
+++ b/bin/formatdata.awk
@@ -15,7 +15,8 @@
number = $1
single = $2
vat = $3
- name = $4
+ cat = $4
+ name = $5
total = number * single
--
⑨