CREATE TABLE skills_edu.skill_details ( id uuid PRIMARY KEY REFERENCES public.skills(id) ON DELETE RESTRICT, name_en varchar(255), description_pt text, description_en text, category varchar(30) NOT NULL CHECK (category IN ('technical','transversal','digital','management','language','other')), skill_type varchar(30) NOT NULL DEFAULT 'competency', default_level varchar(30), source_name varchar(255), source_version varchar(100), status varchar(20) NOT NULL DEFAULT 'active' CHECK (status IN ('draft','active','inactive','archived')), created_by bigint, updated_by bigint, created_at timestamptz NOT NULL DEFAULT now(), updated_at timestamptz NOT NULL DEFAULT now(), deleted_at timestamptz ); CREATE TABLE skills_edu.occupation_details ( id uuid PRIMARY KEY REFERENCES public.occupations(id) ON DELETE RESTRICT, name_en varchar(255), description_pt text, description_en text, occupational_family varchar(150), sector_master_id bigint, qualification_level varchar(80), minimum_experience_months integer CHECK (minimum_experience_months IS NULL OR minimum_experience_months >= 0), status varchar(20) NOT NULL DEFAULT 'active' CHECK (status IN ('draft','active','inactive','archived')), created_by bigint, updated_by bigint, created_at timestamptz NOT NULL DEFAULT now(), updated_at timestamptz NOT NULL DEFAULT now(), deleted_at timestamptz ); CREATE TABLE skills_edu.occupation_skills ( occupation_id uuid NOT NULL REFERENCES public.occupations(id) ON DELETE CASCADE, skill_id uuid NOT NULL REFERENCES public.skills(id) ON DELETE RESTRICT, requirement_type varchar(20) NOT NULL DEFAULT 'required' CHECK (requirement_type IN ('required','desired')), minimum_level varchar(30), weight numeric(5,2) CHECK (weight IS NULL OR weight BETWEEN 0 AND 100), approved_at timestamptz, approved_by bigint, created_at timestamptz NOT NULL DEFAULT now(), PRIMARY KEY (occupation_id, skill_id, requirement_type) ); CREATE INDEX idx_skills_category_status ON skills_edu.skill_details(category,status) WHERE deleted_at IS NULL; CREATE INDEX idx_occupations_sector_status ON skills_edu.occupation_details(sector_master_id,status) WHERE deleted_at IS NULL; CREATE TRIGGER trg_skills_updated_at BEFORE UPDATE ON skills_edu.skill_details FOR EACH ROW EXECUTE FUNCTION skills_edu.set_updated_at(); CREATE TRIGGER trg_occupations_updated_at BEFORE UPDATE ON skills_edu.occupation_details FOR EACH ROW EXECUTE FUNCTION skills_edu.set_updated_at(); ALTER TABLE skills_edu.skill_details ADD FOREIGN KEY (created_by) REFERENCES public.users(id) ON DELETE RESTRICT; ALTER TABLE skills_edu.skill_details ADD FOREIGN KEY (updated_by) REFERENCES public.users(id) ON DELETE RESTRICT; ALTER TABLE skills_edu.occupation_details ADD FOREIGN KEY (created_by) REFERENCES public.users(id) ON DELETE RESTRICT; ALTER TABLE skills_edu.occupation_details ADD FOREIGN KEY (updated_by) REFERENCES public.users(id) ON DELETE RESTRICT; ALTER TABLE skills_edu.occupation_details ADD FOREIGN KEY (sector_master_id) REFERENCES public.sectors(id) ON DELETE RESTRICT; ALTER TABLE skills_edu.occupation_skills ADD FOREIGN KEY (approved_by) REFERENCES public.users(id) ON DELETE RESTRICT;