From e511da2e709192f32c94a43af10becab2cdd2a84 Mon Sep 17 00:00:00 2001 From: Bel LaPointe Date: Thu, 26 Oct 2023 10:46:05 -0600 Subject: [PATCH] wip --- ana/prediction.go | 3 +++ ana/predictor.go | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+) create mode 100644 ana/prediction.go create mode 100644 ana/predictor.go diff --git a/ana/prediction.go b/ana/prediction.go new file mode 100644 index 0000000..2872af8 --- /dev/null +++ b/ana/prediction.go @@ -0,0 +1,3 @@ +package ana + +type Prediction []Predictor diff --git a/ana/predictor.go b/ana/predictor.go new file mode 100644 index 0000000..81180e3 --- /dev/null +++ b/ana/predictor.go @@ -0,0 +1,35 @@ +package ana + +import ( + "maps" + "regexp" + "time" + + "gogs.inhome.blapointe.com/ana-ledger/ledger" +) + +type Predictor func(ledger.Balances, time.Duration) ledger.Balances + +func NewInterestPredictor(namePattern string, currencyPattern string, apy float64) Predictor { + nameMatcher := regexp.MustCompile(namePattern) + currencyMatcher := regexp.MustCompile(currencyPattern) + return func(given ledger.Balances, delta time.Duration) ledger.Balances { + result := maps.Clone(given) + for k, v := range result { + result[k] = maps.Clone(v) + } + + for name := range result { + if !nameMatcher.MatchString(name) { + continue + } + for currency := range result[name] { + if !currencyMatcher.MatchString(string(currency)) { + continue + } + result[name][currency] *= 1.0 + apy/12.0 + } + } + return result + } +}