fix: address user feedback — RC preview, bank sync lookback, CSV import robustness (#233)

Three confirmed issues from user feedback:

1. Reverse charge preview now uses per-item VAT rates and correct accounts
   (2645/2647, 2614/2624/2634) instead of hardcoded 25%/2614
2. Bank sync uses 90-day lookback on first sync (when last_synced_at is null)
   instead of hardcoded 7 days for all syncs
3. Bank file import improvements:
   - Shared date normalizer supporting DD.MM.YYYY, DD/MM/YYYY, YYYYMMDD
   - Silent row skips now reported with reason in issues[]
   - Decimal separator mismatch detection in generic CSV
   - Swedish error message with format diagnostics on detection failure
   - Date format selector in column mapping UI

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Jakob Wennberg
2026-04-13 17:34:50 +02:00
committed by GitHub
co-authored by Claude Opus 4.6
parent 2fcebffb34
commit 9753f18533
18 changed files with 344 additions and 52 deletions
@@ -44,6 +44,7 @@ export default function BankFileColumnMappingStep({
const [balanceCol, setBalanceCol] = useState<number>(-1)
const [delimiter, setDelimiter] = useState<string>(',')
const [decimalSep, setDecimalSep] = useState<',' | '.'>(',')
const [dateFormat, setDateFormat] = useState<string>('YYYY-MM-DD')
const isValid = dateCol >= 0 && descCol >= 0 && amountCol >= 0
@@ -58,7 +59,7 @@ export default function BankFileColumnMappingStep({
delimiter,
decimal_separator: decimalSep,
skip_rows: 1, // Skip header
date_format: 'YYYY-MM-DD',
date_format: dateFormat,
}
onConfirm(mapping)
}
@@ -78,8 +79,8 @@ export default function BankFileColumnMappingStep({
</CardDescription>
</CardHeader>
<CardContent className="space-y-6">
{/* Delimiter and decimal settings */}
<div className="grid grid-cols-1 sm:grid-cols-2 gap-4">
{/* Delimiter, decimal, and date format settings */}
<div className="grid grid-cols-1 sm:grid-cols-3 gap-4">
<div className="space-y-2">
<Label>Avgränsare</Label>
<Select value={delimiter} onValueChange={(v) => { if (v) setDelimiter(v) }}>
@@ -105,6 +106,20 @@ export default function BankFileColumnMappingStep({
</SelectContent>
</Select>
</div>
<div className="space-y-2">
<Label>Datumformat</Label>
<Select value={dateFormat} onValueChange={(v) => { if (v) setDateFormat(v) }}>
<SelectTrigger>
<SelectValue />
</SelectTrigger>
<SelectContent>
<SelectItem value="YYYY-MM-DD">YYYY-MM-DD</SelectItem>
<SelectItem value="DD.MM.YYYY">DD.MM.YYYY</SelectItem>
<SelectItem value="DD/MM/YYYY">DD/MM/YYYY</SelectItem>
<SelectItem value="YYYYMMDD">YYYYMMDD</SelectItem>
</SelectContent>
</Select>
</div>
</div>
{/* Required column mappings */}