* feat(arcim): import Bokio underlag and link to verifikat
Adds an optional, re-runnable step that pages the Bokio /uploads, resolves
each receipt's target verifikat via the SIE-preserved voucher number, and
archives it through the document service linked to the journal entry. Closes
the gap where neither the SIE GL import nor the entity import carries the
receipts/underlag attached to each verifikat.
- lib/providers/bokio: getBytes() binary download + an attachments resource
module (uploads list, GUID->voucher index, per-upload download); pageSize
capped at 100, file type taken from the upload's contentType since the
download is octet-stream
- importProviderDocuments: bulk in-memory resolution keyed on (fiscal period,
series, number) — scoped per fiscal year because Bokio restarts numbering at
V1 each year; idempotent on (company_id, sha256) so re-runs don't duplicate
the undeletable BFL-linked rows
- POST /import-documents route, kept off the migration critical path because
the Bokio document API is rate-limited (200 req/60s)
- journal_entry_id link only for v1; reuses the document-service link path
(same module as #804) rather than forking it
Closes#786
Signed-off-by: Jonas Hagberg <jonas@lindan.se>
* fix(arcim): stable pagination order + account for unresolvable receipts
Addresses two findings from a Codex review pass on the import step:
- Add .order('id') to the paged journal_entries / document_attachments /
fiscal_periods reads. fetchAllRows pages with .range(), and PostgREST paging
without a deterministic order can skip/repeat rows once a table exceeds one
page (journal_entries crosses 1000 across several migrated years), which
would defeat both voucher resolution and the sha256 dedup.
- Keep every upload carrying a journalEntryId in scope instead of pre-filtering
on a resolvable voucher ref, so a receipt whose Bokio entry number didn't
parse (or resolves to no verifikat) is counted as unmatched rather than
silently dropped from the best-effort report.
Tests: add unresolvable-ref and zero-uploads cases; mock now supports .order().
Signed-off-by: Jonas Hagberg <jonas@lindan.se>
---------
Signed-off-by: Jonas Hagberg <jonas@lindan.se>