-- Tabela de mapeamento NCM -> CEST
-- Baseado na Convenção ICMS 142/2018 e atualizações da Receita Federal

CREATE TABLE IF NOT EXISTS fiscal_ncm_cest (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    ncm VARCHAR(8) NOT NULL COMMENT 'Código NCM (8 dígitos)',
    cest VARCHAR(7) NOT NULL COMMENT 'Código CEST (7 dígitos)',
    descricao TEXT NULL COMMENT 'Descrição do produto/CEST',
    ativo BOOLEAN NOT NULL DEFAULT TRUE COMMENT 'Se o mapeamento está ativo',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    INDEX idx_ncm (ncm),
    INDEX idx_cest (cest),
    INDEX idx_ncm_cest (ncm, cest),
    INDEX idx_ativo (ativo),
    UNIQUE KEY uk_ncm_cest (ncm, cest)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Mapeamento NCM para CEST';

-- Inserir mapeamentos iniciais mais comuns
INSERT INTO fiscal_ncm_cest (ncm, cest, descricao, ativo) VALUES
-- Bebidas
('22021000', '2800100', 'Água mineral, gasosa ou não', TRUE),
('22029000', '2800100', 'Outras águas', TRUE),
('22030000', '2800200', 'Cervejas', TRUE),
('22041000', '2800300', 'Vinhos', TRUE),
('22042100', '2800300', 'Vinhos espumantes', TRUE),
('22042900', '2800300', 'Outros vinhos', TRUE),

-- Refrigerantes
('22011000', '2800400', 'Águas, incluindo águas minerais', TRUE),
('22019000', '2800400', 'Outras águas', TRUE),

-- Cigarros
('24022000', '2800500', 'Cigarros', TRUE),
('24029000', '2800500', 'Charutos e outros produtos do tabaco', TRUE),

-- Combustíveis
('27101259', '2800600', 'Gasolina', TRUE),
('27101251', '2800600', 'Gasolina', TRUE),
('27101921', '2800700', 'Diesel', TRUE),
('27101929', '2800700', 'Diesel', TRUE),

-- Produtos de limpeza
('34011190', '2800800', 'Sabões e detergentes', TRUE),
('34011900', '2800800', 'Outros sabões', TRUE),
('34012000', '2800800', 'Detergentes', TRUE),

-- Produtos alimentícios
('19059090', '2800900', 'Biscoitos e bolachas', TRUE),
('19053100', '2800900', 'Biscoitos doces', TRUE),
('19053200', '2800900', 'Biscoitos salgados', TRUE),

-- Bebidas alcoólicas
('22083000', '2801000', 'Aguardente', TRUE),
('22084000', '2801000', 'Rum', TRUE),
('22085000', '2801000', 'Gin', TRUE),
('22086000', '2801000', 'Vodka', TRUE),
('22087000', '2801000', 'Licores', TRUE),

-- Produtos de higiene pessoal
('33030000', '2801100', 'Perfumes', TRUE),
('33041000', '2801200', 'Produtos de maquiagem', TRUE),
('33049900', '2801200', 'Outros cosméticos', TRUE),
('33051000', '2801300', 'Xampus', TRUE),
('33052000', '2801300', 'Condicionadores', TRUE),

-- Autopeças
('87089900', '2801400', 'Autopeças', TRUE),
('87084099', '2801400', 'Autopeças', TRUE),

-- Eletrônicos
('85171200', '2801500', 'Telefones celulares', TRUE),
('85171300', '2801500', 'Smartphones', TRUE),
('85287200', '2801600', 'Monitores', TRUE),
('85287210', '2801600', 'Monitores LCD', TRUE),

-- Roupas e calçados
('64039900', '2801700', 'Calçados', TRUE),
('64041900', '2801700', 'Calçados esportivos', TRUE),
('61091000', '2801800', 'Camisetas', TRUE),
('61102000', '2801800', 'Suéteres', TRUE),

-- Materiais de construção
('69089000', '2801900', 'Cerâmicas', TRUE),
('69079100', '2801900', 'Azulejos', TRUE),
('69079200', '2801900', 'Ladrilhos', TRUE),

-- Produtos farmacêuticos
('30049099', '2802000', 'Medicamentos', TRUE),
('30041011', '2802000', 'Antibióticos', TRUE),
('30042029', '2802000', 'Vitaminas', TRUE),

-- Alimentos processados
('16041400', '2802100', 'Salsichas e embutidos', TRUE),
('16010000', '2802100', 'Carnes e miudezas', TRUE),

-- Laticínios
('04011000', '2802200', 'Leite pasteurizado', TRUE),
('04012000', '2802200', 'Leite UHT', TRUE),
('04022100', '2802200', 'Leite em pó', TRUE),

-- Óleos e gorduras
('15091000', '2802300', 'Óleo de oliva', TRUE),
('15121900', '2802300', 'Óleo de soja', TRUE),
('15141100', '2802300', 'Óleo de palma', TRUE),

-- Açúcar
('17011400', '2802400', 'Açúcar cristal', TRUE),
('17019900', '2802400', 'Açúcar refinado', TRUE),

-- Produtos de papel
('48101300', '2802500', 'Papel higiênico', TRUE),
('48101900', '2802500', 'Papel toalha', TRUE),

-- Produtos de plástico
('39249000', '2802600', 'Utensílios de plástico', TRUE),
('39241000', '2802600', 'Copos de plástico', TRUE),

-- Produtos têxteis
('63079000', '2802700', 'Roupas de cama', TRUE),
('63049200', '2802700', 'Travesseiros', TRUE),

-- Equipamentos elétricos
('85165000', '2802800', 'Secadores de cabelo', TRUE),
('85163100', '2802800', 'Chapinhas', TRUE)

ON DUPLICATE KEY UPDATE 
    descricao = VALUES(descricao),
    ativo = TRUE,
    updated_at = CURRENT_TIMESTAMP;

