feat(transactions): select and bulk-ignore any unbooked skattekonto row (#2127) (#2140)

* feat(transactions): select and bulk-ignore any unbooked skattekonto row (#2127)

Skattekonto rows in the inbox only got a checkbox when they carried a
deterministic booking suggestion, because the only bulk action was
Bokför valda. A migration backlog on the skattekonto (rows from before
the first fiscal year, history already booked via SIE) therefore had
to be ignored one row at a time, while bank rows next to them could be
bulk-ignored.

- isSkvSelectable: every unbooked, non-ignored skattekonto row is
  selectable (checkbox, shift-range, Markera alla).
- Bulk Bokför keeps its eligibility rule: button count, confirmation
  summary and submit all read one skvBookableSelectedRows list, so a
  mixed selection books only the deterministic subset.
- Bulk Ignorera now spans bank + skattekonto selections: one
  confirmation (body names where each kind is restored), one progress
  counter, one toast, bank rows via POST /transactions/:id/ignore and
  skattekonto rows via the per-row PATCH .../ignore, 5-wide.
- The bank-only confirm/toast strings move from hardcoded Swedish to
  transactions.batch_ignore_* keys (sv + en).

Bullet 2 of the issue (unbooked skattekonto rows "not in att göra after
migration") is scoped out; see DECISIONS.md.

Closes #2127

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WFhSQWzu5SyXB6kG5ActZc

* feat(transactions): warn when bulk Ignorera covers rows that look like affärshändelser

Compliance review on #2140: any unbooked skattekonto row can now be
bulk-ignored, including rows with a deterministic booking suggestion
(interest, charges) that BFL 5 kap. says should be booked. The ignore
stays allowed, a migrated backlog is exactly such rows already present
in the imported books, but the confirmation now says how many of the
selected rows carry a suggestion and no duplicate hint, and what
Ignorera is for.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WFhSQWzu5SyXB6kG5ActZc

---------

Co-authored-by: Jakob Wennberg <311770904+jakobwennberg-oss@users.noreply.github.com>
Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
Jakob Wennberg
2026-09-01 22:44:52 +02:00
committed by GitHub
co-authored by Claude Fable 5.1 Jakob Wennberg
parent ea45e9dc2f
commit 823a0f73d8
4 changed files with 163 additions and 53 deletions
+13
View File
@@ -6240,6 +6240,19 @@
"batch_clear": "Clear selection",
"batch_progress": "Booking {done} of {total}…",
"batch_skv_book": "Post selected ({count})",
"batch_ignore_confirm_title": "Ignore {count, plural, one {1 row} other {# rows}}?",
"batch_ignore_confirm_body_bank": "The transactions disappear from the list without being posted. You can restore them under Bank reconciliation.",
"batch_ignore_confirm_body_skv": "The tax account events are hidden from the list without being posted. Use this for events that are not business events of the company, for example rows from before the first fiscal year. You can restore them under Tax account.",
"batch_ignore_confirm_body_mixed": "The rows disappear from the list without being posted. Restore bank transactions under Bank reconciliation and tax account events under Tax account.",
"batch_ignore_confirm_skv_suggested": "{count, plural, one {1 of the tax account rows has a booking suggestion and looks like a business event that should be posted.} other {# of the tax account rows have booking suggestions and look like business events that should be posted.}} Only ignore rows that are already in the books or predate the first fiscal year.",
"batch_ignore_confirm_cta": "Ignore",
"batch_ignore_confirm_cancel": "Cancel",
"batch_ignore_done_description": "{count, plural, one {1 row ignored} other {# rows ignored}}",
"batch_ignore_partial_description": "{success} ignored, {failed} failed",
"batch_ignore_open_reconciliation": "Reconciliation",
"batch_ignore_open_reconciliation_alt": "Open Bank reconciliation",
"batch_ignore_open_skattekonto": "Tax account",
"batch_ignore_open_skattekonto_alt": "Open Tax account",
"batch_done_title": "Done",
"batch_partial_title": "Partially done",
"batch_categorize_done_description": "{count, plural, one {1 transaction posted} other {# transactions posted}}",
+13
View File
@@ -6240,6 +6240,19 @@
"batch_clear": "Avmarkera",
"batch_progress": "Bokför {done} av {total}…",
"batch_skv_book": "Bokför valda ({count})",
"batch_ignore_confirm_title": "Ignorera {count, plural, one {1 rad} other {# rader}}?",
"batch_ignore_confirm_body_bank": "Transaktionerna försvinner från listan utan att bokföras. Du kan återställa dem under Bankavstämning.",
"batch_ignore_confirm_body_skv": "Skattekontohändelserna döljs från listan utan att bokföras. Använd för händelser som inte är firmans affärshändelser, till exempel rader från tiden före första räkenskapsåret. Du kan återställa dem under Skattekonto.",
"batch_ignore_confirm_body_mixed": "Raderna försvinner från listan utan att bokföras. Banktransaktioner återställer du under Bankavstämning, skattekontohändelser under Skattekonto.",
"batch_ignore_confirm_skv_suggested": "{count, plural, one {1 av skattekontoraderna har ett bokföringsförslag och ser ut som en affärshändelse som ska bokföras.} other {# av skattekontoraderna har bokföringsförslag och ser ut som affärshändelser som ska bokföras.}} Ignorera bara rader som redan finns i bokföringen eller ligger före första räkenskapsåret.",
"batch_ignore_confirm_cta": "Ignorera",
"batch_ignore_confirm_cancel": "Avbryt",
"batch_ignore_done_description": "{count, plural, one {1 rad ignorerad} other {# rader ignorerade}}",
"batch_ignore_partial_description": "{success} ignorerade, {failed} misslyckades",
"batch_ignore_open_reconciliation": "Avstämning",
"batch_ignore_open_reconciliation_alt": "Öppna Bankavstämning",
"batch_ignore_open_skattekonto": "Skattekonto",
"batch_ignore_open_skattekonto_alt": "Öppna Skattekonto",
"batch_done_title": "Klart",
"batch_partial_title": "Delvis klart",
"batch_categorize_done_description": "{count, plural, one {1 transaktion bokförd} other {# transaktioner bokförda}}",