CREATE TABLE staff_professions ( id VARCHAR(26) PRIMARY KEY CHECK (id ~ '^[0-9A-HJKMNP-TV-Z]{26}$'), tenant_id VARCHAR(26) NOT NULL CHECK (tenant_id ~ '^[0-9A-HJKMNP-TV-Z]{26}$'), code VARCHAR(80) NOT NULL, name VARCHAR(160) NOT NULL, status VARCHAR(20) NOT NULL DEFAULT 'active' CHECK (status IN ('active', 'archived')), created_at TIMESTAMPTZ NOT NULL DEFAULT now(), updated_at TIMESTAMPTZ NOT NULL DEFAULT now(), UNIQUE (tenant_id, id), UNIQUE (tenant_id, code), UNIQUE (tenant_id, name) ); ALTER TABLE staff_professions ENABLE ROW LEVEL SECURITY; ALTER TABLE staff_professions FORCE ROW LEVEL SECURITY; CREATE POLICY staff_professions_tenant_isolation ON staff_professions USING (tenant_id = current_setting('app.tenant_id', true)) WITH CHECK (tenant_id = current_setting('app.tenant_id', true)); ALTER TABLE staff_employees ADD COLUMN profession_id VARCHAR(26); ALTER TABLE staff_employees ADD CONSTRAINT staff_employees_profession_fk FOREIGN KEY (tenant_id, profession_id) REFERENCES staff_professions (tenant_id, id); CREATE INDEX staff_employees_profession_idx ON staff_employees (tenant_id, profession_id); CREATE UNIQUE INDEX staff_employees_external_ref_idx ON staff_employees (tenant_id, external_ref) WHERE external_ref IS NOT NULL; CREATE UNIQUE INDEX staff_pay_assignments_effective_version_idx ON staff_pay_assignments (tenant_id, employee_id, COALESCE(org_unit_id, ''), effective_from); GRANT SELECT, INSERT, UPDATE, DELETE ON staff_professions TO krona_staff_app;