Files
accounted/supabase/migrations/20260513160559_salary_semesterersattning.sql
Mattsson 6c54f80a93 Bug/agi vacation submission (#468)
* feat(vacation): add semesterersättning option for direct vacation compensation

* feat(vacation): enhance vacation rule tests for accurate salary calculations

* feat(vacation): add semesterersättning rule for direct vacation compensation

* feat(vacation): update vacation rule handling and add calculateVacationAccrual tests
2026-05-13 19:15:31 +02:00

40 lines
2.1 KiB
SQL

-- =============================================================================
-- Salary: semesterersättning (vacation compensation paid out directly)
-- =============================================================================
-- Adds a fourth vacation_rule mode: instead of accruing semesterlöneskuld
-- (BAS 2920), the employer pays 12% (or 14.4% for 30+ days) on top of every
-- paycheck as semesterersättning. Common for hourly/short-term workers where
-- tracking vacation days is overkill.
--
-- Also adds 'semesterersattning' to salary_line_items.item_type so the engine
-- can emit a derived line item that books to BAS 7285 Semesterlöner.
--
-- vacation_rule modes:
-- procentregeln — 12%/14.4% accrued to 2920 (Semesterlagen 26§)
-- sammaloneregeln — semestertillägg accrued to 2920 (Semesterlagen 16a§)
-- none — no accrual; vacation cost assumed embedded in monthly salary
-- semesterersattning — 12%/14.4% paid out each cycle to 7285 (no accrual)
ALTER TABLE public.employees DROP CONSTRAINT IF EXISTS employees_vacation_rule_check;
ALTER TABLE public.employees ADD CONSTRAINT employees_vacation_rule_check
CHECK (vacation_rule IN ('procentregeln', 'sammaloneregeln', 'none', 'semesterersattning'));
ALTER TABLE public.salary_line_items DROP CONSTRAINT IF EXISTS salary_line_items_item_type_check;
ALTER TABLE public.salary_line_items ADD CONSTRAINT salary_line_items_item_type_check
CHECK (item_type IN (
'monthly_salary', 'hourly_salary', 'overtime', 'bonus', 'commission',
'gross_deduction_pension', 'gross_deduction_other',
'benefit_car', 'benefit_housing', 'benefit_meals', 'benefit_wellness',
'benefit_bike', 'benefit_other',
'sick_karens', 'sick_day2_14', 'sick_day15_plus',
'vab', 'parental_leave', 'vacation', 'semesterersattning',
'traktamente_taxfree', 'traktamente_taxable',
'mileage_taxfree', 'mileage_taxable',
'net_deduction_advance', 'net_deduction_union', 'net_deduction_benefit_payment',
'net_deduction_other',
'correction', 'other'
));
NOTIFY pgrst, 'reload schema';