Implement classification redesign

This commit is contained in:
Lars Nolden
2026-09-11 22:46:17 +02:00
parent cc43a2f9a7
commit 87f052a3ea
23 changed files with 1602 additions and 296 deletions
+10 -2
View File
@@ -25,9 +25,14 @@ type ImportResult struct {
State State `json:"state"`
}
func addProposal(d *domain.Dataset, p classification.Proposal) error {
func addProposal(d *domain.Dataset, p classification.Proposal, facts ...domain.Facts) error {
if p.NewMerchant != nil {
m := *p.NewMerchant
if len(facts) > 0 {
if alias := strings.Join(strings.Fields(facts[0].Counterparty), " "); alias != "" && !slices.Contains(m.Aliases, alias) {
m.Aliases = append(m.Aliases, alias)
}
}
if slices.ContainsFunc(d.Merchants, func(v domain.Merchant) bool { return v.ID == m.ID }) {
return errors.New("proposed merchant ID already exists")
}
@@ -79,7 +84,10 @@ func (a *App) importFacts(ctx context.Context, s State, facts []domain.Facts, in
p, e = a.classifier.Classify(ctx, t.Facts, s.Data, false)
}
if e == nil {
e = addProposal(&s.Data, p)
e = addProposal(&s.Data, p, t.Facts)
if e == nil && p.Enrichment.MerchantID != "" {
classification.LearnAlias(&s.Data, t.Facts, p.Enrichment.MerchantID)
}
}
if e == nil {
e = domain.ValidateEnrichment(s.Data, t.Facts, p.Enrichment)