32 lines
1.5 KiB
SQL
32 lines
1.5 KiB
SQL
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;
|