Fix/import data (#200)

* fix: enhance import data handling and consent management across components

* feat: Enhance SIE import functionality with validation and error handling improvements

- Added validation errors and warnings state management in SIEImportWizard.
- Improved error handling for duplicate, validation, and parsing errors during SIE file import.
- Enhanced user feedback with actionable guidance for common import errors.
- Updated SIEUploadStep to display validation errors and warnings.
- Improved error messages in API routes for better clarity and user experience.
- Added file size and type validation in the SIE parse route.
- Enhanced parsing logic to provide more detailed error messages for unbalanced vouchers and missing amounts.
- Created a new storage bucket for SIE file archival in Supabase with appropriate policies for user access.
- Updated tests to reflect changes in error messages and validation logic.

* fix: Improve type assertion for response in getPage method

* Update extensions/general/arcim-migration/lib/migration-orchestrator.ts

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>

* Update supabase/migrations/20260408130000_sie_files_storage_bucket.sql

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>

* fix: Add company ID verification for consent handling in accept and disconnect endpoints

---------

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
This commit is contained in:
Mattsson
2026-04-08 18:17:00 +02:00
committed by GitHub
co-authored by greptile-apps[bot]
parent 6c79f21679
commit 211033410c
20 changed files with 529 additions and 126 deletions
@@ -0,0 +1,50 @@
-- Migration: Create 'sie-files' storage bucket for SIE file archival
-- The SIE import flow archives imported files to Supabase Storage for
-- BFL 7 kap 1-2§ retention compliance, but the bucket was never created.
-- Path convention: {company_id}/{import_id}.se
-- =============================================================================
-- 1. Create the 'sie-files' bucket (private, 10MB limit, text only)
-- =============================================================================
INSERT INTO storage.buckets (id, name, public, file_size_limit, allowed_mime_types)
VALUES (
'sie-files',
'sie-files',
false,
52428800, -- 50 MB, matches MAX_FILE_SIZE in the parse route
ARRAY['text/plain']
)
ON CONFLICT (id) DO NOTHING;
ON CONFLICT (id) DO NOTHING;
-- =============================================================================
-- 2. INSERT policy: Users can upload to companies they belong to
-- =============================================================================
CREATE POLICY "sie_files_insert"
ON storage.objects
FOR INSERT
TO authenticated
WITH CHECK (
bucket_id = 'sie-files'
AND (storage.foldername(name))[1]::uuid IN (SELECT public.user_company_ids())
);
-- =============================================================================
-- 3. SELECT policy: Users can read files from companies they belong to
-- =============================================================================
CREATE POLICY "sie_files_select"
ON storage.objects
FOR SELECT
TO authenticated
USING (
bucket_id = 'sie-files'
AND (storage.foldername(name))[1]::uuid IN (SELECT public.user_company_ids())
);
-- =============================================================================
-- No UPDATE or DELETE policies — WORM compliance for BFL retention
-- Service role bypasses RLS for admin/cron access
-- =============================================================================