diff --git a/cmd/cli/main.go b/cmd/cli/main.go index fd21c55..dbecd86 100644 --- a/cmd/cli/main.go +++ b/cmd/cli/main.go @@ -410,6 +410,7 @@ func Main() { }) } + matched := map[string]struct{}{} matchies := func(deltas ledger.Deltas, delta ledger.Delta) (ledger.Deltas, []string) { deltas = slices.Clone(deltas) dates := append([]string{delta.Date}, delta.OtherDates...) @@ -422,9 +423,16 @@ func Main() { matches = matches.Like(func(delta ledger.Delta) bool { return delta.Currency == ledger.USD }) - return matches.Like(func(d2 ledger.Delta) bool { + matches = matches.Like(func(d2 ledger.Delta) bool { return fmt.Sprintf("%.2f", d2.Value) == fmt.Sprintf("%.2f", delta.Value) - }), dates + }) + for _, match := range matches { + if _, ok := matched[match.ID()]; !ok { + matched[match.ID()] = struct{}{} + break + } + } + return matches, dates } datesMatched := []string{} @@ -466,6 +474,17 @@ func Main() { fmt.Printf("unique to ledger | %s %s %.2f\n", strings.Join(dates, "="), delta.Description, delta.Value) } } + + for _, delta := range deltas { + if _, ok := matched[delta.ID()]; !ok { + fmt.Printf("unmatched ledger | %s %s %.2f\n", delta.Date, delta.Description, delta.Value) + } + } + for _, delta := range csvDeltas { + if _, ok := matched[delta.ID()]; !ok { + fmt.Printf("unmatched csv | %s %s %.2f\n", delta.Date, delta.Description, delta.Value) + } + } default: log.Fatalf("unknown command %q", positional[0]) }