* fix(import): treat a voucher-less SIE file as a no-op, not a failed migration
A Fortnox migration aborted with the generic "Något gick fel. Försök
igen." when the current fiscal year had nothing booked yet: Fortnox
exports an empty SIE file for such a year, the finalizer's 0-entry
safety net flipped it to 'failed', and the wizard stopped before the
customer/supplier/invoice phase ever ran.
Three layered fixes:
- finalizeImportRecord only downgrades a 0-entry run to 'failed' when
the file actually contained vouchers (parsed count via the
documentation object). A file with no vouchers completes as a no-op
with an explanatory warning; the mapping-fix retry loop the downgrade
exists for (Lookma case) is unchanged.
- The migration wizard no longer routes messages that are already
user-facing Swedish (server envelopes, ImportResult.errors) through
getErrorMessage's Swedish-pattern heuristic, which swallowed
unrecognized sentences into the generic fallback.
- The heuristic itself learns the import-error family
(verifikation/importera) so other surfaces rethrowing engine
messages keep the real reason too.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* fix(import): cross-check raw #VER before accepting a 0-voucher file as empty
The parsed voucher count alone cannot prove a fiscal year was empty: a
field-separator or encoding mismatch can swallow every #VER block with
only a warning-severity parse issue, and executeSIEImport does not fail
on those. Only a raw content check proves the file never declared any
vouchers. Addresses the truncation/corruption finding from the Swedish
compliance review on #1445.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* docs: record the raw #VER safeguard in the empty-SIE-file decision entry
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
---------
Co-authored-by: Jakob Wennberg <311770904+jakobwennberg-oss@users.noreply.github.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>