-- Script de Criação do Banco de Dados
-- Sistema: COMPANY - Gestão Financeira
-- Autor: Company Comunicação

START TRANSACTION;

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

--
-- Estrutura da tabela `contas_bancarias`
--
CREATE TABLE `contas_bancarias` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `usuario_id` int(11) NOT NULL,
  `nome_conta` varchar(100) NOT NULL,
  `tipo_conta` enum('PF','PJ') NOT NULL DEFAULT 'PF',
  `banco` varchar(100) DEFAULT NULL,
  `agencia` varchar(20) DEFAULT NULL,
  `conta` varchar(20) DEFAULT NULL,
  `saldo_inicial` decimal(15,2) DEFAULT '0.00',
  `data_criacao` datetime DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `idx_usuario_tipo` (`usuario_id`, `tipo_conta`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

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

--
-- Estrutura da tabela `categorias`
--
CREATE TABLE `categorias` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `usuario_id` int(11) NOT NULL,
  `nome` varchar(100) NOT NULL,
  `tipo` enum('receita','despesa') NOT NULL,
  PRIMARY KEY (`id`),
  KEY `idx_usuario_tipo` (`usuario_id`, `tipo`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

--
-- Inserindo categorias padrão
--
INSERT INTO `categorias` (`usuario_id`, `nome`, `tipo`) VALUES
(1, 'Vendas', 'receita'),
(1, 'Serviços', 'receita'),
(1, 'Rendimentos', 'receita'),
(1, 'Alimentação', 'despesa'),
(1, 'Transporte', 'despesa'),
(1, 'Moradia', 'despesa'),
(1, 'Saúde', 'despesa'),
(1, 'Educação', 'despesa'),
(1, 'Lazer', 'despesa'),
(1, 'Impostos', 'despesa'),
(1, 'Taxas Bancárias', 'despesa'),
(1, 'Outros', 'despesa');

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

--
-- Estrutura da tabela `lancamentos`
--
CREATE TABLE `lancamentos` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `usuario_id` int(11) NOT NULL,
  `conta_id` int(11) NOT NULL,
  `categoria_id` int(11) NOT NULL,
  `tipo` enum('receita','despesa') NOT NULL,
  `valor` decimal(15,2) NOT NULL,
  `data_lancamento` date NOT NULL,
  `descricao` varchar(255) NOT NULL,
  `observacao` text DEFAULT NULL,
  `id_transacao_ofx` varchar(100) DEFAULT NULL,
  `data_criacao` datetime DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `idx_transacao_ofx` (`id_transacao_ofx`),
  KEY `idx_conta_data` (`conta_id`, `data_lancamento`),
  KEY `idx_usuario_data` (`usuario_id`, `data_lancamento`),
  KEY `idx_tipo_data` (`tipo`, `data_lancamento`),
  KEY `idx_categoria` (`categoria_id`),
  CONSTRAINT `fk_lancamento_conta` FOREIGN KEY (`conta_id`) REFERENCES `contas_bancarias` (`id`) ON DELETE CASCADE,
  CONSTRAINT `fk_lancamento_categoria` FOREIGN KEY (`categoria_id`) REFERENCES `categorias` (`id`) ON DELETE RESTRICT,
  CONSTRAINT `fk_lancamento_usuario` FOREIGN KEY (`usuario_id`) REFERENCES `usuarios` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

COMMIT;
