-- Tabela de configuração de NFSe por município
CREATE TABLE IF NOT EXISTS config_nfse (
    id INT AUTO_INCREMENT PRIMARY KEY,
    codemp INT NOT NULL,
    codmunic VARCHAR(7) NOT NULL COMMENT 'Código IBGE do município',
    cidade VARCHAR(100) NOT NULL,
    uf VARCHAR(2) NOT NULL,
    
    -- Tipo de sistema NFSe
    sistema_nfse VARCHAR(50) NOT NULL COMMENT 'ABRASF, GISS, GOVERNA, IPM, BETHA, etc',
    versao_nfse VARCHAR(20) DEFAULT '2.0',
    
    -- URLs dos webservices
    url_homologacao TEXT,
    url_producao TEXT,
    
    -- Credenciais
    usuario_webservice VARCHAR(100),
    senha_webservice VARCHAR(255),
    token_webservice VARCHAR(255),
    
    -- Configurações tributárias
    aliquota_iss DECIMAL(5,2) DEFAULT 2.00 COMMENT 'Alíquota padrão ISS em %',
    codigo_servico_padrao VARCHAR(20) COMMENT 'Código LC 116/2003 padrão',
    codigo_tributacao_municipal VARCHAR(20),
    
    -- Configurações de numeração
    serie_nfse VARCHAR(5) DEFAULT '1',
    serie_rps VARCHAR(5) DEFAULT '1',
    tipo_rps INT DEFAULT 1 COMMENT '1=RPS, 2=Nota Conjugada, 3=Cupom',
    
    -- Configurações específicas
    retem_iss CHAR(1) DEFAULT 'N' COMMENT 'S=Sim, N=Não',
    exige_certificado CHAR(1) DEFAULT 'S' COMMENT 'S=Certificado, N=Usuario/Senha',
    
    -- Controle
    ativo CHAR(1) DEFAULT 'S',
    ambiente INT DEFAULT 2 COMMENT '1=Produção, 2=Homologação',
    
    -- Observações
    observacoes TEXT,
    
    -- Auditoria
    dtcadastro DATETIME DEFAULT CURRENT_TIMESTAMP,
    dtatualizacao DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    
    UNIQUE KEY uk_codemp_codmunic (codemp, codmunic),
    INDEX idx_codmunic (codmunic),
    INDEX idx_sistema (sistema_nfse)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
COMMENT='Configurações de NFSe por município para sistema multiempresa';

-- Tabela de códigos de serviço por empresa
CREATE TABLE IF NOT EXISTS nfse_codigos_servico (
    id INT AUTO_INCREMENT PRIMARY KEY,
    codemp INT NOT NULL,
    codigo_cnae VARCHAR(10) NOT NULL,
    descricao_cnae VARCHAR(255),
    
    -- Códigos municipais
    codigo_lista_servico VARCHAR(10) NOT NULL COMMENT 'Código LC 116/2003',
    codigo_tributacao_municipal VARCHAR(20),
    
    -- Tributação
    aliquota_iss DECIMAL(5,2) DEFAULT 2.00,
    item_lista_servico VARCHAR(10),
    
    -- Retenções
    iss_retido CHAR(1) DEFAULT 'N',
    pis_retido CHAR(1) DEFAULT 'N',
    cofins_retido CHAR(1) DEFAULT 'N',
    inss_retido CHAR(1) DEFAULT 'N',
    ir_retido CHAR(1) DEFAULT 'N',
    csll_retido CHAR(1) DEFAULT 'N',
    
    ativo CHAR(1) DEFAULT 'S',
    dtcadastro DATETIME DEFAULT CURRENT_TIMESTAMP,
    
    UNIQUE KEY uk_codemp_cnae (codemp, codigo_cnae),
    INDEX idx_lista_servico (codigo_lista_servico)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
COMMENT='Códigos de serviço e tributação municipal por empresa';

-- Inserir configurações padrão para desenvolvimento
INSERT INTO config_nfse (codemp, codmunic, cidade, uf, sistema_nfse, versao_nfse, aliquota_iss, ambiente) 
VALUES 
(9999, '0000000', 'CIDADE EXEMPLO', 'SP', 'ABRASF', '2.0', 2.00, 2)
ON DUPLICATE KEY UPDATE 
    cidade = VALUES(cidade),
    sistema_nfse = VALUES(sistema_nfse);

-- Códigos de serviço mais comuns (LC 116/2003)
INSERT INTO nfse_codigos_servico (codemp, codigo_cnae, descricao_cnae, codigo_lista_servico, item_lista_servico, aliquota_iss)
VALUES
(9999, '6201-5/00', 'Desenvolvimento de programas de computador sob encomenda', '0107', '01.07', 2.00),
(9999, '6202-3/00', 'Desenvolvimento e licenciamento de programas de computador customizáveis', '0107', '01.07', 2.00),
(9999, '6203-1/00', 'Desenvolvimento e licenciamento de programas de computador não customizáveis', '0107', '01.07', 2.00),
(9999, '6209-1/00', 'Suporte técnico, manutenção e outros serviços em tecnologia da informação', '0107', '01.07', 2.00),
(9999, '7490-1/03', 'Serviços de consultoria em gestão empresarial', '1701', '17.01', 5.00),
(9999, '8599-6/99', 'Outras atividades de ensino não especificadas anteriormente', '0801', '08.01', 2.00)
ON DUPLICATE KEY UPDATE 
    descricao_cnae = VALUES(descricao_cnae),
    codigo_lista_servico = VALUES(codigo_lista_servico);

-- Adicionar coluna na tabela sgprefere para vincular config
ALTER TABLE sgprefere 
ADD COLUMN IF NOT EXISTS usa_nfse CHAR(1) DEFAULT 'N' COMMENT 'S=Empresa emite NFSe',
ADD COLUMN IF NOT EXISTS id_config_nfse INT COMMENT 'FK para config_nfse',
ADD INDEX IF NOT EXISTS idx_config_nfse (id_config_nfse);
