-- Migration v58: CME — Central de Material e Esterilização

-- Artigos/Instrumentais
CREATE TABLE IF NOT EXISTS cme_artigos (
    id INT AUTO_INCREMENT PRIMARY KEY,
    clinica_id INT NOT NULL DEFAULT 1,
    codigo VARCHAR(30) NOT NULL,
    nome VARCHAR(120) NOT NULL,
    descricao TEXT DEFAULT NULL,
    categoria ENUM('cirurgico','diagnostico','protecao','instrumental','bandeja','caixa','outro') NOT NULL DEFAULT 'outro',
    tipo_embalagem ENUM('grau_cirurgico','papel_crepom','tecido_nao_tecido','rigida','outro') DEFAULT NULL,
    metodo_esterilizacao ENUM('autoclave_vapor','oxido_etileno','plasma_peroxido','glutaraldeido','calor_seco','outro') DEFAULT NULL,
    tempo_validade_dias INT DEFAULT 180,
    ativo TINYINT(1) NOT NULL DEFAULT 1,
    usuario_id INT NOT NULL DEFAULT 0,
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
    updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    UNIQUE KEY uq_cme_artigo (clinica_id, codigo),
    INDEX idx_cme_artigos_clinica (clinica_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Ciclos de esterilização
CREATE TABLE IF NOT EXISTS cme_ciclos (
    id INT AUTO_INCREMENT PRIMARY KEY,
    clinica_id INT NOT NULL DEFAULT 1,
    numero VARCHAR(30) NOT NULL,
    equipamento VARCHAR(80) DEFAULT NULL,
    metodo ENUM('autoclave_vapor','oxido_etileno','plasma_peroxido','glutaraldeido','calor_seco','outro') NOT NULL DEFAULT 'autoclave_vapor',
    temperatura DECIMAL(5,2) DEFAULT NULL,
    pressao DECIMAL(5,2) DEFAULT NULL,
    tempo_minutos INT DEFAULT NULL,
    lote VARCHAR(30) DEFAULT NULL,
    indicador_quimico ENUM('aprovado','reprovado','pendente') DEFAULT 'pendente',
    indicador_biologico ENUM('aprovado','reprovado','pendente','nao_utilizado') DEFAULT 'nao_utilizado',
    status ENUM('em_andamento','concluido','reprovado','cancelado') NOT NULL DEFAULT 'em_andamento',
    observacoes TEXT DEFAULT NULL,
    responsavel_id INT DEFAULT NULL,
    data_inicio DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    data_fim DATETIME DEFAULT NULL,
    usuario_id INT NOT NULL DEFAULT 0,
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
    updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    UNIQUE KEY uq_cme_ciclo (clinica_id, numero),
    INDEX idx_cme_ciclos_clinica (clinica_id),
    INDEX idx_cme_ciclos_status (status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Itens de cada ciclo
CREATE TABLE IF NOT EXISTS cme_ciclo_itens (
    id INT AUTO_INCREMENT PRIMARY KEY,
    ciclo_id INT NOT NULL,
    artigo_id INT NOT NULL,
    quantidade INT NOT NULL DEFAULT 1,
    validade_ate DATE DEFAULT NULL,
    FOREIGN KEY (ciclo_id)  REFERENCES cme_ciclos(id)  ON DELETE CASCADE,
    FOREIGN KEY (artigo_id) REFERENCES cme_artigos(id) ON DELETE RESTRICT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Rastreabilidade: entregas/devoluções de material esterilizado
CREATE TABLE IF NOT EXISTS cme_rastreamentos (
    id INT AUTO_INCREMENT PRIMARY KEY,
    clinica_id INT NOT NULL DEFAULT 1,
    ciclo_id INT NOT NULL,
    artigo_id INT NOT NULL,
    tipo ENUM('entrega','devolucao','descarte') NOT NULL DEFAULT 'entrega',
    setor_destino VARCHAR(80) DEFAULT NULL,
    internacao_id INT DEFAULT NULL,
    responsavel_id INT DEFAULT NULL,
    observacoes TEXT DEFAULT NULL,
    data_movimentacao DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    usuario_id INT NOT NULL DEFAULT 0,
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (ciclo_id)  REFERENCES cme_ciclos(id)  ON DELETE RESTRICT,
    FOREIGN KEY (artigo_id) REFERENCES cme_artigos(id) ON DELETE RESTRICT,
    INDEX idx_cme_rastr_clinica (clinica_id),
    INDEX idx_cme_rastr_ciclo (ciclo_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Permissões
INSERT IGNORE INTO permissoes (nome, chave, descricao) VALUES
('Visualizar CME',             'cme_view',      'Visualizar módulo CME'),
('Artigos CME',                'cme_artigos',   'Gerenciar artigos e instrumentais'),
('Ciclos de Esterilização',    'cme_ciclos',    'Gerenciar ciclos de esterilização'),
('Rastreamento CME',           'cme_rastrear',  'Rastrear entrega/devolução de material'),
('Gerenciar CME',              'cme_manage',    'Gerenciamento completo do módulo CME');
