# Cálculo de Empresas Impactadas — Página Sobre Nós

## Visão Geral

O contador "Empresas Impactadas" na página `/sobre-nos` é calculado dinamicamente com base na distribuição de associados por estado e em dados econômicos do IBGE. O valor é atualizado automaticamente conforme novos associados são cadastrados.

## Fórmula

```
Impacto no Estado = Associados no Estado × Multiplicador × Fator Combinado do Estado
Total = Σ Impacto de todos os estados, arredondado para cima (dezena de milhar)
```

Onde:
- **Multiplicador**: constante `10` (estimativa de empresas indiretas por associado)
- **Fator Combinado**: `(Empresas Ativas / População) × (PIB per capita / PIB per capita nacional)`

## Arquivos Envolvidos

### 1. Dados Base (JSON)

**Arquivo:** `V2/Modules/Institucional/SobreNos/Data/empresas-impactadas-por-estado.json`

Contém os dados do IBGE para cada estado com regional SUCESU:
- População (estimativa anual)
- Empresas ativas (matrizes CNPJ)
- PIB per capita
- Fatores calculados (densidade, índice potencial, fator combinado)

**Estados cobertos:** BA, CE, MG, MS, MT, PA, PB, PE, PR, RS, SP

**Para atualizar:** Substituir os valores do JSON com dados atualizados do IBGE (fontes abaixo).

### 2. Serviço de Cálculo

**Arquivo:** `V2/Modules/Institucional/SobreNos/Services/EmpresasImpactadasCalculator.php`

Responsável por:
- Contar associados por estado (via `UnidadeRegional` → `UnidadeRegionalEmpresa`)
- Aplicar a fórmula usando os fatores do JSON
- Arredondar para cima em dezenas de milhar

**Métodos principais:**
| Método | Descrição |
|---|---|
| `getAssociadosPorEstado()` | Retorna array `[UF => count]` |
| `calcularImpactoTotal()` | Soma bruta sem arredondamento |
| `getValorArredondado()` | Valor final em milhares (para sufixo "mil+") |
| `getDetalhamento()` | Breakdown por estado |

**Constante ajustável:** `MULTIPLICADOR_NACIONAL = 10`

### 3. Widget LSE (Renderização)

**Arquivo:** `V2/Modules/Institucional/SobreNos/LseWidgets/Widgets/SobreNosCountersWidget.php`

Detecta automaticamente contadores pelo label no CMS:
- Label contendo "associado" → contagem dinâmica de `AssociadoInstituicao::active()->count()`
- Label contendo "ano" ou "história" → `date('Y') - 1965`
- Label contendo "empresa" + "impactad" → cálculo de empresas impactadas

**View de renderização:** `V2/Modules/Institucional/SobreNos/Views/lse/render/counters.blade.php`

## Fluxo de Dados

```
[CMS - v2_layout_base_configs]
         ↓ (payload JSON com seções)
[LandingSectionsEditorRendererService]
         ↓ (chama prepare() do widget)
[SobreNosCountersWidget::prepare()]
         ↓ (detecta label "empresas impactadas")
[EmpresasImpactadasCalculator]
         ↓ (lê JSON + conta associados no banco)
[Retorna valor arredondado]
         ↓
[View renderiza: "{valor} mil+"]
```

## Fontes de Dados (IBGE)

| Dado | Fonte | URL |
|---|---|---|
| População por estado | Estimativas da População | https://www.ibge.gov.br/estatisticas/sociais/populacao/9103-censo-demografico-2025.html |
| Empresas ativas por estado | CEMPRE / CNPJ | https://www.ibge.gov.br/estatisticas/economicas/comercio/9016-estatisticas-do-cadastro-central-de-empresas.html |
| PIB per capita por estado | Contas Regionais | https://www.ibge.gov.br/estatisticas/economicas/contas-nacionais/9054-contas-regionais-do-brasil.html |

## Como Atualizar no Futuro

### Atualizar dados econômicos (anual)
1. Consultar IBGE para população, empresas ativas e PIB per capita por estado
2. Recalcular fatores:
   - `densidade_empresas_por_habitante = empresas_ativas / populacao`
   - `indice_potencial = pib_per_capita / 53886.67` (média nacional)
   - `fator_combinado = densidade × indice_potencial`
3. Atualizar `empresas-impactadas-por-estado.json`

### Adicionar novo estado
1. Incluir novo estado no JSON com seus dados IBGE
2. O cálculo passa a incluir automaticamente quando houver regional ativa naquele estado

### Ajustar multiplicador
1. Alterar constante `MULTIPLICADOR_NACIONAL` em `EmpresasImpactadasCalculator.php`
2. Valor atual: `10` (dobrado do original para impacto mais significativo)

## Notas Técnicas

- **Arredondamento:** `ceil()` para cima, mínimo 10.000 (exibição: 10 mil)
- **Cache:** O valor é calculado a cada renderização (sem cache próprio). O cache de página Redis (`page.cache`) deve ser limpo após mudanças no multiplicador ou JSON.
- **SoftDeletes:** Associados inativos (`is_active = false`) são excluídos do cálculo
- **Estados sem regional:** Não contribuem para o cálculo (não aparecem no JSON)
