fix(go): pass raw value to FormatDate so numeric serial-day dates format
All checks were successful
Deploy to K8s / deploy (push) Successful in 11s
All checks were successful
Deploy to K8s / deploy (push) Successful in 11s
The transaction-row parser in services/membership/sources.go used a helper (`getVal`) that did `fmt.Sprint(row[i])` before passing to `matching.FormatDate`. The Sheets API returns date-formatted cells as `float64` (Sheets serial-day numbers); pre-stringifying defeated `FormatDate`'s `case float64:` dispatch, so values like 46147 leaked through unchanged as the string "46147" instead of being converted to "2026-05-05". Surfaced by `make parity` (M5.4) — every `transactions[].date` on /api/adults and /api/juniors differed between Python and Go. Python side passes the raw value through directly (`isinstance(val, (int, float))` in scripts/match_payments.py format_date), so it was always correct. Added a `getRaw` helper that returns row[i] without stringifying; only the date column needs it. Extended TestLoadTransactions with a numeric-serial-day row to lock in the regression. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -394,9 +394,19 @@ func parseTransactionRows(rows [][]any) ([]reconcile.Transaction, error) {
|
||||
return fmt.Sprint(row[i])
|
||||
}
|
||||
|
||||
// getRaw returns row[i] without stringifying — needed for FormatDate to
|
||||
// dispatch on the underlying numeric type (Sheets returns serial-day
|
||||
// numbers as float64). Stringifying first defeats that dispatch.
|
||||
getRaw := func(row []any, i int) any {
|
||||
if i < 0 || i >= len(row) {
|
||||
return nil
|
||||
}
|
||||
return row[i]
|
||||
}
|
||||
|
||||
var txns []reconcile.Transaction
|
||||
for _, row := range rows[1:] {
|
||||
dateStr := matching.FormatDate(getVal(row, idxDate))
|
||||
dateStr := matching.FormatDate(getRaw(row, idxDate))
|
||||
amountRaw := row[idxAmount]
|
||||
if idxAmount < 0 || idxAmount >= len(row) {
|
||||
amountRaw = ""
|
||||
|
||||
Reference in New Issue
Block a user