ALTER TABLE empresas
    ADD COLUMN codigo VARCHAR(20),
    ADD COLUMN grupo_empresarial VARCHAR(160),
    ADD COLUMN tipo_empresa VARCHAR(10) NOT NULL DEFAULT 'matriz',
    ADD COLUMN matriz_id BIGINT REFERENCES empresas(id),
    ADD COLUMN cnpj VARCHAR(14),
    ADD COLUMN inscricao_estadual VARCHAR(20),
    ADD COLUMN inscricao_municipal VARCHAR(20),
    ADD COLUMN regime_tributario VARCHAR(30) NOT NULL DEFAULT 'simples_nacional',
    ADD COLUMN cnae_principal VARCHAR(10),
    ADD COLUMN suframa VARCHAR(20),
    ADD COLUMN cep VARCHAR(8),
    ADD COLUMN logradouro VARCHAR(160),
    ADD COLUMN numero VARCHAR(20),
    ADD COLUMN complemento VARCHAR(80),
    ADD COLUMN bairro VARCHAR(80),
    ADD COLUMN municipio VARCHAR(100),
    ADD COLUMN codigo_ibge VARCHAR(7),
    ADD COLUMN uf CHAR(2),
    ADD COLUMN telefone VARCHAR(20),
    ADD COLUMN email VARCHAR(160),
    ADD COLUMN site VARCHAR(160),
    ADD COLUMN responsavel VARCHAR(120),
    ADD COLUMN ambiente_fiscal VARCHAR(15) NOT NULL DEFAULT 'homologacao',
    ADD COLUMN timezone VARCHAR(60) NOT NULL DEFAULT 'America/Manaus',
    ADD COLUMN excluido_em TIMESTAMP;
UPDATE empresas SET codigo = CAST(id AS VARCHAR), grupo_empresarial = COALESCE(NULLIF(nome_fantasia, ''), razao_social) WHERE codigo IS NULL;
ALTER TABLE empresas ALTER COLUMN codigo SET NOT NULL, ALTER COLUMN grupo_empresarial SET NOT NULL;
CREATE UNIQUE INDEX idx_empresas_codigo ON empresas (codigo);
CREATE UNIQUE INDEX idx_empresas_cnpj ON empresas (cnpj) WHERE cnpj IS NOT NULL AND cnpj <> '';
CREATE INDEX idx_empresas_matriz ON empresas (matriz_id);
