-- ============================================================
-- PECNUVEM Copilot IA V15 — Script de Banco de Dados
-- Assistente Clínico para APS, e-SUS PEC e Faturamento SUS
-- ============================================================

CREATE DATABASE IF NOT EXISTS pecnuvem_copilot
    CHARACTER SET utf8mb4
    COLLATE utf8mb4_unicode_ci;

USE pecnuvem_copilot;

-- ─── Logs do Copilot ──────────────────────────────────────────────────────────
CREATE TABLE IF NOT EXISTS copilot_logs (
    id          INT AUTO_INCREMENT PRIMARY KEY,
    perfil      VARCHAR(80),
    pergunta    TEXT,
    contexto    MEDIUMTEXT,
    resposta    MEDIUMTEXT,
    url         TEXT,
    modo        VARCHAR(80),
    soap_score  TINYINT UNSIGNED DEFAULT 0,
    aps_score   TINYINT UNSIGNED DEFAULT 0,
    criado_em   DATETIME DEFAULT CURRENT_TIMESTAMP,
    INDEX idx_criado (criado_em),
    INDEX idx_perfil (perfil),
    INDEX idx_modo   (modo)
);

-- ─── Oportunidades APS (Indicadores C1-C7) ────────────────────────────────────
CREATE TABLE IF NOT EXISTS aps_oportunidades (
    id              INT AUTO_INCREMENT PRIMARY KEY,
    co_cidadao      VARCHAR(100),
    nome_cidadao    VARCHAR(255),
    equipe          VARCHAR(255),
    unidade         VARCHAR(255),
    indicador       VARCHAR(100) COMMENT 'C1-Pré-natal, C2-HAS, C3-DM, C4-Puericultura, C5-SM, C6-Prevenção, C7-ICSAB',
    prioridade      VARCHAR(50)  DEFAULT 'Média',
    valor_estimado  DECIMAL(10,2) DEFAULT 0,
    descricao       TEXT,
    status          VARCHAR(50)  DEFAULT 'Aberta',
    atualizado_em   TIMESTAMP    DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    UNIQUE KEY uk_cid_ind (co_cidadao, indicador),
    INDEX idx_indicador (indicador),
    INDEX idx_status    (status),
    INDEX idx_equipe    (equipe(100))
);

-- ─── Resumo do Gestor ─────────────────────────────────────────────────────────
CREATE TABLE IF NOT EXISTS ia_resumo_gestor (
    id                  INT AUTO_INCREMENT PRIMARY KEY,
    data_ref            DATE UNIQUE,
    total_atendimentos  INT          DEFAULT 0,
    total_soap_fraco    INT          DEFAULT 0,
    total_sem_cid       INT          DEFAULT 0,
    total_sem_ciap      INT          DEFAULT 0,
    total_risco_aps     INT          DEFAULT 0,
    valor_oportunidade  DECIMAL(10,2) DEFAULT 0,
    resumo              LONGTEXT,
    criado_em           TIMESTAMP    DEFAULT CURRENT_TIMESTAMP
);

-- ─── Oportunidades de Faturamento ─────────────────────────────────────────────
CREATE TABLE IF NOT EXISTS faturamento_oportunidades (
    id                     INT AUTO_INCREMENT PRIMARY KEY,
    origem                 VARCHAR(100)  DEFAULT 'IA',
    co_atendimento         VARCHAR(100),
    co_cidadao             VARCHAR(100),
    nome_cidadao           VARCHAR(255),
    unidade                VARCHAR(255),
    equipe                 VARCHAR(255),
    profissional           VARCHAR(255),
    cbo                    VARCHAR(255),
    procedimento           VARCHAR(50),
    descricao_procedimento VARCHAR(255),
    ciap                   VARCHAR(255),
    cid                    VARCHAR(255),
    tipo_alerta            VARCHAR(100),
    prioridade             VARCHAR(50),
    valor_estimado         DECIMAL(10,2) DEFAULT 0,
    descricao              TEXT,
    status                 VARCHAR(50)   DEFAULT 'Aberta',
    data_ref               DATE,
    criado_em              TIMESTAMP     DEFAULT CURRENT_TIMESTAMP,
    INDEX idx_data_ref  (data_ref),
    INDEX idx_tipo      (tipo_alerta),
    INDEX idx_status    (status)
);

-- ─── Parâmetros de Faturamento ────────────────────────────────────────────────
CREATE TABLE IF NOT EXISTS faturamento_parametros (
    id              INT AUTO_INCREMENT PRIMARY KEY,
    procedimento    VARCHAR(50)   UNIQUE,
    descricao       VARCHAR(255),
    cbo_compativel  VARCHAR(255)  COMMENT 'Prefixos CBO separados por vírgula',
    valor_estimado  DECIMAL(10,2),
    ativo           TINYINT       DEFAULT 1
);

INSERT IGNORE INTO faturamento_parametros (procedimento, descricao, cbo_compativel, valor_estimado, ativo) VALUES
('0301010072', 'Consulta médica em atenção primária',          '225',     10.00, 1),
('0301010080', 'Consulta de enfermagem em atenção primária',   '223',      7.00, 1),
('0301010099', 'Consulta de odontologia em atenção primária',  '322',      8.00, 1),
('0301010102', 'Visita domiciliar por ACS',                    '515',      3.00, 1),
('0301100039', 'Curativo simples',                             '223,225',  5.00, 1),
('0205020097', 'Eletrocardiograma',                            '225',      8.00, 1),
('0202010503', 'Coleta de material para exame laboratorial',   '223,225',  3.00, 1),
('0214010058', 'Nebulização/inalação',                         '223,225',  4.00, 1),
('0301100080', 'Sutura de pequeno ferimento',                  '225',     10.00, 1),
('0202050025', 'Glicemia capilar',                             '223,225',  2.00, 1);

-- ─── Auditoria LGPD ───────────────────────────────────────────────────────────
CREATE TABLE IF NOT EXISTS lgpd_auditoria (
    id            INT AUTO_INCREMENT PRIMARY KEY,
    perfil        VARCHAR(80),
    acao          VARCHAR(100),
    contexto_hash VARCHAR(64),
    criado_em     DATETIME DEFAULT CURRENT_TIMESTAMP,
    INDEX idx_criado (criado_em)
);

-- ─── Sessões de Chat (histórico por profissional) ─────────────────────────────
CREATE TABLE IF NOT EXISTS chat_sessoes (
    id          INT AUTO_INCREMENT PRIMARY KEY,
    sessao_id   VARCHAR(64) UNIQUE,
    perfil      VARCHAR(80),
    mensagens   MEDIUMTEXT COMMENT 'JSON array de mensagens',
    criado_em   DATETIME DEFAULT CURRENT_TIMESTAMP,
    atualizado_em DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    INDEX idx_sessao (sessao_id)
);
