omnichannel-deploy/database/migrations/016_hr_decision_tree_keywords.sql
Rafael Lopes e9e214195a FEAT: documenta regras do produto e adiciona migrations de suporte
- documenta estado atual, regras de negócio e próximos passos do Omnichannel Sothis
- adiciona migrations para triagem RH, flow builder, auditoria, conteúdos da IA e categoria de templates
- prepara estrutura de banco para fluxo configurável do bot, encerramento automático e templates categorizados
2026-05-26 09:08:53 -03:00

100 lines
4.1 KiB
SQL

-- ============================================================
-- 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;