-- ============================================================ -- Migration 016: Arvore de decisao por especialidade para RH -- Tabelas: -- area_routing_keywords -- ============================================================ CREATE TABLE IF NOT EXISTS area_routing_keywords ( id SERIAL PRIMARY KEY, area_id INTEGER NOT NULL REFERENCES areas(id) ON DELETE CASCADE, keyword VARCHAR(160) NOT NULL, active BOOLEAN NOT NULL DEFAULT TRUE, created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP, CONSTRAINT uq_area_routing_keyword UNIQUE (area_id, keyword) ); CREATE INDEX IF NOT EXISTS idx_area_routing_keywords_area ON area_routing_keywords (area_id, active); CREATE INDEX IF NOT EXISTS idx_area_routing_keywords_keyword ON area_routing_keywords (keyword); INSERT INTO areas (nome, descricao) VALUES ('Benefícios', 'Duvidas de RH sobre beneficios, convenios, vale transporte e vale refeicao'), ('Ponto', 'Ajustes de ponto, banco de horas, atrasos e jornada'), ('Holerite', 'Holerite, folha de pagamento, descontos e demonstrativos'), ('Férias', 'Ferias, abono, programacao e saldo de descanso'), ('Recrutamento', 'Vagas internas, candidatura, entrevista e processo seletivo') ON CONFLICT (nome) DO UPDATE SET descricao = EXCLUDED.descricao, ativo = TRUE, updated_at = NOW(); INSERT INTO area_routing_keywords (area_id, keyword) SELECT a.id, keyword FROM areas a JOIN ( VALUES ('Benefícios', 'beneficio'), ('Benefícios', 'beneficios'), ('Benefícios', 'vale refeicao'), ('Benefícios', 'vale alimentacao'), ('Benefícios', 'vale transporte'), ('Benefícios', 'convenio'), ('Benefícios', 'plano de saude'), ('Benefícios', 'odonto'), ('Ponto', 'ponto'), ('Ponto', 'espelho de ponto'), ('Ponto', 'banco de horas'), ('Ponto', 'atraso'), ('Ponto', 'jornada'), ('Ponto', 'batida'), ('Ponto', 'marcacao'), ('Holerite', 'holerite'), ('Holerite', 'folha'), ('Holerite', 'pagamento'), ('Holerite', 'salario'), ('Holerite', 'desconto'), ('Holerite', 'demonstrativo'), ('Férias', 'ferias'), ('Férias', 'abono'), ('Férias', 'descanso'), ('Férias', 'saldo de ferias'), ('Férias', 'programar ferias'), ('Recrutamento', 'vaga'), ('Recrutamento', 'vagas'), ('Recrutamento', 'processo seletivo'), ('Recrutamento', 'entrevista'), ('Recrutamento', 'curriculo'), ('Recrutamento', 'candidatura') ) AS seed(area_nome, keyword) ON seed.area_nome = a.nome ON CONFLICT (area_id, keyword) DO UPDATE SET active = TRUE, updated_at = CURRENT_TIMESTAMP; INSERT INTO whatsapp_templates (name, content, area_id, status, requested_by_role, admin_approved_at, meta_submitted_at, meta_approved_at, updated_at) SELECT template.name, template.content, a.id, 'approved', 'admin', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP FROM areas a JOIN ( VALUES ('rh_abertura_beneficios', 'Ola, {nome}. Aqui e o Atendimento Sothis RH. Recebemos sua solicitacao sobre beneficios e vamos te apoiar por aqui.'), ('rh_abertura_ponto', 'Ola, {nome}. Aqui e o Atendimento Sothis RH. Vamos te ajudar com sua solicitacao sobre ponto, jornada ou banco de horas.'), ('rh_abertura_holerite', 'Ola, {nome}. Aqui e o Atendimento Sothis RH. Vamos te ajudar com holerite, folha ou demonstrativo de pagamento.'), ('rh_abertura_ferias', 'Ola, {nome}. Aqui e o Atendimento Sothis RH. Vamos te apoiar com sua solicitacao sobre ferias.'), ('rh_abertura_recrutamento', 'Ola, {nome}. Aqui e o Atendimento Sothis RH. Vamos te orientar sobre vagas, candidatura ou processo seletivo.') ) AS template(name, content) ON template.name LIKE CASE a.nome WHEN 'Benefícios' THEN '%beneficios' WHEN 'Ponto' THEN '%ponto' WHEN 'Holerite' THEN '%holerite' WHEN 'Férias' THEN '%ferias' WHEN 'Recrutamento' THEN '%recrutamento' END ON CONFLICT (name) DO UPDATE SET content = EXCLUDED.content, area_id = EXCLUDED.area_id, status = 'approved', meta_approved_at = CURRENT_TIMESTAMP, updated_at = CURRENT_TIMESTAMP;