-- https://www.phpmyadmin.net/
--
-- Tempo de geração: 30-Mar-2026 às 11:31
-- Versão do servidor: 10.4.32-MariaDB
-- versão do PHP: 8.0.30

START TRANSACTION;



--
-- Banco de dados: `inventario`
--

-- --------------------------------------------------------

--
-- Estrutura da tabela `alertas`
--

CREATE TABLE `alertas` (
  `id` int(11) NOT NULL,
  `bem_id` int(11) NOT NULL,
  `tipo_alerta` enum('critico','expirado','prestes_expirar','alerta','leilao','manutencao') NOT NULL,
  `data_alerta` datetime DEFAULT current_timestamp(),
  `status` enum('nao_lido','lido','resolvido') DEFAULT 'nao_lido',
  `detalhes` text DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

-- --------------------------------------------------------

--
-- Estrutura da tabela `bens`
--

CREATE TABLE `bens` (
  `id` int(11) NOT NULL,
  `codigo` varchar(20) NOT NULL,
  `nome` varchar(255) NOT NULL,
  `categoria_id` int(11) NOT NULL,
  `departamento_id` int(11) NOT NULL,
  `quantidade` int(11) DEFAULT 1,
  `valor_compra` decimal(15,2) NOT NULL,
  `data_aquisicao` date NOT NULL,
  `vida_util_meses` int(11) NOT NULL,
  `data_expiracao` date NOT NULL,
  `depreciacao_percentual` decimal(5,2) DEFAULT 0.00,
  `valor_atual` decimal(15,2) NOT NULL,
  `estado` enum('bom','regular','mau','leilao','vendido') DEFAULT 'bom',
  `localizacao` varchar(255) DEFAULT NULL,
  `responsavel` varchar(100) DEFAULT NULL,
  `numero_serie` varchar(100) DEFAULT NULL,
  `foto` varchar(255) DEFAULT NULL,
  `documentos` varchar(255) DEFAULT NULL,
  `observacoes` text DEFAULT NULL,
  `criado_por` int(11) NOT NULL,
  `criado_em` datetime DEFAULT current_timestamp()
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

--
-- Acionadores `bens`
--
DELIMITER $$
CREATE TRIGGER `trg_bem_insert` BEFORE INSERT ON `bens` FOR EACH ROW BEGIN
    SET NEW.valor_atual = NEW.valor_compra;
END
$$
DELIMITER ;
DELIMITER $$
CREATE TRIGGER `trg_bem_update` AFTER UPDATE ON `bens` FOR EACH ROW BEGIN
    IF OLD.departamento_id != NEW.departamento_id THEN
        INSERT INTO movimentacao (bem_id, tipo, responsavel, local_anterior, local_atual, observacoes)
        VALUES (NEW.id, 'transferencia', 'Sistema', OLD.departamento_id, NEW.departamento_id, 'Transferência automática');
    END IF;
END
$$
DELIMITER ;

-- --------------------------------------------------------

--
-- Estrutura da tabela `categorias`
--

CREATE TABLE `categorias` (
  `id` int(11) NOT NULL,
  `nome` varchar(100) NOT NULL,
  `descricao` text DEFAULT NULL,
  `criado_em` datetime DEFAULT current_timestamp()
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

--
-- Extraindo dados da tabela `categorias`
--

INSERT INTO `categorias` (`id`, `nome`, `descricao`, `criado_em`) VALUES
(1, 'Equipamentos Informáticos', 'Computadores, servidores, periféricos', '2026-03-30 10:30:53'),
(2, 'Mobiliário', 'Mesas, cadeiras, armários', '2026-03-30 10:30:53'),
(3, 'Equipamentos de Escritório', 'Impressoras, scanners, projetores', '2026-03-30 10:30:53'),
(4, 'Veículos', 'Carros, motos, camiões', '2026-03-30 10:30:53'),
(5, 'Máquinas e Ferramentas', 'Equipamentos industriais e ferramentas', '2026-03-30 10:30:53'),
(6, 'Imóveis', 'Edifícios, terrenos, instalações', '2026-03-30 10:30:53');

-- --------------------------------------------------------

--
-- Estrutura da tabela `departamentos`
--

CREATE TABLE `departamentos` (
  `id` int(11) NOT NULL,
  `nome` varchar(100) NOT NULL,
  `descricao` text DEFAULT NULL,
  `responsavel` varchar(100) DEFAULT NULL,
  `criado_em` datetime DEFAULT current_timestamp()
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

--
-- Extraindo dados da tabela `departamentos`
--

INSERT INTO `departamentos` (`id`, `nome`, `descricao`, `responsavel`, `criado_em`) VALUES
(1, 'Administrativo', 'Gestão administrativa geral', 'Gerente Administrativo', '2026-03-30 10:30:53'),
(2, 'Financeiro', 'Contabilidade e finanças', 'Chefe Financeiro', '2026-03-30 10:30:53'),
(3, 'Recursos Humanos', 'Gestão de pessoal', 'Diretor RH', '2026-03-30 10:30:53'),
(4, 'TI', 'Tecnologia da Informação', 'CTO', '2026-03-30 10:30:53'),
(5, 'Operações', 'Operações principais', 'Diretor de Operações', '2026-03-30 10:30:53'),
(6, 'Manutenção', 'Manutenção e reparos', 'Chefe de Manutenção', '2026-03-30 10:30:53');

-- --------------------------------------------------------

--
-- Estrutura da tabela `depreciacao`
--

CREATE TABLE `depreciacao` (
  `id` int(11) NOT NULL,
  `bem_id` int(11) NOT NULL,
  `meses_usados` int(11) DEFAULT 0,
  `meses_restantes` int(11) DEFAULT 0,
  `desgaste_percentual` decimal(5,2) DEFAULT 0.00,
  `valor_residual` decimal(15,2) DEFAULT 0.00,
  `risco` enum('baixo','medio','alto','critico') DEFAULT 'baixo',
  `atualizado_em` datetime DEFAULT current_timestamp() ON UPDATE current_timestamp()
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

-- --------------------------------------------------------

--
-- Estrutura da tabela `leiloes`
--

CREATE TABLE `leiloes` (
  `id` int(11) NOT NULL,
  `bem_id` int(11) NOT NULL,
  `data_expiracao` date NOT NULL,
  `data_leilao` date DEFAULT NULL,
  `preco_base` decimal(15,2) NOT NULL,
  `status` enum('pendente','agendado','realizado','cancelado') DEFAULT 'pendente',
  `valor_final` decimal(15,2) DEFAULT NULL,
  `comprador` varchar(100) DEFAULT NULL,
  `observacoes` text DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

-- --------------------------------------------------------

--
-- Estrutura da tabela `logs`
--

CREATE TABLE `logs` (
  `id` int(11) NOT NULL,
  `usuario` varchar(100) NOT NULL,
  `acao` varchar(100) NOT NULL,
  `descricao` text DEFAULT NULL,
  `ip` varchar(45) DEFAULT NULL,
  `data_hora` datetime DEFAULT current_timestamp()
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

-- --------------------------------------------------------

--
-- Estrutura da tabela `movimentacao`
--

CREATE TABLE `movimentacao` (
  `id` int(11) NOT NULL,
  `bem_id` int(11) NOT NULL,
  `tipo` enum('entrada','saida','transferencia','manutencao','venda') NOT NULL,
  `responsavel` varchar(100) NOT NULL,
  `local_anterior` int(11) DEFAULT NULL,
  `local_atual` int(11) DEFAULT NULL,
  `data_hora` datetime DEFAULT current_timestamp(),
  `observacoes` text DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

-- --------------------------------------------------------

--
-- Estrutura da tabela `users`
--

CREATE TABLE `users` (
  `id` int(11) NOT NULL,
  `nome` varchar(100) NOT NULL,
  `email` varchar(100) NOT NULL,
  `senha` varchar(255) NOT NULL,
  `perfil` enum('administrador','gestor','utilizador') DEFAULT 'utilizador',
  `ultimo_acesso` datetime DEFAULT NULL,
  `ip_acesso` varchar(45) DEFAULT NULL,
  `criado_em` datetime DEFAULT current_timestamp()
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

--
-- Extraindo dados da tabela `users`
--

INSERT INTO `users` (`id`, `nome`, `email`, `senha`, `perfil`, `ultimo_acesso`, `ip_acesso`, `criado_em`) VALUES
(1, 'Administrador', 'admin@sistema.com', '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', 'administrador', NULL, NULL, '2026-03-30 10:30:53');

--
-- Índices para tabelas despejadas
--

--
-- Índices para tabela `alertas`
--
ALTER TABLE `alertas`
  ADD PRIMARY KEY (`id`),
  ADD KEY `bem_id` (`bem_id`),
  ADD KEY `idx_alertas_status` (`status`);

--
-- Índices para tabela `bens`
--
ALTER TABLE `bens`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `codigo` (`codigo`),
  ADD KEY `categoria_id` (`categoria_id`),
  ADD KEY `departamento_id` (`departamento_id`),
  ADD KEY `criado_por` (`criado_por`),
  ADD KEY `idx_bens_estado` (`estado`),
  ADD KEY `idx_bens_data_expiracao` (`data_expiracao`);

--
-- Índices para tabela `categorias`
--
ALTER TABLE `categorias`
  ADD PRIMARY KEY (`id`);

--
-- Índices para tabela `departamentos`
--
ALTER TABLE `departamentos`
  ADD PRIMARY KEY (`id`);

--
-- Índices para tabela `depreciacao`
--
ALTER TABLE `depreciacao`
  ADD PRIMARY KEY (`id`),
  ADD KEY `bem_id` (`bem_id`);

--
-- Índices para tabela `leiloes`
--
ALTER TABLE `leiloes`
  ADD PRIMARY KEY (`id`),
  ADD KEY `bem_id` (`bem_id`),
  ADD KEY `idx_leiloes_status` (`status`);

--
-- Índices para tabela `logs`
--
ALTER TABLE `logs`
  ADD PRIMARY KEY (`id`),
  ADD KEY `idx_logs_data` (`data_hora`);

--
-- Índices para tabela `movimentacao`
--
ALTER TABLE `movimentacao`
  ADD PRIMARY KEY (`id`),
  ADD KEY `bem_id` (`bem_id`),
  ADD KEY `local_anterior` (`local_anterior`),
  ADD KEY `local_atual` (`local_atual`),
  ADD KEY `idx_movimentacao_data` (`data_hora`);

--
-- Índices para tabela `users`
--
ALTER TABLE `users`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `email` (`email`);

--
-- AUTO_INCREMENT de tabelas despejadas
--

--
-- AUTO_INCREMENT de tabela `alertas`
--
ALTER TABLE `alertas`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de tabela `bens`
--
ALTER TABLE `bens`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de tabela `categorias`
--
ALTER TABLE `categorias`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=7;

--
-- AUTO_INCREMENT de tabela `departamentos`
--
ALTER TABLE `departamentos`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=7;

--
-- AUTO_INCREMENT de tabela `depreciacao`
--
ALTER TABLE `depreciacao`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de tabela `leiloes`
--
ALTER TABLE `leiloes`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de tabela `logs`
--
ALTER TABLE `logs`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de tabela `movimentacao`
--
ALTER TABLE `movimentacao`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de tabela `users`
--
ALTER TABLE `users`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=2;

--
-- Restrições para despejos de tabelas
--

--
-- Limitadores para a tabela `alertas`
--
ALTER TABLE `alertas`
  ADD CONSTRAINT `alertas_ibfk_1` FOREIGN KEY (`bem_id`) REFERENCES `bens` (`id`) ON DELETE CASCADE;

--
-- Limitadores para a tabela `bens`
--
ALTER TABLE `bens`
  ADD CONSTRAINT `bens_ibfk_1` FOREIGN KEY (`categoria_id`) REFERENCES `categorias` (`id`),
  ADD CONSTRAINT `bens_ibfk_2` FOREIGN KEY (`departamento_id`) REFERENCES `departamentos` (`id`),
  ADD CONSTRAINT `bens_ibfk_3` FOREIGN KEY (`criado_por`) REFERENCES `users` (`id`);

--
-- Limitadores para a tabela `depreciacao`
--
ALTER TABLE `depreciacao`
  ADD CONSTRAINT `depreciacao_ibfk_1` FOREIGN KEY (`bem_id`) REFERENCES `bens` (`id`) ON DELETE CASCADE;

--
-- Limitadores para a tabela `leiloes`
--
ALTER TABLE `leiloes`
  ADD CONSTRAINT `leiloes_ibfk_1` FOREIGN KEY (`bem_id`) REFERENCES `bens` (`id`) ON DELETE CASCADE;

--
-- Limitadores para a tabela `movimentacao`
--
ALTER TABLE `movimentacao`
  ADD CONSTRAINT `movimentacao_ibfk_1` FOREIGN KEY (`bem_id`) REFERENCES `bens` (`id`) ON DELETE CASCADE,
  ADD CONSTRAINT `movimentacao_ibfk_2` FOREIGN KEY (`local_anterior`) REFERENCES `departamentos` (`id`) ON DELETE SET NULL,
  ADD CONSTRAINT `movimentacao_ibfk_3` FOREIGN KEY (`local_atual`) REFERENCES `departamentos` (`id`) ON DELETE SET NULL;

DELIMITER $$
--
-- Eventos
--
CREATE DEFINER=`root`@`localhost` EVENT `evt_recalcular_depreciacao` ON SCHEDULE EVERY 1 DAY STARTS '2026-03-30 10:30:53' ON COMPLETION NOT PRESERVE ENABLE DO UPDATE depreciacao d
    JOIN bens b ON d.bem_id = b.id
    SET d.meses_usados = TIMESTAMPDIFF(MONTH, b.data_aquisicao, CURDATE()),
        d.desgaste_percentual = LEAST(100, (TIMESTAMPDIFF(MONTH, b.data_aquisicao, CURDATE()) / b.vida_util_meses) * 100),
        d.valor_residual = b.valor_compra * (1 - LEAST(100, (TIMESTAMPDIFF(MONTH, b.data_aquisicao, CURDATE()) / b.vida_util_meses) * 100) / 100),
        d.risco = CASE 
            WHEN (TIMESTAMPDIFF(MONTH, b.data_aquisicao, CURDATE()) / b.vida_util_meses) * 100 >= 85 THEN 'critico'
            WHEN (TIMESTAMPDIFF(MONTH, b.data_aquisicao, CURDATE()) / b.vida_util_meses) * 100 >= 70 THEN 'alto'
            WHEN (TIMESTAMPDIFF(MONTH, b.data_aquisicao, CURDATE()) / b.vida_util_meses) * 100 >= 50 THEN 'medio'
            ELSE 'baixo'
        END$$

DELIMITER ;
COMMIT;

