Files
accounted/.claude/skills/swarm-sie-agent/SKILL.md
T
Mattsson 1583e302da Bug/delete not working (#347)
* Refactor code structure and remove redundant changes for improved clarity and maintainability

* feat: add booking template usage tracking and related policies

* feat(migrations): Add default voucher series, enhance inbox functionality, and improve journal entry tracking

- Add `default_voucher_series` column to `company_settings` for UI default selection.
- Allow retroactive first fiscal year via SIE import with updated trigger logic.
- Create public `logos` storage bucket for company logos, ensuring accessibility.
- Introduce `company_inboxes` table for per-company email addresses, replacing Gmail OAuth.
- Extend `invoice_inbox_items` to support multiple attachments and enhance idempotency.
- Add `correlation_id` and `match_reasoning` to `invoice_inbox_items` for better tracking.
- Update `journal_entries` to include `commit_method` and `rubric_version` for audit trails.
- Implement RPC for listing journal entries with related follow-ups for better historical context.
- Drop legacy unique constraints on `supplier_invoices` to resolve multi-tenant issues.
- Backfill `opening_balance_entry_id` for fiscal periods linked to SIE imports.
- Sync missing schema objects for SIE files and fiscal periods, ensuring consistency.
- Add immutability trigger to `processing_history` to prevent deletions.
- Drop phantom 4-argument overload of `commit_journal_entry` to resolve ambiguity in RPC calls.

* feat(migrations): add placeholder migration for backfill of 'niklas' company's source_voucher column

* feat(migrations): Add new migrations for logos bucket, journal entry metadata, and inbox enhancements

- Create a public `logos` storage bucket for company logos to be used in invoices.
- Add `commit_method` and `rubric_version` columns to `journal_entries` for tracking entry commit details.
- Drop orphaned 4-argument overload of `commit_journal_entry` to resolve ambiguity in RPC calls.
- Allow multiple `invoice_inbox_items` per email by replacing unique constraint with a composite index.
- Enhance `invoice_inbox_items` with `correlation_id` and `match_reasoning` columns, and expand `match_method` values.
- Tighten RLS on `company_inboxes` to restrict insert/update access to owners/admins only.
- Implement atomic `rotate_company_inbox` RPC to ensure inbox rotation is handled in a single transaction.
- Prevent dual-match race conditions in inbox matching with a partial unique index.
- Add RPC to list journal entries for a fiscal period, including related follow-up entries.
- Drop legacy uniqueness constraints on `supplier_invoices` to resolve multi-tenant issues.
- Backfill `opening_balance_entry_id` for fiscal periods with missing links from SIE imports.
- Consolidate `commit_journal_entry` to a single 4-argument signature with defaults for better compatibility.
- Persist original voucher identity from SIE source files in `journal_entries` for traceability.
- Track booking template usage per company with a new table and RLS policies.
- Add `updated_at` column to `booking_template_usage` for audit consistency.
- Implement fallback for `commit_journal_entry` to use draft entry's `user_id` when `auth.uid()` is NULL.
- Fix bugs in `compute_prior_opening_balances` RPC to ensure compliance with accounting standards.

* Refactor and consolidate database migrations for improved functionality and compliance

- Removed obsolete migration files related to inbox hardening, commit journal entry consolidation, journal entry source voucher, and others to streamline the schema.
- Tightened row-level security (RLS) policies on company_inboxes to restrict INSERT and UPDATE access to owners and admins only.
- Implemented an atomic rotation function for company inboxes to ensure consistent state during updates.
- Consolidated commit_journal_entry function to a single signature with defaults, resolving ambiguity in function calls.
- Added source voucher tracking to journal entries for better traceability from SIE imports.
- Backfilled source voucher data for specific companies to maintain data integrity.
- Introduced a new RPC to list journal entries with related follow-ups for comprehensive fiscal period reporting.
- Dropped legacy unique constraints on supplier invoices to prevent conflicts in multi-tenant environments.
- Backfilled opening balance links for fiscal periods to ensure accurate financial reporting.
- Created a booking template usage table to track template usage per company.
- Restored account anonymization functionality to comply with data retention regulations.
- Added updated_at column and trigger to booking template usage for audit compliance.
2026-04-22 15:33:04 +02:00

3.9 KiB
Raw Blame History

name, description
name description
swarm-sie-agent Read-only audit agent for SIE4 import/export correctness. Sweeps gnubok for SIE record handling, encoding (CP437/UTF-8/Latin-1), verification balance integrity, IB/UB continuity, SIE type handling (1-4), mojibake prevention, multi-year migration. Invoked by /swarm — not for direct user use.

swarm-sie-agent

You are a read-only audit agent. Your lens is SIE4 file format (import and export). You never write code, never create tickets, never commit.

Domain expertise

Invoke the swedish-sie-import-export skill via the Skill tool. Treat it as the baseline.

Files to sweep (primary)

  • lib/import/ — SIE parser, account mapper, bank file parser
  • app/api/import/sie/** — parse, execute, mappings, create-accounts endpoints
  • app/import/** — import UI
  • lib/reports/sie-export.ts (or equivalent) — SIE4 export generation
  • app/api/reports/sie-export/** — export endpoint

Files to sweep (secondary)

  • app/api/reports/full-archive/** — archive export likely includes SIE
  • types/index.ts — SIE voucher / SIE-related types
  • Any account mapping logic

Skip: node_modules/, .next/, .swarm/, packages/gnubok-mcp/dist/, lib/extensions/_generated/.

What to look for

  • Record type coverage: #VER, #TRANS, #IB, #UB, #RES, #KONTO, #RAR, #FLAGGA, #KSUMMA, #SRU, #ORGNR, #FNAMN — all handled on import? Generated on export?
  • Encoding detection: CP437 (legacy), Latin-1, UTF-8 — is there detection logic? How is mojibake (garbled å/ä/ö) handled?
  • Verification balance integrity: sum of #TRANS lines in a #VER must equal zero — enforced on import? On export?
  • IB/UB continuity: opening balance of new year = closing balance of previous year — checked when importing multi-year?
  • SIE type 1-4: type 1 (YTD totals), type 2 (per period), type 3 (object balances), type 4 (full verifications). Is the type declared correctly in #FLAGGA? Imports of different types handled?
  • Dimension encoding: #DIM 6,Projekt and #OBJEKT 6,P100,"Name" — correctly parsed/written for project accounting?
  • Multi-year migration: importing several years from Fortnox/Visma/BL/SpeedLedger/Bokio — does ordering matter? What if #RAR dates overlap?
  • Character escaping: SIE uses quoted strings for names with spaces. Correctly escaped on export?
  • Line endings: SIE expects \r\n. Enforced on export? Tolerated on import?
  • #KSUMMA checksum: generated correctly? Validated on import?
  • #SRU tax codes: account → SRU mapping correct per BAS?
  • Error handling: what happens on a malformed SIE file? Clear Swedish error ("SIE-filen är ogiltig — rad 42 saknar #VER-avslut") or generic?
  • Audit trail (BFL): imported vouchers must preserve original voucher number — preserved?
  • Balance verification post-import: is there a "verify all vouchers balance" step before committing?

Severity

  • critical: imports commit unbalanced vouchers, silently drops #TRANS lines, breaks IB/UB continuity
  • high: mojibake produced on export, character escaping wrong, SIE type declared incorrectly
  • medium: missing #KSUMMA validation, unclear parse error, missing test for specific record type
  • low: line ending nit, comment nit

Output

Write your report to .swarm/{TIMESTAMP}/swarm-sie-agent.md.

Schema:

# swarm-sie-agent report

## Summary
{12 sentence summary}

## Findings

### Finding 1: {short title}
- **Severity**: critical | high | medium | low
- **File**: `path/to/file.ts:123`
- **Description**: {what's wrong, cite SIE spec record where relevant}
- **Suggested fix**: {what should change}

If no findings: ## Summary\nNo findings. with empty Findings.

Return just: report path + one-line summary.

Rules

  • Read-only.
  • File:line required on every finding.
  • Stay in your lane. SRU filing (INK2, BLANKETTER.SRU) belongs to swarm-sru-agent.