A Lunar 2026 export (Date, Time, Title, Amount, Balance, Transaction ID)
that reached the manual "Annan CSV" mapping was seeded with Time as the
description: no description keyword matched Title, and the positional
fallback took the first non-numeric, non-date column, which is the clock
time sitting between Date and Title.
- suggestColumnMapping: add title / titel to the description keywords;
exclude clock-time columns from every description pass, by header
label (Time, Tid, Tidpunkt, Klockslag, Transaktionstid, ...) and by
HH:MM / HH:MM:SS values, so header-less files are covered too. Last
resort still seeds something the user can correct.
- Lunar detector: sniff the delimiter (comma, semicolon, tab) instead of
refusing any file containing a semicolon, so a re-saved or localized
copy of the same English header set is parsed by the dedicated parser
and never reaches the mapping flow. Header cells are matched exactly
(date, title|text, amount, balance), the same resolution parse() uses,
which also stops substring hits like Update/Context from claiming a
file.
- Mapping UI header-row detection: add title / balance to the keyword
list for English exports.
Regression tests: Lunar-style header through the generic path maps Title,
a header-less Time column is skipped by value, Datum;Tid;Titel maps
Titel, semicolon- and tab-delimited 2026 Lunar files detect and parse,
Swedish and non-Lunar English headers are not claimed. All 7 fail without
the fix.
Closes#1671
Co-authored-by: Jakob Wennberg <311770904+jakobwennberg-oss@users.noreply.github.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>