-- SPED Completo - Fiscal, Contribuições e Contábil

-- ============================================
-- ARQUIVOS SPED GERADOS
-- ============================================

CREATE TABLE IF NOT EXISTS sped_arquivos (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    tenant_id VARCHAR(100) NOT NULL,
    
    -- Tipo de SPED
    tipo ENUM('fiscal', 'contribuicoes', 'contabil') NOT NULL,
    
    -- Período
    ano INT NOT NULL,
    mes INT NOT NULL,
    
    -- Dados do arquivo
    nome_arquivo VARCHAR(255) NOT NULL,
    caminho_arquivo VARCHAR(500) NOT NULL,
    tamanho_bytes BIGINT DEFAULT 0,
    
    -- Status
    status ENUM('gerado', 'validado', 'enviado', 'aceito', 'rejeitado', 'erro') DEFAULT 'gerado',
    
    -- Validação
    validado BOOLEAN DEFAULT FALSE,
    data_validacao DATETIME NULL,
    erros_validacao TEXT NULL, -- JSON com erros
    
    -- Envio
    data_envio DATETIME NULL,
    protocolo_envio VARCHAR(100) NULL,
    retorno_envio TEXT NULL, -- JSON com retorno
    
    -- Metadados
    versao_layout VARCHAR(10) DEFAULT '017',
    perfil VARCHAR(1) DEFAULT 'A',
    created_by INT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    
    INDEX idx_tenant (tenant_id),
    INDEX idx_tipo (tipo),
    INDEX idx_periodo (ano, mes),
    INDEX idx_status (status),
    INDEX idx_data_envio (data_envio)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ============================================
-- CONFIGURAÇÕES SPED
-- ============================================

CREATE TABLE IF NOT EXISTS sped_config (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    tenant_id VARCHAR(100) NOT NULL,
    
    -- Configurações gerais
    versao_layout VARCHAR(10) DEFAULT '017',
    perfil VARCHAR(1) DEFAULT 'A',
    ind_ativ INT DEFAULT 1,
    cod_fin INT DEFAULT 0,
    
    -- Automação
    geracao_automatica BOOLEAN DEFAULT FALSE,
    dia_geracao INT DEFAULT 1, -- Dia do mês para gerar
    validacao_automatica BOOLEAN DEFAULT TRUE,
    envio_automatico BOOLEAN DEFAULT FALSE,
    
    -- Notificações
    notificar_geracao BOOLEAN DEFAULT TRUE,
    notificar_validacao BOOLEAN DEFAULT TRUE,
    notificar_envio BOOLEAN DEFAULT TRUE,
    email_notificacao VARCHAR(255) NULL,
    
    -- Metadados
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    
    UNIQUE KEY uk_tenant (tenant_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ============================================
-- LOG DE EXECUÇÕES
-- ============================================

CREATE TABLE IF NOT EXISTS sped_logs (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    tenant_id VARCHAR(100) NOT NULL,
    arquivo_id BIGINT UNSIGNED NULL,
    
    -- Tipo de operação
    operacao ENUM('geracao', 'validacao', 'envio', 'retry') NOT NULL,
    
    -- Status
    status ENUM('sucesso', 'erro', 'aviso') NOT NULL,
    
    -- Dados
    mensagem TEXT NULL,
    detalhes_json TEXT NULL, -- JSON com detalhes
    
    -- Metadados
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    
    INDEX idx_tenant (tenant_id),
    INDEX idx_arquivo (arquivo_id),
    INDEX idx_operacao (operacao),
    INDEX idx_status (status),
    INDEX idx_created (created_at),
    FOREIGN KEY (arquivo_id) REFERENCES sped_arquivos(id) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ============================================
-- SPED CONTRIBUIÇÕES - DADOS ESPECÍFICOS
-- ============================================

CREATE TABLE IF NOT EXISTS sped_contribuicoes_dados (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    tenant_id VARCHAR(100) NOT NULL,
    arquivo_id BIGINT UNSIGNED NOT NULL,
    
    -- Dados do período
    data_inicio DATE NOT NULL,
    data_fim DATE NOT NULL,
    
    -- Totais
    total_pis DECIMAL(18,2) DEFAULT 0,
    total_cofins DECIMAL(18,2) DEFAULT 0,
    total_csll DECIMAL(18,2) DEFAULT 0,
    total_irpj DECIMAL(18,2) DEFAULT 0,
    
    -- Metadados
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    
    INDEX idx_tenant (tenant_id),
    INDEX idx_arquivo (arquivo_id),
    FOREIGN KEY (arquivo_id) REFERENCES sped_arquivos(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ============================================
-- SPED CONTÁBIL - DADOS ESPECÍFICOS
-- ============================================

CREATE TABLE IF NOT EXISTS sped_contabil_dados (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    tenant_id VARCHAR(100) NOT NULL,
    arquivo_id BIGINT UNSIGNED NOT NULL,
    
    -- Dados do período
    data_inicio DATE NOT NULL,
    data_fim DATE NOT NULL,
    
    -- Dados contábeis
    plano_contas_id BIGINT UNSIGNED NULL,
    total_lancamentos INT DEFAULT 0,
    saldo_inicial DECIMAL(18,2) DEFAULT 0,
    saldo_final DECIMAL(18,2) DEFAULT 0,
    
    -- Metadados
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    
    INDEX idx_tenant (tenant_id),
    INDEX idx_arquivo (arquivo_id),
    FOREIGN KEY (arquivo_id) REFERENCES sped_arquivos(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

