-- Migration: 007_JournalEntryDraftCompliance -- Description: Add Danish accounting law compliance fields to journal entry drafts -- - VoucherNumber (Bilagsnummer) - required by Bogføringsloven § 7, Stk. 4 -- - AttachmentIds - for document references required by Bogføringsloven § 6 -- - DocumentDate (Bilagsdato) - renamed from generic "date" for clarity -- - Voucher sequence table for auto-generation of bilagsnumre -- Add voucher_number column to existing table ALTER TABLE journal_entry_draft_read_models ADD COLUMN IF NOT EXISTS voucher_number TEXT NOT NULL DEFAULT ''; -- Add attachment_ids column (JSON array of references) ALTER TABLE journal_entry_draft_read_models ADD COLUMN IF NOT EXISTS attachment_ids TEXT NOT NULL DEFAULT '[]'; -- Rename date column to document_date (Bilagsdato) for semantic clarity -- document_date = the date on the source document (e.g., invoice date) -- This is different from posting_date which is when it's booked in the ledger ALTER TABLE journal_entry_draft_read_models RENAME COLUMN date TO document_date; -- Create voucher number sequence table per company/fiscal year -- This ensures unique, sequential bilagsnumre as required by law CREATE TABLE IF NOT EXISTS voucher_number_sequences ( company_id TEXT NOT NULL, fiscal_year_id TEXT NOT NULL, last_number INT NOT NULL DEFAULT 0, prefix TEXT NOT NULL DEFAULT '', created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), PRIMARY KEY (company_id, fiscal_year_id) ); -- Index for efficient lookup CREATE INDEX IF NOT EXISTS idx_voucher_sequence_company ON voucher_number_sequences(company_id); -- Index for efficient queries by voucher number CREATE INDEX IF NOT EXISTS idx_journal_entry_draft_voucher ON journal_entry_draft_read_models(company_id, voucher_number); COMMENT ON TABLE voucher_number_sequences IS 'Sequence generator for bilagsnumre (voucher numbers) per company and fiscal year'; COMMENT ON COLUMN voucher_number_sequences.prefix IS 'Optional prefix for voucher numbers, e.g. "2025-" for year-based numbering'; COMMENT ON COLUMN journal_entry_draft_read_models.voucher_number IS 'Bilagsnummer - unique document number required by Bogføringsloven § 7, Stk. 4'; COMMENT ON COLUMN journal_entry_draft_read_models.attachment_ids IS 'JSON array of attachment IDs for document references required by Bogføringsloven § 6';