-- Migration 005 — CREATE agente_apuracao_periodos + agente_apuracao_itens
-- Snapshot por agente×competencia + breakdown linha-a-linha por titulo pago
-- Espelha apuracao_periodos + apuracao_detalhes do ApuraComercial
-- Card: AP#1

CREATE TABLE IF NOT EXISTS agente_apuracao_periodos (
  id INT PRIMARY KEY AUTO_INCREMENT,
  cod_Representante INT NOT NULL COMMENT 'O agente (idNatureza=3)',
  competencia CHAR(7) NOT NULL COMMENT 'YYYY-MM',
  modalidade_snap ENUM('pct_venda','pct_comissao','tabela_preco') NOT NULL,
  pct_padrao_snap DECIMAL(8,4) NULL,
  total_titulos_pagos DECIMAL(14,2) NOT NULL DEFAULT 0,
  total_comissao DECIMAL(14,2) NOT NULL DEFAULT 0,
  total_disponivel DECIMAL(14,2) NOT NULL DEFAULT 0,
  total_em_lote DECIMAL(14,2) NOT NULL DEFAULT 0,
  total_liquidado DECIMAL(14,2) NOT NULL DEFAULT 0,
  status_ciclo ENUM('prevista','apurada','fechada') NOT NULL DEFAULT 'prevista',
  apurada_at DATETIME NULL,
  apurada_by INT NULL,
  fechada_at DATETIME NULL,
  fechada_by INT NULL,
  reaberta_at DATETIME NULL,
  reaberta_by INT NULL,
  dirty TINYINT(1) NOT NULL DEFAULT 0,
  dirty_em DATETIME NULL,
  dirty_motivo VARCHAR(200) NULL,
  situacao TINYINT(1) NOT NULL DEFAULT 1,
  UNIQUE KEY uk_apur_agente_competencia (cod_Representante, competencia),
  INDEX idx_apur_status (status_ciclo, dirty),
  INDEX idx_apur_competencia (competencia)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS agente_apuracao_itens (
  id INT PRIMARY KEY AUTO_INCREMENT,
  apuracao_id INT NOT NULL,
  cod_Pedido_snap INT NOT NULL,
  id_titulo_snap INT NOT NULL COMMENT 'tbl_Boleto.id ou tbl_Faturamento.id',
  fonte_titulo ENUM('boleto','faturamento') NOT NULL,
  cod_Cliente INT NOT NULL,
  data_pag DATE NOT NULL,
  valor_base DECIMAL(14,2) NOT NULL,
  pct_aplicado DECIMAL(8,4) NULL,
  comissao DECIMAL(14,2) NOT NULL,
  regra_aplicada VARCHAR(160) NOT NULL COMMENT 'Texto humano-legivel da regra',
  status_item ENUM('disponivel','em_lote','liquidado','estornado') NOT NULL DEFAULT 'disponivel',
  lote_id INT NULL,
  situacao TINYINT(1) NOT NULL DEFAULT 1,
  UNIQUE KEY uk_apur_titulo (id_titulo_snap, fonte_titulo) COMMENT 'idempotencia: 1 titulo so pode estar em 1 apuracao',
  INDEX idx_apur_item_apur (apuracao_id, status_item),
  INDEX idx_apur_item_lote (lote_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
