Go's build_juniors sets cellText = "?" + countStr whenever
md.IsUnknown is true, regardless of whether an exception overrides the
expected amount. Python was checking expected == "?" for this branch,
but reconcile replaces expected with the exception amount (e.g. 0)
before the view builder runs, so the "?" was silently dropped to "-".
Fix: derive is_unknown from original_expected == "?" (set before
exception substitution) instead of expected == "?". Also align the
tooltip guard: Go only shows Received/Expected tooltip for non-unknown
months (or when paid > 0), matching the same is_unknown flag.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Two remaining make parity diffs vs Go:
- amount: non-numeric sheet values like "---" passed through as strings;
Go's parseFloat silently returns 0.0 for unparseable values. Add
get_float helper that matches that behaviour.
- message: numeric cell values (e.g. a bank reference in the message
column) passed through as float64; Go's getVal uses fmt.Sprint and
always emits a string. Apply get_str to the message field.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
The Sheets API returns VS (variabilní symbol) cells as float64 when
the column is number-formatted, so Python was emitting vs: 0 (a JSON
number) while Go's getVal uses fmt.Sprint and always emits vs: "0"
(a string). Add get_str helper that converts whole-number floats via
int() first (matching Go's %g formatting), applied to the vs field.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>