USE camara;

CREATE TABLE IF NOT EXISTS cat_receita (
  id INT AUTO_INCREMENT PRIMARY KEY,
  nome VARCHAR(120) NOT NULL,
  status TINYINT(1) DEFAULT 1
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE IF NOT EXISTS cat_despesa (
  id INT AUTO_INCREMENT PRIMARY KEY,
  nome VARCHAR(120) NOT NULL,
  status TINYINT(1) DEFAULT 1
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE IF NOT EXISTS receitas (
  id INT AUTO_INCREMENT PRIMARY KEY,
  data DATE NOT NULL,
  categoria_id INT NULL,
  subcategoria VARCHAR(120),
  descricao TEXT,
  fonte VARCHAR(120),
  valor DECIMAL(14,2) NOT NULL,
  documento VARCHAR(255),
  criado_em DATETIME DEFAULT CURRENT_TIMESTAMP,
  INDEX(data),
  CONSTRAINT fk_rec_cat FOREIGN KEY (categoria_id) REFERENCES cat_receita(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE IF NOT EXISTS despesas (
  id INT AUTO_INCREMENT PRIMARY KEY,
  data DATE NOT NULL,
  orgao VARCHAR(160),
  categoria_id INT NULL,
  descricao TEXT,
  favorecido VARCHAR(160),
  cnpj VARCHAR(20),
  valor_empenho DECIMAL(14,2) DEFAULT 0,
  valor_liquidado DECIMAL(14,2) DEFAULT 0,
  valor_pago DECIMAL(14,2) DEFAULT 0,
  documento VARCHAR(255),
  criado_em DATETIME DEFAULT CURRENT_TIMESTAMP,
  INDEX(data), INDEX(cnpj),
  CONSTRAINT fk_des_cat FOREIGN KEY (categoria_id) REFERENCES cat_despesa(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE IF NOT EXISTS licitacoes (
  id INT AUTO_INCREMENT PRIMARY KEY,
  modalidade VARCHAR(60) NOT NULL,
  numero VARCHAR(60) NOT NULL,
  objeto TEXT NOT NULL,
  data_abertura DATETIME NOT NULL,
  situacao ENUM('aberta','andamento','homologada','fracassada','revogada','suspensa','cancelada') DEFAULT 'andamento',
  edital_pdf VARCHAR(255),
  outros_anexos TEXT,
  link_sessao_publica VARCHAR(255),
  criado_em DATETIME DEFAULT CURRENT_TIMESTAMP,
  UNIQUE KEY unique_mod_num (modalidade, numero)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE IF NOT EXISTS contratos (
  id INT AUTO_INCREMENT PRIMARY KEY,
  numero VARCHAR(60) NOT NULL,
  processo VARCHAR(60),
  fornecedor VARCHAR(160) NOT NULL,
  cnpj VARCHAR(20),
  objeto TEXT NOT NULL,
  inicio DATE,
  fim DATE,
  valor_total DECIMAL(14,2) NOT NULL,
  pdf VARCHAR(255),
  criado_em DATETIME DEFAULT CURRENT_TIMESTAMP,
  UNIQUE KEY unique_numero (numero),
  INDEX(cnpj)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE IF NOT EXISTS servidores (
  id INT AUTO_INCREMENT PRIMARY KEY,
  nome VARCHAR(160) NOT NULL,
  cargo VARCHAR(120),
  lotacao VARCHAR(120),
  mes_referencia CHAR(7) NOT NULL COMMENT 'YYYY-MM',
  remuneracao_bruta DECIMAL(14,2) DEFAULT 0,
  descontos DECIMAL(14,2) DEFAULT 0,
  remuneracao_liquida DECIMAL(14,2) AS (remuneracao_bruta - descontos) STORED,
  folha_pdf VARCHAR(255),
  criado_em DATETIME DEFAULT CURRENT_TIMESTAMP,
  INDEX(mes_referencia), INDEX(cargo)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE IF NOT EXISTS diarias (
  id INT AUTO_INCREMENT PRIMARY KEY,
  beneficiario VARCHAR(160) NOT NULL,
  cargo VARCHAR(120),
  destino VARCHAR(160),
  motivo TEXT,
  data_inicio DATE,
  data_fim DATE,
  valor_total DECIMAL(14,2) NOT NULL,
  portaria_pdf VARCHAR(255),
  criado_em DATETIME DEFAULT CURRENT_TIMESTAMP,
  INDEX(data_inicio), INDEX(data_fim)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE IF NOT EXISTS orcamento_receita (
  id INT AUTO_INCREMENT PRIMARY KEY,
  mes_referencia CHAR(7) NOT NULL,
  valor_previsto DECIMAL(14,2) DEFAULT 0,
  valor_arrecadado DECIMAL(14,2) DEFAULT 0,
  UNIQUE KEY (mes_referencia)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE IF NOT EXISTS orcamento_despesa (
  id INT AUTO_INCREMENT PRIMARY KEY,
  mes_referencia CHAR(7) NOT NULL,
  valor_fixado DECIMAL(14,2) DEFAULT 0,
  valor_empenhado DECIMAL(14,2) DEFAULT 0,
  valor_liquidado DECIMAL(14,2) DEFAULT 0,
  valor_pago DECIMAL(14,2) DEFAULT 0,
  UNIQUE KEY (mes_referencia)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE IF NOT EXISTS publicacoes_oficiais (
  id INT AUTO_INCREMENT PRIMARY KEY,
  tipo ENUM('diario','ato','lrf') DEFAULT 'diario',
  titulo VARCHAR(255) NOT NULL,
  data DATE NOT NULL,
  pdf VARCHAR(255) NOT NULL,
  criado_em DATETIME DEFAULT CURRENT_TIMESTAMP,
  INDEX(data), INDEX(tipo)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE IF NOT EXISTS legislacoes (
  id INT AUTO_INCREMENT PRIMARY KEY,
  tipo VARCHAR(40) NOT NULL,
  numero VARCHAR(40) NOT NULL,
  ano SMALLINT NOT NULL,
  ementa TEXT NOT NULL,
  pdf VARCHAR(255),
  publicado_em DATE,
  criado_em DATETIME DEFAULT CURRENT_TIMESTAMP,
  UNIQUE KEY (tipo, numero, ano)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE IF NOT EXISTS verbas_indenizadoras (
  id INT AUTO_INCREMENT PRIMARY KEY,
  vereador_id INT NOT NULL,
  mes_referencia CHAR(7) NOT NULL,
  descricao TEXT,
  valor DECIMAL(14,2) NOT NULL,
  nota_pdf VARCHAR(255),
  criado_em DATETIME DEFAULT CURRENT_TIMESTAMP,
  INDEX(vereador_id), INDEX(mes_referencia)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE IF NOT EXISTS planejamento (
  id INT AUTO_INCREMENT PRIMARY KEY,
  tipo ENUM('LDO','LOA','PPA','QDD') NOT NULL,
  numero VARCHAR(60) NOT NULL,
  ano SMALLINT NOT NULL,
  titulo VARCHAR(255) NOT NULL,
  ementa TEXT,
  pdf VARCHAR(255) NOT NULL,
  publicado_em DATE,
  criado_em DATETIME DEFAULT CURRENT_TIMESTAMP,
  UNIQUE KEY uk_plan (tipo, numero, ano),
  INDEX(ano), INDEX(tipo)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
