From 9e6aebc816361feba32bc1cf05498aea15bf7582 Mon Sep 17 00:00:00 2001 From: Jan Novak Date: Wed, 6 May 2026 16:05:21 +0200 Subject: [PATCH] chore: tick M2.10 in progress tracker + CHANGELOG entry Co-Authored-By: Claude Sonnet 4.6 --- CHANGELOG.md | 5 +++++ docs/plans/2026-05-03-2349-go-backend-rewrite-progress.md | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e7009b9..93dccec 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # Changelog +## 2026-05-06 16:05 CEST — feat(go/M2.10): port domain/reconcile.Reconcile + +- New `go/internal/domain/reconcile` package porting the three-phase payment allocation from `scripts/match_payments.py reconcile()`. +- 12 unit tests covering all Python test cases plus Go-only extras (diacritics tolerance, `[?]` stripping, `other:` purpose, out-of-window credit, inference fallback, unmatched, no-transaction guard). + ## 2026-05-06 13:18 CEST — feat(go/M2.7-2.9): port domain/matching package - New `go/internal/domain/matching` package porting three helpers from `scripts/match_payments.py`. diff --git a/docs/plans/2026-05-03-2349-go-backend-rewrite-progress.md b/docs/plans/2026-05-03-2349-go-backend-rewrite-progress.md index 81e03ce..7f59f13 100644 --- a/docs/plans/2026-05-03-2349-go-backend-rewrite-progress.md +++ b/docs/plans/2026-05-03-2349-go-backend-rewrite-progress.md @@ -53,7 +53,7 @@ Each task: port the function, write Go unit tests for fresh cases, hook into the - [x] **M2.7** `domain/matching.BuildNameVariants` + `MatchMembers` — port `_build_name_variants` and `match_members` from [match_payments.py](scripts/match_payments.py) (auto vs review confidence, common-surname filter) — `e596f00` - [x] **M2.8** `domain/matching.InferTransactionDetails` — port `infer_transaction_details` (composes name + month parsing) — `e596f00` - [x] **M2.9** `domain/matching.FormatDate` — port `format_date` (handles Google Sheets serial-day numbers since 1899-12-30) — `e596f00` -- [ ] **M2.10** `domain/reconcile.Reconcile` — port `reconcile` (three-phase allocation: greedy / proportional with float-remainder absorption / even-split fallback). The single most load-bearing function; budget extra time. +- [x] **M2.10** `domain/reconcile.Reconcile` — port `reconcile` (three-phase allocation: greedy / proportional with float-remainder absorption / even-split fallback). The single most load-bearing function; budget extra time. — `c53bf5a` - [ ] **M2.11** `fuj fees` subcommand wired up via `domain/fees` + (M4-stub) attendance loader — fail gracefully on missing IO until M4 lands - [ ] **M2.12** `fuj reconcile` subcommand similarly stubbed