Files
accounted/supabase/migrations/20260418120000_allow_retroactive_first_fiscal_year.sql
T
MattssonandClaude Opus 4.7 8ed943198f fix: allow retroactive first fiscal year via SIE import (#265)
The enforce_period_start_day trigger and its sie-import pre-validation
rejected any non-first-of-month period_start whenever *any other* fiscal
period existed for the company. That blocked a real user flow: after
onboarding creates a default period (e.g. current year, day 1), importing
an SIE for an older förlängt första räkenskapsår (e.g. 2017-07-28 –
2018-12-31) failed with "Non-first fiscal period must start on the 1st
of a month".

Per BFL 3 kap., the chronologically first fiscal year is the one that
may be 6–18 months and start mid-month — which is a property of *when*
the period starts relative to others, not of insert order. The trigger
and pre-validation now allow mid-month start iff no existing period
starts earlier.

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-18 10:26:02 +02:00

39 lines
1.3 KiB
PL/PgSQL
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- Allow retroactive first fiscal year via SIE import.
--
-- The previous trigger (20260416120000) rejected any non-first-of-month
-- period_start when *any other* fiscal period existed for the company.
-- That blocked a common flow: user onboards and gets a default period
-- (e.g. the current year, starting on day 1), then imports an SIE file
-- covering an older, förlängt första räkenskapsår that starts mid-month
-- (e.g. 2017-07-28 – 2018-12-31).
--
-- Per BFL 3 kap., the forst-in-time (chronologically earliest) fiscal year
-- is the one that may be 6–18 months and start mid-month. That property is
-- about *when* the period starts relative to other periods, not about the
-- order rows were inserted. This migration changes the trigger to reflect
-- that: mid-month start is allowed iff no existing period starts earlier.
CREATE OR REPLACE FUNCTION public.enforce_first_of_month_for_subsequent_periods()
RETURNS trigger
LANGUAGE plpgsql
AS $$
BEGIN
IF EXTRACT(DAY FROM NEW.period_start) = 1 THEN
RETURN NEW;
END IF;
IF EXISTS (
SELECT 1 FROM public.fiscal_periods
WHERE company_id = NEW.company_id
AND id IS DISTINCT FROM NEW.id
AND period_start < NEW.period_start
) THEN
RAISE EXCEPTION 'Non-first fiscal period must start on the 1st of a month';
END IF;
RETURN NEW;
END;
$$;
NOTIFY pgrst, 'reload schema';